Kommunikation mit Victron Energy Geräten

Die Datenkommunikation mit den meisten Victron Geräten gestaltet sich recht einfach. Mit wenig Aufwand lässt sich dies realisieren.

Was sind die Voraussetzungen für diese Anleitung?

  • Erfahrung mit Linux bzw. Raspberry OS
  • Kenntnisse mit NodeRed
  • ein wenig Löterfahrung wäre nicht schlecht
  • Kosten ca. 5€ (je Laderegler bzw. Gerät)

Als Beispiel nehme ich hier meinen SmartSolar 100/50 Laderegler: Dieser sendet einmal die Sekunde seine Daten über seine eingebaute TTL-Schnittstelle. Die Daten werden im Klartext gesendet und können mit NodeRed recht einfach verarbeitet werden.

So sehen die Daten aus, wenn sie vom Laderegler kommen:

PID 0xA057
FW 164
SER# HQxxxxxxxG9
V 26630
I 700
VPV 59160
PPV 22
CS 3
MPPT 2
OR 0x00000000
ERR 0
LOAD ON
H19 32497
H20 6
H21 45
H22 139
H23 622
HSDS 160
Checksum #

Um die Daten ab zugreifen, muss die Schnittstelle am Laderegler angezapft werden. Ich nutze dazu „JST PH 2.0mm 4pol. Stecker„. Diese sind für kleines Geld bei Amazon, eBay und Co. zu bekommen. Hier gibt es zwei Varianten! Eine mit 4pol. JST 2mm Stecker auf der einen Seite und einzelnen Jumpfer-Buchsen auf der anderen Seite. Die zweite Variante hat statt Jumper-Buchsen, nur offene Kabelenden. Die 2. Variante ist deutlich günstiger. Hier bekommt man teilweise 20 oder mehr Kabel für weniger als ein Kabel mit Jumperbuchsen kostet.

Um die Daten in den Rechner zu bekommen, gibt es mehrere Wege. Entweder direkt mit einem Raspberry Pi über den Pin-Header oder über einen USB2TTL-Converter. Wenn man keinen RPi in der Nähe montieren will, kann man die Daten auch über WLan übertragen. Hierzu wird z.B. ein ESP8266 oder ESP32 eingesetzt.

Im ersten Teil werde ich mich auf die Datenerfassung mittels USB2ttl konzentrieren. Hierzu nutze ich neben dem USB2ttl-Converter die freie Software NodeRed und einen Raspberry Pi.

Benötigte Hardware:

  • fertig installierter Raspberry Pi mit NodeRed
  • ein 4pol. JST 2.0mm Kabel
  • ein USB2ttl Konverter (ca. 2-4€/Stk.)
  • ggf. Jumperkabel

Wie wird das Kabel am Laderegler angeschlossen?

Zum Datenempfang werden nur 2 Adern benötigt. Diese sind bei den meisten Kabeln die weiße und schwarze Ader.

  • sw = 1: GND
  • ws = 3: TX vom Laderegler

Ich habe bei mir die gelbe und rote Ader entfernt um das Kabel-Wirrwarr bei mir zu verringern. (Habe mehrere Laderegler bzw. Victron-Geräte) Die ws/sw-Adern habe ich mit einem alten Jumperkabel aus einem alten PC verlängert. Da bei meinem USB2ttl-Adapter die RX und GND-Stifte nebeneinander liegen, benötige ich keine einzelnen Jumper-Wire. Die Adern habe ich entsprechend verlötet und mit Schrumpfschlauch isoliert. (Schrumpfschlauch vor dem Verlöten aufziehen!)

Nachdem man die Kabel verlötet hat (oder anders miteinander verbunden hat), verbindet man den Laderegler mit dem USB2ttl-Adapter. Dazu werden die Stecker so aufgesteckt, dass die schwarze GND-Ader mit GND am Konverter verbunden ist und die weiße Ader mit dem RX-Pin am Board. (TX vom Laderegler geht auf RX vom Board)

Hat man die Kabel miteinander verbunden, steckt man den Adapter/Konverter in den RPi oder PC. (Anleitung bezieht sich auf den RPi!)

Jetzt geht es mit der Software weiter:

Als Erstes loggt man sich nun auf dem RPi per SSH ein und prüft ob sich der Adapter mit dem Pi verbunden hat.

ssh user@raspberrypi

Nachdem man sich eingeloggt hat, prüft man ob sich der USB2ttl-Konverter erkannt wurde:

per lsusb

user@raspberrypi:~ $ lsusb
Bus 001 Device 007: ID 1a86:7523 QinHeng Electronics CH340 serial converter

per dmesg

user@raspberrypi:~ $ dmesg
[361328.499934] usb 1-1.2: Product: USB2.0-Ser!
[361328.502808] ch341 1-1.2:1.0: ch341-uart converter detected
[361328.505027] ch341-uart ttyUSB1: break control not supported, using simulated break
[361328.505247] usb 1-1.2: ch341-uart converter now attached to ttyUSB1

Man merkt sich nun, wo der Konverter im System eingebunden wurde.
In diesem Beispiel ist es „ttyUSB1

Jetzt ruft man NodeRed auf:

Auf der linken Seite ist die Liste der verfügbaren Nodes. Hier sucht man nun das „serial in“ und fügt es in seine Arbeitsfläche ein.

Jetzt muss man diesen Node konfigurieren. Dazu ruft man per Doppelklick das Konfigurationsmenü auf. (Wenn es sich nicht selbst geöffnet hat.) Wenn noch keine Serieller Port erstellt wurde, klickt man nun auf das kleine Stiftsymbol am Ende des Feldes.

Als Serieller Port wird jetzt der zuvor gemerkte Einbindepunkt eingetragen. Bei Linux befinden sich die „Geräte“ im Verzeichnis „/dev/“. Daher, lautet der Pfad entsprechend „/dev/ttyUSB1„.
Die Baudrate beträgt bei Victron-Geräten in der Regel 19200 Baud

Im Abschnitt Empfang wird als Startzeichen ein großes „P“ eingetragen.
Dies macht man, damit NodeRed leichter weiß, wann ein Datentelegramm anfängt. Bei den meisten Victron Energy Geräten startet die Datenübertragung mit einem „PID„. Der Datenversand ist in der Regel zeitlich gegliedert. Die Daten werden von Ruhepausen umgeben. Dies macht man sich zu nutze um die Telegramme voneinander zu trennen.

Um das Ende eines Telegramms/Frames zu erkennen wird die Bedingung definiert, wie das Ende erkannt werden soll. Die Daten werden einmal pro Sekunde gesendet. Da die Daten zeitlich gesehen nur einen Bruchteil der Sekunde ausmachen, ist nach dem Frame eine längere Pause, die genutzt werden kann um das Ende des Frames zu erkennen.
Also, stellt man unter Aufteilung „nach Ruhezeit von“ ein und eine Zeit von 100ms.

Nachdem man alle Einstellungen gemacht hat, geht man auf Hinzufügen bzw. Aktualisieren. Danach kann man die Einstellungen der seriellen Schnittstelle schließen.

Um zu testen, ob alles funktioniert hat, setzt man nun ein „debug„-Node an den seriellen Node. (mehr zum [debug]-Block)

Wenn man den debug-Node aktiviert, sollte im debug-Fenster die Ausgabe des seriellen Nodes erscheinen.

Wenn dies ohne Probleme funktioniert hat, kann man die erhaltenen Daten weiter verarbeiten. Dies erkläre ich aber erst in dem nächsten Beiträgen…..


Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert