Går det att uppdatera labels i en VD via APIet på något enkelt sätt?
Har letat i /docs/ men det enda som verkar vara i närheten är en POST till /api/devices/123/action/xyz men då är frågan vad heter action och hur ska body'n se ut?
VD: Uppdatera via APIet ?
Ja det går fint, se nedan. Du har lite kod du kan ta bort såklart där jag anpassar koden knappen skickar till min Classe förstärkare.
Till exempel så skickar jag labelUpdate("Label1","On"); om förstärkaren är på, då ändras knappens funktion till att skicka commando för standby.
Nu är detta text på en knapp men du kan göra detsamma på en vanlig label, tänk på att man måste ladda om VDn för att du ska se förändringen i webbläsaren.
Till exempel så skickar jag labelUpdate("Label1","On"); om förstärkaren är på, då ändras knappens funktion till att skicka commando för standby.
Nu är detta text på en knapp men du kan göra detsamma på en vanlig label, tänk på att man måste ladda om VDn för att du ska se förändringen i webbläsaren.
Code: Select all
local deviceID = fibaro:getSelfId();
function labelUpdate(labelID,labelText)
if (fibaro:getValue(deviceID, "ui."..labelID..".value") == labelText) then
return
end
fibaro:call(deviceID, "setProperty", "ui."..labelID..".value",labelText);
if labelText == "Off" then
buttonText = "Power On"
buttonMsg = "OPER"
elseif labelText == "On" then
buttonText = "Power Off"
buttonMsg = "STBY"
else
buttonText = "unavailable"
buttonMsg = ""
end
local HC2 = Net.FHttp("127.0.0.1", 11111)
payload = "/api/virtualDevices/" .. deviceID
labelResponse, labelStatus, labelErr = HC2:GET(payload)
if tonumber(labelErr) == 0 and
tonumber(labelStatus) == 200 and
labelResponse ~= nil and
labelResponse ~= "" then
labelJsonTable = json.decode(labelResponse)
--changing caption
labelJsonTable.properties.rows[1].elements[1].caption = buttonText
labelJsonTable.properties.rows[1].elements[1].msg = buttonMsg
--put changes
local labelResponse, labelStatus, labelErr = HC2:PUT(payload, json.encode(labelJsonTable))
end
end