Riniack Posté(e) le 6 septembre 2018 Signaler Posté(e) le 6 septembre 2018 (modifié) Hello, Cherchant à récupérer la température de consigne d'un panneau de chauffage de la HC2 dans un virtual device pour effectuer des actions j'ai une erreur de syntaxe. comme je débute en LUA, je butte après pas mal d'essais sans succès. Le code : HC2 = Net.FHttp("127.0.0.1",11111) panel = api.get("/panels/heating/94") If panel.properties.currentTemperature = 21 then fibaro:call(fibaro:getSelfId(), "pressButton", "3") fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Consigne.value", vartemp) ElseIf panel.properties.currentTemperature = 18,5 then fibaro:call(fibaro:getSelfId(), "pressButton", "2") fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Consigne.value", vartemp) End L'erreur : Line 4: '=' expected near 'panel' Une idée ? Modifié le 7 septembre 2018 par Riniack Resolu
jojo Posté(e) le 6 septembre 2018 Signaler Posté(e) le 6 septembre 2018 (modifié) je n'ai plus fait de lua depuis des années, et je sais qu'il y a eu de grosses modifications pour l'appel aux API. Mais tu as défini la variable HC2, puis tu ne l'utilises pas. Je pense que c'est là que se trouve le problème. Modifié le 6 septembre 2018 par jojo
Lazer Posté(e) le 6 septembre 2018 Signaler Posté(e) le 6 septembre 2018 Il aurait été pratique que tu dises à quoi correspond à ta ligne 4, car là on est obligé de deviner... Jojo a partiellement raison, le HC2 ne sert à rien.... mais ce n'est pas ton problème Tes tests if et elseif sont mal syntaxés, il faut mettre un double == pour comparer des valeurs. Le simple = implique une affectation de valeur. Il y a peut être d'autres bugs, mais celui là saute aux yeux.
Riniack Posté(e) le 7 septembre 2018 Auteur Signaler Posté(e) le 7 septembre 2018 (modifié) Merci à vous deux pour ces pistes. En effet des erreurs et j'en ai corrigé certaines. En fait je me bats pour récupérer des valeurs du panneau de chauffage et à priori l'API à pas mal changé. le fait d'utiliser les 2 premières lignes vient d'un code retrouvé sur le forum fibaro directement. Si je commente toute la boucle If, il n'y a pas d'erreur et je récupère bien la valeur de panel.properties.currentTemperature. L'erreur ne semble donc pas provenir de cette partie du code. Ceci dit, en la mettant en commentaire, je récupère quand même la valeur. Donc en résumé : local panel = api.get("/panels/heating/94") -- 94 etant le numéro du panneau de chauffage qui m'intéresse pour cette pièce fibaro:debug(panel.properties.currentTemperature) -- Retourne 21, donc la valeur du panneau If panel.properties.currentTemperature == 21 then --Test de la valeur de la température de consigne actuelle du panneau de chauffage n°94 fibaro:call(fibaro:getSelfId(), "pressButton", "3") -- Actionne le bouton 3 (Confort) du virtual device de chauffage (celui où s'exécute actuellement ce code dans le Main) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Consigne.value", panel.properties.currentTemperature) -- Mets à jour l'affichage de la température de consigne dans le virtual device ElseIf panel.properties.currentTemperature == 18,5 then fibaro:call(fibaro:getSelfId(), "pressButton", "2") fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Consigne.value", panel.properties.currentTemperature) End Je présume que la valeur retournée pour la propriété panel.properties.currentTemperature est de type integer, malgré tout j'ai également fait des tests avec des conversions. J'ai toujours la même erreur et je pense qu'il s'agit de syntaxe ou de conversion. J'ai tenté les " et les ' autour de la valeur à tester, le problème reste identique (eg : panel.properties.currentTemperature == '21' then) Modifié le 7 septembre 2018 par Riniack mise entre balise
pepite Posté(e) le 7 septembre 2018 Signaler Posté(e) le 7 septembre 2018 Bonjour, Mets ton code entre les balises <> ca simplifie la lecture stp. Cela se trouve dans le menu d'edition du message PAs tout suivi, mais essaie avec tonumber() if tonumber(panel.properties.currentTemperature) == 21 then
Riniack Posté(e) le 7 septembre 2018 Auteur Signaler Posté(e) le 7 septembre 2018 Merci Pepite pour l'astuce de balise. En fait plus j'avance sur le sujet plus je doute. Je nettoie le code et commente pour limiter les erreurs et j'en suis ici : local panel = api.get("/panels/heating/94") -- 94 etant le numéro du panneau de chauffage qui m'intéresse pour cette pièce local vTemp = tonumber(panel.properties.currentTemperature)-- Conversion de la valeur retournée en Nombre local idDevice = fibaro:getSelfId();-- Recupération de l'id du Virtual device fibaro:debug(vTemp); -- Retourne 21 fibaro:debug(idDevice);-- Retourne 115 If (vTemp > 21) then --fibaro:call(idDevice, "pressButton", "3") --fibaro:call(idDevice, "setProperty", "ui.Consigne.value", vTemp); --ElseIf vTemp == 18,5 then --fibaro:call(idDevice, "pressButton", "2") --fibaro:call(idDevice, "setProperty", "ui.Consigne.value", vTemp) End En gros même sans rien faire, le test If échoue sur une erreur : line 7: unexpected symbol near 'then' Ce que je comprends encore moins, c'est le cas suivant : je créé un bouton dans un nouveau virtual device avec le code suivant pour voir : If (1==1) Then fibaro:debug('Test'); End et j'ai aussi une erreur : line 2: '=' expected near 'fibaro' Soit je suis une grosse quiche, ce qui n'est pas à exclure, soit j'ai un souci avec les Virtual Devices.
Barelle Posté(e) le 7 septembre 2018 Signaler Posté(e) le 7 septembre 2018 Et en écrivant "if", "then", "else", "elseif"... Bref sans lettre capitale, cela donne quoi ?
Riniack Posté(e) le 7 septembre 2018 Auteur Signaler Posté(e) le 7 septembre 2018 Barelle, tu est un génie :-) C'était bien cela le problème
pepite Posté(e) le 7 septembre 2018 Signaler Posté(e) le 7 septembre 2018 Well done, je n'avais pas remarqué que tu avais mis des majuscules ;-)
Messages recommandés