ich habe in meiner HC eine Heizungssteuerung realisiert:
Folgende Komponenten spielen aktuell mit rein
• 3x Danfoss LC_13 in Verbindung mit einem Heizplan
• 1x Fibaro Fensterkontakt mit LUA Script (Setzen des Heizplan Urlaubsmodus mit 5° Absenktemperatur)
• globale Variable PresentState mit LUA Script (Setzen des Heizplan Urlaubsmodus mit 5° Absenktemperatur)
soweit funktioniert alles tadellos. Ich besitze jetzt noch ein Danfoss Wandthermostat DAN_RS-Z, welches nun mit eingebunden habe, um zum einen die Raumtemperatur zu ermitteln und zum anderen manuell die Temperatur erhöhen zu können. Wenn ich nun die Temperatur am Device ändere, wird diese auch „sofort“ auf die 3 LC_13 per LUA Srcipt übertragen. Auch das funktioniert.
---- Zieltemperatur an LC_13 senden
for i = 1, #thermostate do
fibaro:call(thermostate[i],"setTargetLevel",newTempRoom)
fibaro:call(thermostate[i],"setTime",tonumber(os.time()) + time*60)
end
DOCH wenn die Aufwachzeit eines LC_13 noch relativ weit weg ist, funkt mir der Heizplan wieder dazwichen und setzt wiederrum seine Temperatur ein. Nun habe ich gedacht, wenn ich oben den Urlaubsmodus als API-Funktion verwende, wieso dann nicht bei meinem Wandthermostat den manuellen Modus des Heizplan.
Manueller Modus
Hier kann für eine bestimmte Zeit eine gewisse Temperatur eingestellt werden, dabei wird der Heizplan vorübergehend überschrieben.Zum Beispiel: 23°C eine Stunde lang für Zone Küche und Bad.
Wie kann ich das nun realisieren? Wie kann ich den per LUA Script den manuelles Modus ansprechen und setzen?
ich habe am Wochenende versucht etwas zu basteln und zu spielen. Dabei bin ich auf folgenden Thread gestoßen, der im letzten Beitrag ein Skript für den manuellen Heizmodus enthält. Doch leider reagiert/funktioniert der bei mir nicht.
Wie habt ihr denn das Wandthermostat neben dem Heizplan integriert? Wäre das nicht ein schönes Tutorial für Lua 13
den manuellen Modus kann man über Lua setzen. Allerdings habe ich noch keinen geeigneten Trigger gefunden. Wenn Du die Temperatur als Trigger nimmst hast Du das Problem, dass bei jeder Änderung - also auch bei Änderungen durch den Heizplan - die Szene gestartet wird und den Heizplan zumindest temporär deaktiviert.
--[[
%% properties
220 value
%% globals
--]]
now = os.time()
handTime = now + (60 * 60) -- Eine Stunde
local schedule = {
id = 186, --Raum aus dem Heizpanel
manTemp = tonumber(fibaro:getValue(220, 'value')) --manuelle Temperatur
}
function Debug( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s<!--%s-->', "span", color, message, "span"));
end
if (fibaro:countScenes()>1) then
fibaro:debug('Kill the second scene!');
fibaro:abort();
end
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 setHandModeTrue(subjectToChange)
local url = 'http://127.0.0.1:11111/api/panels/heating/' .. subjectToChange.id
getMethod(url, function(resp)
if resp.status == 200 then
print('Verbindung zum Heizpanel erfolgreich, Status ' .. resp.status)
local panel = json.decode(resp.data)
if panel.properties.handTemperature ~= nil then
panel.properties.handTemperature = subjectToChange.manTemp
panel.properties.handTimestamp = handTime
print('Setze Temperatur auf ' .. subjectToChange.manTemp .. ' C')
putMethod(url, panel, function(resp)
if resp.status == 200 then
print('Änderung wurde vorgenommen.')
end
end,
function(err)
print('Error ' .. err)
end
)
else
print('Panel nicht gefunden')
end
else
print('Verbindung konnte nicht hergestellt werden, Status ' .. resp.status)
end
end,
function(err)
print('error ' .. err)
end
)
end
setHandModeTrue(schedule)
Wie schon erwähnt: Das Problem ist, dass man in der Szene nicht unterscheiden kann, ob eine Änderung vom Heizplan kommt oder manuell eingestellt wurde.
Beide Aufrufe kommen mit dem SourceTrigger property und direkt vom Device.
Hallo.Erstmal Danke fürs Script. Läuft generell auch. Nur springt er bei mir weiterhin nach ein paar Sekunden wieder in den Heizplan.Im Debug kommt : Temperatur geändert _ alles ok. Aber dann greift wieder der Heizplan und er springt wieder auf zb. 4 Grad um…
Ich muss korrigieren : Das Script läuft . Er behält jetzt auch die eingestellte Temperatur - und geht nicht direkt wieder in den Heizplan. Schonmal gut. Kann man nicht noch irgendwo im Script die gewünschte Temperatur einbauen ? So bräuchte man nur die Scene starten - ohne das Heizungsthermostat in WO erst aufrufen zu müssen ? Gruß
Du kannst im oberen Teil die Zeit und die Temperatur einstellen.
handTime = now + (60 * 60) -- Eine Stunde
local schedule = {
id = 186, --Raum aus dem Heizpanel
manTemp = tonumber(fibaro:getValue(220, 'value')) --manuelle Temperatur
}
So wie ich es hier rein kopiert habe holt sich die Szene die Temperatur von meinem Thermostat.
Ersetze also tonumber(fibaro:getValue(220, 'value')) gegen die Wunschtemperatur und fertig.
Nein, nur das einfache überschreiben… Zu mehr reichen meine Fähigkeiten leider nicht… Trigger fällt mir auch nicht ein was man da sinnvoll benutzen könnte…
der Heizplan selbst ist nicht das Problem. Der wird ja durch das setzen der manuellen Temperatur für die eingestellte Zeit deaktiviert.
Jedoch führt jede andere Änderung der Temperatur wie beispielsweise beim öffnen eines Fensters dazu, dass die Szene getriggert wird und die Temperatur manuell hält.
Edit: Jetzt widerspreche ich mir irgendwie selbst. Ich muss das nochmal ausführlich testen.
So, einen Tag läuft das nun das Script. Folgende Logeinträge bekomme ich:
[DEBUG] 22:53:24: Verbindung zum Heizpanel erfolgreich, Status 200
[DEBUG] 22:53:24: Setze Temperatur auf 18°C für 2 h
[DEBUG] 22:53:24: Änderung wurde vorgenommen.
[DEBUG] 15:38:23: Verbindung zum Heizpanel erfolgreich, Status 200
[DEBUG] 15:38:23: Setze Temperatur auf 20°C für 2 h
[DEBUG] 15:38:23: Änderung wurde vorgenommen.
[DEBUG] 17:28:48: Verbindung zum Heizpanel erfolgreich, Status 200
[DEBUG] 17:28:48: Setze Temperatur auf 23°C für 2 h
[DEBUG] 17:28:48: Änderung wurde vorgenommen.
[DEBUG] 19:38:22: Verbindung zum Heizpanel erfolgreich, Status 200
[DEBUG] 19:38:22: Setze Temperatur auf 22°C für 2 h
[DEBUG] 19:38:22: Änderung wurde vorgenommen.
[DEBUG] 21:38:28: Verbindung zum Heizpanel erfolgreich, Status 200
[DEBUG] 21:38:28: Setze Temperatur auf 18°C für 2 h
[DEBUG] 21:38:28: Änderung wurde vorgenommen.
Heißt also:
Szene wird nicht doppelt getriggert
17:28Uhr habe ich manuell auf 23C gesetzt. Dauer 2h
die anderen Zeitpunkte sind vom Heizplan –> da läuft das Script auch an und manifestiert die 2h
Mein Heizplan hat folgende Zeiten 15:30 (20c), 16:30 (22c) und 21:30 (18c).
genau das ist die noch offene Baustelle. Leider wird die Veränderung vom Heizplan auch als Eigenschaftsänderung des Triggers verstanden. Daher führt jede Änderung durch den Heizplan zum Start der Szene. Ich habe aber mittlerweile eine Idee wie ich das umgehen kann.
Werde das morgen mal ausgiebig testen und dann berichten.