FHEM - Anwendungen > Heizungssteuerung/Raumklima

Bosch Junkers Control CT100

(1/10) > >>

Mike_GKA:
Meine Bosch Junkers Control CT100 habe ich mit den Modulen BDKM und KM200 nicht ansprechen können und ich habe sehr viel Zeit investiert.
Bei KM200 kommt die Fehlermeldung: No proper Communication with Gateway: write error: Connection reset by peer
und bei BDKM: communication ERROR in state reading ids ERROR - retrying every 60s: write error: Connection reset by peer

Bei meinen Recherchen fand ich den nefit-easy-server: https://github.com/robertklep/nefit-easy-http-server

Diesen habe ich erfolgreich installiert und mit FHEM angesprochen.
Wie man dies macht beschreibe ich nachfolgend für Raspberry Model 1 (sollte auch für neuere Raspberry Modell funktionieren, jedoch muss dort ein anderes node-Paket genommen werden)
Der nefit-easy-server braucht node (in neuerer Version), das zuerst installiert werden muss.


--- Code: ---cd ~
wget https://nodejs.org/dist/v6.11.1/node-v6.11.1-linux-armv6l.tar.xz
tar -xvf node-v6.11.1-linux-armv6l.tar.xz
cd node-v6.11.1-linux-armv6l/
sudo cp -R * /usr/local/
node -v

--- Ende Code ---

Ich bekam dann einen Fehler wegen fehlender Abhängigkeiten, die ich noch installieren musste:

--- Code: ---sudo apt-get install gcc-4.8 g++-4.8
--- Ende Code ---

Damit lief node und jetzt wird der nefit-easy-server installiert:

--- Code: ---sudo npm i nefit-easy-http-server -g
--- Ende Code ---

Das dauert eine ganze Weile. Man kann den Erfolg dann prüfen mit:

--- Code: ---easy-server -h
--- Ende Code ---

Um den easy-server zu starten und dann auch bei einem Restart vom Raspberry neu zu starten habe ich ein kleines Skript start_nefit-easy-http-server.sh  erstellt mit folgendem Inhalt:

--- Code: ---#!/bin/bash
easy-server --serial=<serial> --access-key=<access-kex> --password=<password> --host=<host>

--- Ende Code ---

<serial>: ist der Name vom CT100, eine 9 stellige Nummer ohne die Lerrzeichen
<access-key>: steht hinten auf der CT100
<password>: ist das Passwort, das man selber vergeben hat bei der Inbetriebnahme vom CT100
--host=<host>: ist optional. Default ist 127.0.0.1 dann kann man nur innerhalb des Raspberry auf den easy-server zugreifen, sonst setzt man hier halt die IP-Adresse des Raspberry.

Damit nicht jeder diese Daten sehen kann:

--- Code: ---sudo chmod 711 start_nefit-easy-http-server.sh
--- Ende Code ---

Zum Autostart verwende ich pm2 (könnte man auch anders machen):

--- Code: ---sudo npm install pm2@latest –g
sudo pm2 start <path>/start_nefit-easy-http-server.sh
sudo pm2 save

--- Ende Code ---

<path> muss entsprechend angepasst werden.
Das dauert auch wieder eine ganze Weile, also Geduld!

Damit pm2 auch automatisch startet und damit dann auch der nefit-easy-http-server.

--- Code: ---sudo pm2 startup

--- Ende Code ---

So jetzt müsste also eigentlich alles laufen und wir testen z.B. mit:

--- Code: ---curl http://127.0.0.1:3000/api/status
--- Ende Code ---

Statt 127.0.0.1 muss hier die IP-Adresse des Raspberry stehen, falls man oben host gesetzt hat.
Die Antwort ist ein JSON-String, der z.B. die Temperatur im Haus, die Soll-Temperatur und die Außen-Temperatur enthält.
Mit:

--- Code: ---curl -XPOST http:// 127.0.0.1:3000/bridge/heatingCircuits/hc1/temperatureRoomManual -d '{"value":20}' -H 'Content-Type: application/json'
--- Ende Code ---

kann man dann z.B. die Soll-Temperatur setzen.
Interessant ist auch:

--- Code: ---curl http:// 127.0.0.1:3000/bridge/ecus/rrc/recordings/yearTotal
--- Ende Code ---

Damit bekommt den Verbrauch seit Jahresbeginn in kWh.

Weitere Infos zum easy-server und dem api findet man unter:
https://github.com/robertklep/nefit-easy-http-server
https://github.com/robertklep/nefit-easy-core/wiki/List-of-endpoints

Da wir jetzt den easy-server mit http ansprechen können, ist natürlich in FHEM das Modul HTTPMOD bestens geeignet. Also definieren wir in FHEM:

--- Code: ---define CT100_Status HTTPMOD http://127.0.0.1:3000/api/status 900
attr CT100_Status userattr reading01JSON reading01Name reading02JSON reading02Name reading03JSON reading03Name
attr CT100_Status reading01JSON in house temp
attr CT100_Status reading01Name t_inhouse
attr CT100_Status reading02JSON temp setpoint
attr CT100_Status reading02Name t_setpoint
attr CT100_Status reading03JSON outdoor temp
attr CT100_Status reading03Name t_outdoor

--- Ende Code ---

Zum Lesen der Verbrauchsdaten definieren wir ein weiteres HTTPMOD-Device:

--- Code: ---define CT100_yearTotal HTTPMOD http://127.0.0.1:3000/bridge/ecus/rrc/recordings/yearTotal 900
attr CT100_yearTotal userattr reading01JSON reading01Name reading02JSON reading02Name
attr CT100_yearTotal reading01JSON value
attr CT100_yearTotal reading01Name value
attr CT100_yearTotal reading02JSON unitOfMeasure
attr CT100_yearTotal reading02Name unit

--- Ende Code ---

Der Rest ist dann Standard, also bei Bedarf Logfiles und svg-Grafiken definieren.

Geht man in https://github.com/robertklep/nefit-easy-core/wiki/List-of-endpoints die „List of endpoints“ durch, dann kann man da noch eine ganze Menge machen. Aber mir reichte das mal für den Anfang.

Es ist meiner Meinung nach auch suboptimal für jeden „Endpoint“ ein HTTPMOD-Device zu definieren. Das kann man sicher geschickter machen, aber da reichen meine FHEM Kenntnisse nicht aus.
Vielleicht greift ja mal ein anderer diesen Ansatz auf.

PS: Das ist mein erster Beitrag hier im Forum. Nachdem ich so viel in den letzten Monaten von den unzähligen Beiträgen als FHEM-Anfänger profitiert habe, dachte ich es wäre vielleicht mal Zeit, selber etwas bei zu steuern.

chriz:
Hi Mike,

klasse Arbeit, habe hier ebenfalls einen CT100 am Start und habe lange nach einer Einbindung in FHEM gesucht. Mittlerweile habe ich das HEATRONIC  Modul im Einsatz (via USB Adapter an der Junkers Therme). Damit kann ich aber leider nur den BUS lesen, also keine Werte setzen.

Kann man mit dem nefit-easy-server nicht sogar den Betriebsdruck der Therme auslesen? Hab das mal auf einigen Screenshots gesehen.



Grüße
Chris


Mike_GKA:
Hi Chris,

wie soeben probiert geht das auch:

curl http://127.0.0.1:3000/api/pressure
liefert
{"pressure":25.5,"unit":"bar"}

und alternativ

curl http://127.0.0.1:3000/bridge/system/appliance/systemPressure
liefert
{"id":"/system/appliance/systemPressure","type":"floatValue","recordable":0,"writeable":0,"value":25.5,"unitOfMeasure":"bar","minValue":0,"maxValue":25}

Die unzähligen "api-calls" und "endpoints" sind gelistet (aber nicht sonderlich dokumentiert) zu finden unter:
https://github.com/robertklep/nefit-easy-http-server
https://github.com/robertklep/nefit-easy-core/wiki/List-of-endpoints

Da ich da kein Spezialist in Sachen Heizung bin, ist das bei mir immer raten und probieren.

Gruß
Mike

Mike_GKA:
Nachtrag:
Gerade habe ich das Ganze auch auf PI Modell 3 installiert:
Dies gelang völlig analog. Die Annahme, dass node auf dem Modell 3 anders installiert werden muss, stimmte nicht.
Es musste aber nicht die fehlende Abhängigkeit `GLIBCXX_3.4.18' insatlliert werden.

Noch etwas war extrem augenscheinlich: Die Installation erfolgte um ein vielfaches schneller  ;)

Dabei ist mir noch folgendes aufgefallen:
Der PI3 auf dem ich gerade installiert habe läuft in einem völlig anderen Netz, trotzdem funktionierte der Zugriff auf die CT100 einwandfrei.

Das kann für den ein oder anderen ein Vorteil sehe; ich sehe das aber eher etwas kritisch:
Zumindest der Kommunikationsaufbau vom easy-server zur CT100 erfolgt immer über einen Dritten (Bosch, Junkers). Das wollte ich eigentlich vermeiden.
Aber ich hatte das zuvor schon vermutet, da beim Starten des easy-servers keine IP-Adresse angeben werden muss.

SouzA:
Moin,

danke für deine Arbeit.
Mir ist noch nicht ganz klar, wir der nefit Server an die Daten kommt. Auch beim zweiten durchschauen habe ich keine URL im Github gefunden, die auf den Bosch-Server deuten könnte.

Ansonsten könnte ich mir vorstellen, dass das HTTPMOD auch ohne den Server hinbekommen könnte. Es fehlt halt die URL...
Da muss ich mich aber auch noch einlesen.

Bis denn
SouzA

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln