Ttdom Posté(e) le 28 mai 2022 Signaler Posté(e) le 28 mai 2022 (modifié) Bonjour, Désolé de poser des questions de débutant. J'ai regardé pas mal de code mais je n'arrive pas à comprendre la logique. Ma question peut paraitre simple mais je n'arrive pas à afficher dans le label la température d'une PAC que j'ai récupéré en modbus TCP. je vois bien la valeur dans le debug. [DEBUG] [QUICKAPP758]: onDataReceived 22 Pour la récupérer voici le code que j'ai. function QuickApp:onInit() self:debug("onInit") local comand self.ip = self:getVariable("ip") self.port = tonumber(self:getVariable("port")) self.sock = net.TCPSocket() -- creation of a TCPSocket instance self:connect() end function QuickApp:connect() self.sock:connect(self.ip, self.port, { -- connection to the device with the specified IP and port success = function() -- the function will be triggered if the connection is correct self:debug("connected") --self:send("Hello!\n") self:waitForResponseFunction() -- launching a data readout "loop" end function QuickApp:waitForResponseFunction() self.sock:read({ -- reading a data package from the socket function(data) self:onDataReceived(data) -- handling of received data self:waitForResponseFunction() -- looping of data readout end end function QuickApp:onDataReceived(data) self:debug("onDataReceived", string.byte(data, 11)) end je voudrai rafraichir cette valeur dans le label température régulièrement. voici le code utilisé pour essayer de l'afficher. j'ai créé un bouton pour l'instant. function QuickApp:refreshButtonReleased() self:updateView("Temp3","Température:",(string.byte(data, 11))"°C" ) end mais rien ne s'affiche merci de votre aide Modifié le 28 mai 2022 par Ttdom
jjacques68 Posté(e) le 28 mai 2022 Signaler Posté(e) le 28 mai 2022 self:debug("onDataReceived", string.byte(data, 11)) que donne cette ligne ?
jjacques68 Posté(e) le 28 mai 2022 Signaler Posté(e) le 28 mai 2022 (modifié) Désolé j'ai mal lu, pour modifier le label d'un bouton c'est : en partant du principe que ton bouton a comme ID : "Temp3" self:updateView("Temp3", "text", "Température : "..(string.byte(data, 11)).." °C" ) --et non : self:updateView("Temp3","Température:",(string.byte(data, 11))"°C" ) Modifié le 28 mai 2022 par jjacques68
Ttdom Posté(e) le 29 mai 2022 Auteur Signaler Posté(e) le 29 mai 2022 Merci jjacques68, j'avais pas mis (text) dans la ligne de code. maintenant j'arrive à afficher correctement dans le label la valeur test. self: updateView("Temp3","text","Température: " .."test" .. "°C" ) par contre lorsque je veux afficher ma variable j ai un message d'erreur ( bad argument #1 to 'byte' (string expected, got table) )
jjacques68 Posté(e) le 29 mai 2022 Signaler Posté(e) le 29 mai 2022 la variable "data" est visiblement un tableau de valeur (got table). et il faut, pour l'affichage, une chaîne de caractère (string expected). donc il va falloir décortiquer "data". tu peux nous afficher son contenu avec : self:debug(json.encode(data)) ?
Ttdom Posté(e) le 29 mai 2022 Auteur Signaler Posté(e) le 29 mai 2022 (modifié) j'avance, j'ai testé le code avec une conversion: bbb = tostring(aaa); function QuickApp:onDataReceived(data) local aaa = string.byte(data, 11); self:debug("onDataReceived", string.byte(data, 11)); self:debug("aaa", aaa); bbb = tostring(aaa); self: updateView("Temp3","text","Tempppérature: " .. (bbb) .. "°C" ); end et maintenant j'affiche bien la température dans le label. maintenant, je voudrai récupérer cette variable bbb dans une autre fonction pour l'afficher dans le label température. voici le code de mon autre fonction: function QuickApp:refreshButtonReleased(bbb) comand = string.char(0x00,0x03,0x00,0x00,0x00,0x06,0x11,0x03,0x03,0xE9,0x00,0x01); self:send(comand); self: updateView("Temp3","text","Tempppérature: " .. (bbb) .. "°C" ) self:debug("bbb", bbb); le traitement de la data se fait dans la fonction{ function QuickApp:onDataReceived(data)} et la commande de demande de réponse modbus tcp et d'affichage dans le label se fait dans la fonction {function QuickApp:refreshButtonReleased(bbb) }. Modifié le 29 mai 2022 par Ttdom
jjacques68 Posté(e) le 29 mai 2022 Signaler Posté(e) le 29 mai 2022 Pas sûr d'avoir compris... Cette nouvelle fonction est un évènement d'un bouton ? Sinon appelles cette nouvelle fonction dans la première : self:refreshButtonReleased(bbb) où tu passes ta variable "bbb" en argument.
Ttdom Posté(e) le 29 mai 2022 Auteur Signaler Posté(e) le 29 mai 2022 j'ai essayé self:refreshButtonReleased(bbb) mais sans succès. j'ai utilisé une variable (TmpValue) que l'on peut déclarer dans Qapp, en utilisant self : setVariable("TmpValue", "1") voici mon code: function QuickApp:onDataReceived(data) Tmp = self:getVariable("TmpValue") aaa = string.byte(data, 11); self:debug("Réponse PAC Modbus TCP:", aaa); self : setVariable("Temp_Eau", "11") bbb = tostring(aaa); self:debug("bbb", bbb); self:debug("Tmp", Tmp); if Tmp == "1" then self: updateView("Temp3","text"," Tempppérature: " .. (bbb/10) .. "°C" ); end if Tmp == "2" then self: updateView("On_Off","text","On/Off: " .. (bbb)); end end et je utilise (Tmp) pour avoir plusieurs conditions avec les if. voici le code de mon bouton: function QuickApp:refreshButton5() self : setVariable("TmpValue", "1") end function QuickApp:refreshButtonReleased() self : setVariable("TmpValue", "2") end je ne sais pas si j'utilise la bonne méthode mais pour l'instant cela fonctionne. prochaine étape je dois remplacer les 2 boutons en fonction boucle pour pouvoir rafraichir les valeurs automatiquement. 1
Ttdom Posté(e) le 30 mai 2022 Auteur Signaler Posté(e) le 30 mai 2022 Merci de ton aide jjacques68 cela m'a fait avancer. Plus qu'une boucle et j'aurai fini. 1
Messages recommandés