Boucler tous les devices du même nom

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 <\>.
freulon9292
Messages : 45
Inscription : 03 nov. 2018, 22:53

Boucler tous les devices du même nom

Message par freulon9292 »

Bonjour,

je cherche une fonction LUA qui me permettrait de "boucler" à travers tous les devices qui commencent par le même mot, pour vérifier/mettre à jour un état

par exemple, chercher tous les devices (interrupteurs) commençant par "cam" et les activer ...

Code : Tout sélectionner

   for i, cam in ipairs(devices:sub(1,3) == 'cam') do
        commandArray[cam] ='On'
        end
ou

Code : Tout sélectionner

        for cam in (device:sub(1,3) == 'cam') do
        print (cam)
        end
mais je crois comprendre que pour les pairs et ipairs (pas compris la différence), il faut définir les devices à l'avance (ce que je ne souhaite pas).

Je prends toutes les idées.
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: Boucler tous les devices du même nom

Message par boum »

Je ne crois pas qu'il y ait de fonction dédiée en lua, il est surement possible de définir une fonction similaire à pairs() pour avoir un comportement similaire, mais il est plus simple d'imbriquer in if dans le for :

Code : Tout sélectionner

for deviceName,deviceValue in pairs(otherdevices) do
    if (deviceName:sub(1,3) == 'cam') then
--    action
    end
end
En dzVents, il y a des « itérateurs » sur les dispositifs, groupes et scène. Ça donnerait ceci :

Code : Tout sélectionner

return {
	on = {
		devices = {
			'VirtualSwitch'
		}
	},
	execute = function(domoticz, item)
		local filterCams = function(device) return device.name:sub(1,3) == 'cam' end
		local actionCam = function(cam)
		    cam.switchOn().checkFirst()
		end
		
		-- récupère les dispositifs dont le nom commence par 'cam'
		local cams = domoticz.devices().filter(filterCams)
		
		-- applique la fonction sur chacune des cam
		cams.forEach(actionCam)
	end
}
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
freulon9292
Messages : 45
Inscription : 03 nov. 2018, 22:53

Re: Boucler tous les devices du même nom

Message par freulon9292 »

Code : Tout sélectionner

                        for deviceName,deviceValue in pairs(otherdevices) do
                        if (deviceName:sub(1,3) == 'Cam') then
                        commandArray[deviceName] = 'On FOR 3'
                        end
                        end
Rien ne vaut un expert !
3 lignes de codes, et maintenant, dans mon alarme, j'ai 2 snapshots à 3sec d'intervalle à chaque déclenchement d'un capteur.

Merci Boum.
Répondre