(Wohn-) Komform Energieersparnis Heizungssteuerung Lösungen Tipps & Tricks Tutorial

Kleine LUA Scripte Teil 17: Fibaro-Urlaubsmodus steuern

Geschrieben von Christian

Dieses kleine Script steuert den Urlaubsmodus über eine globale Variable. So lässt sich die Heizungsabsenkung durch Veränderung der Variablen aus anderen Szenen oder Virtual Devices regeln.

Versteckt im Heizungspanel verbirgt das Fibaro Home Center 2 den Urlaubsmodus (Holiday Mode), der eine feste Temperatur unabhängig vom Zeitplan einstellen kann. Eigentlich perfekt für die Absenkung der Heizung bei Abwesenheit. Doch es ist recht umständlich den Urlaubsmodus zu aktivieren, denn es bedarf einiger Klicks.

Holiday Mode im Fibaro Home Center 2

Dieses kleine Script steuert den Urlaubsmodus über eine globale Variable. So lässt sich die Heizungsabsenkung aus anderen Szenen oder Virtual Devices durch Veränderung der Variablen regeln.

Verwendung des Scriptes

Lege im Home Center 2 eine neue LUA Szene an und füge den Code des Scriptes ein. (Den Code kannst Du am Ende des Artikels kopieren oder herunterladen.) Speichere die Szene. Name und Raum haben dabei keine Auswirkungen.

Im Kopf der Szene kannst du die Temperatur für den Urlaubsmodus einstellen:

local vacationTemperature = 16 -- Urlaubs-Temperatur

Jetzt erstelle im Variables Panel noch die Variable vacation und setze sie zunächst auf einen beliebigen Wert:

Deine neue Szene startet bei Veränderung der Variablen. Wird der Wert auf true gesetzt, wird der Urlaubsmodus für alle Zonen aktiviert und die Heizung auf die Urlaubstemperatur gestellt. Setzt man die Variable auf false, wird der Urlaubsmodus deaktiviert und die Temperatur wieder durch den Zeitplan geregelt.

Verwende in deinen eigenen Szenen zur Steuerung diese beiden Code-Zeilen:

fibaro:setGlobal("vacation", "true"); -- Urlaubsmodus ein
fibaro:setGlobal("vacation", "false"); -- Urlaubsmodus aus

Urlaubsmodus mit Apple Home App automatisieren

Steuerst du dein Zuhauses über Siri und die Apple Home App, kannst du den Urlaubsmodus dort als Schalter hinzufügen. So kannst du den Urlaubsmodus über Siri aktivieren oder beim Verlassen und Erreichen deines Zuhauses die Absenkung der Heizung automatisieren.

Urlaubsmodus als Schalter in der Apple Home App

(Die Apple Home App vereint alle Home-Automation-Systeme. Dein Fibaro System kannst du über die Homebridge integrieren, was mit dem Homebridge Raspberry Pi Image wirklich leicht geworden ist. Das ist allerdings ein anderes Thema und führt hier zu weit. Gehen wir also davon aus, du hast dein Fibaro System in der Home App.)

Füge in der Konfiguration des Homebridge-Fibaro-Plugins (in der Datei config.json) die folgende Zeile hinzu:

"switchglobalvariables": "vacation"

Der Block für das Fibaro-Plugin sollte also so aussehen (achte auf die Kommas):

{
    "platform": "FibaroHC2",
    "name": "FibaroHC2",
    "host": "IP deines Home Center 2",
    "username": "dein Benutzername",
    "password": "dein Passwort",
    "switchglobalvariables": "vacation"
}

Die neue Zeile bringt die Variable vacation, die wir oben angelegt haben, als Schalter in die Home App. Nach einem Neustart der Homebridge kannst du den Fibaro-Urlaubsmodus mit Siri und der Home App steuern.

Um den Urlaubsmodus entsprechend deiner Anwesenheit ein- und auszuschalten, füge zwei Automationen in der Home App hinzu: Den Schalter Urlaubsmodus einschalten, sobald die letze Person dein Zuhause verlässt, und ausschalten, sobald die erste Person zuhause ankommt.

Jetzt hast du eine automatische Heizungssteuerung, die unabhängig vom Zeitplan die Temperatur absenkt, wenn niemand zuhause ist.

DOWNLOAD Urlaubsmodus Sript + Icon


Script Quellcode

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

local vacationTemperature = 16 -- Urlaubs-Temperatur

-- -- -- Ab hier Code nicht verä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 vacation temperature 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
)

Diesen Blogpost hat geschrieben ...

Christian

Ich bin Christian. Mit einer gehörigen Portion Neugier beschäftige ich mich seit vielen Jahren mit der Digitalisierung von Lichtsteuerung und Home Automation mit Fibaro, Empirbus NXT, Homebridge und HomeKit. Ich schreibe hier als Gastautor und freue mich, meine Erfahrungen mit euch teilen zu können.

Gib deinen Senf dazu!

WordPress Cookie Hinweis von Real Cookie Banner