Closed thomasleitner closed 8 months ago
Ich frage mich ob der Code überhaupt jemals funktioniert hat, weil die aktuellen Mappings nehmen sowas wie solar->total_phase_3 für die Solarleistung ... was nicht ganz einleuchtend ist ...
ja, das ist derzeit etwas unflexibel und passt nur auf das setup das ich betrieben habe.
grid: current_phase1,2,3 = sind offenbar mit 10 Multipliziert und müssten vor der Übergabe an OpenWB wieder dividiert werden.
das lässt sich relativ leicht lösen, allerdings brauch ich dafür die modellnummer, damit ich das mapping hier updaten kann: https://github.com/BenediktSeidl/prpd_usb/blob/bad942e534d3c5c1f6648c6924f2d926c7ef4cd6/prpd_usb/schema.py#L95-L98
solar: Hier klappt das Mapping überhaupt nicht. Im Prinzip will ich bei Solar nur zwei Werte: Die Leistung (W) und die Energie (WhProduced) ...
hier wird es ein bisschen komplizierter, aber nicht unmöglich:
dann kann ich überprüfen ob bzw. wie die daten ausgelesen werden und es entsprechend anpassen.
Danke für Deine Antwort. Mein Powerrouter ist ein PR37SB-BS/S240, Seriennummer 9561773H426B8716
Frage: Warum willst Du da extra die USB Daten sniffen für die PV Leistung? Es sollte ja reichen Spannung1Strom1 + Spannung2Strom2 zu rechnen für die Leistung?
Oder meinst Du das die Leistung schon übertragen wird, aber nur nicht korrekt decodiert?
Danke Dir!
ich könnte mir vorstellen, dass der powerrouter bereits die passenden daten vorhält, und man nur die richtigen befehle absenden muss um die daten zu erhalten. wenn du die benötigten daten in der offiziellen software sehen kannst, ist die wahrscheinlichkeit sehr hoch, dass man diese (ohne weitere berechnungen) direkt auslesen kann. ich denke das wäre dann der beste weg das problem zu lösen. bei wechselstrom muss man afaik noch nach wirk- schein- und blind-leistung unterscheiden, ich denke da wäre es das beste auf die "offiziellen" werte zu vertrauen.
wenn du direkt ./prpd_usb -vvvv
(evtl. mit dem korrekten seriellen port) ausführst, solltest du eine fehlermeldung sehen in der form: Exception: Model 'XXXXX' is not know yet. You can try to specify another model via --model, or open an issue
was steht da an der stelle von 'XXXXX'
?
Der Output ergibt:
2021-09-16 10:08:54,503 INFO :: prpd_usb.prpd :: Found model 9561773 with serialnumber b'H426B8716' ..... Exception: Model '9561773' is not know yet. You can try to specify another model via --model, or open an issue
Hilft das was?
ja, allerdings nur in kombination mit den mitgelesenen usb daten der offiziellen software. wenn du diese zur verfügung stellst, könnte ich das programm entsprechend erweitern, dass auch dein modell unterstützt wird.
Super ... danke .... ich schau das ich die USB Daten bald mitlesen kann und Dir schicken kann ...
Habe nun einen Datenmitschnitt mit USBPCAP gemacht und ein Wireshark kompatibles Recording File erzeugt. Es läßt sich mit Wireshark ansehen. Leider sind auch Mausbewegungen aufgezeichnet ... Mit USBPCAP war es nicht möglich nur ein USB Interface aufzuzeichnen ... aber im Wireshark kann man das filtern. Ich hoffe das hilft Dir das Protokoll und die notwendigen Daten zu entschlüsseln. Das File ist unter diesem Link verfügbar: https://www.dropbox.com/s/hw3ex5dqryg2wyf/pr?dl=0
schaut soweit ganz gut aus, allerdings werde ich ein ein paar tage brauchen bis ich zeit finde mich darum zu kümmern.
Ok Danke!
jetzt ging es doch schneller als gedacht. ich habe jetzt PR37SB
als neues modell hinzugefügt.
nachdem ich keinen funktionierenden powerrouter mehr habe bin ich auf deine tests angewiesen.
neue befehle musste ich keine implementieren, ich habe nur die bereits vorhandenen neu kombiniert.
Wow … super. Ich probier es und melde mich … danke.
Schaut schon mal sehr gut aus ... mein Powerrouter Model wird ohne Änderung erkannt:
(v) root@openwb:~/prpd_usb# prpd_usb -vv stdout 2021-10-04 11:24:23,637 WARNING :: root :: starting prpd_usb version 0.1.dev19+gd5fcb1a 2021-10-04 11:24:23,637 INFO :: prpd_usb.prpd :: opening serial port '/dev/ttyUSB0' 2021-10-04 11:24:23,643 DEBUG :: prpd_usb.prpd :: successfully opened serial port '/dev/ttyUSB0' 2021-10-04 11:24:23,644 DEBUG :: prpd_usb.prpd :: sent request 5a0052500000481ca5, waiting for 25 bytes response 2021-10-04 11:24:23,653 DEBUG :: prpd_usb.prpd :: got response with 25 bytes 2021-10-04 11:24:23,654 INFO :: prpd_usb.prpd :: Found model 9561773 with serialnumber b'H426B8716' 2021-10-04 11:24:23,654 INFO :: prpd_usb.prpd :: Identified model PR37SB 2021-10-04 11:24:23,655 DEBUG :: prpd_usb.prpd :: sent request 5a0070010000e147a5, waiting for 30 bytes response 2021-10-04 11:24:23,669 DEBUG :: prpd_usb.prpd :: got response with 30 bytes 2021-10-04 11:24:23,670 DEBUG :: prpd_usb.prpd :: sent request 5a0070020000e1b7a5, waiting for 31 bytes response 2021-10-04 11:24:23,685 DEBUG :: prpd_usb.prpd :: got response with 31 bytes 2021-10-04 11:24:23,686 DEBUG :: prpd_usb.prpd :: sent request 5a007003000021e6a5, waiting for 19 bytes response 2021-10-04 11:24:23,701 DEBUG :: prpd_usb.prpd :: got response with 19 bytes 2021-10-04 11:24:23,702 DEBUG :: prpd_usb.prpd :: sent request 5a0070040000e057a5, waiting for 35 bytes response 2021-10-04 11:24:23,717 DEBUG :: prpd_usb.prpd :: got response with 35 bytes 2021-10-04 11:24:23,717 DEBUG :: prpd_usb.prpd :: sent request 5a00700500002006a5, waiting for 23 bytes response 2021-10-04 11:24:23,733 DEBUG :: prpd_usb.prpd :: got response with 23 bytes 2021-10-04 11:24:23,733 DEBUG :: prpd_usb.prpd :: sent request 5a00710100001d46a5, waiting for 17 bytes response 2021-10-04 11:24:23,749 DEBUG :: prpd_usb.prpd :: got response with 17 bytes 2021-10-04 11:24:23,749 DEBUG :: prpd_usb.prpd :: sent request 5a00710200001db6a5, waiting for 21 bytes response 2021-10-04 11:24:23,765 DEBUG :: prpd_usb.prpd :: got response with 21 bytes 2021-10-04 11:24:23,765 DEBUG :: prpd_usb.prpd :: sent request 5a0071030000dde7a5, waiting for 17 bytes response 2021-10-04 11:24:23,781 DEBUG :: prpd_usb.prpd :: got response with 17 bytes 2021-10-04 11:24:23,781 DEBUG :: prpd_usb.prpd :: sent request 5a00710400001c56a5, waiting for 21 bytes response 2021-10-04 11:24:23,797 DEBUG :: prpd_usb.prpd :: got response with 21 bytes 2021-10-04 11:24:23,797 DEBUG :: prpd_usb.prpd :: sent request 5a0071050000dc07a5, waiting for 21 bytes response 2021-10-04 11:24:23,813 DEBUG :: prpd_usb.prpd :: got response with 21 bytes { "battery": { "voltage": 24.240000000000002, "current": -2.88, "power": -59, "soc": 61, "temp1": 24.0, "temp2": 47.7, "consumed": 5833463, "produced": 4517226 }, "solar": { "voltage_string_1": 187.92000000000002, "current_string_1": 5.64, "voltage_string_2": 186.58, "current_string_2": 5.6000000000000005, "status": 16, "w_phase_1": 0, "w_phase_2": 0, "w_phase_3": 0, "va_phase_1": 0, "va_phase_2": 0, "va_phase_3": 0, "total_string_1": 10201492, "total_string_2": 10589212, "total": 20790703, "total_phase_1": 0, "total_phase_2": 0, "total_phase_3": 0 }, "platform": { "frequency": 49.99, "voltage": 227.70000000000002, "temp": 31.0, "status": 18707, "power": -246, "consumed": 58061899, "produced": 1659361 }, "grid": { "current_phase_1": 1.03, "current_phase_2": 1.17, "current_phase_3": 2.7800000000000002, "voltage_phase_1": 226.60000000000002, "voltage_phase_2": 226.10000000000002, "voltage_phase_3": 226.10000000000002, "power_w_phase_1": 203, "power_w_phase_2": 176, "power_w_phase_3": -625, "power_va_phase_1": 233, "power_va_phase_2": 280, "power_va_phase_3": 688, "total_phase_1": 26699300, "total_phase_2": 30154300, "total_phase_3": 40487400 } }
Als nächstes teste ich das MQTT auf OpenWB ...
Hier passt was nicht ganz:
"solar": {
"voltage_string_1": 188.70000000000002,
"current_string_1": 5.8,
"voltage_string_2": 183.65,
"current_string_2": 5.89,
"status": 16,
"w_phase_1": 0,
"w_phase_2": 0,
"w_phase_3": 0,
"va_phase_1": 0,
"va_phase_2": 0,
"va_phase_3": 0,
"total_string_1": 10202015,
"total_string_2": 10589728,
"total": 20791743,
"total_phase_1": 0,
"total_phase_2": 0,
"total_phase_3": 0
},
Bei Solar sollte die Leistung wohl w_string_1 und w_string_2 heißen. w_phase_1,2,3 sowie va_phase_1,2,3 sind dort überflüssig. Ebenso wie total_phase_1,2,3 ....
Die EVU Leistungen werden nun per MQTT richtig an OpenWB übergeben ... nur die PV/Solar Daten nicht. Hier kommt immer 0...
hast du die noch fehlenden werte in der offiziellen software gesehen? falls ja wäre evtl. noch mal ein mitschnitt mit einem screenshot hilfreich, der die werte in der offiziellen gui zeigen. dann kann ich nach genau den zahlen suchen. ich habe gerade noch mal geschaut: es gibt zwei befehle in deinem mitschnitt die ich bisher nicht verwende, aber die daten schauen nicht besonders hilfreich aus. von der offiziellen software wurden auf jeden fall die solar werte die alle 0 ausgeben genauso oft wie die anderen werte abgefragt...
Hier noch ein Recording mit Screenshots der einzelnen Daten ... https://www.dropbox.com/sh/rf2otmnkfdbxn2e/AACYOeTydg_ImM_8_p6B489oa?dl=0
hab es mir heute noch mal genauer angeschaut: mir scheint wirklich als ob auch die offizielle gui hier die watt-anzeige aus dem strom und der spannung berechnet. bei gleichstrom (was es da ja scheinbar noch ist?!) sollte das ja auch wirklich so einfach funktionieren. ich habe es entsprechend eingebaut. ich denke mit dem aktuellen stand könnte das jetzt bei dir funktionieren.
allerdings ist mir noch etwas andere aufgefallen: für openWB/set/evu/WhExported
wird einfach der Wh-zähler des produzierten solar stroms verwendet. hier sollte ja eigentlich noch die energie abgezogen werden die von der batterie aufgenommen wurde?
allerdings kommt mir das auch nicht ganz richtig vor: wenn wir annehmen es kommt ein starker winter, und wie bekommen über längere zeit gar keinen solarstrom, verbraucht ja trotzdem die batterie etwas energie für den standby modus. d.h. der zähler für openWB/set/evu/WhExported
würde sich dann rückwärts drehen. das kann ja auch nicht stimmen...
sollte es jetzt funktionieren beobachte bitte dein system ob alles wie gewünscht funktioniert, ansonsten können wir noch weitere änderungen vornehmen.
Hallo, Danke Dir ... schaut schon gut aus ... ein Problem noch:
"grid": {
"current_phase_1": 1.21,
"current_phase_2": 1.17,
"current_phase_3": 2.11,
"voltage_phase_1": 228.8,
"voltage_phase_2": 229.10000000000002,
"voltage_phase_3": 227.4,
"power_w_phase_1": 247,
"power_w_phase_2": 175,
"power_w_phase_3": -437,
"power_va_phase_1": 278,
"power_va_phase_2": 268,
"power_va_phase_3": 480,
"total_phase_1": 26833800,
"total_phase_2": 30296000,
"total_phase_3": 40704600
}
Auf Phase 3 wird bei mir eingespeist. Die Leistung ist negativ ... daher sollte der Strom auch negativ sein. Also current_phase_3 sollte -2.11 sein in diesem Beispiel.
ich kann nachvollziehen warum dich das wurmt, allerdings würde ich da nur sehr ungern etwas daran ändern, weil ich diese zahlen 1:1 genau so vom gerät bekomme und sie einfach nur so durch reiche. interessant dabei: das datenfeld könnte theoretisch auch negative zahlen darstellen (das geht z.b. bei voltage_phase_X
nicht, da sind nur positive zahlen vorgesehen) aber es werden scheinbar nur positive zahlen übertragen.
technisch würde sich das schon irgendwie machen lassen, aber das würde dann schon auf wackeligen beinen stehen.
gibt es einen technischen grund, wofür du es brauchst? vielleicht finden wir dafür eine andere lösung?
Hallo, Mittlerweile hab ich das anders gelöst. Ich nehme den Json output, parse die Daten heraus mit jq die ich brauche, stelle noch die Berechnungen an die ich brauche und poste das Ganzen per mosquito_pub selber an die OpenWB …
Servus Benedikt, Ich wollte per prpd_usb die Daten per MQTT an OpenWB schicken. Leider gibts mit den Mappings einige Probleme. Hier ist was mein Powerrouter (PR35SB, sollte identisch mit PR50SB sein) ausgibt:
Damit folgende Probleme: grid: current_phase1,2,3 = sind offenbar mit 10 Multipliziert und müssten vor der Übergabe an OpenWB wieder dividiert werden. solar: Hier klappt das Mapping überhaupt nicht. Im Prinzip will ich bei Solar nur zwei Werte: Die Leistung (W) und die Energie (WhProduced) ... für ersteres ist kein direkter Meßwert da und man müsste voltage_string_1current_string_1 + voltage_string_2 current_string_2 rechnen und das dann übergeben per MQTT. Die Energie wäre einfach solar->total.
Ich habe mir deinen Code anschaut und bin leider nicht Python fähig. Einzelne Mappings kann ich zwar ändern basierend auf Deinem Code, aber die einfache Berechnung der PV Leistung bring ich nicht so leicht hin.
Kannst Du eventuell die notwendigen Änderungen vorschlagen? Ich frage mich ob der Code überhaupt jemals funktioniert hat, weil die aktuellen Mappings nehmen sowas wie solar->total_phase_3 für die Solarleistung ... was nicht ganz einleuchtend ist ...
Danke und schöne Grüße // Tom