Kleine LUA Scripte Teil 12: Heizungsthermostate syncen

Geschrieben von boomx

Der Winter ist nun wirklich angekommen und Außentemperaturen unter 0° Celsius werden zukünftig öfter vorkommen. Also der perfekte Zeitpunkt eine kleine LUA Szene zu schreiben, welche sich ums Heizen dreht.

In einigen der letzten Artikel sind wir, passend zur Jahreszeit, vermehrt auf das Thema Heizung eingegangen. Dort haben wir für euch unterschiedliche Systeme, wie tado und eCozy, getestet oder uns die Heizungssteuerung von verschiedenen Smarthome-Gateways, wie devolo oder Vera angeschaut. Wie Ihr das Heiz-Panel beim Fibaro HomeCenter einrichtet, haben wir euch in einem älteren Artikel bereits ausführlich erläutert.

Trotzdem greifen wir dieses Thema hier noch einmal auf, da wir denken, dass es für den ein oder anderen User bestimmt eine interessante, kleine Szene ist.

Es handelt sich hierbei um eine Szene, welche zum Beispiel ein Heizkörperthermostate[icons icon="icon-link" color="#1e73be" size="13"] in einem Raum auf die gleiche Temperatur gebracht werden. Wie Ihr es nutzt bleibt natürlich euch überlassen.

heiz_sync

Debug im Fibaro HomeCenter 2

LUA Szene

In gewohnter Manier zeigen wir euch an dieser Stelle das Skript und gehen dann im nächsten Step auf die Punkte ein, auf welche Ihr bei der Einrichtung achten müsst.

Viele Einstellungsmöglichkeiten gibt es aber bei diesem Skript ohnehin nicht. ;) Wichtigster Punkt ist das Setzen des Triggers in dem Konfigurationsheader. Hier muss die ID des auslösenden Thermostat, also das Thermostat, bei dem sich der Wert manuell oder automatisch ändert, eingetragen werden.

Außerdem müssen die lokalen Variablen "fromID" und "toID" mit den entsprechenden IDs gefüllt sein. "fromID" ist hier der auszulesende Wert am Thermostat und "toID" ist der zu setzende Wert. Das waren dann auch schon alle notwendigen Einstellungen.

Als letztes muss noch die Zeit eingetragen werden, wie lang das Heizungsthermostat den Temperaturwert beibehalten soll. Dies passiert über die Variable "time". Vordefiniert ist hier ein Wert von 120, also 120 Minuten. Dieser kann aber beliebig geändert werden.

Nachdem Ihr alle Einstellungen vorgenommen habt, wird die Szene durch eine Änderung von einem Thermostat getriggert und setzt dann den Wert an dem anderen Thermostat.

danfoss_sync

Icon

Diesen Blogpost hat geschrieben ...

boomx

30 Kommentare

  • Super, vielen Dank! Ähnliches hatte ich mir schon zusammengebastelt, aber dein Skript ist mal wieder absolut perfekt einfach und sauber programmiert!

  • Hi Daniel,

    cool! Ich erinnere mich, dass die Heizungssteuerung einer meiner ersten Versuche in LUA war, damals meintest Du, das sei ein Einzeiler....
    Du hattest recht! (Na gut, ein paar mehr Zeilen wurden es dann doch :-))
    https://www.siio.de/board/thema/heizung-ueber-raumthermostat-steuern-danfosshc2/page/2/
    Was aber cool wäre: bei dem Danfoss-Wandthermostat kann man ja auch die Zeit eingeben. Könnte man die nicht auslesen?
    Zumindest überträgt er sie an die HC2, allerdings zeigt die z.B. 2:15, wenn ich 3 Std eingebe.
    Für mehrere Thermostaten setze ich die IDs in geschweifte Klammern?

    LG TT

    • Hi,

      ja, daran hab ich mich auch erinnert, konnte den Thread aber nicht mehr finden. :) Hab es ein wenig userfreundlicher gemacht, deswegen sind es mehr geworden. Mit 2 Zeilen wäre ich ausgekommen ;)

      Ich hatte noch ein paar Ideen, welche ich aus zeitlichen Gründen nicht umgesetzt habe. Kann ich aber noch nachholen. ^^ Das wäre definitiv ein Punkt.

      Für mehrere Thermostate müsstest du dafür ein Array erstellen und dann in einer for-Schleife durchgehen. Bin grundsätzlich davon ausgegangen, dass man meistens nur ein oder zwei Thermostate in einem Raum im Einsatz hat.

      Gruß

      • Hi,
        habe ein bisschen herumprobiert, aber ich bekomme die Zeit aus dem Danfoss RS nicht abgefangen.
        In der Modulliste zeigt er etliche Eigenschaften. (kann hier keinen Screenshot anhängen)
        Wenn ich die set-Befehle mit get (getTime) abfragen will, gibt das nur einen Nil-Value.
        Auch wenn ich im Header versuche, z.B. den timestamp einzubeziehen, führt das zu nix Gutem.
        Hast Du da noch eine Idee?

        LG TT

  • Kann man ich mir das so vorstellen, die Heizung läuft nach dem Heizungsplan und jetzt gehe ich hin und stelle am Wandthermostat manuell auf eine andere Temperatur. Diese wird jetzt für die in der Szene festgelegte Zeit X an das Heizungsthermostat übermittelt und nach Zeit X geht es mit dem Heizungsplan weiter?
    Oder wird nur noch die am Wandthermostat eingestellte Temperatur übermittelt und der Heizungsplan außer Kraft gesetzt?

  • Hallo Daniel,

    Du hast schon in mehreren Beiträgen erwähnt, dass Du den Heizplan im HC2 nicht nutzt. Welche Alternative verwendest Du denn?

    Gruß

    Matthias

    • Hi,

      ich habe ein netatmo Thermostat, welches ich für meine Heizung nutze. Eigentlich mach ich aber nur 3-5x im Jahr die Heizung an, hier ist alles isoliert und im Keller laufen die Heizungsrohre.

      Gruß

  • Hallo boomx wie immer super Arbeit. Kurze frage ich habe mehre Thermostate in einem Raum und das mit dem Array habe ich leider nicht hinbekommen. Wie würde das aussehen?
    Ausserdem übersteuert mein Heizungspanel nach wenigen Minuten die Änderung am Thermostat.
    Ich dachte das Panel hat nur an den festgelegten Zeiten Regeleingriffe.
    Funktioniert das Syc auch wenn ich das value Thermostat in der Fibaro App hoch Regele?

    • Hi,

      ja, das funktioniert auch über die App.

      Für ein Array musst du folgendes umsetzen:

      local tempID = {232,464}

      for i=1, #tempID do
      if tempID[i] ~= nil then
      fibaro:call(tempID, "setTargetLevel", temp_wish)
      fibaro:call(tempID, "setTime", tonumber(os.time()) + time*60)
      end
      end

      Bezüglich der Zeit hatte ich noch einen kleinen Fehler im Skript, den hab ich im Artikel aktualisiert.

      Gruß

      • Ich habe jetzt eine Stunde versucht das umzusetzen.
        kannst du mir bitte mal helfen.

        --[[
        %% properties
        13 value
        %% events
        %% globals
        --]]
         
        local fromID = 13
        local tempID = {26,29}
        local time = 120
         
        fibaro:debug('Heizung-Sync gestartet.')

        for i=1, #tempID do
        if tempID[i] ~= nil then
        fibaro:call(tempID, "setTargetLevel", temp_wish)
        fibaro:call(tempID, "setTime", tonumber(os.time()) + time*60)
        fibaro:debug('Wert auf ' ..temp_wish.. '° gesetzt.')

        end
        end

        Wo ist mein Denkfehler?
        Gruß Arne

        • Hi,

          oh, sorry. Da hat sich ein Fehler eingeschlichen:

          for i=1, #tempID do
          if tempID[i] ~= nil then
          fibaro:call(tempID[i], „setTargetLevel“, temp_wish)
          fibaro:call(tempID[i], „setTime“, tonumber(os.time()) + time*60)
          fibaro:debug(‚Wert auf ‚ ..temp_wish.. ‚° gesetzt.‘)

          end
          end

          Gruß

  • gehen bei dir beim Kopieren des Codes immer Formatierungen verloren?

    ich habe mich jetzt ran getestet

    --[[
    %% properties
    13 value
    %% events
    %% globals
    --]]

    local fromID = 13
    local tempID = {26,27}
    local time = 120

    fibaro:debug('Heizung-Sync gestartet.')

    for i=1, #tempID do
    if tempID[i] ~= nil then
    fibaro:call(tempID[i], "setTargetLevel", temp_wish)
    fibaro:call(tempID[i], "setTime", tonumber(os.time()) + time*60)
    fibaro:debug('Wert auf ' ..temp_wish.. '° gesetzt.')

    end
    end

    Dann gibt es als Debug aber

    [DEBUG] 14:35:16: Heizung-Sync gestartet.
    [DEBUG] 14:35:16: line 18: attempt to concatenate global 'temp_wish' (a nil value)

    Das heist doch die Variable temp_wish gibt es nicht?

    Widerspenstiges kleines Script :-(

  • Ich sehe gerade auch bei mir ändert der Feed die Anführungszeichen.

    also ich habe stehen

    for i=1, #tempID do
    if tempID[i] ~= nil then
    fibaro:call(tempID[i], "setTargetLevel“, temp_wish)
    fibaro:call(tempID[i], "setTime“, tonumber(os.time()) + time*60)

  • Vielen Dank jetzt Laufs.

    --[[
    %% properties
    13 value
    %% events
    %% globals
    --]]

    local fromID = 13
    local tempID = {26,27}
    local time = 120

    fibaro:debug('Heizung-Sync gestartet.')
    local temp_wish = fibaro:getValue(fromID, "value")

    for i=1, #tempID do
    if tempID[i] ~= nil then
    fibaro:call(tempID[i], "setTargetLevel", temp_wish)
    fibaro:call(tempID[i], "setTime", tonumber(os.time()) + time*60)
    fibaro:debug('Wert auf ' ..temp_wish.. '° gesetzt.')

    end
    end

  • Ich habe versucht, die Synchronisation über eine Assoziation des Heatit Wandthermostat an Danfoss LC13 zu lösen. Das funktioniert aber nicht.

    Weiß jemand warum?

  • Hallo zusammen,

    aber letztendlich fungiert der Raumthermostat dann nur als externes Einstellorgan, oder? Richtig geregelt wird dabei nicht wie weit das Heizkörperthermostat aufmacht? Das interne Thermometer des Danfoss Heizkörperthermostat ist immer noch das regelnde Thermometer und nicht das im Raumthermostat?

  • Hallo,

    erst einmal vielen Dank für das Skript!

    Gibt es noch die Möglichkeit, dass bei Temperaturzuweisung per Heizplan, dass Skript nicht ausgeführt wird.
    Das abgebildete Danfoss Stellglied befindet sich mit weiteren vier Danfoss Heizkörperreglern in einem Raum. Wenn jetzt per Heizplan eine Temperatur zugewiesen wird, erhalten die vier Heizkörperregler zusätzlich noch (vom Skript) die Zeit übermittelt. :( Dies kann manchmal zu Konflikten kommen.
    Somit wäre es schön, wenn bei Temperaturübermittlung per Heizplan, dass Skript nicht ausgeführt wird.

    Auch wäre es sehr hilfreich, wenn z. B. die Heizkörperregler eine Temperatur und eine Dauer von 3 Stunden zugewiesen bekommt, wenn die Heizungssteuerung eine höhere Priorität hätte. Sodass die Temperatur (+ Zeitlöschung) vom Heizplan übernommen wird.

    Gibt es hierfür eine Lösung?

    Ich kenne mich leider mit der Skript-Sprache noch nicht aus.

    Vielen Dank für Hilfe!!!

  • Hallo an alle,
    ich verwende seit Monaten das Script von BOOMX.
    Seit dem letzen Update funktioniert es leider nicht mehr.
    Beim erhöhen der Temperatur geht diese auch entsprechend nach oben. Dann sollte nach 2 Stunden der Heizplan wieder greifen. Jedoch bleibt die Temperatur im Wandthermostat stehen. Es wird also keine Synchronisation durchgeführt.
    Woran kann das liegen.
    Danke und Gruß
    Christian

Gib deinen Senf dazu!

Cookie Consent mit Real Cookie Banner