29

Kleine LUA Scripte Teil 12: Heizungsthermostate syncen

by boomx10. November 2016

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 Wandthermostat mit einem Heitzkörperthermostat synct, also den gleichen Wert überträgt. Alternativ könnten auch zwei Heizkörperthermostate 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

About The Author
boomx
29 Comments
  • ks-Medien
    10. November 2016 at 15:46

    Danke. Super Beitrag zum genau richtigen Zeitpunkt!!!

  • fs1997
    fs1997
    10. November 2016 at 17:00

    Vielen Dank für das Script
    Geht das mit allen Thermostaten?

  • fstae
    10. November 2016 at 20:26

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

  • TT
    10. November 2016 at 20:43

    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

    • 10. November 2016 at 21:56

      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ß

      • TT
        20. November 2016 at 14:52

        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

  • fs1997
    fs1997
    10. November 2016 at 21:33

    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?

    • 10. November 2016 at 21:59

      Hi,

      deine erste Vermutung trifft zu. Nutze aber den Heizplan vom HC2 nicht, von daher ist das bei nicht von Bedeutung. ;)

      Gruß

  • fstae
    11. November 2016 at 17:30

    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

    • 11. November 2016 at 19:18

      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ß

  • Teknoarne
    17. November 2016 at 21:06

    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?

    • 18. November 2016 at 0:04

      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ß

      • Teknoarne
        18. November 2016 at 17:33

        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

        • 18. November 2016 at 21:24

          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ß

  • Teknoarne
    19. November 2016 at 14:43

    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 :-(

  • Teknoarne
    19. November 2016 at 14:46

    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)

  • Teknoarne
    19. November 2016 at 14:48

    :-) wie fügt mann hier den wirklichen Code eine?
    Es werden immer die Anführungszeichen geändert.

  • Teknoarne
    19. November 2016 at 18:36

    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

  • kapitano1
    21. November 2016 at 10:59

    Hallo,

    wie schon im Forum (https://www.siio.de/board/thema/heizplan-manueller-modus-danfoss-wandthermostat/) geschrieben, überschreibt mir der Heizplan trotz setzen der Variable „time“, meinen Wert wieder, wenn das Aufwachen nicht rechtzeitig passiert ist. Kann man nihct den manuellen Modus dafür irgendwie nutzen?

    Grüße
    Carsten

  • Christian
    Christian
    3. Januar 2017 at 9:35

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

    Weiß jemand warum?

  • Kai Utzmann
    26. Februar 2017 at 11:05

    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?

  • FreshEleph
    6. Oktober 2017 at 0:04

    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!!!

Leave a Response