Steven Posté(e) le 30 janvier 2015 Auteur Signaler Partager Posté(e) le 30 janvier 2015 Lol Lien vers le commentaire Partager sur d’autres sites More sharing options...
DMK2424 Posté(e) le 31 janvier 2015 Signaler Partager Posté(e) le 31 janvier 2015 Voici l'adaptation pour ceux qui comme moi sont restés en 3.600. A placer dans un bouton d'un Virtual Device. Récupération du résultat dans la fenêtre Debug du bouton. local dead = true -- true pour exporter les devices morts local excludeType = {"weather", "HC_user", "iOS_device"} local excludeID = {} -- Initiate connection with HC2 HC2 = Net.FHttp("127.0.0.1", 11111) response ,status, errorCode = HC2:GET("/api/devices") devicesJSon = json.decode(response) local devices = {} local names = {} local rooms = {} function addName(name, roomname) if (type(names[name]) == "nil") then names[name] = true return name else return addName(name.."_"..roomname, roomname) end end function getRooms() response ,status, errorCode = HC2:GET("/api/rooms") roomsJSon = json.decode(response) rooms[0] = "inconnu" for k, v in ipairs(roomsJSon) do rooms[v.id] = v.name end end function rename(name, roomname) local name = name:upper():gsub("[éêèë]", "E"):gsub("EE", "E"):gsub("[ûüù]", "U"):gsub("UU", "U"):gsub("[àâä]", "A"):gsub("AA", "A"):gsub("[öô]", "O"):gsub("OO", "O"):gsub("[îï]", "I"):gsub("II", "I"):gsub("%W", "_") local roomname = roomname:upper():gsub("[éêèë]", "E"):gsub("EE", "E"):gsub("[ûüù]", "U"):gsub("UU", "U"):gsub("[àâä]", "A"):gsub("AA", "A"):gsub("[öô]", "O"):gsub("OO", "O"):gsub("[îï]", "I"):gsub("II", "I"):gsub("%W", "_") return addName(name, roomname) end getRooms() for k, v in pairs(devicesJSon) do local doit = (dead or not v.dead) if (doit) then for h, w in pairs(excludeType) do if (v.type == w) then doit = false end end if (doit) then for h, w in pairs(excludeID) do if (v.id == w) then doit = false end end end end if (doit) then table.insert(devices, v) end end table.sort(devices, function(a, return a.roomID<b.roomID end) local result = "<BR><BR>-- IDs générés le : " .. os.date("%d/%m/%y à%X") local room = -1 local lastinfo = ""; result = result .. "<BR><BR>local id = {" for k, v in ipairs(devices) do if (room ~= v.roomID) then room = v.roomID result = result .. "<BR>--"..rooms[v.roomID].."<BR>" end lastinfo = rename(v.name, rooms[v.roomID]) result = result .. lastinfo .. " = " .. v.id .. ", " end result = result .. "<BR>}" result = result .. "<BR>" result = result .. "<BR>-- usage :" result = result .. "<BR>-- fibaro:getValue(id[\""..lastinfo .."\"], \"value\")" result = result .. "<BR>-- GEA.add(id[\""..lastinfo .."\"], 30, \"\")" -- print(result) fibaro:debug(result) 4 Lien vers le commentaire Partager sur d’autres sites More sharing options...
pinou Posté(e) le 31 janvier 2015 Signaler Partager Posté(e) le 31 janvier 2015 Merci c'est nickel, ca marche au poil ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sakkhho Posté(e) le 2 février 2015 Signaler Partager Posté(e) le 2 février 2015 Ca marche très bien en 3.600 merci une question, j'ai ca [DEBUG] 21:12:50: -- IDs générés le : 02/02/15 à 21:12:50 local id = { --inconnu ZWAVE = 1, 50_1 = 51, 1 c'est la box je suppose et le 50_1=51 ? c'est le seul sous ce format. Lien vers le commentaire Partager sur d’autres sites More sharing options...
jojo Posté(e) le 2 février 2015 Signaler Partager Posté(e) le 2 février 2015 le nom qu'il met par défaut, pour tout nouveau device est l'ID, pour le master. Puyr les sous-devices IDmaster_1 (ID = ID master + 1), .... Regarde le device ID 50 et tu verras que le 51 a un nom 50_1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 10 février 2015 Signaler Partager Posté(e) le 10 février 2015 Salut Steven, J'ai un petit bug qui doit venir de ma facon de nommer mes ID de Virtual DEVICE Voila mon GEA en prod : local id = { WP_HALOGENE = 14, VD_SMSFREE = 16, VD_JOUR_CHOME = 21, VD_MODE_MAISON = 24 } Voila ce que me donne les generateur, : - il supprime mes "VD" qui sont avant le nom - me rajoute un E devant "JOUR_CHOME", ca sent l'encodage - manque un E à SMS_FREE local id = { --Salle à Manger WP_HALOGENE = 14, --Systeme-VD VACANCES_SCOLAIRES = 20, CLOCK_SYNC = 12, JOUR_CHEOME = 21, METEOALERTE = 18, SMS_FRE = 16, MODE_MAISON = 24, } Merci merci ;-) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Bugsissimo Posté(e) le 11 février 2015 Signaler Partager Posté(e) le 11 février 2015 Oui on en a tous. Par exemple Freebox est frebox pour beaucoup. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Steven Posté(e) le 11 février 2015 Auteur Signaler Partager Posté(e) le 11 février 2015 Aucune importance, l'important n'est pas le nom mais le fait que le nom soit toujours le même. Envoyé de mon portable grâce àmes petits doigts. Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 12 février 2015 Signaler Partager Posté(e) le 12 février 2015 oui c'est vrai, merci messieurs ;-) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sakkhho Posté(e) le 22 février 2015 Signaler Partager Posté(e) le 22 février 2015 je viens de passer en 4.033 et j'ai aussi cette erreur [ERROR] 09:38:27: line 12: attempt to index global 'api' (a nil value) alors que le script pour la 3.60 fonctionnait bien Lien vers le commentaire Partager sur d’autres sites More sharing options...
razowski Posté(e) le 22 février 2015 Signaler Partager Posté(e) le 22 février 2015 Ça doit être juste un message, derrière la lecture est bien réalisée. A vérifier mais chez moi j'ai ce message sur plusieurs scènes mais les valeurs sont bien lues et insérées dans mes variables globales. A vérifier chez toi Lien vers le commentaire Partager sur d’autres sites More sharing options...
Gwendal Posté(e) le 23 février 2015 Signaler Partager Posté(e) le 23 février 2015 Fonctionne super bien chez moi sous V4.033, Merci Steven Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sakkhho Posté(e) le 23 février 2015 Signaler Partager Posté(e) le 23 février 2015 C'est bon pour moi aussi - j'avais loupé une syntaxe. Lien vers le commentaire Partager sur d’autres sites More sharing options...
tcheri Posté(e) le 31 mars 2015 Signaler Partager Posté(e) le 31 mars 2015 Sur base du script de Steven, j'ai adapté pour pouvoir stocker dans une variable globale et pouvoir utiliser un JSON.DECODE au lieu de faire un copier/coller des valeurs dans chaque script ou VD. Donc, voici le script modifié à mettre dans une scène pour mettre la variable globale idTable avec tous les ID et NOMS de device (testé en 4.040) : --[[ %% properties %% globals --]] local hidden = false --- true pour exporter les devices cachés local dead = false -- true pour exporter les devices morts local excludeType = {"com.fibaro.zwaveDevice", "weather", "HC_user", "iOS_device", "com.fibaro.voipUser"} local excludeID = {} local devicesJSon = api.get("/devices") local devices = {} local names = {} local rooms = {} function addName(name, roomname) if (type(names[name]) == "nil") then names[name] = true return name else return addName(name.."_"..roomname, roomname) end end function getRooms() local roomsJSon = api.get("/rooms") rooms[0] = "inconnu" for k, v in ipairs(roomsJSon) do rooms[v.id] = v.name end end function rename(name, roomname) local name = name:upper():gsub("[éêèà«]", "E"):gsub("EE", "E"):gsub("[à»à¼ù]", "U"):gsub("UU", "U"):gsub("[à âà¤]", "A"):gsub("AA", "A"):gsub("[à¶ô]", "O"):gsub("OO", "O"):gsub("[îà¯]", "I"):gsub("II", "I"):gsub("%W", "_") local roomname = roomname:upper():gsub("[éêèà«]", "E"):gsub("EE", "E"):gsub("[à»à¼ù]", "U"):gsub("UU", "U"):gsub("[à âà¤]", "A"):gsub("AA", "A"):gsub("[à¶ô]", "O"):gsub("OO", "O"):gsub("[îà¯]", "I"):gsub("II", "I"):gsub("%W", "_") return addName(name, roomname) end getRooms() for k, v in pairs(devicesJSon) do local doit = (hidden or v.visible) and (dead or not v.dead) if (doit) then for h, w in pairs(excludeType) do if (v.type == w) then doit = false end end if (doit) then for h, w in pairs(excludeID) do if (v.id == w) then doit = false end end end end if (doit) then table.insert(devices, v) end end table.sort(devices, function(a, return a.roomID<b.roomID end) local result = "<BR><BR>-- IDs générés le : " .. os.date("%d/%m/%y à %X") local room = -1 local lastinfo = ""; result = result .. "<BR><BR>local id = {" resultVar = "{" for k, v in ipairs(devices) do if (room ~= v.roomID) then room = v.roomID result = result .. "<BR>--"..rooms[v.roomID].."<BR>" end lastinfo = rename(v.name, rooms[v.roomID]) result = result .. lastinfo .. " = " .. v.id .. ", " resultVar = resultVar .. '"'..lastinfo .. '":' .. v.id .. ", " end result = result .. "<BR>}" result = result .. "<BR>" result = result .. "<BR>-- usage :" result = result .. "<BR>-- fibaro:getValue(id[\""..lastinfo .."\"], \"value\")" result = result .. "<BR>-- GEA.add(id[\""..lastinfo .."\"], 30, \"\")" resultVar = resultVar .. '"FIN":999 }' print(result) fibaro:setGlobal("idTable", resultVar) Ensuite, il suffit de faire appel à la variable globale et faire un décode : local id=json.decode((fibaro:getGlobal('idTable'))); et faire appel à son device par : fibaro:getValue(id["NOM_DE_MON_DEVICE"], "value")) Lien vers le commentaire Partager sur d’autres sites More sharing options...
jojo Posté(e) le 31 mars 2015 Signaler Partager Posté(e) le 31 mars 2015 @tcheri, Bonne idée, mais ! qu'il existe une limite sur la longueur des variables globales, alors, si tu as beaucoup de devices, ton résultat risque d'être tronqué Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 31 mars 2015 Signaler Partager Posté(e) le 31 mars 2015 Sympa ;-) super idee mais demande @steven tout de même.. Pas de variable à créer dans le panneau ? Sinon peut-on toujours appelé ses devices en id["device"] ? Et que se passe-t-il sur la limitation de la longueur des VG ? ca passe tout de même ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Steven Posté(e) le 31 mars 2015 Auteur Signaler Partager Posté(e) le 31 mars 2015 C'est un sujet qui a déjà été discuter mainte fois sur ce forum, il n'y a pas de solution miracle pour stocker les ID de nos devices. En effet, dans une VG, c'est une idée mais il y a 2 problèmes à cela, et qui pour moi sont rédhibitoire : La limitation en nombre de caractère d'une VG Comment connaitre le nom id["NOM_DE_MON_DEVICE"] En effet, dès que les id sont mis au format json dans une VG, il n'est plus possible de "voir" leur nom (limitation du panneau des variables) ou alors on doit créer un scène qui nous les affiche mais dans ce cas, cela perd un peu de son utilité. Maintenant, a vous de voir selon vos habitudes, désires, ... perso, j'ai que 2 scénarios qui utilisent plus d'un ID donc j'ai pas vraiment d'expérience sur le sujet Lien vers le commentaire Partager sur d’autres sites More sharing options...
tcheri Posté(e) le 31 mars 2015 Signaler Partager Posté(e) le 31 mars 2015 Pour ma part, j'ai 3290 caractères et ça passe (nouveau en V4 ?). Pour le nom de device, j'utilise ton output comme pense bête, comme ça je retouve facilement mes noms de device @pepite : oui, il faut créer une variable globale dans le panneau Lien vers le commentaire Partager sur d’autres sites More sharing options...
Steven Posté(e) le 31 mars 2015 Auteur Signaler Partager Posté(e) le 31 mars 2015 J'ai stoppé mon test à 40'280 caractères --- je pense qu'il y a effectivement de la marge Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 31 mars 2015 Signaler Partager Posté(e) le 31 mars 2015 ca se tente alors, mais ce qui me bloque un peu c'est de ne pas connaitre le nom de l'ID ...ce qui oblige a repasser par le generateur d'IDs original Lien vers le commentaire Partager sur d’autres sites More sharing options...
jojo Posté(e) le 31 mars 2015 Signaler Partager Posté(e) le 31 mars 2015 vous alllez finir par me donner envie d'appuyer sur le bouton mise àjour ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
mprinfo Posté(e) le 31 mars 2015 Signaler Partager Posté(e) le 31 mars 2015 Allez JOJO vient nous rejoindre en V4 ça fera un de plus qui râle contre fibaro @steven c'est toujours aussi lent le test d'écriture dans des variables global ou il y a un mieux après quelques jours ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Steven Posté(e) le 31 mars 2015 Auteur Signaler Partager Posté(e) le 31 mars 2015 Non, toujours aussi lent ... plus de 2.5 heures pour écrire 40'280 caractère 1 par 1 dans la VG 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
jojo Posté(e) le 31 mars 2015 Signaler Partager Posté(e) le 31 mars 2015 est-ce qu'un admin peut supprimer mon post précédent où je disais que je voulais appuyer sur le bouton ? Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Steven Posté(e) le 31 mars 2015 Auteur Signaler Partager Posté(e) le 31 mars 2015 LOL Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés