Page 3 sur 3
Re: aide script lua chauffage
Publié : 10 déc. 2020, 21:53
par vr6man
Merci Keros pour ta réponse mais je vois pas dans ton Tuto des explications et surtout comment transposer l'exemple lua pour mon besoin
Franchement c'est loin d'être clair quand on débute ces exemples surtout si tu parts de zéro ...
Re: aide script lua chauffage
Publié : 10 déc. 2020, 22:13
par Keros
Tu as cet
article sur le blog qui explique les choses.
En gros voilà ce que fait le code :
Code : Tout sélectionner
commandArray = {}
for deviceName,deviceValue in pairs(devicechanged) do -- Ici ça boucle sur tous les devices dont la valeur vient d'être modifier
print ("Device based event fired on '"..deviceName.."', value '"..tostring(deviceValue).."'"); -- là on fait un print indiquant quel device vient d'être modifiée
if (deviceName=='myDevice') then -- On test maintenant si le device modifié est celui que l'on souhaite. C'est là qu'on définit "quand" le script doit s'éxécuter.
if deviceValue == "On" then -- On fait des actions en fonction de ça valeur ou d'autres valeurs. C'est là que commence le coeur du script : toute la partie avant ne sert qu'au lancement du script
print("Device is On")
elseif deviceValue == "Off" then
print("Device is Off")
end
end
end
return commandArray
Re: aide script lua chauffage
Publié : 10 déc. 2020, 22:22
par Keros
Un programme est généralement décomposer de la façon suivante :
- Un élément déclencheur : un device ou le temps
- une (ou des) condition(s) à vérifier : est que l'élément déclencheur à une certaine valeur ? Est-ce que d'autres devices ont une valeur particulière ?
- une (ou des) action(s) à faire : changer un device, faire un print, ouvrir une url, envoyer une notification, etc ...
Une fois que tu auras défini chaque éléments, tu les rentres dans le code au bon endroit et normalement ça doit fonctionner. A minima tu devrais avoir des erreurs, et là, il faut déboguer avec des print, quite à en mettre pour chaque information.
Re: aide script lua chauffage
Publié : 11 déc. 2020, 18:56
par vr6man
ok donc voila d'après mon interpétation
Code : Tout sélectionner
commandArray = {}
for deviceName,deviceValue in pairs(devicechanged) do
print ("Device based event fired on '"..deviceName.."', value '"..tostring(deviceValue).."'");
if (deviceName=='Chauffage') then
if deviceValue == "On" then
commandArray['Chauffage ZONE Pieces Vie']='Set Level 50'
print("Chauffage ZONE Pieces Vie en mode confort")
commandArray['Chauffage ZONE Chambres']='Set Level 50'
print("Chauffage ZONE Pieces Chambres en mode confort")
elseif deviceValue == "Off" then
commandArray['Chauffage ZONE Pieces Vie']='Set Level 20'
print("Chauffage ZONE Pieces Vie en mode eco")
commandArray['Chauffage ZONE Chambres']='Set Level 20'
print("Chauffage ZONE Pieces Chambres en mode eco")
end
end
if (deviceName=='Absence') then
if deviceValue == "On" then
commandArray['Chauffage ZONE Pieces Vie']='Set Level 10'
print("Chauffage ZONE Pieces Vie en mode hors gel")
commandArray['Chauffage ZONE Chambres']='Set Level 10'
print("Chauffage ZONE Pieces Chambres en mode hors gel")
end
end
end
return commandArray
je veux que :
Un élément déclencheur : Chauffage
une (ou des) condition(s) à vérifier : si Chauffage = On => allumage en mode confort Chauffage ZONE Pieces Vie et 'Chauffage ZONE Chambres
si chauffage =Off allumage en mode eco Chauffage ZONE Pieces Vie et 'Chauffage ZONE Chambres
si Absence = On => passer Chauffage ZONE Pieces Vie et 'Chauffage ZONE Chambres en mode hors gel
tu en penses quoi
Re: aide script lua chauffage
Publié : 11 déc. 2020, 19:15
par Keros
Avec le code que tu as, tu as deux éléments déclencheurs : 'Chauffage' et 'Absence' c'est normal ?
Je pense que c'est pas mal. Tu n'as pas testé ?
Si tu as un soucis sur les set level, essaye ceci 'Set Level:10'
Re: aide script lua chauffage
Publié : 11 déc. 2020, 19:20
par vr6man
oui c'est ca pour les 2 déclencheurs
non pas encore testé je voulais pas planter domoticz pour rien
Re: aide script lua chauffage
Publié : 11 déc. 2020, 20:42
par vr6man
bon alors test effectué cela fonctionne bien
je comprends mieux le fonctionnement
Par contre une question
je met absence = On => les devices Chauffage ZONE Chambres et Chauffage ZONE Pieces Vie passe bien en hors gel (pas de soucis)
par contre si je commande à la main Chauffage ZONE ou Chambres et Chauffage ZONE Pieces Vie je peux passer en mode confort alors qu'absence est à On
a ton avis
Re: aide script lua chauffage
Publié : 11 déc. 2020, 21:45
par Keros
Un programme c'est très con : il exécute ce qu'on lui a indiqué de faire.
Dans ton programme, tu indiques que si tu passes Absence à On alors passe les radiateurs en mode hors gel. En fait cette action n'est exécuté qu'une seule fois au moment du passage d'Absence à On.
Quand tu passes tes radiateurs à On, ton programme n'a aucune action là dessus > tes radiateurs peuvent passer en mode Confort.
Si tu souhaites vérifier si Absence est à On, il te faut avoir la possibilité de bloquer ta commande avant qu'elle ne soit transmise aux radiateurs. Le moyen serait d'utiliser un interrupteur virtuel pour commander tes radiateurs. Et là, quand l'interrupteur virtuel change, tu peux vérifier la condition de Absence avant de transférer la commande au radiateur.
C'est possible, mais complexe à gérer. Mais si tu te mets sur le device physique, tu ne pourras bloquer sa commande. Grosso modo, ton device physique existe mais il ne faut plus l’utiliser et passer par des devices virtuels dont les ordres seront gérer par ta programmation.
Ce qui sera également compliqué, c'est gérer l'état des devices virtuels quand les ordres seront bloqués. Je m'explique :
Tu passes ton bouton à On mais l'ordre est arrêté car Absence est à On > le radiateur reste à Off pourtant le bouton est à On.
Tu vois le soucis.
Tu peux vite rentrer dans une usine à gaz.
Re: aide script lua chauffage
Publié : 11 déc. 2020, 22:04
par vr6man
merci de ton aide
en tout ca j'ai compris grâce a tes explications et pas grâce aux exemples de script lua
Sinon comment tu fais en lua pour activer un switch en fonction d'un jour et d'une heure
1ere question:
peux on mettre plusieurs condition avec meme valeur dans if (deviceName=='xxx') then
de ce type:
if (deviceName=='xxx' and deviceName=='yyy') then
ou de ce type:
if (deviceName=='xxx' or deviceName=='yyy') then
2eme question
Comment mettre plusieurs conditions avec des valeurs différentes
Re: aide script lua chauffage
Publié : 12 déc. 2020, 08:19
par Keros
vr6man a écrit : 11 déc. 2020, 22:04comment tu fais en lua pour activer un switch en fonction d'un jour et d'une heure
Alors, est-ce que tu as besoin que ce soit absolument fait en lua ? Il y a la fonction Planning sur les boutons. Regarde peut-etre pour ajouter ce plugin
https://github.com/syrhus/domoticz-weekly-planning de syrhus, c'est super pratique.
Maintenant, pour le faire en programmation, il faut faire un script qui tourne en fonction du temps (Trigger Time) : il s’exécutera toutes les minutes. Ensuite il faut faire des conditions sur la valeur du temps (la syntaxe est indiquée là :
https://www.lua.org/pil/22.1.html)
Le code est par exemple :
Cette info était dispo là
https://easydomoticz.com/mon-premier-script-lua-dans-domoticz-la-mise-en-oeuvre
vr6man a écrit : 11 déc. 2020, 22:04peux on mettre plusieurs condition avec même valeur dans if (deviceName=='xxx') then
Alors
if (deviceName=='xxx' and deviceName=='yyy') then ne fonctionnera jamais !!
Pourquoi ? Tu es derrière un boucle qui passe en revu tous les devices qui ont changé et ça les passe un par un. Tu ne peux pas avoir deux devices qui valide ces deux conditions en même temps.
Concernant,
if (deviceName=='xxx' or deviceName=='yyy') then ça peut fonctionner mais dans une situation particulière : tout ce que tu exécuteras derrière devra être valable pour les deux devices (exemple deux interrupteurs qui auraient les mêmes actions)
Mais comme tu commences à comprendre, je te conseille de séparer la gestion de l'évènement déclencheur des conditions à vérifier. Par exemple :
Code : Tout sélectionner
for deviceName,deviceValue in pairs(devicechanged) do
if (deviceName=='Chauffage') then
if deviceValue == "On" and otherdevices['Absence']=='Off' then
Tu es ainsi sûr de ne pas oublier ton évènement déclencheur.
vr6man a écrit : 11 déc. 2020, 22:04Comment mettre plusieurs conditions avec des valeurs différentes
Tu rajoutes les conditions les unes à la suite des autres avec un
and.
Maintenant que ton script à une bonne base, il ne devrait pas planter ton DomoticZ et tu devrais voir les erreurs dans les logs de DomoticZ.
Tu fais un petit bout de code et tu tests :
- j'ai une erreur : je vérifie les commandes que j'ai écrites. Après, je rajoute des prints pour vérifier que le script tourne avec les bonnes infos.
- ça fonctionne : je rajoute une condition et je retest de suite. Si j'ai une erreur, elle provient normalement e la dernière chose que j'ai rajouter, etc ....