VD: Uppdatera via APIet ?

Post Reply
riro
Medlem
Posts: 52
Joined: 27 Mar 2017, 11:02
7
Location: Falun
Contact:

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?
Pål
Ny medlem
Posts: 6
Joined: 15 Mar 2017, 01:21
7

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.

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
Post Reply