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 (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