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 :

Code : Tout sélectionner

if os.date("%H:%M") == "06:30" then
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 ....