Zum Ende der Metadaten springen
Zum Anfang der Metadaten

Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 132 Nächste Version anzeigen »

Eine kleine Warnung vorweg:

Da sich mit Hilfe der hier beschriebenen Informationen jegliche Parameter der Heliotherm Wärmepumpe verändern lassen, besteht die Möglichkeit sich durch unsachgemäßes bzw. unbedachtes Verhalten die Wärmepumpe und/oder zugehörige Komponenten zu beschädigen.

Der Autor übernimmt daher keinerlei Garantie oder Gewährleistung in Bezug auf Richtigkeit oder Funktionalität und übernimmt keinerlei Haftung für Schäden, die durch diese Informationen hier verursacht werden!

Das folgende Dokument beschreibt in einer einfachen Schritt für Schritt Anleitung, wie mit Hilfe der Open Source Applikation HtREST eine Heliotherm Wärmepumpe an eine Loxone Steuerung angebunden werden kann.

Benötigte Hardware & Anbindung

Benötigt wird für die Kopplung nur

  • ein Raspberry Pi
  • mit Netzwerkanbindung (kabelgebunden oder per WLAN spielt dabei keine Rolle) und
  • serieller Verbindung zur Heliotherm Wärmepumpe, z.B. mittels USB auf RS232 Adapter.

Für die serielle Verbindung zur Regeleinheit der Wärmepumpe (D-Sub Stecker -X26 "Modem COM") wird ein ausgekreuztes 9-poliges RS232-Kabel (Nullmodemkabel) benötigt.

Einen möglichen Aufbau zeigen z.B. die folgenden beiden Fotos:

Der Aufbau besteht hier aus einem

  • Raspberry Pi Zero mit
  • Zero4U 4-Port USB Hub an dem
  • ein USB auf RS232 Adapter für die serielle Verbindung zur Wärmepumpe und
  • ein USB auf RJ45 Ethernet Netzwerkadapter für die Anbindung ans Heimnetz

angeschlossen ist.

Das ganze montiert auf dem noch freien Platz auf der Hutschiene in der Wärmepumpe.

Natürlich ist es auch möglich den Raspberry Pi außerhalb der Wärmepumpe zu platzieren und nur das serielle RS232-Kabel in die Wärmepumpe zu führen.

Vorbereitung

Als Betriebssystem am Raspberry Pi reicht das Raspbian Buster Lite (Minimal image based on Debian Buster) ohne Desktop-Unterstützung, rein nur mit Konsole.

Für den Zugriff auf den Raspberry Pi wird weiters ein ssh-Zugang benötigt.

Wie dieser aktiviert werden kann ist z.B. hier beschrieben:

    https://www.raspberrypi.org/documentation/remote-access/ssh/

Zu empfehlen ist es, dem Raspberry Pi auch gleich eine statische IP-Adresse zu spendieren und ihm einen geeigneten Hostnamen zuzuweisen.

Anleitungen dazu finden sich zur genüge im Netz:

Des Weiteren sollte man dann auch gleich kontrollieren, ob Datum und Uhrzeit stimmt oder noch besser die automatische Synchronisierung per NTP einrichten.

Zu beachten ist hier, dass man die richtige Zeitzone verwendet.

Eine ausführliche Beschreibung dazu findet man z.B. hier:

    https://raspberrytips.com/time-sync-raspberry-pi/

Installation & Test

Sind diese Grundvoraussetzungen erfüllt, kann auch gleich mit der eigentlichen Installation der benötigten Softwarepakete begonnen werden.

Zuerst verbinden wir uns mittels ssh mit dem Raspberry Pi und führen eine Aktualisierung aller Paketquellen und der installierten Pakete durch:

pi@htrest:~ $ sudo apt-get update && sudo apt-get upgrade -y

Anschließend installieren wir noch das benötigte Paket zum Erstellen von virtual environments unter Python:

pi@htrest:~ $ sudo apt-get install python3-venv -y

Somit können wir die benötigte HtREST Applikation in einer eigenen, isolierten Umgebung installieren und bewahren uns somit vor möglichen Versionskonflikten installierter Python Pakete.

Python 3.7 oder neuer sollte bereits installiert sein, was ganz einfach mittels folgendem Aufruf überprüft werden kann:

pi@htrest:~ $ python3 -V
Python 3.7.3

Danach erstellen wir uns die bereits oben erwähnte virtuelle Arbeitsumgebung (virtual environment) für die HtREST Applikation:

pi@htrest:~ $ mkdir /home/pi/venv
pi@htrest:~ $ python3 -m venv /home/pi/venv/htrest

Diese virtuelle Arbeitsumgebung muss dann noch mittels

pi@htrest:~ $ source /home/pi/venv/htrest/bin/activate

aktiviert werden.

Ob eine virtuelle Arbeitsumgebung gerade aktiv ist, lässt sich sehr schön daran erkennen, dass der Name der aktiven (virtuellen) Arbeitsumgebung in Klammern dem Kommandozeilen-Prompt vorangestellt wird:

(htrest) pi@htrest:~ $

Verlassen lässt sich die virtuelle Arbeitsumgebung einfach mittels:

(htrest) pi@htrest:~ $ deactivate

Zum Installieren der HtREST Applikation innerhalb der virtuelle Arbeitsumgebung muss diese aber natürlich aktiviert sein.

Zur Installation selber reicht dann der folgende Aufruf:

(htrest) pi@htrest:~ $ pip install htrest

Hat das alles ohne Probleme funktioniert, kann die HtREST Applikation auch schon mal testhalber händisch gestartet werden:

(htrest) pi@htrest:~ $ htrest -d /dev/ttyUSB0 -b 115200 --host 192.168.11.99 --bool-as-int --read-only

Hier muss natürlich der richtige Pfad des seriellen Device und die IP-Adresse des Raspberry Pi auf dem die Applikation läuft entsprechend angepasst werden.

Die USB auf RS232 Adapter sind dabei meist unter /dev/ttyUSB0, /dev/ttyUSB1, usw. zu finden, einige wenige Typen allerdings auch unter /dev/ttyACM0, /dev/ttyACM1, usw.:

(htrest) pi@htrest:~ $ ls /dev/
autofs         full       loop3         mmcblk0p2  ram13   raw      tty10  tty21  tty32  tty43  tty54  tty8       vcs    vcsa5     video11
block          fuse       loop4         mqueue     ram14   rfkill   tty11  tty22  tty33  tty44  tty55  tty9       vcs1   vcsa6     video12
btrfs-control  gpiochip0  loop5         net        ram15   serial   tty12  tty23  tty34  tty45  tty56  ttyAMA0    vcs2   vcsm-cma  video13
bus            gpiomem    loop6         null       ram2    serial1  tty13  tty24  tty35  tty46  tty57  ttyprintk  vcs3   vcsu      video14
cachefiles     hwrng      loop7         ppp        ram3    shm      tty14  tty25  tty36  tty47  tty58  ttyUSB0    vcs4   vcsu1     video15
char           initctl    loop-control  ptmx       ram4    snd      tty15  tty26  tty37  tty48  tty59  uhid       vcs5   vcsu2     video16
console        input      mapper        pts        ram5    stderr   tty16  tty27  tty38  tty49  tty6   uinput     vcs6   vcsu3     video18
cuse           kmsg       media0        ram0       ram6    stdin    tty17  tty28  tty39  tty5   tty60  urandom    vcsa   vcsu4     watchdog
disk           log        media1        ram1       ram7    stdout   tty18  tty29  tty4   tty50  tty61  v4l        vcsa1  vcsu5     watchdog0
dma_heap       loop0      mem           ram10      ram8    tty      tty19  tty3   tty40  tty51  tty62  vchiq      vcsa2  vcsu6     zero
fb0            loop1      mmcblk0       ram11      ram9    tty0     tty2   tty30  tty41  tty52  tty63  vcio       vcsa3  vhci
fd             loop2      mmcblk0p1     ram12      random  tty1     tty20  tty31  tty42  tty53  tty7   vc-mem     vcsa4  video10

Sollte ein anderer Port als der standardmäßig verwendete Port 8777 verwendet werden, so muss dieser natürlich auch noch mittels dem Argument "--port" angegeben werden.

Zu beachten ist auch, dass die verwendete Baudrate der seriellen Verbindung mit der Einstellung auf der Wärmepumpe übereinstimmen muss.

Diese lässt sich im Menü der Wärmepumpe unter "Modem", "Baud Rate" ändern.

Bei einigen der älteren Wärmepumpen scheint es diesen Menüpunkt nicht zu geben.

Anscheinend lässt sich hier die Baudrate der seriellen Verbindung nicht verändern, sondern läuft fix mit 19200.

Die Einstellung "Verbindungsart" unter "Modem" muss dabei auf "Direkt" gesetzt sein.

Diese Einstellungen lassen sich allerdings nicht als normaler Benutzer vornehmen, weshalb man sich vorher unter dem Menüpunkt "Benutzerebene" als "Fachmann" anmelden muss.

Der Benutzer "Fachmann" wird dabei nach einer kurzen Zeit der Inaktivität wieder automatisch ausgeloggt.

Auch hier soll nochmals angemerkt werden, dass man als eingeloggter "Fachmann" alle möglichen Einstellungen der Wärmepumpe verändern kann und sich somit auch die Wärmepumpe und/oder zugehörige Komponenten beschädigen kann.

Deshalb ist hier besondere Vorsicht geboten!

Die HtREST Applikation besitzt noch weitere Aufrufargumente, welche mit dem folgenden Kommando aufgelistet werden können:

(htrest) pi@htrest:~ $ /home/pi/venv/htrest/bin/htrest --help

Des Weiteren sind diese auch auf der GitHub-Seite des Projekts unter dem Abschnitt "Usage" zu finden.

Lässt sich die HtREST Applikation wie hier ohne Fehler starten,

(htrest) pi@htrest:~ $ htrest -d /dev/ttyUSB0 -b 115200 --host 192.168.11.99 --port 8777 --read-only
HTHEATPUMP: load parameter definitions from: /home/pi/venv/htrest/lib/python3.7/site-packages/htheatpump-1.2.4-py3.7.egg/htheatpump/htparams.csv
Start Heliotherm heat pump REST API server v0.1.8.
Namespace(baudrate=115200, bool_as_int=False, debug=False, device='/dev/ttyUSB0', host='192.168.11.99', logging_config='/home/pi/prog/HtREST/htrest/logging.conf', no_param_verification=False, port=8777, read_only=True, user='')
2020-04-18 12:36:15,834 INFO [htrest.app] open connection to heat pump (<htheatpump.htheatpump.HtHeatpump object at 0xb5dd61f0>)
2020-04-18 12:36:15,873 INFO [htrest.app] successfully connected to heat pump #123456
2020-04-18 12:36:15,904 INFO [htrest.app] software version = 3.0.20 (273)
2020-04-18 12:36:15,950 INFO [htrest.app] *** created Flask app <Flask 'htrest.app'> with config <Config {'ENV': 'production', 'DEBUG': False, 'TESTING': False, 'PROPAGATE_EXCEPTIONS': None, 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SECRET_KEY': None, 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(days=31), 'USE_X_SENDFILE': False, 'SERVER_NAME': None, 'APPLICATION_ROOT': '/', 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_SECURE': False, 'SESSION_COOKIE_SAMESITE': None, 'SESSION_REFRESH_EACH_REQUEST': True, 'MAX_CONTENT_LENGTH': None, 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(seconds=43200), 'TRAP_BAD_REQUEST_ERRORS': None, 'TRAP_HTTP_EXCEPTIONS': False, 'EXPLAIN_TEMPLATE_LOADING': False, 'PREFERRED_URL_SCHEME': 'http', 'JSON_AS_ASCII': True, 'JSON_SORT_KEYS': True, 'JSONIFY_PRETTYPRINT_REGULAR': False, 'JSONIFY_MIMETYPE': 'application/json', 'TEMPLATES_AUTO_RELOAD': None, 'MAX_COOKIE_SIZE': 4093, 'SWAGGER_UI_DOC_EXPANSION': 'list', 'RESTX_VALIDATE': True, 'RESTX_MASK_SWAGGER': False, 'ERROR_404_HELP': False, 'BUNDLE_ERRORS': True}>
Map([<Rule '/api/v1/faultlist/size' (OPTIONS, HEAD, GET) -> api.faultlist_fault_list_size>,
 <Rule '/api/v1/faultlist/last' (OPTIONS, HEAD, GET) -> api.faultlist_last_fault>,
 <Rule '/api/v1/swagger.json' (OPTIONS, HEAD, GET) -> api.specs>,
 <Rule '/api/v1/faultlist/' (OPTIONS, HEAD, GET) -> api.faultlist_fault_list>,
 <Rule '/api/v1/fastquery/' (OPTIONS, HEAD, GET) -> api.fastquery_fast_query_list>,
 <Rule '/api/v1/datetime/' (PUT, OPTIONS, HEAD, GET) -> api.datetime_date_time>,
 <Rule '/api/v1/timeprog/' (OPTIONS, HEAD, GET) -> api.timeprog_time_progs>,
 <Rule '/api/v1/device/' (OPTIONS, HEAD, GET) -> api.device_device>,
 <Rule '/api/v1/param/' (PUT, OPTIONS, HEAD, GET) -> api.param_param_list>,
 <Rule '/api/v1/' (OPTIONS, HEAD, GET) -> api.doc>,
 <Rule '/api/v1/' (OPTIONS, HEAD, GET) -> api.root>,
 <Rule '/api/v1/faultlist/<id>' (OPTIONS, HEAD, GET) -> api.faultlist_fault_entry>,
 <Rule '/api/v1/fastquery/<name>' (OPTIONS, HEAD, GET) -> api.fastquery_fast_query>,
 <Rule '/api/v1/timeprog/<id>/<day>/<num>' (PUT, OPTIONS, HEAD, GET) -> api.timeprog_time_prog_entry>,
 <Rule '/api/v1/timeprog/<id>' (PUT, OPTIONS, HEAD, GET) -> api.timeprog_time_prog>,
 <Rule '/api/v1/param/<name>' (PUT, OPTIONS, HEAD, GET) -> api.param_param>,
 <Rule '/swaggerui/<filename>' (OPTIONS, HEAD, GET) -> restx_doc.static>,
 <Rule '/static/<filename>' (OPTIONS, HEAD, GET) -> static>])
 * Serving Flask app "htrest.app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
...

kann auch schon mittels Webbrowser auf die Swagger UI Seite der HtREST Applikation unter

    http://192.168.11.99:8777/api/v1/

gewechselt und die einzelnen Funktionalitäten getestet werden.

Natürlich ist auch hier die IP-Adresse (und Port-Nummer) wieder entsprechend anzupassen.

Innerhalb dieser Swagger UI Seite lassen sich alle unterstützten Kommandos interaktiv ausprobieren und testen.

Eine detaillierte Beschreibung aller Kommandos findet sich wieder auf der GitHub-Seite des Projekts.

Dem ein oder anderen ist vielleicht schon aufgefallen, dass die HtREST Applikation im obigen Statement mit dem Argument "--read-only" aufgerufen wurde.

Dies dient zum Schutz, damit man sich beim Herumspielen und Testen nicht irgendwelche Parameter auf der Wärmepumpe verstellt.

Die HtREST Applikation greift bei Angabe dieses Arguments nur lesend auf die Wärmepumpe zu und ignoriert jegliche schreibenden Kommandos.

Ist ein schreibender Zugriff dann allerdings gewünscht, um z.B. die Betriebsart über die Loxone Steuerung zu verändern, muss dieses Argument natürlich entfernt werden.

Für die ersten Tests ist es aber auf alle Fälle empfehlenswert!

Des Weiteren muss für die Zusammenarbeit mit Loxone das Argument "--bool-as-int" angegeben werden, damit die HtREST Applikation boolesche Werte (true/false) als numerische Werte (0/1) interpretiert und auch zurückliefert.

Die Loxone Steuerung kann nämlich leider keine boolesche Werte verarbeiten.

Zugriff von Loxone aus

Als nächstes kann man sich daran machen, die gewünschten Parameter der Heliotherm Wärmepumpe auf der Loxone mittels "Virtuellen HTTP Ein- bzw. Ausgängen" verfügbar zu machen.

Lesender Zugriff

Zuerst erstellen wir uns zum Lesen einer oder mehrerer Parameter von der Wärmepumpe einen "Virtuellen HTTP Eingang" unter den "Virtuellen Eingängen" in der Loxone Config.

Unter den Eigenschaften des "Virtuellen HTTP Eingang" vergeben wir diesem erst einmal eine ordentliche Bezeichnung, wie z.B. "HT alle Parameter" (zum Lesen des gesamten Parametersatz von der Wärmepumpe).

Als URL geben wir den Link zur Abfrage aller bekannten Heliotherm Parameter lt. Beschreibung auf der HtREST GitHub-Seite an, wobei IP-Adresse und Portnummer natürlich wieder entsprechend angepasst werden muss:

http://192.168.0.156:8080/api/v1/param/

Abfragezyklus, Timeout und Anzahl erlaubte Timeouts kann entsprechend den eigenen Vorstellungen gewählt werden.

Hier wird z.B. alle 60 Sekunden der gesamte bekannte Parametersatz von der Wärmepumpe gelesen, wobei das Timeout bei 4 Sekunden liegt.

Was dabei unter "gesamte bekannte Parametersatz" zu verstehen ist, wird etwas später genauer erläutert.

Anschließend fügen wir einen "Virtueller HTTP Eingang Befehl" zum Extrahieren der empfangenen Daten von der HtREST Applikation ein.

Die angefragten Parameter kommen von der HtREST Applikation im JSON-Format zurück, für die obige Anfrage unter http://192.168.0.156:8080/api/v1/param/ also z.B.:

{
    ...
    "WW Hysterese Minimaltemp.": 5,
    "WW Minimaltemp.": 42,
    "WW Hysterese Normaltemp.": 5,
    "WW Normaltemp.": 50,
    "HKR RLT Soll_uHG (Heizkurve)": 32.5,
    "HKR RLT Soll_0 (Heizkurve)": 28,
    "HKR RLT Soll_oHG (Heizkurve)": 23,
    "HKR Heizgrenze": 18,
    "HKR Absenktemp. (K)": -2,
    "HKR Aufheiztemp. (K)": 2,
    "HKR Soll_Raum": 22.5,
    "Betriebsart": 1,
    ...
}

Um nun z.B. den Wert für den Parameter "HKR RLT Soll_0 (Heizkurve)" aus der JSON-Antwort zu extrahieren, geben wir gemäß der Loxone Dokumentation unter "Befehlserkennung" des "Virtueller HTTP Eingang Befehl" folgendes ein:

\iHKR RLT Soll_0 (Heizkurve)": \i\v

Wichtig dabei ist zwischen den beiden \i Kennungen der Parametername inklusive den doppelten Anführungszeichen oben, dem Doppelpunkt und dem Leerzeichen!

Nur so kann die Loxone durch einen passenden Match den zugehörigen Parameterwert ermitteln.

Es sei nochmals kurz erwähnt, dass die Loxone hier nur Zahlenwerte verarbeiten kann, weshalb auch die Verwendung des Arguments "--bool-as-int" beim Aufruf der HtREST Applikation erforderlich ist.

Zusätzlich lassen sich über die Einstellungen unter dem Punkt "Validierung" des "Virtueller HTTP Eingang Befehl" die empfangenen Werte noch auf ihre Gültigkeit hin überprüfen.

Minimal und Maximalwert der gängigsten Parameter findet man z.B. hier:

    https://htheatpump.readthedocs.io/en/latest/htparams.html

Vollständige Liste aller verfügbaren Parameter der eigenen Heliotherm Wärmepumpe:

Eine vollständige Liste aller verfügbaren Parameter der eigenen Heliotherm Wärmepumpe inklusive deren Minimal- und Maximalwert lässt sich auch mit Hilfe des Python Scripts htcomplparams erstellen.

Dieses Script wird zusammen mit der HtREST Applikation installiert und lässt sich einfach innerhalb der virtuellen Arbeitsumgebung ausführen:

(htrest) pi@htrest:~ $ htcomplparams --device /dev/ttyUSB1 --csv
HTHEATPUMP: load parameter definitions from: /home/pi/prog/htheatpump/htheatpump/htparams.csv
connected successfully to heat pump with serial number 123456
software version = 3.0.20 (273)
'SP,NR=0' [Language]: VAL=0, MIN=0, MAX=4 (dtype=INT)
'SP,NR=1' [TBF_BIT]: VAL=0, MIN=0, MAX=1 (dtype=BOOL)
'SP,NR=2' [Rueckruferlaubnis]: VAL=1, MIN=0, MAX=1 (dtype=BOOL)
...
write data to: /home/pi/prog/htheatpump/htparams-123456-3_0_20-273.csv

Siehe auch: https://htheatpump.readthedocs.io/en/latest/htscripts.html#htcomplparams

Mit welcher Einheit der ausgelesene Parameterwert dargestellt werden soll, lässt sich über den Punkt "Einheit" im "Virtueller HTTP Eingang Befehl" definieren:

    <v.1> °C

Für alle weiteren Parameter sind einfach die soeben beschriebene Schritte zum Anlegen eines "Virtueller HTTP Eingang Befehl" zu wiederholen.

Schreibender Zugriff

Das Schreiben eines Parameters von der Loxone Steuerung aus läuft recht ähnlich ab.

Dazu erstellen wir uns einen "Virtuellen Ausgang" unter den "Virtuellen Ausgängen" in der Loxone Config.

Dann vergeben wir diesem wieder einen ordentlichen Namen und tragen unter der Adresse in den Einstellungen die URL ein, unter der die HtREST Applikation erreichbar ist:

http://192.168.0.156:8080

Anschließend fügen wir für jeden zu schreibenden Parameter einen "Virtueller Ausgang Befehl" ein.

Unter "Befehl bei EIN" tragen wir für jeden Parameter die Zeichenfolge /api/v1/param/ gefolgt vom Parameternamen ein, also z.B.:

/api/v1/param/HKR Soll_Raum

Da die Parameterwerte wieder im JSON-Format übertragen werden, geben wir unter "HTTP-Erweiterung bei EIN" noch

accept: application/json\r\nContent-Type: application/json

an und als "HTTP-Post-Befehl bei EIN" den folgenden Format-String:

{ "value": <v.1> }

Somit ist gewährleistet, dass der Parameterwert im JSON-Format an die HtREST Applikation übertragen wird.

Abschließend muss nur noch unter "HTTP Methode bei EIN" die Methode "PUT" ausgewählt werden.

Unter "Einheit" beim "Virtueller Ausgang Befehl" lässt sich dann noch analog zum "Virtueller HTTP Eingang Befehl" die Einheit des zu schreibenden Parameterwertes definieren:

<v.1> °C

Somit wäre das Lesen und Schreiben von Parameterwerten von der Loxone Steuerung aus abgeschossen.

Eine Loxone Vorlage mit den soeben beschriebenen "Virtuellen HTTP Ein- bzw. Ausgängen" für den Zugriff auf die Heliotherm Wärmepumpe findet sich zum Download im Anhang dieses Dokuments.

Was jetzt noch fehlt ist die Einrichtung der HtREST Applikation als Service, damit diese bei jedem Neustart des Raspberry Pi automatisch startet.

Automatischer Start

Damit die HtREST Applikation mit den von uns gewünschten Argumenten automatisch beim Reboot des Raspberry Pi startet, verpacken wir den Aufruf in einen systemd Service.

Dazu erstellen wir uns zuerst mittels nano eine passende System Unit-Datei:

pi@htrest:~ $ sudo nano -w /etc/systemd/system/htrest.service

Anschließend fügen wir den Inhalt der Datei unter

    https://github.com/dstrigl/HtREST/blob/master/htrest.service

in die soeben erstellte Datei ein (Copy & Paste) und passen die Aufrufargumente in der Zeile 8

ExecStart=/home/pi/venv/htrest/bin/htrest -d ...

entsprechend unseren Vorgaben an (Pfad zum seriellen Device, Baudrate, Portnummer, usw.).

Dann verlassen wir den nano Editor mittels "CTRL-X" und Drücken der Taste "Y" zum Speichern des Inhalts.

Danach aktivieren wir die gerade erstellte System Unit mittels:

pi@htrest:~ $ sudo systemctl enable htrest.service

Damit ist gewährleistet, dass diese automatisch beim Bootvorgang gestartet wird.

Um zum Testen des erstellen Service jetzt nicht zwingend einen Neustart durchführen zu müssen kann dieser gleich in der aktuellen Session mittels

pi@htrest:~ $ sudo systemctl start htrest.service

gestartet werden.

Gestoppt werden kann der Service mittels:

pi@htrest:~ $ sudo systemctl stop htrest.service

Ein Neustart des Service kann mittels

pi@htrest:~ $ sudo systemctl restart htrest.service

erzwungen werden.

Recht hilfreich ist auch noch das status Kommando, mit dessen Hilfe der aktuelle Status des Service ermittelt werden kann:

pi@htrest:~ $ sudo systemctl status htrest.service
● htrest.service - Heliotherm heat pump REST API server
   Loaded: loaded (/etc/systemd/system/htrest.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2022-01-10 15:41:55 CET; 2 days ago
 Main PID: 474 (htrest)
    Tasks: 1 (limit: 877)
   CGroup: /system.slice/htrest.service
           └─474 /home/pi/venv/htrest/bin/python3 /home/pi/venv/htrest/bin/htrest -d /dev/ttyUSB0 -b 115200 --host 192.168.11.99 --port 8777

Jan 12 17:33:11 rpi-htrest htrest[474]: 2022-01-12 17:33:11,422 INFO [htrest.apis.param|get]: *** [GET] http://192.168.11.99:8777/api/v1/param/
Jan 12 17:33:26 rpi-htrest htrest[474]: 2022-01-12 17:33:26,413 INFO [htrest.apis.param|get]: *** [GET] http://192.168.11.99:8777/api/v1/param/
Jan 12 17:33:41 rpi-htrest htrest[474]: 2022-01-12 17:33:41,421 INFO [htrest.apis.param|get]: *** [GET] http://192.168.11.99:8777/api/v1/param/
...

Weiterführende Dokumentation zu systemd und Service Units findet sich z.B. hier:

Bei Problemen mit dem HtREST systemd Service, sollte man sich zuerst einmal immer den aktuellen Status des Service ansehen und dann noch mittels folgendem Kommando den zugehörigen Log:

pi@htrest:~ $ journalctl -f -u htrest

-- Logs begin at Mon 2022-01-10 15:41:25 CET. --
Jan 12 17:32:56 rpi-htrest htrest[474]: 2022-01-12 17:32:56,409 INFO [htrest.apis.param|get]: *** [GET] http://192.168.11.99:8777/api/v1/param/
Jan 12 17:33:11 rpi-htrest htrest[474]: 2022-01-12 17:33:11,422 INFO [htrest.apis.param|get]: *** [GET] http://192.168.11.99:8777/api/v1/param/
Jan 12 17:33:26 rpi-htrest htrest[474]: 2022-01-12 17:33:26,413 INFO [htrest.apis.param|get]: *** [GET] http://192.168.11.99:8777/api/v1/param/
Jan 12 17:33:41 rpi-htrest htrest[474]: 2022-01-12 17:33:41,421 INFO [htrest.apis.param|get]: *** [GET] http://192.168.11.99:8777/api/v1/param/
...

Hat das alles soweit funktioniert, sollte man vielleicht noch mittels

pi@htrest:~ $ sudo reboot

einen Neustart des Raspberry Pi durchführen und sich anschließend den Status des erstellten Service ansehen, um sicherzugehen, dass der Service auch wirklich ohne Fehler startet.

Parametersatz & -definitionen

Abschließend soll noch kurz erläutert werden, was sich mit dem oben angesprochenen "bekannten Parametersatz" auf sich hat.

Der Zugriff auf die einzelnen Parameter der Heliotherm Wärmepumpe läuft über nummerierte SP- und MP-Datenpunkte ab.

So ist z.B. die aktuelle Vorlauftemperatur unter dem Datenpunkt "MP,NR=3" zu finden.

Unter welchem SP- bzw. MP-Datenpunkt nun ein Parameter zu finden ist, ist in der CSV-Datei htparams.csv festgehalten.

Das htheatpump Paket, auf dem die HtREST Applikation aufbaut, liefert standardmäßig bereits eine CSV-Datei mit einigen der gängigsten Parametern mit.

Zu finden ist diese auch auf der GitHub-Seite des Projekts unter

    https://github.com/dstrigl/htheatpump/blob/master/htheatpump/htparams.csv

oder der Projektdokumentation unter

    https://htheatpump.readthedocs.io/en/latest/htparams.html.

Des Weiteren ist es möglich seine eigene benutzerspezifische CSV-Datei mit den Parameter-Definitionen unter ~/.htheatpump/htparams.csv anzulegen.

Wenn vorhanden, greift die htheatpump Bibliothek darauf zu, ansonsten wird die mitgelieferte Datei verwendet.

Innerhalb dieser CSV-Datei unter ~/.htheatpump/htparams.csv ist es nun möglich sich seinen eigenen "bekannten Parametersatz" zusammenzustellen, wenn einem der mitgelieferte nicht passen sollte.

Grund könnte z.B. sein, dass man den einzelnen Parametern andere Namen zuweisen möchte um Leerzeichen in Parameternamen zu vermeiden.

Ein anderer Grund könnte sein den Parametersatz um bestimmte Parameter zu erweitern.

Wie bereits weiter oben beschrieben, ist es auch möglich sich eine vollständige Liste aller verfügbaren Parameter seiner Heliotherm Wärmepumpe (inkl. deren Minimal- und Maximalwert) mit Hilfe des Python Scripts htcomplparams.py zu erstellen.

Siehe dazu auch die Beschreibung unter:

    https://htheatpump.readthedocs.io/en/latest/htscripts.html#htcomplparams

Ein kompletter Auszug der verfügbaren Parameter einer Heliotherm HP08S10W-WEB findet sich z.B. hier:

    Parameterdefinition Heliotherm HP08S10W-WEB, SW 3.0.20 (273)

Es ist jedoch aus Performance- und Sicherheitsgründen empfohlen, nur jene Parameter der Parameter-Definitionen in der CSV-Datei hinzuzufügen, welche auch wirklich benötigt werden.

Somit läuft man nicht Gefahr sich aus Unachtsamkeit bestimmte Parameter zu verstellen und auch die oben beschrieben Abfrage des gesamten Parametersatz (unter /api/v1/param/) läuft wesentlich schneller ab.

Weiterführende Links

Anhang

Unterstützung

Du möchtest den Autor unterstützen?

Über einen Kaffee würde er sich sehr freuen:


  • Keine Stichwörter