Domoticz envoyer données sondes rflink vers IPX800 V4
Domoticz envoyer données sondes rflink vers IPX800 V4
Bonjour, je suis nouveau sur le forum et également très novice dans domoticz. Je viens de faire un Rflink branché sur un raspberry sous raspbian. J'ai installer domoticz et je capte plusieurs sondes de température. Mon installation domotique principale est un IPX 800 V4, j'aimerais envoyer les données de mes sondes sans fils sur mon IPX 800 sur les entrées virtuelles analogiques. J'ai fait des essais avec le lien http, mais je n'arrive a envoyer la valeur que d'une seule sonde en entrant l'adresse http complète dans le lien http, car si elle n'est pas complète en précisant le numéro d'entrée analogique ça ne fonctionne pas. Je remercierai une âme charitable qui s'y connait de m'aider à résoudre mon problème.
IPX800 V4
Rpbi3b+: Domoticz
Domoticz: Derniere stable; RFLINK: Dernière stable;
Rpbi3b+: Domoticz
Domoticz: Derniere stable; RFLINK: Dernière stable;
Re: Domoticz envoyer données sondes rflink vers IPX800 V4
Bonjour Gaetan
bienvenue sur ce forum.
je ne dispose pas de cette automate chez moi, il il existe pas ma de ressources sur le sujet ici et ailleurs
voici un script qui t'aidera peut etre
trouvé ici
il y a un topo ici
bienvenue sur ce forum.
je ne dispose pas de cette automate chez moi, il il existe pas ma de ressources sur le sujet ici et ailleurs
voici un script qui t'aidera peut etre
Code : Tout sélectionner
function Round(num, idp)
local mult = 10^(idp or 0)
return math.floor(num * mult + 0.5) / mult
end
commandArray = {}
json = (loadfile “/home/pi/domoticz/scripts/lua/JSON.lua”)() – For Linux
package.path = package.path … ‘;’ … '/home/pi/domoticz/scripts/lua/?.lua’
DeviceLuaMstr = uservariables[“LUA_MasterSW”] – LUA_MasterSW
if (otherdevices[DeviceLuaMstr]) == ‘On’ then
local util=‘xxx’ – utilisateur ipx
local mdp=‘xxx’ – passwd ipx
local url_ipx800=‘192.168.x.x’ – ip ipx800
local url_domoticz = ‘192.168.x.x’ – ip domoticz
-- API IPX800
local config=assert(io.popen('curl http://'..util..':'..mdp..'@'..url_ipx800..'/api/xdevices.json?cmd=30'))
local analog = config:read('*all')
config:close()
local jsonAnalog = json:decode(analog)
--maj chamb parents enfants bb ami
Analog1 = Round((jsonAnalog.AN1* 0.323) - 50, 2)
commandArray[#commandArray+1] = {['OpenURL']=url_domoticz..'/json.htm?type=command¶m=udevice&idx=50&nvalue=0&svalue='.. Analog1 }
Analog2 = Round(((jsonAnalog.AN2/308.998)-0.25)/0.028,2)
commandArray[#commandArray+1] = {['OpenURL']=url_domoticz..'/json.htm?type=command¶m=udevice&idx=726&nvalue=0&svalue='.. Analog2 }
Analog3 = Round(((jsonAnalog.AN3/308.998)-0.25)/0.028,2)
commandArray[#commandArray+1] = {['OpenURL']=url_domoticz..'/json.htm?type=command¶m=udevice&idx=54&nvalue=0&svalue='.. Analog3}
Analog4 = Round(((jsonAnalog.AN4/308.998)-0.25)/0.028,2)
commandArray[#commandArray+1] = {['OpenURL']=url_domoticz..'/json.htm?type=command¶m=udevice&idx=53&nvalue=0&svalue='.. Analog4}
Analog5 = Round((((jsonAnalog.AN5* 0.00323 /3.3)-0.1515)) / 0.00636 , 2)
--commandArray[#commandArray+1] = {['OpenURL']=url_domoticz..'/json.htm?type=command¶m=udevice&idx=406&nvalue=0&svalue='.. Analog5} --humsalon2
Analog6 = Round(((jsonAnalog.AN6* 0.00323) - 1.63) / 0.0326, 2)
--commandArray[#commandArray+1] = {['OpenURL']=url_domoticz..'/json.htm?type=command¶m=udevice&idx=404&nvalue=0&svalue='.. Analog6} --temp salon2
Analog7 = Round(jsonAnalog.AN7, 0)
commandArray[#commandArray+1] = {['OpenURL']=url_domoticz..'/json.htm?type=command¶m=udevice&idx=405&nvalue=0&svalue='.. Analog7} --lux salon2
--MAJ temp/hum salon2
if Analog5<40 then --permet de definir l humidité
humstatus=2
end
if Analog5>=40 and Analog5<70 then
humstatus=1
end
if Analog5>=70 then
humstatus=3
end
commandArray[#commandArray+1] = {['OpenURL']=url_domoticz..'/json.htm?type=command¶m=udevice&idx=750&nvalue=0&svalue='.. Analog6 ..';'.. Analog5..';'..humstatus}
--/json.htm?type=command¶m=udevice&idx=IDX&nvalue=0&svalue=TEMP;HUM;HUM_STAT
end
return commandArrayil y a un topo ici
Re: Domoticz envoyer données sondes rflink vers IPX800 V4
Bonjour,
Merci Papoo pour cette réponse mais ce script n'est pas du tout fait pour ce que je veux faire, car ce dernier est fait pour envoyer les données analogiques de l'IPX800 V3 vers Domoticz.
Cette commande par exemple:" http://'..util..':'..mdp..'@'..url_ipx800..'/api/xdevices.json?cmd=30" servait à extraire les données analogiques de l'IPX v3 et n'est plus compatible avec la version V4.
Les liens que tu me donnes je les avais déjà vu car j'ai parcouru plus d'une centaine de pages de forums d'ici et là. Mais comme tous les forums que j'ai vu ils font tous sans exception l'inverse de ce que je veux faire, ils transmettent les données analogique de l'IPX800 vers Domoticz.
Le problème c'est que moi je veux exporter mes données de température de Domoticz vers les entrées Analogiques virtuelles de l'IPX800 V4 afin de les utiliser dans mes scénarios.
Par exemple pour envoyer une donnée vers une entrée analogique Virtuelle de l'IPX V4 je peux taper dans la barre d'adresse:
http://192.168.1.20:80/api/xdevices.json?key=(mot de passe)&SetVA01=19 --ça met l'entrée analogique virtuelle 1 à 19°
http://192.168.1.20:80/api/xdevices.json?key=(mot de passe)&SetVA02=21 --ça met l'entrée analogique virtuelle 2 à 21°
et je peux faire ça pour les 32 entrées virtuelles analogiques de l'IPX800 V4 afin de pouvoir utiliser les températures dans mes scénarios et mes thermostats qui sont assez bien fait sur l'IPX ( inexistant dans Domoticz il faut faire des scripts).
j'ai essayé de regarder avec ton script lua d’exportation de données vers emoncs mais n'y connaissant rien en lua je n'arrive pas trop à faire grand chose.
Et pour compliquer les choses si j'arrive à exporter mes températures il faudrait que je les multiplie par 10 afin de pouvoir récupérer mes températures avec la première décimale dans mon IPX car en entrée Analogique virtuelle il ne conserve pas les décimales reçue, mais si je fait la conversion avec mon IPX je peux afficher la première décimale.
Par exemple si j'envoi 18.7 il ne conserve que 18, mais si j'envoi 187 et que dans la formule de mon IPX je met formule personnalisée /*0.1 j'obtiens bien mes 18.7
Je sais que cela fait beaucoup de demandes mais je suis quasiment certain que ça n'a pas été traité ailleurs car comme je l'ai vu partout tout le monde fait l'inverse de ce je veux faire.
Donc merci à ceux qui m'aiderons à résoudre mon problème.
Merci Papoo pour cette réponse mais ce script n'est pas du tout fait pour ce que je veux faire, car ce dernier est fait pour envoyer les données analogiques de l'IPX800 V3 vers Domoticz.
Cette commande par exemple:" http://'..util..':'..mdp..'@'..url_ipx800..'/api/xdevices.json?cmd=30" servait à extraire les données analogiques de l'IPX v3 et n'est plus compatible avec la version V4.
Les liens que tu me donnes je les avais déjà vu car j'ai parcouru plus d'une centaine de pages de forums d'ici et là. Mais comme tous les forums que j'ai vu ils font tous sans exception l'inverse de ce que je veux faire, ils transmettent les données analogique de l'IPX800 vers Domoticz.
Le problème c'est que moi je veux exporter mes données de température de Domoticz vers les entrées Analogiques virtuelles de l'IPX800 V4 afin de les utiliser dans mes scénarios.
Par exemple pour envoyer une donnée vers une entrée analogique Virtuelle de l'IPX V4 je peux taper dans la barre d'adresse:
http://192.168.1.20:80/api/xdevices.json?key=(mot de passe)&SetVA01=19 --ça met l'entrée analogique virtuelle 1 à 19°
http://192.168.1.20:80/api/xdevices.json?key=(mot de passe)&SetVA02=21 --ça met l'entrée analogique virtuelle 2 à 21°
et je peux faire ça pour les 32 entrées virtuelles analogiques de l'IPX800 V4 afin de pouvoir utiliser les températures dans mes scénarios et mes thermostats qui sont assez bien fait sur l'IPX ( inexistant dans Domoticz il faut faire des scripts).
j'ai essayé de regarder avec ton script lua d’exportation de données vers emoncs mais n'y connaissant rien en lua je n'arrive pas trop à faire grand chose.
Et pour compliquer les choses si j'arrive à exporter mes températures il faudrait que je les multiplie par 10 afin de pouvoir récupérer mes températures avec la première décimale dans mon IPX car en entrée Analogique virtuelle il ne conserve pas les décimales reçue, mais si je fait la conversion avec mon IPX je peux afficher la première décimale.
Par exemple si j'envoi 18.7 il ne conserve que 18, mais si j'envoi 187 et que dans la formule de mon IPX je met formule personnalisée /*0.1 j'obtiens bien mes 18.7
Je sais que cela fait beaucoup de demandes mais je suis quasiment certain que ça n'a pas été traité ailleurs car comme je l'ai vu partout tout le monde fait l'inverse de ce je veux faire.
Donc merci à ceux qui m'aiderons à résoudre mon problème.
IPX800 V4
Rpbi3b+: Domoticz
Domoticz: Derniere stable; RFLINK: Dernière stable;
Rpbi3b+: Domoticz
Domoticz: Derniere stable; RFLINK: Dernière stable;
Re: Domoticz envoyer données sondes rflink vers IPX800 V4
reste à définir si tu souhaite un rafraîchissement cyclique (tout les combien de minutes) ou à chaque update des sondes (si tu remonte 21 sondes cela peut faire beaucoup d’exécution du code par minute).
Re: Domoticz envoyer données sondes rflink vers IPX800 V4
Je pense remonter les températures toutes les 2 minutes car si c'est à chaque update ce qui ferai toutes les minutes mais ça encombrerais beaucoup ma bande passante car les sondes n’émettent pas en même temps et ça ferai tourner le script sans cesse. Pour le nombre de remonté de sondes je compte me limiter à 6 ou 8 avec une exécution cyclique toutes les 2 minutes, ce qui me parait être raisonnable.
IPX800 V4
Rpbi3b+: Domoticz
Domoticz: Derniere stable; RFLINK: Dernière stable;
Rpbi3b+: Domoticz
Domoticz: Derniere stable; RFLINK: Dernière stable;
Re: Domoticz envoyer données sondes rflink vers IPX800 V4
si tu veux bien tester
Code : Tout sélectionner
--[[script_time_export_IPX800.lua
auteur : papoo
maj : 03/03/2019
date : 03/03/2019
https://easydomoticz.com/forum/viewtopic.php?f=8&t=8120
--]]
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
local debugging = true -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local script_actif = true -- true pour activer l'execution du script ou false pour le désactiver
local ip_IPX800 = '192.168.1.20'
local port_IPX800 = '80'
local mdp_IPX800 = 'mot2passe'
local api_IPX800 = '/api/xdevices.json?key='
local multiplicateur = 10
local les_devices = {}; -- pas plus de 11 devices
-- si vous souhaitez remonter les valeurs d'un device qui en comporte plusieurs (ex: température et hygrometrie extérieure)
--renseigner le nom de la valeur à remonter (à partir de la deuxieme valeur) ainsi que le numero d'ordre dans canal (voir exemples ci dessous les_devices[9] et les_devices[21] )
-- les_devices[#les_devices+1] = {device="Temperature 1", VA_IPX="01", multiplicateur = 10, canal=""}
-- les_devices[#les_devices+1] = {device="Temperature 2", VA_IPX="02", multiplicateur = 10, canal=""}
-- les_devices[#les_devices+1] = {device="Temperature 3", VA_IPX="03", multiplicateur = 10, canal=""}
-- les_devices[#les_devices+1] = {device="Temperature 4", VA_IPX="04", multiplicateur = 10, canal=""}
-- les_devices[#les_devices+1] = {device="Temperature 5", VA_IPX="05", multiplicateur = 10, canal=""}
-- les_devices[#les_devices+1] = {device="Temperature 6", VA_IPX="06", multiplicateur = 10, canal=""}
-- les_devices[#les_devices+1] = {device="Temperature 7", VA_IPX="07", multiplicateur = 10, canal=""}
les_devices[#les_devices+1] = {device="Temperature exterieure", VA_IPX="08", multiplicateur = 10, canal=""}
les_devices[#les_devices+1] = {device="Temperature exterieure", VA_IPX="09", multiplicateur = 1, canal=2}
les_devices[#les_devices+1] = {device="Temperature Salon", VA_IPX="10", multiplicateur = 10, canal=""}
les_devices[#les_devices+1] = {device="Point de givrage", VA_IPX="11", multiplicateur = 10, canal=""}
les_devices[#les_devices+1] = {device="Point de rosée", VA_IPX="12", multiplicateur = 10, canal=""}
les_devices[#les_devices+1] = {device="Temperature Refrigerateur", VA_IPX="13", multiplicateur = 10, canal=""}
les_devices[#les_devices+1] = {device="Temperature Congelateur", VA_IPX="14", multiplicateur = 10, canal=""}
les_devices[#les_devices+1] = {device="Temperature départ chauffage", VA_IPX="15", multiplicateur = 10, canal=""}
les_devices[#les_devices+1] = {device="Temperature retour chauffage", VA_IPX="16", multiplicateur = 10, canal=""}
les_devices[#les_devices+1] = {device="Temperature Parents", VA_IPX="17", multiplicateur = 10, canal=""}
-- les_devices[#les_devices+1] = {device="Temperature 18", VA_IPX="18", multiplicateur = 1, canal=""}
-- les_devices[#les_devices+1] = {device="Temperature 19", VA_IPX="19", multiplicateur = 10, canal=""}
-- les_devices[#les_devices+1] = {device="Temperature 20", VA_IPX="20", multiplicateur = 10, canal=""}
-- les_devices[#les_devices+1] = {device="Temperature 21", VA_IPX="21", multiplicateur = 10, canal=2}
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local nom_script = "export IPX800"
local version = "0.01"
--------------------------------------------
---------------- Fonctions -----------------
------------------------------------------
package.path = package.path..";/home/pi/domoticz/scripts/lua/fonctions/?.lua" -- ligne à commenter en cas d'utilisation des fonctions directement dans ce script
require('fonctions_perso') -- ligne à commenter en cas d'utilisation des fonctions directement dans ce script
-- ci-dessous les lignes à décommenter en cas d'utilisation des fonctions directement dans ce script( supprimer --[[ et --]])
--[[ function voir_les_logs (s, debugging) -- nécessite la variable local debugging
if (debugging) then
if s ~= nil then
print (s)
else
print ("aucune valeur affichable")
end
end
end -- usage voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
--------------------------------------------
function split(inputstr, sep)
if sep == nil then
sep = "%s"
end
local t={} ; i=1
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
t[i] = str
i = i + 1
end
return t
end -- usage : valeurs = split(variable,";")
--]]
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
commandArray = {}
time=os.date("*t")
--if ((time.min-1) % 2) == 0 and script_actif == true then -- export des données toutes les 2 minutes
if time.min % 1 == 0 then
voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
voir_les_logs("--- --- --- Export vers IPX800 : "..time.hour.. ":" ..time.min,debugging)
local API_key = uservariables[api_IPX800]
for i,d in ipairs(les_devices) do
v=otherdevices[d.device]
va= d.VA_IPX
multi = tonumber(d.multiplicateur)
c=tonumber(d.canal)
voir_les_logs("--- --- --- ".. d.device .." = "..tostring(v),debugging)
voir_les_logs("--- --- --- canal = "..tostring(c),debugging)
if v~= nil then v,nbCommas=string.gsub(v,";",";") end-- vérification de la présence d'un ou plusieurs point virgule => valeurs multiples
if nbCommas >= 1 then
voir_les_logs("--- --- --- valeurs multiples dans ".. d.device .." = ".. v,debugging)
voir_les_logs("--- --- --- Nb de point virgule = "..(nbCommas or "nil"),debugging)
local valeurs = split(v,";")
voir_les_logs("--- --- --- valeur 1 = "..tostring(valeurs[1]),debugging)
voir_les_logs("--- --- --- valeur 2 = "..tostring(valeurs[2]),debugging)
voir_les_logs("--- --- --- valeur 3 = "..tostring(valeurs[3]),debugging)
voir_les_logs("--- --- --- valeur 4 = "..tostring(valeurs[4]),debugging)
if c == nil then c = 1 end
valeur = tonumber(valeurs[c]) * multi
elseif v ~= nil and multi ~= nil then
voir_les_logs("--- --- --- valeur V = "..tostring(v),debugging)
valeur = tonumber(v) * multi
end
voir_les_logs("--- --- --- ".. ip_IPX800 ..':'.. port_IPX800 .. api_IPX800 .. mdp_IPX800 .. "&SetVA" .. va .. "=" .. tostring(valeur) ,debugging)
os.execute('curl -m5 "'.. ip_IPX800 ..':'.. port_IPX800 .. api_IPX800 .. mdp_IPX800 .. "&SetVA" .. va .. "=" .. tostring(valeur) .. '"')
voir_les_logs('curl -m5 "'.. ip_IPX800 ..':'.. port_IPX800 .. api_IPX800 .. mdp_IPX800 .. "&SetVA" .. va .. "=" .. tostring(valeur) ..'"',debugging)
valeur = nil
end
voir_les_logs("=========== Fin ".. nom_script .." (v".. version ..") =========",debugging)
end -- if time
--------------------------------------------====
return commandArrayRe: Domoticz envoyer données sondes rflink vers IPX800 V4
Bonjour,
Merci Papoo pour ce code qui fonctionne très bien après avoir mis les noms de mes sondes.
j'ai du également commenter ces deux lignes:
qui je pense renvoient aux fonctions dans un autre script lua séparé.
Et ensuite j'ai dé commenté la partie fonctions du script.
Ensuite tout a bien fonctionné et pour l'instant j'actualise 3 de mes entrées analogiques virtuelles sans problème.
Encore merci pour ce code qui m'a fait gagner des semaines le temps de comprendre le langage lua.
Merci Papoo pour ce code qui fonctionne très bien après avoir mis les noms de mes sondes.
j'ai du également commenter ces deux lignes:
Code : Tout sélectionner
package.path = package.path..";/home/pi/domoticz/scripts/lua/fonctions/?.lua" -- ligne à commenter en cas d'utilisation des fonctions directement dans ce script
require('fonctions_perso') -- ligne à commenter en cas d'utilisation des fonctions directement dans ce script
Et ensuite j'ai dé commenté la partie fonctions du script.
Ensuite tout a bien fonctionné et pour l'instant j'actualise 3 de mes entrées analogiques virtuelles sans problème.
Encore merci pour ce code qui m'a fait gagner des semaines le temps de comprendre le langage lua.
IPX800 V4
Rpbi3b+: Domoticz
Domoticz: Derniere stable; RFLINK: Dernière stable;
Rpbi3b+: Domoticz
Domoticz: Derniere stable; RFLINK: Dernière stable;
Re: Domoticz envoyer données sondes rflink vers IPX800 V4
heureux que cela fonctionne pour toi