Page 3 sur 5
Re: Boucle for qui ne fonctionne pas
Publié : 04 sept. 2022, 21:05
par david86
Sans aucune condition, rien ne se passe.
Je test ma condition en mettant un domoticz.log, ma condition déclenche le log.
Par contre pour le restant j'ai ce message :
2022-09-04 21:03:49.047 Error: dzVents: Error: (3.1.7) ...domoticz/scripts/dzVents/generated_scripts/Script #3.lua:17: attempt to call a nil value (field 'device')
Re: Boucle for qui ne fonctionne pas
Publié : 04 sept. 2022, 21:12
par Keros
Tu as une erreur à la ligne 17 où tu cherches à utiliser une variable device qui n'existe pas.
Je ne le vois pas dans le code que tu nous as déjà posté.
Remets-nous le code exécuté et le message d'erreur qu'il y a dans les logs.
Re: Boucle for qui ne fonctionne pas
Publié : 04 sept. 2022, 21:29
par david86
C'est que j'essaye plein de truc, alors le 'sript' change toutes les 10 secondes.
J'ai réglé un problème, j'avais mis des crochets et non des parenthèses...
Voilà le nouveau code :
Code : Tout sélectionner
return {
on = {
devices = {
'Inter-test'
--'Timer-Virtuel-5s',
--'Pression-pompe'
}
},
execute = function(domoticz, item)
-- if ("Inter-test" == 'On') then
if (item.state == 'On') then
local p = domoticz.devices('Pression-pompe')
print(p.lastUpdate.minutesAgo)
domoticz.log("La pression de la piscine est de : " .. p)
end
Voila le résultat :
2022-09-04 21:24:17.491 Error: dzVents: Error: (3.1.7) ...domoticz/scripts/dzVents/generated_scripts/Script #3.lua:14: attempt to concatenate a table value (local 'p')
Cette ligne : print(p.lastUpdate.minutesAgo) m'affiche bien ma valeur **EDIT non ça marche pas lol non plus.
Re: Boucle for qui ne fonctionne pas
Publié : 04 sept. 2022, 21:43
par david86
Bon, c'est bon, j'ai réussi à récupérer les valeurs de mes capteurs et les écrire dans une phrases qui concatène du texte et les valeurs des capteurs !
Suite au prochain episode.
Voici mon code :
Code : Tout sélectionner
return {
on = {
devices = {
'Inter-test'
}
},
execute = function(domoticz, item)
-- if ("Inter-test" == 'On') then
if (item.state == 'On') then
local p = domoticz.devices('Pression-pompe').sValue
local cbe = domoticz.devices('Parents').temperature
print(p)
print(cbe)
domoticz.log("La pression de la piscine est de : "..p)
end
}
Re: Boucle for qui ne fonctionne pas
Publié : 04 sept. 2022, 22:24
par Keros
Bravo
C'est un peu compliqué au début, mais je pense que tu as compris le principe. Avance au fur et à mesure en validant chaque nouvelle ligne et tu vas arriver à faire des super trucs.
Bonne continuation.
N'hésite pas à continuer ce sujet si tu as d'autres questions.
Re: Boucle for qui ne fonctionne pas
Publié : 05 sept. 2022, 09:07
par david86
Salut,
J'avance encore un peu, j'ai réussi à faire marcher l'envoi de notification par TELEGRAM.
J'ai réussi à récupérer plusieurs variables et les afficher ou envoyer également, ça reprend un peu le même principe que le LUA. Et une erreur de trouver, un "s" qui manquait à la fin de "devices" qui me fichait tout en l'air
Revenons à nos moutons, problème initial, envoyer la notification après que la pompe soit allumée après un certain délai(d'abord je fais le test avec mon interrupteur virtuel Inter-test).
Pour mon test, je me sers de Inter-test comme déclencheur et Timer-Virtuel-5s qui est aussi un inter virtuel.
Voici le bout de code :
Code : Tout sélectionner
return {
on = {
devices = {
'Inter-test'
}
},
execute = function(domoticz, item)
local start = domoticz.devices('Inter-test').lastUpdate.secondsAgo
if (item.state == 'On' and domoticz.devices('Inter-test').lastUpdate.minutesAgo == 1) then
--print(''..start)
domoticz.devices('Timer-Virtuel-5s').switchOn()
end
Re: Boucle for qui ne fonctionne pas
Publié : 05 sept. 2022, 12:24
par Keros
En haut de ton script, tu as défini un déclencheur : l'action sur le device 'Inter-test'. Il ne s'exécutera qu'au moment où 'Inter-test' changera.
Il faut que ton script soit basé sur le temps : tu peux vérifier toutes les minutes si ta pompe n'est pas en route depuis 5 minutes.
Re: Boucle for qui ne fonctionne pas
Publié : 05 sept. 2022, 13:31
par david86
Ah oui pour le déclencheur, plutôt un timer. Celui ci ne devrait pas plutôt être toutes les minutes plutôt que de mettre 5 minutes, parce que si le déclenchement d’état de ma pompe n’est pas sur un multiple de 5 fait que ma valeur de lastupdate ==10 ne sera jamais vu ?
Exemple si toutes les 5 minutes j’exécute le script
8h00 lancement script mais pompe à off donc rien ne se passe
8h05 lancement du script mais pompe toujours à off donc ne se passe encore
8h06 enclenchement de ma pompe
8h10 lancement script et pompe à On avec lastupdate.Minutes à 4
8h15 lancement script, pompe à On et lastupdate.minute à 9
8h20 idem mais lastupdate.minutes à 14 (la, la valeur est dépassée.
Si je met le critère >=10 la dès que lastupdate.minute sera supérieur à 10 je recevrai des notifications.
Ou alors laisser le timer de 5 minutes et mettre une contrainte de temps sur le « si »
Si lastupdate supérieur a 10 et inférieur à 15, logiquement ça devrait arriver qu’une seule fois non ?
Re: Boucle for qui ne fonctionne pas
Publié : 05 sept. 2022, 18:23
par david86
Voici mon 1er essai non concluant :
Code : Tout sélectionner
return {
on =
{
timer = {'every 1 minutes'} -- nom du timer
},
execute = function(domoticz, item)
if (item.isTimer and domoticz.devices('Inter-test') == 'On') then
print('script 4 ok')
domoticz.log("script 4 ok version LOG ")
end
end
}
Chaque minute il n'exécute rien du tout, hormis afficher dans le les log :
2022-09-05 18:19:00.492 Status: dzVents: Info: ------ Start internal script: Script #4:, trigger: "every 1 minutes"
2022-09-05 18:19:00.492 Status: dzVents: Info: ------ Finished Script #4
Re: Boucle for qui ne fonctionne pas
Publié : 05 sept. 2022, 19:16
par Keros
Ta syntaxe n'est pas la bonne. Regarde le
wiki et descend un peu au paragraphe
timer trigger rules. Tu auras plein d'exemples pour les trigger time.