Flexible Heizplanänderung

Begonnen von jhohmann, 01 November 2018, 14:50:01

Vorheriges Thema - Nächstes Thema

jhohmann

Es gibt zahlreiche Diskussionen, ob man die MAX Geräte mittels MAX Cube oder CUL steuern sollte.
Ich habe bisher immer den originalen Cube genutzt und mich nicht getraut, ihn zu flashen. Für die schnelle Überwachung z.B. der Fensterkontakte setze ich einen CUL parallel zum Cube ein.
FHEM kontaktiert meinen Cube nur alle 5 Minuten. Vermutlich könnte ich das Intervall auch noch höher setzen, da der CUL alles kurzfristige übernimmt.

Ich hatte auch mal das Hilfsmodul weekprofile getestet, aber das hat bei mir nicht vernünftig funktioniert und wahnsinnig Credits gefressen. So würde das Update meiner Geräte mehrere Stunden dauern.
Mit der ELV Software über den PC ging das aber eigentlich immer recht problemlos.

Also habe ich rumgespielt und eine Möglichkeit geschaffen, um mittels der von ELV ausgelieferten MAX-Software, den Heizplan einfach ändern zu können. Das geht über ein Shell-Skript unter Linux, was ein Java Programm ausführt und lässt sich damit auch einfach im FHEM einbinden.

Somit ist es recht einfach, je nach Situation (Urlaub, Schichtdienst, Brückentage, ...), den kompletten Heizplan vollständig zu ändern.
Die Original-Software von FHEM muss auf dem PC installiert sein. Bei mir war es mal ein Windows mit der MAX Version 1.4.1. Aber inzwischen habe ich die Software gar nicht mehr auf dem PC.
Und ob es mit einer neueren Version geht, falls es die geben sollte, kann ich nicht sagen. Meine Konstellation reicht mir :).
Wenn aber jemand das hier mit einer neueren Version zum Laufen bekommt, bitte mitteilen .

Damit ihr das auch für euch nutzen könnt, müsst ihr folgende Punkte tun:

  • Java muss installiert sein. Wie ich das damals drauf bekommen habe, weiß ich leider nicht mehr. Aber vermutlich kann man das als Paket installieren. Ich nutze noch die Version 1.8.0_65.
  • Alles vom PC aus dem Ordner ProgramData\MAX\ übertragen nach /opt/MAX (als Beispiel).
  • Das angehängte TAR File auspacken nach /opt/fhem/, so dass neue Ordner MAX und .MAX entstehen. (Ob der Ordner .MAX für diesen Zweck gebraucht wird, weiß ich nicht. Bei mir kann ich den MAX Server auch unter Linux nutzen und kann hier den Port vorgeben, der verwendet wird.)
  • Die Datei /opt/fhem/MAX/Heizung.holiday nach /opt/fhem/FHEM/Heizung.holiday kopieren/verschieben.
    Das ermöglicht, die Datei über die FHEM-Web-Seite zu ändern (Edit files).
    Diese Datei für eure Zwecke anpassen. Beschreibung weiter unten.
  • Das Skript /opt/fhem/MAX/weekprofile.sh für eure Zwecke anpassen.
    Zu Beginn werden einige Variablen gesetzt, wie CONNECT und FILE oder die Basis-Installation von MAX (hier /opt/MAX) und das Addon (/opt/fhem/MAX). Hier kann jeder seine Standard-Parameter direkt ablegen.
    Diese Angaben können aber auch über Aufrufparameter dynamisch geändert werden.
    -f oder --file gibt den Pfad zur Datei an, wo der Heizplan gespeichert ist.
    -l oder --log Pfad zur Log-Datei
    -c oder --connect IP Adresse des MAX Cube
    -m oder --modus Der zu setzende Heizplanname (Normal, Urlaub, Schicht1, ...)
Hier der Aufbau der Heizungs-Plan-Datei:
Im Kopf habe ich für mich die Raumnummern hinterlegt, damit ich weiß, welcher Raum die Nummer 1, 2, ... hat.
Wenn man die Raumnummer nicht kennt, kann man z.B. beim Wandthermostat nach der groupid schauen. Die entspricht der Raumnummer.

Es gibt zwei Möglichkeiten, zu einem Heizplan und Raum die notwendigen Infos abzulegen.
Entweder gibt man jeden Tag getrennt an (wenn z.B. relativ viele Wechsel gewollt sind):
<Heizplanname>.<Raumnummer>.<Tag>=<Heizwert>,<Startzeit eines Wechsels>[,<Heizwert>,<Startzeit eines Wechsels>]*,<Heizwert bis zum Ende des Tages>
Hier ein Beispiel:
Normal.2.Sat=17,07:30,20.5,21:55,17
Normal.2.Sun=17,08:45,20.5,21:45,17
Normal.2.Mon=17,06:05,20,06:30,17,14:30,18,17:30,20.5,21:30,17
Normal.2.Tue=17,06:05,20,06:30,17,14:30,18,17:30,20.5,21:30,17
Normal.2.Wed=17,06:05,20,06:30,17,14:30,18,17:30,20.5,21:30,17
Normal.2.Thu=17,06:05,20,06:30,17,14:30,18,17:30,20.5,21:30,17
Normal.2.Fri=17,06:05,20,06:30,17,14:30,18,17:30,20.5,21:30,17

Am Samstag im Raum 2 gilt 17 Grad als Heizwert bis 07:30, danach wird auf 20,5 Grad hoch geheizt bis 21:55. Dann gilt bis Mitternacht 17 Grad.
Und das wiederholt sich für alle Räume. Wenn man einen Raum nicht angibt, sollte dieser nicht verändert werden.

Die andere Möglichkeit ist, alle Angaben für die Wochentage in einer Zeile anzugeben:
<Heizplanname>.<Raumnummer>=<Tag> <Heizwert>,<Startzeit eines Wechsels>[,<Heizwert>,<Startzeit eines Wechsels>]*<Heizwert bis zum Ende des Tages>[ <Tag> <Heizwert>,<Startzeit eines Wechsels>[,<Heizwert>,<Startzeit eines Wechsels>]*<Heizwert bis zum Ende des Tages>]*
Urlaub.1=Sat 17,12:00,17 Sun 17,12:00,17 Mon 17,12:00,17 Tue 17,12:00,17 Wed 17,12:00,17 Thu 17,12:00,17 Fri 17,12:00,17
Hier habe ich immer als Zwischenuhrzeit 12:00 eingetragen. Ob das wirklich notwendig ist, weiß ich nicht mehr. Schaden tut es auf jeden Fall nicht.
Als Endezeit des letzten Heizplans eines Tages wird immer automatisch 23:59 ergänzt. Das Problem mit zufällig springenden Heizstufen, was im Forum ausführlich beschrieben wurde, gibt es hier nicht.

In FHEM habe ich mir einen Dummy angelegt, der als Auflistung alle meiner Heizplannamen kennt.
Hier mein Dummy

Internals:
   NAME       Heizmodus
   NR         187
   STATE      Frei1
   TYPE       dummy
   READINGS:
     2018-11-01 08:30:00   state           Frei1
Attributes:
   event-on-change-reading .*
   icon       rc_OPTIONS
   readingList state
   room       Kalender
   setList    state:Normal,Homeoffice,Urlaub,Frei1,Frei2,Silvester,Neujahr
   webCmd     state

Und über ein notify auf diesem Dummy wird dann das Skript gestartet.

Internals:
   DEF        Heizmodus:* {
system("/opt/fhem/MAX/weekprofile.sh --modus $EVENT");
}
   NAME       ntHeizmodus
   NOTIFYDEV  Heizmodus
   NR         188
   NTFY_ORDER 50-ntHeizmodus
   REGEXP     Heizmodus:*
   STATE      2018-11-01 08:30:00
   TRIGGERTIME 1541057400.43499
   TYPE       notify
   READINGS:
     2018-10-29 18:09:23   state           active
Attributes:
   room       Kalender

Bezüglich der Credits. Ich habe 5 Räume mit MAX ausgestattet, vier mal mit Wandthermostat und im Wohnzimmer drei Heizkörper, in den anderen Räumen nur einen.
Hier habe ich den Heizplan in einer Stunde testhalber mehrfach geändert und es waren noch genug Credits übrig.

Das hier ist auch eine gute Gelegenheit, seine Geräte nach einem Reset des Cubes wieder recht einfach mit dem aktuellen Heizplan zu versehen. Das kommt bei mir selten auch mal vor.

Damit ich die MAX Software unter Linux zum Laufen bekommen konnte, musste ich einige Klassen von ELV überschreiben (Patchen). Da ich mit einer Veröffentlichung dieser Änderungen vermutlich gegen Copyrights verstoßen würde, werde ich das hier nicht tun. Fragen hierzu sind also zwecklos ;).

Nur so als Anregung: Der Dummy lässt sich auch wunderbar über einen Kalender steuern. Das lässt sich toll automatisieren.
Raspberry Pi 4 - bookworm / EnOcean - Rollo+Licht, deCONZ - Licht+Sensoren, ZWave - CO Messung, HMCCU mit piVCCU - Heizung+Rollo
plus dovecot, minidlna