Page 1 sur 5

Boucle for qui ne fonctionne pas

Publié : 31 août 2022, 20:47
par david86
Bonsoir à tous,
Je cherche à faire l'envoi d'un report de mesure à une heure précise tous les jours si ma pompe tourne.
Je cherche à faire cela en LUA.
J'ai essayé en faisant avec une condition horaire précise, ça n'a pas marché, j'ai essayé à faire selon un critère entre 2h, ça fonctionne mais je vous laisse imagine le nombre de notifications que l'on reçoit en 1H de temps. Rien de concluant.
Alors je me suis dit, pourquoi ne pas faire une boucle for i =1, 2,1 do en me disant que mon script dessous ma boucle for ne s'exécuterait qu'une seule fois dans ma plage horaire... Mais rien du tout.
Voici ce que ça donne pour le moment, merci de votre pour mon erreur sur la boucle, ou si méthode beaucoup plus simple, je prend.

Code : Tout sélectionner

commandArray = {}
Heure_Now = os.date("%H")*60
local i
H1=1020
H2=1200
Heure_Actuelle=os.date("%X")
p = (otherdevices['Pression-pompe'])
rdx = (otherdevices['Redox 650-750mV'])
pH = (otherdevices['Acidité'])

for i = 1, 2, 1 do
if ( Heure_Now >= H1 and Heure_Now <= H2 and otherdevices['Pompe-piscine'] == 'On' ) then
        print(Heure_Now)
       -- print("pool-report")
   --     print("Pression : "..p)
        --print("Redox : "..rdx)
       -- print("Acidité : "..pH)
        --print("rdx")
        --print("Pression actuelle = "..pression)
        --commandArray['SendNotification']='Domoticz#Piscine : '..(p)..'bars '..(rdx)..'Redox '..(pH)..'###'
end
end
Merci à tous,

Re: Boucle for qui ne fonctionne pas

Publié : 31 août 2022, 21:17
par Keros
Je ne pense pas qu'une boucle puisse fonctionner.

Si tu veux faire une notification à 20h30 par exemple, tu peux faire un script avec un trigger time (exécuté toutes les minutes) et faire une condition :

si heure actuelle = 20 et minutes actuelles = 30 alors tu détermines ta notification et tu l'envoies.

Re: Boucle for qui ne fonctionne pas

Publié : 31 août 2022, 21:43
par david86
Bonsoir Keros,
merci de ta réponse, je pense qu'avec cela je devrai être sur une bonne piste. J'avais peur d'avoir un résultat de ce genre :

Code : Tout sélectionner

2022-08-31 21:34:01.197 Status: LUA: 08
2022-08-31 21:34:03.213 Status: LUA: 08
2022-08-31 21:34:05.227 Status: LUA: 08
2022-08-31 21:34:07.218 Status: LUA: 08
2022-08-31 21:34:09.221 Status: LUA: 08
2022-08-31 21:34:11.215 Status: LUA: 08
2022-08-31 21:34:13.214 Status: LUA: 08
2022-08-31 21:34:15.217 Status: LUA: 08
2022-08-31 21:34:17.204 Status: LUA: 08 
Car dans une minute il peut y avoir un paquet de notification, mais finalement avec le trigger time, le script est exécuté qu'une seule fois chaque minute ? C'est cela j'ai l'impression.
Merci, je vais avancer avec cela. :)

Re: Boucle for qui ne fonctionne pas

Publié : 31 août 2022, 21:51
par Keros
Regarde dans ma présentation (lien en signature), j'ai écrit des petits guides dont un sur divers points de programmation et je parle des triggers ;) .

Re: Boucle for qui ne fonctionne pas

Publié : 31 août 2022, 22:45
par david86
Ok j’y regarderai demain.
Merci ;-)

Re: Boucle for qui ne fonctionne pas

Publié : 01 sept. 2022, 10:54
par david86
Bonjour,
Je repensais à autre chose et qui pour moi finalement serait bien plus "logique" à mettre en œuvre.
Plutôt que de mettre une condition sur l'horaire mettre une condition sur l'état de l'enclenchement de la pompe du genre :
si pompe == 'on' alors
envoi 1 notification 30 minutes après le ON
envoi 1 notification 180 minutes après le ON

J'ai trouvé sur le forum un bout de code qui est censé faire un peu ce principe toutes les 5 minutes, ce n'est pas ce que je recherche mais peut-être est-ce un début, toutefois je ne le comprend pas encore :

Code : Tout sélectionner

time = os.date("*t")
if (time.min == 5) then...
Tu pourrais me le traduire pour que j'adapte peut-être à "ma sauce" ? Merci

Re: Boucle for qui ne fonctionne pas

Publié : 01 sept. 2022, 12:35
par Keros
Je pense qu'il serait plus facile de prendre le sujet dans l'autre sens :

Si la pompe est à On depuis 30 min, alors notification
Si la pompe est à On depuis 180 min, alors notification

Tu peux le faire tourner toutes les minutes, DomoticZ ne bronchera pas :mrgreen:

Et en LUA, tu peux avoir l'info de la dernière mise à jour d'un widget avec un lastupdate[].

Re: Boucle for qui ne fonctionne pas

Publié : 01 sept. 2022, 22:07
par david86
Que penses-tu de cela, ça fonctionnerait ? J'ai fait un test à 10 secondes et 20 secondes, j'ai l'impression que c'est bon.
J'avoue que je séchais un peu avec la récupération de "lastupdate"... même beaucoup lol
J'ai farfouillé un peu avant de trouver une piste de string.sub

Mais est-ce correct pour toi stp ?

Code : Tout sélectionner

t1 = os.time()
s = otherdevices_lastupdate['Inter-test']

year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)

commandArray = {}
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
t4 = t2 + 10
t5 = t2 + 20

if (otherdevices['Inter-test'] == 'On' and t4==t1 or t5==t1) then
   print('test ok')
end 

return commandArray

Re: Boucle for qui ne fonctionne pas

Publié : 01 sept. 2022, 22:27
par Keros
Un test à 10 et 20 secondes ? Tu veux dire minutes ??

Je savais qu'il y avait la donnée Lastupdate, mais je ne pensais pas que c'était "si lourd" à mettre en œuvre. Bravo d'y être arrivé.

Je suis passé au DzVents et la fonction y est plus facile : if domoticz.devices("Pompe").lastUpdate.minutesAgo == 10 and ...

Re: Boucle for qui ne fonctionne pas

Publié : 01 sept. 2022, 23:13
par david86
Lol oui je trouve ça encore bien lourd en effet pour un truc aussi « simple ».
Y’a peut être plus simple mais je ne maîtrise pas.
Ça m’a bien occupé et creusé la tête lol

En mettant juste +10 c’est bien 10 secondes, si je veux 10 minutes il faudra que je mette +600.

J’ai vu ton post « pourquoi être passé à DzEvent 😏