Script LUA executé plusieurs fois
Re: Script LUA executé plusieurs fois
Bonjour,
Une erreur ?
Sinon le tostring() est par sécurité : Permet de concaténer une valeur 'nil' dans un print
Une erreur ?
Sinon le tostring() est par sécurité : Permet de concaténer une valeur 'nil' dans un print
-
vil1driver
- Messages : 5661
- Inscription : 30 janv. 2015, 11:07
- Localisation : Rennes (35)
Re: Script LUA executé plusieurs fois
Merci pour l'info 
Oui ceci
J'aurais mis juste
Pour coller à
Ou alors plutôt ceci (au sens de ce que tu semble vouloir)
Oui ceci
Code : Tout sélectionner
tostring(humidite_cine_capteur)
Code : Tout sélectionner
tostring(humidite)Code : Tout sélectionner
humidite=(otherdevices_humidity['humidite_cine_capteur'])Code : Tout sélectionner
tostring(devicechanged['humidite_cine_capteur'])
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
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
Re: Script LUA executé plusieurs fois
J'ai mis les 2 bouts de codes
et
et mon print est entre les 2
Code : Tout sélectionner
print(devicechanged['humidite_cine_capteur']) Code : Tout sélectionner
if (devicechanged['humidite_cine_capteur']) then
local x = os.clock()
print ("Valeur humidité : " .. tostring(devicechanged['humidite_cine_capteur']) .. " heure : " .. tostring(x))
endCode : Tout sélectionner
2018-09-08 15:05:40.124 Status: LUA: 65
2018-09-08 15:05:40.124 Status: LUA: humi = 65
2018-09-08 15:05:40.124 Status: LUA: Valeur humidité : 65 heure : 763.401471
2018-09-08 15:05:40.124 Status: LUA: vitesse 1
2018-09-08 15:05:40.125 Status: EventSystem: Script event triggered: vmc_cine_4
2018-09-08 15:05:40.160 Status: LUA: 65
2018-09-08 15:05:40.160 Status: LUA: humi = 65
2018-09-08 15:05:40.160 Status: LUA: Valeur humidité : 65 heure : 763.437952
2018-09-08 15:05:40.160 Status: LUA: vitesse 1
2018-09-08 15:05:40.161 Status: EventSystem: Script event triggered: vmc_cine_4Dz 2025.11_16729 - Conbee II
-
vil1driver
- Messages : 5661
- Inscription : 30 janv. 2015, 11:07
- Localisation : Rennes (35)
Re: Script LUA executé plusieurs fois
Je penche pour un double envoi de la part du capteur
Donc soit tu laisses en l'état soit tu oublies le type Device au profit d'un type Time qui ne se déclanchera plus à chaque envoi de mesure mais toutes les minutes (sans doublon).
A mon sens bien suffisant, le type Device etant le mode utile en cas de besoin de réactivité. Est ce vraiment important ici ?
Donc soit tu laisses en l'état soit tu oublies le type Device au profit d'un type Time qui ne se déclanchera plus à chaque envoi de mesure mais toutes les minutes (sans doublon).
A mon sens bien suffisant, le type Device etant le mode utile en cas de besoin de réactivité. Est ce vraiment important ici ?
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
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
Re: Script LUA executé plusieurs fois
Non ce n'est pas important, par contre au niveau fréquence ce sera même plus souvent car actuellement le script se déclenche toutes les heures;
Je tente...
merci en tout cas
Je tente...
merci en tout cas
Dz 2025.11_16729 - Conbee II
Re: Script LUA executé plusieurs fois
Donc effectivement le script ne s’exécute qu'une fois par contre toutes les minutes au lieu de toutes les heures.
Vu que c'est pour la salle de cinéma, je pense que je vais repasser à 'DEVICE' et tant pis si le capteur envoie 2 fois de suite
Vu que c'est pour la salle de cinéma, je pense que je vais repasser à 'DEVICE' et tant pis si le capteur envoie 2 fois de suite
Dz 2025.11_16729 - Conbee II
-
vil1driver
- Messages : 5661
- Inscription : 30 janv. 2015, 11:07
- Localisation : Rennes (35)
Re: Script LUA executé plusieurs fois
En Time on peut ajouter une condition pour que ce ne soit que toutes les heures.
Je n'ai pas ça en tête à l'heure actuelle mais de très nombreux scripts sur ce forum utilisent cela..
Tu trouveras certainement.
Mais c'est vrai que l'on risque de rater le moment de la maj du capteur donc effectivement Device est probablement le mieux dans ton cas
Je n'ai pas ça en tête à l'heure actuelle mais de très nombreux scripts sur ce forum utilisent cela..
Tu trouveras certainement.
Mais c'est vrai que l'on risque de rater le moment de la maj du capteur donc effectivement Device est probablement le mieux dans ton cas
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
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
Re: Script LUA executé plusieurs fois
Je pense qu'il est possible de cumuler le meilleur des deux mondes en utilisant le last update du capteur comparé a l'heure actuelle de déclenchement du script device sur ce même capteur (après le classique test sur le device changed).vil1driver a écrit :En Time on peut ajouter une condition pour que ce ne soit que toutes les heures.
Je n'ai pas ça en tête à l'heure actuelle mais de très nombreux scripts sur ce forum utilisent cela..
Tu trouveras certainement.
Mais c'est vrai que l'on risque de rater le moment de la maj du capteur donc effectivement Device est probablement le mieux dans ton cas
Si on la dernière mesure qui date de moins d'une seconde, le script peut retourner direct sans faire de traitement car il s'agit d'un doublon non voulu. Et on conserverait alors le moment de MAJ+ne pas de voir pooler le capteur (ce qui ne fonctionnera d'ailleurs pas forcément avec un module à piles, qui coupe son interface radio z-wave entre 2 envoi de mesures, si changement, et ne recevra donc pas les demandes du contrôleur. Ceci afin d'économiser la pile).
J'avais fait un truc dans ce genre pour relancer un ordre relais pour mon smart-meter Qubino dans mon tableau electrique: Ce module, sur la partie commande du relais filaire externe, a en effet la fâcheuse tendance à voir la couche open-zwave relancer un ordre inversé dans la seconde suivant une consigne: Tu veux "on"... l'ordre passe... puis un "off" est souvent relancé et ce sans action de ma part! Un nouvel "on" immédiat donnant alors un état stable.
D'ailleurs, en commandant le switch à la main, le problème et ce hack qui "fait tomber en marche" étaient aisément perceptibles.
Je n'avais fait qu’automatiquement cela dans un scrip device qui s'il voyait passer un ordre, puis son contre-ordre dans la seconde, évitait le désordre en relançant l'ordre initial!
Pas chez moi actuellement, je pourrais compléter par "mon" bout de code au besoin... en partie tiré du wiki, de mémoire... si le posteur d'origine ne s'en sort pas.
Pour info même si c'est un peu hors sujet, après un ticket Qubino->OZW, il était apparu que ce module était plutôt long (jusqu'a 7s! un bug firmware amha) à renvoyer son retour d'état après une commande, ce qui provoquait ce comportement d'open z-wave (mais pourquoi l'ordre inverse??)... Qubino avait reshooté le truc à OZW, sans solution a priori (ceci dit, si c'est bien le FW du module qui est en cause, c'était pas forcément à eux d'y pallier):
https://github.com/OpenZWave/open-zwave/issues/1261
Donc des modules buggués peuvent donner ce type de bégaiements.
Re: Script LUA executé plusieurs fois
Ci dessous, mon exemple d'implémentation faisant tomber en marche la commande relais smart meter qubino. On peut filtrer des actions résultant de doublons sur le même principe.lost a écrit : Je pense qu'il est possible de cumuler le meilleur des deux mondes en utilisant le last update du capteur comparé a l'heure actuelle de déclenchement du script device sur ce même capteur (après le classique test sur le device changed).
Si on la dernière mesure qui date de moins d'une seconde, le script peut retourner direct sans faire de traitement car il s'agit d'un doublon non voulu....
Ceci suppose la création séparée d'une variable utilisateur (ici nommée timeSmartMeterRelay) pour garder d'un appel au script 'device' à l'autre l'heure du dernier déclenchement.
Code : Tout sélectionner
spuriousCmdDelaySec=1
timeDuplicateCmdSec='5'
SmartMeterSwitch='Relais Smart-Meter HP/HC Actif'
timeLastCmd='timeSmartMeterRelay'
commandArray = {}
if (devicechanged[SmartMeterSwitch]) then
devState = devicechanged[SmartMeterSwitch]
t1 = os.time()
t0 = uservariables[timeLastCmd]
-- 1st time init for user variable...
if (t0 == 'nil') then
t0 = t1
end
tDiff = os.difftime(t1, t0)
-- Debug :
--print(SmartMeterSwitch..' = '..devState)
--print('t1 : '..t1..' / t0 : '..t0.. ' ; Diff = '..tDiff)
-- Do we have the immediate change state spurious (buggy device?) invalidating current command ?
if (tDiff <= spuriousCmdDelaySec) then
if (devState == 'On') then
commandArray[SmartMeterSwitch] = 'Off AFTER '..timeDuplicateCmdSec
end
if (devState == 'Off') then
commandArray[SmartMeterSwitch] = 'On AFTER '..timeDuplicateCmdSec
end
end
commandArray['Variable:'..timeLastCmd] = tostring(t1)
end
return commandArray