jojo Posté(e) le 7 août 2023 Signaler Posté(e) le 7 août 2023 Bonjour, Tout d'abord 100000 excuses de ne plus pouvoir offrir une aide similaire au passé ... J'ai été obligé de passer en mode "profiteur" Je cher en LUA à modifier l'icone d'une pièce (j'ai trouvé le nom de l'icône) Voici le json de la pièce : // 20230807150204 // http://<ip box>/api/rooms/239 { "id": 239, "name": "Chaufferie", "sectionID": 224, "isDefault": false, "visible": true, "icon": "User1005", "defaultSensors": { "temperature": 528, "humidity": 0, "light": 0 }, "meters": { "energy": 0 }, "defaultThermostat": 889, "created": 1691283771, "modified": 1691283771, "sortOrder": 15, "category": "other" } je souhaite changer le champ "icon" de "User1005" à "User1002" (par exemple). Pour mettre à jour la propriété d'un device, on fait ceci hub.call(<idDevice>, "updateProperty", "<propertyName>", <propertyValue>) mais ici, ce n'est pas une propriété. MERCI de votre aide.
henri-allauch Posté(e) le 7 août 2023 Signaler Posté(e) le 7 août 2023 dans un QA Essaye : Pour Icone User1002.png self:updateProperty("deviceIcon", 1002) 1
jojo Posté(e) le 7 août 2023 Auteur Signaler Posté(e) le 7 août 2023 Merci pour ta réponse rapide, MAIS, ce n'est pas ce que je cherche à faire (ma question n'était donc pas suffisamment claire). Ici tu mes à jour la propriété du device en cours (self:) ce que je cherche à faire, c'est mettre à jour un champ du json (dune pièce, section, ...; donc pas du device actuel (= pas self:)), et en plus ce champ n'est pas sous "properties".
henri-allauch Posté(e) le 7 août 2023 Signaler Posté(e) le 7 août 2023 Je n'avais pas compris ce que tu recherche Dans ce cas je ne sais pas, mais je ne doute pas que la réponse arrivera vite
Lazer Posté(e) le 7 août 2023 Signaler Posté(e) le 7 août 2023 Avec les outils de développeurs de ton butineur sur la toile d'araignée mondiale (en clair : touche F12), tu regardes la requête effectuée lors tu modifies l'icône via le GUI. A mon avis ça va être un requête de type POST sur /api/rooms Il faut juste utiliser les bons paramètres, comme le fait le GUI. 1
jojo Posté(e) le 7 août 2023 Auteur Signaler Posté(e) le 7 août 2023 MERCI, mais c'est lourd tout ça ... j'aurais espéré qu'il t avait une instruction sympa (que je ne connaissais pas) qui le faisait sympa style hub.call (<id>,"updateJson",<JsonField>,<JsonFieldValue>) J'ai pensé qu'avec un json.decode/encode on devrait y arriver ?
jojo Posté(e) le 7 août 2023 Auteur Signaler Posté(e) le 7 août 2023 j'ai fait F12, mais il y a 3 tonnes d'infos, où dois-jerader ? Quel onglet ?
jojo Posté(e) le 7 août 2023 Auteur Signaler Posté(e) le 7 août 2023 je croyais avoir trouvé qqch avec F12: Dans l'onglet Network, sur la requete qui correspond à la sélection de mon icône, j'ai fait Copy Request Headers, et j'ai ceci GET /assets/userIcons/rooms/User1002.png?v=1691429284495 HTTP/1.1 Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8 Accept-Encoding: gzip, deflate Accept-Language: fr-FR,fr Connection: keep-alive Host: 192.168.x.y Referer: http://192.168.x.y/app/settings/rooms Sec-GPC: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 mais ça ne correspond pas à ce que tu m'as dit, et ce n'est pas exploitable
Lazer Posté(e) le 7 août 2023 Signaler Posté(e) le 7 août 2023 Le GET c'est juste afficher l’icône. Ensuite quand tu modifies l’icône de ta pièce et que tu sauvegardes, tu dois voir une requête POST je pense, avec des datas.
jang Posté(e) le 7 août 2023 Signaler Posté(e) le 7 août 2023 api.put("/rooms/239",{icon='User1002'}) 5
Dragoniacs Posté(e) le 7 août 2023 Signaler Posté(e) le 7 août 2023 Et par curiosité, pourquoi cherches tu à modifier une icône de pièce via une requête http ?Envoyé de mon M2012K11AG en utilisant Tapatalk
jojo Posté(e) le 8 août 2023 Auteur Signaler Posté(e) le 8 août 2023 dans l'application Web, je n'enai aucune utilité, par contre dans l'appli mobile : exple : j'ai une pièce chaufferie, et j'ai 4 modes de chauffage : Confort, SdB, ECS et vacances. L'idée est que l'icône de la pièce chaufferie corresponde au mode de chauffage choisi. Donc, je gagne un clic juste en regardant l'icône de la pièce. Je souhaite faire la même chose pour ma pièce piscine : une icône avec volet fermé, une autre avec volet ouvert. ok; c'est loins d'être indispensable, mais ça permet de se creuse les méninges ... 3
jojo Posté(e) le 8 août 2023 Auteur Signaler Posté(e) le 8 août 2023 Il y a 18 heures, jang a dit : api.put("/rooms/239",{icon='User1002'}) So we could use this method to update any Json field of anything ("/devices/<idDevice>") ?
jojo Posté(e) le 8 août 2023 Auteur Signaler Posté(e) le 8 août 2023 et ça fonctionne super ! (évidemment) et pour rendre mon code plus fluide, j'ai créé une table avec le nom des icônes IconesRoom = { Confort = "User1002", SdB = "User1003", ECS = "User1004", Off = "User1005" } mais je ne vois pas comment l'utiliser (je veux éviter des if elseif)
mprinfo Posté(e) le 8 août 2023 Signaler Posté(e) le 8 août 2023 C'est simple vu que tu connais le nom de l'index IconesRoom["SdB"] Envoyé de mon BLA-L29 en utilisant Tapatalk
jojo Posté(e) le 9 août 2023 Auteur Signaler Posté(e) le 9 août 2023 c'est ce que j'ai fait pour l'icône de mon QA -- ICONES Icones = { Confort = 1007, SdB = 1010, ECS = 1008, Off = 1009 } ... function QuickApp:UI_Maison_Mode(Chauf_Maison_Mode) -- changer l'icone du QA self:updateProperty("deviceIcon", Icones[Chauf_Maison_Mode]) ... end mais ici c'est du texte qu'il faudrait concaténer, dans un argument qui n'est pas en format texte api.put("/rooms/239",{icon="User1005"}) Une solution pourrait être de modifier mon tableau comme ceci : IconesRoom = { Confort = "{icon='User1002'}", SdB = "{icon='User1003'}", ECS = "{icon='User1004'}", Off = "{icon='User1005'}" } Mais je n'aime pas du tout, car mon tableau contiendrait plusieurs fois la même information. Je préférerais de loin un tableau comme ceci IconesRoom = { Confort = "1002", SdB = "1003", ECS = "1004", Off = "1005" } et que mon code génère tout ce qui manque
Lazer Posté(e) le 9 août 2023 Signaler Posté(e) le 9 août 2023 -- ICONES Icones = { Confort = 1007, SdB = 1010, ECS = 1008, Off = 1009 } function QuickApp:UI_Maison_Mode(Chauf_Maison_Mode) -- changer l icône de la pièce api.put("/rooms/239", {icon = "User"..tostring(Icones[Chauf_Maison_Mode])}) end Il faut concaténer "User" avec le contenu de ta table. Pour info le tostring() n'est pas indispensable dans ce cas présent car LUA réalise la conversion de type number => string automatiquement. 2
jojo Posté(e) le 9 août 2023 Auteur Signaler Posté(e) le 9 août 2023 si simple que ça ... je vais du coup créer d'autres tables pour endre mes codes "plus jolis". => Merci
jojo Posté(e) le 9 août 2023 Auteur Signaler Posté(e) le 9 août 2023 et comme je n'aime pas ce qui est écrit en dur dans les code, voici comment je détermine l'id de la pièce qui contient le QA : local idPiece = hub.getRoomID(plugin.mainDeviceId) api.put("/rooms/"..idPiece, {icon = "User"..UI[Chauf_Maison_Mode][2] }) 2
jojo Posté(e) le 17 mars Auteur Signaler Posté(e) le 17 mars Le 07/08/2023 à 20:16, jang a dit : api.put("/rooms/239",{icon='User1002'}) hello @jang, you "saved my life" with this instruction. Now I would like to use it to update a dedicated property of a device. In the json for rooms, icon is on "the root" of the json. The property "userDescription" in the device json is under "properties" so what is the correct syntax ? Something like : api.put("/devices/239",{properties\userDescription='MyDescription'}) (I want to use this syntax to update > 500 properties) thank you
jojo Posté(e) le 17 mars Auteur Signaler Posté(e) le 17 mars I said to myself :"Let's keep it simple and standard". So I tried this hub.call(20, "updateProperty", "userDescription", "FWPP1") And it does not work. I do not understand why ...
jang Posté(e) le 17 mars Signaler Posté(e) le 17 mars Il y a 5 heures, jojo a dit : I said to myself: "Let's keep it simple and standard". So I tried this And it doesn't work. I don't understand why... This only works if the device is a QA. QuickApp's have 'updateProperty' defined as an API. I would recommend api.post("/plugins/updateProperty", { deviceId = 20, propertyName = 'userDescription', value = 'FWPP1' }) 2
jojo Posté(e) le 18 mars Auteur Signaler Posté(e) le 18 mars thank you ! it does (of course) works ! This is EXACTLY what I needed.
Messages recommandés