Lazer Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 ah, donc si tu as un Wall Plug, qui pilote un Dimmer, le tonumber() ne fonctionne pas, c'est ça ?
sebcbien 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 la solution du post 181 ? c'est celle que j'utilisais jusqu'il y a quelques jours. Mais elle sera obsolète bientôt, quand on ajoute un device, islight n'est pas mis à jour etc. isLight est abondonné par fibaro ici on travaille pour être futur proof :-)
sebcbien Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 ah, donc si tu as un Wall Plug, qui pilote un Dimmer, le tonumber() ne fonctionne pas, c'est ça ? tu es sur que tu commente dans le bon fil ? le script de jojo modifié avec "interfaces" fonctionne pour les fgs et wallplugs déclarés commes contrôlant des lampes mais plante avec les fgd qui donnent une valeur a la place de true/false pour leur état (value)
Lazer Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 Non mais là je parlais juste des 2 lignes que j'ai proposé, pour détecter si la lumière est allumée, avec le "value". Mais si j'ai bien suivi, c'est le WP qui pose problème. J'ai bien compris que le islight est déprécié. (pas facile ces discussions croisées..... bon je vous laisse travailler alors )
Lazer Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 le script de jojo modifié avec "interfaces" fonctionne pour les fgs et wallplugs déclarés commes contrôlant des lampes mais plante avec les fgd qui donnent une valeur a la place de true/false pour leur état (value) voilàjustement, d'où les 2 lignes de code que j'ai proposé, provenant du module que j'avais proposé il y a quelques semaines.
sebcbien Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 oki compris, testé, mais ça donne [ERROR] 00:29:25: line :getValue (arg 2), expected 'unsigned int' got 'string' le problème n'est que avec les RGBW et les dimmer qui ont une value numérique "cachée" dans un string qui peut être soit nil, soit true, soit false soit "" Si on évalue avec tonumber ça pète. Si on n'évalue pas, on ne sais pas quoi chercher (peut être 51 par exemple) si le dimmer est à 51% Entre nous, je dois dire que ceci: if DeviceValue and DeviceValue > 0 me laisse assez perplexe ... if jsonTable[device].interfaces then for interface = 1, #jsonTable[device].interfaces do fibaro:debug(type(jsonTable[device].properties.value)) local DeviceValue = tonumber(fibaro:getValue(jsonTable[device].properties.value, "value")) if DeviceValue and DeviceValue > 0 then fibaro:call(jsonTable[device].id, "turnOff") end end end
sebcbien Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 en fait on est des chipoteurs, si on envoie un turnoff à tout les device interface=light ça fonctionne très bien, on flood un peu le réseau (2X par jour) ... ce code ci aussi fontionne très bien, mais il n'est pas très beau.. http://www.domotique-fibaro.fr/index.php/topic/4251-voir-si-une-lumi%C3%A8re-est-allum%C3%A9e-et-tout-%C3%A9tindre/page-11#entry95306 bref, on aime perdre son temps
jojo Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 sebcbien, je suis arrivé àla même conclusion que toi en essayant le code de Lazer, qui teste seulement si le device est allumé => utilise déjàla "nouvelle" façon de faire de Fibaro
jojo Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 pas si chipoteur que cela, car je voudrais que mon VD m'affiche les devices allumés (voir mon screenshot), donc il doit faire ce test de manière fiable
Lazer Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 Hum, c'est le local DeviceValue ...... getValue(....) qui est faux (c'est ma faute, le copIer/coller bourin c'est pas toujours la solution) essaye comme ça : local DeviceValue = tonumber(jsonTable[device].properties.value) Et je l'aime bien mon : if DeviceValue and DeviceValue > 0 then Si on peut faire du simple et efficace, je prends
sebcbien Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 ben toi aussi tu utilise la nouvelle façon de fibaro avec ce code ? if jsonTable[device].interfaces then for interface = 1, #jsonTable[device].interfaces do if jsonTable[device].interfaces[interface] == "light" then
sebcbien Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 jôli lazer. ceci fontionne: ---------------------------------- -- 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 local DeviceValue = tonumber(jsonTable[device].properties.value) if DeviceValue and DeviceValue > 0 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
sebcbien Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 Et je l'aime bien mon : if DeviceValue and DeviceValue > 0 then Si on peut faire du simple et efficace, je prends Oui mais heu je vois pas à quoi ça sert.de faire un and sur deux valeurs identiques...
Lazer Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 Oui mais heu je vois pas à quoi ça sert.de faire un and sur deux valeurs identiques... là il est tard et je ne sais plus pourquoi j'avais fait ça, mais à l'époque ça m'avait semblé être la bonne solution. En tout cas c'est chouette si ça fonctionne. On évite les "if" compliqués avec des "types()"
sebcbien Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 pas si chipoteur que cela, car je voudrais que mon VD m'affiche les devices allumés (voir mon screenshot), donc il doit faire ce test de manière fiable ah oui ok c'est juste... La methode de lazer ne vérifie rien et éteint tout... même ce qui est éteint même les compteursd d'énergie aeon labs [DEBUG] 00:51:27: id: 74 is Salon Température Fl type: zwave [DEBUG] 00:51:27: value: 21.53. Turning Off [DEBUG] 00:51:27: id: 88 is SDB Température Floo type: zwave [DEBUG] 00:51:27: value: 21.67. Turning Off [DEBUG] 00:51:27: id: 1288 is GARAGE Température type: battery [DEBUG] 00:51:27: value: 14.60. Turning Off [DEBUG] 00:51:27: id: 1288 is GARAGE Température type: zwave [DEBUG] 00:51:27: value: 14.60. Turning Off [DEBUG] 00:51:27: id: 1288 is GARAGE Température type: zwaveWakeup [DEBUG] 00:51:27: value: 14.60. Turning Off [DEBUG] 00:51:27: id: 1290 is GARAGE Luminosité type: battery [DEBUG] 00:51:27: value: 7.00. Turning Off [DEBUG] 00:51:27: id: 1290 is GARAGE Luminosité type: zwave [DEBUG] 00:51:27: value: 7.00. Turning Off [DEBUG] 00:51:27: id: 1290 is GARAGE Luminosité type: zwaveWakeup [DEBUG] 00:51:27: value: 7.00. Turning Off [DEBUG] 00:51:27: id: 1314 is SDB Temperature type: zwave [DEBUG] 00:51:27: value: 21.50. Turning Off [DEBUG] 00:51:27: id: 1315 is SDB Luminosité type: zwave [DEBUG] 00:51:27: value: 15.00. Turning Off [DEBUG] 00:51:27: id: 1359 is Grenier Température type: zwave [DEBUG] 00:51:27: value: 20.37. Turning Off [DEBUG] 00:51:27: id: 1361 is Temp eau 1er type: zwave [DEBUG] 00:51:27: value: 20.50. Turning Off [DEBUG] 00:51:27: id: 1362 is Temp eau Boiler type: zwave [DEBUG] 00:51:27: value: 40.31. Turning Off [DEBUG] 00:51:27: id: 1775 is Cpt Elec V General type: zwave [DEBUG] 00:51:27: value: 235.67. Turning Off [DEBUG] 00:51:27: id: 1778 is Cpt Elec V Phase 1 type: zwave [DEBUG] 00:51:27: value: 234.17. Turning Off [DEBUG] 00:51:27: id: 1781 is Cpt Elec V Phase 2 type: zwave [DEBUG] 00:51:27: value: 235.17. Turning Off [DEBUG] 00:51:27: id: 1784 is Cpt Elec V Phase 3 type: zwave [DEBUG] 00:51:27: value: 237.67. Turning Off [DEBUG] 00:51:27: id: 1914 is Cpt Elec A Général type: zwave [DEBUG] 00:51:27: value: 2.39. Turning Off [DEBUG] 00:51:27: id: 1915 is Cpt Elec A Phase 1 type: zwave [DEBUG] 00:51:27: value: 1.07. Turning Off [DEBUG] 00:51:27: id: 1916 is Cpt Elec A Phase 1 type: zwave [DEBUG] 00:51:27: value: 0.86. Turning Off [DEBUG] 00:51:27: id: 1917 is Cpt Elec A Phase 3 type: zwave [DEBUG] 00:51:27: value: 0.46. Turning Off [DEBUG] 00:51:27: id: 1969 is Qubino V1 type: energy [DEBUG] 00:51:27: value: 46. Turning Off [DEBUG] 00:51:27: id: 1969 is Qubino V1 type: light [DEBUG] 00:51:27: value: 46. Turning Off [DEBUG] 00:51:27: id: 1969 is Qubino V1 type: power [DEBUG] 00:51:27: value: 46. Turning Off [DEBUG] 00:51:27: id: 1969 is Qubino V1 type: zwave [DEBUG] 00:51:27: value: 46. Turning Off
Lazer Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 La methode de lazer ne vérifie rien et éteint tout... même ce qui est éteint euh... quoi ? Mon test qui te semble étrange sert justement àéviter de tout éteindre
jojo Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 j'y comprends plus rien, il n'y a plus rien qui fonctionne, je redémarre ma box. Donc Sebcbien, tu dis finalement que le code de Lazer ne fonctionne pas ?
sebcbien Posté(e) le 7 novembre 2015 Signaler Posté(e) le 7 novembre 2015 ok, j'ai rien dit, je suis un ane ;-) celui ci filtre les light et fonctionne sur les dimmer et rgbw plus qu'a ajouter les wallplug et fgs -- if jsonTable[device].interfaces then for interface = 1, #jsonTable[device].interfaces do if jsonTable[device].interfaces[interface] == "light" then local DeviceValue = tonumber(jsonTable[device].properties.value) if DeviceValue and DeviceValue > 0 then --fibaro:debug(" id: "..jsonTable[device].id.." is "..jsonTable[device].name.." type: "..jsonTable[device].interfaces[interface]) --fibaro:debug(" value: "..jsonTable[device].properties.value..". Turning Off") fibaro:call(jsonTable[device].id, "turnOff") end end end end end
sebcbien Posté(e) le 8 novembre 2015 Signaler Posté(e) le 8 novembre 2015 ok, ça ça fontionne pour tout: mais je sais pas ce test va être bon pour afficher la liste avec le bouton analyse... [DEBUG] 01:06:25: id: 23 is Lampadaires Salon (WPlug) type: light [DEBUG] 01:06:25: value: true. Turning Off [DEBUG] 01:06:25: id: 49 is Bureau type: light [DEBUG] 01:06:25: value: 99. Turning Off [DEBUG] 01:06:25: id: 1312 is Led Bureau (WPlug) type: light [DEBUG] 01:06:25: value: true. Turning Off [DEBUG] 01:06:25: id: 1934 is RGBW Dressing SDB type: light [DEBUG] 01:06:25: value: 12. Turning Off [DEBUG] 01:06:25: id: 1948 is Salon type: light [DEBUG] 01:06:25: value: 99. Turning Off [DEBUG] 01:06:25: id: 1965 is Salle a Manger type: light [DEBUG] 01:06:25: 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 local DeviceValue = tonumber(jsonTable[device].properties.value) if (DeviceValue and DeviceValue > 0) or (jsonTable[device].properties.value == "true") then --fibaro:debug(" id: "..jsonTable[device].id.." is "..jsonTable[device].name.." type: "..jsonTable[device].interfaces[interface]) --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
sebcbien Posté(e) le 8 novembre 2015 Signaler Posté(e) le 8 novembre 2015 euh... quoi ? Mon test qui te semble étrange sert justement àéviter de tout éteindre oui mais comme j'avais enlevé le test "light" bah il m'éteignait tout mes device qui avaient une value my bad ;-)
Lazer Posté(e) le 8 novembre 2015 Signaler Posté(e) le 8 novembre 2015 Bon bah voilà c'est cool tout ça tu es sur que tu commente dans le bon fil ? Et oui, tu vois finalement je n'étais pas le seul à être largué C'est chaud de bosser à 3 en même temps avec tous les messages croisés. Enfin on y est arrivé c'est l'essentiel. Je suis fatigué, au dodo
sebcbien Posté(e) le 8 novembre 2015 Signaler Posté(e) le 8 novembre 2015 Oui, fatigué aussi, -> Dodo. jojo, tu es toujours là ? ça ira pour le bouton analyse avec ce code ?
jojo Posté(e) le 8 novembre 2015 Signaler Posté(e) le 8 novembre 2015 je ne comprends pas pourquoi ça ne fonctionnerait pas pour mon test d'analyse. Mais en effet, ça ne fonctionne pas (il me dit 0 devices alors que mon WP est on)
jojo Posté(e) le 8 novembre 2015 Signaler Posté(e) le 8 novembre 2015 je ne comprends pas pourquoi le test fonctionne pour étteindre les lumières, et pas pour faire autre chose ... àdemain àtête reposée. 1
jojo Posté(e) le 8 novembre 2015 Signaler Posté(e) le 8 novembre 2015 ok ça fonctionne. En fait je partais sur le bout de code de Lazer, mais sebcbien, tu as rajouté un or ( petit filou !!) et évidemment tout fonctionne if (DeviceValue and DeviceValue > 0) or (jsonTable[device].properties.value == "true") then comme de toute façon je n'aurais pas réussi à dormir avec cette questions dans la tête, j'ai continué. Voici donc la v4.2 de sebcbien, lazer et moi Toutes_Lumieres_v4.2.vfib 2
Messages recommandés