Bug LUA
Bug LUA
Bonjour à tous,
J'utilise domoticz depuis maintenant plusieurs années pour gérer mon chauffage et aucun problèmes jusqu'a ya quelques jours où mes scripts lua ont commencés à déconner sans aucune modification !
Je vous explique : avec des sondes de températures je contrôle la température des pièces et avec des relais qubino j'active ou pas le radiateur. on pas de problèmes là dessus.
Mon radiateur de SDB est géré avec un timer pour chauffer 1h30 à partir de 5h30 et quand je lui dit de s'allumer il se met en route pour 1h30 maximum. Pour le ON à 5h30 c'est un timer. Pour gérer la tempo j'avais fait 2 scripts LUA : script_device qui dit que quand le switch passe à ON on met 90 dans une variable géré par domoticz et ensuite toutes les minutes un script_time décrémente la variable et regarde si on est à 0 et que le switch est ON on le passe à OFF.
Facile et ça marchait nickel mais donc du jour en lendemain le système s'est emballé, domoticz n'envoyait plus la commande OFF ! La variable arrivait bien à 0 mais il ne se passait rien. J'ai regardé les logs, fait des tests etc.
Pour que cela refonctionne je dois faire un "restart system" et ça remarche pour quelques jours.
Je n'ai pas touchés à mes scripts lua depuis des années et je ne mets pas à jour mon domoticz (quand tout marche bien j'évite de bidouiller surtout en ce moment où j'ai vraiment besoin de chauffage !)
Je ne comprends pas comment c'est possible ce problème en fait... Et en quoi redémarrer remet d'aplomb le système pour quelques temps.
Ma seule hypothèse c'est que c'est la carte SD du raspberry qui flanche ?
J'utilise domoticz depuis maintenant plusieurs années pour gérer mon chauffage et aucun problèmes jusqu'a ya quelques jours où mes scripts lua ont commencés à déconner sans aucune modification !
Je vous explique : avec des sondes de températures je contrôle la température des pièces et avec des relais qubino j'active ou pas le radiateur. on pas de problèmes là dessus.
Mon radiateur de SDB est géré avec un timer pour chauffer 1h30 à partir de 5h30 et quand je lui dit de s'allumer il se met en route pour 1h30 maximum. Pour le ON à 5h30 c'est un timer. Pour gérer la tempo j'avais fait 2 scripts LUA : script_device qui dit que quand le switch passe à ON on met 90 dans une variable géré par domoticz et ensuite toutes les minutes un script_time décrémente la variable et regarde si on est à 0 et que le switch est ON on le passe à OFF.
Facile et ça marchait nickel mais donc du jour en lendemain le système s'est emballé, domoticz n'envoyait plus la commande OFF ! La variable arrivait bien à 0 mais il ne se passait rien. J'ai regardé les logs, fait des tests etc.
Pour que cela refonctionne je dois faire un "restart system" et ça remarche pour quelques jours.
Je n'ai pas touchés à mes scripts lua depuis des années et je ne mets pas à jour mon domoticz (quand tout marche bien j'évite de bidouiller surtout en ce moment où j'ai vraiment besoin de chauffage !)
Je ne comprends pas comment c'est possible ce problème en fait... Et en quoi redémarrer remet d'aplomb le système pour quelques temps.
Ma seule hypothèse c'est que c'est la carte SD du raspberry qui flanche ?
- Pièces jointes
-
- on voit que je passe bien dans la boucle
- LOG.png (12.24 Kio) Consulté 5345 fois
-
- modification du script pour afficher qu'on passe bien dans la boucle
- SCRIPT.png (35.32 Kio) Consulté 5345 fois
-
- tout allait bien jusqu'au 18 janvier où mon radiateur a chauffé toute la journée...
- switchSDB.png (90.38 Kio) Consulté 5345 fois
Re: Bug LUA
Bonsoir,
Pourquoi tu t'embêtes tu donnes simplement une heure de départ et de fin dans le planning du radiateur de ta SDB
Comme ici par exemple : Tu mets juste 5h30 pour le "On" et 7h00 pour le "Off", tu peux aussi choisir les jours.
Pourquoi tu t'embêtes tu donnes simplement une heure de départ et de fin dans le planning du radiateur de ta SDB
Comme ici par exemple : Tu mets juste 5h30 pour le "On" et 7h00 pour le "Off", tu peux aussi choisir les jours.
Re: Bug LUA
Oui je sais bien mais je veux aussi le déclencher quand à la "main" avec un interrupteur quand j'ai besoin (genre le soir quand je donne le bain à ma fille...).
En plus je ne vous ai pas tout dis
j'ai aussi des switchs virtuels qui déclanchent des boosts un peu de la même façon et c'est pareil quand ça bug ils ne fonctionnent plus cad que quand je les activent ils n'activent pas le vrai interrupteur...
Sinon ça faisait bien 10 jours que ça fonctionnait suite à un reboot et là ça s'est remis à déconner... Ca me rend ouf parce que je ne comprends pas ce qui peut causer un problème comme ça
En plus je ne vous ai pas tout dis
Sinon ça faisait bien 10 jours que ça fonctionnait suite à un reboot et là ça s'est remis à déconner... Ca me rend ouf parce que je ne comprends pas ce qui peut causer un problème comme ça
-
vil1driver
- Messages : 5661
- Inscription : 30 janv. 2015, 11:07
- Localisation : Rennes (35)
Re: Bug LUA
Salut,
Remplace ==0 par <=0
Ps: toujours spécifier le type de script quand tu le postes
Remplace ==0 par <=0
Ps: toujours spécifier le type de script quand tu le postes
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: Bug LUA
Bonjour, la méthode décrite est un peu capillotractée doit fonctionner. Je fais comme ceci dans un time device en utilisant la fonction timedifference.
Code : Tout sélectionner
function timedifference (str)
year = string.sub(str, 1, 4)
month = string.sub(str, 6, 7)
day = string.sub(str, 9, 10)
hour = string.sub(str, 12, 13)
minutes = string.sub(str, 15, 16)
seconds = string.sub(str, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2) --résultat en secondes
return difference
end
function timeDiffDevice(s)
local val=otherdevices_lastupdate[s]
if(val==nil) then
print("Erreur ds timeDiffDevice .... arg s="..s)
return 0
else
return timedifference(val)
end
end
if (otherdevices['mon_capteur']=='On' and timeDiffDevice('mon_capteur')>90*60) then
commandArray['mon_capteur']='Off'
end
Opi
RFXCOM
RFLINK 433 & 315
Mysensors
Wifi & Mqtt
EspEasy - Tasmota
Zigate+
RFXCOM
RFLINK 433 & 315
Mysensors
Wifi & Mqtt
EspEasy - Tasmota
Zigate+
Re: Bug LUA
OK je peux essayer ça mais ma variable stockée n'est jamais négative, elle reste à 0 mais le script LUA n'active pas l'interrupteur.vil1driver a écrit : 15 févr. 2019, 19:00 Salut,
Remplace ==0 par <=0
Ps: toujours spécifier le type de script quand tu le postes
En fait je me pose la question du pourquoi ça déconne
Re: Bug LUA
OK oui je vois où tu veux en venir dans ton script mais pour ma part mon besoin est de pouvoir stopper mon boost avant le délai et surtout je pense que ce ne fonctionnera pas mieux parce que c'est vraiment la commande "On" ou "Off" qui n'est pas envoyé à mon device.Fredok a écrit : 15 févr. 2019, 19:15 Bonjour, la méthode décrite est un peu capillotractée doit fonctionner. Je fais comme ceci dans un time device en utilisant la fonction timedifference.Code : Tout sélectionner
function timedifference (str) year = string.sub(str, 1, 4) month = string.sub(str, 6, 7) day = string.sub(str, 9, 10) hour = string.sub(str, 12, 13) minutes = string.sub(str, 15, 16) seconds = string.sub(str, 18, 19) t1 = os.time() t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds} difference = os.difftime (t1, t2) --résultat en secondes return difference end function timeDiffDevice(s) local val=otherdevices_lastupdate[s] if(val==nil) then print("Erreur ds timeDiffDevice .... arg s="..s) return 0 else return timedifference(val) end end if (otherdevices['mon_capteur']=='On' and timeDiffDevice('mon_capteur')>90*60) then commandArray['mon_capteur']='Off' end
Re: Bug LUA
As tu d'autres scripts, pour la météo par exemple ?
RPI2 OSMC + domoticz + Rfx 433e + chacon dio, teleinfo 433 via arduino nano, sonde T° innovaley et TFA 303139, sonde T° piscine DIY 433 oregon, OWL 180, RPI zero W + camera