enregistré état d'un selecteur dans variable

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
lekeb
Messages : 8
Inscription : 24 janv. 2018, 10:37

enregistré état d'un selecteur dans variable

Message 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!
Domotivz v3.8153
Raspberry pi2
one wire : DS18b20
"mysensor" gateway : DHT22, BME280, ACS712, IR, PIR, door sensor, water pressure ...
Mi-light gateway
GPIO fil pilote, teleinfo EDF
Fredok
Messages : 90
Inscription : 12 août 2016, 15:04

Re: enregistré état d'un selecteur dans variable

Message 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
Opi
RFXCOM
RFLINK 433 & 315
Mysensors
Wifi & Mqtt
EspEasy - Tasmota
Zigate+
lekeb
Messages : 8
Inscription : 24 janv. 2018, 10:37

Re: enregistré état d'un selecteur dans variable

Message 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!!!
Domotivz v3.8153
Raspberry pi2
one wire : DS18b20
"mysensor" gateway : DHT22, BME280, ACS712, IR, PIR, door sensor, water pressure ...
Mi-light gateway
GPIO fil pilote, teleinfo EDF
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: enregistré état d'un selecteur dans variable

Message 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
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
lekeb
Messages : 8
Inscription : 24 janv. 2018, 10:37

Re: enregistré état d'un selecteur dans variable

Message 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.
Domotivz v3.8153
Raspberry pi2
one wire : DS18b20
"mysensor" gateway : DHT22, BME280, ACS712, IR, PIR, door sensor, water pressure ...
Mi-light gateway
GPIO fil pilote, teleinfo EDF
lekeb
Messages : 8
Inscription : 24 janv. 2018, 10:37

Re: enregistré état d'un selecteur dans variable

Message 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... :D

Si vous avez des suggestions pour ameliorer tout ca je suis preneur
Domotivz v3.8153
Raspberry pi2
one wire : DS18b20
"mysensor" gateway : DHT22, BME280, ACS712, IR, PIR, door sensor, water pressure ...
Mi-light gateway
GPIO fil pilote, teleinfo EDF
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: enregistré état d'un selecteur dans variable

Message 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..
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
lekeb
Messages : 8
Inscription : 24 janv. 2018, 10:37

Re: enregistré état d'un selecteur dans variable

Message 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.
Domotivz v3.8153
Raspberry pi2
one wire : DS18b20
"mysensor" gateway : DHT22, BME280, ACS712, IR, PIR, door sensor, water pressure ...
Mi-light gateway
GPIO fil pilote, teleinfo EDF
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: enregistré état d'un selecteur dans variable

Message 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
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: enregistré état d'un selecteur dans variable

Message 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
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Répondre