Aller au contenu

labomatik

Membres confirmés
  • Compteur de contenus

    186
  • Inscription

  • Dernière visite

  • Jours gagnés

    2

Tout ce qui a été posté par labomatik

  1. Perso: Satel-> enfin fonctionnel !!! j'attend plusieurs jours pour voir si ils ont fixé le problème des plugins qui s'arrêtent apres un certain temps.
  2. une version arrive dans les prochains jours, je les avais contactés via le support concernant les problemes multiples avec la satel et la réponse a été une version arrive dans les prochains jours avec un fix. mais bon plusieurs jours c'est entre 1 et XXXXXXXX :-)
  3. Quel est la version de ton nas et HC2? Est ce que tu connais le LUA? christophe
  4. et hop encore la satel qui s'arrete apres 1-2j. Ca sent à plein nez un thread qui se plante et c'est surement lié aux plugins, attention petit recap: #0002409: Netatmo plugin doesn't work properly (Il s'arrete apres un certain temps) #0002487: Samsung Tv Plugin stops working after some time et comme par hasard, Satel est devenu un plugin sur le passage à la V4 donc pour moi toute la partie plugin est buggée
  5. Mon code est un peu bourrain mais l'essentiel est là
  6. J'ai à la maison un 1270 avec 12 disques, la conso est assez élevée, j'avais prévu au départ d'utiliser le scheduler du nas pour l'arrêter à heure fixe et redémarrer à heure fixe. Mais voilà le nas n'a pas besoin d'etre allumé pendant les congés, jours de boulot,... donc je prefere l'éteindre lorsque mon alarme est activée (ce qui signifie personne à la maison) si vraiment je dois me connecter dessus, le WOL via la HC2 me permet d'avoir la main directement. Sinon Qnap ou syno, a chacun son choix. Christophe
  7. Bonjour à tous, Voici un petit tutoriel sur comment piloter son nas QNAP avec la HC2. Je ne suis pas dévelopeur LUA sous HC2 donc il y a surement moyen d'optimiser tout ça (notamment les variables login/pass). Les 3 exemples sont basés sur mes besoins actuels, j'arrête mon nas le soir avec l'armement de mon alarme et rallume avec le désarmement de mon alarme grace au WOL (plugin fibaro). Avec les nouvelles génération de nas X51, il est possible de lancer la commande sleep et non shutdown, ce qui permet au NAS d'être réveillé en 5 secondes (RAM sauvegardée) Configuration QNAP Vous devez autoriser la connexion sans SSL (la HC2 ne supporte pas le ssl) HC2 voici un exemple de quelques fonctions que j'ai utilisé pour commander mon NAS - arrêter le nas proprement - démarrer l'enregistrement des caméras de la station de surveillance - arrêter l'enregistrement des caméras de la station de surveillance si vous voulez obtenir l'API complet des fonctions des NAS qnap, envoyez un petit mail à developer@qnap.com (anglais) --> Je ne suis pas dévelopeur et/ou je ne veux pas comprendre Voici alors le virtuel device déjà prêt avec les 3 fonctions vous devez configurer l'IP et le port dans la configuration du virtuel device et adapter le login/pass dans le code des 3 boutons (remplacez LOGIN_NAS et PASSWORD_NAS) QNAP.vfib.zip --> Je suis dévelopeur et/ou je veux comprendre démarrer l'enregistrement: local ip_module = fibaro:get(fibaro:getSelfId(), "IPAddress") local port = fibaro:get(fibaro:getSelfId(), "TCPPort") surveillance_Station = Net.FHttp(ip_module, port) surveillance_Station:setBasicAuthentication("LOGIN_NAS", "PASSWORD_NAS") response = surveillance_Station:GET("/cgi-bin/mrec.cgi?ch=1&act=1") if (string.find(response, "OK")) then fibaro:log("Starting Recording") else fibaro:log("ERROR") end arrêter l'enregistrement local ip_module = fibaro:get(fibaro:getSelfId(), "IPAddress") local port = fibaro:get(fibaro:getSelfId(), "TCPPort") surveillance_Station = Net.FHttp(ip_module, port) surveillance_Station:setBasicAuthentication("LOGIN_NAS", "PASSWORD_NAS") response = surveillance_Station:GET("/cgi-bin/mrec.cgi?ch=1&act=0") if (string.find(response, "OK")) then fibaro:log("Stop Recording") else fibaro:log("ERROR") end la partie plus complexe qui nécessite un parseur XML, l'arret du NAS if (not QNAP) then QNAP = {} QNAP.qnap_ip = fibaro:get(fibaro:getSelfId(), "IPAddress"); QNAP.port = fibaro:get(fibaro:getSelfId(), "TCPPort"); QNAP.globalvariable = "" -- -------------------------------------------------------------------------------------------------------------- -- Obtient le XML et le retourne sous forme de table LUA -- -------------------------------------------------------------------------------------------------------------- QNAP.getTokenFromXml = function() local QNAP2URL = Net.FHttp(QNAP.qnap_ip,QNAP.port); response = QNAP2URL:GET("/cgi-bin/authLogin.cgi?user=LOGIN_NAS&plain_pwd=PASSWORD_NAS&remme=1"); xmlTable = QNAP.iif(response ~= nil, QNAP.newParser().ParseXmlText(response), ""); if (xmlTable.QDocRoot ~= nil) then qsidstr = xmlTable.QDocRoot.authSid:value(); if (string.len(qsidstr)>0) then fibaro:debug("Qtoken founded"); qsidstr = qsidstr:gsub("[".."<![CDATA[".."]", ''); qsidstr = qsidstr:gsub("[".."]".."]", ''); qsidstr = qsidstr:gsub("["..">".."]", ''); fibaro:debug(qsidstr); response = QNAP2URL:GET("/cgi-bin/sys/sysRequest.cgi?subfunc=power_mgmt&count=0.1234&sid="..qsidstr.."&apply=shutdown"); if (string.find(response, "OK")) then fibaro:log("Power Off Server") else fibaro:log("ERROR") end end end end -- ------------------------------------------------------------------------------------------------------------- -- Teste la condition et retourne la valeur true ou false -- ------------------------------------------------------------------------------------------------------------- QNAP.iif = function(condition, iftrue, iffalse) if (condition) then return iftrue end return iffalse end -- ------------------------------------------------------------------------------------------------------------- -- Ceci est une version modifiée par Steven de Corona-XML-Module par Jonathan Beebe qui a son tour -- est basée sur Alexander Makeev's Lua-only XML parser . -- see https://github.com/Cluain/Lua-Simple-XML-Parser -- ------------------------------------------------------------------------------------------------------------- QNAP.newParser = function() parseXml = {} parseXml.FromXmlString = function(value) value = string.gsub(value, "([%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, "&", "&"); 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 QNAP.getTokenFromXml();
  8. question bête, est ce que cela fonctionne encore pour vous sous V4? j'ai un peu investigué et l'api de pushover me force àpasser en https mais bon HC2 ne supporte pas SSL
  9. @Krikroff: Ta satel fonctionne encore? Apres 1 journée, plus aucune remontée d'infos... Christophe
  10. Exact mais comme Fibaro a jugé utile de présenter au CES la version béta estampillée stable il est tout aussi logique des utilisateurs qui ont updaté de demander des infos et la raison de ce passage en stable d'une beta... Etant beta testeur je suis aussi complètement dégouté d'avoir une stable = beta, tous les bugs remontés par les beta testeurs ont été purement et simplement ignorés!!
  11. J'ai envoyé un tweet àdomadoo, faudra que je fasse la meme chose àKorben :-)
  12. On sent vraiment le CES... La partie SATEL est toujours buggée
  13. c'est passé chez moi, maintenant conversion de la db... 13905 ? S 0:00 \_ /bin/bash /usr/bin/update --auto 14161 ? S 0:00 \_ ./run.sh -c 29792 ? S 0:00 \_ ./run.sh -c 31955 ? D 0:00 \_ sqlite3 /opt/fibaro/db
  14. lol: 14220 ? S 0:00 \_ wget updateHC2.fibaro.com/4.030/patch.tar.gz -O patch.tar.gz -T 20 -t 3 en testant l'url j'en ai pour 3 heures de download
  15. Pour satel j'ai pas l'impression qu'il y a des remontées d'info :-((
  16. Ahhh enfin!! personnellement je retrouve une version stable, tout fonctionne correctement (même mon multiprises avec consommation et historique) ça fait du bien. Et cerise sur le gateau: les plugins! Avec ce que krikroff a développé, les autres box peuvent simplement se retirer du marché...
  17. Ou est ce que je peux télécharger ce nouveau plugin? :-p ou alors tu va devoir m'envoyer l'historique ;-)
  18. Ca me dit quelque chose ça :-))
  19. Waouwwww je suis chaud patate(tm Krikroff)
  20. Ahhh; aucun soucis, mon environment est le tiens ;-) Christophe
  21. Krikroff, petite question, je souhaiterai integrer la consommation de mes panneaux dans le panel energie de la HC2 avec ton plugin (quant je l'aurai réinstallé :-) ) Pour cela actuellement j'ai un petit VD avec ce code (mais qui fait plus qu'afficher des elements du json) une idée comment je peux récuperer ça sur ton plugin? -- Polling time (value in milliseconds) local _polling = 60*60*1000; local _trace = true; local _selfId = fibaro:getSelfId(); function trace(value) if (_trace) then return fibaro:debug(tostring(value)); end end function GetPlantOverview() trace("GET PLANT OVERVIEW"); local payload = [[ { } ]]; HC2 = Net.FHttp("192.168.1.50", "80"); response, status, errorCode = HC2:POST("/rpc", "RPC="..payload); if errorCode == 0 then trace("status: "..status); local jsonTable = json.decode(response); if (jsonTable ~= nil) then local proc = jsonTable.proc; local version = jsonTable.version; local id = jsonTable.id; trace(proc.." - id:"..id..", version:"..version); trace(table.getn(jsonTable.result.overview).." rows in overview"); for key,value in pairs(jsonTable.result.overview) do unit = jsonTable.result.overview[key].unit or ""; meta = jsonTable.result.overview[key].meta or ""; name = jsonTable.result.overview[key].name or ""; value = jsonTable.result.overview[key].value or ""; trace("unit:"..unit..", meta:"..meta..", name:"..name..", value:"..value); if (meta == "GriEgyTdy") then fibaro:call(_selfId, "setProperty", "ui.prodToday.value", value.." "..unit); end if (meta == "OpStt") then if (string.find(value, "Ok")) then status = "ok" else status = "ERROR" end fibaro:call(_selfId, "setProperty", "ui.status.value", status); end if (meta == "GriPwr") then fibaro:debug("Puissance :"..value.." "..unit); fibaro:call(_selfId, "setProperty", "ui.puissance.value", value.." "..unit); end end else trace("response is null"); end else trace("errorCode: "..errorCode); end trace("END GET PLANT OVERVIEW"); end function GetProcessData() local payload = [[ {} ]]; HC2 = Net.FHttp("192.168.1.50", "80"); response, status, errorCode = HC2:POST("/rpc", "RPC="..payload); if errorCode == 0 then trace("status: "..status); local jsonTable = json.decode(response); if (jsonTable ~= nil) then local proc = jsonTable.proc; local version = jsonTable.version; local id = jsonTable.id; trace(proc.." - id:"..id..", version:"..version); trace(table.getn(jsonTable.result.devices).." rows in devices"); for key,value in pairs(jsonTable.result.devices) do channels = jsonTable.result.devices[key].channels; trace(table.getn(channels).." channels in key" .. jsonTable.result.devices[key].key); for keyB,valueB in pairs(channels) do unit = channels[keyB].unit or ""; meta = channels[keyB].meta or ""; name = channels[keyB].name or ""; value = channels[keyB].value or ""; trace("unit:"..unit..", meta:"..meta..", name:"..name..", value:"..value); end end else trace("response is null"); end else trace("errorCode: "..errorCode); end end function main() -- prepare a global counter if (_count == nil) then trace("Home Center 2 start script at " .. os.date()); _count = 0; end --notify begin of process trace("Start process #".._count..", please wait..."); -- query #1 GetPlantOverview(); -- query #2 GetProcessData(); fibaro:call(_selfId, "setProperty", "ui.updatedate.value", os.date()); -- increment global counter _count = _count + 1; end -- Start main loop process main(); -- Sleep fibaro:sleep(_polling); -- EOF Main loop
  22. exact tous les plugins le probleme (d'apres ce que j'ai compris sur base de la session ssh) c'est que les devices liés à un plugin user ont incorrectement été migrés de 018 à la 019
  23. ok les amis, petite connection par socha et fix sur le crash de la HC2. il a téléchargé http://www.adminer.org/ pour se connecter àla base sqlite3 de la hc2 et a supprimé les devices créés par le plugin de krikroff. Donc en gros: avant un gros reboot (par bouton arriere) supprimez le plugin de krikroff (temporairement sur la version 4.0.19) -> Commentaire de Socha
  24. exact reboot via power a l'arriere, aucune nouvelle de fibaro sur ce probleme
×
×
  • Créer...