Bosch Junkers Control CT100

Begonnen von Mike_GKA, 21 Juli 2017, 11:10:45

Vorheriges Thema - Nächstes Thema

SouzA

Hi,

sooo:

Zitat von: Mike_GKA am 10 Oktober 2017, 11:27:06

Was gibt der PM2 Status zurück?

sudo pm2 status





sudo pm2 status
┌──────────────────────────────┬──────┬────────┬───┬─────┬──────────┐
│ Name                         │ mode │ status │ ↺ │ cpu │ memory   │
├──────────────────────────────┼──────┼────────┼───┼─────┼──────────┤
│ start_nefit-easy-http-server │ fork │ online │ 0 │ 0%  │ 2.5 MB   │


Zitat von: Mike_GKA am 10 Oktober 2017, 11:27:06
Schau Dir mal den Log vom Nefit-server an, diesen erhälst Du z.B. mit:

sudo pm2 logs start_nefit-easy-http-server




pi@raspberrypi:~ $ sudo pm2 logs start_nefit-easy-http-server
[TAILING] Tailing last 15 lines for [start_nefit-easy-http-server] process (change the value with --lines option)
/root/.pm2/logs/start-nefit-easy-http-server-out-0.log last 15 lines:
0|start_ne | SyntaxError: Unexpected token � in JSON at position 0
0|start_ne |     at Object.parse (native)
0|start_ne |     at pending.(anonymous function).send.then.e (/usr/lib/node_modules/nefit-easy-http-server/node_modules/nefit-easy-core/lib/index.js:222:28)
0|start_ne |     at tryCatcher (/usr/lib/node_modules/nefit-easy-http-server/node_modules/bluebird/js/release/util.js:16:23)
0|start_ne |     at Promise._settlePromiseFromHandler (/usr/lib/node_modules/nefit-easy-http-server/node_modules/bluebird/js/release/promise.js:512:31)
0|start_ne |     at Promise._settlePromise (/usr/lib/node_modules/nefit-easy-http-server/node_modules/bluebird/js/release/promise.js:569:18)
0|start_ne |     at Promise._settlePromise0 (/usr/lib/node_modules/nefit-easy-http-server/node_modules/bluebird/js/release/promise.js:614:10)
0|start_ne |     at Promise._settlePromises (/usr/lib/node_modules/nefit-easy-http-server/node_modules/bluebird/js/release/promise.js:693:18)
0|start_ne |     at Async._drainQueue (/usr/lib/node_modules/nefit-easy-http-server/node_modules/bluebird/js/release/async.js:133:16)
0|start_ne |     at Async._drainQueues (/usr/lib/node_modules/nefit-easy-http-server/node_modules/bluebird/js/release/async.js:143:10)
0|start_ne |     at Immediate.Async.drainQueues (/usr/lib/node_modules/nefit-easy-http-server/node_modules/bluebird/js/release/async.js:17:14)
0|start_ne |     at runCallback (timers.js:672:20)
0|start_ne |     at tryOnImmediate (timers.js:645:5)
0|start_ne |     at processImmediate [as _immediateCallback] (timers.js:617:5)
0|start_ne | 127.0.0.1 - - [15/Oct/2017:09:18:48 +0000] "GET /api/status HTTP/1.1" 500 1723 "-" "curl/7.52.1"

/root/.pm2/logs/start-nefit-easy-http-server-error-0.log last 15 lines:
0|start_ne |     at ServerResponse.writeHead (_http_server.js:195:11)
0|start_ne |     at ServerResponse.writeHead (/usr/lib/node_modules/nefit-easy-http-server/node_modules/on-headers/index.js:55:19)
0|start_ne |     at ServerResponse._implicitHeader (_http_server.js:157:8)
0|start_ne |     at ServerResponse.OutgoingMessage.end (_http_outgoing.js:573:10)
0|start_ne |     at ServerResponse.send (/usr/lib/node_modules/nefit-easy-http-server/node_modules/express/lib/response.js:221:10)
0|start_ne |     at app.use (/usr/lib/node_modules/nefit-easy-http-server/lib/cli/server.js:46:18)
0|start_ne |     at Layer.handle_error (/usr/lib/node_modules/nefit-easy-http-server/node_modules/express/lib/router/layer.js:71:5)
0|start_ne |     at trim_prefix (/usr/lib/node_modules/nefit-easy-http-server/node_modules/express/lib/router/index.js:315:13)
0|start_ne |     at /usr/lib/node_modules/nefit-easy-http-server/node_modules/express/lib/router/index.js:284:7
0|start_ne |     at Function.process_params (/usr/lib/node_modules/nefit-easy-http-server/node_modules/express/lib/router/index.js:335:12)
0|start_ne |     at Immediate.next (/usr/lib/node_modules/nefit-easy-http-server/node_modules/express/lib/router/index.js:275:10)
0|start_ne |     at Immediate.<anonymous> (/usr/lib/node_modules/nefit-easy-http-server/node_modules/express/lib/router/index.js:635:15)
0|start_ne |     at runCallback (timers.js:674:20)
0|start_ne |     at tryOnImmediate (timers.js:645:5)
0|start_ne |     at processImmediate [as _immediateCallback] (timers.js:617:5)




Zitat von: Mike_GKA am 10 Oktober 2017, 11:27:06
Dann machst Du in einem zweiten Terminal

curl http://127.0.0.1:3000/api/status


Dann müsste im Log was kommen. Bei mir ist es:

0|start_ne | 127.0.0.1 - - [10/Oct/2017:09:02:49 +0000] "GET /api/status HTTP/1.1" 200 571 "-" "curl/7.38.0"



0|start_ne | 127.0.0.1 - - [15/Oct/2017:09:35:47 +0000] "GET /api/status HTTP/1.1" 500 1723 "-" "curl/7.52.1"
0|start_ne | Error: Invalid character in statusMessage.
0|start_ne |     at ServerResponse.writeHead (_http_server.js:195:11)
0|start_ne |     at ServerResponse.writeHead (/usr/lib/node_modules/nefit-easy-http-server/node_modules/on-headers/index.js:55:19)
0|start_ne |     at ServerResponse._implicitHeader (_http_server.js:157:8)
0|start_ne |     at ServerResponse.OutgoingMessage.end (_http_outgoing.js:573:10)
0|start_ne |     at ServerResponse.send (/usr/lib/node_modules/nefit-easy-http-server/node_modules/express/lib/response.js:221:10)
0|start_ne |     at app.use (/usr/lib/node_modules/nefit-easy-http-server/lib/cli/server.js:46:18)
0|start_ne |     at Layer.handle_error (/usr/lib/node_modules/nefit-easy-http-server/node_modules/express/lib/router/layer.js:71:5)
0|start_ne |     at trim_prefix (/usr/lib/node_modules/nefit-easy-http-server/node_modules/express/lib/router/index.js:315:13)
0|start_ne |     at /usr/lib/node_modules/nefit-easy-http-server/node_modules/express/lib/router/index.js:284:7
0|start_ne |     at Function.process_params (/usr/lib/node_modules/nefit-easy-http-server/node_modules/express/lib/router/index.js:335:12)
0|start_ne |     at Immediate.next (/usr/lib/node_modules/nefit-easy-http-server/node_modules/express/lib/router/index.js:275:10)
0|start_ne |     at Immediate.<anonymous> (/usr/lib/node_modules/nefit-easy-http-server/node_modules/express/lib/router/index.js:635:15)
0|start_ne |     at runCallback (timers.js:674:20)
0|start_ne |     at tryOnImmediate (timers.js:645:5)
0|start_ne |     at processImmediate [as _immediateCallback] (timers.js:617:5)



Zitat von: Mike_GKA am 10 Oktober 2017, 11:27:06
Vielleicht sagt uns das dann etwas??

Noch was: Welche Rasbian-Version hast Du installiert? Mit dem neuen Debian-Stretch habe ich es noch nicht getestet. Ich hoffe bis Ende nächster Woche das auch ausprobiert zu haben.

[Nachtrag:
Auf Debian Stretch habe ich es auch ausprobiert (allerdings noch ohne Einbindung in fhem):
node.js Installation funktionierte völlig identisch,
ebenso die Installation vom Nefit-Server und PM2.
Die Abfrage des CT100-Status mit curl funktionierte ebenso fehlerfrei.
Also auf Stretch läuft das auch]


Ich habe auch Stretch drauf. Hab den Raspi komplett neu aufgesetzt zum testen.

Bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

SouzA

#16
Hat sich erledigt... kriege nun was zurück.

Mein erstes Passwort war länger als 10 Zeichen! Dann funzt das nicht!!

Jetzt habe ich ein anderes Problem...
Der PM2 startet den Server nicht bei reboot.
Obwohl mit sudo installiert und mit sudo gesaved...


hab s nun in die rc.local geklatscht...
Funzt.

Nächste Frage:
Wie und wo führst du jetzt dein Script aus, damit fhem darauf zugriff hat?


Bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

Mike_GKA

Hallo SouzA,

erstmal sorry für die späte Reaktion, aber die letzten Wochen waren beruflich und privat schon recht "ausgefüllt".

Aus den Fehlermeldungen bin ich nicht so richtig schlau geworden. Ich hätte eher eine Vermutung Richtung Zeichensatz (UTF8, Ansi) geäußert. Aber dass es an der Länge des Passworts liegt, da wäre ich nie drauf gekommen. Da bin ich auch echt froh, dass mein Passwort exakt 10 Stellen lang ist.

Mit dem Autostart über pm2 hatte ich auch nie Probleme. Das verwende ich auch für einige andere Dinge, aber mit rc.local funktioniert das natürlich auch und ist eigentlich einfacher.

Das Skript in fhem zu nutzen, ist es eigentlich sehr simpel. Bei mir heißt es heizung.php, und in fhem steht dann

# Heizung über nefit-easy-http-server, CT100 und heizung.php

define H_Summary HTTPMOD http://127.0.0.1/heizung.php 300
attr H_Summary userattr reading01JSON reading01Name reading02JSON reading02Name reading03JSON reading03Name reading04JSON reading04Name reading05JSON reading05Name reading06JSON reading06Name reading07JSON reading07Name
attr H_Summary enableControlSet 1
attr H_Summary reading01JSON t_inhouse
attr H_Summary reading01Name t_inhouse
attr H_Summary reading02JSON t_setpoint
attr H_Summary reading02Name t_setpoint
attr H_Summary reading03JSON t_outdoor
attr H_Summary reading03Name t_outdoor
attr H_Summary reading04JSON boiler
attr H_Summary reading04Name boiler
attr H_Summary reading05JSON pressure
attr H_Summary reading05Name pressure
attr H_Summary reading06JSON yearTotal
attr H_Summary reading06Name yearTotal
attr H_Summary reading07JSON actualSupplyTemperature
attr H_Summary reading07Name actualSupplyTemperature
attr H_Summary room Heizung



Gruß
Mike

SouzA

Hi,

Bei mir ist es auch immer recht voll, zeitlich gesehen. Also alles kein Problem.  ;)

Gehe ich recht in der Annahme, dass das Script dann im www Ordner des Raspis liegt auf dem fhem installiert ist? Hast du dazu apache installiert?

Bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

Mike_GKA

Hallo,

hatte ich nicht aufgeführt, aber klar, ein http-Server wie Aapche muss installiert sein. Eventuell geht es auch ohne, wenn man das Skript aus fhem direkt ausführt, aber wie, da bin ich überfragt. Es steckt ja auch nicht allzu viel hinter dem Skript, das lässt sich sicher auch in js oder perl nachstricken.
Ich habe eh immer LAMP auf dem Raspberry auch für einige andere Aufgaben.
Und das Skript steht dann natürlich unter /var/www/html.

Noch zu dem automatischem Start mit pm2.

sudo pm2 startup

sollte das Problem lösen. Habe ich jetzt auch Eingangs korrigiert.
Das hatte ich vergessen, da ich eh pm2 noch für andere Aufgaben nutze.

Gruß
Mike

SouzA

#20
Habs nun erstmal zum laufen bekommen.

Rennt jetzt zunächst auf einem anderen Raspi testweise, bevor ich das auf den fhem Raspi ziehe.
Mal gucken, was einem dazu noch alles einfällt :)
Vielen Dank bis hierher ;D

Was nicht funktioniert ist, eine neue Solltemp zu setzen.
Weder vom fhem Raspi noch vom "Junkers" Raspi.
Das Mobil-Symbol auf dem CT100 erscheint zwar. Aber ändern tut sich nix.

Was ich noch sehr spannend finde:
t_inhouse ist nicht die Aktuelle Raumtemperatur in der APP, gleicht sich aber mit der Temperatur, die auf dem CT100 angezeigt wird...

Außerdem tue ich mich gerade ein wenig schwer mit den endpoints.
Irgendwie ist für mich nun nicht wirklich ersichtlich, welches davon Vorlauf Temp und welches Wasser Temp ist.
Hast du das schonmal rausgefunden?

Nach Internetrecherche gehe ich nun davon aus, dass actualSupplyTemperature die Vorlauf Temp ist.
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

Mike_GKA

Es ist tatsächlich ein großes Handicap, dass die endpoints so gut wie gar nicht beschrieben sind.
Da bleibt häufig nur raten und probieren. Gute Hinweise wie es eventuell gehen könnte findet man bei den anderen Heizungssteuerungen KM200 und BDKM, da ja letztendlich darunter eine sehr ähnliche Logik stecken muss. Auch das Studium der Quellen von nefit-easy-commands gibt manchmal Hinweise.
Es gibt starke Indizien dafür, dass letztendlich die CT100-App für Smartphone auch die Quellen von nefit-easy-core nutzt. nefit-easy-commands ist letztendlich wohl ein API für nefit-easy-core und der nefit-easy-http-server setzt über alles dann einen http-Server.

Was ich bisher herausgefunden habe und zumindest bei mir anstandlos funktioniert:

1. Temperatur manuell setzen:
Hierzu muss man auf den manuellen Modus umschalten und die Soll-Temperatur übergeben:

curl -XPOST http://127.0.0.1:3000/bridge/heatingCircuits/hc1/usermode -d '{"value":"manual"}' -H 'Content-Type: application/json'
curl -XPOST http://127.0.0.1:3000/bridge/heatingCircuits/hc1/temperatureRoomManual -d '{"value":23}' -H 'Content-Type: application/json'

So wird die Soll-Temperatur auf 23° gesetzt.

Um wieder in den automatischen Modus zu gelangen:

curl -XPOST http://127.0.0.1:3000/bridge/heatingCircuits/hc1/usermode -d '{"value":"clock"}' -H 'Content-Type: application/json'


2. Vorlauftemperatur:
Das ist in der Tat "actualSupplyTemperature".
Da ich das Ganze schon eine Weile am Laufen habe und die Daten protokolliere, kann ich sehr gut sehen ,wie "actualSupplyTemperature" beim Einschalten des Brenners steigt und beim Abschalten wieder sinkt. Auch die maximale Vorlauftemperatur, die ich am Brenner direkt einstellen kann, wird dabei nicht überschritten.

3. t_inhouse:
deckt sich bei mir mit der Anzeige auf der CT100 und der CT100-App auf dem Smartphone. Lediglich wird nur unterschiedlich gerundet.
Es wird auch der Kalibrierungswert aus der CT100-App berücksichtigt.

mondface

#22
ich benutze "easy set temperature 20" als shell script und rufe dies über die ha-bridge als execute command auf:
Alexa schalte Heizung ein -> 20 Grad
Alexa dimme Heizung 20,5 Grad
Alexa schalte Heizung aus: 15 Grad

Das funktioniert im automatischen Modus!

Leider kann ich nicht sagen, erhöhe um 1 Grad, da ich den easy Befehl dafür nicht kenne ....

pyrlix

Servus, bin auch am experimentieren mit meinem CT100 Regler und dem EASY-Server.
Kann man die Raumwunschtemperatur nicht irgendwie über HTTPMOD setzen? Ich habe jetzt versucht das Thermostat über folgende Definition zu steuern

defmod Thermostat_Wohn HTTPMOD http://192.168.2.105:3000/bridge/heatingCircuits/hc1/temperatureRoomManual 60
attr Thermostat_Wohn userattr set1Name set1Replacement01Value
attr Thermostat_Wohn set1Name WohnTemp
attr Thermostat_Wohn set1Replacement01Value replaceJSON("value", 22)


Jedoch passiert beim setzen der Temperatur nichts, die Temperatur die am Regler sowie in der API angezeigt wird bleibt da angetackert wo sie ist.

Mike_GKA

Hallo pyrlix,
so kann es eigentlich nicht funktionieren, da dies ein http-get wäre und der EASY-Server ein http-post braucht.
Ich kenne mich jetzt mit HTTPMOD nicht so besonders aus, aber laut Wiki https://wiki.fhem.de/wiki/HTTPMOD müsste man das doch mit attr requestData hinbekommen.
Eventuell musst Du auch noch den Header anpassen. Dazu gibt es attr requestHeader...

Im Wiki ist ein Beispiel für einen  Poolmanager, da steht unter anderem

attr PM requestData {"get" :["34.4001.value" ,"34.4008.value" ,"34.4033.value", "14.16601.value", "14.16602.value"]}
attr PM requestHeader1 Content-Type: application/json


Das könntest Du doch mal "abkupfern". Müsste dann wohl ähnlich  ...requestData {"value":22} heißen.
Mit fehlt aktuell die Zeit, das selbst auszuprobieren.
Wenn Du es hinbekommst, wäre es auch schön die Lösung hier zu finden.

pyrlix

Danke Mike!

Habs  nach viel experimentieren hinbekommen!


defmod Thermostat_Wohn HTTPMOD http://192.168.2.105:3000/bridge/heatingCircuits/hc1/temperatureRoomManual 15
attr Thermostat_Wohn userattr set1Data set1Header set1Name
attr Thermostat_Wohn set1Data {"value":$val}
attr Thermostat_Wohn set1Header Content-Type: application/json
attr Thermostat_Wohn set1Name WohnTemp

setstate Thermostat_Wohn 2017-11-25 14:39:37 value 18


Beim setten von "WohnTemp" passt sich der Para in der "Control"-App sowie dem Thermostat an - kurzum, es funktioniert.

Mike_GKA

Prima und Danke! Und wenn man es weiß, eigentlich gar nicht so schwer.
Eines würde ich noch ändern

defmod Thermostat_Wohn HTTPMOD http://192.168.2.105:3000/bridge/heatingCircuits/hc1/temperatureRoomManual 15

Die "15" am Ende besagt ja jetzt, dass dies alle 15 Sek. aufgerufen wird.
Mit:

defmod Thermostat_Wohn HTTPMOD http://192.168.2.105:3000/bridge/heatingCircuits/hc1/temperatureRoomManual 0

wird es nur noch einmal bei "setstate" aufgerufen.

Dann noch eine Frage:
Hast Du "heatingCircuits/hc1/usermode" immer auf "manual" sitzen? Bei mir funktioniert es nur wenn ich es auf "manual" setze, da ich ja im Normalbetrieb die Heizung über "clock" steuer.

pyrlix

Danke Mike, werde ich so umsetzen! Macht sogar Sinn, weniger polling.

Ich habs Thermostat generell immer auf manuell stehen, den Raum muss ich sowieso heizen, wenn ich nachts auf 16 runter gehe und tags wieder auf 18 oder 20 hoch muss braucht das (finde ich) mehr Gas, als wenn ich konstant auf 18-20°C halten lasse. Zumal ich Witterungsgeführt mit mittlerem Raumanteil fahre, laut der Gasverbrauchsanzeige ist das bisher das ökonomischste.

Jetzt muss ich nurnoch die Temperatureinstellung vom Thermostat an der Heizung weiterleiten ans CT100, den Wert in FHem hab ich ja schon (CCU2 mit dem HmIP TRV) - wobei ich debattiere den dort rauszuschmeißen und einfach ne Kappe auf das Ventil stecke.

Mike_GKA

Seit gestern bekomme ich bei jeder Abfrage die Fehlermeldung: XMPP authentication failure
Zusätzlich fiel mir auf, dass die Grundlast des Raspberry (CPU) signifikant angestiegen íst.

Zum Glück hat der Autor der nefit-easy SW Robert Klep sehr schnell darauf reagiert. Gefunden auf https://www.domoticz.com/forum/viewtopic.php?f=34&p=181905.

Nach
sudo npm update nefit-easy-http-server -g
läuft alles wieder normal.

SouzA

Hi,

ich habe neuerdings das Problem, dass der nefit sich nach der Zwangstrennung zum ISP, bzw. nach dem Zuvorkommen der FritzBox, nicht mehr mit dem Server verbindet.
Dementsprechend habe ich Fehlermeldungen im log:
2018.06.21 05:10:02 3: Therme: Read callback: Error: read from http://127.0.0.1:80 timed out
2018.06.21 05:15:02 3: Therme: Read callback: Error: read from http://127.0.0.1:80 timed out
2018.06.21 05:20:02 3: Therme: Read callback: Error: read from http://127.0.0.1:80 timed out
2018.06.21 05:25:02 3: Therme: Read callback: Error: read from http://127.0.0.1:80 timed out
2018.06.21 05:30:02 3: Therme: Read callback: Error: read from http://127.0.0.1:80 timed out
2018.06.21 05:35:02 3: Therme: Read callback: Error: read from http://127.0.0.1:80 timed out
2018.06.21 05:40:02 3: Therme: Read callback: Error: read from http://127.0.0.1:80 timed out
2018.06.21 05:45:02 3: Therme: Read callback: Error: read from http://127.0.0.1:80 timed out
2018.06.21 05:50:02 3: Therme: Read callback: Error: read from http://127.0.0.1:80 timed out
2018.06.21 05:55:02 3: Therme: Read callback: Error: read from http://127.0.0.1:80 timed out
2018.06.21 06:00:02 3: Therme: Read callback: Error: read from http://127.0.0.1:80 timed out
2018.06.21 06:05:02 3: Therme: Read callback: Error: read from http://127.0.0.1:80 timed out
2018.06.21 06:10:02 3: Therme: Read callback: Error: read from http://127.0.0.1:80 timed out
2018.06.21 06:15:02 3: Therme: Read callback: Error: read from http://127.0.0.1:80 timed out
2018.06.21 06:20:02 3: Therme: Read callback: Error: read from http://127.0.0.1:80 timed out
2018.06.21 06:25:02 3: Therme: Read callback: Error: read from http://127.0.0.1:80 timed out
2018.06.21 06:30:02 3: Therme: Read callback: Error: read from http://127.0.0.1:80 timed out


Bis dato hilft mir nur der Raspi-Neustart.
Kriegt man den reconnect des Nefit auch über FHEM, bzw. automatisch wieder hin?

Vielen Dank und bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee