Page 1 sur 1

Bug LUA

Publié : 04 févr. 2019, 20:46
par shaun
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 ?

Re: Bug LUA

Publié : 05 févr. 2019, 01:45
par lmet
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 :
img_001.jpg
img_001.jpg (60 Kio) Consulté 5330 fois
Tu mets juste 5h30 pour le "On" et 7h00 pour le "Off", tu peux aussi choisir les jours.

Re: Bug LUA

Publié : 15 févr. 2019, 18:29
par shaun
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 :mrgreen: 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

Re: Bug LUA

Publié : 15 févr. 2019, 19:00
par vil1driver
Salut,

Remplace ==0 par <=0

Ps: toujours spécifier le type de script quand tu le postes

Re: Bug LUA

Publié : 15 févr. 2019, 19:15
par Fredok
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

Publié : 18 févr. 2019, 15:24
par shaun
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
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.

En fait je me pose la question du pourquoi ça déconne :?:

Re: Bug LUA

Publié : 18 févr. 2019, 15:26
par shaun
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
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.

Re: Bug LUA

Publié : 18 févr. 2019, 16:28
par patoche
As tu d'autres scripts, pour la météo par exemple ?