Page 1 sur 2
enregistré état d'un selecteur dans variable
Publié : 07 févr. 2018, 12:51
par lekeb
Bonjour à tous,
je commence a découvrir l'utilisation des variables dans domoticz, car j'en ai pas eu besoin jusqu'à présent.
J'ai mis en place des détecteurs d'ouverture de fenêtre (via arduino et my sensor), mais j'aimerais maintenant écrire un script lua qui me permet lors de l'ouverture de la fenêtre de passer le chauffage en mode arrêt et à la refermeture de la fenêtre de revenir à l’état du chauffage avant ouverture (j'appliquerais certainement un délai).
Pour cela j'avais idée, d'enregistrer l’état de mon sélecteur chauffage au moment de l'ouverture de la fenetre dans une variable et de l'utiliser ensuite pour redefinir l'etat du selecteur en fonction de la variable.
Cette solution est-elle possible? est-elle la plus pertinente?
J'avais commence à ecrire quelques lignes pour enregistrer dans une variable mais cela ne marche pas
Code : Tout sélectionner
commandArray = {}
if (devicechanged['fenetre test'] == 'On' and otherdevices['Chauffage chambre parents'] == 'Eco') then
commandArray['Variable:Chauff parent'] = tostring(Eco)
end
MErci d'avance pour votre aide!
Re: enregistré état d'un selecteur dans variable
Publié : 07 févr. 2018, 14:11
par Fredok
Bonjour, s'il faut juste ecrire "Eco" dans la variable ? ou bien ecrire le contenu de Eco ?
pour la première hypothèse :
commandArray['Variable:Chauff parent'] = "Eco"
bye
Re: enregistré état d'un selecteur dans variable
Publié : 07 févr. 2018, 15:29
par lekeb
ok merci, dans mon idée c'est la première hypothèse! Je veux écrire le statut de mon sélecteur chauffage dans une variable
je vais essayé cela ce soir!
j'ai du mal a comprendre encore quand utilisé le tostring!!!
Re: enregistré état d'un selecteur dans variable
Publié : 07 févr. 2018, 16:17
par vil1driver
Salut,
Peut être compliqué..
Quand la fenêtre est ouverte il se passera quoi concrètement ?
Car si c'est juste,
Je chauffe selon le selecteur si fenêtre fermée
Ou je ne chauffe pas (ou consigne minorée) si ouverte
Tu dois pouvoir te passer d'utiliser les variables utilisateur
Et ça à le mérite de ne pas supprimer la possibilité d'un changement niveau selecteur (planning) pendant que la fenêtre est ouverte
Re: enregistré état d'un selecteur dans variable
Publié : 07 févr. 2018, 21:47
par lekeb
Quand la fenêtre est ouverte je veux mettre mon sélecteur chauffage sur arrêt.
Je laisse gérer la température par les radiateurs et leur envoie l'ordre (confort, eco, arret ou hors-gel) suivant un planning.
Donc comment remettre mon sélecteur sur sa position avant ouverture de la fenetre sans enregistré son etat ou préalable?
Fredok, ta commande fonctionne, j'arrive bien a changé ma variable! merci
Je continue a explorer
edit : voila le script lua que j'envisageais
Code : Tout sélectionner
commandArray = {}
if (devicechanged['fenetre test'] == 'On'and otherdevices['Chauffage chambre parents'] == 'Eco') then
commandArray[1]={['Variable:Chauff parent'] = "Eco"}
commandArray[2]={['Chauffage chambre parents'] = 'Set Level: 10'}
end
if (devicechanged['fenetre test'] == 'On'and otherdevices['Chauffage chambre parents'] == 'Confort') then
commandArray[1]={['Variable:Chauff parent'] = "Confort"}
commandArray[2]={['Chauffage chambre parents'] = 'Set Level: 10'}
end
if (devicechanged['fenetre test'] == 'Off' and otherdevices['Variable:Chauff parent'] == 'Eco') then
commandArray['Chauffage chambre parents'] = 'Set Level: 30'
end
if (devicechanged['fenetre test'] == 'Off' and otherdevices['Variable:Chauff parent'] == 'Confort') then
commandArray['Chauffage chambre parents'] = 'Set Level: 20'
end
return commandArray
Ma variable s'update bien, mais lors que je ferme la fenetre, le selecteur chauffage ne change pas. Je pense que je lis pas bien encore l'etat de ma variable.
Re: enregistré état d'un selecteur dans variable
Publié : 07 févr. 2018, 22:32
par lekeb
voila mon code qui fonctionne.
Code : Tout sélectionner
commandArray = {}
if (devicechanged['fenetre test'] == 'On'and otherdevices['Chauffage chambre parents'] == 'Eco') then
commandArray[1]={['Variable:Chauff parent'] = "Eco"}
commandArray[2]={['Chauffage chambre parents'] = 'Set Level: 10'}
end
if (devicechanged['fenetre test'] == 'On'and otherdevices['Chauffage chambre parents'] == 'Confort') then
commandArray[1]={['Variable:Chauff parent'] = "Confort"}
commandArray[2]={['Chauffage chambre parents'] = 'Set Level: 10'}
end
if (devicechanged['fenetre test'] == 'Off' and uservariables["Chauff parent"] == "Eco") then
commandArray['Chauffage chambre parents'] = 'Set Level: 30'
end
if (devicechanged['fenetre test'] == 'Off' and uservariables["Chauff parent"] == "Confort") then
commandArray['Chauffage chambre parents'] = 'Set Level: 20'
end
return commandArray
Je dois rajouter maintenant un timer, car je veux que l'ordre de chauffage soit envoyer 5 min apres la fermeture de la fenetre seulement elle a ete ouverte plus de 30s...
Si vous avez des suggestions pour ameliorer tout ca je suis preneur
Re: enregistré état d'un selecteur dans variable
Publié : 08 févr. 2018, 03:49
par vil1driver
Si ton selecteur est juste un truc pris en compte dans un script de chauffage je pensais a cela
Si fenêtre fermée alors
Selecteur = selecteur
Sinon
Selecteur = arrêt
Fin
Si selecteur = eco alors
...
Sinon si selecteur = confort
...
Sinon si selecteur = arrêt
...
Mais j'ai pas bien saisi ton histoire de mode eco confort suivant planning
Tu as 2 façons différentes de pilotage ?
Autrement tu dit que même fenêtre ouverte tu comptes laisser tes chauffages tourner à fond en mode confort si c'est dans le planning ?
J'ai du mal à comprendre l'intérêt..
Re: enregistré état d'un selecteur dans variable
Publié : 08 févr. 2018, 10:27
par lekeb
Merci de ta contribution! je vais essayer d'etre plus clair.
J'ai un selecteur "chauffage chambre parent" qui envoie l'ordre au fil pilote de mon radiateur confort, eco, arret ou hors-gel.
Les modes eco et confort sont gerer en fonction d'un planning.
Lorsque j'ouvre la fenetre de la chambre plus d'une minute, je veux que le radiateur se mette en mode arrêt (qu'il soit en eco ou confort suivant le planning), par contre lorsque je referme la fenetre, je veux qu'il se remette dans le mode qu'il etait avant l'ouverture de la fenetre avec un delai de 5min.
ce qui donnerait
si fenetre ouvert plus de 1 min = mettre selecteur en arret
si fenetre fermé = remettre le selecteur dans son mode precedent (eco ou confort) au bout de 5min
Le script que j'ai fait semble me donner ce résultat je dois y ajouter les "timing" et certainement utilisé des elseif pour optimiser le code.
Mais j'aimerais savoir si c'est la façon la plus élégante de faire. En sachant que ce sript sera par la suite utilisé pour toute les fenêtres et porte de la maison.
Re: enregistré état d'un selecteur dans variable
Publié : 08 févr. 2018, 19:02
par landaisbenj
Oui, purement, si un sélecteur change d’état, difficile de le remettre dans son ancien état (si rien n'est codé en amont). (J'avais un peu demandé conseil justement sur ces changements d’état. Quand un device passe de On a On on ne peut pas savoir si c'est un passage de Off a On)
Mais je pense que vil1driver se demande pourquoi tu veux enregistrer un etat, car logiquement, ce selecteur est sensé se debrouillé tout seul. Exemple:
Si tu est en mode confort de 6h a 8h et eco de 8h a 19h. Alors si tu ferme ta fenetre a 7h45 alors forcement tu doit revenir au mode confort.... Si tu la ferme a 12h forcement ce sera le mode eco... D’où la question.
De plus pour un planning, si tu ouvre la fenetre a 7h45 et que tu la ferme a 8h15 dans quel etat doit tu te trouvé?
Sauf que cela dépend de comment tu fais le changement d’état (A la main, codé ou planifié). Car si c'est planifié alors suivant l'heure ou tu ferme tu reprend un etat logique, si c'est codé je pense qu'il faut l'inclure dans le code d'origine pour re vérifier l'etat...
Pour ton code, je simplifierai un peu. Déjà, il s'agit d'action que sur la fenêtre, si j'ouvre ou si je ferme.
Ta temporisation d'une minute pose problème (et je pense qu'elle ne sert pas a grand chose) Donc je commence par la fermeture car trop compliqué.
Si je ferme la fenêtre, je vérifie l’état du chauffage et suivant l’état j'applique la variable au sélecteur.
En suite j'enregistre l’état de radiateur et je le coupe dans une minute:
Code : Tout sélectionner
commandArray = {}
--Si je ferme ma fenetre
if devicechanged['fenetre test'] == 'Off' then
-Alors si la variable est eco je met eco au radiateur
if uservariables["Chauff parent"] == "Eco" then
commandArray['Chauffage chambre parents'] = 'Set Level: 30'
-- sinon si ma variable est confort je met confort au radiateur
elseif uservariables["Chauff parent"] == "Confort" then
commandArray['Chauffage chambre parents'] = 'Set Level: 20'
end
-- sinon si ma fenetre s'ouvre j'enregistre l'etat de radiateur dans ma variable et je passe mon radiateur a off dans 60 s
elseif devicechanged['fenetre test'] == 'On' then
commandArray[1]={['Variable:Chauff parent'] = otherdevices['Chauffage chambre parents']}
commandArray[2]={['Chauffage chambre parents'] = 'Off AFTER 60'}
--la commande au dessus je ne suis pas sur de deux choses: 1/ si elle fonctionne 2/ si le changement d'etat lors de ma fermeture annule ce timer dans le cas ou tu as fermé ta fenetre avant le timer....
end
Re: enregistré état d'un selecteur dans variable
Publié : 08 févr. 2018, 20:21
par vil1driver
Je pensais à tort que le selecteur était un élément dans un script..
Tu peux peut-être t'inspirer du script time mis en demo dans le dossier lua