jjacques68 Posté(e) le 31 août 2016 Signaler Posté(e) le 31 août 2016 Hello tous, encore une question... peut-on modifier une variable global dans une HC depuis une commande push d'une entrée/sortie de l'ipx800 ? on peut lancer une scène : /api/sceneControl?id=21&action=start un device : /api/callAction?deviceID=8347&name=turnOn mais modifier une variable, j'ai tout essayé : /api/globalVariables/MaVariable=valeur /api/globalVariables/MaVariable&value=valeur /api/globalVariables/MaVariable {"value":"valeur"} je trouve rien sur le net !!! encore une fois merci à vous !! JJacques68
jjacques68 Posté(e) le 1 septembre 2016 Auteur Signaler Posté(e) le 1 septembre 2016 donc d'après mes recherches, il n'est pas possible de modifier une VG depuis l'ipx800. du coup faut résonner autrement. si je veux récupérer la valeur du compteur de l'ipx par exemple, c'est la HC qui va chercher la valeur et non l'ipx qui la transmet... un peu étrange comme solution... mais alors je ne vois pas à quoi peuvent servir les "étiquettes" disponible dans l'ipx ($C1, $O, ...) si on peut pas les transmettre dans une variable ?
jojo Posté(e) le 2 septembre 2016 Signaler Posté(e) le 2 septembre 2016 je viens de trouver une solution : les fake devices ! tu injectes dans le json du device ce que tu veux, et ainsi tu le récupères.
Lazer Posté(e) le 2 septembre 2016 Signaler Posté(e) le 2 septembre 2016 Problème, l'IPX800 (en tout cas pour la v4 dont je dispose) ne sait faire que du GET et du POST, mais pas de PUT dont on a besoin pour mettre à jour une VG ou un fake-device Donc perso : - pour aller mesurer une valeur (capteurs analogiques), j'ai une scène sur la HC2 qui va interroger l'IPX800 v4 toutes les minutes - pour les entrées numériques, puisque c'est du binaire, j'ai créé des notifications PUSH dans l'IPX800v4 qui va cliquer sur l'un des 2 boutons d'un module virtuel de la HC. Chaque bouton met alors à jour un fake-device (value = true ou false) en passant par l'API locale, mais en faisant un PUT. bref pas simple
jjacques68 Posté(e) le 2 septembre 2016 Auteur Signaler Posté(e) le 2 septembre 2016 ou alors c'est pas très simple quand on imagine ce qu'il serait possible de faire... mais c'est quoi exactement les fake device ?
Lazer Posté(e) le 2 septembre 2016 Signaler Posté(e) le 2 septembre 2016 des modules qui n'existent plus, mais qu'on a conservé dans la box afin de leur forcer des valeurs de notre choix. J'ai expliqué le principe sur le topic FHEM à partir d'ici : http://www.domotique-fibaro.fr/index.php/topic/678-passerelle-enocean-fhem/?p=124196 (et pages suivantes) Mais je ne ferai pas de tuto propre, car ça reste une technique délicate, non supportée officiellement, et qui doit à terme être replacé par les Plugins quand FIbaro le voudra....
jjacques68 Posté(e) le 2 septembre 2016 Auteur Signaler Posté(e) le 2 septembre 2016 ouai ok je viens de lire ce topic... bon ben je vais me contacter d'une petite interrogation de laHC2 vers IPX toute les minutes pour relever mon compteur... c'est plus simple je pense
foxchip Posté(e) le 3 septembre 2016 Signaler Posté(e) le 3 septembre 2016 j'ai contourner le probleme autrement j'ai créé une VD avec un bouton qui modifie la variable globale Avec ceci, tu peux appeler le bouton de la VD via le push de l'IPX
jjacques68 Posté(e) le 3 septembre 2016 Auteur Signaler Posté(e) le 3 septembre 2016 oui j'y avais pensé, mais c'est pour le compteur d'eau... une impulsion tous les 1/4 de litre... ça fait beaucoup d'appel du bouton quand on prend une douche, ou pour arrosage du jardin... je pense qu'il vaut mieux temporisé le relevé du compteur... non ?
foxchip Posté(e) le 3 septembre 2016 Signaler Posté(e) le 3 septembre 2016 tu as une autre solution que j'ai mise en place pour mes sondes PH et ORP qui sont sur l'IPX c'est d'enregistrer l'info dans un label de VD via une requette HTTP vers l'IPX qui te renvoi un fichier JSON
jjacques68 Posté(e) le 3 septembre 2016 Auteur Signaler Posté(e) le 3 septembre 2016 oui mais là ça devient compliqué pour moi !! je maitrise pas le json et les requêtes http correctement. et les explications sont plutôt "lite"... Il y a énormément d'info que je pioche à droite et à gauche sur le forum, mais ça reste très flou pour moi. y a pas de tuto qui explique tout ça ? mais depuis le début ?
Lazer Posté(e) le 3 septembre 2016 Signaler Posté(e) le 3 septembre 2016 Tiens voilàma scène qui fait plus ou moins ce que tu veux, àadapter àton besoin : - perso j'utilise des fake-device, mais il te suffit de remplacer le contenu de la fonction SetValue() si tu veux mettre àjour une Variable globale. - je ne lis que les sondes analogiques, - fonctionne avec un IPX800 v4, je crois que le JSON est différent d'un V3 (de toutes façons, les scritps existent déjàsur le forum pour la v3) - c'est pas super propre, j'ai fait ça vite fait avant les vacances, mais ça fonctionne depuis 2 mois, en tout cas chez moi. --[[ %% autostart %% properties %% events %% globals --]] -------------------------------------------------- -- Scène : IPX800V4 -- Author : Lazer -- Version : 1.0 -- Date : July 2016 -------------------------------------------------- -- Variables local refresh = 60 -- seconds local debug = false -- -- Message() function -- function Message(color, message) if color and color ~= "" then fibaro:debug('<span style="color:'..color..';">'..message..'</span>') else fibaro:debug(message) end end -- -- round() function -- function round(num, idp) --if idp and idp>0 then local mult = 10^idp return math.floor(num * mult + 0.5) / mult --[[ else idp = idp mult 2 -- negates its negative status local mult = 10^idp return math.floor(num * mult + 0.5) / mult ide = idp / (idp/2) end return math.floor(num + 0.5) --]] end -- -- SetValue() function -- function SetValue(id, value) local httpClient = net.HTTPClient() httpClient:request('http://127.0.0.1:11111/api/devices/' .. tostring(id), { success = function(response) if response.status == 200 then if debug then Message("green", "SetValue() OK") end return true else Message("red", "SetValue() Error : status=" .. tostring(response.status)) return false end end, error = function(err) Message("red", 'SetValue() Error : ' .. err) return false end, options = { method = 'PUT', data = '{"properties":{"value":' .. value .. '}}' } }) end -- -- GetValues() function -- function GetValues() -- Read IPX800 Analog inputs local httpClient = net.HTTPClient() httpClient:request('http://1.2.3.4/api/xdevices.json?key=xxxxx&Get=A', { success = function(response) if response.status == 200 then if response.data and response.data ~= "" then local jsonTable = json.decode(response.data) if jsonTable.status and jsonTable.status == "Success" then if debug then Message("green", "Success") end if jsonTable.A1 and type(jsonTable.A1) == "number" then local newValue = round(((jsonTable.A1*0.000050354)-1.63)/0.0326, 1) if debug then Message("", "Température = " .. ((jsonTable.A1*0.000050354)-1.63)/0.0326 .. " " .. newValue) end local oldValue = fibaro:getValue(262, "value") if newValue ~= tonumber(oldValue) and newValue ~= -50 then Message("yellow", "Température : oldValue=" .. oldValue .. "°C newValue = " .. tostring(newValue) .. "°C") SetValue(262, newValue) end end if jsonTable.A2 and type(jsonTable.A2) == "number" then local newValue = round(((jsonTable.A2*0.00323)/211.2-0.1515)/0.00636, 1) if debug then Message("", "Humidité = " .. ((jsonTable.A2*0.00323)/211.2-0.1515)/0.00636 .. " " .. newValue) end local oldValue = fibaro:getValue(261, "value") if newValue ~= tonumber(oldValue) and newValue ~= 0 then Message("yellow", "Humidité : oldValue=" .. oldValue .. "% newValue = " .. tostring(newValue) .. "%") SetValue(261, newValue) end end else Message("", "Failed") end else Message("red", "Error : empty response") end else Message("red", "Error : status=" .. tostring(response.status)) end end, error = function(err) Message("red", 'Error : ' .. err) end, options = { method = 'GET' } }) -- Display LUA memory consumption every 5 minutes if not garbageExecTime then garbageExecTime = os.time() else local elapsedTime = os.difftime(os.time(), garbageExecTime or 0) if (elapsedTime >= 300) then Message("gray", 'Total memory in use by Lua: ' .. string.format("%.2f", collectgarbage("count")) .. ' KB') garbageExecTime = os.time() end end -- Wait setTimeout(function() GetValues() end, refresh*1000) end -- -- Main -- local trigger = fibaro:getSourceTrigger() if trigger["type"] == "autostart" then Message("blue", os.date('%d/%m/%Y').." : Autostart infinite loop...") setTimeout(function() GetValues() end, 0) else Message(nil, os.date('%d/%m/%Y').." : trigger : "..trigger["type"]) end Ensuite, àtoi d'adapter àtes besoins
jjacques68 Posté(e) le 3 septembre 2016 Auteur Signaler Posté(e) le 3 septembre 2016 je vais étudier ça. merci tout plein !!! te tiens au courant...
Messages recommandés