Heizung unter bestimmten Bedingungen abschalten

Begonnen von fhem024, 23 März 2024, 11:54:45

Vorheriges Thema - Nächstes Thema

fhem024

Hallo zusammen,
ich würde gerne mit FHEM realisieren, dass eine (Wolf BM-2) Heizung (eingebunden über das ISM8-Modul) unter bestimmten Bedingungen zu einer bestimmten Zeit abgeschaltet wird.
Der use case dahinter ist, dass die BM-2 so bescheuert ist, kurz vor Heizzeitende gemäß Zeitplanung an der BM-2 noch einen neuen Lauf zu starten - auch wenn der nur 1 Minute dauert.

Daher ist die umzusetzende automatische Abschaltlogik, um diesen Schwachsinn der BM-2 zu verhindern, aus meiner Sicht wie folgt:

50 Minuten vor Ende des Heizprogramms (Wert ist FHEM bekannt) oder von mir aus auch statisch, soll zunächst geprüft werden, ob die Heizung aktuell läuft (Flamme an - FHEM kennt den Status).

Außerdem soll geprüft werden, wie weit die Einschalttemperatur von der realen Temperatur entfernt ist zu diesem Zeitpunkt (beide Werte sind FHEM bekannt).

Falls die Heizung zum Zeitpunkt der Prüfung läuft, soll nichts passieren.

Falls die Heizung zum Zeitpunkt nicht läuft und die Einschalttemperatur weit genug von der aktuellen Temperatur entfernt ist, soll abgeschaltet werden (den nötigen Befehl liefert das ISM8-Modul mit).

  • Ist ein derartiges Szenario mit FHEM Bordmitteln realisierbar? Falls ja, gibt es irgendwo Beispiele, wo man mal nachschauen kann, wie man das konkret umsetzen könnte?
  • Wird diese Aktion geloggt? Am Besten in eine Datenbank. Das ISM8-Modul ist bereits an eine mysql-DB angebunden. Muss da dann noch mehr an dieser Stelle getan werden? Gibt es da evtl. Beispiele dafür?
  • Kann ich mir im Rahmen der Aktion auch einen weiteren (einmaligen) Timer automatisch setzen, der die Heizung dann später wieder aktiviert (wieder in den Automatikmodus versetzt) nach Programmende?

Ich wäre dankbar für Tipps, wie man da am Besten vorgehen könnte!

betateilchen

Das ist doch ein Standardszenarion in FHEM. Mit einem at device kannst Du zur gewünschten Zeit alle Deine Prüfungen starten und entsprechend reagieren.
Ob und was gelogged wird, bestimmst Du als Anwender selbst, auch, ob Du in eine Datenbank (DbLog) schreibst oder in Textdateien. Meine Empfehlung wäre immer DbLog.

Wahrscheinlich musst Du Dir einfach noch ein paar Grundlagen zu FHEM anlesen, um zu verstehen, dass Dein Vorhaben eigentlich nichts kompliziertes ist.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

F_Klee

Ich würde das Problem in mehrere Teile aufteilen.
Zunächst würde ich im Wochenprogramm das Abschalten der Heizung um 50 Minuten vorverlegen. Allerdings würde dann nicht die Heizung direkt abgeschaltet, sondern eine Abfrage gestartet, ob die Heizung gerade läuft. Wenn ja, wird nur ein Dummy gesetzt. Beim Abschalten der Heizung kann ein Notify starten und prüfen, ob der Dummy gesetzt ist und dann die Heizung deaktivieren. Dadurch läuft die Heizung noch zu Ende und die Differenztemperatur ist ausreichend hoch.

Nun muss man nur noch, z.B. über ein AT, dafür sorgen, dass bei nicht ausreichender Differenztemperatur die Heizung noch bis zu 50 Minuten eingeschaltet bleibt und evtl. nachheizt. Eventuell mit einer entsprechenden Abfrage wie oben, um die Heizung nicht abzuwürgen.

Viel Spass :D

fhem024

Ich habe ein at angelegt wie folgt:

define Heizung_test at 17:51:00 {\
    { Log 1, "Das ist ein Test" }\
}

Das Objekt wurde angelegt und verschwand nach Ausführung wieder. Allein, nirgendwo war die Logausgabe zu finden - weder in der DB noch im Logfile. Ich hätte erwartet, dass ich es irgendwo finde.

Was in der DB (history-Tabelle) zu finden ist, ist die Anlage des Objekt als Solches und wenn der Job manuell ausgeführt wurde (execNow). Aber nicht, wenn der Job zur gegebenen Zeit ausgeführt wurde. Scheint mir unlogisch.

F_Klee

Kleiner Tipp: Schau mal ins Wiki, bzw. schau mal etwas genauer hin. Ein AT, so wie du es definiert hast, löst die Aktion nur einmal aus und verschwindet dann. Für ein periodisches Auslösen kommt ein * vor die Zeit. Soll das AT nach einer bestimmten Zeitspanne auslösen, dann muss ein + davor. Die Log-Ausgabe erfolgt in fhem.log. Bei mir funktioniert es.

Man kann einen Zeitabstand zwischen einem aktuellen Event und einer Aktion dadurch erreichen, dass man ein AT per defmod durch den ersten Event einrichtet, also z.B.
defmod Test at +00:50:00 Aktion
richtet ein at "Test" ein, das 50 Minuten später "Aktion" auslöst und dann wieder verschwindet.

frober

...und den 'Log 1' wird ins fhem***.log geschrieben.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

fhem024

#6
Zitat von: F_Klee am 23 März 2024, 18:53:43Ein AT, so wie du es definiert hast, löst die Aktion nur einmal aus und verschwindet dann.
Das war Absicht zum Testen :-). Aber das mit dem + war ein guter Tipp.

Unabhängig davon vermisse ich immer noch die Ausführung des Jobs als Solchem im Log. Wie gesagt, das manuelle Starten ist im Log, Änderungen auch, aber nicht das automatische Ausführen zum Zeitpunkt x.

Zitat von: frober am 23 März 2024, 18:59:18...und den 'Log 1' wird ins fhem***.log geschrieben.
Das war auch meine Erwartungshaltung - da ist aber nichts zu finden.

Ergänzung:
Mir geht es gerade nur um ganz simple Dinge: Auslesen von Readings und ausgeben im Log - einfach um sicherzustellen, dass das, was man schreibt, auch tatsächlich funktionieren kann. Dass das Logging da nicht mitspielt ist natürlich blöd. Ich kann auch Aktionen für das Heizungsdevice auslösen - die ausgeführte Aktion ist dann (durch das ISM8-Module) wieder in der DB und kam auch bei der Heizung an. Es ist aber nicht in der DB (und auch nicht im Logfile), wer diese Aktion ausgelöst hat.
Muss dafür evtl. ein bestimmter Loglevel eingestellt sein?

Beta-User

Zitat von: fhem024 am 23 März 2024, 19:08:40Das war auch meine Erwartungshaltung - da ist aber nichts zu finden.
Vielleicht, weil du zu viele Klammern gesetzt hattest. Mach mal alles in eine Zeile und das innere geschweifte Klammerpaar weg. (Vielleicht findet sich auch ein Fehler im Log, ich kann das grade nicht testen, was da passiert).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

fhem024

#8
Auch das Schreiben in eine Zeile hat nicht geholfen:
define Heizung_test at 19:16:00 Log 1, "Das ist ein Test"
Beim Erstellen wird zwar immer behauptet, dass keine Fehler aufgetreten seien - aber passieren tut eben nichts in Sachen Logging. Strange - zumal ja Änderungen und das Erstellen des Jobs selbst geloggt werden. Selbst manuelles Starten. Ich kann das nicht nachvollziehen.

Fällt mir gerade noch so ein:
Ich habe ja vor langer Zeit schon mysql angebunden, um die Readings von der Heizung in die Datenbank zu pinseln - was ja auch super funktioniert.
Wie würde man denn einfach so einen Logtext über eine Logfunktion (welche?) in die Datenbank pinseln? Statt Log von oben? Aus der Doku die ich hierzu bisher gefunden habe, bin ich nicht schlau geworden. Vielleicht geht es ja dann damit? Wäre sowieso das, was ich am Ende des Tages haben möchte.

Nobbynews

Beta-User meinte das so:
define Heizung_test at 19:16:00 {Log 1, "Das ist ein Test"}  Macht dann auch, was es soll.

fhem024

Funktioniert auch nicht. Sorry. Muss ich jetzt echt den strace anwerfen, um zu schauen, warum das klemmt? Hoffentlich bin ich dann schlauer.

Nobbynews


F_Klee

Ich habe bei mir original deinen Text ausprobiert und es funktionierte. Es liegt also eher an deiner FHEM-Installation.

fhem024

Zitat von: Nobbynews am 23 März 2024, 19:57:09attr global verbose 0
Exakt das war das Problem. Im strace hat man auch gesehen, dass er noch nicht mal versucht, zu schreiben. Muss mindestens auf 1 gesetzt sein.

Jetzt wäre noch schön, wenn man das Ganze in die DB loggen könnte und v.a., wenn das Durchführen des Jobs als Solches auch (in der DB) protokolliert werden würde. Mit welchem Befehl kann ich statt in das Logfile quasi unstrukturiert in die DB loggen (genauso wie Log)?

Nobbynews

Zitat von: fhem024 am 23 März 2024, 20:17:20Muss mindestens auf 1 gesetzt sein.
Nö, kannst auch anstatt Log1 ein Log0 nehmen.