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 <\>.
Boum a raison concernant la condition else. J'ai voulu aller vite pour déboguer et ce n'est pas très propre. Enfin, normalement tu aurais dû t'en rendre compte avec ton script qui s’exécutait en dehors d'une modif de Etat-Porte-garage-David. D'ailleurs, je n'aime pas trop cette condition qui en combine deux l'une avec l'autre : j'utilise d’habitude le style de code de boum :
if devicechanged['Etat-Porte-garage-David'] then
-- Le dispositif nommé Etat-Porte-garage-David vient de changer d'état
print("Etat porte : " .. otherdevices['Etat-Porte-garage-David'])
if devicechanged['Etat-Porte-garage-David'] == 'Unlocked' then
print("Garage vient de passer en unlocked")
elseif devicechanged['Etat-Porte-garage-David'] == 'Locked' then
print("Garage vient de passer en locked")
else
print(Condition de garage non reconnue")
end
end
Avec ce débogage, tu as la valeur de ton capteur quand il change et la vérification que tes conditions sont fonctionnelles (je ne sais pas si les valeurs locked et unlocked sont bien les bonnes). C'est à tester.
Après, tu conserves ce qui fonctionne et tu rajoutes les autres étapes que tu souhaites.
Merci à vous.
Comme je le disais je ne savais pas que de mettre device dans le trigger allez générer cela à chaque changement d'un capteur ou autre, je pensais que ce n'était lié qu'aux déclarations faites dans le script en lui même.
Du coup je comprend la 1ière condition, en gros on exécute le script qu'à un moment de changement de capteur en lui même.
J'ai tapé ton script, apporté une rikiki correction sur un guillemet et voici le résultat :
(Domoticz reconnaît bien donc les conditions de déclenchement "Locked et Unlocked". Je devrai pouvoir m'en servir pour allumer telle ou telle chose non ? Ou je loupe encore une étape ?
2022-01-26 13:09:21.179 Status: User: david (IP: ) initiated a switch command (587/Porte-garage-David/On)
2022-01-26 13:09:22.187 AEOTEC-GEN5: OpenZWave: Domoticz has send a Switch command! NodeID: 11 (0x0b)
2022-01-26 13:09:22.195 AEOTEC-GEN5: Light/Switch (Porte-garage-David)
2022-01-26 13:09:46.767 AEOTEC-GEN5: General/Alarm (Alarm Type: Access Control 6 (0x06))
2022-01-26 13:09:46.775 AEOTEC-GEN5: Light/Switch (Unknown)
2022-01-26 13:09:46.827 AEOTEC-GEN5: Light/Switch (Etat-porte-garage-David)
2022-01-26 13:09:46.766 Status: AEOTEC-GEN5: OpenZWave: Alarm received (Access Control: Door/Window Open), NodeID: 12 (0x0c)
2022-01-26 13:09:46.836 Status: LUA: Etat porte : Unlocked
2022-01-26 13:09:46.836 Status: LUA: Garage vient de passer en unlocked
En gros, tous les scripts de type Device se lancent quand il y a un objet qui change de valeur. On ne déclenche pas un script pour un objet, on limite l'exécution d'une partie du script en fonction des objets souhaités.
Maintenant que tes conditions sont bonnes, tu peux rajouter des commandes pour effectuer des actions. Ou bien rajouter d'autres conditions pour vérifier d'autres choses avant de faire d'autres actions.
Merci, je vais farfouiller pour comprendre pourquoi je n'y étais pas arrivé avant... Et en plus dans cette discussion j'ai appris le fonctionnement du trigger device !
Le trigger time, comment fonctionne t-il stp ? Time = temps, mais pourtant lorsque dans un autre script, le trigger time ne faisait rien, le script fonctionne qu'avce un trigger device.
Le script i(idem que celui de ma parte de garage lol) :
Un script avec un trigger Time est exécuté toutes les minutes. Les conditions permettent par exemple seulement de laisser s'exécuter une partie du code lorsque les minutes sont égales à 00 (soit toutes les heures) ou à une heure précise.
Par contre, dedans plus de devicechanged
C'est comme pour les devices, tu ne déclenches pas un script à une heure précise : tu détermines le moment où il s'exécute et si ça correspond à l'heure que tu souhaites, là tu fais fonctionner une partie du code.
if devicechanged['Capteur-garage-David'] == 'Unlocked' then
--print("Garage vient de passer en unlocked")
commandArray['Lumiere garage'] ='On FOR 30 SECONDS'
Est-ce que je pourrai écrire : (j'ai l'impression que oui)
if devicechanged['Capteur-garage-David'] = 'Unlocked' then
--print("Garage vient de passer en unlocked")
commandArray['Lumiere garage'] =='On FOR 30 SECONDS'
Raspberry Pi 3, Domoticz, RFXComm, contrôle RTS, contrôle SPOT PISCINE , 2 inter Chacon 1000W, 2 inter CHACON 3000W, AEON Stick ZWAVE, 1 wall plug
1 WEMOS avec capteur pression
Boitier sonde + LED en cours...
Ok donc c'est plutôt la 1ière partie qui fonctionnerait. Je me doutais qu'il y avait une importance entre le = et == mais je n'avais pas de remonté de message d'erreur...
J'étais allé voir le wiki lua programming, je m'en sers de base systématiquement, ne serait-ce que je ne connais pas par cœur les actions.
En tout cas merci de m'avoir éclairci et précisé cela.
Raspberry Pi 3, Domoticz, RFXComm, contrôle RTS, contrôle SPOT PISCINE , 2 inter Chacon 1000W, 2 inter CHACON 3000W, AEON Stick ZWAVE, 1 wall plug
1 WEMOS avec capteur pression
Boitier sonde + LED en cours...