Page 1 sur 2

Blocky, en script LUA

Publié : 05 févr. 2019, 09:52
par djrams10
Bonjour, je sais utilisé Blocky par contre j'ai beaucoup de mal a faire des scripts LUA dans domoticz. Pourriez-vous m'aider a en mettre un en place? Merci d'avance. Voici le Blocky que j'aimerais remplacer en LUA pour intégrer une plage horaire. Dans mon cas je souhaite qu'entre 7h et 21h que le thermostat soit régler a 20.5, et le reste du temps à 19.5.

N'hésitez pas à me contacter si je n'ai pas été clair. Merci

Re: Blocky, en script LUA

Publié : 05 févr. 2019, 11:27
par patoche
Bonjour,

Tu n'as pas accès au planning sur ton thermstat Nest ? Moi j'utilise cette fontion sur Thermosat virtuel, très partique.

Re: Blocky, en script LUA

Publié : 05 févr. 2019, 13:37
par denis_brasseur
Si tu veux t'initier au LUA, voici ce que peux donner ton script actuel (je n'ai pas gérer les setpoint, jusque les conditions) :

Code : Tout sélectionner

  -- retourne l'heure actuelle ex: "12:45"
heure = string.sub(os.date("%X"), 1, 5)

commandArray = {}
 
if (otherdevices['Capteur ouverture Cuisine']=='Closed' and otherdevices['Capteur ouverture Salon']=='Closed' and otherdevices["Capteur d'ouverture Yanis"]=='Closed' and otherdevices["Capteur d'ouverture Chambre des Parents"]=='Closed') then
	if otherdevices_svalues['Temperature Yanis'] < '18.5' then
		--mise à jour du setpoint à 24 °
	elseif otherdevices_svalues['Temperature Yanis'] >= '18.5' then
		if heure < '07:00' then
		--mise à jour du setpoint à 19.5 °
		elseif heure >= '07:00' then
		--mise à jour du setpoint à 20.5 °
		end
	end
end
 
return commandArray
Les 4 premieres conditions sur l'état des capteurs étant redondantes, écrit qu'une seul fois.
Idem pour Temperature Yanis >= 18.5, simplifié

Plusieurs remarques :
les apostrophes et caractères accentués dans les nom de capteurs comme "Capteur d'ouverture Chambre des Parents", pas très propre.
Pour les plages de température, tu écris < à 18.5, puis > 18.5. Qu'advient il de la valeur 18.0 dans ton test.
Idem pour < '07:00' et > '07:00', qu'advient il de = '07:00' ?

Ca peux être une bonne bases de démarrage en LUA, ce n'est que mon avis.

Une fois que tu aura repris à l'identique ton blocky existant, tu pourra le faire évoluer avec tes nouvelles conditions afin de te faire la main.
Dans mon cas je souhaite qu'entre 7h et 21h que le thermostat soit régler a 20.5, et le reste du temps à 19.5.

Re: Blocky, en script LUA

Publié : 05 févr. 2019, 13:42
par djrams10
Tu parle de la fonction planning dans domoticz? parce que j'ai une particularité, si tu regarde bien dans le blocky, dès que le thermostat de la chambre décent en dessous de 18.5, il monte le thermostat a 24, et des que la température revient au dessus de 18.5, le thermostat redescend a la température normale, soit 19.5, ou 20.5 en fonction de l'horaire. Le problème du planning, c'est qu'il va mettre une température à une heure indiquée et si le température augmente a 24, elle ne redescendra pas, il faut que je trouve le moyen comme actuellement avec blocky de maintenir les températures demandé en fonction de l'horaire, mais qu'elle monte seulement lorsque la température baisse. assez compliquée.

Re: Blocky, en script LUA

Publié : 05 févr. 2019, 14:09
par djrams10
denis_brasseur a écrit : 05 févr. 2019, 13:37 Si tu veux t'initier au LUA, voici ce que peux donner ton script actuel (je n'ai pas gérer les setpoint, jusque les conditions) :

Code : Tout sélectionner

  -- retourne l'heure actuelle ex: "12:45"
heure = string.sub(os.date("%X"), 1, 5)

commandArray = {}
 
if (otherdevices['Capteur ouverture Cuisine']=='Closed' and otherdevices['Capteur ouverture Salon']=='Closed' and otherdevices["Capteur d'ouverture Yanis"]=='Closed' and otherdevices["Capteur d'ouverture Chambre des Parents"]=='Closed') then
	if otherdevices_svalues['Temperature Yanis'] < '18.5' then
		--mise à jour du setpoint à 24 °
	elseif otherdevices_svalues['Temperature Yanis'] >= '18.5' then
		if heure < '07:00' then
		--mise à jour du setpoint à 19.5 °
		elseif heure >= '07:00' then
		--mise à jour du setpoint à 20.5 °
		end
	end
end
 
return commandArray
Les 4 premieres conditions sur l'état des capteurs étant redondantes, écrit qu'une seul fois.
Idem pour Temperature Yanis >= 18.5, simplifié

Plusieurs remarques :
les apostrophes et caractères accentués dans les nom de capteurs comme "Capteur d'ouverture Chambre des Parents", pas très propre.
Pour les plages de température, tu écris < à 18.5, puis > 18.5. Qu'advient il de la valeur 18.0 dans ton test.
Idem pour < '07:00' et > '07:00', qu'advient il de = '07:00' ?

Ca peux être une bonne bases de démarrage en LUA, ce n'est que mon avis.

Une fois que tu aura repris à l'identique ton blocky existant, tu pourra le faire évoluer avec tes nouvelles conditions afin de te faire la main.
Dans mon cas je souhaite qu'entre 7h et 21h que le thermostat soit régler a 20.5, et le reste du temps à 19.5.
Merci beaucoup pour tes précieux conseils et ton aide.
J'ai modifié tous mes caractères spéciaux, bonne remarque.
Je comprend pas ce que tu veux savoir pour la valeur 18.0.
pourquoi dis tu que tu n'as pas gérer le setpoint? Le script n'est pas complet a ce stade?
J'ai rentrer ton script dans domotics et dans les log j'ai cette erreur: Error: EventSystem: in LUA: [string " -- retourne l'heure actuelle ex: "12:45"..."]:9: attempt to compare string with nil

merci et désolé je n'ai aucune notions.


Je comprend que tout ce qui commence par == n'est pas exécuter dans Domoticz. c'est a moi de trouver pour exécuter les setpoints. merci

Re: Blocky, en script LUA

Publié : 05 févr. 2019, 14:32
par patoche
Oui je parlais bien du planning dans domoticz du thermostat.
Quel est le but de fixer le thermosat à 24 pour une temperature < 18.5, pour la baisser après ?
Dans le script lua il n'y a pas la commande pour mettre à jour la consigne du thermostat, c'est juste un commentaire.
Si tu mets une condition <18 et > 18 , lorsque la temperature est à 18, domoticz ne sait pas quoi faire !
Comment as tu nommer ton script lua ?

Re: Blocky, en script LUA

Publié : 05 févr. 2019, 14:40
par denis_brasseur
Effectivement, le script n'est pas complet a ce stade, je n'ai géré que les conditions, pas la mise à jour.
patoche a écrit : 05 févr. 2019, 14:32 Dans le script lua il n'y a pas la commande pour mettre à jour la consigne du thermostat, c'est juste un commentaire.
Si tu mets une condition <18 et > 18 , lorsque la temperature est à 18, domoticz ne sait pas quoi faire !
Comment as tu nommer ton script lua ?

djrams10, règle d’abord ton problème de condition, tu passera à l'étape suivante ensuite.

Re: Blocky, en script LUA

Publié : 05 févr. 2019, 15:12
par djrams10
patoche a écrit : 05 févr. 2019, 14:32 Oui je parlais bien du planning dans domoticz du thermostat.
Quel est le but de fixer le thermosat à 24 pour une temperature < 18.5, pour la baisser après ?
Dans le script lua il n'y a pas la commande pour mettre à jour la consigne du thermostat, c'est juste un commentaire.
Si tu mets une condition <18 et > 18 , lorsque la temperature est à 18, domoticz ne sait pas quoi faire !
Comment as tu nommer ton script lua ?
le thermostat principal qui commande la chaudière est dans la salon, je le monte a 24 pour être certain que le thermostat allume bien la chaudière, car si dans le salon il y'a par exemple 20 et que je monte la température du thermostat a 19, alors que dans la chambre il y'a 18.5, le thermostat ne donnera pas l'odre de démarrer la chaudière car il y'a plus de 19 dans le salon. Alors que si je met 24, je suis certain que la chaudière s'allumera pour s'arrêter des que la température de la chambre dépassera 18.5. Compliqué mais vu que cette chambre est au nord, il fait souvent très froid alors que les autres chambres et salon sont plus chaud.
Je ne vois aucun problème, si la température descend en dessous de 18.5 il monte a 24, et si il est égale a 18.5 et plus, il se remettra a 19.5 ou 20.5 en fonction de l'heure. je ne vois pas de problème sur les conditions.

Re: Blocky, en script LUA

Publié : 05 févr. 2019, 15:32
par djrams10

Code : Tout sélectionner

  -- retourne l'heure actuelle ex: "12:45"
heure = string.sub(os.date("%X"), 1, 5)

commandArray = {}
 
if (otherdevices['ouverture cuisine']=='Closed' and otherdevices['ouverture salon']=='Closed' and otherdevices["ouverture yanis"]=='Closed' and otherdevices["ouverture parents"]=='Closed') then
	if otherdevices_svalues['temperature yanis'] < '18.5' then
		commandArray['Nest']='24'
	elseif otherdevices_svalues['temperature yanis'] >= '18.5' then
		if heure < '07:00' and heure > '21:00' then
		  commandArray['Nest']='19.5'
		elseif heure >= '07:00' and heure <= '21:00' then
		  commandArray['Nest']='20.5'
		end
	end
end
 
return commandArray
voilà ce que j'ai fait.

Re: Blocky, en script LUA

Publié : 05 févr. 2019, 15:42
par denis_brasseur
Ton heure ne peut pas etre inférieure à 07:00 et supérieure à 21:00 !

Code : Tout sélectionner

if heure < '07:00' and heure > '21:00' then
Mais elle peut etre inférieure à 07:00 ou supérieur à 21:00.

Code : Tout sélectionner

if heure < '07:00' or heure > '21:00' then