Page 1 sur 2

[DzVents]premier essai, Allumage LED avec Bouton SonOff SNZB-01

Publié : 17 avr. 2022, 05:24
par taz5962
Salut

Bon je me lance et j'essaye, j'avoue complétement a tâtons mais on verra bien
et ceux malgré avoir lu et relu les liens fournit par Keros

alors explication avant de commencer
je possède un bouton sonoff avec lequel je souhaiterais allumer et éteindre un bandeau LED
ce bandeau LED est un RGBW Zigbee reconnu par domoticz en tant que dimmer
bien sur, ils sont bien coupler a DomoticZ
voici le code que j'ai essayé de créer

Code : Tout sélectionner

return {                                                                        -- ???
		on = {                                                                  -- 
		devices = {                                                             -- liste des devices
			'Mini_Inter',                                                       -- noms des devices utilisés
		}
	},
	logging = {                                                                 -- ???
		level = domoticz.LOG_DEBUG,                                             -- le script écrit dans les LOG_DEBUG de DomoticZ(Décommentez pour remplacer le paramètre de journalisation globale dzVents)
		marker = 'Mini_Inter_LED_Lidl'                                          -- nom du script
	},
	execute = function(domoticz, bouton)                                        -- exécuter la fonction bouton ????
		domoticz.log("Mini_Inter : "..bouton.state)                             -- vérifier l'état de Mini_Inter dans les logs DomoticZ
		  if(bouton.state == 'simple_pression')then                             -- SI l'état de Mini_Inter passe a simple_pression ALORS
			 domoticz.devices('LED_Lidl').switchSelector("on")                  -- allumer  device LED_Lidl
		  elseif(bouton.state == 'double_pression')then                         -- SINON SI l'état de Mini_Inter passe a double_pression ALORS
		--rien                                                                  -- ne rien faire
	      elseif(bouton.state == 'Longue_pression')then                         -- SINON SI l'état de Mini_Inter passe a longue_pression ALORS
			 domoticz.devices('LED_Lidl').switchSelector("off")                 -- éteindre device LED_Lidl
		end                                                                     -- fin des conditions ????
	end                                                                         -- fin de la fonction ????
}
je teste donc le fonctionnement et voici ce que les logs m'annonce

Code : Tout sélectionner

2022-04-17 04:50:13.085 Notification sent (browser) => Success
2022-04-17 04:50:13.084 Status: Notification: simple_pression
2022-04-17 04:50:13.209 Status: dzVents: Info: Handling events for: "Mini_Inter", value: "Simple"
2022-04-17 04:50:13.209 Status: dzVents: Info: Mini_Inter_LED_Lidl: ------ Start internal script: Script #1: Device: "Mini_Inter (Zigbee2mqtt_Sonoff)", Index: 23
2022-04-17 04:50:13.209 Status: dzVents: Info: Mini_Inter_LED_Lidl: Mini_Inter : Simple
2022-04-17 04:50:13.210 Status: dzVents: Info: Mini_Inter_LED_Lidl: ------ Finished Script #1 
2022-04-17 04:50:24.967 Notification sent (browser) => Success
2022-04-17 04:50:24.962 Status: Notification: longue_pression
2022-04-17 04:50:25.063 Status: dzVents: Info: Handling events for: "Mini_Inter", value: "Long"
2022-04-17 04:50:25.063 Status: dzVents: Info: Mini_Inter_LED_Lidl: ------ Start internal script: Script #1: Device: "Mini_Inter (Zigbee2mqtt_Sonoff)", Index: 23
2022-04-17 04:50:25.063 Status: dzVents: Info: Mini_Inter_LED_Lidl: Mini_Inter : Long
2022-04-17 04:50:25.063 Status: dzVents: Info: Mini_Inter_LED_Lidl: ------ Finished Script #1 
Aucune erreur n'est annoncé dans les logs mais problème, le bandeau LED ne s'allume pas



j'ai aussi essayé ainsi mais la j'ai des erreurs qui s'annoncent

Code : Tout sélectionner

return {                                                                        -- ???
		on = {                                                                  -- 
		devices = {                                                             -- liste des devices
			'Mini_Inter',                                                       -- noms des devices utilisés
		}
	},
	logging = {                                                                 -- ???
		level = domoticz.LOG_DEBUG,                                             -- le script écrit dans les LOG_DEBUG de DomoticZ(Décommentez pour remplacer le paramètre de journalisation globale dzVents)
		marker = 'Mini_Inter_LED_Lidl'                                          -- nom du script
	},
	execute = function(domoticz, bouton)                                        -- exécuter la fonction bouton ????
		domoticz.log("Mini_Inter : "..bouton.state)                             -- vérifier l'état de Mini_Inter dans les logs DomoticZ
		  if(bouton.state == 'Simple')then                                      -- SI l'état de Mini_Inter passe a simple_pression ALORS
			 domoticz.devices('LED_Lidl').switchSelector("on")                  -- allumer  device LED_Lidl
		  elseif(bouton.state == 'Double')then                                  -- SINON SI l'état de Mini_Inter passe a double_pression ALORS
		--rien                                                                  -- ne rien faire
	      elseif(bouton.state == 'Long')then                                    -- SINON SI l'état de Mini_Inter passe a longue_pression ALORS
			 domoticz.devices('LED_Lidl').switchSelector("off")                 -- éteindre device LED_Lidl
		end                                                                     -- fin des conditions ????
	end                                                                         -- fin de la fonction ????
}

Code : Tout sélectionner

2022-04-17 05:10:01.224 Notification sent (browser) => Success
2022-04-17 05:10:01.223 Status: Notification: simple_pression
2022-04-17 05:10:01.311 Status: dzVents: Info: Handling events for: "Mini_Inter", value: "Simple"
2022-04-17 05:10:01.311 Status: dzVents: Info: Mini_Inter_LED_Lidl: ------ Start internal script: Script #2: Device: "Mini_Inter (Zigbee2mqtt_Sonoff)", Index: 23
2022-04-17 05:10:01.311 Status: dzVents: Info: Mini_Inter_LED_Lidl: Mini_Inter : Simple
2022-04-17 05:10:01.312 Status: dzVents: Debug: Mini_Inter_LED_Lidl: Processing device-adapter for LED_Lidl: RGB(W) device adapter
2022-04-17 05:10:01.312 Status: dzVents: Debug: Mini_Inter_LED_Lidl: Processing device-adapter for LED_Lidl: Switch device adapter
2022-04-17 05:10:01.312 Status: dzVents: Info: Mini_Inter_LED_Lidl: ------ Finished Script #2
2022-04-17 05:10:01.312 Error: dzVents: Error: (3.1.8) Mini_Inter_LED_Lidl: An error occurred when calling event handler Script #2
2022-04-17 05:10:01.312 Error: dzVents: Error: (3.1.8) Mini_Inter_LED_Lidl: ...moticz/dzVents/runtime/device-adapters/switch_device.lua:131: attempt to get length of a nil value (field 'levelNames')
2022-04-17 05:10:10.524 Notification sent (browser) => Success
2022-04-17 05:10:10.522 Status: Notification: longue_pression
2022-04-17 05:10:10.650 Status: dzVents: Info: Handling events for: "Mini_Inter", value: "Long"
2022-04-17 05:10:10.650 Status: dzVents: Info: Mini_Inter_LED_Lidl: ------ Start internal script: Script #2: Device: "Mini_Inter (Zigbee2mqtt_Sonoff)", Index: 23
2022-04-17 05:10:10.650 Status: dzVents: Info: Mini_Inter_LED_Lidl: Mini_Inter : Long
2022-04-17 05:10:10.651 Status: dzVents: Debug: Mini_Inter_LED_Lidl: Processing device-adapter for LED_Lidl: RGB(W) device adapter
2022-04-17 05:10:10.651 Status: dzVents: Debug: Mini_Inter_LED_Lidl: Processing device-adapter for LED_Lidl: Switch device adapter
2022-04-17 05:10:10.651 Status: dzVents: Info: Mini_Inter_LED_Lidl: ------ Finished Script #2
2022-04-17 05:10:10.651 Error: dzVents: Error: (3.1.8) Mini_Inter_LED_Lidl: An error occurred when calling event handler Script #2
2022-04-17 05:10:10.651 Error: dzVents: Error: (3.1.8) Mini_Inter_LED_Lidl: ...moticz/dzVents/runtime/device-adapters/switch_device.lua:131: attempt to get length of a nil value (field 'levelNames') 
j'ai beau lire et relire les tutos, l'écriture en elle même de la programmation reste du chinois
je comprends le principe du fonctionnement pour avoir survolé l'automatisation des machines pour mon niveau BACpro Electro
d’où je penses une plus grande facilité d'utilisation du Blocky mais avec toujours de grosses lacunes

Pourriez vous m’aiguiller dans mon incompétence
Et pourriez vous me dire si les commentaires que j'ai ajoutés sont bon ou pas
Et vous pourriez ajouter les commentaires manquants et expliquer ceux commentés mais avec ????
Merci d'avance

Re: [DzVents]premier essai

Publié : 17 avr. 2022, 08:41
par Keros
C'est déjà pas mal, bravo ;)

Des petites choses :
  • execute = function(domoticz, bouton)
    Tu utilises le terme bouton comme variable pour le nom de ton déclencheur, ça fonctionnera. Mais dans un autre script ce n'est pas un "bouton" mais un détecteur, cela risque d'être confus. Et si c'est un timer, là, il vaut mieux tout renommer.
    J'ai pris l'habitude d'utiliser execute = function(domoticz, item), de cette façon, item serra toujours ma variable déclencheur quelque soit mes scripts.
  • domoticz.log("Mini_Inter : "..bouton.state)
    C'est très bien de faire ce débogage : tu connais le nom de la variable et sa valeur. Par contre, en dessous dans ta condition, tu ne sais pas laquelle est validée : il serait judicieux de rajouter des domoticz.log pour savoir quelle condition a été validée et quelle action doit normalement se faire.
  • domoticz.devices('LED_Lidl').switchSelector("on")
    Venons-en a ton souci. Je pense qu'il est sur cette ligne-là. As-tu essayé les commandes switchOn() et switchOnff() (info dans le wiki)
Si ça ne débloque pas, tu peux nous mettre un screenshot de ton widget que tu cherches à commander ?

Re: [DzVents]premier essai, Allumage LED avec Bouton SonOff SNZB-01

Publié : 19 avr. 2022, 00:17
par taz5962
Tout d'abord merci !!!
Je fais ce que je peux mais c'est plus de l'adaptation qu'une écriture proprement dites

Le problème venait bien de la ligne que tu incriminais, le passage de switchselector a switchOn et SwitchOff a réglé le soucis est maintenant le bandeau LED s'allume bien et s’éteint bien
En suivant ton conseil avec les variables voici ce que ca donne

Code : Tout sélectionner

return {                                                                        -- ???
	active = true,                                                              -- validation du script
	logging = {                                                                 -- ???
		level = domoticz.LOG_DEBUG,                                             -- le script écrit dans les LOG_DEBUG de DomoticZ(Décommentez pour remplacer le paramètre de journalisation globale dzVents)
		marker = 'Mini_Inter_LED_Lidl'                                          -- nom du script
	},
	on = {                                                                      -- 
		devices = {                                                             -- liste des devices
			'Mini_Inter',                                                       -- noms des devices utilisés
		},
	},
	execute = function(domoticz, item)                                          -- exécuter la fonction bouton ????
		domoticz.log("Mini_Inter : "..item.state)                               -- vérifier l'état de Mini_Inter dans les logs DomoticZ
		  if(item.state == 'simple_pression')then                               -- SI l'état de Mini_Inter passe a simple_pression ALORS
			 domoticz.devices('LED_Lidl').switchOn("On")                        -- allumer  device LED_Lidl
		  elseif(item.state == 'double_pression')then                           -- SINON SI l'état de Mini_Inter passe a double_pression ALORS
		--rien                                                                  -- ne rien faire
	      elseif(item.state == 'longue_pression')then                           -- SINON SI l'état de Mini_Inter passe a longue_pression ALORS
			 domoticz.devices('LED_Lidl').switchOff("Off")                      -- éteindre device LED_Lidl
		end                                                                     -- fin des conditions ????
	end                                                                         -- fin de la fonction ????
}
Keros a écrit : 17 avr. 2022, 08:41 [*]domoticz.log("Mini_Inter : "..bouton.state)
C'est très bien de faire ce débogage : tu connais le nom de la variable et sa valeur. Par contre, en dessous dans ta condition, tu ne sais pas laquelle est validée : il serait judicieux de rajouter des domoticz.log pour savoir quelle condition a été validée et quelle action doit normalement se faire.
Pourrez tu développer cela,
je comprends ce que tu veux dire mais je vois pas du tout ce que je pourrais ajouter pour cela


Maintenant que le fonctionnement est OK,
Comment pourrais sélectionner le défilement de couleurs en utilisant la double pression ?
Partons sur le principe d'une télécommande souvent livrée avec les kits LED
En faisant des double click je souhaiterais faire défiler les couleurs
J'ai récolté le code des couleurs dans domoticz mais comment appliquer
Déjà est ce possible ?
je pense que je dois passer par cette commande a la place de .switchOn
domoticz.devices('LED_Lidl').setColor(r, g, b, br, cw, ww, m, t)
mais quoi mettre entre les parenthèses ?
surtout pour faire défiler les couleurs

Re: [DzVents]premier essai, Allumage LED avec Bouton SonOff

Publié : 19 avr. 2022, 09:08
par Keros
Top :)

Pour info, les commandes s'écrient : domoticz.devices('LED_Lidl').switchOn() et domoticz.devices('LED_Lidl').switchOff() pas besoin de "On" ou "Off" pour ces deux commandes.

Pour un débogage "complet", voici ce que j'essayais de dire :

Code : Tout sélectionner

log("Mini_Inter : "..item.state) 
Condition si item.state = valeur alors
	log("Condition validée") 
	Interrupteur On
sinon
	log("Condition non validée") 
	Interrupteur Off
fin

Concernant les couleurs du ruban, si tu as un widget qui permet de sélectionner le défilement de couleur, tu peux le commander, sinon, oui il faudra certainement passer par setColor(r, g, b, br, cw, ww, m, t). Ce qui est entre parenthèse va dépendre de ton widget. Déjà c'est Red, Green, Blue, br ??, Cold White, Warm white, m ?, t ?) Tu trouveras le reste des infos dans l'API https://www.domoticz.com/wiki/Domoticz_ ... emperature
Mais cela va te permettre de sélectionner une couleur. Si tu veux faire un défilement, il va falloir le faire plusieurs fois. Ce serait plus simple si tu pouvait appeler directement une fonction de ton objet.

Re: [DzVents]premier essai, Allumage LED avec Bouton SonOff SNZB-01

Publié : 30 avr. 2022, 02:38
par taz5962
désolé pour la réponse tardive

pour ce qui est du débogage complet si je te suis cela donnerai

Code : Tout sélectionner

return {                                                                        -- ???
	active = true,                                                              -- validation du script
	logging = {                                                                 -- ???
		level = domoticz.LOG_DEBUG,                                             -- le script écrit dans les LOG_DEBUG de DomoticZ(Décommentez pour remplacer le paramètre de journalisation globale dzVents)
		marker = 'Mini_Inter_LED_Lidl'                                          -- nom du script
	},
	on = {                                                                      -- 
		devices = {                                                             -- liste des devices
			'Mini_Inter',                                                       -- noms des devices utilisés
		},
	},
	execute = function(domoticz, item)                                          -- exécuter la fonction bouton ????
		domoticz.log("Mini_Inter : "..item.state)                               -- vérifier l'état de Mini_Inter dans les logs DomoticZ
		  if(item.state == 'simple_pression')then                               -- SI l'état de Mini_Inter passe a simple_pression ALORS
		     domoticz.log("Condition validée") 
			 domoticz.devices('LED_Lidl').switchOn()                            -- allumer  device LED_Lidl
	  elseif(item.state == 'double_pression')then                           -- SINON SI l'état de Mini_Inter passe a double_pression ALORS
	         domoticz.log("Condition validée")
		     domoticz.devices('LED_Lidl').setColor(r, g, b, br, cw, ww, m, t)   -- régler device LED_Lidl sur tel couleur
      elseif(item.state == 'longue_pression')then                           -- SINON SI l'état de Mini_Inter passe a longue_pression ALORS
             domoticz.log("Condition validée")
			 domoticz.devices('LED_Lidl').switchOff()                           -- éteindre device LED_Lidl
		end                                                                     -- fin des conditions ????
	end                                                                         -- fin de la fonction ????
}
mais je suppose que "condition validé" n'est pas ce que je dois inscrire mais je ne vois pas trop par quoi le remplacer

Pour ce qui est des widgets pour ce ruban LED, j'en ai 2,
le 1er est un dimmer ou j'allume, éteint et change la couleur manuellement,
le 2e est un sélecteur ou je peux choisir des effets du style clignotement et compagnie (qui soit disant en passant ne fonctionne pas vraiment car quand je choisis un effet rien ne ce passe)

Re: [DzVents]premier essai, Allumage LED avec Bouton SonOff

Publié : 30 avr. 2022, 08:00
par Keros
L'idée de mettre des logs à l'intérieur des conditions et de pouvoir savoir laquelle est validée et ainsi connaitre quelle portion de script est exécutée.

Là, tel que tu l'as écrit, quelque soit l'appui fait sur le bouton, ce sera "Condition validée" qui sera écrit dans les logs à chaque fois. Dans ton cas, il serait intéressant de savoir s'il y eu un clic simple, double ou long.

Pour ton souci de widget non fonctionnel, je t'invite à créer un nouveau sujet afin d'éviter les discussions dans celui-ci.

Re: [DzVents]premier essai, Allumage LED avec Bouton SonOff SNZB-01

Publié : 30 avr. 2022, 09:21
par taz5962
ben il n'y a que la validation de la condition qui m’intéresse, si la condition n'est pas validé que ce soit ou pas notifié ne m’intéresse pas
donc pourquoi mettre autre chose que condition validé
je comprends pas ce que tu veux dire enfin je vois pas vers ou tu veux me diriger

j'ai modifié a nouveau le code mais je sais même pas si ce que j'ai fais rime a quelque chose

Code : Tout sélectionner

return {                                                                        -- ???
	active = true,                                                              -- validation du script
	logging = {                                                                 -- ???
		level = domoticz.LOG_DEBUG,                                             -- le script écrit dans les LOG_DEBUG de DomoticZ(Décommentez pour remplacer le paramètre de journalisation globale dzVents)
		marker = 'Mini_Inter_LED_Lidl'                                          -- nom du script
	},
	on = {                                                                      -- 
		devices = {                                                             -- liste des devices
			'Mini_Inter',                                                       -- noms des devices utilisés
		},
	},
	execute = function(domoticz, item)                                          -- exécuter la fonction bouton ????
		domoticz.log("Mini_Inter : "..item.state)                               -- vérifier l'état de Mini_Inter dans les logs DomoticZ
		  if(item.state == 'simple_pression')then                               -- SI l'état de Mini_Inter passe a simple_pression ALORS
		     if domoticz.log("simple_pression")then 
			 domoticz.devices('LED_Lidl').switchOn()			 				-- allumer  device LED_Lidl
			 elseif domoticz.log('')then
			 domoticz.devices('LED_Lidl').switchOff()
	  elseif(item.state == 'double_pression')then                           	-- SINON SI l'état de Mini_Inter passe a double_pression ALORS
	         if domoticz.log("double_pression")then
		     domoticz.devices('LED_Lidl').setColor(r, g, b, br, cw, ww, m, t)   -- régler device LED_Lidl sur tel couleur
			 elseif domoticz.log('')then
      elseif(item.state == 'longue_pression')then                           -- SINON SI l'état de Mini_Inter passe a longue_pression ALORS
			 if domoticz.log("longue_pression")then
             domoticz.log("longue_pression")
			 domoticz.devices('LED_Lidl').switchOff()                           -- éteindre device LED_Lidl
			 elseif domoticz.log('')then
			 domoticz.devices('LED_Lidl').switchOn()
		end                                                                     -- fin des conditions ????
	end                                                                         -- fin de la fonction ????
}

Re: [DzVents]premier essai, Allumage LED avec Bouton SonOff

Publié : 30 avr. 2022, 10:16
par Keros
La ligne if domoticz.log("double_pression")then doit te renvoyer une erreur.

Sinon, je pensais à ça :

Code : Tout sélectionner

return {                                                                        -- ???
	active = true,                                                              -- validation du script
	logging = {                                                                 -- ???
		level = domoticz.LOG_DEBUG,                                             -- le script écrit dans les LOG_DEBUG de DomoticZ(Décommentez pour remplacer le paramètre de journalisation globale dzVents)
		marker = 'Mini_Inter_LED_Lidl'                                          -- nom du script
	},
	on = {                                                                      -- 
		devices = {                                                             -- liste des devices
			'Mini_Inter',                                                       -- noms des devices utilisés
		},
	},
	execute = function(domoticz, item)                                          -- exécuter la fonction bouton ????
		domoticz.log("Mini_Inter : "..item.state)                               -- vérifier l'état de Mini_Inter dans les logs DomoticZ
		  if item.state == 'simple_pression' then                               -- SI l'état de Mini_Inter passe a simple_pression ALORS
		     domoticz.log("Simple pression sur Mini_Inter > LED_Lidl = On") 
			 domoticz.devices('LED_Lidl').switchOn()                            -- allumer  device LED_Lidl
	  elseif item.state == 'double_pression' then                           -- SINON SI l'état de Mini_Inter passe a double_pression ALORS
	         domoticz.log("Double pression sur Mini_Inter > Set color sur LED_Lidl")
		     domoticz.devices('LED_Lidl').setColor(r, g, b, br, cw, ww, m, t)   -- régler device LED_Lidl sur tel couleur
      elseif item.state == 'longue_pression' then                           -- SINON SI l'état de Mini_Inter passe a longue_pression ALORS
             domoticz.log("Longue pression sur Mini_Inter > LED_Lidl = Off")
			 domoticz.devices('LED_Lidl').switchOff()                           -- éteindre device LED_Lidl
		end                                                                     -- fin des conditions ????
	end                                                                         -- fin de la fonction ????
}
De cette façon, tu sais quelle condition a été validée. Tu peux en profiter pour mettre des indications sur ce qui est lancé.

Tu peux également enlever les parenthèses sur la ligne : if(item.state == 'simple_pression')then

Re: [DzVents]premier essai, Allumage LED avec Bouton SonOff SNZB-01

Publié : 01 mai 2022, 05:10
par taz5962
y a une chose que je comprends pas, tu écrit le script en français
il doit pas être écris en anglais ?

c'est toutes ces subtilités qui ne sont pas simple a comprendre et assimiler pour des néophytes qui ce lance a l'aveugle

comme cette histoire de parenthèse que je peut enlever, pourquoi ici je peux m'en passer et pourquoi ailleurs non ?

quand tu dis tu peux en profiter pour mettre des indications, tu veux dire que je peux ajouter des commentaires pour expliquer les lignes ?

Re: [DzVents]premier essai, Allumage LED avec Bouton SonOff

Publié : 01 mai 2022, 12:04
par Keros
Dans le cas de if(item.state == 'simple_pression')then, oui, tu peux enlever les parenthèses. Ailleurs, je ne sais pas de quel cas tu parles.

Les indications dont je parle, ce fait référence à la ligne domoticz.log("Simple pression sur Mini_Inter > LED_Lidl = On"). Quand cette ligne apparait dans les logs, je sais que c'est Simple pression sur Mini_Inter qui a mis LED_Lidl à On. Tu peux l'écrire de la façon que tu veux : l'idée est d'avoir un retour sur ce qui se passe lors de l'exécution du script.

Ceci est différent des commentaires dans les scripts qui permettent de comprendre ce qui a été écrit, pour retrouver plus rapidement quand tu reviens dedans après plusieurs mois.