Fibaro Heating Scene

HC2 = Net.FHttp("127.0.0.1",11111); 

-- Recovering info
-- 1 is the heating zone
response ,status, errorCode = HC2:GET("/api/panels/heating/1");
jsonTable = json.decode(response);

-- Setting info
jsonTable.properties.vacationTemperature = 21; 

-- Saving info
json = json.encode(jsonTable); 
HC2:PUT("/api/panels/heating/1", json);
fibaro:log("Fixed 21 degrees");

Hallo wie kann mann den teil des Codes für die Scene richtig schreiben weil so funktioniert er nur im VD
HC2 = Net.FHttp("127.0.0.1",11111);

--[[
%% properties

%% globals
--]]
local http = net.HTTPClient()  
  http:request('https://www.google.pl', {
      success = function(resp)
        if resp.status == 200 then
          fibaro:debug(resp.status)
          
        else
          fibaro:debug(resp.status)
       
        end
      end
    })

Vollständiges Beispiel findest du auf der ersten Seite dieses Threads :slight_smile:

Hallo
wie kann ich in einer Szene eine Heating zone die “vacationTemperature” auf 21° setzen und eine andere Heating zone " vacationTemperature" auf 0.

Ich möchte ein Schichtarbeit Szene machen basteln eher fliken da ich mich nicht ausreichend auskenne mit programmieren.

Ich habe 2 Heating zohnen eine FrühschichtWZ id 126 und eine SpähtschichtWZ id 127 für das gleiche zimmer, mit einem Virtual schalter möchte ich die Frühschicht vacationTemperature 5° setzen und somit in den Urlaub versetzen und die Spähtschicht auf vacationTemperature 0° setzen und somit in den Heitzmodues versetzen.

Hoffe das ich mich einiger massen verständlich machen konnte.

Hallo, ich wollte schlau sein und habe alle Zonen in den Virtual Device-Code gebastelt um diese in Abwesenheit alle auf 16 Grad zu schalten.
nämlich so:

HC2 = Net.FHttp("127.0.0.1",11111); 
 
-- Recovering info
-- 1 is the heating zone
response ,status, errorCode = HC2:GET("/api/panels/heating/5");
response ,status, errorCode = HC2:GET("/api/panels/heating/6");
response ,status, errorCode = HC2:GET("/api/panels/heating/9");
response ,status, errorCode = HC2:GET("/api/panels/heating/10");
response ,status, errorCode = HC2:GET("/api/panels/heating/11");
jsonTable = json.decode(response);
 
-- Setting info
jsonTable.properties.vacationTemperature = 16; 
 
-- Saving info
json = json.encode(jsonTable); 
HC2:PUT("/api/panels/heating/5", json);
HC2:PUT("/api/panels/heating/6", json);
HC2:PUT("/api/panels/heating/9", json);
HC2:PUT("/api/panels/heating/10", json);
HC2:PUT("/api/panels/heating/11", json);
fibaro:log("Fixed 16 degrees");

Dabei hat es mir jetzt alle Zonen so verhauen, das ich alle neu anlegen durfte.
Ich probiere weiter. Wenn einer Plan hat wie ich das richtig mache bitte gerne antworten.
Gruß Carsten

So, ich habe mir jetzt mangels Wissen ein Monster-VD gebastelt wo hinter jedem Button ein Einzelcode steht. Ich habe 5 Zonen und wollte 4 Grad, 16 Grad und Heizplan wieder an.
Macht 5x3 Buttons.
Mit dem eigentlichen Haupt VD drücke ich dann die Buttons des Monster-VD auf Ex durch.
Vielleicht nicht das eleganteste, aber es funktioniert.
Ich kann durch die 4 Grad den Heizplan im Sommer auf “Dauerurlaub” schicken.

Hallo
So, nach einem zerschossenen System und nach 3 Tage wieder aufbau Habe ich das hier erreicht.
Eine Erkenntnis wie man mehrere Zonen bearbeitet.

--Beim auf machen einer Tür wird das Heitzprogram auf einen bestimte temperatur gesetzt.
--[[
%% properties
%% globals
--]]

fibaro:getValue(79, "logTemp")--Temperatur Sensor WZ
local schedule = {

  id = 86, --Change to ID of your heating schedule 86 Frühschicht 85 Spätschicht
  idleTemp = 5 --Temperature that will be applied when Frühschicht

}
local schedule2 = {

  id = 85, --Change to ID of your heating schedule 86 Frühschicht 85 Spätschicht
  idleTemp2 = 21 --Temperature that will be applied when Spätschicht

}

--SchichtArbeit = SchichtArbeit --ID of Door/Window Sensor, remember to adjust triggering device

--Do not modify code below this line

local function getMethod(requestUrl, successCallback, errorCallback)

  local http = net.HTTPClient()

  http:request(requestUrl, {
      options = {
        method = 'GET'
      },
      success = successCallback,
      error = errorCallback
  })
end

local function putMethod(requestUrl, data, successCallback, errorCallback)

  local http = net.HTTPClient()
  http:request(requestUrl, {
      options = {
        method = 'PUT',
        data = json.encode(data)
      },
      success = successCallback,
      error = errorCallback
  })
end

local function updateSchedule(subjectToChange)

  local url = 'http://127.0.0.1:11111/api/panels/heating/86'

  getMethod(url, function(resp)

    --if resp.status == 200 then
      if ( fibaro:getGlobalValue("SchichtArbeit") == "Spaetschicht" )then
      print('Connection successful, status ' .. resp.status)

      local panel = json.decode(resp.data)

      if panel.properties.vacationTemperature ~= nil then

        if ( fibaro:getGlobalValue("SchichtArbeit") == "Spaetschicht" )then   ---------------

          panel.properties.vacationTemperature = subjectToChange.idleTemp
          print('Setting temperature to ' .. subjectToChange.idleTemp .. 'C')

        else

          panel.properties.vacationTemperature = 0
          print('Scheduled temperature was set')

        end

        putMethod(url, panel, function(resp)

          if resp.status == 200 then
            print('Change was applied')
          end

        end,

        function(err)
          print('error ' .. err)
        end
     	)
        else
          print('No value found')
        end
    else
      print('Connection failed, status ' .. resp.status)
    end

    end,

    function(err)
      print('error ' .. err)
    end
    )

end
------------------------------------------------------------------------
local function updateSchedule2(subjectToChange)

  local url = 'http://127.0.0.1:11111/api/panels/heating/85'

  getMethod(url, function(resp)

    --if resp.status == 200 then
      if ( fibaro:getGlobalValue("SchichtArbeit") == "Frueschicht" )then
      print('Connection successful, status ' .. resp.status)

      local panel = json.decode(resp.data)

      if panel.properties.vacationTemperature ~= nil then

        if ( fibaro:getGlobalValue("SchichtArbeit") == "Frueschicht" )then   ---------------

          panel.properties.vacationTemperature = subjectToChange.idleTemp2
          print('Setting temperature to ' .. subjectToChange.idleTemp2 .. 'C')

        else

          panel.properties.vacationTemperature = 0
          print('Scheduled temperature was set')

        end

        putMethod(url, panel, function(resp)

          if resp.status == 200 then
            print('Change was applied')
          end

        end,

        function(err)
          print('error ' .. err)
        end
     	)
        else
          print('No value found')
        end
    else
      print('Connection failed, status ' .. resp.status)
    end

    end,

    function(err)
      print('error ' .. err)
    end
    )

end

updateSchedule(schedule)
updateSchedule2(schedule2)

Jetzt kann man einen ordentlichen SchichtArbeits Heitzplan machen.

Hallo
habe eine Frage.


HC2 = Net.FHttp("127.0.0.1",11111); 
 
-- Recovering info
-- 1 is the heating zone
response ,status, errorCode = HC2:GET("/api/panels/heating/1");
jsonTable = json.decode(response);
 
-- Setting info
jsonTable.properties.vacationTemperature = 21; 
 
-- Saving info
json = json.encode(jsonTable); 
HC2:PUT("/api/panels/heating/1", json);
fibaro:log("Fixed 21 degrees");

Kann mann wie im beispiel oben auch was ähnliches eintragen???

-- Setting info
jsonTable.properties.manualTemperature = 21  , 4Stdunden??????

Danke im voraus.

Hallo
über das Handy, heating panel kann man im manual modus die Temperatur für eine bestimmte zeit setzen.
Kann man wie die Vacantion modus nur in meiner Frage den Manual modus setzen???

Hallo

Ich habe es in einem VD eingepflegt und ein Schichtarbeits VD gemach.
Nur zur Inspiration.

wen es interessiert hier einen funktionierenden Code aus dem Französischem Forum so umgebastelt von mir den man gans sicher etwas aufräumen kann.
Jetzt kann man für VD bauen das man elegant die Temperatur manuell für eine bestimmte zeit setzen kann.

--------------------------------
-- User Settings
----------------------------------
-- nom de la variable qui définit le niveau de Zuhause
local tmpOff = 0 -- température pour HP Off
local handTemperature = 25
local handTimestamp = (os.time()+1*60*60)
local varZuhause = fibaro:getGlobalValue("ZustandDesHauses")
local varUrlaub = fibaro:getGlobalValue("ZustandDesHauses")
 
-- ID des HeatingPanels Hier Traegt man ein was zurück gestelt werden soll.
local hpID = {
    "WohnZimmer", 5,
    "Küche", 6,
    "Bad", 7,
    "Schlafzimmer", 8,
    "Frur und WC", 56,
}
----------------------------------
-- DO not change bellow this line
---------------------------------
local HC2 = Net.FHttp("127.0.0.1",11111)
 
-- Ermitteln der Firmware-Version
local GETheating = "/api/panels/heating/"
payload = "/api/settings/info"
response, status, errorCode = HC2:GET(payload)
if tonumber(status) == 200 
  then
	jsonTable = json.decode(response)
--		version = "4.x"
        GETheating = "/api/panels/heating/"
  else
	fibaro:debug('<span style="color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..response..'</span>')
end

-- Funktion Update-Flächenheizung.
-- und handTemperature == 0, dann ist es schon im automatik.
function HeatPanel(id,HandTmp)
  jsonpanel = HC2:GET(GETheating ..id)
  jsontable = json.decode(jsonpanel)
  --handTimestamp = jsontable.properties.handTimestamp
  --handTemperature = jsontable.properties.handTemperature
  name = jsontable.name
  NouveauPanel = ('{"id":' ..id.. ',"name":"'..name.. '","properties":{"handTemperature":' ..handTemperature.. ',"handTimestamp": ' ..handTimestamp.. ',"vacationTemperature":' ..HandTmp.. '}}')
  HC2:PUT(GETheating ..id, NouveauPanel)
end
 
-- Funktion zu finden ID von heating panel.
function HeatPanelID()
  fibaro:debug("hpName = " ..hpName)
  for j = 1, #hpID, 2 do
    fibaro:debug(hpID[j])
    if hpName == hpID[j] then hpId = hpID[j+1] end
  end
end
 
hpName = "" -- nom du HP verarbeiteten.
hpId = 0    -- ID du HP verarbeiteten.
fibaro:debug("Alle Heitz Panele im Handbetrieb")
fibaro:debug("#hpID = " ..#hpID)
for i = 1, #hpID, 2 do
  fibaro:debug("hpID[" ..i.. "] = " ..hpID[i].. " = " ..hpID[i+1])
  HeatPanel(hpID[i+1], tmpOff)
end
------------------------------------------------------------------
-----------------------------------------------------------------
fibaro:call(66, "setProperty", "ui.Zustand.value", "Aus");
fibaro:setGlobal("ZustandDesHauses", "Sommer");
local ZustandDesHauses = fibaro:getGlobalValue("ZustandDesHauses")
fibaro:call(66, "setProperty", "ui.Schicht.value", ZustandDesHauses);

local msg = "Sommer Wiederherstelt."
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.message.value", msg);

Hier eine Version, die basierend auf der globalen Variable vacation den Urlaubsmodus für alle Zonen ein- (vacation == "true") und ausschaltet (vacation == "false"). Das Script startet bei Veränderung der Variable durch z.B. eine andere Scene. Das manuelle Angeben der Zonen ist nicht notwendig. Die Variable vacation muss manuell angelegt werden.

Besondern geeignet um via Homebridge einen Schalter für den Urlaubsmodus in der HomeApp und via Siri Sprachsteuerung zu haben. Dazu in der config.json der Homebridge im Abschnitt "platform": "FibaroHC2" diese Zeile einfügen: "switchglobalvariables": "vacation",.

--[[
%% properties
%% events
%% globals
vacation
--]]

local vacationTemperature = 16 -- Hier die Temperatur bei Abwesenheit eintragen

-- -- -- Ab hier nichts ändern -- -- -- 

local vacationState = fibaro:getGlobalValue("vacation")
local url = 'http://127.0.0.1:11111/api/panels/heating/'

local function getMethod(requestUrl, successCallback, errorCallback)

  local http = net.HTTPClient()

  http:request(requestUrl, {
      options = {
        method = 'GET'
      },
      success = successCallback,
      error = errorCallback
  })
end

local function putMethod(requestUrl, data, successCallback, errorCallback)

  local http = net.HTTPClient()
  http:request(requestUrl, {
      options = {
        method = 'PUT',
        data = json.encode(data)
      },
      success = successCallback,
      error = errorCallback
  })
end

local function updateSchedule(id)

  local panelUrl = url .. id

  getMethod(panelUrl, function(resp)
    if resp.status == 200 then

      local panel = json.decode(resp.data)
      print('Zone ' .. panel.id .. ' HTTP Ok ' .. resp.status .. ': ' .. panel.name .. ' ' .. panel.mode .. ' ' .. panel.properties.currentTemperature)

      if panel.properties.vacationTemperature ~= nil then

        if vacationState == 'true' then
          panel.properties.vacationTemperature = vacationTemperature
          print('Set ' .. panel.name .. ' to Vacation Mode ' .. vacationTemperature .. '°C')
        else -- if vacationState == 'true' then
          panel.properties.vacationTemperature = 0
          print('Set ' .. panel.name .. ' to Schedule Mode')
        end -- if vacationState == 'true' then

        putMethod(panelUrl, panel, function(resp)
          if resp.status == 200 then
            print('Zone ' .. panel.id .. ' HTTP Ok ' .. resp.status .. ': Changes ' .. panel.name .. ' set')
          end
        end, -- function(resp)
        function(err)
          print('error ' .. err)
        end
     	  )
      else --   if panel.properties.vacationTemperature ~= nil then
        print('No vacationTemperature found')
      end --   if panel.properties.vacationTemperature ~= nil then
    else -- if resp.status == 200 then
      print('HTTP Error ' .. resp.status)
    end -- if resp.status == 200 then
  end, -- function(resp)
  function(err)
    print('error ' .. err)
  end
  )
end -- function updateSchedule(subjectToChange)


getMethod(url, function(resp)
  if resp.status == 200 then

    local zonesList = json.decode(resp.data)
    for i, zone in ipairs(zonesList) do
      updateSchedule(zone.id);
    end

  else -- if resp.status == 200 then
    print('HTTP Error ' .. resp.status)
  end -- if resp.status == 200 then
end, -- function(resp)
function(err)
  print('error ' .. err)
end
)