Récupérer l'état d'une scène ou d'un groupe

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 <\>.
Répondre
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Récupérer l'état d'une scène ou d'un groupe

Message par Chrominator »

Petit problème pour moi.

J'aimerais connaitre l'état d'un groupe dans un script LUA, pour ne pas ordonner un OFF quand le groupe est déjà OFF.

J'ai testé otherdevices[], qui ne me renvoie rien (par expérience).

Code : Tout sélectionner

print (otherdevices['Group:Volets Matin'])

Code : Tout sélectionner

print (otherdevices['Scene:Volets Matin'])
produit la même chose, rien :shock:
Connaissez-vous un moyen de récupérer l'état du groupe dans un script LUA ?
Capture.PNG
Capture.PNG (16.95 Kio) Consulté 10078 fois
Dernière modification par Chrominator le 15 janv. 2017, 09:55, modifié 1 fois.
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Récupérer l'état d'une scène ou d'un groupe

Message par deennoo »

j'ai la meme problematique.

L'api ne prevoit pas de pouvoir retrouver l'etat d'un groupe pour le moment :
https://www.domoticz.com/wiki/Domoticz_ ... .26_groups

Patrice nous a fait un article sur Json et LUA, c'est l'occasion de le mettre en pratique !
https://easydomoticz.com/lua-et-json/

La demarche va etre :
retrouver l'etat du groupe (ON ou OFF ou Mixte) via son idx en parsant le retour de la commande : http://ip:port//json.htm?type=scenes
la stocker dans une variable de script et s'en reservir.

Je test demain ou cette nuit
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: Récupérer l'état d'une scène ou d'un groupe

Message par Chrominator »

ah merci.

J'essaierais dès qu'Enedis m'aura remis le courant... :(
D'ici là tu as le temps de fiabiliser tout ça ! :D
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: Récupérer l'état d'une scène ou d'un groupe

Message par Chrominator »

Ça y est, j'ai de nouveau l'électricité :)

Bon j'ai suivi ton idée, voilà ce que ça donne :

J'ai créé une fonction à charger dans les scripts pour lesquels on veut connaître l'état d'un groupe ou d'une scene.
Mon script s'appelle comme la fonction, et doit être enregistré dans /home/pi/domoticz/scripts/lua.
Attention, la fonction utilise le décodeur json de Jeffrey Friedl disponible sur http://regex.info/blog/lua/json.
Ce script JSON.lua doit lui aussi être enregistré dans /home/pi/domoticz/scripts/lua.

Code : Tout sélectionner

--[[      	Script décrivant la fonction permettant 
			de connaitre l'état d'un groupe ou d'une scene.
	
	~/domoticz/scripts/lua/getscenestatus.lua
	
	-- Autors  ----------------------------------------------------------------
	V1.0 - Chrominator 
	-- Require  --------------------------------------------------------------
	
	input : index de la scene ou du groupe
	output : etat de la scene, nom de la scene
		
	-- Versions -------------------------------------------------------------
	2017-01-15 : Initial version
	
]]--
-- chargement de l'encodeur/décodeur json
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()

-- Remplacer ip_port_domoticz par l'ip et le port de votre Domoticz sous la forme 127.0.0.1:8080 par exemple
local ipportdomoticz = 'ip_port_domoticz'

function getscenestatus(Scene_idx)

	local Events = assert(io.popen('curl "http://'..ipportdomoticz..'/json.htm?type=scenes"'))
	local Scene = Events:read('*all')
	Events:close()

	local jsonScene = json:decode(Scene)
	if jsonScene == nil then 	
		print("Erreur dans l'url json") 
	end  

	Groups = jsonScene['result']

	for response,results in pairs(Groups) do
		if results['idx'] == Scene_idx then 
			status = results['Status']
			name = results['Name']
			end
	end
	return status, name
end
Ensuite pour utiliser la fonction dans les scripts, c'est assez simple.
On l'appelle avec l'index de la scene ou du groupe, et elle revoie l'état et le nom de la scene/du groupe.

Exemple :

Code : Tout sélectionner

-- chargement des modules
package.path = package.path..";/home/pi/domoticz/scripts/lua/?.lua"
require "getscenestatus"

commandArray = {}

local idx = '1'

local status, scene = getscenestatus(idx)

if status == 'Off' then
    print ( 'le groupe ou scene '..scene..' est Off')
else
    print ( 'le groupe ou scene '..scene..' est On')
end

return commandArray
Si on se moque de savoir comment s'appelle la scene qui a l'index n°idx, on peut simplement utiliser la fonction comme ça :

Code : Tout sélectionner

if getscenestatus(idx) == 'Off' then
    print ( 'le groupe ou scene est Off')
else
    print ( 'le groupe ou scene est On')
end
Dans une version ultérieure, une amélioration pourrait être de passer le nom de la scene ou du groupe comme paramètre d'entrée.
Pas trop dur à faire je pense.
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Récupérer l'état d'une scène ou d'un groupe

Message par deennoo »

Nickel !
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Récupérer l'état d'une scène ou d'un groupe

Message par vil1driver »

Salut,

tout ton code peut être remplacé par :

Code : Tout sélectionner

otherdevices_scenesgroups['mon groupe']
désolé :mrgreen:



sinon au lieu de jouer avec les idx utilise le nom, c'est plus sympa ;)

Code : Tout sélectionner

otherdevices_scenesgroups_idx['mon groupe']
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: RE: Re: Récupérer l'état d'une scène ou d'un groupe

Message par deennoo »

vil1driver a écrit :Salut,

tout ton code peut être remplacé par :

Code : Tout sélectionner

otherdevices_scenesgroups['mon groupe']
désolé :mrgreen:



sinon au lieu de jouer avec les idx utilise le nom, c'est plus sympa ;)

Code : Tout sélectionner

otherdevices_scenesgroups_idx['mon groupe']
Oui c'est vrai mais avec les idx :
- pas de fautes de frappe
- pas de soucis de maj min accents
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Récupérer l'état d'une scène ou d'un groupe

Message par vil1driver »

pas faux :mrgreen:
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: Récupérer l'état d'une scène ou d'un groupe

Message par Chrominator »

vil1driver a écrit :Salut,

tout ton code peut être remplacé par :

Code : Tout sélectionner

otherdevices_scenesgroups['mon groupe']
Bah c'était la question en effet, et je n'ai pas trouvé de réponse dans les WIKI ou ici.

Pô grave, ça m'a bougé les neurones. :P
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
Jeff
Messages : 1007
Inscription : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: Récupérer l'état d'une scène ou d'un groupe

Message par Jeff »

J'ai bien galéré pour trouver ce post et la solution.
J'ai cherché sur le wiki, sur le forum, pas trouvé et puis j'ai cherché sur le net pour retomber ici :?
J'étais pas loin et là cool : merci Vil1driver ;)

Jolie fonction Chrominator au passage !
Version: 2023.1 sur VM Synology, docker Zwave Js UI (Z-stick GEN5, Fibaro...), Zigbeefordomoticz. Nextion RGB Led Screen
Répondre