Besoin d'aide Script Blockly > Lua

Posez ici vos questions d'utilisation, de configuration de DomoticZ, de bugs, de conseils sur le logiciel lui même dans son utilisation et son paramétrage.
Des forums spécifiques sont ouverts ci-dessous pour regrouper les différents sujets.
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: Besoin d'aide Script Blockly > Lua

Message par denis_brasseur »

morninggoal a écrit : 11 sept. 2019, 20:52
mais du coup c'est quoi le declencheur dans ton code si le script est de type device?
Ce n'est pas le premier if qui décide si il s'agit d'un type Device ou Time.
Ce script est de type Time (voir le post initial), il sera donc exécuter toute les minutes.
https://easydomoticz.com/mon-premier-sc ... ondations/
Rappel
N’oubliez pas que les scripts Lua peuvent se déclencher suivant 4 types d’événements :

toutes les minutes,
au changement d’état d’un des périphériques,
au changement d’état d’une variable,
au changement d’état du panel de sécurité.
https://easydomoticz.com/mon-premier-sc ... ondations/
Cela signifie que dans un script_time_xxxx.lua si j’utilise la fonction devicechanged j’aurais une erreur :Error: EventSystem: /home/pi/domoticz/scripts/lua/script_time_xxxx.lua:9: attempt to index global ‘devicechanged’ (a nil value)
car cette fonction n’existe pas pour les script Time.
https://easydomoticz.com/point-scripts-lua/
Lorsque n’importe quelle variable change, TOUS les script_variable sont passés en revue pour voir si il y a quelque chose à faire avec la variable qui vient de changer de valeur.

Lorsque n’importe quel matériel change de valeur TOUS les script_device sont passés en revue pour voir si il y a quelque chose à faire avec ce matériel qui vient de changer de valeur. Cela est vrai avec les interrupteurs qui passent de On à Off mais aussi avec les capteurs dont la valeur se modifie au cours du temps.

Lorsque la minute change, ce qui arrive toutes les minutes 🙂 , TOUS les script_time sont lus pour voir si il y a quelque chose à faire avec.
Et dans la modification du script initial, j'ai laisser à tord les 2 parenthèses et oublié un then

Code : Tout sélectionner

if otherdevices['Absence'] == 'Closed' then
	if heure > '06:00' and time < '12:00' then
		if otherdevices['Volet_salon'] == 'Closed' then
			if otherdevices['Mouvement'] == 'Closed' then
				--commandArray[#commandArray+1] = ---------------
			end
		end
	end
end
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
morninggoal
Messages : 33
Inscription : 06 sept. 2019, 12:13

Re: Besoin d'aide Script Blockly > Lua

Message par morninggoal »

en fait moi je l'ai fait en type device comme ça... ca a l'air de marcher...

Code : Tout sélectionner

heure_actuelle = string.sub(os.date("%X"), 1, 5)

commandArray = {}

    if otherdevices['Absence'] == 'On' then 
      print('************Detection pour voletsRDC: Absence activée*********************')
    
     elseif heure_actuelle > '06:00' and heure_actuelle < '12:00' then
       if devicechanged['Mouvement'] == 'On' then 
           if otherdevices['Volet_Salon'] == 'Closed' then
            
            commandArray['Volet_Salle_a_manger 1_grand'] = 'Off'
            commandArray['Volet_Salle_a_manger_2'] = 'Off'
            commandArray['Volet_Cuisine'] = 'Off'
            commandArray['Volet_Salon'] = 'Off'
           end
       end
    end

return commandArray
 
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: Besoin d'aide Script Blockly > Lua

Message par denis_brasseur »

Oui, c'est nickel, simple et efficace, si ça correspond à ton besoin.
Ce n'est pas tant la méthode qui compte que le résultat final.
Ca peux aussi s'écrire comme cela, mais ça ne remet pas en cause ton code, la différence est sur le juxtaposées ou imbriquées.
Ton code a au moins l'avantage d’être clair et lisible, et de pouvoir y inclure des print pour le débogage, a minima pendant la phase de mise en place.
J'avais reproduit en LUA ce que tu avais fait en blockly.

Code : Tout sélectionner

heure_actuelle = string.sub(os.date("%X"), 1, 5)
commandArray = {}
    if (otherdevices['Absence'] == 'On' or (heure_actuelle > '06:00' and heure_actuelle < '12:00')) and devicechanged['Mouvement'] == 'On' and otherdevices['Volet_Salon'] == 'Closed' then
            commandArray['Volet_Salle_a_manger 1_grand'] = 'Off'
            commandArray['Volet_Salle_a_manger_2'] = 'Off'
            commandArray['Volet_Cuisine'] = 'Off'
            commandArray['Volet_Salon'] = 'Off'
    end
return commandArray
juxtaposées ou imbriquées , ce n'est qu'un problème de méthode et d'habitude.

Attention à

Code : Tout sélectionner

print('************Detection pour voletsRDC: Absence activée*********************')
tu va avoir une écriture dans les logs à chaque changement d'état d'un périphérique parce que ton script est de type Devices. N'hésites pas à commenter la ligne à la fin de tes tests.
A n'utiliser que pour le débogage.
Mais pas d'incidence sur le fonctionnement, ça marchera à l'identique ;) .
Dernière modification par denis_brasseur le 12 sept. 2019, 19:19, modifié 2 fois.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
morninggoal
Messages : 33
Inscription : 06 sept. 2019, 12:13

Re: Besoin d'aide Script Blockly > Lua

Message par morninggoal »

Merci pour la validation et les conseils!
Répondre