jojo Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 Merci pour cette info, En effet lors de la réinstall de ma box, ma lampe de bureau n'était plus listée, et elle l'est à nouveau. Je n'avais pas fait le rapprochement avec un reboot.. J'ai envie de reprendre le dernier code et de modifier le test
pepite Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 Vous precisez l'appareil que vous commandez avec les WallPlug ? Sur un de mes WP, j'ai bien IsLight mais pas light dans interfaces, ca vient du fait que je ne precise pas ce que je commande ?
jojo Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 voici donc le code avec double click pour tout eteindre sur base des infos rapportées par sebcbien ---------------------------------- -- User Settings ---------------------------------- -- Modules à exclure et fonction de traitement (pas raccordés à des lumières) -- Peut contenir un id ou un mot clés à chercher dans le nom du module toExclude = {} toInclude = {} ---------------------------------- -- DO not change bellow this line ---------------------------------- -- Modules à exclure ou inclure et fonction de traitement (pas raccordés à des lumières) -- Peut contenir un id ou un mot clés à chercher dans le nom du module -- toExclude = {72, "Dispo", "Volet", "Bubendorff"} function shouldExclude(module) for _, v in pairs(toExclude) do if string.find(module.name, v) ~= nil or module.id == v then return true end end return false end function shouldInclude(module) for _, v in pairs(toInclude) do if string.find(module.name, v) ~= nil or module.id == v then return true end end return false end ---------------------------------- -- double click pour confirmer ---------------------------------- -- ---------------------------- -- Ne pas toucher -- -- ---------------------------- function confirm(msg, labelId, secondes) local current = fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value") if (current == msg) then fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", " ") return true else fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", msg) fibaro:sleep(secondes*1000) fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value","") return fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value") == " " end end -- ---------------------------- -- A vous de jouer --- -- ---------------------------- local label_id = "lblMessage" -- l'ID du label qui recevra le message local duree = 4 -- la durée max entre 2 clique (en seconde) local message = "Ré-appuyer dans les "..duree.." secondes pour confirmer" -- le message de confirmation if ( confirm(message, label_id, duree) ) then fibaro:log("Confirmé") -- votre code ici en cas de confirmation -- Récupération de la liste des modules local HC2 = Net.FHttp("127.0.0.1", 11111) local payload = "/api/devices" local response, status, errorCode = HC2:GET(payload) if tonumber(errorCode) == 0 and tonumber(status) == 200 and response ~= nil and response ~= "" then local jsonTable = json.decode(response) -- Boucle sur les modules for device = 1, #jsonTable do -- look for lighting devices if jsonTable[device].interfaces then for interface = 1, #jsonTable[device].interfaces do if jsonTable[device].interfaces[interface] == "light" and jsonTable[device].properties.value == "true" then fibaro:call(jsonTable[device].id, "turnOff") end end end end else fibaro:debug('<span style="display:inline;color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..(response or "")..'</span>') end else fibaro:log("Annulé") -- votre code ici en cas d'annulation end Je vous joins également une version 4.0 qui permet de voir quelles lumières sont allumées avant de les éteindre Toutes_Lumieres_v4.0.vfib 2
sebcbien Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 Vous precisez l'appareil que vous commandez avec les WallPlug ? Sur un de mes WP, j'ai bien IsLight mais pas light dans interfaces, ca vient du fait que je ne precise pas ce que je commande ? Oui sur un wallplug je dis aussi que c'est une lampe. Comme ça ça apparaît dans lightning dans l'interface mobile.Sent from my Note4
sebcbien Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 Merci jojo (alias YAPLUKA) ;-), je teste ça a mon retour. Sent from my Note4
jojo Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 j'ai testé chez moi, et c'est ok, Donc tu fais la partie YFOKON officielle ?
kioneoranga Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 Super VD Merci bcp fonctionnel du premier coup.
sebcbien Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 Chez moi ça ne fonctionne que si j'enlève ceci ligne 73: and jsonTable[device].properties.value == "true" j'ai analysé jsonTable[device].properties.value et il n'est pas toujours à true ou false, mais renvoie aussi le pourcentage des dimmers et des rgbw... 43, 99, 12 etc.. Docn a priori ce script ne fonctionne que pour les wallplug et les FGS. Pourquoi as-tu mis cette ligne ? pour ne pas envoyer d'ordre inutiles ? Perso, jen e vois pas comment faire un test, pcq si je fait un tonumber() pour vérifier si > 0 j'ai une erreur quand la valeur n'est pas numérique...
sebcbien Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 @jojo, tu n'a pas partagé le bon vfib, c'est le top 10 power celui là ... tsss tu n'est pas "à ton affaire" comme on dit par ici ceci dit, si tu peux mettre le code du bouton analyse, je préfère. Merci
pepite Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 @sebcbien, ah oui, je n'avais pas fait attention a cela pour les wallplugs. @jojo, sympa le top 10 power ;-)
sebcbien Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 voici le script adapté: il n'est pas très beau mais il fonctionne, c'est le seul moyen que j'ai trouvé pour garder la logique de jojo (n'envoyer des ordres zwave que si la lampe est allumée) J'ai rajouté deux debugs (lignes 74 et 82) qui m'on permis de comprendre ou ça plantait. Je les ai laissés pour le moment, si on rencontre lors des test que un device ne fonctionne pas, ce sera plus facile àlocaliser. A enlever par la suite. le debug donne ceci: [DEBUG] 23:15:48: id: 16 is Salle De Bain type: light [DEBUG] 23:15:48: id: 23 is Lampadaires Salon type: light [DEBUG] 23:15:48: value: true. Turning Off [DEBUG] 23:15:48: id: 24 is Chambre Amis type: light [DEBUG] 23:15:48: id: 41 is Chambre Thomas type: light [DEBUG] 23:15:48: id: 42 is Dressing type: light [DEBUG] 23:15:48: id: 43 is Ch Amis Cramé ? type: light [DEBUG] 23:15:48: id: 47 is Chambre Parents type: light [DEBUG] 23:15:48: id: 49 is Bureau type: light [DEBUG] 23:15:48: value: 99. Turning Off [DEBUG] 23:15:48: id: 50 is WC type: light [DEBUG] 23:15:48: id: 51 is Garage type: light [DEBUG] 23:15:48: id: 52 is Hall type: light [DEBUG] 23:15:48: value: 99. Turning Off [DEBUG] 23:15:48: id: 56 is Cellier type: light [DEBUG] 23:15:48: id: 58 is Chambre Emilien type: light [DEBUG] 23:15:48: id: 63 is Terrasse type: light [DEBUG] 23:15:48: id: 1312 is Led Bureau type: light [DEBUG] 23:15:49: value: true. Turning Off [DEBUG] 23:15:49: id: 1893 is Poussoirs Haut type: light [DEBUG] 23:15:49: id: 1934 is RGBW Dressing SDB type: light [DEBUG] 23:15:49: id: 1944 is Corniche Rez type: light [DEBUG] 23:15:49: value: 8. Turning Off [DEBUG] 23:15:49: id: 1948 is Salon type: light [DEBUG] 23:15:49: value: 99. Turning Off [DEBUG] 23:15:49: id: 1952 is Cuisine type: light [DEBUG] 23:15:49: value: 99. Turning Off [DEBUG] 23:15:49: id: 1965 is Salle a Manger type: light [DEBUG] 23:15:49: value: 95. Turning Off ---------------------------------- -- User Settings ---------------------------------- -- Modules àexclure et fonction de traitement (pas raccordés àdes lumières) -- Peut contenir un id ou un mot clés àchercher dans le nom du module toExclude = {} toInclude = {} ---------------------------------- -- DO not change bellow this line ---------------------------------- -- Modules àexclure ou inclure et fonction de traitement (pas raccordés àdes lumières) -- Peut contenir un id ou un mot clés àchercher dans le nom du module -- toExclude = {72, "Dispo", "Volet", "Bubendorff"} function shouldExclude(module) for _, v in pairs(toExclude) do if string.find(module.name, v) ~= nil or module.id == v then return true end end return false end function shouldInclude(module) for _, v in pairs(toInclude) do if string.find(module.name, v) ~= nil or module.id == v then return true end end return false end ---------------------------------- -- double click pour confirmer ---------------------------------- -- ---------------------------- -- Ne pas toucher -- -- ---------------------------- function confirm(msg, labelId, secondes) local current = fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value") if (current == msg) then fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", " ") return true else fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", msg) fibaro:sleep(secondes*1000) fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value","") return fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value") == " " end end -- ---------------------------- -- A vous de jouer --- -- ---------------------------- local label_id = "lblMessage" -- l'ID du label qui recevra le message local duree = 4 -- la durée max entre 2 clique (en seconde) local message = "Ré-appuyer dans les "..duree.." secondes pour confirmer" -- le message de confirmation if ( confirm(message, label_id, duree) ) then fibaro:log("Confirmé") -- votre code ici en cas de confirmation -- Récupération de la liste des modules local HC2 = Net.FHttp("127.0.0.1", 11111) local payload = "/api/devices" local response, status, errorCode = HC2:GET(payload) if tonumber(errorCode) == 0 and tonumber(status) == 200 and response ~= nil and response ~= "" then local jsonTable = json.decode(response) -- Boucle sur les modules for device = 1, #jsonTable do -- look for lighting devices if jsonTable[device].interfaces then for interface = 1, #jsonTable[device].interfaces do if jsonTable[device].interfaces[interface] == "light" then fibaro:debug(" id: "..jsonTable[device].id.." is "..jsonTable[device].name.." type: "..jsonTable[device].interfaces[interface]) local isnumber = true if jsonTable[device].properties.value == "true" then fibaro:debug(" value: "..jsonTable[device].properties.value..". Turning Off") fibaro:call(jsonTable[device].id, "turnOff") isnumber = false elseif jsonTable[device].properties.value == "false" or jsonTable[device].properties.value == "" or jsonTable[device].properties.value == nil then isnumber = false elseif tonumber(jsonTable[device].properties.value) > 0 and isnumber == true then fibaro:debug(" value: "..jsonTable[device].properties.value..". Turning Off") fibaro:call(jsonTable[device].id, "turnOff") end end end end end else fibaro:debug('<span style="display:inline;color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..(response or "")..'</span>') end else fibaro:log("Annulé") -- votre code ici en cas d'annulation end
jojo Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 je regarde ton code adapté en détail. En effet, je fais le test pour ne pas envoyer l'ordre d'estinction pour rien, et c'est le même test qui est utilisé pour afficher les lampes allumées dans le bouton analyse. je corrige le tout et reposte le bon VD
sebcbien Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 je viens de modifier le code légèrement au niveau des debugs pour une meilleure lisibilité Pour mon code, il y a certainement moyen de faire mieux, plus joli, plus court... :-/
jojo Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 j'ai mis le bon / mauvais VD plus haut
jojo Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 sebcbien, je ne comprends pas pourquoi tu passe par une variable locale isnumber. Ceci devrait suffire : for interface = 1, #jsonTable[device].interfaces do if jsonTable[device].interfaces[interface] == "light" then fibaro:debug(" id: "..jsonTable[device].id.." is "..jsonTable[device].name.." type: "..jsonTable[device].interfaces[interface]) if jsonTable[device].properties.value == "true" then fibaro:debug(" value: "..jsonTable[device].properties.value..". Turning Off") fibaro:call(jsonTable[device].id, "turnOff") elseif tonumber(jsonTable[device].properties.value) > 0 then fibaro:debug(" value: "..jsonTable[device].properties.value..". Turning Off") fibaro:call(jsonTable[device].id, "turnOff") end end end n'ayant pas de FGD, je ne sais pas tester. Peux-tu valider SVP ?
sebcbien Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 j'ai essayé ton script, ça donne ça: [ERROR] 23:38:55: line 77: attempt to compare number with nil parceque tonumber(jsonTable[device].properties.value) > 0 plante le script si la valeur n'est pas numérique si value = false par exemple, tonumber de nil crée une erreur Donc je m'assurait avant de lancer tonumber que value n'est pas nil, false, true, "" C'est ça qui m'a pris une heure ;-)
jojo Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 ok, j'ai compris, je vais quand même voir s'il n'ya pas un autre moyen plus compréhensible de le programmer
Lazer Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 (modifié) Sebcbien, tu peux essayer avec ça, c'est ce que j'avais mis dans mon précédent code, et ça avait l'air de fonctionner avec tes RGB : local DeviceValue = tonumber(fibaro:getValue(jsonTable[device].properties.value, "value")) if DeviceValue and DeviceValue > 0 then Modifié le 7 novembre 2015 par Lazer
jojo Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 voilà, la variable intermédiaire me chagrinait ... donc voici un nouveau code qui ne fait pas d'erreur chez moi. Fonctionne-t-il également correctement avec tes FGD ? -- look for lighting devices if jsonTable[device].interfaces then for interface = 1, #jsonTable[device].interfaces do if jsonTable[device].interfaces[interface] == "light" and (jsonTable[device].properties.value == "true" or (type(jsonTable[device].properties.value) == "number" and tonumber(jsonTable[device].properties.value) > 0)) then fibaro:call(jsonTable[device].id, "turnOff") end end end
jojo Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 si ok, je "publie" le code complet avec le bon VD
sebcbien Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 Sebcbien, tu peux essayer avec ça, c'est ce que j'avais mis dans mon précédent code, et ça avait l'air de fonctionner avec tes RGB : local DeviceValue = tonumber(fibaro:getValue(jsonTable[device].properties.value, "value")) if DeviceValue and DeviceValue > 0 then c'est une erreur de ma part, ça fonctionne très bie comme ça avec les rgbw, j'aurais du éditer mon post, désolé...
sebcbien Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 voilà , la variable intermédiaire me chagrinait ... donc voici un nouveau code qui ne fait pas d'erreur chez moi. Fonctionne-t-il également correctement avec tes FGD ? -- look for lighting devices if jsonTable[device].interfaces then for interface = 1, #jsonTable[device].interfaces do if jsonTable[device].interfaces[interface] == "light" and (jsonTable[device].properties.value == "true" or (type(jsonTable[device].properties.value) == "number" and tonumber(jsonTable[device].properties.value) > 0)) then fibaro:call(jsonTable[device].id, "turnOff") end end end @jojo, joli le code, mais ça n'a éteint que les WP, je cherche un peu
Lazer Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 Sebcbien, alors du coup ma solution utilise un code plus léger que la solution de Jojo. Mais je ne comprends pas pourquoi tu cherches toujours, j'ai du couper un épisode
sebcbien Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 fibaro:debug(type(jsonTable[device].properties.value)) donne comme debug string ou nil, mais pas number
Messages recommandés