Aller au contenu

Guru

Membres confirmés
  • Compteur de contenus

    86
  • Inscription

  • Dernière visite

  • Jours gagnés

    1

Tout ce qui a été posté par Guru

  1. Guru

    (Tuto) Fake Device + Zibase

    non, ni en scene ni en VD
  2. Guru

    (Tuto) Fake Device + Zibase

    Mddr ... pour moi ça commence a être du chinois mais j'essai de m'y intéresser, d'ailleurs l'API et myjson c'est se qui "gère" notre HC2 ? Sinon le code il n'y a pas d'erreur mais il se passe pas grand chose mis a part que mon interface rame et bug un peu..
  3. Guru

    (Tuto) Fake Device + Zibase

    Ca donne : [DEBUG] 09:49:42: [1;31m2017-03-14 09:49:42.900106 [ fatal] Runtime error: No matching overload found, candidates: [DEBUG] 09:49:42: luabind::object put(lua_State*,std::string const&,std::string const&)
  4. Guru

    (Tuto) Fake Device + Zibase

    Merci @Steven mon sauveur comme d'habitude j'ai cherche un peu quand même si j'ai bien compris l'adresse IP 127.0... doit être celle de ma HC2 192.168.XX.XX et le port 80 ? Mais j'ai une erreur ligne 12 attempt to index global 'Net' (a nil value) --[[ %% globals OS4196965633_V2 --]] local fakedevice = 139 local humidite = fibaro:getGlobalValue("OS4196965633_V2") local myJson = '{"properties":{"value":'..humidite..'}}' local payload = "/api/devices/"..fakedevice local HC2 = Net.FHttp("192.168.XX.XX",80); local response, status, errorCode = HC2:PUT(payload, myJson) J'ai essayé dans un VD car j'ai lu dans un topic que ça ne fonctionne pas dans une scène, plus d'erreur mais ça fonctionne pas recap : Module Ocean -> Zibase -> VD -> Variable HC2 ( OS4196965633_V2 ): OK Création d'un Device que j'ai ensuite éteint et mis en non mort ( ID : 139 ): OK
  5. Guru

    (Tuto) Fake Device + Zibase

    Oui merci j'en suis la mais le soucis c'est comment alimenter ce module ... il parle dapi mais cest pour une autre box je crois Envoyé de mon iPhone en utilisant Tapatalk
  6. Guru

    (Tuto) Fake Device + Zibase

    whaou Complexe, je vais essayer de décrypter Merci
  7. Hello, Pour créer un FakeDevice et utiliser une Zibase ( ça fonctionne ss doute avec d'autres box): Associer un module à votre HC2 qui vous intéresse ( détecteurs, sondes...) quelque soit la marque tant que le template fonctionne avec la HC2. Dissocier avec votre Zibase ou reseter le module si il vous le permet pour pourvoir le réutiliser ou en créer plusieurs Décocher non mort sur le VD qui sera notre FakeD Pour l'alimenter deux méthodes en fonction de vos besoins : Avec une variable --[[ %% globals OS4196965633_V2 --Votre variable de sonde --]] local fakedevice = 139 --Votre ID de FakeD local humidite = fibaro:getGlobalValue("OS4196965633_V2") api.put(payload, device) Ou avec une requête HTTP : 1. Importer le VD External.vfib (c'est juste un VD avec un seul label) ... noter son ID 2. Créer une scène et copier le code : --[[ %% properties 180 ui.Json.value --remplacer par ID de votre VD External --]] actions = { ["ui.Json.value"] = function(values) setValues(values) end, } -- ----------------------------------------------------- -- set la ou lesvaleurs d'un module -- Ex : [{'id':123, 'value':100}, {'id':234, 'value':'Message'}] -- ----------------------------------------------------- function setValues(values) fibaro:debug(values) local tablejson = json.decode(values) if (#tablejson > 0) then for k,v in pairs(tablejson) do setValue(v) end else setValue(tablejson) end end -- ----------------------------------------------------- -- set la valeur d'un module -- Ex : {'id':123, 'value':100} -- ----------------------------------------------------- function setValue(v) fibaro:debug(json.encode(v)) local valeur = v.value local prop = {properties = { value = valeur }} --print(valeur .. " .. " .. VAR_FAKE[declencheur.name]) api.put("/devices/"..v.id, prop) end -- =============================== -- DÈmarrage du script -- =============================== local trigger = fibaro:getSourceTrigger() if (trigger.type == "property") then property = trigger.propertyName device = trigger.deviceID value = fibaro:getValue(device, property) actions[property](value) end A présent vous pouvez faire des requêtes HTTP pour un module d'ouverture par exemple (Remplacer 180 part ID de votre VD external et 160 part ID de votre FakeD): http://"VOTRE IP HC2"/api/callAction?deviceID=180&name=setProperty&arg1=ui.Json.value&arg2="{'id':160,'value':true}" ou http://XXX.XXX.XX.XX/api/callAction?deviceID=180&name=setProperty&arg1=ui.Json.value&arg2="{'id':160,'value':false}" Si vous avez des questions hésitez pas c'est ma moindre des choses et un GRAND merci a maitre @Steven qui faut le dire à tout fait pour moi quasiment. External.vfib
  8. Guru

    Mainloop Lua VD

    Trouvé ! ADN182 : Création d'une Fake Device J'utilise ici la procédure de @Lazer (Voir Post ici) En voici les grandes lignes : on inclue un module (du type qu'on souhaite (consommation, température, détecteur, etc)) on le reset (via appui long sur le bouton, selon la méthode décrite dans la doc) sans l'exclure de la HC2 il passe en noeud mort en décoche la case 'marquer comme mort' => le module ne sera plus jamais mort, même si il n'existe plus en peut l'utiliser à vie pour updater ses propriétés via l'API Puis on recommande la procédure décrite ci-dessus autant de fois qu'on souhaite, afin d'avoir une infinité de modules, qui remplacent parfaitement les plugins. Je n'ai aucun mérite juste fait un copier coller de ton post Merci a Lui ! Pour la Zibase Mise à jour Erreur : 1 -- This script will request sensors.xml file from a Zibase -- and use it to change global variables. -- Version = "1.0.0" -- Author = "Domotique-Info.fr (Steven Piccand)" -- Info = "Memory is preserved: Object are only load once in memory"-- This program is free software: you can redistribute it and/or modify -- This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. -- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -- You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. local maj = 30 -- Durée en secondes de la mise à jour -- -------------------------------------------------------------------------------------------------------------- -- Check that one and only one instance is in memory -- -------------------------------------------------------------------------------------------------------------- if ((not Zibase) or (Zibase.errors >= 5)) then Zibase = { errors = 0 } -- -------------------------------------------------------------------------------------------------------------- -- Miscellaneous -- -------------------------------------------------------------------------------------------------------------- Zibase.url = fibaro:get(fibaro:getSelfId(), 'IPAddress') Zibase.port = fibaro:get(fibaro:getSelfId(), 'TCPPort') -- -------------------------------------------------------------------------------------------------------------- -- Get the XML from the zibase and return it as a LUA table -- -------------------------------------------------------------------------------------------------------------- Zibase.getXml = function() --local zibaseURL = Net.FHttp("zibase.net"); --response, status, errorCode = zibaseURL:GET("/m/get_xml_sensors.php?device="..Zibase.id.."&token="..Zibase.token); local zibaseURL = Net.FHttp(Zibase.url) response, status, errorCode = zibaseURL:GET("/sensors.xml") return Zibase.iif(response ~= nil, Zibase.newParser().ParseXmlText(response), "") end -- -------------------------------------------------------------------------------------------------------------- -- Put all Sensors values in global variables -- -------------------------------------------------------------------------------------------------------------- Zibase.putSensorsInMemory = function(id) local xmlTable = Zibase.getXml() if (xmlTable) then if (not xmlTable.doc) then Zibase.errors = Zibase.errors+1 return nil end local evs = xmlTable.doc.evs for i in pairs(evs:children()) do local idtmp = evs.ev[i]["@id"] if (evs.ev[i]["@pro"]) then idtmp = evs.ev[i]["@pro"] .. idtmp else if (evs.ev[i]["@type"] == "2") then idtmp = "VS" .. idtmp elseif (evs.ev[i]["@type"] == "6") then idtmp = "CS" .. idtmp elseif (evs.ev[i]["@type"] == "7") then idtmp = "OS" .. idtmp elseif (evs.ev[i]["@type"] == "8") then idtmp = "VR" .. idtmp elseif (evs.ev[i]["@type"] == "10") then idtmp = "WS" .. idtmp end end if (not id) then fibaro:setGlobal(idtmp.."_V1", evs.ev[i]["@v1"]) fibaro:setGlobal(idtmp.."_V2", evs.ev[i]["@v2"]) elseif ((id ~= nil) and (idtmp == id)) then values = {} values[1] = evs.ev[i]["@v1"] values[2] = evs.ev[i]["@v2"] return values end end end return nil end -- -------------------------------------------------------------------------------------------------------------- -- Get the values (v1 and v2) of a sensor from the zibase -- -------------------------------------------------------------------------------------------------------------- Zibase.getSensorValues = function(id) if (id ~= nil) then return Zibase.putSensorsInMemory(id) else return nil end end -- -------------------------------------------------------------------------------------------------------------- -- Get the value from a variable from the zibase -- -------------------------------------------------------------------------------------------------------------- Zibase.getVariable = function(num) local xmlTable = Zibase.getXml() if (xmlTable) then if (not xmlTable.doc) then Zibase.errors = Zibase.errors+1 return "" end local vars = xmlTable.doc.vars for i in pairs(vars:children()) do if (vars.var[i]["@num"] == num) then return vars.var[i]["@val"] end end end return "" end -- ------------------------------------------------------------------------------------------------------------- -- Test the condition and return true or false param depending of the result -- param : condition (condition to test) -- iftrue (result to return of condition if true) -- iftfalse (result to return of condition if false) -- ------------------------------------------------------------------------------------------------------------- Zibase.iif = function(condition, iftrue, iffalse) if (condition) then return iftrue end return iffalse end -- ------------------------------------------------------------------------------------------------------------- -- Return a random number from 1 to 100 -- ------------------------------------------------------------------------------------------------------------- Zibase.random = function() return math.random(100) end -- ------------------------------------------------------------------------------------------------------------- -- This is a modified version of Corona-XML-Module by Jonathan Beebe which in turn -- is based on Alexander Makeev's Lua-only XML parser . -- see https://github.com/Cluain/Lua-Simple-XML-Parser -- ------------------------------------------------------------------------------------------------------------- Zibase.newParser = function() parseXml = {} parseXml.FromXmlString = function(value) value = string.gsub(value, "&#x([%x]+)%;", function(h) return string.char(tonumber(h, 16)) end); value = string.gsub(value, "&#([0-9]+)%;", function(h) return string.char(tonumber(h, 10)) end); value = string.gsub(value, "\"", "\""); value = string.gsub(value, "'", "'"); value = string.gsub(value, ">", ">"); value = string.gsub(value, "<", "<"); value = string.gsub(value, "&", "&"); return value; end parseXml.ParseArgs = function(node, s) string.gsub(s, "(%w+)=([\"'])(.-)%2", function(w, _, a) node:addProperty(w, parseXml.FromXmlString(a)) end) end parseXml.ParseXmlText = function(xmlText) local stack = {} local top = parseXml.newNode() table.insert(stack, top) local ni, c, label, xarg, empty local i, j = 1, 1 while true do ni, j, c, label, xarg, empty = string.find(xmlText, "<(%/?)([%w_:]+)(.-)(%/?)>", i) if not ni then break end local text = string.sub(xmlText, i, ni - 1); if not string.find(text, "^%s*$") then local lVal = (top:value() or "") .. parseXml.FromXmlString(text) stack[#stack]:setValue(lVal) end if empty == "/" then -- empty element tag local lNode = parseXml.newNode(label) parseXml.ParseArgs(lNode, xarg) top:addChild(lNode) elseif c == "" then -- start tag local lNode = parseXml.newNode(label) parseXml.ParseArgs(lNode, xarg) table.insert(stack, lNode) top = lNode else -- end tag local toclose = table.remove(stack) -- remove top top = stack[#stack] if #stack < 1 then error("XmlParser: nothing to close with " .. label) end if toclose:name() ~= label then error("XmlParser: trying to close " .. toclose.name .. " with " .. label) end top:addChild(toclose) end i = j + 1 end local text = string.sub(xmlText, i); if #stack > 1 then error("XmlParser: unclosed " .. stack[#stack]:name()) end return top end parseXml.newNode = function(name) local node = {} node.___value = nil node.___name = name node.___children = {} node.___props = {} function node:value() return self.___value end function node:setValue(val) self.___value = val end function node:name() return self.___name end function node:setName(name) self.___name = name end function node:children() return self.___children end function node:numChildren() return #self.___children end function node:addChild(child) if self[child:name()] ~= nil then if type(self[child:name()].name) == "function" then local tempTable = {} table.insert(tempTable, self[child:name()]) self[child:name()] = tempTable end table.insert(self[child:name()], child) else self[child:name()] = child end table.insert(self.___children, child) end function node:properties() return self.___props end function node:numProperties() return #self.___props end function node:addProperty(name, value) local lName = "@" .. name if self[lName] ~= nil then if type(self[lName]) == "string" then local tempTable = {} table.insert(tempTable, self[lName]) self[lName] = tempTable end table.insert(self[lName], value) else self[lName] = value end table.insert(self.___props, { name = name, value = self[name] }) end return node end return parseXml; end end -- ------------------------------------------------------------------------------------------------------------- -- Send a message in the default chat frame if debug mode is activated -- param : sMessage (message to display) -- return : <none> -- ------------------------------------------------------------------------------------------------------------- pcall(function() Zibase.putSensorsInMemory() local time = os.date("le %d.%m.%Y à %H:%M:%S") if (Zibase.errors > 0) then time = "Erreur : " .. Zibase.errors end fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label1.value",time) end) fibaro:sleep(maj*1000)
  9. Bonjour, Est il possible de récupérer l'ID ou son équivalent quand on clic sur l'interrupteur physique du 222 (entrée S2) La raison si vous voyez une alternative : Plusieurs scènes tournent en fonction de la température et de l'hygrométrie SI j'appuie sur l'interrupteur physique je souhaite "stoppé" les scènes pour une certaine durée... Merci
  10. Guru

    Mainloop Lua VD

    C'est copié, je test sur le temps et vous dit ça ok pour le fake je vais faire l'achat du capteur du coup et après ?
  11. Guru

    Mainloop Lua VD

    j'ai utilisé le tien, que tu as mis sur ce poste, pour l'instant il fonctionne encore. Ba j'achète un module fibaro si il faut ( il n'est pas condamné ? )
  12. Guru

    Mainloop Lua VD

    La Maj bloque au bout d'un moment et j'ai erreur 1 pareil chez vous ? j'ai supprimé le module et recrée on verra... Pour les fakes VD des news pour créer ces modules ?
  13. Guru

    Mainloop Lua VD

    -- arrondi le num avec n décimal -- function round(num, n) local mult = 10^(n or 0) return math.floor(num * mult + 0.5) / mult end function getDirection(degre) local directions = {N=0, NNE=22.5, NE=45, ENE=67.5, E=90, ESE=112.5, SE=135, SSE=157.5, S=180, SSO=202.5, SO=225, OSO=247.5, O=270, ONO=292.5, NO=315, NNO=337.5} local dif = 0 local min = 1000 local res = "" for k,v in pairs(directions) do dif = math.abs(degre - v) if (dif <= min) then res = k min = dif end end return res end local val = (tonumber(fibaro:getGlobalValue("OS26771969_V1")) / 10) .. " °C" fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value", val) local val1 = (tonumber(fibaro:getGlobalValue("OS4196965633_V1")) / 10) .. " °C " local val2 = (tonumber(fibaro:getGlobalValue("OS4196965633_V2"))) .. " % " local val3 = round((tonumber(fibaro:getGlobalValue("OS445197056_V1"))* 1000 / 3600), 2).. " km/h " local val4 = getDirection(tonumber(fibaro:getGlobalValue("OS445197056_V2"))) local texte = " Température " .. val1 .. " Humidité " .. val2 .. " Vent " .. val3 .. "direction " .. val4 fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value", texte) Je suis pas encore tout a fait content du résultat graphique je vais chercher la disposition (Mettre à la ligne ou revenir à plusieurs label) mais en tout cas ça fonctionne super bien
  14. Guru

    Mainloop Lua VD

    Tu es simplement magique ! J'ai pas le temps de penser à faire propre que tu es déjà pro actif sur le sujet mdr ... function round(num, n) local mult = 10^(n or 0) return math.floor(num * mult + 0.5) / mult end function getDirection(degre) local directions = {N=0, NNE=22.5, NE=45, ENE=67.5, E=90, ESE=112.5, SE=135, SSE=157.5, S=180, SSO=202.5, SO=225, OSO=247.5, O=270, ONO=292.5, NO=315, NNO=337.5} local dif = 0 local min = 1000 local res = "" for k,v in pairs(directions) do dif = math.abs(degre - v) if (dif <= min) then res = k min = dif end end return res end local val = (tonumber(fibaro:getGlobalValue("OS26771969_V1")) / 10) .. " °C" fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value", val) local val1 = (tonumber(fibaro:getGlobalValue("OS4196965633_V1")) / 10) .. " °C " local val2 = (tonumber(fibaro:getGlobalValue("OS4196965633_V2"))) .. " %" local val3 = round((tonumber(fibaro:getGlobalValue("OS445197056_V1"))* 1000 / 3600), 2).. " km/h" local val4 = getDirection(tonumber(fibaro:getGlobalValue("OS445197056_V2")) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value", val1 .. val2 .. val3 .. val4) J'ai voulu concaténer toutes les données extérieur mais raté [ERROR] 18:54:07: line 33: ')' expected (to close '(' at line 31) near 'fibaro' Trouvé il manqué une ) a val4 je progresse
  15. Guru

    Mainloop Lua VD

    J'apprend énormément tu vends du rêve Le résultat : Le code : local val = (tonumber(fibaro:getGlobalValue("OS26771969_V1")) / 10) .. " °C" fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value", val) local val1 = (tonumber(fibaro:getGlobalValue("OS4196965633_V1")) / 10) .. " °C " local val2 = (tonumber(fibaro:getGlobalValue("OS4196965633_V2"))) .. " %" local texte = "Température : " .. val1 .. " Humidité : " .. val2 fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value", texte) local val3 = (tonumber(fibaro:getGlobalValue("OS445197056_V1"))* 1000 / 3600) .. " km/h" fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label4.value", val3) function getDirection(degre) local directions = {N=0, NNE=22.5, NE=45, ENE=67.5, E=90, ESE=112.5, SE=135, SSE=157.5, S=180, SSO=202.5, SO=225, OSO=247.5, O=270, ONO=292.5, NO=315, NNO=337.5} local dif = 0 local min = 1000 local res = "" for k,v in pairs(directions) do dif = math.abs(degre - v) if (dif <= min) then res = k min = dif end end return res end fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label5.value", getDirection(tonumber(fibaro:getGlobalValue("OS445197056_V2"))))
  16. Guru

    Mainloop Lua VD

    On peut mettre sur une même ligne température ET humidité ? j'ai essayer les formules cote a cote lol ça a pas marché
  17. Guru

    Mainloop Lua VD

    Whaou que dire heuuu MERCI J'en suis là : local val = (tonumber(fibaro:getGlobalValue("OS26771969_V1")) / 10) .. " °C" fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value", val) local val1 = (tonumber(fibaro:getGlobalValue("OS4196965633_V1")) / 10) .. " °C" fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value", val1) local val2 = (tonumber(fibaro:getGlobalValue("OS4196965633_V2"))) .. " %" fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label3.value", val2) local val3 = (tonumber(fibaro:getGlobalValue("OS445197056_V1"))* 1000 / 3600) .. " km/h" fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label4.value", val3) function getDirection(degre) local directions = {N=0, NNE=22.5, NE=45, ENE=67.5, E=90, ESE=112.5, SE=135, SSE=157.5, S=180, SSO=202.5, SO=225, OSO=247.5, O=270, ONO=292.5, NO=315, NNO=337.5} local dif = 0 local min = 1000 local res = "" for k,v in pairs(directions) do dif = math.abs(degre - v) if (dif <= min) then res = k min = dif end end return res end print( getDirection(102) )
  18. Guru

    NODON Détecteur d'ouverture EnOcean

    Non que du Enocean, il en forcément un pour du fake device ? Envoyé de mon iPhone en utilisant Tapatalk
  19. Guru

    Mainloop Lua VD

    C'est ça : Received radio ID (433Mhz Oregon Noise=2305 Level=1.6/5 WGR800 Avg.Wind=4.6m/s Dir.=135° Batt=Ok) Vent (OS445197056)
  20. Guru

    Mainloop Lua VD

    Mon sauveur, tout fonctionne en 5 min lol ! Aurais tu par hasard des sondes Oregon je pense que le fonctionnement est pareil, surtout pour l'anémomètre WGR800 il y a sans doute un calcule étrange a faire mais encore une fois merci
  21. Guru

    Mainloop Lua VD

    Whaou super ça fonctionne il me reste plus qu'a diviser par 10 et rajouter " °c " Merci tu es au top
  22. Guru

    Mainloop Lua VD

    Merci Steven, Oui c'est vieux lol mais je crois que c'est le script pour créer les variables ça (c'est ok cette partie) moi c'est le LUA pour faire un VD le dernier lien ou alors j'ai pas compris le tuto ptre
  23. Guru

    Mainloop Lua VD

    Qui aurait le script LUA ou tuto pour faire l'équivalent du VD proposé dans ce tuto ? http://www.domotique-info.fr/2014/02/utiliser-zibase-passerelle-enocean-pour-le-home-center-2/# le lien de téléchargement ne fonctionne plus
  24. Guru

    NODON Détecteur d'ouverture EnOcean

    Résolu ! Si ça peut aider un jour quelqu'un : Zibase : Faire une scene qui déclenche a ouverture et une la fermeture de notre capteur avec l'envoi d'une requête HTTP a notre HC2 HC2 : faire une variable a deux résultats ouvert / ferme, un VD avec deux bouton qui au passage change d'icône et envoi le changement de la variable Voila il vous reste plus qu'a utiliser le statut de la variable @tt
  25. Guru

    API HTTP

    Bravo j'avais donné tous les droits a cet utilisateur mais j'ai créé dans un second temps il faut donc a chaque création donner les droits aux utilisateurs ( pas pratique quand tu as la famille et les invités) Merci beaucoup de votre aide je vais pouvoir continuer ma migration zibase -> HC2
×
×
  • Créer...