NEWS
ich brauche etwas Nachhilfe mit Node Red und RS232
-
Hallo zusammen
Ich möchte mit hilfe von Node-Red meine Pytes-Akku Bank auslesen und die Werte dann per MQTT in den Iob senden.
wenn ich mit dem "minicom" oder den "screen" eine Verbindung auf den /dev/ttyUSB1 erstelle, kann ich jegliche Werte auf der Konsole anzeigen lassen und es funktioniert sehr stabil und einfach. Nun wollte ich das ganze mit Node-Red realisieren damit ich den Datenstrom zerlegen und weiterverarbeiten kann.
Nur da scheint es nicht zu funktionieren (klar der link von minicom und screen muss ganz weg sein). Ich habe folgendes gemacht:



Irgendwie sehe ich gerade das Problem nicht, das BMS reagiert überhaupt nicht, so dass der Node irgendwann eine "undefinde" ausspuckt. So weit wie ich das begriffen habe, mache ich doch gar nichts anderes, wie das minicom macht? Also Schnittstelle öffnen, den string "bat 1" senden und den Empfang protokollieren.
PS: ich weiss es gibt ebenfalls einen Adapter dafür, aber der macht genau den gleichen Fehler, darum habe ich eben versucht das so zu lösen. Dieses Node-Red läuft in einem eigenen Container völlig los gelöst von Iobroker.
Gruss Andi
PS fast vergessen: die Schnittstelle /dev/ttyUSB1 steht auf Rechte: 0777 sollte also kein Problem sein.
-
Am Ende kommt statt der 0 normal ein \r,\n oder \r\n.
Also
bat 1\rbat 1\nbat 1 \r\nprobieren. Sender und Epfänger würde ich separieren.
@peterfido
Danke, das hat schon mal was massiv verändert:

der Zeitablauf erstaunt mich noch etwas, wie auch die 2 Message mit "unk...."
Aber es beweist mir schon mal, dass ich auf dem richtigen Weg bin, um dass ganze auszulesen und das es nicht an der Hardware oder irgendwelchen Linux Berechtigungen zwischen Konsole und Nod-Red liegt. -
@peterfido
Danke, das hat schon mal was massiv verändert:

der Zeitablauf erstaunt mich noch etwas, wie auch die 2 Message mit "unk...."
Aber es beweist mir schon mal, dass ich auf dem richtigen Weg bin, um dass ganze auszulesen und das es nicht an der Hardware oder irgendwelchen Linux Berechtigungen zwischen Konsole und Nod-Red liegt.Die Aufteilung nach würde ich noch umstellen auf "nach Zeitablauf", 250ms. Dann kommt fast sofort die Antwort.
"unknown command 0" kommt aus deinem inject Node, da sagst du ja, dass er eine "0" senden soll.

-
Die Aufteilung nach würde ich noch umstellen auf "nach Zeitablauf", 250ms. Dann kommt fast sofort die Antwort.
"unknown command 0" kommt aus deinem inject Node, da sagst du ja, dass er eine "0" senden soll.

@Marc-Berg
Habe ich angepasst, aber jetzt kommt nur noch die hälfte an?

Die Schnittstelle:

Das erzeugt jetzt diesen Output:

Ich verstehe nicht ganz wieso es vorher funktioniert hat und jetzt plötzlich abbricht bei der 8 Zelle. Es sind eigentlich 16 Zellen in 8 Blöcken. Das mit den einzelnen Blöcken ist mir klar, ist mit "bat x" zu lösen. Hat interesanterweise nichts mit der Anzahl Zeichen beim Empfang zu tun.
Edit:
Das hat scheinbar mit der Zeitspannen zwischen den Aufrufen zu tun, wenn genügend Zeit dazwischen liegt scheint er wieder alle 16 zu liefern. -
@Marc-Berg
Habe ich angepasst, aber jetzt kommt nur noch die hälfte an?

Die Schnittstelle:

Das erzeugt jetzt diesen Output:

Ich verstehe nicht ganz wieso es vorher funktioniert hat und jetzt plötzlich abbricht bei der 8 Zelle. Es sind eigentlich 16 Zellen in 8 Blöcken. Das mit den einzelnen Blöcken ist mir klar, ist mit "bat x" zu lösen. Hat interesanterweise nichts mit der Anzahl Zeichen beim Empfang zu tun.
Edit:
Das hat scheinbar mit der Zeitspannen zwischen den Aufrufen zu tun, wenn genügend Zeit dazwischen liegt scheint er wieder alle 16 zu liefern. -
@andibr
[OT]
Hast du dieses

Kabel? -
@Marc-Berg
du meinst so?

Nur bringt das leider auch nur ein Teil
Bin mir aber gerade noch am überlegen wie ich diese ASCII String nun in ein eingermassen brauchbares Zeugs verwandeln kann.
Der String ist ab der 3.Zeile immer identisch aufgeteilt, leider mit Leerzeichen und nichts schlauen drin und erst noch nicht immer gleich viele Stellen. -
@Homoran
Nee, nicht ganz meines sieht etwas wilder aus:

Ist aber im Prinzip genau das selbe:
ein aktives USB Verlängerungskabel - eine USBzuRS232 (mit FTF8I5L-Chip) - uraltes Cisco Firewall Console Kabel.Der USBzuRS232 hat folgende Spez:
T: Bus=01 Lev=02 Prnt=10 Port=03 Cnt=01 Dev#= 11 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0403 ProdID=6001 Rev=06.00
S: Manufacturer=FTDI
S: Product=USB Serial Converter
S: SerialNumber=FTFS8I5L
C: #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=44mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=ftdi_sio
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0msOhne das lange USB Kabel kann ich mit dieser Kombination auch mit dem Pytes-Tool BMSQ.... und einem Windows direkt auf die 48100R zugreifen. Darum weiss ich das die Kombi ja funktioniert. Irgendwo habe ich etwas gelesen von einem "RS232-Null-Modemkabel". Aber das steht ja sehr selten auf den Kabel drauf.
Das ganze steckt jetzt am Proxmox Host und ist an den Node-Red Container durchgereicht mit mode=0777. Es scheint zumindest teilweise zu funktionieren. Wobei ich nicht ganz abschätzen kann, ob es nun an der Verkabelung, BMS oder Node-Red liegt wieso da teilweise unterschiedliche Resultate ankommen.
-
@Homoran
Nee, nicht ganz meines sieht etwas wilder aus:

Ist aber im Prinzip genau das selbe:
ein aktives USB Verlängerungskabel - eine USBzuRS232 (mit FTF8I5L-Chip) - uraltes Cisco Firewall Console Kabel.Der USBzuRS232 hat folgende Spez:
T: Bus=01 Lev=02 Prnt=10 Port=03 Cnt=01 Dev#= 11 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0403 ProdID=6001 Rev=06.00
S: Manufacturer=FTDI
S: Product=USB Serial Converter
S: SerialNumber=FTFS8I5L
C: #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=44mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=ftdi_sio
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0msOhne das lange USB Kabel kann ich mit dieser Kombination auch mit dem Pytes-Tool BMSQ.... und einem Windows direkt auf die 48100R zugreifen. Darum weiss ich das die Kombi ja funktioniert. Irgendwo habe ich etwas gelesen von einem "RS232-Null-Modemkabel". Aber das steht ja sehr selten auf den Kabel drauf.
Das ganze steckt jetzt am Proxmox Host und ist an den Node-Red Container durchgereicht mit mode=0777. Es scheint zumindest teilweise zu funktionieren. Wobei ich nicht ganz abschätzen kann, ob es nun an der Verkabelung, BMS oder Node-Red liegt wieso da teilweise unterschiedliche Resultate ankommen.
versteht das jemand?

der Node "csv-bearbeiten" ist zwar toll, macht aber irgendwie nicht reglmässig das gleiche?

Da ist doch schon eine ganze Menge aufgeteilt, nur eben bei den einzelnen Zellen fehlen irgendwie Inhalte. Irgendwas habe ich falsch eingestellt.
Zusätzlich sind da im Debug 10 alle 16 Zellen drin, obwohl im Debug 9 nur bis 8 aufgeführt sind, es scheint da irgendwie eine Anzeigekürzung zu geben.
-
versteht das jemand?

der Node "csv-bearbeiten" ist zwar toll, macht aber irgendwie nicht reglmässig das gleiche?

Da ist doch schon eine ganze Menge aufgeteilt, nur eben bei den einzelnen Zellen fehlen irgendwie Inhalte. Irgendwas habe ich falsch eingestellt.
Zusätzlich sind da im Debug 10 alle 16 Zellen drin, obwohl im Debug 9 nur bis 8 aufgeführt sind, es scheint da irgendwie eine Anzeigekürzung zu geben.
Schau mal in die Daten per hexadezimal rein.
Sind das wirklich Leerzeichen oder evtl ein tab (hex glaube ich 09)
Wenn die Daten tatsächlich mit einer unbestimmten Anzahl von Leerzeichen als trennzeichen kommt, dann ist es ein csv mit fester feldgrösse, dann wirst du zählen müssen und das der csv Node konfigurieren wenn sie das kann.Alternativ eine funktions Node, bei der man den Text anhand des Zeilenumbrüche in ein Array füllt und dann jede Zeile mit substring die verschiedenen Felder extrahiert.
Willst du jede Zeile separat weiter verarbeiten oder die Tabelle als Ganzes?
Das hängt dann davon ab ob die funktionsnode eine Message oder für jede Zeile eine Message erzeugt. -
Schau mal in die Daten per hexadezimal rein.
Sind das wirklich Leerzeichen oder evtl ein tab (hex glaube ich 09)
Wenn die Daten tatsächlich mit einer unbestimmten Anzahl von Leerzeichen als trennzeichen kommt, dann ist es ein csv mit fester feldgrösse, dann wirst du zählen müssen und das der csv Node konfigurieren wenn sie das kann.Alternativ eine funktions Node, bei der man den Text anhand des Zeilenumbrüche in ein Array füllt und dann jede Zeile mit substring die verschiedenen Felder extrahiert.
Willst du jede Zeile separat weiter verarbeiten oder die Tabelle als Ganzes?
Das hängt dann davon ab ob die funktionsnode eine Message oder für jede Zeile eine Message erzeugt.@OliverIO
Bin zwar nicht mehr vor dem PC, aber es sind echt Leerzeichen. Habe das ganze mal in Notepad hineinkopiert und die quasi Spalten angeschaut es sind einmal 9 und dann wieder 13 und wieder 9.
Auch habe ich das ganze mal als csv gespeichert und auch Excell erkennt nicht autmatisch Spalten. Was ich bereits erreicht habe ist, dass ich die Leerzeichen durch ein Semikolon ersetzen konnte. Was ich nun aber nicht schaffe sind die ersten beiden Zeilen wegzulassen und die entsprechenden Werte rauszupicken. Ich bin da mit Node-Red noch Anfänger und habe auch sonst mit Software manchmal meine Mühe.Das ganze soll eigentlich einfach meine 8 Akku mit jeweils 16 Zellen auslesen und die Spannung und Ladung in die Datenpunkte füllen. Ob das nun im eigenen Node-Red Container oder im iobroker Container läuft ist mir eigentlich egal. Und ja ich weiss es gibt bereits ein Adapter aber der funktioniert scheinbar bei Pytes nicht mehr oder nicht.
-
@OliverIO
Bin zwar nicht mehr vor dem PC, aber es sind echt Leerzeichen. Habe das ganze mal in Notepad hineinkopiert und die quasi Spalten angeschaut es sind einmal 9 und dann wieder 13 und wieder 9.
Auch habe ich das ganze mal als csv gespeichert und auch Excell erkennt nicht autmatisch Spalten. Was ich bereits erreicht habe ist, dass ich die Leerzeichen durch ein Semikolon ersetzen konnte. Was ich nun aber nicht schaffe sind die ersten beiden Zeilen wegzulassen und die entsprechenden Werte rauszupicken. Ich bin da mit Node-Red noch Anfänger und habe auch sonst mit Software manchmal meine Mühe.Das ganze soll eigentlich einfach meine 8 Akku mit jeweils 16 Zellen auslesen und die Spannung und Ladung in die Datenpunkte füllen. Ob das nun im eigenen Node-Red Container oder im iobroker Container läuft ist mir eigentlich egal. Und ja ich weiss es gibt bereits ein Adapter aber der funktioniert scheinbar bei Pytes nicht mehr oder nicht.
Habe das ganze mal in Notepad hineinkopiert
das ist gefährlich. du weißt nicht was der anzeigeeditor oder notepad da uU automatisch macht.
Auch habe ich das ganze mal als csv gespeichert und auch Excell erkennt nicht autmatisch Spalten
ja, aber excel kann feste breite schon, muss man aber einstellen, automatisch geht da nichts

aber du willst ja nicht excel, sondern node red
stell doch mal den exakten output aus deinem rs232 in einer textdatei zur verfügung.
also nichts editieren.
dann mach ich dir eine funktionsnode die das ordentlich verarbeitet -
@OliverIO
Bin zwar nicht mehr vor dem PC, aber es sind echt Leerzeichen. Habe das ganze mal in Notepad hineinkopiert und die quasi Spalten angeschaut es sind einmal 9 und dann wieder 13 und wieder 9.
Auch habe ich das ganze mal als csv gespeichert und auch Excell erkennt nicht autmatisch Spalten. Was ich bereits erreicht habe ist, dass ich die Leerzeichen durch ein Semikolon ersetzen konnte. Was ich nun aber nicht schaffe sind die ersten beiden Zeilen wegzulassen und die entsprechenden Werte rauszupicken. Ich bin da mit Node-Red noch Anfänger und habe auch sonst mit Software manchmal meine Mühe.Das ganze soll eigentlich einfach meine 8 Akku mit jeweils 16 Zellen auslesen und die Spannung und Ladung in die Datenpunkte füllen. Ob das nun im eigenen Node-Red Container oder im iobroker Container läuft ist mir eigentlich egal. Und ja ich weiss es gibt bereits ein Adapter aber der funktioniert scheinbar bei Pytes nicht mehr oder nicht.
habe mir mal aus deinem screenhot oben die daten extrahiert. aber wie gesagt das ist nur annahme und folgenden testflow gemacht

1.das erste ist ein inject node zum manuellen starten des flows, den brauchst du nicht. bei dir wird aus der rs232 getriggert
2.diese node stellt den test text bereit, bei dir wäre das dann die rs232 node
3.hier wird nun aus dem ankommenden text die daten aufbereitet- verarbeitet wird nur wenn text kommt
- text muss mindestens 9 zeichen lang sein
- text wird dann in einzelne zeilen aufgeteilt evtl leerzeilen werden ausgefiltert
- jede zeile wird mit regex in spalten aufgeteilt, dabei fliegen die leezeichen raus
- jeder match wird dann in ein battery objekt in das entsprechende feld gelegt
- aus jedem zeilen objekt wird dann ein eigenes messag objekt erzeugt
- wenn alle zeilen verarbeitet sind, werden alle messages an node red zum weiterverarbeiten zurückgegeben
- debug node: die gibt dann für jede einzelne message (also jede zeile) eine nachricht im debug fenster (käfer symbol) aus. vgl screenshot
danach darfst du damit machen was du willst :)
also bspw ein battery objekt nehmen, aus den daten den datenpunkt ableiten (also das ist eine eigene node, bei dem du den datenpunktnamen und den zu schreibenden inhalt ermittelst) und dann mit der iobroker out node an iobroker sendenNachtrag:
da ich gerade in spiellaune war habe ich dir deinen flow noch zu ende gemacht
in der zusätzlichen node function 1 (habe sie jetzt nicht benannt)
wird das battery objekt jetzt so aufbereitet, das es durch iobroker out direkt geschrieben wird
Ich habe bei mir mal als hauptobjekt
0_userdata.0.noderedbattery
genommen.in den node red instanz einstellungen musst du dann noch die folgende option aktivieren

das sieht dann so aus

versuche aber jede einzelne node zu verstehen was die macht, sonst kannst du die nicht anpassen.
-
Vielen Dank, bin gerade unterwegs, werde das aber morgen mal testen. Der Inhalt des Debug sieht schon sehr vielversprechend aus. Damit lässt sich glaub dann relativ einfach ein Datenpunkt für den Iobroker erstellen. Ich meinte ich habe solche Filter auch schon gebaut beim auslesen der Victron Forcast aus dem VRM.
Ich werde auf alle Fälle mal den ganzen String nochmals "nackt" hier einstellen.
Mit den Terminal Tools lassen sich den BMS noch ganz viele Dinge entlocken, habe unteranderem festgestellt, dass meine 8 Pytes mehrere verschiedene BMS Versionen und auch entsprechend verschiedene Firmeware haben. Sogar solche die ich zusammen gekauft habe. -
Vielen Dank, bin gerade unterwegs, werde das aber morgen mal testen. Der Inhalt des Debug sieht schon sehr vielversprechend aus. Damit lässt sich glaub dann relativ einfach ein Datenpunkt für den Iobroker erstellen. Ich meinte ich habe solche Filter auch schon gebaut beim auslesen der Victron Forcast aus dem VRM.
Ich werde auf alle Fälle mal den ganzen String nochmals "nackt" hier einstellen.
Mit den Terminal Tools lassen sich den BMS noch ganz viele Dinge entlocken, habe unteranderem festgestellt, dass meine 8 Pytes mehrere verschiedene BMS Versionen und auch entsprechend verschiedene Firmeware haben. Sogar solche die ich zusammen gekauft habe.relativ einfach ein Datenpunkt für den Iobroker
ist schon fertig. macht es bei mir schon so und ist im obigen flow enthalten.
habe aber gerade festgestellt, das das mit in neuen flow importieren nicht richtig klappt.
flow oben heißt
flow 1
wenn du den schon hast, dann vorher umbenennen -
Vielen Dank, bin gerade unterwegs, werde das aber morgen mal testen. Der Inhalt des Debug sieht schon sehr vielversprechend aus. Damit lässt sich glaub dann relativ einfach ein Datenpunkt für den Iobroker erstellen. Ich meinte ich habe solche Filter auch schon gebaut beim auslesen der Victron Forcast aus dem VRM.
Ich werde auf alle Fälle mal den ganzen String nochmals "nackt" hier einstellen.
Mit den Terminal Tools lassen sich den BMS noch ganz viele Dinge entlocken, habe unteranderem festgestellt, dass meine 8 Pytes mehrere verschiedene BMS Versionen und auch entsprechend verschiedene Firmeware haben. Sogar solche die ich zusammen gekauft habe. -
@Homoran
Absolut richtig erkannt. Mein Cerbo GX kommuniziert weiterhin über den BMS-CAN direckt mit dem Master BMS und holt sich die Daten die es braucht.Mein Ansatz ist eben, dass Victron und Pytes zusammen die Sache machen sollen und ich eigentlich nur ein Visualisierung der Zellen haben will. Weil die Erfahrung der letzten 1 1/2 Jahren hat mir gezeigt, dass die beiden das sehr gut machen und ich da keinerlei Eingriffe machen muss.
Wenn ich letzten Sonntag nicht etwas vorlaut gewesen wäre in einer Diskussion um die angebliche "Bombe und Brandbeschleuniger" in meinem Keller, würden wir hier kaum diskutieren.
Ein absoluter Verbrennerfan wollte mir erklären das alles zu gefährlich ist und sich nie rechnen würde. Da habe ich eben behauptet das mein Akku besser überwacht wird als sein Benzintank. Nun muss ich halt Beweise liefern.Ich werde das ganze nochmals zusammenfassen und in einen kompletten Eintrag schreiben, dass auch jemand ohne alles zu lesen etwas versteht.
-
@Homoran
Absolut richtig erkannt. Mein Cerbo GX kommuniziert weiterhin über den BMS-CAN direckt mit dem Master BMS und holt sich die Daten die es braucht.Mein Ansatz ist eben, dass Victron und Pytes zusammen die Sache machen sollen und ich eigentlich nur ein Visualisierung der Zellen haben will. Weil die Erfahrung der letzten 1 1/2 Jahren hat mir gezeigt, dass die beiden das sehr gut machen und ich da keinerlei Eingriffe machen muss.
Wenn ich letzten Sonntag nicht etwas vorlaut gewesen wäre in einer Diskussion um die angebliche "Bombe und Brandbeschleuniger" in meinem Keller, würden wir hier kaum diskutieren.
Ein absoluter Verbrennerfan wollte mir erklären das alles zu gefährlich ist und sich nie rechnen würde. Da habe ich eben behauptet das mein Akku besser überwacht wird als sein Benzintank. Nun muss ich halt Beweise liefern.Ich werde das ganze nochmals zusammenfassen und in einen kompletten Eintrag schreiben, dass auch jemand ohne alles zu lesen etwas versteht.
Ein absoluter Verbrennerfan wollte mir erklären das alles zu gefährlich ist und sich nie rechnen würde.
Wenn es die Kategorie von Menschen ist, was ich aktuell vor Auge hab, merk dir, wenn es dir zu viel wird:
Hör rechtzeitig auf mit diskutieren. Einige von dieser Kategorie wirst du nie überzeugen/zufriedenstellen stellen
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden