Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for VE.Direct HEX protocol #833

Merged
merged 3 commits into from
Apr 3, 2024
Merged

Support for VE.Direct HEX protocol #833

merged 3 commits into from
Apr 3, 2024

Conversation

schlimmchen
Copy link
Member

Adds decoding and encoding methods for handling HEX protocol data, by @SW-Niko. Requests MPPT temperature, battery sense temperature (if part of VE.Smart network) and VE.Smart network total DC input power using HEX protocol from supported MPPT charge controller (TX pin must be defined, firmware must be sufficiently recent). Uses the new info in DPL and web app.

SW-Niko and others added 3 commits April 2, 2024 21:29
* show charge controller temperature in live view
* send hex requests right after decoding a frame. this seems to have the
  best chance of getting an answer to all requests.
* deem 0xFFFFFFFF value of network total DC power as invalid indicator.
  neither network state, nor network info, nor network mode seem to
  indicate that the charge controller is part of a VE.Smart network. for
  that reason, we revert to always querying the network total DC power
  value, but testing it for max(uin32_t) value, which seems to indicate
  that the charge controller is not part of a VE.Smart network.
* improve (verbose) logging, e.g., use _logId, and print names of
  response codes and known registers, always print error messages,
  add additional tests to prevent overly verbose messages.
* move hex protocol definitions to VeDirectData.h header
  and use enum classes
* define register addresses in enum class
* move values retrieved through hex protocol into main MPPT data struct
* do not send HEX requests if the serial interface cannot send data
* detect whether smart battery sense temperature is available
* web app: make all VE.Direct sub-cards iterable. this makes addind more
  values much simpler and saves a bunch of code in the web app.
* make VeDirectFrameHandler state a type-safe enum class
* unindent MPPT controller loop()
* whitespace cleanup
1. makes the DPL use the power generated by all connected charge
   controllers for calculations based on solar passthrough.
2. makes the network total DC power appear as "MPPT Total Power" in the
   live view at the top.
3. shows the network total DC power in the VE.Direct live data card.
@schlimmchen
Copy link
Member Author

@SW-Niko Magst du das einmal testen? Ich bin sehr zufrieden. Die Netzwerk-Gesamtleistung wird zuverlässig abgefragt, die MPPT Temperatur ebenso. Ich habe meinen zweiten, noch nicht an Module angeschlossenen Laderegler ins VE.Smart network gesteckt mit dem ersten, und beide sehen die gleiche "network DC input power". Da der eine keine Leistung liefert, entspricht der Wert stets der Eingangsleistung des ersten.

@SW-Niko
Copy link

SW-Niko commented Apr 2, 2024

Klar, mach ich....

@SW-Niko
Copy link

SW-Niko commented Apr 3, 2024

Ich habe den Branch #833 lokal gezogen, compiliert und eingespielt.
Wenn ich nichts falsch gemacht habe dann sehe ich auf der Weboberfläche die richtige Gesamtleistung.
Aber meine beiden MPPTs werden nicht angezeigt.

Hier ein kleiner Ausschnitt aus dem Log:

PowerMeterClass: TotalPower: 117.20
09:07:53.219 > [DPL::announceStatus] no energy source available to power the inverter from
09:07:53.422 > [DPL::updateInverter] sending limit of 8.0 % (24 W respectively), max output is 300 W
09:07:53.489 > [DPL::announceStatus] waiting for a power limit command to complete
09:07:53.550 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:07:53.814 > [VE.Direct MPPT 22/21] failed to disassemble the hex message: :A4F10000100000000007D1B00007D1B00004A11A60B1E3C04FFFFFFFFFFFFFFFFFFFFFFFFFF5E
09:07:53.863 > [VE.Direct MPPT 22/21] failed to disassemble the hex message: :A501000000300000000000000590A190A0000000000980000000000290000000F000E0F6A010A
09:07:54.029 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '0')
09:07:54.384 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:07:54.432 > Websocket: [/livedata][5] disconnect
09:07:54.482 > Websocket: [/vedirectlivedata][5] disconnect
09:07:55.032 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '0')
09:07:55.215 > Success
09:07:55.273 > Fetch inverter: 112182846421
09:07:55.511 > [DPL::updateInverter] actual limit is 8.0 % (24 W respectively), effective 2034 ms after update started, requested were 8.0 %
09:07:55.716 > [DPL::announceStatus] waiting for sufficiently recent inverter data
09:07:55.925 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:07:55.977 > Last missing
09:07:56.126 > Request retransmit: 2
09:07:56.433 > Last missing
09:07:56.483 > Request retransmit: 2
09:07:56.532 > Success
09:07:56.741 > [DPL::announceStatus] waiting for sufficiently recent power meter reading
09:07:57.047 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '0')
09:07:57.101 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:07:57.354 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '0')
09:07:57.560 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:07:58.045 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '0')
09:07:58.173 > [VE.Direct MPPT 34/-1] failed to disassemble the hex message: :A4F1000010000000000A8260000A82600008611A70B1E2205FFFFFFFFFFFFFFFFFFFFFFFFFFCE
09:07:58.379 > [VE.Direct MPPT 34/-1] failed to disassemble the hex message: :A501000000400000022000000590A010A00000000009500000000004600000019003A0FB20068
09:07:58.585 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:07:59.050 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '0')
09:07:59.199 > Fetch inverter: 112182846421
09:07:59.332 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:07:59.724 > Success
09:08:00.054 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '0')
09:08:00.333 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:01.058 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '0')
09:08:01.333 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:02.063 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '0')
09:08:02.334 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:03.068 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '0')
09:08:03.372 > PowerMeterClass: TotalPower: 98.33
09:08:03.499 > [DPL::updateInverter] sending limit of 29.3 % (88 W respectively), max output is 300 W
09:08:03.703 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:03.907 > [DPL::announceStatus] waiting for a power limit command to complete
09:08:04.113 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '0')
09:08:04.318 > [VE.Direct MPPT 34/-1] failed to disassemble the hex message: :A4F1000010000000000A8260000A82600008611A70B1E2205FFFFFFFFFFFFFFFFFFFFFFFFFFCE
09:08:04.524 > [VE.Direct MPPT 34/-1] failed to disassemble the hex message: :A501000000400000022000000590A010A0000000000950000000000460000001A003A0FB20067
09:08:04.725 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:05.077 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '0')
09:08:05.342 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:05.422 > Success
09:08:05.648 > Fetch inverter: 112182846421
09:08:05.751 > [DPL::updateInverter] actual limit is 29.0 % (87 W respectively), effective 2036 ms after update started, requested were 29.3 %
09:08:05.799 > [DPL::updateInverter] Starting inverter...
09:08:05.956 > [DPL::announceStatus] waiting for a start/stop/restart command to complete
09:08:06.005 > Success
09:08:06.077 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '0')
09:08:06.336 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:07.085 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '3300')
09:08:07.338 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:08.000 > Success
09:08:08.087 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '3500')
09:08:08.337 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:09.094 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '3600')
09:08:09.339 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:09.412 > Fetch inverter: 112182846421
09:08:09.944 > Success
09:08:09.992 > [DPL::announceStatus] waiting for sufficiently recent power meter reading
09:08:10.258 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '3600')
09:08:10.461 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:10.511 > [VE.Direct MPPT 34/-1] failed to disassemble the hex message: :A4F1000010000000000A8260000A82600008611A70B1E2205FFFFFFFFFFFFFFFFFFFFFFFFFFCE
09:08:10.666 > [VE.Direct MPPT 34/-1] failed to disassemble the hex message: :A501000000400000022000000590A010A0000000000950000000000470000001A003A0FB20066
09:08:11.102 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '3800')
09:08:11.340 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:12.108 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '3300')
09:08:12.338 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:13.113 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '3800')
09:08:13.342 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:13.922 > PowerMeterClass: TotalPower:  9.48
09:08:13.981 > [DPL::announceStatus] the system is stable, the last power limit is still valid
09:08:14.257 > Fetch inverter: 112182846421
09:08:14.308 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '3500')
09:08:14.357 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:14.466 > Success
09:08:15.120 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '3600')
09:08:15.379 > Success
09:08:15.433 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:16.451 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:16.606 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '3400')
09:08:17.129 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '3700')
09:08:17.343 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:17.936 > Fetch inverter: 112182846421
09:08:18.131 > [VE.Direct MPPT 34/-1] Unknown text data 'IL' (value '3700')
09:08:18.345 > [VE.Direct MPPT 22/21] Unknown text data 'IL' (value '0')
09:08:18.469 > Success

@schlimmchen
Copy link
Member Author

Hast du etwa vergessen, die Web App zu bauen vorm Kompilieren der Firmware? 🧐

@SW-Niko
Copy link

SW-Niko commented Apr 3, 2024

Ja genau, Noch nie gemacht. Ich schau mir mal an wie das geht.

PS: Unknown text data 'IL' (value '3300') Kommt nur von MPPTs mit Lastausgang.
und bei "failed to disassemble the hex message: :A4F1000010000000000A8260000A82600008611A70B1E2205FFFFFFFFFFFFFFFFFFFFFFFFFFCE"
ist auch seltsam. Das muss ich mir noch genauer anschauen.

@schlimmchen
Copy link
Member Author

Ich schau mir mal an wie das geht.

https://www.opendtu.solar/firmware/compile_webapp/

Das IL sollten wir einfach noch parsen. Müssen es ja nicht weiterverarbeiten. Bzgl. SmartShunt gibt es auch noch Werte zu parsen, die sonst bemängelt werden, siehe #834.

@SW-Niko
Copy link

SW-Niko commented Apr 3, 2024

und bei "failed to disassemble the hex message: :A4F1000010000000000A8260000A82600008611A70B1E2205FFFFFFFFFFFFFFFFFFFFFFFFFFCE"

Ok, Das sind Historische Daten, die werden (noch) nicht bearbeitet. Mir ist bis jetzt nur nicht aufgefallen, das die automatisch als asynchrone Daten gesendet werden.

Die Web App kann ich nicht bauen. Anscheinend wird yarn nicht gefunden.
PS E:\Daten-Stefan\Solar\OpenDTU-OnBattery> cd webapp
PS E:\Daten-Stefan\Solar\OpenDTU-OnBattery\webapp> yarn install
yarn : Die Benennung "yarn" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und
wiederholen Sie den Vorgang.
In Zeile:1 Zeichen:1

  • yarn install
  •   + CategoryInfo          : ObjectNotFound: (yarn:String) [], CommandNotFoundException
      + FullyQualifiedErrorId : CommandNotFoundException
    

@SW-Niko
Copy link

SW-Niko commented Apr 3, 2024

Jaaaaaa 😄
Geschafft. Web App compiliert und eingebaut. Die Temperatur und die Gesamtleistung wird in der Web App angezeigt. 👍
Sehr schön.
Momentan habe ich nur zu einem MPPT eine Tx Leitung. Muss ich für den 2ten noch nachziehen.

@schlimmchen
Copy link
Member Author

Nice! Danke für die Rückmeldung, dann nehmen wir das mal in den development Branch.

@schlimmchen schlimmchen merged commit 21cdc69 into development Apr 3, 2024
10 checks passed
@schlimmchen schlimmchen deleted the vedirect-hex branch April 3, 2024 14:33
@SW-Niko
Copy link

SW-Niko commented Apr 3, 2024

Hallo @schlimmchen ,
wenn du nichts dagegen hast dann bleibe ich an dem Thema dran und parse noch die fehlenden Werte um das Logging wieder zu bereinigen.

@schlimmchen
Copy link
Member Author

Sehr gerne. Hast du einen SmartShunt um zu testen! Von mir aus können wir auch nach Auge implementieren und jemand anders testen lassen (hab vergessen, wer berichtete, aber derjenige z.B. könnte es testen).

@SW-Niko
Copy link

SW-Niko commented Apr 3, 2024

Nein, ich habe keinen Smart Shunt. Wir finden schon jemanden der das testen kann.

@spcqike
Copy link

spcqike commented Apr 3, 2024

Ich weiß nicht ob’s hilft, aber es gibt einen DIY smartshunt

https://github.com/kscholty/SmartShuntINA226

den kann man auf nem esp laufen lassen.

So einen würde ich mir wohl zusammen basteln, wenn ich mal ne Batterie brauche :)

@SW-Niko
Copy link

SW-Niko commented Apr 3, 2024

Danke für die Info @spcqike .
Für die 3 Zeilen Code Änderungen mach ich mir nicht die Mühe und baue das zusammen. Da bin ich jetzt zu faul. 😁
Aber ... wenn mal was Größeres ansteht dann ist das eine interessante Alternative. 👍

@tonibbb
Copy link

tonibbb commented Apr 18, 2024

und bei "failed to disassemble the hex message: :A4F1000010000000000A8260000A82600008611A70B1E2205FFFFFFFFFFFFFFFFFFFFFFFFFFCE"

Ok, Das sind Historische Daten, die werden (noch) nicht bearbeitet. Mir ist bis jetzt nur nicht aufgefallen, das die automatisch als asynchrone Daten gesendet werden.

Die Web App kann ich nicht bauen. Anscheinend wird yarn nicht gefunden. PS E:\Daten-Stefan\Solar\OpenDTU-OnBattery> cd webapp PS E:\Daten-Stefan\Solar\OpenDTU-OnBattery\webapp> yarn install yarn : Die Benennung "yarn" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen Sie den Vorgang. In Zeile:1 Zeichen:1

* yarn install

* ```
    + CategoryInfo          : ObjectNotFound: (yarn:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
  ```

Hallo SW-Nico,
also ich kann mit dem ganzen "Programmieren" nichts anfangen und versuche entsprechend der Anleitung bzgl. webapp ebenfalls die Gesamtleistung irgendwie in meine DTU zu bekommen. Nun hänge ich am gleichen Punkt wie du zuvor, dass dieses "yarn" nicht gefunden wird. Gleiche Fehlermeldung. Wie bist du denn dann weitergekommen?

@SW-Niko
Copy link

SW-Niko commented Apr 18, 2024

Hallo @tonibbb,
ich denke die Gesamtleistung wird im kommenden FW-Build enthalten sein.

Falls du die FW selber bauen magst dann google mal nach "Yarn"
grafik
Yarn auf deinem Rechner installieren und dann weiter nach der Anleitung.

@schlimmchen
Copy link
Member Author

@tonibbb Mein Vorschlag lautet, dass du dir ein Github Build Artefakt vom dem development Branch nimmst, z.B. jenes basierend auf 1d4bea2. Dann musst du gar nichts bauen. Die Funktionalität ist darin enthalten (weil diese Firmware auf Bais des development Branches gebaut wird). Mit einem neuem Firmware-Release darfst du innerhalb der nächsten Woche rechnen.

@tonibbb
Copy link

tonibbb commented Apr 18, 2024

Da warte ich doch gerne auf das nächste Release (schneller wäre ich wohl ohnehin nicht).

@tonibbb
Copy link

tonibbb commented May 4, 2024

Da ich mir leider das vorgestern veröffentlichte Update wegen inkompatiblem ESP nicht einspielen konnte, habe ich mir der/die/das Build aus #1156 gezogen. Kann mir einer sagen, ob hierbei "automatisch" die Gesamtleistung der Victrons für Solarpassthrough herangezogen wird oder ob dies noch i-wo eingestellt wird? Gibt ja ne Menge neue Einstellmöglichkeiten im DPL und vielleicht wird dieses nur über bestimmte Einstellungen diverser Start-/Stoppspannungen erreicht?

@SW-Niko
Copy link

SW-Niko commented May 7, 2024

Hallo @tonibbb ,
Bei OpenDTU-OnBattery wird automatisch die Gesamtleistung über das HEX protokoll verwendet, falls verfügbar.
Ich bezweifle das das upstream Projekt das HEX Protokoll verwendet, aber sicher bin ich mir nicht.

@tonibbb
Copy link

tonibbb commented May 7, 2024

Ja, kann ich inzwischen bestätigen, dass in diesem upstream die Gesamtleistung automatisch Verwendung findet.

@tonibbb
Copy link

tonibbb commented May 7, 2024

Sehr schön, Dank an alle Beteiligten!

@schlimmchen
Copy link
Member Author

habe ich mir der/die/das Build aus tbnobody#1156 gezogen

Gemeint ist womöglich der Build Run 1156: https://github.com/helgeerbe/OpenDTU-OnBattery/actions/runs/8739875857 Der Text #1156 wurde vermutlich ungewollt zu einem Link zum Upstream umgewandelt.

Ich bezweifle das das upstream Projekt das HEX Protokoll verwendet, aber sicher bin ich mir nicht.

OpenDTU (das Upstream-Projekt) kennt keinerlei Unterstützung für VE.Direct.

Ja, kann ich inzwischen bestätigen, dass in diesem upstream die Gesamtleistung automatisch Verwendung findet.

Bitte einfach das Release 2024.05.06 oder jünger verwenden, das ist die Verwendung der VE.Smart Netzwerkgesamtleistung drin.

Copy link

github-actions bot commented Jun 7, 2024

This pull request has been automatically locked since there has not been any recent activity after it was closed. Please open a new discussion or issue for related concerns.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Jun 7, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants