lokale Anbindung SENEC Batterie an FHEM

Begonnen von cjung, 12 Januar 2020, 13:33:37

Vorheriges Thema - Nächstes Thema

PapaRiX

Also, ich denke wir bekommen das hin.
ich bin auf einem guten Weg. Ich mache jetzt aber mal eine kleine Pause und kümmere mich um meine Vatertagsverpflichtungen  ;D

Ziel:
SENEC2MQTT liefert die Topics so aus, dass openWB sie direkt lesen kann (Topics openWB/set/evu).

Weg:
Einlesen und publischen der Werte aus PM1OBJ1 wobei die Werte aus [PM1OBJ1]:[I_AC] mit Hilfe von [PM1OBJ1]:[P_AC] mit einem Vorzeichen versehen werden sollen.

Am Ende lerne ich wieder etwas mehr Python.
Frage: sollten wir das Thema hier nicht abspalten und ein openWB forum suchen, wo wir das veröffentlichen? Kennst du eins? Ich glaube hier im FHEM forum ist der Nutzen bzgl. openWB eher gering...

Torsten24

Also es müssen ja nicht alle Felder gefüllt werden.
Ich habe in der Wallbox 3 Reiter mit verschiedenen abgefragten Werten. Hänge ich dir mal ein Screenshot an.
Ich denke, wenn die WB weiß wie Viel Kapazität in den Akkus ist, wie viel STrom gerade verbraucht /eingespeist wird und wie viel vom Dach kommt, müsste das doch reichen oder?

Darf ich mal fragen woher du dich so gut mit der Materie auskennst?

PapaRiX

#137
Okay, dann schauen wir mal. Ich denke, das Ergebnis ist eine SENEC2MQTT_openWB.py bridge.
Senec.py wird leicht motifiziert und wird auch weiterhin mit SENEC2MQTT gehen.

Mit MQTT beschäftige ich mich seit ein paar Jahren durch meine Hausautomatisierungsbasteleien daheim. Ich habe etliche Sensoren, Lampen und Anzeigen, die ich via MQTT und FHEM steuere (teils selbsbau, teils shelly.cloud)
Seit Anfang des Jahres habe ich auch beruflich mit MQTT kontakt.
Ich finde MQTT optimal für Hausautomatisierung, da es eventgetriggert ist und sensoren somit fire&forget mäßig absetzen können, was sie müssen und dann wieder schlafen gehen.
Wenn es nach mir ginge würde die ganzen Hausautomatisierungs- und Energieoptimierungswelt (von PV, über Lampen, Wallboxen,, Waschmaschinen, Trockner, Heizung, Poolpumpen, Staubsaugerroboter, Türklingeln....) MQTT beherrschen. Dann kann man irgendeine Middleware nehmen (FHEM, OpenHAB, IOBroker....) und kann die mit Intelligenz füllen.

Linux und Python finde ich eine sehr mächtige Kombi, die jeder technikbegeisterte Nerd beherrschen können sollte.  ;D
Wobei ich, wie gesagt, mich selbst im unteren Spektrum der wissenden Druiden sehe.



PapaRiX

#138
So, ich habe Dir noch eine SENEC2MQTT_openWB.py gebaut und die Senec.py angepasst.
Die Dateien liegen in meiner orginalen Beschreibung ein paar Seiten weiter vorne
https://forum.fhem.de/index.php/topic,107265.msg1221254.html#msg1221254

Bitte schau mal drüber (besonders hinten im Code, ob ich die openWB Topics richtig habe und keine Fehler habe, 4 Augen sehen besser als 2.

Schritte:
1. Die Datei SENEC2MQTT_openWB.py entsprechend deiner Daten anpassen (MQTT Broker und SENEC IP eingeben)
Hinweis. Ich hatte das Standardintervall auf 5 sekunden geändert, wenn Du da was anderes willst, kannst du in Zeile 39 das Intervall auf was anderes stellen (ich empfehle als standard erst mal irgendwas zwischen 2-5. Ansonsten kannst du im FHEM (oder MQTT-explorer (sofern der geht), oder mosquitto_pub) das Intervall über das entsprechende Topic einstellen.

2. Die neue Senec.py und die SENEC2MQTT_openWB.py nach /user/bin/SENEC2MQTT zu den anderen Dateien legen.

3. rechte für die Datei vergeben
sudo chmod 777 SENEC2MQTT_openWB.py
sudo chmod 777 Senec.py


4. Service stoppen (you know the drill)
sudo systemctl stop SENEC2MQTT

5. SENEC2MQTT.service anpassen, sodass der service das SENEC2MQTT_openWB skript startet
nano /etc/systemd/system/SENEC2MQTT.service
in der Zeile "ExecStart=" am ende SENEC2MQTT_openWB.py eintragen

6. systemd neu laden
sudo systemctl daemon-reload

7. Service Starten
sudo systemctl start SENEC2MQTT

8. mit mosquitto_sub mal nachsehen, ob da was sinnvolles kommt
mosquitto_sub -v -t '#'

ich habe die alten Keller/Solar/ topics dringelassen, vielleicht kannst Du die ja auch gebrauchen für ein FHEM dashboard

Torsten24

Also erstmal vielen vielen dank!!!
Bei Broker gebe ich die 127.0.0.1 ein, oder? Oder die vom RPI?
Das mit Werten auslesen funktioniert!! aber mein WB bekommt leider nichts ...

PapaRiX

Du meinst bei den Einstellungen deiner openWB?
Da muss die IP vom Raspi rein. 127.0.0.1 ist die adresse vom sogenannten "local host" das ist immer die eigene adresse. 127.0.0.1 zeigt immer auf sich selbst.

Ich mache mir nur Sorgen, dass das nicht klappt, weil Du auch mit dem MQTT-explorer auf Deinem PC nichts bekommst.

Außerdem sehe ich im Screenshot von Dir, dass da topics fehlen.

Das kommt bei mir, wenn ich das skript lade:
openWB/set/pv/1/W 0
openWB/set/pv/1/WhCounter 12052084.9609375
openWB/set/houseBattery/W 0
openWB/set/houseBattery/WhImported 2498469.23828125
openWB/set/houseBattery/WhExported 2388778.80859375
openWB/set/houseBattery/%Soc 0
openWB/set/evu/W 557
openWB/set/evu/APhase1 0.7699999809265137
openWB/set/evu/APhase2 0.5099999904632568
openWB/set/evu/APhase3 1.5
openWB/set/evu/WhImported 4219942.87109375
openWB/set/evu/WhExported 5629302.24609375
openWB/set/evu/VPhase1 234.3000030517578
openWB/set/evu/VPhase2 234.3000030517578
openWB/set/evu/VPhase3 234.40000915527344
openWB/set/evu/HzFrequenz 50.07999801635742


Hast du auch die Senec.py ausgetauscht, da musst Du auch die neue nehmen

Torsten24

Ich dachte mir schon, dass es relativ wenig Daten sind... ich meine die Broker IP in deinen Script.  Bei meiner wb kann ich nirgends eine IP eingeben....

PapaRiX

aha. so langsam verstehe ich das.
die openWB hat einen eigenen MQTT broker.
Dementsprechend kannst Du versuchen in dem Skript die IP von der openWB alls Broker anzugeben.
Die bekommt dann alles von SENEC zu hören.
in FHEM kannst du dann einen neuen MQTT Broker anlegen mit der IP von der openWB.
und dann kannst Du deinem senec gerät in FHEM diesen openWB broker zuweisen. Dann sparst Du dir komplett den mosquitto auf deinem raspberrypi.
habe leider keine openWB (sondern eine einfache und dumme WB) zum ausprobieren.

PapaRiX

#143
oh, und alternativ kannst Du hier mal schauen
http://www.steves-internet-guide.com/mosquitto-bridge-configuration/

Du kannst relativ einfach den mosquitto auf Deinem RasPi als Gateway konfigurieren.
So kannst du dafür sorgen, dass alle Nachrichten von SENEC an FHEM und openWB gehen. Außerdem können so alle topics von der openWB an FHEM gehen. Ich nehme an, die openWB sendet auch einige interessante daten via MQTT

Torsten24

ES funktioniert!!! Tausend Dank an dich!
Also ich habe jetzt einfach im script die IP der WB eingefügt.
Und jetzt bekommt meineWB einige Daten. Hab aber noch nicht nachgesehen was alles.
Wenn es dich interessiert, ich hänge dir mal noch einen Screenshot der WB an.
Das mit dem Gateway klingt auch interessant. Wenn es dir was hilft, kann ich das mal mit deiner Anleitung einrichten. ;-)
Die zwei Broker habe ich  ja schon und in dem Senec device die openwb als Broker einfgefügt

carlos

Das mit dem Gateway braucht man doch nicht. Wenn du nach wiki für die Einrichtung der OpenWB vorgehst, nimmst du einen MQTT2_Client und hast alle Daten der Wallbox in FHEM.
Außerdem verweise ich noch mal auf mein SENEC module in diesem Thread, auch da wird es demnächst eine OpenWB integration geben, da ich genau diese letzte Woche bekommen habe:
https://forum.fhem.de/index.php/topic,124096.0.html


Gruß

Carlos
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

carlos

Außerdem will ich noch auf einen möglichen Fehler hinweisen:
Bei mir in der OpenWB stable Version 1.9.265 steht folgendes:

Keine Konfiguration erforderlich.
Per MQTT zu schreiben:
openWB/set/pv/1/W PV-Erzeugungsleistung in Watt, int, positiv
openWB/set/pv/1/WhCounter Erzeugte Energie in Wh, float, nur positiv


Keine Ahnung ob das im Hinblick au die 2er Version geändert wurde, oder ob das nur ein Fehler ist.
Auf jeden Fall ist hier die PV-Erzeugungsleistung in Watt, int, positiv

Ich habe das so implementiert in meinem SENEC Module.
Gruß

Carlos
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

PapaRiX

#147
hallo carlos,
interessant, würde auch mehr Sinn ergeben die PV Leistung in positiv statt negativ anzugeben.
Hast Du beides mal ausprobiert? Wäre ja auch nett von openWB, wenn sie einfach den Absolutwert nehmen und das Vorzeichen zu ignorieren. Schließlich wird die Leistung vom Dach immer nur ein VZ haben.

Ich sehe schon, ich muss meine dumme Heidelberg WB in Rente schicken und eine openWB anschaffen  :D

mit dem Gateway hast Du natürlich recht. Ich denke, das ist dann sinnvoll, wenn man für andere Komponenten bereits einen MQTT Broker in der Hausautomatisierung betreibt.


carlos

In der Version 2 Alpha 2 sieht es so aus:
Einstellungen für MQTT Wechselrichter
(Modul: DeviceMqttInverter)
openWB/set/pv/7/get/power
PV-Leistung in Watt, ohne Nachkommastellen (Integer), nur negativ!
Beispiel: -123
openWB/set/pv/7/get/counter
Erzeugte Energie in Wh, mit Nachkommastellen (Float), nur positiv
Beispiel: 123.45


Also wieder negativ.
Diese Version habe ich mir testweise installiert und mache das MQTT publishen über notify.

Das ganze ist sehr verwirrend.

Gruß

Carlos
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

Deanw1975

Hallo zusammen,

hatte den Senec Speicher schon in Fhem. Aufgrund eines Fehlers meinerseits habe das Device gelöscht und neu angelegt.
Danach konnte ich das Gerät aber nicht mehr auslesen.

Mit Verbose 5 bekomme ich das hier:

2022.07.29 13:40:32 4: 00_pvh_senec_direkt: GetUpdate called (update)
2022.07.29 13:40:32 4: 00_pvh_senec_direkt: UpdateTimer called from GetUpdate with cmd next sets timer to call update function in 30.0 sec at 13:41:02.640, interval 30
2022.07.29 13:40:32 5: 00_pvh_senec_direkt: AddToQueue adds type update to URL http://192.168.178.137/lala.cgi, no data, no headers, retry 0, initial queue len: 0
2022.07.29 13:40:32 5: 00_pvh_senec_direkt: HandleSendQueue called from AddToSendQueue, qlen = 1
2022.07.29 13:40:32 4: 00_pvh_senec_direkt: HandleSendQueue sends update with timeout 2 to http://192.168.178.137/lala.cgi, No Data, No Header
2022.07.29 13:40:32 5: 00_pvh_senec_direkt: ReadCallback called from __ANON__
2022.07.29 13:40:32 4: 00_pvh_senec_direkt: Read callback: request type was update retry 0,
header: HTTP/1.0 404 Not Found, body length 127
2022.07.29 13:40:32 5: 00_pvh_senec_direkt: Read callback: body
<html><head><title>Not Found</title></head><body><h1>Not Found</h1><p>Resource `lala.cgi` could not be found.</p></body></html>
2022.07.29 13:40:32 4: 00_pvh_senec_direkt: BodyDecode is not decoding the response body (charset not found, bodyDecode defaults to none)
2022.07.29 13:40:32 5: 00_pvh_senec_direkt: GetCookies is looking for Cookies
2022.07.29 13:40:32 5: 00_pvh_senec_direkt: ExtractSid called, context reading, num unknown
2022.07.29 13:40:32 4: 00_pvh_senec_direkt: checking for redirects, code=404, ignore=0
2022.07.29 13:40:32 4: 00_pvh_senec_direkt: no redirects to handle
2022.07.29 13:40:32 5: 00_pvh_senec_direkt: Read callback sets LAST_REQUEST to update
2022.07.29 13:40:32 5: 00_pvh_senec_direkt: CheckAuth decided no authentication required
2022.07.29 13:40:32 5: 00_pvh_senec_direkt: Read starts parsing response to update with defined readings:
2022.07.29 13:40:32 4: 00_pvh_senec_direkt: Read response to update didn't match any Reading
2022.07.29 13:40:32 5: 00_pvh_senec_direkt: HandleSendQueue called from ReadCallback, qlen = 0
2022.07.29 13:40:32 5: 00_pvh_senec_direkt: HandleSendQueue found no usable entry in queue


Das ist die RAW Definition:

defmod 00_pvh_senec_direkt HTTPMOD http://192.168.178.137/lala.cgi 30
attr 00_pvh_senec_direkt room 00_PV
attr 00_pvh_senec_direkt verbose 0



Die Anzeige aus "list"

  .LASTSEND  1659095192.65999
   .LastUpdate 1659095192.65861
   .TRIGGERTIME 1659095222.65861
   .getList   
   .setList   interval reread:noArg stop:noArg start:noArg clearCookies:noArg upgradeAttributes:noArg storeKeyValue
   .updateRequestHash 1
   BUSY       0
   CFGFN     
   DEF        http://192.168.178.137/lala.cgi 30
   FUUID      62e3a3d3-f33f-61e0-0aff-bb2c70846c40f27f
   Interval   30
   MainURL    http://192.168.178.137/lala.cgi
   ModuleVersion 4.1.12 - 19.4.2022
   NAME       00_pvh_senec_direkt
   NOTIFYDEV  global
   NR         37044
   NTFY_ORDER 50-00_pvh_senec_direkt
   STATE      ???
   TYPE       HTTPMOD
   eventCount 8
   value     
   .readingParseList:
   HttpUtils:
     NAME       
     addr       http://192.168.178.137:80
     auth       0
     code       404
     compress   1
     conn       
     data       
     displayurl http://192.168.178.137/lala.cgi
     header     
     host       192.168.178.137
     httpheader HTTP/1.0 404 Not Found
     httpversion 1.0
     hu_blocking 0
     hu_filecount 1
     hu_port    80
     hu_portSfx
     ignoreredirects 1
     loglevel   4
     path       /lala.cgi
     protocol   http
     redirects  0
     timeout    2
     url        http://192.168.178.137/lala.cgi
     sslargs:
   QUEUE:
   READINGS:
   REQUEST:
     context    reading
     data       
     header     
     ignoreredirects 0
     num        unknown
     retryCount 0
     type       update
     url        http://192.168.178.137/lala.cgi
Attributes:
   room       00_PV
   verbose    0


Was mache ich falsch?  :o
Und ja die IP ist richtig.

LG
Dean