Boucle for qui ne fonctionne pas

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
david86
Messages : 224
Inscription : 06 avr. 2018, 08:22

Re: Boucle for qui ne fonctionne pas

Message 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')
Raspberry Pi 3, Domoticz, RFXComm, contrôle RTS, contrôle SPOT PISCINE ;-), 2 inter Chacon 1000W, 2 inter CHACON 3000W, AEON Stick ZWAVE, 1 wall plug
1 WEMOS avec capteur pression
Boitier sonde + LED en cours...
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Boucle for qui ne fonctionne pas

Message 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.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
david86
Messages : 224
Inscription : 06 avr. 2018, 08:22

Re: Boucle for qui ne fonctionne pas

Message 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.
Dernière modification par Keros le 04 sept. 2022, 22:19, modifié 1 fois.
Raison : Ajout des balises code
Raspberry Pi 3, Domoticz, RFXComm, contrôle RTS, contrôle SPOT PISCINE ;-), 2 inter Chacon 1000W, 2 inter CHACON 3000W, AEON Stick ZWAVE, 1 wall plug
1 WEMOS avec capteur pression
Boitier sonde + LED en cours...
david86
Messages : 224
Inscription : 06 avr. 2018, 08:22

Re: Boucle for qui ne fonctionne pas

Message 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 ! :D
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
}
Raspberry Pi 3, Domoticz, RFXComm, contrôle RTS, contrôle SPOT PISCINE ;-), 2 inter Chacon 1000W, 2 inter CHACON 3000W, AEON Stick ZWAVE, 1 wall plug
1 WEMOS avec capteur pression
Boitier sonde + LED en cours...
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Boucle for qui ne fonctionne pas

Message 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.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
david86
Messages : 224
Inscription : 06 avr. 2018, 08:22

Re: Boucle for qui ne fonctionne pas

Message 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 :oops: :oops:

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
Raspberry Pi 3, Domoticz, RFXComm, contrôle RTS, contrôle SPOT PISCINE ;-), 2 inter Chacon 1000W, 2 inter CHACON 3000W, AEON Stick ZWAVE, 1 wall plug
1 WEMOS avec capteur pression
Boitier sonde + LED en cours...
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Boucle for qui ne fonctionne pas

Message 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.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
david86
Messages : 224
Inscription : 06 avr. 2018, 08:22

Re: Boucle for qui ne fonctionne pas

Message 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 ?
Raspberry Pi 3, Domoticz, RFXComm, contrôle RTS, contrôle SPOT PISCINE ;-), 2 inter Chacon 1000W, 2 inter CHACON 3000W, AEON Stick ZWAVE, 1 wall plug
1 WEMOS avec capteur pression
Boitier sonde + LED en cours...
david86
Messages : 224
Inscription : 06 avr. 2018, 08:22

Re: Boucle for qui ne fonctionne pas

Message 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
Raspberry Pi 3, Domoticz, RFXComm, contrôle RTS, contrôle SPOT PISCINE ;-), 2 inter Chacon 1000W, 2 inter CHACON 3000W, AEON Stick ZWAVE, 1 wall plug
1 WEMOS avec capteur pression
Boitier sonde + LED en cours...
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Boucle for qui ne fonctionne pas

Message 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.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Répondre