zozotte Posté(e) le 5 octobre 2015 Signaler Posté(e) le 5 octobre 2015 Je confirme depuis la version 3.5xx le HC2 s'occupe de tout cela, il y a la possibilité de les afficher ou non dans l'interface. Pour la résolution complète des dead nodes attendez la sortie de la V4.xx dans quelques semaines / mois ou installez des wall plugs partout Hello, Je comprends plus, HC2 gère tout seul de réveiller les noeuds dead ou pas ? Merci Zozotte
jmg38 Posté(e) le 5 avril 2016 Signaler Posté(e) le 5 avril 2016 Bonjour, Depuis que je suis passé en V 4.081 , [DeadNodesAnalysis est bloqué et j'ai ce message en debug : [ERROR] 11:07:07: line 48: attempt to call global 'type' (a string value) . cela n'a peut être rien à voir avec la MAJ et j'ai mis le correctif de Steven? :07: true
jojo Posté(e) le 5 avril 2016 Signaler Posté(e) le 5 avril 2016 tu as mis le correctif de Steven dans le code de ce VD ? Car le correctif de Steven est dans le code de GEA.
jmg38 Posté(e) le 5 avril 2016 Signaler Posté(e) le 5 avril 2016 Non, effectivement cela n'a pas de rapport!
jmg38 Posté(e) le 5 avril 2016 Signaler Posté(e) le 5 avril 2016 En fait c'est la date qui ne s'actualise plus!
jojo Posté(e) le 5 avril 2016 Signaler Posté(e) le 5 avril 2016 Je comprends plus rien. Sorry, tu me connais, je comprends vite, mais il faut m'expliquer longtemps. Comme ce VD est loin dans ma méloire, il faut m'ider. Et comme je ne suis pas en 4.081b je ne peut pas reproduire l'erreur. Alors dis mois de quel bouton il s'agit et donne le code entourant l'erreur.
Nico Posté(e) le 5 avril 2016 Signaler Posté(e) le 5 avril 2016 La 4.081 génère un plantage au bout d'un temps x des mainloop, donc normal. Il faut retourner en 4.080, laisse tomber cette 4.081.
jojo Posté(e) le 3 juillet 2016 Signaler Posté(e) le 3 juillet 2016 depuis la version 4.082( ?) le VD ne fonctionne plus. Voici donc le code qui fonctionne pour le bouton "DeadNodesAnalysis" -------------------------- -- User Settings -------------------------- local IconeDead = 44 local IconeOk = 45 local IconeRun = 46 local push_dev = 2 -- id of the user to send push message to (2 is admin user) local exclude = {} -- les des id des devices àne pas tester si dead local wakeup = false -- true / false si on veut / ne veut pas de tentative de réveil des noeuds morts FreqNotif = 12 -- fréquence de notification [h] si un noeud est mort -- entrez la fréquence [s] de vérification dans le champ IP Address de ce VD ---------------------------------- -- DO not change bellow this line ---------------------------------- local now = os.time() local selfID = fibaro:getSelfId() local HC2 = Net.FHttp("127.0.0.1",11111) fibaro:call(selfID, "setProperty", "currentIcon", IconeRun) fibaro:call(selfID, "setProperty", "ui.Excluded.value", #exclude) -- display FreqNotif fibaro:call(selfID, "setProperty", "ui.FreqNotif.value", FreqNotif.." h") -- display wakeup if wakeup == true then fibaro:call(selfID, "setProperty", "ui.wakeup.value", "Oui") else fibaro:call(selfID, "setProperty", "ui.wakeup.value", "Non") end -- check if notification to be send SendNotification = fibaro:get(selfID,"IPAddress") if SendNotification ~= "Oui" then SendNotification = "Non" end fibaro:call(selfID, "setProperty", "ui.Notification.value", SendNotification) -- fréquence de vérification ? local Frequence = fibaro:get(fibaro:getSelfId(),"TCPPort") Frequence = tonumber(Frequence) -- si TCPPort est vide, la valeur par défaut retournée est 80 => fréquence = 60s if Frequence == 80 or Frequence <= 10 then Frequence = 60 end fibaro:call(selfID, "setProperty", "ui.FreqAnal.value", Frequence.." sec") -- vérification si variable "DeadNodes" existe local response, status, error = HC2:GET("/api/globalVariables/") Variables = json.decode(response) local Exist = false for _, v in pairs(Variables) do if v.name == "DeadNodes" then Exist = true end end fibaro:debug("La variable DeadNodes exite : "..tostring(Exist)) -- création de la variable "DeadNodes" si elle n'existe pas if Exist == false then temp = '{"name":"DeadNodes", "isEnum":0, "value":"NaN"}' fibaro:debug(temp) HC2:POST("/api/globalVariables", temp) end -- chargement de la VG DeadNodes fibaro:debug("Chargement de la VG DeadNodes") local DeadNodes = {} DeadNodes = fibaro:getGlobal("DeadNodes") if DeadNodes ~= "NaN" or DeadNodes ~= "" then DeadNodes = json.decode(DeadNodes) end if type(DeadNodes) ~= "table" then DeadNodes = {} end fibaro:debug("VG DeadNodes chargée") --------------------- -- FUNCTIONS --------------------- -- envoie mails notification function SendNotif(msg) if SendNotification == "Oui" then fibaro:call(push_dev, "sendEmail", "Dead nodes discovering", msg) end end -- affichage des noeuds morts function DisplLabel(dead, label) if dead <= 9 then fibaro:call(selfID, "setProperty", "ui.DeadNode" ..dead.. ".value", label) end end -- affichage du status function Status(status) fibaro:call(selfID, "setProperty", "ui.Status.value", status) end -- affichage du log function Log(log) fibaro:log(log) end -- vérifier si noeud dans la table function InTable(Device) if DeadNodes["DV"..Device] == nil then return false else return true end end -- wakeup function function WakeUp(Device) fibaro:call(1, "wakeUpDeadDevice", Device) Status ("Réveil de " ..devID) Log(dead.. " DeadNodes - Send Notif = " ..SendNotification.. "/" ..FreqNotif.. "h - Réveil de " ..Device) fibaro:sleep(30*1000) -- attendre 30s pour tester si le node est réveillé end --------------------- -- END FUNCTIONS --------------------- Status ("Analyse") dead = 0 -- counts # dead nodes local devices = 0 -- counts # devices discovered local i = 0 -- clear labels for i = 1, 9 do DisplLabel(i, " ") end -- Récupération de la liste des modules reponse = HC2:GET("/api/devices") jsonResponse = json.decode(reponse) fibaro:debug("Liste des modules chargée") -- dead nodes analysis for _, v in ipairs(jsonResponse) do -- vérification si device dans la liste des devices exclus local found = false for e = 1, #exclude do if v.id == exclude[e] then found = true end end if found == false and v.visible == true and v.properties.dead ~= nil then devices = devices + 1 Status ("Analyse") fibaro:debug("Analyse - #Devices = "..devices) Log(dead.. " DeadNodes - Send Notif = " ..SendNotification.. "/" ..FreqNotif.. "h - Analyse en cours") dev = v.name dtype = v.type devID = tonumber(v.id) -- si node est dead/mort if v.properties.dead == "true" then -- le node est dead dead = dead + 1 fibaro:debug("Device "..devID.." mort- total = "..dead) -- affichage du node qui est dead si <=9 DisplLabel(dead, dev.. " (" ..devID.. ")") -- vérification si device est dans la table des noeuds morts if InTable(devID) == true then -- dans table -- vérification si > fréquence de notification if (DeadNodes["DV"..devID] + (FreqNotif*60*60)) < now then -- fréq notif : notif ok DeadNodes["DV"..devID] = now -- check si sur batterie if v.properties.batteryLevel ~= nil or wakeup == false then -- sur batterie SendNotif(os.date("%d/%m/%y %H:%M").." : "..dtype.." "..dev.." ID("..devID..") is on battery and was NOT awakened (or wakeup = false). Next notification at "..os.date("%X", DeadNodes["DV"..devID]+FreqNotif*60*60)) else -- sur secteur -- wakeup process with mail WakeUp(devID) if v.properties.dead == "true" then -- le node est toujours dead SendNotif(os.date("%d/%m/%y %H:%M").." : "..dtype.." "..dev.." ID("..devID..") is still dead after unsuccessful wakeup. Next notification at "..os.date("%X", DeadNodes["DV"..devID]+FreqNotif*60*60)) else -- le node i a été réveillé dead = dead - 1 -- effacer le node qui a été réveillée si <=9 DisplLabel(dead, " ") SendNotif(os.date("%d/%m/%y %H:%M").." : "..dtype.." "..dev.." ID("..devID..") was awakened successfully.") end -- still dead end -- batterie else -- fréq notif : pas notif -- check si sur batterie if v.properties.batteryLevel ~= nil or wakeup == false then -- sur batterie -- check next node else -- sur secteur -- wakeup process without mail WakeUp(devID) if v.properties.dead == "true" then -- le node est toujours dead else -- le node i a été réveillé dead = dead - 1 -- effacer le node qui a été réveillée si <=9 DisplLabel(dead, " ") SendNotif(os.date("%d/%m/%y %H:%M").." : "..dtype.." "..dev.." ID("..devID..") was awakened successfully" ) end -- still dead end -- batterie end -- < fréq notif else -- pas dans table DeadNodes["DV"..devID] = now -- check si sur batterie if v.properties.batteryLevel ~= nil or wakeup == false then -- sur batterie SendNotif(os.date("%d/%m/%y %H:%M").." : "..dtype.." "..dev.." ID("..devID..") is on battery and was NOT awakened (or wakeup = false). Next notification at "..os.date("%X", DeadNodes["DV"..devID]+FreqNotif*60*60)) else -- sur secteur -- wakeup process with mail WakeUp(devID) if v.properties.dead == "true" then -- le node est toujours dead SendNotif(os.date("%d/%m/%y %H:%M").." : "..dtype.." "..dev.." ID("..devID..") is still dead after unsuccessful wakeup. Next notification at "..os.date("%X", DeadNodes["DV"..devID]+FreqNotif*60*60)) else -- le node i a été réveillé dead = dead - 1 -- effacer le node qui a été réveillée si <=9 DisplLabel(dead, " ") SendNotif(os.date("%d/%m/%y %H:%M").." : "..dtype.." "..dev.." ID("..devID..") was awakened successfully" ) end -- still dead end -- batterie end -- InTable else -- not dead -- vérification si device est dans la table des noeuds morts if InTable(devID) == true then -- dans table SendNotif(os.date("%d/%m/%y %H:%M").." : "..dtype.." "..dev.." ID("..devID..") is no more dead") DeadNodes["DV"..devID] = nil else -- pas dans table -- check next node end -- InTable end -- is dead ? end -- not in exclude table end -- for Status ("Fin") fibaro:debug("Status = Fin") fibaro:call(selfID, "setProperty", "ui.DeadNodes.value", dead) fibaro:call(selfID, "setProperty", "ui.DateCheck.value", os.date("%d/%m/%y %H:%M")) fibaro:call(selfID, "setProperty", "ui.Devices.value", devices) if dead >= 1 then fibaro:call(selfID, "setProperty", "currentIcon", IconeDead) else fibaro:call(selfID, "setProperty", "currentIcon", IconeOk) end -- sauvegarde de la table dans la VG DeadNodes = json.encode(DeadNodes) fibaro:setGlobal("DeadNodes", DeadNodes) -- affichage du message en bas de l'icône en continu, Log(dead.. " DeadNodes - Send Notif = " ..SendNotification.. "/" ..FreqNotif.. "h - " ..#exclude.. " excluded devices") et la version complète (v5.1) pour ceux qui ne l'utilisent pas encore DeadNodesAnalysis_v5.1.vfib 2
domo Posté(e) le 7 juillet 2016 Signaler Posté(e) le 7 juillet 2016 merci jojo au top par contre tu as les icônes qui va avec ce VD merci
971jmd Posté(e) le 7 juillet 2016 Signaler Posté(e) le 7 juillet 2016 salut @jojo une petit question quel différence entre les deux code .
jojo Posté(e) le 8 juillet 2016 Signaler Posté(e) le 8 juillet 2016 un qui fonctionne, l'autre pas ....
jojo Posté(e) le 8 juillet 2016 Signaler Posté(e) le 8 juillet 2016 plus sérieusement: ligne 48, j'avais une variable locale "type", que j'ai renommée en "dtype" car apparemment "type" serait un nom réservé maintenant
971jmd Posté(e) le 2 novembre 2016 Signaler Posté(e) le 2 novembre 2016 salut a tous le 5.1 fonctionne-t-elle sur la HC2 4.100 ? si oui, je souhaite changer une chose, la temps de fréquence de notification en minute la modification serait elle a la ligne 162 if (DeadNodes["DV"..devID] + (FreqNotif*60*60)) < now
971jmd Posté(e) le 3 novembre 2016 Signaler Posté(e) le 3 novembre 2016 j'ai une autre question je souhaite savoir si le script DeadNodesAnalysis_v5.1 peut détecter un module qui est hors secteur. Quand t’ont coupe l’alimentation du module il est censé passer pour mort, mai visiblement le script ne le trouve pas, sauf pour une Walplug. La seule manier de déclarer pour mort est de réaliser une action (on, off, .....)
971jmd Posté(e) le 4 novembre 2016 Signaler Posté(e) le 4 novembre 2016 Salut à tous voila j'ai trouver un début de solution lorsque que je coupe l’alimentation du module, la valeur "dead" reste à 0 donc toujours vivant et impossible pour le script Contrôle des noeuds mort et leur réveil de le trouver pour mort. j'ai créé un petit script qui envois une pulsion, c'est la seul manier pour le rendre mort la seul chose qui manque a mon script c'est un changement de valeur une foi le module déconnecté du secteur. alors si vous avez une idée local dead = fibaro:getValue(174, "dead") fibaro:debug('dead ' .. dead .. " " ) if dead == "0" then fibaro:call(174, "turnOn") fibaro:call(174, "turnOff") end xx
jojo Posté(e) le 4 novembre 2016 Signaler Posté(e) le 4 novembre 2016 dans ton script tu dois détecter la position du FGS. Car làtu pars du principe qu'il était éteint. Mais s'il était allumé, il sera éteint àla fin. D plus faire ce test àla fréquence de vérification des noeuds morts, tu vas transformer ta maison en sapin de Noël. C'est un peut tôt ... Regarde plutôt pour lui envoyer un json d'une autre propriété qui n'affecte pas directement la fonctionnalité du module
971jmd Posté(e) le 4 novembre 2016 Signaler Posté(e) le 4 novembre 2016 salut @jojo oui c'est bientôt Noel non blague appart, je vais essayer une autre fonction json le truc il faut trouve une json qui pousse la HC2 a trouver le module et surtout une fonction si secteur ou pas.
971jmd Posté(e) le 4 novembre 2016 Signaler Posté(e) le 4 novembre 2016 Bien sur je trouve ou pas json si Secteur ou pas j'aurai tout trouver
jojo Posté(e) le 4 novembre 2016 Signaler Posté(e) le 4 novembre 2016 pour la propriété qui n'a aucun effet : useTemplate : true/false pour savoir s'il est sur secteur, le VD vérifie déjà s'il est sur batterie
971jmd Posté(e) le 4 novembre 2016 Signaler Posté(e) le 4 novembre 2016 useTemplate c'est quoi exactement ?
Lazer Posté(e) le 4 novembre 2016 Signaler Posté(e) le 4 novembre 2016 Une autre approche : as-tu testé de faire un polling du device (comme quand tu cliques sur le bouton "interroger maintenant" dans les propriétés avancées du module, dans l'interface Web) ? Exemple de code dans une scène (avec HTTPClient(), donc en asynchrone) : local postURL = 'http://127.0.0.1:11111/api/devices/' .. id .. '/action/poll' local httpClient = net.HTTPClient() httpClient:request(postURL, { success = function(response) if response.status == 200 or response.status == 202 then fibaro:debug("Poll device OK") else fibaro:debug("Error : status="..tostring(response.status)) end end, error = function(err) fibaro:debug("Error : "..err) end, options = { method = 'POST' } })
971jmd Posté(e) le 4 novembre 2016 Signaler Posté(e) le 4 novembre 2016 j'ai une erreur [DEBUG] 17:24:43: line 7: attempt to concatenate global 'id' (a nil value) local postURL = 'http://127.0.0.1:11111/api/devices/' .. id .. '/action/poll'
Messages recommandés