Maintenant que je suis en v4.x j'ai trouvé comment tester si le device était sur batterie. Donc aussi sur batterie, il n'y a pas de tentative de réveil (inutile).   Voici donc la v4.1 du module : DeadNodesAnalysis_v4.1.vfib   Si vous avez déjà  les version précédentes, il suffit de mettre ce code dans le bouton "Dead Nodes Analysis" : -------------------------- -- User Settings -------------------------- local IconeDead = 1129 local IconeOk = 1081 local IconeRun = 1083 local push_dev = 2 -- id of the user to send push message to (2 is admin user) ---------------------------------- -- DO not change bellow this line ---------------------------------- local selfID = fibaro:getSelfId() fibaro:call(selfID, "setProperty", "currentIcon", IconeRun) -- check if notification to be sned local SendNotification = "" -- Push / no push notification when a dead node is discovered local Notification = fibaro:get(selfID,"TCPPort") Notification = tonumber(Notification) if Notification == 0 then SendNotification = "No" else SendNotification = "Yes" end function SendNotif(msg) if SendNotification == "Yes" then fibaro:call(push_dev, "sendEmail", "Dead nodes discovering", msg) end end function DisplLabel(dead, label) if dead <= 9 then fibaro:call(selfID, "setProperty", "ui.DeadNode" ..dead.. ".value", label) end end local dead = 0 -- counts # dead nodes local devices = 0 -- counts # devices discovered local i = 0 local type = "" local disabled -- device caché == 1 local Label = "" -- clear labels for i = 1, 9 do DisplLabel(i, Label) end -- détermination de la version du firmware local HC2 = Net.FHttp("127.0.0.1",11111) version = "" payload = "/api/settings/info" response, status, errorCode = HC2:GET(payload) if tonumber(status) == 200 then jsonTable = json.decode(response) if tonumber(jsonTable.softVersion) >= 4 then version = "4.x" else version = "3.x" end else fibaro:log("--- ERROR ---") fibaro:debug('<span style="color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..response..'</span>') end fibaro:debug('version = ' ..version) if version == "3.x" then -- v3.x -- dead nodes analysis for i = 2, 1300 do -- pas de check sur node 1 = box type = fibaro:getType(i) disabled = tonumber(fibaro:getValue(i, "disabled")) -- si type <> "" et visible if (type ~= "" and disabled == 0 ) then devices = devices + 1 -- si node i est dead/mort if tonumber(fibaro:getValue(i, "dead")) == 1 then -- le node i est dead dev = fibaro:getName(i) dead = dead + 1 -- affichage du node qui est dead si <=9 Label = dev.. " (" ..i.. ")" DisplLabel(dead, Label) -- wakeup dead node only if not on battery et "parentID" = "1" if (tonumber(fibaro:getValue(i, "isBatteryOperated")) == 0 and tonumber(fibaro:getValue(i, "parentID")) == 1) then fibaro:call(selfID, "setProperty", "currentIcon", IconeDead) fibaro:call(1, "wakeUpDeadDevice", i) fibaro:sleep(30*1000) -- attendre 30s pour tester si le node est réveillé if tonumber(fibaro:getValue(i, "dead")) == 1 then -- le node i est toujours dead msg = os.date("%d/%m/%y %H:%M").." : "..type.." "..dev.." ID("..i..") is still dead after unsuccessful wakeup" else -- le node i a été réveillé dead = dead - 1 -- effacer le node qui a été réveillée si <=9 DisplLabel(dead, " ") msg = os.date("%d/%m/%y %H:%M").." : "..type.." "..dev.." ID("..i..") was awakened successfully" end else msg = os.date("%d/%m/%y %H:%M").." : "..type.." "..dev.." ID("..i..") is on battery and was NOT awakened" -- fibaro:debug ("device " ..i.. " " ..dev.. "is on battery, no wakeup") end -- envoi notification SendNotif(msg) end end end else --v4.x -- Récupération de la liste des modules reponse = HC2:GET("/api/devices") jsonResponse = json.decode(reponse) -- dead nodes analysis for k, v in ipairs(jsonResponse) do fibaro:debug("k="..k) if v.visible == true and v.properties.dead ~= nil then devices = devices + 1 fibaro:debug("#devices "..devices.. " - devID = "..v.id.. " - devName = " ..v.name.. " - dead = " ..v.properties.dead) -- si node est dead/mort if v.properties.dead == "true" then -- le node k est dead dev = v.name devID = tonumber(v.id) type = v.type dead = dead + 1 fibaro:debug ("#dead = "..dead) -- affichage du node qui est dead si <=9 Label = dev.. " (" ..devID.. ")" DisplLabel(dead, Label) -- wakeup dead node only if not on battery -- a voir comment faire en v4.x ?? if v.properties.batteryLevel == nil then -- il n'est pas sur batteie fibaro:call(selfID, "setProperty", "currentIcon", IconeDead) fibaro:call(1, "wakeUpDeadDevice", devID) fibaro:sleep(30*1000) -- attendre 30s pour tester si le node est réveillé if v.properties.dead == "true" then -- le node est toujours dead msg = os.date("%d/%m/%y %H:%M").." : "..type.." "..dev.." ID("..devID..") is still dead after unsuccessful wakeup" else -- le node i a été réveillé dead = dead - 1 -- effacer le node qui a été réveillée si <=9 DisplLabel(dead, " ") msg = os.date("%d/%m/%y %H:%M").." : "..type.." "..dev.." ID("..devID..") was awakened successfully" end else -- il est sur batterie msg = os.date("%d/%m/%y %H:%M").." : "..type.." "..dev.." ID("..devID..") is on battery and was NOT awakened" end -- envoi notification SendNotif(msg) end end end end 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) -- affichage du message en bas de l'icône en continu, -- durant la minute entre chaque test i=0 while i < 61 do fibaro:log(dead.. " DeadNodes - Send Notification = " ..SendNotification ) fibaro:sleep(9*1000) i = i + 9 end else fibaro:call(selfID, "setProperty", "currentIcon", IconeOk) -- affichage du message en bas de l'icône en continu, -- durant la minute entre chaque test i=0 while i < 61 do fibaro:log("No Dead Nodes - Send Notification = " ..SendNotification ) fibaro:sleep(9*1000) i = i + 9 end end
    • Upvote
    1