Bon je jette un œil à l'API là, et c'est de UDP, avec du socket, moi qui est plus vu de LUA depuis des lustres...
J'ai tenté ça :
local ip = "192.168.0.165" -- Remplacez par l'IP de votre batterie
local port = 30000
--local payload = '{"method": "ES.GetStatus", "params": {}, "id": 1}'
local payload = '{"id": 1,"method": "Bat.GetStatus","params": {"id": 0}}'
local socket = Net.FUdpSocket()
socket:setBroadcast(true)
local bytes, errorCode =socket:write(payload, ip,port)
if errorCode == 0 then
fibaro:debug("Réponse reçue : " .. errorCode)
--local data = pcall(json.decode, response)
-- Exemple pour extraire le SOC (état de charge)
--local soc = data.soc
fibaro:debug("Batterie : " .. bytes .. "%")
-- Mettre à jour un label du Virtual Device
--fibaro:call(fibaro:getSelfId(), "setProperty", "ui.LabelSOC.value", soc .. "%")
else
fibaro:debug("Erreur UDP : " .. errorCode)
end
socket:setReadTimeout(1000);
local data, readError = socket:read()
fibaro:debug("Lecture UDP encours : ")
if data and data ~= "" then
fibaro:debug("Réponse reçue : " .. data)
else
fibaro:debug("Aucune réponse reçue (Timeout ou vide)")
end
socket = nil
Alors cela ne plante pas, par contre je n'ai aucun retour dans data. Et bytes vaut 55, donc c'est 55 octets non ? Puis le read pour les lire ?