script pour gestion volets

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 <\>.
pierreet
Messages : 19
Inscription : 28 sept. 2018, 10:44

script pour gestion volets

Message par pierreet »

Bonjour,
Jusqu a maintenant je me suis debrouillé seul en prenant des bouts de scripts, des idees ou des solutions a droite a gauche mais là je bloque severe :(

Je commande mes volets via un sonoff touch 2 voies flashé en espurna avec mqtt pr la communication avec domoticz (v2020.2) du coup j ai 3 dummy, un pour chaque voie du sonoff (montee/descente) et un pour le volet dans domoticz.
Je commande en tout ca via un scenario, jusqu ici pas de souci tout fonctionne avec un petit blocky qui dit d ouvrir ou de fermer le volet lors du changment d etat de l inter virtuel du volet. Par contre si je passe par le sonoff (ce qui arrive souvent le matin pour mieux voir a la lumiere du jour) domoticz recoit bien l info via mqtt mais ne change pas le status du volet. J ai essayé de definir ca en plus en blocky mais ca finit toujours en une boucle infernale.
Du coup je me suis dit de faire une temp sur le changment d etat mais ca ne fonctionne pas et je ne comprends pas du tout pourquoi, je suis en nul en programmation, je n en ai jamais fait...
Voici le bout de code

Code : Tout sélectionner

local Host = '192.168.2.25:8080' -- user:pass@ip:port de domoticz
local volet = 'Volet bureau'
local virt_volet_btn = '365'  --idx bouton viruel Domoticz pour le volet du bureau
local phys_volet_bureau_on = 'Volet bureau on'  --idx 363
local phys_volet_bureau_off = 'Volet bureau off'  --idx 364

commandArray = {}
	if devicechanged[phys_volet_bureau_off] or devicechanged[phys_volet_bureau_on] or devicechanged[volet]==closed or devicechanged[volet]==open then
      
--		print (uservariables['volet_bureau_premiere_passe'])
		if uservariables['volet_bureau_premiere_passe'] == 0 then
			-- Mise à jour de l'état du bouton virtuel
			if (devicechanged[ phys_volet_bureau_off ]) then
				print 'AAAAA'
				commandArray['OpenURL'] = Host..'/json.htm?type=command&param=switchlight&virt_volet_btn='..virt_volet_btn..'&switchcmd=Off'
			elseif (devicechanged[phys_volet_bureau_on])  then
				print 'BBBBB'
				commandArray['OpenURL'] = Host..'/json.htm?type=command&param=switchlight&virt_volet_btn='..virt_volet_btn..'&switchcmd=On'
			elseif (devicechanged[ volet ]) == closed then
				print 'CCCCC'
				commandArray [phys_volet_bureau_off] = on
			elseif (devicechanged[ volet ]) == open then
				print 'DDDDD'
				commandArray [phys_volet_bureau_off] = on
			end
			commandArray['Variable:volet_bureau_premiere_passe'] = tostring(1)
		else
			commandArray['Variable:volet_bureau_premiere_passe'] = tostring(0)
end
end


--	print (commandArray)
	return commandArray
J ai bien sur creer une variable "volet_bureau_premiere_passe", il a d ailleurs fallu que je reboot pour la voir
Quand j active le script cela ne fonctionne pas et dans le log j ai CCCCC qui s affiche alors que l etat de mon dummy ne bouge pas, ne change pas, je comprends rien???
2020-09-21 18:10:08.088 Status: LUA: CCCCC
2020-09-21 18:10:08.092 Status: EventSystem: Script event triggered: script_device_volet_bureau
2020-09-21 18:10:08.238 Status: EventSystem: Script event triggered: script_device_volet_bureau
2020-09-21 18:10:08.373 Status: LUA: CCCCC
2020-09-21 18:10:08.374 Status: EventSystem: Script event triggered: script_device_volet_bureau
2020-09-21 18:10:08.534 Status: EventSystem: Script event triggered: script_device_volet_bureau
2020-09-21 18:10:08.652 Status: LUA: CCCCC
2020-09-21 18:10:08.654 Status: EventSystem: Script event triggered: script_device_volet_bureau
2020-09-21 18:10:08.771 Status: EventSystem: Script event triggered: script_device_volet_bureau
2020-09-21 18:10:08.901 Status: LUA: CCCCC
2020-09-21 18:10:08.902 Status: EventSystem: Script event triggered: script_device_volet_bureau
2020-09-21 18:10:17.475 Status: EventSystem: Script event triggered: script_device_volet_bureau
2020-09-21 18:10:27.455 Status: LUA: CCCCC
2020-09-21 18:10:27.456 Status: EventSystem: Script event triggered: script_device_volet_bureau
2020-09-21 18:10:37.497 Status: EventSystem: Script event triggered: script_device_volet_bureau
2020-09-21 18:10:47.467 Status: LUA: CCCCC
2020-09-21 18:10:47.468 Status: EventSystem: Script event triggered: script_device_volet_bureau
Et j ai des tas d iteration alors que l etat des boutons de ce script ne change pas, le script est un device nommé comme il faut je crois.
Si une ame charitable comprends mes explications et peut m aider ce serait sympa, soit en utilisant mon bout de code ou en faisant autrement peut importe.
Ce que je voudrais au final c est lorsque j ouvre mon volet en local, via le bouton materiel du sonoff cela change mon inter virtuel de volet dans domoticz et lorsque j utilise mon inter virtuel de volet dans domoticz que celui agisse sur le sonoff.
Merci par avance

edit: j ai egalement essayé avec on/off au lieu de open/closed pour le volet virtuel
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: script pour gestion volets

Message par denis_brasseur »

Cette syntaxe ne me semble pas correcte :

Code : Tout sélectionner

devicechanged[volet]==closed or devicechanged[volet]==open
Devrait s'écrire :

Code : Tout sélectionner

devicechanged[volet]=='Closed' or devicechanged[volet]=='Open'
Idem pour

Code : Tout sélectionner

elseif (devicechanged[ volet ]) == open then
	print 'DDDDD'
	commandArray [phys_volet_bureau_off] = on
Qui devrait s'écrire

Code : Tout sélectionner

elseif devicechanged[volet] == 'Open' then
	print 'DDDDD'
	commandArray[phys_volet_bureau_off] = 'On'
Commence par écrire correctement les syntaxes
Lexique des commandes en LUA
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
pierreet
Messages : 19
Inscription : 28 sept. 2018, 10:44

Re: script pour gestion volets

Message par pierreet »

oui pardon je n ai pas precisé mais ne connaissant pas vraiment les syntaxes j ai essayé avec et sans les apostrophes, c est d ailleurs pour cela qu on voit des espaces de tps en tps dans le code mais pas partout :)
je teste tt de suite
pierreet
Messages : 19
Inscription : 28 sept. 2018, 10:44

Re: script pour gestion volets

Message par pierreet »

Merci je n ai plus ttes les iterations dans le log, mais cela ne fonctionne pas :(
Merci aussi pour le O majuscule j avais pas fait attention

Donc rien ne se passe lorsque j utilise le volet virtuel, et son status ne change pas si j utlise les boutons du sonoff (via domoticz ou en direct sur le bouton physique)
Rien ne s affiche non plus dans le log en utilisant le volet virtuel
Par contre j ai bien une trace lorsque j utilise le bouton physique
2020-09-21 22:14:08.842 Status: EventSystem: Script event triggered: script_device_volet_bureau
2020-09-21 22:14:34.681 (Sonoff touch) Light/Switch (Volet bureau on)
2020-09-21 22:14:34.676 Status: User: Admin initiated a switch command (363/Volet bureau on/On)
2020-09-21 22:14:34.925 Status: LUA: BBBBB
2020-09-21 22:14:34.926 Status: EventSystem: Fetching URL 192.168.2.25:8080/json.htm?type=command&param=switchlight&virt_volet_btn=365&switchcmd=On after 0.2 seconds...
2020-09-21 22:14:34.926 Status: EventSystem: Script event triggered: script_device_volet_bureau
pierreet
Messages : 19
Inscription : 28 sept. 2018, 10:44

Re: script pour gestion volets

Message par pierreet »

Je viens de voir une erreur dans mon json en fait je devais mettre

Code : Tout sélectionner

Host..'/json.htm?type=command&param=switchlight&idx='..virt_volet_btn..'&switchcmd=Off'
Du coup le status change enfin en utlisant les boutons physiques mais rien en se passe via le bouton virtuel du volet

J avance j avance :)

On a donc maintenant

Code : Tout sélectionner

local Host = '192.168.2.25:8080' -- user:pass@ip:port de domoticz
local volet = 'Volet bureau'
local virt_volet_btn = '365'  --bouton viruel Domoticz pour le volet du bureau
local phys_volet_bureau_on = 'Volet bureau on'
local phys_volet_bureau_off = 'Volet bureau off'

commandArray = {}
	if devicechanged[phys_volet_bureau_off] or devicechanged[phys_volet_bureau_on] or devicechanged[volet]=='closed' or devicechanged[volet]=='open' then
      
--		print (uservariables['volet_bureau_premiere_passe'])
		if uservariables['volet_bureau_premiere_passe'] == 0 then
			-- Mise à jour de l'état du bouton virtuel
			if (devicechanged[ phys_volet_bureau_off ]) then
				print 'AAAAA'
				commandArray['OpenURL'] = Host..'/json.htm?type=command&param=switchlight&idx='..virt_volet_btn..'&switchcmd=Off'
			elseif (devicechanged[phys_volet_bureau_on])  then
				print 'BBBBB'
				commandArray['OpenURL'] = Host..'/json.htm?type=command&param=switchlight&idx='..virt_volet_btn..'&switchcmd=On'
			elseif devicechanged[volet] == 'closed' then
				print 'CCCCC'
				commandArray [phys_volet_bureau_off] = 'On'
			elseif devicechanged[volet] == 'open' then
				print 'DDDDD'
				commandArray [phys_volet_bureau_off] = 'On'
			end
			commandArray['Variable:volet_bureau_premiere_passe'] = tostring(1)
		else
			commandArray['Variable:volet_bureau_premiere_passe'] = tostring(0)
end
end


--	print (commandArray)
	return commandArray
Je n arrive pas a faire fonctionner CCCCC et DDDDD
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: script pour gestion volets

Message par denis_brasseur »

elseif devicechanged[volet] == 'Closed' then
print 'CCCCC'
commandArray[phys_volet_bureau_off] = 'On'
elseif devicechanged[volet] == 'Open' then
print 'DDDDD'
commandArray[phys_volet_bureau_off] = 'On'
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
pierreet
Messages : 19
Inscription : 28 sept. 2018, 10:44

Re: script pour gestion volets

Message par pierreet »

Effectivement il manquait les maj, merci, malheureusement cela ne change pas le probleme.
Idem avec On a la place de Open et Off a la place de Closed, j ai essayé au cas où...
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: script pour gestion volets

Message par Keros »

Remets nous ton script et tes logs. Il faut qu'on voit l'exécution de ton script (réactive ton premier print)
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
pierreet
Messages : 19
Inscription : 28 sept. 2018, 10:44

Re: script pour gestion volets

Message par pierreet »

Code : Tout sélectionner

local Host = '192.168.2.25:8080' -- user:pass@ip:port de domoticz
local volet = 'Volet bureau'
local virt_volet_btn = '365'  --bouton viruel Domoticz pour le volet du bureau
local phys_volet_bureau_on = 'Volet bureau on'
local phys_volet_bureau_off = 'Volet bureau off'

commandArray = {}
	if devicechanged[phys_volet_bureau_off] or devicechanged[phys_volet_bureau_on] or devicechanged[volet]=='closed' or devicechanged[volet]=='open' then
      
		print (uservariables['volet_bureau_premiere_passe'])
		if uservariables['volet_bureau_premiere_passe'] == 0 then
			-- Mise à jour de l'état du bouton virtuel
			if (devicechanged[ phys_volet_bureau_off ]) then
				print 'AAAAA'
				commandArray['OpenURL'] = Host..'/json.htm?type=command&param=switchlight&idx='..virt_volet_btn..'&switchcmd=Off'
			elseif (devicechanged[phys_volet_bureau_on])  then
				print 'BBBBB'
				commandArray['OpenURL'] = Host..'/json.htm?type=command&param=switchlight&idx='..virt_volet_btn..'&switchcmd=On'
			elseif devicechanged[volet] == 'Closed' then
				print 'CCCCC'
				commandArray [phys_volet_bureau_off] = 'On'
			elseif devicechanged[volet] == 'Open' then
				print 'DDDDD'
				commandArray [phys_volet_bureau_off] = 'On'
			end
			commandArray['Variable:volet_bureau_premiere_passe'] = tostring(1)
		else
			commandArray['Variable:volet_bureau_premiere_passe'] = tostring(0)
end
end


--	print (commandArray)
	return commandArray
2020-09-23 22:44:22.523 Status: EventSystem: reset all events...
2020-09-23 22:44:22.557 Status: dzVents: Write file: /home/pierreet/domoticz/scripts/dzVents/generated_scripts/script_device_pc_lucille.lua
2020-09-23 22:44:45.108 Status: EventSystem: reset all events...
2020-09-23 22:44:45.111 Status: dzVents: Write file: /home/pierreet/domoticz/scripts/dzVents/generated_scripts/script_device_pc_lucille.lua
2020-09-23 22:45:00.658 (Sonoff touch) Light/Switch (Volet bureau)
2020-09-23 22:45:00.105 Status: dzVents: Info: ------ Start internal script: script_device_pc_lucille:, trigger: "every minute"
2020-09-23 22:45:00.650 Status: User: Admin initiated a switch command (365/Volet bureau/On)
2020-09-23 22:45:01.151 (Rad sdb) Light/Switch (Rad sdb on off)
2020-09-23 22:45:01.161 (Rad cuisine) Light/Switch (Rad cuisine on off)
2020-09-23 22:45:01.221 (Rad salle) Light/Switch (Rad salle on off)
2020-09-23 22:45:01.234 (Rad salon) Light/Switch (Rad salon on off)
2020-09-23 22:45:01.248 (Rad entree) Light/Switch (Rad entree on off)
2020-09-23 22:45:01.300 (Rad bureau) Light/Switch (Rad bureau on off)
2020-09-23 22:45:01.308 (Rad celeste) Light/Switch (Rad celeste on off)
2020-09-23 22:45:01.316 (Rad lucille) Light/Switch (Rad lucille on off)
2020-09-23 22:45:01.121 Status: dzVents: OrdiLucille ping 82 times failed.
2020-09-23 22:45:01.121 Status: dzVents: Info: ------ Finished script_device_pc_lucille
2020-09-23 22:45:01.138 Status: EventSystem: Script event triggered: script_time_thermosdb.lua
2020-09-23 22:45:01.147 Status: EventSystem: Script event triggered: script_time_thermocuisine.lua
2020-09-23 22:45:01.175 Status: EventSystem: Script event triggered: script_time_thermosalle.lua
2020-09-23 22:45:01.190 Status: EventSystem: Script event triggered: script_time_thermosalon.lua
2020-09-23 22:45:01.207 Status: EventSystem: Script event triggered: script_time_thermoentree.lua
2020-09-23 22:45:01.234 Status: EventSystem: Script event triggered: script_time_thermobureau.lua
2020-09-23 22:45:01.254 Status: EventSystem: Script event triggered: script_time_thermoceleste.lua
2020-09-23 22:45:01.266 Status: EventSystem: Script event triggered: script_time_thermolucille.lua
2020-09-23 22:45:07.561 Error: EventSystem: in Octoprint: [string "-- Use Lua -> Time..."]:58: attempt to index a nil value (global 'JsonOctoTemp')
2020-09-23 22:45:23.395 (Sonoff touch) Light/Switch (Volet bureau)
2020-09-23 22:45:23.366 Status: User: Admin initiated a switch command (365/Volet bureau/Off)
2020-09-23 22:46:00.129 Status: dzVents: Info: ------ Start internal script: script_device_pc_lucille:, trigger: "every minute"
2020-09-23 22:46:01.201 (Rad sdb) Light/Switch (Rad sdb on off)
2020-09-23 22:46:01.211 (Rad cuisine) Light/Switch (Rad cuisine on off)
2020-09-23 22:46:01.221 (Rad salle) Light/Switch (Rad salle on off)
2020-09-23 22:46:01.232 (Rad salon) Light/Switch (Rad salon on off)
2020-09-23 22:46:01.284 (Rad entree) Light/Switch (Rad entree on off)
2020-09-23 22:46:01.293 (Rad bureau) Light/Switch (Rad bureau on off)
2020-09-23 22:46:01.301 (Rad celeste) Light/Switch (Rad celeste on off)
2020-09-23 22:46:01.310 (Rad lucille) Light/Switch (Rad lucille on off)
J ai mis en gras l ouverture et la fermeture du volet virtuel via domoticz (idx 365 ou 'volet bureau') lorsque je l active via le volet virtuel dans domoticz
L erreur octoprint est du au fait que le pi dédié est déconnecté en ce moment, les RAD sont les script thermostat multizone pour les radiateurs
Enfin le script pc_lucille est un ping sur le pc de ma fille pour m alerter si lheure est trop tardive :D

Comme on le voit le script ne genere aucune info a part la commutation/changment d etat de l idx 365 (Volet bureau), pas de trace de CCCCC ou DDDDD

Merci a vous de prendre le temps
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: script pour gestion volets

Message par denis_brasseur »

Relis ton code et les conseils précédent :
if devicechanged[phys_volet_bureau_off] or devicechanged[phys_volet_bureau_on] or devicechanged[volet]=='Closed' or devicechanged[volet]=='Open' then
ou bien :

Code : Tout sélectionner

if devicechanged[phys_volet_bureau_off] or devicechanged[phys_volet_bureau_on] or devicechanged[volet] then
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Répondre