Page 1 sur 2

récupérer température IPX800V4 dans domoticz

Publié : 25 mai 2017, 21:14
par marsflow
Bonjour la communauté,

j'aurai besoin d'aide dans la création d'un script pour récupérer les sonde brancher à mon IPX dans Domoticz.

je pense que le faire en lua serait le plus simple par le biais du fichier XML ci joint

Re: récupérer température IPX800V4 dans domoticz

Publié : 26 mai 2017, 13:05
par bahia34
Salut,

Plus simple avec json et sa commande spécifique à l'IPX800 (bon, moi j'ai la V3 mais je pense que c'est pareil pour la V4)

Code : Tout sélectionner

-- Fonction capture température IPX800
-- script_time_tempipx.lua
-- recup sonde temp de l'ipx

time=os.date("*t")

IDX=id du device dans domoticz

json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()  -- For Linux
 
local config=assert(io.popen('/usr/bin/curl "http://ip de ton ipx/api/xdevices.json?cmd=30"'))
local blocjson = config:read('*all')
 config:close()
 -- print (blocjson)
 local jsonValeur = json:decode(blocjson)

commandArray = {}

 if time.min%30==0 then

temp=(tonumber(jsonValeur.AN2)*0.323)-50

commandArray['UpdateDevice'] = IDX .. '|0|' .. tostring(temp)

end

return commandArray
AN2 à remplacer par le nom correspondant dans ta liste

Re: récupérer température IPX800V4 dans domoticz

Publié : 26 mai 2017, 20:06
par marsflow
Bonjour,
merci pour ta réponse rapide, j'ai modifié quelques adresse, mais ça ne fonctionne pas

Code : Tout sélectionner

-- Fonction capture température IPX800
-- script_time_tempipx.lua
-- recup sonde temp de l'ipx

time=os.date("*t")

IDX=39

json = (loadfile "/volume1/.@plugins/AppCentral/domoticz/scripts/lua/JSON.lua")()  -- For Linux
 
local config=assert(io.popen('/usr/bin/curl "http://192.168.1.37/api/xdevices.json?key=apikey&Get=all"')) --[ l'emplacement sur la V4 n'est pas la même j'ai donc mis à jour cette partie, j'ai suivi l'emplacement de curl je crois qu'il n'est pas installé sur les nas asustor le problème pourrait venir de là]--

local blocjson = config:read('*all')
 config:close()
 -- print (blocjson)
 local jsonValeur = json:decode(blocjson)

commandArray = {}

 if time.min%2==0 then --[j'ai mit 2min pour tester]--

temp=(tonumber(jsonValeur.THL2-TEMP)*0.323)-50 

commandArray['UpdateDevice'] = IDX .. '|0|' .. tostring(temp)

end

return commandArray
mon code erreur est 2017-05-26 20:04:00.210 Error: EventSystem: in /volume1/.@plugins/AppCentral/domoticz/scripts/lua/script_time_tempipx.lua: .../AppCentral/domoticz/scripts/lua/script_time_tempipx.lua:21: expected near '"THL2-TEMP"'

fdf.PNG
fdf.PNG (126.73 Kio) Consulté 10592 fois

Re: récupérer température IPX800V4 dans domoticz

Publié : 27 mai 2017, 22:43
par marsflow
hello personne n'a d'idée ?

Re: récupérer température IPX800V4 dans domoticz

Publié : 28 mai 2017, 10:05
par patrice
Hello,
tu es sur de récupérer correctement ta valeur voulue ?
car tu cherches dans ton fichier json THL2-TEMP mais il y a queeTHL1-TEMP
et avant de faire des tonumber (....) fais juste afficher la valeur dans un print pour savoir si c'est OK

Re: récupérer température IPX800V4 dans domoticz

Publié : 30 mai 2017, 22:11
par marsflow
Bonjour,


il y'a bien un THL2-TEMP
avec un print ça me marque ceci :

2017-05-30 22:08:00.208 Error: EventSystem: in /volume1/.@plugins/AppCentral/domoticz/scripts/lua/script_time_tempipx.lua: .../AppCentral/domoticz/scripts/lua/script_time_tempipx.lua:24: attempt to perform arithmetic on global 'THL2' (a nil value)
2017-05-30 22:09:00.235 LUA:

j'ai suivi l'emplacement de curl, j'ai l'impression qu'il n'est pas installer sur les nas asustor... le problème viendrait pas de là ?

Re: récupérer température IPX800V4 dans domoticz

Publié : 30 mai 2017, 23:50
par marsflow
j'ai le bon emplacement de curl je verrai demain si le script marche

Re: récupérer température IPX800V4 dans domoticz

Publié : 31 mai 2017, 19:22
par marsflow
bonjour,

j'ai une erreur il me marque
2017-05-31 18:49:00.453 Error: EventSystem: in /volume1/.@plugins/AppCentral/domoticz/scripts/lua/script_time_tempipx.lua: .../AppCentral/domoticz/scripts/lua/script_time_tempipx.lua:24: attempt to perform arithmetic on field 'THL2' (a nil value)

j'ai donc essayé avec un relais voir si il prend le 1 et le 0 là ça marche,

on dirait que avec le relais vu que c'est marqué R1 qu'il n'y a pas de tiret ça marche là dans le code erreur il prend que le THL2 de THL2-TEMP, il prend pas en compte le -TEMP.

Re: récupérer température IPX800V4 dans domoticz

Publié : 07 juin 2017, 19:05
par marsflow
Pour les personnes intéressé avec NAS asustor et un IPX800 V4, je vous transmet mon script avec les bon emplacements :

Code : Tout sélectionner

-- Fonction capture température IPX800
-- script_time_tempipx.lua
-- recup sonde temp de l'ipx

time=os.date("*t")

IDX=39

json = (loadfile "/volume1/.@plugins/AppCentral/domoticz/scripts/lua/JSON.lua")()  -- For Linux
 
local config=assert(io.popen('/usr/builtin/bin/curl "http://192.168.1.37/api/xdevices.json?key=apikey&Get=A"'))
local blocjson = config:read('*all')
 config:close()
 print (blocjson)
 local jsonValeur = json:decode(blocjson)


 
commandArray = {}

 if time.min%5==0 then

 print (jsonValeur.A1)
 
temp=(tonumber(jsonValeur.A1)*0.0050354)-50

commandArray['UpdateDevice'] = IDX .. '|0|' .. tostring(temp)

end

return commandArray

Re: récupérer température IPX800V4 dans domoticz

Publié : 30 juin 2017, 01:31
par marsflow
bonjour,

j'ai un peu amélioré le code, j'avais trop de chiffres après la virgule, j'ai donc arrondie au dixième.

Code : Tout sélectionner

-- Fonction capture température IPX800
-- script_time_tempipx.lua
-- recup sonde temp de l'ipx

time=os.date("*t")

IDX=39

json = (loadfile "/volume1/.@plugins/AppCentral/domoticz/scripts/lua/JSON.lua")()  -- For Linux
 
local config=assert(io.popen('/usr/builtin/bin/curl "http://192.168.1.37/api/xdevices.json?key=apikey&Get=A"')) --[ l'emplacement sur la V4 n'est pas la même j'ai donc mis à jour cette partie, j'ai suivi l'emplacement de curl je crois qu'il n'est pas installé sur les nas asustor le problème pourrait venir de là]--

local blocjson = config:read('*all')
 config:close()
 print (blocjson)
 local jsonValeur = json:decode(blocjson)


 
commandArray = {}

 if time.min%1==0 then -- j'ai mit 1 min pour les essaies, mais je ne trouve pas nécessaire de mettre si peu pour moi je vais mettre 5 ou 10 min

 print (jsonValeur.A1)
 
 function round(num, dec) -- j'ai rajouté cette partie 
  local mult = 10^(dec or 1) -- j'ai rajouté cette partie
  return math.floor(num * mult + 0.5) / mult -- j'ai rajouté cette partie
  end -- j'ai rajouté cette partie
 
temp=(tonumber(jsonValeur.A1)*0.0050354)-50

print (temp) -- j'ai fait un print pour voir la valeur non arrondie

tempA1=round(temp) -- j'ai rajouté cette partie 

print (tempA1) -- un autre print avec la valeur arrondie

commandArray['UpdateDevice'] = IDX .. '|0|' .. tostring(tempA1)

end
résultat :

2017-06-30 01:32:00.173 LUA: 14467
2017-06-30 01:32:00.173 LUA: 22.8471318
2017-06-30 01:32:00.173 LUA: 22.8