Page 1 sur 1
Intéragir avec un périphérique autrement qu'avec son nom ?
Publié : 18 sept. 2018, 23:36
par JuGuSm
Bonjour,
Je commence à écrire des scripts en lua et je me rend compte que j'utilise toujours le nom de mes périphériques pour intéragir avec.
Exemple :
Je me disais que si je renomme mon périphérique, mes scripts ne vont plus fonctionner !
Je sais qu'avec les blocky c'est mis à jour automatiquement mais avec les scripts lua non visiblement...
Est-il possible d'utiliser autre chose que le nom ?
Merci.
Re: Intéragir avec un périphérique autrement qu'avec son nom ?
Publié : 25 sept. 2018, 09:19
par david.2d
Hello,
Tu peut utiliser l'Idx
Re: Intéragir avec un périphérique autrement qu'avec son nom ?
Publié : 26 sept. 2018, 10:20
par mma13
Bonjour,
Je trouve la remarque de JuGuSm bien fondée. Comment utiliser l'idx david.2d ?
Merci
Re: Intéragir avec un périphérique autrement qu'avec son nom ?
Publié : 26 sept. 2018, 20:22
par Neutrino
Bonjour,
L'IDX est un identifiant unique pour chaque dispositif.
Ils se trouvent dans Réglages>Dispositifs
Voici quelques exemple d'utilisations avec l'Idx :
Code : Tout sélectionner
commandArray[textDeviceIdx] = { ['UpdateDevice'] = textDeviceIdx..'|0|'..'some text' }
commandArray[tempDeviceIdx] = { ['UpdateDevice'] = tempDeviceIdx..'|0|'..temp }
commandArray[tempHumDevIdx] = { ['UpdateDevice'] = tempHumDevIdx..'|0|'.. temp ..';'.. hum ..';'.. hum_stat }
Plus d'info sur le wiki :
http://www.domoticz.com/wiki/Events
Re: Intéragir avec un périphérique autrement qu'avec son nom ?
Publié : 26 sept. 2018, 22:43
par vil1driver
Salut,
De mémoire cela ne fonctionne pas pour un switch, ce dernier ne voyant que sont status mis à jour mais aucun ordre n'est envoyé (sauf erreur).
Ca ne fait donc pas le taf, heureusement que l'on ne renomme pas tous les jours

Re: Intéragir avec un périphérique autrement qu'avec son nom ?
Publié : 27 sept. 2018, 08:16
par jackslayter
effectivement pas possible par cette commande mais avec la commande API JSON c'est possible
Code : Tout sélectionner
os.execute('/usr/bin/curl -m 15 "http://ADRESSEIP/json.htm?type=command¶m=switchlight&idx=999999&switchcmd=Off
mais c'est un peu lourd
Re: Intéragir avec un périphérique autrement qu'avec son nom ?
Publié : 27 sept. 2018, 10:34
par mma13
Merci pour les réponses en m'inspirant de
https://www.domoticz.com/forum/viewtopi ... 36#p144720
J'ai fait ce script qui me permet de me servir de l'IDX d'un switch également :
Code : Tout sélectionner
-- mma13 - 26/09/2018 ----------------------------------------------------------
-- Ce script compare régulièrement la consommation d'une prise à une consigne
-- Si la consommation est inférieure à la consigne l'alimentation est coupée
--------------------------------------------------------------------------------
-- Variables locales -----------------------------------------------------------
local delai = 5 -- nombre de minutes entre deux tests
local consigne = 30 -- consigne de consomation minimale en Watt
local watt -- reçoit la mesure en Watt
local capteurIdx = 169 -- index du device qui mesure la puissance
local priseIdx = 99 -- index du device qui pilote la prise
local devName -- reçoit le nom du device
--------------------------------------------------------------------------------
commandArray = {}
-- Fonction getDevNameByIdx ----------------------------------------------------
-- Cette fonction retourne :
-- - Le nom d'un device à partir de son IDX s'il existe
-- - 0 si l'IDX n'existe pas
--------------------------------------------------------------------------------
function getDevNameByIdx(devIdx)
for i, v in pairs(otherdevices_idx) do
if v == devIdx then
return i
end
end
return 0
end
--------------------------------------------------------------------------------
time = os.date("*t")
if ((time.min) % delai) == 0 then -- toutes les 'delai' minutes
devName=getDevNameByIdx(capteurIdx)
if (devName~=0) then
print ("Gestion consommation "..devName);
-- cherche le device concerné
for deviceName,deviceValue in pairs(otherdevices) do
if (deviceName==devName) then
-- print("DeviceValue : "..deviceValue)
watt = string.sub(deviceValue,1,4)
watt = tonumber(watt) / 10
if (watt <= consigne) then
print("Coupure prise "..devName)
-- Coupure à gérer
commandArray[getDevNameByIdx(priseIdx)] = "Off"
else
print("Puissance "..devName.." : "..watt.." W")
end
end
end
end
end
return commandArray
... je débuté sur Domoticz, les scripts et LUA... mais ça fonctionne... j'ai juste fait un truc empirique :
Code : Tout sélectionner
watt = string.sub(deviceValue,1,4)
watt = tonumber(watt) / 10
parce que je récupère 2 valeurs :

- device.value.JPG (10.4 Kio) Consulté 5783 fois
et je ne sais pas trop comment les traiter : en string, en tableau... je n'ai pas encore suffisamment travaillé la-dessus...
Re: Intéragir avec un périphérique autrement qu'avec son nom ?
Publié : 27 sept. 2018, 21:53
par JuGuSm
Hello,
Après quelques recherches voici une fonctions que j'utilise :
Code : Tout sélectionner
-----------------
-- IDX2DevName --
-----------------
-- Get device name from IDX
function MyFunctions.IDX2DevName(IDX)
for i, v in pairs(otherdevices_idx)
do if v == IDX
then return i
end
end
return 0
end
J'ai ajouté cette fonction à mon fichier de fonctions que j'appelle à chaque début de script de cette façon :
Code : Tout sélectionner
--------------------
-- LOAD FUNCTIONS --
--------------------
package.path = package.path .. ';' .. '/home/domoticz/domoticz/scripts/lua/functions.lua'
F = require('functions')
Et voici un exemple de la façon dont j'appelle ma fonction dans mes scripts :
AVANT :
APRÈS :