jojo Posté(e) le 19 mai 2015 Signaler Posté(e) le 19 mai 2015 Bonsoir, Je cherche à modifier l'icône d'un device standard. (PAS d'un virtual device) J'y arrive en v3.600. Mais pas en v4.x. Hors je souhaite partager, et il faut qu'il soit utile à plus que Lazer, Did , Sebcbien et moi Je modifie la propriété deviceIcon. Mais comment (en v4.x) enregistrer le json modifié ? Voici le code ---------------------------------- -- User Settings ---------------------------------- local DeviceID = 340 local IconeID = 1027 ---------------------------------- -- DO not change bellow this line ---------------------------------- HC2 = Net.FHttp("127.0.0.1",11111) -- détermination de la version du firmware 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) -- modification de l'icone if version == "3.x" then -- récupération du nom du device payload = "/api/devices?id=" ..DeviceID response, status, errorCode = HC2:GET(payload) jsonTable = json.decode(response) NameDev = jsonTable.name IconeDev = IconeID -- préparation du nouveau json NouvelleIcone = ('{"id":' ..DeviceID.. ',"name":"' ..NameDev.. '","properties":{"deviceIcon":"' ..IconeDev.. '"}}') -- écriture du nouveau json HC2:PUT(payload, NouvelleIcone) else -- récupération du json du device payload = "/api/devices/" ..DeviceID response, status, errorCode = HC2:GET(payload) jsonTable = json.decode(response) fibaro:debug(jsonTable.id.. " - " ..jsonTable.name.. " - " ..jsonTable.properties.deviceIcon) jsonTable.properties.deviceIcon = tostring(IconeID) fibaro:debug(jsonTable.properties.deviceIcon) -- préparation du nouveau json NouvelleIcone = json.encode(jsonTable) -- écriture du nouveau json HC2:PUT(payload, NouvelleIcone) end A gagner : son nom cité dans le tuto que je ferai pour partager
Lazer Posté(e) le 19 mai 2015 Signaler Posté(e) le 19 mai 2015 Tu oublies Fredric aussi Comme je te disais en MP, je viens de voir que le NouvelleIcone = json.encode(jsonTable) classe tous les champs par ordre alphabétique. Je ne sais pas si c'est ça le pb, mais le résultat du PUT est un code HTTP 500, donc pas bon
PITP2 Posté(e) le 20 mai 2015 Signaler Posté(e) le 20 mai 2015 J'ai essayé depuis l'API de faire un GET , puis de copier coller le résultat dans le PUT de l'api bilan des courses je peux faire des modifs du nom du device par exemple mais je ne peux pas modifier les properties même chose que Lazer HTTP 500 Why ????
jojo Posté(e) le 20 mai 2015 Auteur Signaler Posté(e) le 20 mai 2015 merci àtous les deux de vos réponses. J'ai essayé le code ci-dessous, qui me donne un debug sympa (Status = 200 après un PUT) (si PORT , Status = 501) mais je ne vois pas mon icone qui change (malheureusement je n'ai pas de module sur 220V en test). Celàfonctionnerait chez vous ? ---------------------------------- -- User Settings ---------------------------------- local DeviceID = 126 local IconeID = 1002 ---------------------------------- -- DO not change bellow this line ---------------------------------- HC2 = Net.FHttp("127.0.0.1",11111) -- détermination de la version du firmware 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) -- modification de l'icone if version == "3.x" then -- récupération du nom du device payload = "/api/devices?id=" ..DeviceID response, status, errorCode = HC2:GET(payload) jsonTable = json.decode(response) NameDev = jsonTable.name IconeDev = IconeID -- préparation du nouveau json NouvelleIcone = ('{"id":' ..DeviceID.. ',"name":"' ..NameDev.. '","properties":{"deviceIcon":"' ..IconeDev.. '"}}') -- écriture du nouveau json HC2:PUT(payload, NouvelleIcone) else -- récupération du json du device payload = "/api/devices/" ..DeviceID response, status, errorCode = HC2:GET(payload) jsonTable = json.decode(response) fibaro:debug(jsonTable.id.. " - " ..jsonTable.name.. " - " ..jsonTable.properties.deviceIcon) jsonTable.properties.deviceIcon = tostring(IconeID) fibaro:debug(jsonTable.properties.deviceIcon) -- préparation du nouveau json NameDev = jsonTable.name NouvelleIcone = ('{"id":' ..DeviceID.. ',"name":"' ..NameDev.. '","properties":{"deviceIcon":"' ..tostring(IconeDev).. '"}}') -- écriture du nouveau json response, status, errorCode = HC2:PUT(payload, NouvelleIcone) fibaro:debug("Status = " ..status.. " - Error = " ..errorCode) end [DEBUG] 12:46:08: version = 4.x [DEBUG] 12:46:08: 126 - Nest Temperature - 30 [DEBUG] 12:46:08: 1002 [DEBUG] 12:46:08: Status = 200 - Error = 0
PITP2 Posté(e) le 20 mai 2015 Signaler Posté(e) le 20 mai 2015 Je viens d'essayer ton nouveau code mais pas de changement d'icone
jojo Posté(e) le 20 mai 2015 Auteur Signaler Posté(e) le 20 mai 2015 @PITP2 : Merci et zut ! On dirait que c'est un bug. Je propose d'attendre le prochain update pour retester, j'ai épuisé toutes mes idées
mprinfo Posté(e) le 20 mai 2015 Signaler Posté(e) le 20 mai 2015 si cela peut aider voici le schéma de l'api Icons { device (array[Device], optional), room (array[Room], optional), scene (array[Scene], optional) } Device { id (integer, optional), deviceType (string, optional), iconSetName (string, optional) } Room { id (integer, optional), iconName (string, optional) } Scene { id (integer, optional), iconName (string, optional) } Model Schema { "device": [ { "id": 0, "deviceType": "", "iconSetName": "" } ], "room": [ { "id": 0, "iconName": "" } ], "scene": [ { "id": 0, "iconName": "" } ] }
mprinfo Posté(e) le 20 mai 2015 Signaler Posté(e) le 20 mai 2015 je viens de regarder a priori au niveau des icones on ne peut faire que des GET pas de PUT
PITP2 Posté(e) le 20 mai 2015 Signaler Posté(e) le 20 mai 2015 J'ai posé la question sur le fofo officiel, wait and see
jojo Posté(e) le 20 mai 2015 Auteur Signaler Posté(e) le 20 mai 2015 merci @mprinfo d'avoir également regardé. La liste des gens à citer augmente Ceci dit, je peu faire des PUT en 3.600, alors pourquoi pas en 4.x ? Par ailleurs, je ne comprends pas bien ce que tu m'explique avec le schéma des API. Je te mets ici le json d'un device en 4.x { id: 107, name: "104.2", roomID: 48, type: "com.fibaro.temperatureSensor", baseType: "com.fibaro.multilevelSensor", enabled: true, visible: true, isPlugin: false, parentId: 104, remoteGatewayId: 0, interfaces: [ "battery", "zwave", "zwaveWakeup" ], properties: { parameters: [], associationSet: [], associationView: [], zwaveCompany: "Fibargroup", zwaveInfo: "3,3,67", zwaveVersion: "25.25", wakeUpTime: 4000, pollingTimeSec: 0, batteryLevel: "78", batteryLowNotification: "true", configured: "true", dead: "false", defInterval: "0", deviceControlType: "0", deviceIcon: "30", emailNotificationID: "0", emailNotificationType: "0", endPointId: "2", interval: "0", liliOffCommand: "", liliOnCommand: "", log: "", logTemp: "", manufacturer: "", markAsDead: "true", maxInterval: "0", minInterval: "0", model: "", merci @PITP2 pour ton post
PITP2 Posté(e) le 21 mai 2015 Signaler Posté(e) le 21 mai 2015 Donc après avoir conversé avec le support qui m'a indiqué que ce n'était pas un bug et qui m'a donné un code très très simple, j'ai joué aux 7 différences ... voici le code qui marche (ce n'est que la partie pour la V4) -- récupération du json du device payload = "/api/devices/" ..DeviceID response, status, errorCode = HC2:GET(payload) jsonTable = json.decode(response) fibaro:debug(jsonTable.id.. " - " ..jsonTable.name.. " - " ..jsonTable.properties.deviceIcon) jsonTable.properties.deviceIcon = tostring(IconeID) fibaro:debug(jsonTable.properties.deviceIcon) -- préparation du nouveau json NameDev = jsonTable.name NouvelleIcone = ('{"id":' ..DeviceID.. ',"name":"' ..NameDev.. '","properties":{"deviceIcon":'..IconeID..'}}') -- écriture du nouveau json response, status, errorCode = HC2:PUT(payload, NouvelleIcone) fibaro:debug("Status = " ..status.. " - Error = " ..errorCode) Explication Dans cette partie (cf ton code original) il y avait des "" en trop mais aussi ce qui a compliqué la recherche c'est ton utilisation de la varibale IconeDev qui n'est pas déclarée dans le "Else" et il n'apprécie pas. De même c'est un petit peu capilotracté de passer de IconeId à IconeDev NouvelleIcone = ('{"id":' ..DeviceID.. ',"name":"' ..NameDev.. '","properties":{"deviceIcon":"' ..tostring(IconeDev).. '"}}') J'ai fait une version plus légère enfin à mon sens qui fonctionne bien aussi. Il ne modifie que la partie icone vu que c'est uniquement cela que l'on désire modifier. payload = "/api/devices/" ..DeviceID -- préparation du nouveau json NouvelleIcone = '{"properties":{"deviceIcon":'..IconeID..'"}}' -- écriture du nouveau json HC2:PUT(payload, NouvelleIcone) Voila j'ai gagné ??? 3
mprinfo Posté(e) le 21 mai 2015 Signaler Posté(e) le 21 mai 2015 il est trop fort pitp2 il vient de gagner un pack d'eau gazeuse en provenance de beckerich 1
jojo Posté(e) le 21 mai 2015 Auteur Signaler Posté(e) le 21 mai 2015 @PITP2, j'adore "capilotracté" merci de m'avoir ainsi aidé, j'ai vraiment honte de cette faute de typo (IdconeID - InconeDev et les ") Merci pour le code simplifié. Génial qu'il fonctionne pour v4.x, mais (pour ceux qui aiment faire avancer la science), ce n'est pas suffisant en 3.600 (il veut l'id et le name en plus) Maintenant je suis obligé de faire un tuto pour diffuser ce VD... Et tu as gagné HAUT la main le concours. 1
razowski Posté(e) le 15 mars 2016 Signaler Posté(e) le 15 mars 2016 Hello, Petite question, si je désire mettre à jour un paramètre de type boolean d'un device, est-ce que l'un d'entre vous sait m'indiquer comment procéder ? Je sèche sur la ligne suivante : nouvelleValeur = true; NouveauParametre = ('{"id":' ..DeviceID.. ',"name":"' ..NameDev.. '","properties":{"alarmExclude":'..nouvelleValeur..'}}') Merci
mprinfo Posté(e) le 15 mars 2016 Signaler Posté(e) le 15 mars 2016 Tu peux déjàessayé via ip.docs Cela te permettra d'avoir un résultat visuel immédiat Envoyé de mon SM-G900F en utilisant Tapatalk
razowski Posté(e) le 15 mars 2016 Signaler Posté(e) le 15 mars 2016 J'ai pas du capter ta réponse ou alors oui j'ai regardé mais c'est plus le formatage de la requête où je vois pas quoi mettre. Pour tout autre type de paramètre string je m'en sors mais pour envoyer un booléen je sèche.
jojo Posté(e) le 15 mars 2016 Auteur Signaler Posté(e) le 15 mars 2016 tout f(zbord, tu dois terminer par un PUT : function HeatPanel(id,HandTmp) jsonpanel = HC2:GET(GETheating ..id) jsontable = json.decode(jsonpanel) handTimestamp = jsontable.properties.handTimestamp handTemperature = jsontable.properties.handTemperature name = jsontable.name NouveauPanel = ('{"id":' ..id.. ',"name":"'..name.. '","properties":{"handTemperature":' ..handTemperature.. ',"handTimestamp": ' ..handTimestamp.. ',"vacationTemperature":' ..HandTmp.. '}}') HC2:PUT(GETheating ..id, NouveauPanel) end ensuite j'essayerais ceci : nouvelleValeur = 1 NouveauParametre = ('{"id":' ..DeviceID.. ',"name":"' ..NameDev.. '","properties":{"alarmExclude":"'..nouvelleValeur..'"}}') ou nouvelleValeur = "1" NouveauParametre = ('{"id":' ..DeviceID.. ',"name":"' ..NameDev.. '","properties":{"alarmExclude":"'..nouvelleValeur..'"}}') sans garantie
971jmd Posté(e) le 14 mars 2017 Signaler Posté(e) le 14 mars 2017 (modifié) salut a tous je revient sur une action que je n'arrive pas a faire fonctionnée je cherche a passée : localProtectionState de 0 à 2 dans par une VD pour info c'est la propriété d'un FGRM 222 localProtectionState = 2 permet de désactiver les bouton poussoir des volets roulant deviceID=542 local json = '{"id":'..deviceID..',"properties":{"localProtectionState": "2"}}'; -- valeurs à changer dans parametres local HC2 = Net.FHttp("127.0.0.1", 11111) HC2:setBasicAuthentication("xxxx@gmail.com", "xxxxxx") local response, status, errorCode = HC2:PUT("/api/devices/"..deviceID, json) if tonumber(status) == 200 then fibaro:debug("Security locked") else fibaro:debug("err ID: "..deviceID.. " status: "..status) end Modifié le 14 mars 2017 par 971jmd
pepite Posté(e) le 14 mars 2017 Signaler Posté(e) le 14 mars 2017 (modifié) Bonsoir @971jmd, Essaie cela local deviceID=542 local json = api.get("/devices/" ..deviceID) json.properties.localProtectionState = 2 api.put("/devices/" ..deviceID, json) Modifié le 14 mars 2017 par pepite
971jmd Posté(e) le 14 mars 2017 Signaler Posté(e) le 14 mars 2017 Merci, je vais essayer ça ce soir, mais les femmes et les enfants d'abordEnvoyé de mon iPhone en utilisant Tapatalk
971jmd Posté(e) le 15 mars 2017 Signaler Posté(e) le 15 mars 2017 (modifié) salut a tous j'ai vraiment besoins d'aide sur ce truc j'ai bien avancée, mai le probleme est le suivant: quand je lance la scène suivant, le paramètre (localProtectionState) passe bien a 2, donc la mise OK mai il manque une chose, pour validée la mise a jours, il faut que je me rendre dans les paramètre avancée du module et cliqué sur la disquette donc il manque quel que chose dans ce code pour vraiment metre a jour le module, comme pour enregistrée le nouveau JSON local id = 547 -- ID du FGRM à modifier function Update() local httpClient = net.HTTPClient(); httpClient:request('http://127.0.0.1:11111/api/devices/' .. id, { success = function(response) if tonumber(response.status) == 200 or tonumber(response.status) == 202 then print("Updated at " .. os.date()); else print("Error " .. response.status) end end, error = function(err) print('error = ' .. err) end, options = { method = 'PUT', headers = { ["content-type"] = 'application/x-www-form-urlencoded;' }, data = "{\"id\":" .. id .. ",\"properties\":{\"localProtectionState\":2\"}}" } }); end Update() Modifié le 15 mars 2017 par 971jmd
pepite Posté(e) le 15 mars 2017 Signaler Posté(e) le 15 mars 2017 Salut, Le code que je t'ai proposé fait la même chose en 4 lignes ;-) 1
jojo Posté(e) le 15 mars 2017 Auteur Signaler Posté(e) le 15 mars 2017 oui, mais tu connais @971jmd, il aime bien ce qui est compliqué 2
971jmd Posté(e) le 15 mars 2017 Signaler Posté(e) le 15 mars 2017 (modifié) Il y a 19 heures, pepite a dit : Salut, Le code que je t'ai proposé fait la même chose en 4 lignes ;-) oui le ton code fonctionne bien mai j'ai toujours le meme probleme le code suivant active la protection local deviceID=547 local json = api.get("/devices/" ..deviceID) json.properties.localProtectionState = 2 api.put("/devices/" ..deviceID, json) local deviceID=547 local json = api.get("/devices/" ..deviceID) json.properties.localProtectionState = 0 api.put("/devices/" ..deviceID, json) Pour validité complètement la mise a jour, je suis obligée de d'aller dans les paramètre du FGRM et cliquer sur la disquette Modifié le 16 mars 2017 par 971jmd
971jmd Posté(e) le 29 mars 2017 Signaler Posté(e) le 29 mars 2017 @pepite salut j'ai vraiment besoin d'aide sur ça :
Messages recommandés