Aller au contenu
Ttdom

je voudrai mettre dans un label la température récupéré d'une Pac en MODBUS

Recommended Posts

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é par Ttdom

Partager ce message


Lien à poster
Partager sur d’autres sites
self:debug("onDataReceived", string.byte(data, 11))

que donne cette ligne ?

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par jjacques68

Partager ce message


Lien à poster
Partager sur d’autres sites

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) )

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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)) ?

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par Ttdom

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

 

 

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci de ton aide jjacques68 cela m'a fait avancer.

Plus qu'une boucle et j'aurai fini.

 

 

  • Thanks 1

Partager ce message


Lien à poster
Partager sur d’autres sites

×