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.
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
--[[ %% properties 498 value %% events %% globals --]] local fromID = 498 local toID = 500 local time = 120 fibaro:debug('Heizung-Sync gestartet.') local temp_wish = fibaro:getValue(fromID, "value") fibaro:call(toID, "setTargetLevel", temp_wish) fibaro:call(toID, "setTime", tonumber(os.time()) + time*60) fibaro:debug('Wert auf ' ..temp_wish.. '° gesetzt.') |
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.
Danke. Super Beitrag zum genau richtigen Zeitpunkt!!!
Top :) Danke für's Feedback.
Vielen Dank für das Script
Geht das mit allen Thermostaten?
Hi,
ja, die Befehle sollten für alle Thermostate gleich sein. :)
Gruß
Super, vielen Dank! Ähnliches hatte ich mir schon zusammengebastelt, aber dein Skript ist mal wieder absolut perfekt einfach und sauber programmiert!
Danke :)
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
Hi,
die Zeit kannst du folgendermaßen auslesen:
fibaro:debug(os.date("%H:%M", fibaro:getValue(ID, "timestamp")))
Die Zeit wird dann in der Form 02:00 ausgegeben.
Gruß
Hi,
habe diesem Thread mal im Forum weitergeschrieben, da geht das besser mit dem Code etc...
https://www.siio.de/board/thema/heizungs-sync/
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?
Hi,
deine erste Vermutung trifft zu. Nutze aber den Heizplan vom HC2 nicht, von daher ist das bei nicht von Bedeutung. ;)
Gruß
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 :-(
Hi,
die lokale Variable temp_wish muss deklariert sein. Im Originalen Skript findest du das.
Gruß
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)
:-) wie fügt mann hier den wirklichen Code eine?
Es werden immer die Anführungszeichen geändert.
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
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
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?
Hi,
richtig. Der Raumthermostat setzt nur die Temperatur.
Gruß
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