AC ELWA-E Heizstab in Fhem einbinden

Begonnen von Rewe2000, 19 Juli 2020, 15:13:14

Vorheriges Thema - Nächstes Thema

Rewe2000

Hallo,

hat hier von euch jemand den E-Heistab von my-PV AC ELWA-E und hat diesen erfolgreich in Fhem eingebunden?

Da ich den Heizstab an meinen E3DC Stromspeicher betreibe, komme ich an die Modbus Schnittstelle nicht mehr ran, das Gerät erlaubt anscheinen keine 2 Abfragen von unterschiedlichen Clients (E3DC Speicher und FHEM).

Der Heizstab hat noch eine HTML-Webinterface, welches lokal auf dem Rechner ausgeführt wird, mit diesem können Betriebszustände neben Modbus zusätzlich noch dargestellt werden. Vermutlich könnte hier mit HTTPMOD etwas gehen, aber irgendwie vermute ich läuft dies irgendwie über JavaScript im Hintergrund. Leider verstehe ich den Quellcode mangels Programmierkenntnissen nicht wirklich, eventuell könnte hier jemand von den HTML Profis einen Blick darauf werfen.

Achtung! Der Download des HTML Webinterface startet sofort, nach klicken des Links (653 kb):
https://www.my-pv.com/download/acelwa_e/CurrentVersionGet.php?ver=00200.01

Hab auch aktuell eine Anfrage beim Hersteller laufen, wenn ich etwas dazu erfahre, melde ich mich wieder.

Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

amenomade

#1
Ja, die Daten werden per javascript geholt, und damit die Seite ausgefüllt.

Aber es gibt etwas interessantes:
var url = 'http://'+Current_IP+'/data.jsn'+parameters;

Da liegen vermutlich die Daten.
Kannst Du diese URL erreichen (zuerst ohne Parameter)?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Rewe2000

Hallo amenomade,

danke das war genau was ich gesucht hatte.

Hast du noch einen Tipp oder Link für mich, wie ich diese am besten in Fhem bekomme?
Vermutlich muss ich diese über HTTPMOD abholen, oder gibt es da einen anderen (besseren) Weg?

Hab leider aktuell keine Zeit um zu testen (die Arbeit ruft) aber heute Abend werde ich mich damit versuchen.

{
"device":"AC ELWA-E",
"fwversion":"00200.01",
"status":3,
"power":0,
"boostpower":0,
"temp1":235,
"ww1target":534,
"boostactive":0,
"legboostnext":"off",
"loctime":"07:12:48",
"unixtime":1595221968,
"ctrlstate":"Modbus Read received",
"blockactive":0,
"meter1_ip":"null",
"meter1_id":null,
"meter2_ip":"null",
"meter2_id":null,
"meter3_ip":"null",
"meter3_id":null,
"meter4_ip":"null",
"meter4_id":null,
"meter5_ip":"null",
"meter5_id":null,
"meter6_ip":"null",
"meter6_id":null,
"surplus":null,
"m0sum":null,
"m0l1":null,
"m0l2":null,
"m0l3":null,
"m0bat":null,
"m1sum":null,
"m1l1":null,
"m1l2":null,
"m1l3":null,
"m1devstate":null,
"m2sum":null,
"m2l1":null,
"m2l2":null,
"m2l3":null,
"m2soc":null,
"m2state":null,
"m2devstate":null,
"m3sum":null,
"m3l1":null,
"m3l2":null,
"m3l3":null,
"m3soc":null,
"m3devstate":null,
"m4sum":null,
"m4l1":null,
"m4l2":null,
"m4l3":null,
"m4devstate":null,
"ecarstate":"null",
"ecarboostctr":null,
"cur_ip":"192.168.50.55",
"cur_sn":"255.255.255.0",
"cur_gw":"192.168.50.10",
"cur_dns":"192.168.50.10",
"mss2":"null",
"mss3":"null",
"mss4":"null",
"mss5":"null",
"mss6":"null",
"mss7":"null",
"mss8":"null",
"mss9":"null",
"mss10":"null",
"mss11":"null",
"tempchip":30
}


Vielen Dank
Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

Rewe2000

Hallo,

so jetzt bin ich schon ein ganzes Stück weiter, es geht prima mit dem Modul JsonMod.

defmod AC_ELWA_E JsonMod http://192.168.50.55/data.jsn
attr AC_ELWA_E DbLogExclude .*
attr AC_ELWA_E interval */1 * * * *
attr AC_ELWA_E readingList single(jsonPath('$.device'), 'Geraet', 'N/A');;\
single(jsonPath('$.fwversion'), 'Firmwareversion', 'N/A');;\
single(jsonPath('$.status'), 'Status', 'N/A');;\
single(jsonPath('$.power'), 'Leistung', 'N/A');;\
single(jsonPath('$.temp1'), 'Speicher_Istwert', 'N/A');;\
single(jsonPath('$.ww1target'), 'Speicher_Sollwert', 'N/A');;\
single(jsonPath('$.ctrlstate'), 'Status_Ansteuerung', 'N/A');;\
single(jsonPath('$.tempchip'), 'Prozessortemperatur', 'N/A');;

setstate AC_ELWA_E 2020-07-20 10:07:00 .computedReadings Status_Ansteuerung,Speicher_Sollwert,Firmwareversion,Geraet,Prozessortemperatur,Leistung,Speicher_Istwert,Status
setstate AC_ELWA_E 2020-07-20 10:07:00 Firmwareversion 00200.01
setstate AC_ELWA_E 2020-07-20 10:07:00 Geraet AC ELWA-E
setstate AC_ELWA_E 2020-07-20 10:07:00 Leistung 0
setstate AC_ELWA_E 2020-07-20 10:07:00 Prozessortemperatur 30
setstate AC_ELWA_E 2020-07-20 10:07:00 Speicher_Istwert 220
setstate AC_ELWA_E 2020-07-20 10:07:00 Speicher_Sollwert 533
setstate AC_ELWA_E 2020-07-20 10:07:00 Status 21
setstate AC_ELWA_E 2020-07-20 10:07:00 Status_Ansteuerung Modbus Read received


Irgendwie kämpfe ich noch mit den Werten $.temp1 und $.ww1target , diese muss ich noch durch zehn teilen, damit die Werte passen.

Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

amenomade

Zitat von: Rewe2000 am 20 Juli 2020, 10:10:47

Irgendwie kämpfe ich noch mit den Werten $.temp1 und $.ww1target , diese muss ich noch durch zehn teilen, damit die Werte passen.

Ich weiss nicht, ob es direkt in readingList möglich ist, aber wenn nicht dann mit userReadings
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Rewe2000

#5
Hallo,

ich beziehe jetzt meine Werte vom Heizstab über eine jsn Datei mit HTTPMOD ab und konvertiere noch einige Werte über userReadings und einer Funktion in 99_myUtils.pm, das klappt soweit ganz prima. Damit sich andere User nicht die gleiche Mühe machen müssen, hänge ich meinen fertigen Code hier an.

Das entsprechende HTTMOD device als RAW Definition:
defmod http_AC_ELW_E HTTPMOD http://192.168.50.55/data.jsn 5
attr http_AC_ELW_E userattr reading01JSON reading01Name reading02JSON reading02Name reading03JSON reading03Name reading04JSON reading04Name reading05Expr reading05JSON reading05Name reading06Expr reading06JSON reading06Name reading07JSON reading07Name reading08JSON reading08Name reading08OMap
attr http_AC_ELW_E DbLogExclude .*
attr http_AC_ELW_E DbLogInclude Leistung,Ist_Temperatur,Status,Energie_kWh
attr http_AC_ELW_E comment Dieses Modul liest von der Json Datei, auf der Homepage des E-Heizstabs, die Betriebsparameter aus und speichert diese in entsprechenden Readings ab.\
Zusätzlich werden noch einige Readings erstellt, damit die gewonnenen Daten besser weiterverarbeitet werden können.
attr http_AC_ELW_E event-min-interval Ist_Temperatur:480,Leistung:480,Status:480,Energie_kWh:480
attr http_AC_ELW_E event-on-change-reading Energie_kWh:0.01,Leistung:10,Chip_Temperatur:5,.*
attr http_AC_ELW_E icon sani_boiler_temp
attr http_AC_ELW_E reading01JSON device
attr http_AC_ELW_E reading01Name Json_Geraet
attr http_AC_ELW_E reading02JSON fwversion
attr http_AC_ELW_E reading02Name Json_Firmware
attr http_AC_ELW_E reading03JSON status
attr http_AC_ELW_E reading03Name Status
attr http_AC_ELW_E reading04JSON power
attr http_AC_ELW_E reading04Name Leistung
attr http_AC_ELW_E reading05Expr $val / 10
attr http_AC_ELW_E reading05JSON temp1
attr http_AC_ELW_E reading05Name Ist_Temperatur
attr http_AC_ELW_E reading06Expr $val  / 10
attr http_AC_ELW_E reading06JSON ww1target
attr http_AC_ELW_E reading06Name Soll_Temperatur
attr http_AC_ELW_E reading07JSON tempchip
attr http_AC_ELW_E reading07Name Chip_Temperatur
attr http_AC_ELW_E reading08JSON status
attr http_AC_ELW_E reading08Name Status_Text
attr http_AC_ELW_E reading08OMap 1:Keine Verbindung, 2:Heizen, 3:Standby, 4:Boost Mode, 5:Temperatur erreicht, 9:Setup Modus, 20:Legionellenschutz, 21:Abgeschaltet, 22:Sperrzeit aktiv, 201:Übertemperatursicherung ausgelöst, 202:Übertemperatur Warmwasser, 203:Übertemperatur Elektronik, 204:Hardwarefehler, 205:Temperatursensor angesprochen
attr http_AC_ELW_E room Hauskraftwerk
attr http_AC_ELW_E stateFormat Leistung W
attr http_AC_ELW_E userReadings Energie_kWh integral {ReadingsNum($name,"Leistung",0)/3600/1000}

setstate http_AC_ELW_E 0 W
setstate http_AC_ELW_E 2020-08-09 14:09:58 Chip_Temperatur 34
setstate http_AC_ELW_E 2020-08-09 14:09:58 Energie_kWh 18.083399057353
setstate http_AC_ELW_E 2020-08-09 14:09:58 Ist_Temperatur 56.5
setstate http_AC_ELW_E 2020-08-09 14:09:58 Json_Firmware 00200.01
setstate http_AC_ELW_E 2020-08-09 14:09:58 Json_Geraet AC ELWA-E
setstate http_AC_ELW_E 2020-08-09 14:09:58 Leistung 0
setstate http_AC_ELW_E 2020-08-09 14:09:58 Soll_Temperatur 59.5
setstate http_AC_ELW_E 2020-08-09 14:09:58 Status 5
setstate http_AC_ELW_E 2020-08-09 14:09:58 Status_Text Temperatur erreicht


Nun kommen aber noch mehr Begehrlichkeiten, ich möchte den Heizstab auch Ansteuern können, was vermutlich mit HTTPMOD auch problemlos gehen sollte, wenn es sich um eine "normale" Internetseite handeln würde. Über die jsn Datei ist eine Ansteuerung nicht möglich, hier sind die Werte überhaupt nicht enthalten, welche ich steuern will.

Der Hersteller my-PV liefert den Heizstab mit einer lokalen HTML Datei aus, über welcher die Ansteuerung erfolgt. Nach Aufruf und Angabe des Netzwerksegments, sucht diese den Heizstab im Netz und stellt die Verbindung her, ab diesen Zeitpunkt kann der Heizstab auch angesteuert werden.

Wenn ich mir die Datei so ansehe denke ich fast hier steht Java oder JavaScript Code, kann auch darin keinerlei Ansatzpunkte erkennen, wie ich da in HTTPMOD etwas ansteuern könnte, zumal auch die URL im Browswer sich nicht ändert, auch wenn ich die Bedienungsseiten der HTML Datei wechsle.

Mit Sicherheit ist hier eine Ansteuerung von Fhem aus möglich, wenn man weiß wie es geht.
Eventuell könnte hier nochmals ein Profi sich die Datei ansehen und mir noch einen Tipp geben, ich sehe da nur "böhmische Dörfer".

Im ersten Post dieses Themas ist ein Link angehängt, über welchen die lokale HTML Datei bezogen werden kann: https://forum.fhem.de/index.php/topic,112986.msg1073144.html#msg1073144
Gerne hänge ich auch noch einen Auszug aus dem Seitenquelltext des Firefox Browsers mit an, wenn die lokale HTML-Datei angezeigt wird, wenn euch dies weiterhilft.

Danke, Gruß
Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

amenomade

#6
Irgendwie finde ich komisch, Readings aus einer JSON Struktur über Regex zu holen, wenn HTTPMOD es direkt über readingXXJSON machen kann. Na gut.. Hauptsache es funktioniert ;)

Reverse engineering von javascript Code ist zwar möglich (habe ich schon mal hier für freeairconnect gemacht), aber das ist ein bisschen kompliziert, insb. wenn man das Gerät nicht hat.

Einfacher wäre, in der Console vom Browser (Reiter Netzwerk) die http Requests zu beobachten, wenn Du das Gerät steuerst. Dann kann man gucken, ob wir es nachbauen können.

EDIT: anscheinend werden alle Kommandos mit inUrl Daten ausgeführt, z.B.:setup_get('?elno='+$("#elno").val()+'&fuse='+$("#fuse").val());
$(".setup_bas").removeClass("param_locked");
$(".setup_bas_but").removeClass("btn-warning");


und setup_get macht prinzipiell var url = 'http://'+Current_IP+'/setup.jsn'+parameters;
var jsonhttp = new XMLHttpRequest();
jsonhttp.open('GET', url, true);

also in dem Beispiel ein Call an http://ip/setup.json?elno=3&fuse=x

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Rewe2000

#7
Hallo amenomade,

vielen Dank, genau das war der Tipp, welcher mich weitergebracht hat. Bisher kannte ich die Netzwerkanalyse im Browser noch nicht, aber genau hier kann ich sehen, welcher HTML Call hier, an die Datei "setup.jsn gesendet wird.

Mit dem HTML Call:
http://192.168.50.55/setup.jsn?devmode=0
oder
http://192.168.50.55/setup.jsn?devmode=1


kann ich nun z.B. den Heizstab ein oder ausschalten.

Somit suche ich mir die Variablen, welche Sinn machen angesteuert zu werden und versuche es mit HTTPMOD umzusetzen.
Eventuell brauche ich da noch ein wenig Hilfe, aber zumindest bin ich (für mich) wieder einen gewaltigen Schritt weiter.

ZitatIrgendwie finde ich komisch, Readings aus einer JSON Struktur über Regex zu holen, wenn HTTPMOD es direkt über readingXXJSON machen kann. Na gut.. Hauptsache es funktioniert

Das sind halt typische Anfängerfehler, man sucht im Forum nach irgendeiner Lösung und versucht den gefundenen Code so umzustellen bis dieser beim eigenen Projekt läuft, auch wenn es sehr umständlich und unschön ist.
Ich bin ja bereit dazuzulernen und werde versuchen es auf readingXXJSON umzustellen.

Edit: 09.08.2020 14:13 - HTTPMOD auf readingXXJSON umgestellt. da ich nicht alle Readings benötige, der Weg über userattr.

Vielen Dank für deine Hilfe, werde dich leider noch öfters nerven müssen.

Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

Bobby

Hallo Reinhard,

den Heizstab ein und auszuschalten hast du hinbekommen. Hast du es auch hinbekommen ihn zu steuern?

Mit deiner Definition habe kann ich die Werte auslesen. Jetzt hänge ich an der Steuerung.

Bin für jeden Tipp dankbar.

Grüße Thomas

ch.eick

Eventuell wäre hier noch eine Spur zu finden.
Da ist eine Anbindung an einen WR direkt über einen Router dargestellt. Da könnte man mal Forschen, wie es dort gemacht wurde.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Rewe2000

Hallo Thomas,

grundsätzlich solltest du mal klären. ob du den Heizstab zwingend über HTTPMOD oder Json ansprechen musst, denn er kann ja auch Modbus direkt. Ich musste auf HTTPMOD ausweichen, da die Modbusschnittstelle des AC-ELWA-E nur eine Verbindung zulässt und diese wird bereits vom E3DC Stromspeicher "besetzt". Vom Hersteller my-PV erhältst du die Modbusregister des Heizstabs, damit du diesen über Modbus auslesen und auch steuern kannst, in Fhem gibt es mehrere Modbus Module, mit welchen du den Heizstab dann anbinden kannst.

Ich verwende die Module ModbusRegister von StefanStrobel und ModbusTCPServer und ModbusCoil von ChrisD siehe https://forum.fhem.de/index.php?topic=12655.msg165744#msg165744 für andere Geräte.

Ich sende dir mal als PM eine etwas ältere Modbus Doku des Herstellers, du solltest aber in jedem Fall die neueste Version anfordern.

Wenn du aber mit HTTPMOD weitermachen willst, so gehe wie im Beitrag #6 https://forum.fhem.de/index.php?topic=112986.msg1077027#msg1077027 von amenomade beschrieben vor, um zu sehen welcher HTML Call hier an die Datei "setup.jsn gesendet wird. Ich selbst schalte nur den Heizstab über Fhem ein und aus um diesen im Sommer vorwiegend in der Mittagszeit laden zu lassen um der Abregelung zuvorzukommen. Die anderen Werte lese ich nur aus, um den Heizstab über FUIP (HTTP Mode) zu visualisieren, das alles klappt bei mir perfekt seit einigen Jahren. Die unterschiedlichen Betriebszustände visualisiere ich über Icons welche ich über URL-Links aufrufe.

Viel Erfolg
Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky