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

Minor VeDirect Improvements (parse additional values, ... ) #840

Merged
merged 1 commit into from
Apr 7, 2024

Conversation

SW-Niko
Copy link

@SW-Niko SW-Niko commented Apr 3, 2024

@SW-Niko
Copy link
Author

SW-Niko commented Apr 3, 2024

Bei verboseLogging = off
Taucht im Logging bei mir nichts mehr auf.
Bei verboseLogging = on
Noch jede Menge. Mein Vorschlag .. Die "Sending Hex Command" und die "Unhandled Hex .. " auch noch entfernen.
[VE.Direct MPPT 22/21] Sending Hex Command: :7DBED0086, Free FIFO-Buffer: 118
[VE.Direct MPPT 22/21] Sending Hex Command: :7ECED0075, Free FIFO-Buffer: 118
[VE.Direct MPPT 22/21] Sending Hex Command: :727200007, Free FIFO-Buffer: 118
[VE.Direct MPPT 22/21] Unhandled Hex Async Response, addr: 0x0200 (Device Mode), value: 0x00000001, flags: 0x00
[VE.Direct MPPT 22/21] Unhandled Hex Async Response, addr: 0x0202 (Remote Control Used), value: 0x00000002, flags: 0x00
[VE.Direct MPPT 22/21] Unhandled Hex Async Response, addr: 0x0201 (Device State), value: 0x00000000, flags: 0x00
[VE.Direct MPPT 22/21] Hex Data: MPPT Temperature (0xEDDB): 32.70°C
[VE.Direct MPPT 22/21] Hex Data: Smart Battery Sense Temperature (0xEDEC): 23.75°C
[VE.Direct MPPT 22/21] Hex Data: Network Total DC Power (0x2027): 0.00W
[VE.Direct MPPT 22/21] Unhandled Hex Async Response, addr: 0xEDD5 (Charger Voltage), value: 0x00000A2E, flags: 0x00
[VE.Direct MPPT 22/21] Unhandled Hex Async Response, addr: 0xEDA9 (???), value: 0x00000078, flags: 0x00
[VE.Direct MPPT 22/21] Unhandled Hex Async Response, addr: 0x2002 (???), value: 0x0000FFFF, flags: 0x00

Und dann ist mir noch aufgefallen das diese Abfrage nicht mehr ganz richtig ist, weil in _lastByteMillis die Hex Bytes und die Text (Frame) Bytes vermischt werden. Das korrigiere ich auch noch.

// there will never be a large gap between two bytes of the same frame.
// if such a large gap is observed, reset the state machine so it tries
// to decode a new frame once more data arrives.
if (State::IDLE != _state && (millis() - _lastByteMillis) > 500) {

@schlimmchen
Copy link
Member

Mein Vorschlag .. Die "Sending Hex Command" und die "Unhandled Hex .. " auch noch entfernen.

Das finde ich nicht so gut. Im Falle, dass man etwas debuggen muss, insb. wenn man anderen helfen möchte, muss man schon sehen, was rausgeht und reinkommt.

weil in _lastByteMillis die Hex Bytes und die Text (Frame) Bytes vermischt werden.

Das verstehe ich nicht. Präsentiere gerne deinen Fix, dann verstehe ich vermutlich welches Problem du erkannt hast.

@schlimmchen schlimmchen linked an issue Apr 4, 2024 that may be closed by this pull request
@SW-Niko
Copy link
Author

SW-Niko commented Apr 4, 2024

Das verstehe ich nicht. Präsentiere gerne deinen Fix, dann verstehe ich vermutlich welches Problem du erkannt hast.

Findest du in meinem letzten Commit.
Hintergrund:
Die state machine wird jetzt nur dann zurückgesetzt wenn zwischen 2 text bytes mehr als 500ms vergangen sind.
Das war bereits früher mit asynchronen Nachrichten vermischt. Durch die Implementierung der hex Nachrichten wird es immer unwahrscheinlicher das ein reset über den 500ms Check ausgelöst wird.

Und in der Funktion isDataValid() habe ich die Abfrage "_lastUpdate > 0" weil sie keinen Mehrwert bringt und ein check > 0 bei einem periodisch überlaufenden Zähler potentiell gefährlich ist mit ... ok...sehr geringem Risiko.

@SW-Niko
Copy link
Author

SW-Niko commented Apr 5, 2024

Die veMpptStruct habe ich abgeändert. Namen und types angepasst.
Auf der Web App ist alles wie vorher (Werte und Nachkommastellen) Mqtt kann ich nicht testen!
Wenn es so passt dann kann ich die veStruct auch noch anpassen.

Schau dir doch mal diese Umwandlung an.
_tmpFrame.offReason_OR = strtol(value.c_str(), nullptr, 0); // SW-Nico basis 16 ?
Wenn ich die Victron Doku anschaue, dann werden hex Stings übertragen und damit von uns falsch gewandelt.
11:57:03.168 > [VE.Direct MPPT 22/21] Text Data 'OR' = '0X00000000'

@schlimmchen
Copy link
Member

Die veMpptStruct habe ich abgeändert. Namen und types angepasst.

Nice 💪

Schau dir doch mal diese Umwandlung an.

Das Feld sieht so aus: 0d 0a 4f 52 09 30 78 30 30 30 30 30 30 30 30 0d 0a also \r\nOR\t0x00000000 in ASCII. Das passt, weil strtol() mit 0 als basis "auto-basis" ist. Da der string mit "0x" beginnt, wird die Zahl in der Tat als Hexadezimalzahl interpretiert. Also alles gut.

@schlimmchen
Copy link
Member

Du arbeitest noch weiter an diesem Thema, oder? Dann warte ich noch mit testen und mergen?

@SW-Niko
Copy link
Author

SW-Niko commented Apr 6, 2024

Ja, Ich bin fast soweit. Die veShuntStruct würde ich mal so lassen, weil ich Änderungen nicht testen kann.

@SW-Niko
Copy link
Author

SW-Niko commented Apr 6, 2024

Es ist nur noch der Punkt mit dem Rollover offen.
Ich denke ich habe nun endlich 😞 das Problem verstanden.

Wir benötigen noch eine Lösung für den Fall das Daten empfangen wurden, ab einem Zeitpunkt X nicht mehr und dann nach ca 50 Tagen denn der Zeitpunkt X wieder erreicht wird (Rollover) die Daten für 10 Sekunden gültig werden.

Ich habe 2 Lösungsvorschläge:

  1. Wir löschen die Daten wenn z.B. 1 Minute lang nichts angekommen ist. Damit greift die Abfrage nach der Seriennummer wieder und isDataValid() liefert immer false auch bei einem Rollover.
  2. Wir ziehen den Zeitstempel hinterher. Also wenn z.B. 1 Minute lang nichts ankommt dann setzen wir den Zeitstempel nicht auf 0 sondern auf millis() - 24 Stunden. Damit gibt es keinen Rollover zu dem Zeitpunkt X wann zuletzt Daten empfangen wurden.

Beides sollte zuverlässig das Problem Lösen. Was hältst du davon?

@schlimmchen
Copy link
Member

Ich dachte schon an 1. und habs auch angefangen als pseudo-code vorzuschlagen und dann wieder verworfen. isDataValid() sollte jeder Kunde benutzen, der VE.Direct Daten verarbeitet. Und da könnten wir folgendes tun:

template<typename T>
bool VeDirectFrameHandler<T>::isDataValid() const
{
	// VE.Direct text frame data is valid if we receive a device serialnumber and
	// the data is not older as 10 seconds
	bool valid = strlen(_tmpFrame.serialNr_SER) > 0 && (millis() - _lastUpdate) < (10 * 1000);

	// if the frame is invalid because it timed out, we reset it, which resets the serial number
	// in particular, preventing isDataValid() from ever becoming true when millis() - _lastUpdate rolls over.
	if (!valid) { _tmpFrame = { }; }
	return valid;
}

Allerdings sind dann die Daten echt weg, statt dass die zuletzt eingegangenen vorgehalten werden. Dabei bin ich mir unsicher, ob das zu Problemen irgendwo führt oder das Verhalten ändert, sodass wir für Leute irgendwas kaputt machen.

Daher dachte ich, es ist akzeptabel, dass dieser Glitch passieren kann nach 50 Tagen. Ich würd's daher einfach ignorieren. Du?

@SW-Niko
Copy link
Author

SW-Niko commented Apr 6, 2024

Stimme dir zu. Solange wir keinen wirklichen Vorteil mit einer Codeänderung sehen sollten wir es so lassen und den Glitch akzeptieren. Ich ändere das gleich noch ab und setze den PR auf review.

@SW-Niko SW-Niko marked this pull request as ready for review April 6, 2024 08:01
@SW-Niko SW-Niko requested a review from schlimmchen April 6, 2024 08:05
@SW-Niko
Copy link
Author

SW-Niko commented Apr 6, 2024

Ok, von meiner Seite kannst du die Änderungen mergen.
Kannst du die Mqtt Änderungen testen? Ich habe kein Mqtt bei mir am laufen und wir sollten sichergehen, das die Einheiten (V, A, W usw) die an Mqtt gesendet werden, nicht verändert wurden.

Copy link
Member

@schlimmchen schlimmchen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Es sind nur noch Kleinigkeiten übrig. Falls du die nicht schaffst bis Sonntagmittag und dich auch nicht wehrst, dann übernehme ich das gerne.

@schlimmchen
Copy link
Member

Kannst du die Mqtt Änderungen testen?

Ja, mach ich.

Die veShuntStruct würde ich mal so lassen, weil ich Änderungen nicht testen kann.

Ich bin da mutiger und würde das übernehmen, auch wenn ich keinen SmartShunt habe. Die sind leider recht teuer, zu teuer um für Tests anzuschaffen.

@PhilJaro
Copy link

PhilJaro commented Apr 6, 2024

Ich bin da mutiger und würde das übernehmen, auch wenn ich keinen SmartShunt habe. Die sind leider recht teuer, zu teuer um für Tests anzuschaffen.

Da ich einen SmurtShunt im Einsatz habe, habe ich mir den PR mal aufgespielt. Es scheint da etwas mit dem Current nicht zu passen. Per MQTT sowie WebApp werden viel zu hohe werte angezeigt.
image

Des weiteren Plopt beim SmartSolar in der WebApp die Temperatur immer auf und verschwindet dann wieder und so weiter...

@PhilJaro
Copy link

PhilJaro commented Apr 6, 2024

Gerade nochmal etwas beobachtet, bei current verändern sich nur die letzte Stelle und nach Komma.

@PhilJaro
Copy link

PhilJaro commented Apr 7, 2024

Seit heute morgen passt der Wert wieder, ohne das ich irgendetwas verändert habe...
image

@SW-Niko
Copy link
Author

SW-Niko commented Apr 7, 2024

Hallo @PhilJaro ,
wenn du das Problem mit der MPPT Temperature noch hast dann bitte mal das VE.Direkt logging einschalten und prüfen ob diese Meldung regelmäßig kommt.
11:07:38.538 > [VE.Direct MPPT 22/21] Hex Data: MPPT Temperature (0xEDDB): 45.40°C.

Die Werte werden im 1 Sekunden Rhythmus abgefragt.
Ich kann bei meinem MPPT 75/15 kein Problem feststellen. Die Werte kommen sauber und regelmäßig an.

@PhilJaro
Copy link

PhilJaro commented Apr 7, 2024

Bzgl. des current Problems ist mir nun noch folgendes aufgefallen, sobald die Werte Negativ werden, sprich die Batterie entladen wird stehen dort wieder die 4… Millionen, deshalb ging es bei mir heute morgen wieder, da ab dort wieder mehr geladen als entladen wurde. Sieht also so aus als könne die Änderung nicht mit negativen Werten umgehen.

@SW-Niko
Habe gerade nochmal etwas zugeschaut und konnte das gestrige Verhalten nicht mehr beobachten, auch im Verbose-Log sah das soweit gut aus. Allerdings sieht man einige Fehler bzgl hex Async response.

Hier mal ein 2 Sekunden Ausschnitt:

[VE.Direct MPPT 14/27] serial input (363 Bytes):
11:50:34.112 > [VE.Direct MPPT 14/27] 3a 37 44 42 45 44 30 30 39 45 31 36 44 32 0a 3a
11:50:34.133 > [VE.Direct MPPT 14/27] 37 45 43 45 44 30 30 46 46 46 46 37 37 0a 3a 37
11:50:34.165 > [VE.Direct MPPT 14/27] 32 37 32 30 30 30 35 34 35 30 30 31 30 30 36 32
11:50:34.214 > [VE.Direct MPPT 14/27] 0a 3a 41 44 37 45 44 30 30 41 30 30 30 45 37 0a
11:50:34.222 > [VE.Direct MPPT 14/27] 3a 41 42 43 45 44 30 30 33 35 35 30 30 31 30 30
11:50:34.229 > [VE.Direct MPPT 14/27] 31 43 0a 3a 41 44 35 45 44 30 30 38 44 31 34 45
11:50:34.245 > [VE.Direct MPPT 14/27] 38 0a 3a 41 42 42 45 44 30 30 32 35 31 38 36 36
11:50:34.254 > [VE.Direct MPPT 14/27] 0a 3a 41 30 32 32 30 30 30 46 46 46 46 32 42 0a
11:50:34.299 > [VE.Direct MPPT 14/27] 3a 41 30 41 32 30 30 30 46 46 46 46 46 46 37 46
11:50:34.380 > [VE.Direct MPPT 14/27] 41 35 0a 3a 41 31 33 32 30 30 30 46 46 46 46 46
11:50:34.474 > [VE.Direct MPPT 14/27] 46 37 46 39 43 0a 0d 0a 50 49 44 09 30 78 41 30
11:50:34.526 > [VE.Direct MPPT 14/27] 36 30 0d 0a 46 57 09 31 36 33 0d 0a 53 45 52 23
11:50:34.587 > [VE.Direct MPPT 14/27] 09 48 51 32 32 32 38 56 59 32 51 44 0d 0a 56 09
11:50:34.697 > [VE.Direct MPPT 14/27] 35 32 35 39 30 0d 0a 49 09 31 36 30 32 30 0d 0a
11:50:34.750 > [VE.Direct MPPT 14/27] 56 50 56 09 36 31 37 37 30 0d 0a 50 50 56 09 38
11:50:34.779 > [VE.Direct MPPT 14/27] 36 31 0d 0a 43 53 09 33 0d 0a 4d 50 50 54 09 32
11:50:34.795 > [VE.Direct MPPT 14/27] 0d 0a 4f 52 09 30 78 30 30 30 30 30 30 30 30 0d
11:50:34.802 > [VE.Direct MPPT 14/27] 0a 45 52 52 09 30 0d 0a 4c 4f 41 44 09 4f 46 46
11:50:34.809 > [VE.Direct MPPT 14/27] 0d 0a 49 4c 09 30 0d 0a 48 31 39 09 31 32 31 39
11:50:34.814 > [VE.Direct MPPT 14/27] 38 0d 0a 48 32 30 09 32 32 30 0d 0a 48 32 31 09
11:50:34.832 > [VE.Direct MPPT 14/27] 39 34 37 0d 0a 48 32 32 09 36 35 37 0d 0a 48 32
11:50:34.839 > [VE.Direct MPPT 14/27] 33 09 31 30 31 37 0d 0a 48 53 44 53 09 33 35 0d
11:50:34.843 > [VE.Direct MPPT 14/27] 0a 43 68 65 63 6b 73 75 6d 09 1d
11:50:34.849 > [VE.Direct MPPT 14/27] Text Data 'PID' = '0XA060'
11:50:34.859 > [VE.Direct MPPT 14/27] Text Data 'FW' = '163'
11:50:34.870 > [VE.Direct MPPT 14/27] Text Data 'SER' = 'HQ2228VY2QD'
11:50:34.875 > [VE.Direct MPPT 14/27] Text Data 'V' = '52590'
11:50:34.881 > [VE.Direct MPPT 14/27] Text Data 'I' = '16020'
11:50:34.889 > [VE.Direct MPPT 14/27] Text Data 'VPV' = '61770'
11:50:34.896 > [VE.Direct MPPT 14/27] Text Data 'PPV' = '861'
11:50:34.903 > [VE.Direct MPPT 14/27] Text Data 'CS' = '3'
11:50:34.914 > [VE.Direct MPPT 14/27] Text Data 'MPPT' = '2'
11:50:34.920 > [VE.Direct MPPT 14/27] Text Data 'OR' = '0X00000000'
11:50:34.926 > [VE.Direct MPPT 14/27] Text Data 'ERR' = '0'
11:50:34.934 > [VE.Direct MPPT 14/27] Text Data 'LOAD' = 'OFF'
11:50:34.939 > [VE.Direct MPPT 14/27] Text Data 'IL' = '0'
11:50:34.947 > [VE.Direct MPPT 14/27] Text Data 'H19' = '12198'
11:50:34.954 > [VE.Direct MPPT 14/27] Text Data 'H20' = '220'
11:50:34.959 > [VE.Direct MPPT 14/27] Text Data 'H21' = '947'
11:50:34.967 > [VE.Direct MPPT 14/27] Text Data 'H22' = '657'
11:50:35.302 > [VE.Direct MPPT 14/27] Text Data 'H23' = '1017'
11:50:35.303 > [VE.Direct MPPT 14/27] Text Data 'HSDS' = '35'
11:50:35.303 > [VE.Direct MPPT 14/27] Sending Hex Command: :7DBED0086, Free FIFO-Buffer: 118
11:50:35.304 > [VE.Direct MPPT 14/27] Sending Hex Command: :7ECED0075, Free FIFO-Buffer: 118
11:50:35.318 > [VE.Direct MPPT 14/27] Sending Hex Command: :727200007, Free FIFO-Buffer: 118
11:50:35.329 > [VE.Direct MPPT 14/27] Hex Data: MPPT Temperature (0xEDDB): 57.90°C
11:50:35.341 > [VE.Direct MPPT 14/27] Hex Data: Smart Battery Sense Temperature is not available
11:50:35.348 > [VE.Direct MPPT 14/27] Hex Data: Network Total DC Power (0x2027): 861.00W
11:50:35.357 > Middle missing
11:50:35.372 > Request retransmit: 3
11:50:35.375 > Success
11:50:35.380 > [VE.Direct MPPT 14/27] Unhandled Hex Async Response, addr: 0xEDD7 (???), value: 0x0000009F, flags: 0x00
11:50:35.388 > [VE.Direct MPPT 14/27] Unhandled Hex Async Response, addr: 0xEDBC (???), value: 0x00015015, flags: 0x00
11:50:35.393 > [VE.Direct MPPT 14/27] Unhandled Hex Async Response, addr: 0xEDD5 (Charger Voltage), value: 0x00001489, flags: 0x00
11:50:35.400 > [VE.Direct MPPT 14/27] Unhandled Hex Async Response, addr: 0xEDBB (Panel Voltage), value: 0x00001841, flags: 0x00
11:50:35.408 > [VE.Direct MPPT 14/27] Hex Data: Network Total DC Power (0x2027): 860.00W
11:50:35.414 > [VE.Direct MPPT 14/27] Unhandled Hex Async Response, addr: 0x200A (???), value: 0x7FFFFFFF, flags: 0x00
11:50:35.427 > [VE.Direct MPPT 14/27] Unhandled Hex Async Response, addr: 0x2013 (???), value: 0x7FFFFFFF, flags: 0x00
11:50:35.435 > [VE.Direct MPPT 14/27] Unhandled Hex Async Response, addr: 0x0200 (Device Mode), value: 0x00000001, flags: 0x00
11:50:35.441 > [VE.Direct MPPT 14/27] Unhandled Hex Async Response, addr: 0x0202 (Remote Control Used), value: 0x00000002, flags: 0x00
11:50:35.450 > [VE.Direct MPPT 14/27] Unhandled Hex Async Response, addr: 0x0201 (Device State), value: 0x00000003, flags: 0x00
11:50:35.458 > [VE.Direct MPPT 14/27] Unhandled Hex Async Response, addr: 0xEDD7 (???), value: 0x000000A0, flags: 0x00
11:50:35.462 > [VE.Direct MPPT 14/27] serial input (427 Bytes):
11:50:35.470 > [VE.Direct MPPT 14/27] 3a 37 44 42 45 44 30 30 39 45 31 36 44 32 0a 3a
11:50:35.480 > [VE.Direct MPPT 14/27] 37 45 43 45 44 30 30 46 46 46 46 37 37 0a 3a 37
11:50:35.491 > [VE.Direct MPPT 14/27] 32 37 32 30 30 30 35 34 35 30 30 31 30 30 36 32
11:50:35.503 > [VE.Direct MPPT 14/27] 0a 3a 41 44 37 45 44 30 30 39 46 30 30 45 38 0a
11:50:35.507 > [VE.Direct MPPT 14/27] 3a 41 42 43 45 44 30 30 31 35 35 30 30 31 30 30
11:50:35.523 > [VE.Direct MPPT 14/27] 33 43 0a 3a 41 44 35 45 44 30 30 38 39 31 34 45
11:50:35.529 > [VE.Direct MPPT 14/27] 43 0a 3a 41 42 42 45 44 30 30 34 31 31 38 34 41
11:50:35.539 > [VE.Direct MPPT 14/27] 0a 3a 41 32 37 32 30 30 30 46 30 34 46 30 31 30
11:50:35.544 > [VE.Direct MPPT 14/27] 30 43 34 0a 3a 41 30 41 32 30 30 30 46 46 46 46
11:50:35.552 > [VE.Direct MPPT 14/27] 46 46 37 46 41 35 0a 3a 41 31 33 32 30 30 30 46
11:50:35.560 > [VE.Direct MPPT 14/27] 46 46 46 46 46 37 46 39 43 0a 3a 41 30 30 30 32
11:50:35.568 > [VE.Direct MPPT 14/27] 30 30 30 31 34 38 0a 3a 41 30 32 30 32 30 30 30
11:50:35.576 > [VE.Direct MPPT 14/27] 32 30 30 30 30 30 30 34 35 0a 3a 41 30 31 30 32
11:50:35.581 > [VE.Direct MPPT 14/27] 30 30 30 33 34 35 0a 3a 41 44 37 45 44 30 30 41
11:50:35.588 > [VE.Direct MPPT 14/27] 30 30 30 45 37 0a 0d 0a 50 49 44 09 30 78 41 30
11:50:35.611 > [VE.Direct MPPT 14/27] 36 30 0d 0a 46 57 09 31 36 33 0d 0a 53 45 52 23
11:50:35.634 > [VE.Direct MPPT 14/27] 09 48 51 32 32 32 38 56 59 32 51 44 0d 0a 56 09
11:50:35.643 > [VE.Direct MPPT 14/27] 35 32 35 35 30 0d 0a 49 09 31 36 30 32 30 0d 0a
11:50:35.654 > [VE.Direct MPPT 14/27] 56 50 56 09 36 32 30 34 30 0d 0a 50 50 56 09 38
11:50:35.665 > [VE.Direct MPPT 14/27] 35 39 0d 0a 43 53 09 33 0d 0a 4d 50 50 54 09 32
11:50:35.680 > [VE.Direct MPPT 14/27] 0d 0a 4f 52 09 30 78 30 30 30 30 30 30 30 30 0d
11:50:35.688 > [VE.Direct MPPT 14/27] 0a 45 52 52 09 30 0d 0a 4c 4f 41 44 09 4f 46 46
11:50:35.699 > [VE.Direct MPPT 14/27] 0d 0a 49 4c 09 30 0d 0a 48 31 39 09 31 32 31 39
11:50:35.706 > [VE.Direct MPPT 14/27] 38 0d 0a 48 32 30 09 32 32 30 0d 0a 48 32 31 09
11:50:35.713 > [VE.Direct MPPT 14/27] 39 34 37 0d 0a 48 32 32 09 36 35 37 0d 0a 48 32
11:50:35.723 > [VE.Direct MPPT 14/27] 33 09 31 30 31 37 0d 0a 48 53 44 53 09 33 35 0d
11:50:35.737 > [VE.Direct MPPT 14/27] 0a 43 68 65 63 6b 73 75 6d 09 23
11:50:35.745 > [VE.Direct MPPT 14/27] Text Data 'PID' = '0XA060'
11:50:35.752 > [VE.Direct MPPT 14/27] Text Data 'FW' = '163'
11:50:35.758 > [VE.Direct MPPT 14/27] Text Data 'SER' = 'HQ2228VY2QD'
11:50:35.769 > [VE.Direct MPPT 14/27] Text Data 'V' = '52550'
11:50:35.796 > [VE.Direct MPPT 14/27] Text Data 'I' = '16020'
11:50:35.796 > [VE.Direct MPPT 14/27] Text Data 'VPV' = '62040'
11:50:35.796 > [VE.Direct MPPT 14/27] Text Data 'PPV' = '859'
11:50:35.802 > [VE.Direct MPPT 14/27] Text Data 'CS' = '3'
11:50:35.811 > [VE.Direct MPPT 14/27] Text Data 'MPPT' = '2'
11:50:35.825 > [VE.Direct MPPT 14/27] Text Data 'OR' = '0X00000000'

@SW-Niko
Copy link
Author

SW-Niko commented Apr 7, 2024

Hallo @PhilJaro,
Guter Hinweis. Die Strom I beim Shunt kann auch negativ werden. Beim MPPT nicht.
Kannst du mir auch ein Log vom Shunt machen und posten?

@SW-Niko
Copy link
Author

SW-Niko commented Apr 7, 2024

Hallo @PhilJaro,
ich denke ich habe den Fehler mit den Stromwerten gefixt. Beim Shunt und auch beim MPPT kann man negative Werte haben. Beim MPPT muss man nur über den Lastausgang mehr Leistung entnehmen als über die Solar Panel geliefert werden.
Ich schau mir die Temperaturwerte nochmal an.

PS: Die "Unhandled Hex Async Response" sind ganz normal. Die Victron Geräte tauschen jede Menge Daten untereinander aus und die bekommen wir nun auch mit. Wir werten sie nur nicht aus.

@PhilJaro
Copy link

PhilJaro commented Apr 7, 2024

@SW-Niko Sehr gut, jetzt werden die Negativen Werte richtig angezeigt, somit sollte alles passen.

@schlimmchen
Copy link
Member

@PhilJaro Ausdrücklich vielen Dank für deine frühe Hilfe beim Testen! 💪

@SW-Niko Danke für deinen Einsatz. yieldToday_H19_Wh ist noch falsch, es ist der Gesamtertrag, also yieldTotal_H19_Wh, das passe ich an. Dann squashe ich deine Commits und merge deine Arbeit.

* process "IL", "AR" and "MON"
* discard "BMV" and (unsolicited) History Data
* simplify isDataValid()
* veMpptStruct, veStruct: new, verbose variable names, including units,
  and replace floats (save values with original integer precision)
* comment on rollover situation in isDataValid()
@SW-Niko
Copy link
Author

SW-Niko commented Apr 7, 2024

Danke @schlimmchen und @PhilJaro,
für die Unterstützung.
Ich bin noch etwas besorgt wegen der On/Off Anzeige den Temperaturwerten. Das kann eigentlich nur passieren wenn mal 10 Sekunden lang keine Temperaturwerte ankommen.
Hmmm... Nur so eine Idee .... Vielleicht kommst es bei deinem System wie bei mir zu einem Puffer Überlauf und Checksum Fehler.
@PhilJaro Bitte bei mir melden wenn die Temperaturwerte wieder springen.
@schlimmchen Ich könnte auch noch einen einfachen Fehlerzähler für den Überlauf / Checksum einbauen der beim Verbose Logging mit ausgegeben wird? Denke das wäre bei einer Fehleranalyse ganz nützlich.

@schlimmchen
Copy link
Member

Ich könnte auch noch einen einfachen Fehlerzähler für den Überlauf / Checksum einbauen der beim Verbose Logging mit ausgegeben wird? Denke das wäre bei einer Fehleranalyse ganz nützlich.

Ja, mach das gerne, genau diesen Gedanken hatte ich auch schon.

  • Sowohl erfolgreiche dekodierte Pakete zählen, als auch Fehler zählen (Checksummenfehler, Timeout (gibts noch mehr?))
  • Außerdem gesendete Nachrichten zählen und die passenden HEX Antworten zählen.

Beides dann absolut und relativ ausgeben.

@PhilJaro Da fällt mir noch was ein in diesem Zusammenhang, das ich dich fragen wollte: Wie hast du denn den Victron angeschlossen an den ESP32? Direkt? Mit Level-Shifter? Mit ADUM1201? Es ist nämlich so, dass das direkte Anschließen beim Senden definitiv zu mehr oder zumindest mit höherer Wahrschenlichkeit zu Problemem führt, als beim Empfangen. Denn der ESP32 kommt ja nur auf 3V3 am TX Pin, und das muss der Victron nicht notwendiger Weise bzw. nicht zuverlässig als High erkennen, weil er mit 5V arbeitet.

@schlimmchen
Copy link
Member

Ja, mach das gerne

Neuer Pull-Request, bitte.

@schlimmchen
Copy link
Member

image

Wie erwartet, alles dufte.

@schlimmchen
Copy link
Member

Rebased onto helgeerbe/development and squashed commits.

@schlimmchen schlimmchen merged commit b9ad1e3 into hoylabs:development Apr 7, 2024
8 checks passed
@PhilJaro
Copy link

PhilJaro commented Apr 7, 2024

@PhilJaro Da fällt mir noch was ein in diesem Zusammenhang, das ich dich fragen wollte: Wie hast du denn den Victron angeschlossen an den ESP32? Direkt? Mit Level-Shifter? Mit ADUM1201? Es ist nämlich so, dass das direkte Anschließen beim Senden definitiv zu mehr oder zumindest mit höherer Wahrschenlichkeit zu Problemem führt, als beim Empfangen. Denn der ESP32 kommt ja nur auf 3V3 am TX Pin, und das muss der Victron nicht notwendiger Weise bzw. nicht zuverlässig als High erkennen, weil er mit 5V arbeitet.

Ich habe den SmartShunt und auch SmartSolar nicht direkt sondern jeweils über den ADUM1201 angeschlossen, die Problematik ohne ist mir schon bewusst.
Werde das einfach weiter beobachten und falls es doch nochmal zu solchen Problemen kommt die logs in ein issue packen.

Danke ebenfalls für euere Arbeit ;)

@SW-Niko
Copy link
Author

SW-Niko commented Apr 8, 2024

Hallo @PhilJaro ,
ich benutze auch die ADUM1201. Die VE.Direkt Verbindung bei mir ist sehr robust.
Das Problem mit Überlauf und Checksum Fehler taucht bei mir erst auf wenn eine andere Funktion die DTU ausbremst.
Bei mir ist es das Powermeter. Siehe #752 und #760.

Copy link

github-actions bot commented May 9, 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 May 9, 2024
@SW-Niko SW-Niko deleted the VeDirect2 branch July 7, 2024 08:23
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.

[Request] Read more SmartShunt Text values
3 participants