-
-
Notifications
You must be signed in to change notification settings - Fork 69
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
Implement VE.Direct hex communication #739
Conversation
Okay, cool, sieht ganz okay aus.
Brauchst du dabei Hilfe? Das scheint mir essentiell zu sein, denn sonst tut der neue Code noch nichts, korrekt? Was ist dafür zu tun? Man muss regelmäßig eine entsprechende Anfrage abschicken, und die Antwort wird dann automatisch verarbeitet? |
Ok das ging schon mal schief. Ich wollte eigentlich einen neuen "Pull reqeust" aufmachen. In der MPPT class werden jetzt drei Werte (TotalDCPower, MPPT Temp und Batterie Temp) über die Hex Nachrichten ausgelesen und zur weiteren Verwendung zur Verfügung gestellt. @schlimmchen Wie geht das jetzt weiter? Benötigst du weitere Tests oder Unterlagen? |
veMPPTExStruct const *getExData() const { return &_ExData; } | ||
|
||
protected: | ||
virtual void hexDataHandler(VeDirectHexData const &data) override; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
override
, sehr gut, warum nicht final
? 😉
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, verstanden. Genau das brauch ich noch. Ein kurzer Hinweis reicht.
@@ -68,10 +68,28 @@ class VeDirectMpptController : public VeDirectFrameHandler { | |||
using spData_t = std::shared_ptr<veMpptStruct const>; | |||
spData_t getData() const { return _spData; } | |||
|
|||
void loop(); // main loop to read ve.direct data |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
warum ist das nicht override
bzw. nicht final
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok
uint32_t value; // value from register | ||
char text[VE_MAX_HEX_LEN]; // text/string response | ||
}; | ||
|
||
class VeDirectFrameHandler { | ||
public: | ||
VeDirectFrameHandler(); | ||
virtual void init(int8_t rx, int8_t tx, Print* msgOut, bool verboseLogging, uint16_t hwSerialPort); | ||
void loop(); // main loop to read ve.direct data |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sollte loop() nicht virtual sein, weil du versuchst die Methode in VeDirectMpptController zu überschreiben?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, Verstanden warum das besser ist.
Das mag sein, aber es ist so gewollt, dass du an diesem Pull-Request weiterarbeitest, bis er alles enthält, sodass du sagst "so finde ich könnte er in ein Release". Bis dahin sollten wir ihn als Draft (Entwurf) einstufen, aber sonst ist das genau, wie das laufen soll. Du fügst solange commits hinzu, bis du zufrieden bist.
Du musst dich für nichts entschuldigen, mach gerne einfach weiter. Was ist der nächste Schritt? Die Daten, falls sie denn abgefragt wurden und die Antwort verarbeitet wurde, zur Web Application transportieren? |
Genau, Wenn du das bei Gelegenheit machen könntest. |
Hallo @schlimmchen , |
Ich fänds sinnvoll, wenn diese Werte mit 10 multipliziert würden, und dann als mV, mW, und m°C gespeichert würden, als Integer. Die Temperatur muss |
Kein Ding, mach ich gleich. Ja richtig, dann müssen wir für alle 3 Werte 32bit nehmen PS: Falls das untergegangen ist. Die Spannung vom "Smart Battery Sense" wird von den MPPTs automatisch übernommen und wir lesen diesen Wert über die Textnachrichten rein (Variable V). Das ist super praktisch ... Für 32€ bekommst du eine Spannungs- Messung an den Batteriepolen und die DTU nimmt das als Regelgröße wenn man kein auslesbares BMS hat. Muss ich bei Gelegenheit ins Wiki schreiben. |
Hallo @SW-Niko, die Erweiterung finde ich super! Ich hatte vor ein paar Monaten auch schon einmal daran gearbeitet #479, hab es dann aber mangels Zeit und PV-armen Winter liegen lassen. Vielleicht kannst Du ja etwas von dem Code gebrauchen. Ich hatte damit begonnen, weil ich Unterstützung für meinen Victron AC-Lader hinzufügen wollte, der über das HEX-Protokoll arbeitet #436 . Das Projekt habe ich vor, wieder aufzunehmen und würde mich dann jetzt auf deine Erweiterung stützen. |
Hallo @philippsandhaus , klar mach nur. Falls es Probleme mit den Hex Nachrichten gibt dann einfach bei mir melden. |
Super. Mein Plan wäre erst einmal, das über eine eigene Klasse zu realisieren, die von VEDirectFrameHandler ableitet und hier die spezifischen Befehle einzubinden (ich möchte die Ladeleistung dynamisch anpassen, je nach verfügbarem Überberschuss). In einem zweiten Schritt könnten wir ja schauen, ob es Funktionen gibt, die den MPPTController und den ACLader interessant und die man dann ich eine gemeinsame Klasse zusammenziehen könnte. Super ist aber schon einmal deine grundsätzliche Implementierung der HEX-Kommunikation. |
Hallo @schlimmchen, |
ohje.... Habe Mist gebaut. Ich versuch es nochmal. |
Hallo @philippsandhaus , |
Niko, du musst insbesondere bei deinem nächsten Beitrag einen Branch erzeugen und nutzen, der nur für die gewünschte Anpassung gedacht ist (statt deinem development Branch, an dem du dann "wild" hin- und her-merge'st). Was das Öffnen eines neuen PR angeht: Darfst du gerne machen, aber Arbeit musst du keine mehr investieren. Deine Arbeit habe ich übernommen (Anpassungen waren nötig nach dem Rebase auf den aktuellen development Branch) und erweitert und plane das bald zu mergen. Der Code läuft insb. seit einem Tag auf meinem Produktiv-System 👍 |
Prima. 👍 |
Lieb, dass du dankbar bist, aber der Dank ist ganz meinerseits: Vielen Dank für die gute Arbeit. 💪 |
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. |
Ganz grob zusammengefasst habe ich folgendes implementiert.
Den VictronFrameHandler habe ich erweitert, damit alle von ihm abgeleiteten Klassen Zugriff auf den Hex-Mode bekommen.
• sendHexCommand(), Sendet Kommandos über die VE.Direct Schnittstelle
• hexDataHandler(), In abgeleiteten Klassen muss die Methode überschrieben werden um die Hex Nachrichten zu verarbeiten.
• Einige kleine Hilfsfunktionen zum Umwandeln der Daten in das Hex-Format, berechnen der Checksumme, usw.
Bitte prüfen und konstruktives Feedback geben. (Ich programmiere noch nicht so lange und deshalb ist dieser Code wahrscheinlich etwas holprig umgesetzt)
Ich schiebe dann als nächstes das Auslesen der Gesamtleistung von dem MPPT nach..... (Noch beim testen)