Durch einen Zufall bin ich auf das tolle github.Projekt ‘radiator’ von Daniel Höpfl gestossen. Er hat es geschafft, via RS232 port sämtliche Daten der ‘alten Steuerung’ von Fröling auszulesen.
Da es keine direkte Schnittstelle in den Homeassistant gibt, schildere ich hier gerne den Prozess mittels scriptprogrammierung, nodered und mqtt als Hilfsmittel.
Ziel war zunächst diese Ausgabe der Daten, die sich alle 120 Sekunden ‘refresht’.
Vorhensweise:
- raspi 4B mit Bookworm lite aufbauen und alles Pakete aktualiseren. Dann das apt autokonf nachinstallieren
- das githubprojekt gezippt herunterladen und in ein Verzeichnis auf dem pi entpacken. Anschliessend mit ./configure, make, make install den radiator installieren.
Einen geeigneten RS232/USB Adapter zwischen den Wartungsport der Fröling und einen USB Port des Raspi bauen. Dabei das Kabel (cat5 oder 6) von TX auf RX und von RX auf TX ‘kreuzen’.
Den Radiator probeweise mit ‘radiator -D4 T 2 /dev/ttyUSB0’ probestarten. Blinken am Adapter die TX/RX LED’s ist alles okay.
Danach auf dem Raspi mosquitto, mosquitto client und nodered installieren.
Mittels mqtt Explorer eine Testverbindung zwischen raspi und homeassistant herstellen.
Wenn das payload im Explorer auf dem homeassistant angezeigt wird, steht auch diese Verbindung.
Nun auf dem Pi ein selbsterstelltes script abarbeiten, dass die Standardausgabe des ‘radiator’ in JSON-string wandelt.
Der Standard sieht so aus:
.}.. .2
00 [] = [ Feuer-Aus ] (5)
01 [Zustand] = [1] (1)
02 [ROST] = [0] (0)
03 [Kesseltemp] = [24°] (48)
04 [Abgastemp.] = [32°] (32)
05 [Abgas. SW ] = [42°] (42)
06 [KessStellGr] = [100%] (100)
07 [Saugzug ] = [0%] (0)
08 [Prim.Luft ] = [0%] (0)
09 [Prim.Kl.pos] = [3%] (3)
0a [Rest-O2] = [1.9%] (19)
0b [O2-Regler] = [0%] (0)
0c [Sek.Luft ] = [0%] (0)
0d [Sek.Kl.pos] = [3%] (3)
0e [Puffert.ob] = [24°] (47)
0f [Puffert.un] = [21°] (42)
10 [Boilertemp] = [50°] (101)
11 [ölkessel ] = [56°] (112)
12 [Außentemp] = [26°] (52)
13 [Vorlauft.1sw] = [0°] (0)
14 [Vorlauft.1] = [36°] (71)
15 [KTY6_H2] = [-30°] (65476)
16 [KTY7_H2] = [-30°] (65476)
17 [Laufzeit:] = [6558h] (6558)
18 [F-halt:] = [3200.0h] (32000)
19 [Boardtemp.] = [32°] (32)
Der JSON string so:
{
"Zustand": 1,
"ROST": 0,
"Kesseltemp": 24,
"Abgastemp.": 31,
"Abgas. SW ": 41,
"KessStellGr": 100,
"Saugzug ": 0,
"Prim.Luft ": 0,
"Prim.Kl.pos": 3,
"Rest-O2": 1.9,
"O2-Regler": 0,
"Sek.Luft ": 0,
"Sek.Kl.pos": 3,
"Puffert.ob": 24,
"Puffert.un": 21,
"Boilertemp": 46,
"Oelkessel ": 51,
"Außentemp": 28,
"Vorlauft.1sw": 0,
"Vorlauft.1": 32,
"Laufzeit:": 6558,
"F-halt:": 3200.0,
"Boardtemp.": 31
}
Nun mit nodered einen flow erstellen, der den radiator-aufruf nach 60 Sekunden unterbricht (dann sind die Messwerte in einer Datei gespeichert) und die Rohdaten in JSON wandelt.
Diese Daten werden dann anschliessend via mqtt zum homeassistant geschickt.
Und im homeassistant dann die Sensoren händisch anlegen (keine discoveryfunktion).
sensor:
- name: Abgastemperatur
state_topic: froeling/radiator
unique_id: 1c19be29-b788-4631-85ee-39daaf7e8e88
unit_of_measurement: °C
device_class: temperature
state_class: measurement
value_template: "{{ value_json['Abgastemp.'] }}"
- name: Abgastemperatur-Sollwert
state_topic: froeling/radiator
unique_id: 30f5754a-086a-41fa-9d8d-6caf1f37cf3a
unit_of_measurement: °C
device_class: temperature
state_class: measurement
value_template: "{{ value_json['Abgas. SW '] }}"
- name: Puffer-T-oben
state_topic: froeling/radiator
unique_id: be4ca6c0-5346-424c-aeaf-dbc7087660ae
unit_of_measurement: °C
device_class: temperature
state_class: measurement
value_template: "{{ value_json['Puffert.ob'] }}"
- name: Puffer-T-unten
state_topic: froeling/radiator
unique_id: 7f784cb7-deb0-49e2-b94f-f160a798a365
unit_of_measurement: °C
device_class: temperature
state_class: measurement
value_template: "{{ value_json['Puffert.un'] }}"
- name: Warmwassertemperatur
state_topic: froeling/radiator
unique_id: f34d54d2-447f-4343-a0dc-965062a447e7
unit_of_measurement: °C
device_class: temperature
state_class: measurement
value_template: "{{ value_json['Boilertemp'] }}"
Hier ist es super wichtig, auf jedes Zeichen zu achten - so haben mich “gutgemeinte” Anführungsstriche lange nach einem Fehler suchen lassen. Auch die value_template Funktion muss exakt so formuliert sein.
Dann noch ein Dashboard mit den neuen Entitäten bestücken und fertig ist die Überwachung der kombinierten Scheitholz/Ölanlage mit Nutzung der ohnehin vorhandenen Daten.
So macht der homeassistant Spass!!
Mein Dank geht an Daniel, der mich per mail stets supportet hat.