Pylontech US2000

Wenn mehr als ein Gerät an den Raspberry angeschlossen werden sollen. Z.B. ein Regler und ein Wechselrichter oder mehrere Wechselrichter. Das Maximum sind 6 Geräte pro Raspberry Pi.

Moderator: Ulrich

Benutzeravatar
Ulrich
Administrator
Beiträge: 1862
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Hat sich bedankt: 1 Mal
Danksagung erhalten: 13 Mal
Kontaktdaten:

Re: Pylontech US2000

Beitrag von Ulrich »

Dann wirst du nur über die RS485 Schnittstelle die neuern Geräte mit der Solaranzeige auslesen können.
Mir ist bekannt, dass Pylontech Änderungen durchgeführt hat.

Die neuen Geräte haben als Kommunikationsport nur noch RS485 und CAN angegeben. Über den alten Console Port scheinen sie die Daten nicht mehr aus zu geben. Bitte versuche es einmal mit einem RS485 zu USB Adapter. (Regler 41)
--------------------------------------
Ulrich [Admin]

mschmitz
Beiträge: 11
Registriert: Mo 23. Sep 2019, 15:21

Re: Pylontech US2000

Beitrag von mschmitz »

ja, so könnte es sein.
Zumindest kann ich die Console auch nicht per exit/quit verlassen.
Diese läuft bei mir dauerhaft und es gibt den 1200 Baud Modus gar nicht.

teutocat
Beiträge: 22
Registriert: Fr 18. Dez 2020, 20:51
Danksagung erhalten: 1 Mal

Re: Pylontech US2000

Beitrag von teutocat »

mschmitz hat geschrieben:
Mi 6. Jan 2021, 10:35
ok,
mein Akku scheint kein "HEX" zu verstehen.
Wenn ich auf der Console eingeloggt bin und die Anfrage von Solaranzeige kommt, sehe ich folgende Fehlermeldung:

Code: Alles auswählen

Unknown command '~200146510000FDAD' - try 'help'
...
Auch kann ich mich nur mit 115200 Baud auf die Console verbinden, bei dem Versuch mich mit 1200 Baud zu Verbinden bekomme ich nicht mal eine Antwort.

Es sieht so aus, dass mein Akku die Abfrage in Klartext erwartet.
Deine serielle Console befindet sich im Debug-Modus, der läuft immer mit 115200 Baud. Du musst da irgendwie raus kommen. Im normalen Modus ist die Baudrate am serielle Port dann auf 1200 Baud fest eingestellt. Nur in dem Modus kann man die Daten vom Akku empfangen die Solaranzeige versteht. Beim Wechsel in den Debug-Modus erfolgt automatisch die Umschaltung auf 115200 Baud. Das was man da auslesen kann ist nicht zu Solaranzeige kompatibel.
Ich habe auch ne ganze Weile damit gekämpft.
Du kannst z.B. auch mit dem Programm miniterm testen, das ist standardmäßig auf dem RPi drauf.
Ich hatte dann den Effekt dass ich mit miniterm auch mit 1200 Baud Daten aus dem Akku auslesen konnte, aber Solaranzeige trotzdem nicht. Ich bin der Meinung dass die Initialisierung des seriellen USB-Adapters mit 1200 Baud (bei mir) nicht zuverlässig funktioniert.

teutocat
Beiträge: 22
Registriert: Fr 18. Dez 2020, 20:51
Danksagung erhalten: 1 Mal

Re: Pylontech US2000

Beitrag von teutocat »

mschmitz hat geschrieben:
Mi 6. Jan 2021, 11:55
ja, so könnte es sein.
Zumindest kann ich die Console auch nicht per exit/quit verlassen.
Diese läuft bei mir dauerhaft und es gibt den 1200 Baud Modus gar nicht.
Das wäre IMO sehr ungewöhnlich.
Welchen Akku hast du genau: US2000, US2000B, US2000Plus, US3000 oder schon einen Nachfolger der jetzt vor kurzem angekündigt wurde?
Welche Firmware hat dein Akku denn?

saugnapf
Beiträge: 37
Registriert: So 30. Aug 2020, 18:12
Danksagung erhalten: 1 Mal

Re: Pylontech US2000

Beitrag von saugnapf »

Hast du das hier eigentlich schon gelesen: viewtopic.php?p=4555#p4555

Ich hab das über RS232 trotz längeren Versuchen nicht hinbekommen, über RS485 klappt es problemlos. (Regler 41)
Da das Problem immer wieder mal auftaucht, kann es schon möglich sein, dass seitens pylontech da bei den neueren Batterien etwas geändert wurde, und diese dann nicht mehr über RS232 ausgelesen werden können.

Siehe auch hier:
https://www.photovoltaikforum.com/threa ... ost2158056

Meine pylontech US2000 sind von Mai bzw. August 2020, firmware ist 515.

teutocat
Beiträge: 22
Registriert: Fr 18. Dez 2020, 20:51
Danksagung erhalten: 1 Mal

Re: Pylontech US2000

Beitrag von teutocat »

Ich kann jetzt auch Erfolg bei der RS485-Variante vermelden.
Ich betreibe 8 Stück Pylontech US2000Plus an einem Raspberry Pi 4B mit solaranzeige 4.7.0b.
Der RS485 Adapter hat einen FTDI-Chip und der DIP-Schalter 1 steht auf OFF (unten), was 115200 Baud bedeutet.
In solaranzeige habe ich Regler 41 gewählt und die Anzahl der Packs (8) angegeben.
Das Grafana Dashboard für den US2000 habe ich dementsprechend bearbeitet dass 8 Blöcke ausgewertet werden.
So läuft es.
Fazit, beim US2000Plus können die Akkudaten alternativ sowohl über den Console-Port mit RS232 als auch über den RS458-Port ausgelesen werden. Über RS485 geht es aber wesentlich schneller.

mschmitz
Beiträge: 11
Registriert: Mo 23. Sep 2019, 15:21

Re: Pylontech US2000

Beitrag von mschmitz »

Hallo,

gut - ich werde mir den Adapter auch bestellen.
Ich hab mir jetzt etwas in python hingebastelt. Damit habe ich zumindest erstmal die Daten im mqtt.
Eventuell kann es ja jemand gebrauchen.
mschmitz

Code: Alles auswählen

import time
import serial
import paho.mqtt.client as paho

broker="192.168.11.2"
port=1883

ser = serial.Serial(
    #port='/dev/ttyUSB2',
    port='/dev/serial/by-id/usb-FTDI_USB_Serial_Converter_FTCRZ32M-if00-port0',
    baudrate=115200,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS
)

ser.isOpen()
ser.write('\r\n')
ser.write( 'pwr' + '\r\n')
time.sleep(1)

out =  ser.read(1290)
out[10:]
x = out.split('\n',4)[-1]
pwr = x.split()
#print x

def on_publish(client,userdata,result):
#    print("data published /n")
    pass

client1= paho.Client("control1")
client1.on_publish = on_publish
client1.connect(broker,port)

for batNr in range (1,3):
  if batNr == 1:
    offset = 17
  else:
    offset = 17 + (17 * (batNr - 1))
  
  client1.publish("pylontech/" + str(batNr) + "/Voltage", float(pwr[offset]) / 1000)
  client1.publish("pylontech/" + str(batNr) + "/Current", float(pwr[offset + 1]) / 1000)
  client1.publish("pylontech/" + str(batNr) + "/Temp", float(pwr[offset + 2]) / 1000)
  client1.publish("pylontech/" + str(batNr) + "/TempLow", float(pwr[offset + 3]) / 1000)
  client1.publish("pylontech/" + str(batNr) + "/TempHigh", float(pwr[offset + 4]) / 1000)
  client1.publish("pylontech/" + str(batNr) + "/VoltageLow", float(pwr[offset + 5]) / 1000)
  client1.publish("pylontech/" + str(batNr) + "/VoltageHigh", float(pwr[offset + 6]) / 1000)
  client1.publish("pylontech/" + str(batNr) + "/Status", pwr[offset + 7])
  client1.publish("pylontech/" + str(batNr) + "/VoltStatus", pwr[offset + 8])
  client1.publish("pylontech/" + str(batNr) + "/CurrStatus", pwr[offset + 9])
  client1.publish("pylontech/" + str(batNr) + "/TempStatus", pwr[offset + 10])
  client1.publish("pylontech/" + str(batNr) + "/SOC", pwr[offset + 11][:-1])
  client1.publish("pylontech/" + str(batNr) + "/Time", pwr[offset + 12] + " " + pwr[offset + 13])
  client1.publish("pylontech/" + str(batNr) + "/BVState", pwr[offset + 14])
  client1.publish("pylontech/" + str(batNr) + "/BTState", pwr[offset + 15])

  time.sleep(1)

ser.close()
exit()

saugnapf
Beiträge: 37
Registriert: So 30. Aug 2020, 18:12
Danksagung erhalten: 1 Mal

Re: Pylontech US2000

Beitrag von saugnapf »

Kann mir jemand von euch (für einen Laien verständlich) erklären, was ich tun muß, um den pylon> -promt aus Beitrag 1 zu bekommen?
Wahrscheinlich echt blöde Frage.
Geht das über putty? Oder nur direkt am Raspi? Und Wenn Wie?? :oops: ;)

teutocat
Beiträge: 22
Registriert: Fr 18. Dez 2020, 20:51
Danksagung erhalten: 1 Mal

Re: Pylontech US2000

Beitrag von teutocat »

saugnapf hat geschrieben:
Di 12. Jan 2021, 20:07
Kann mir jemand von euch (für einen Laien verständlich) erklären, was ich tun muß, um den pylon> -promt aus Beitrag 1 zu bekommen?
Wahrscheinlich echt blöde Frage.
Geht das über putty? Oder nur direkt am Raspi? Und Wenn Wie?? :oops: ;)
Das ging bei mir auch nur am RS232 Console-Port.
Ich habe dafür miniterm benutzt, putty müsste aber auch gehen.
Man kann mit einer bestimmten Sequenz in diesen Modus umschalten.
Wie diese Sequenz lautet habe ich aus einem Dokument aus einem entsprechenen Thread aus dem photovoltaikforum.
Jedenfalls setzt man diese Sequenz noch mit 1200 Baud ab und dadurch erfolgt dann eine Umschaltung in diesem Prompt-Modus und gleichzeitig auf 115200 Baud, d.h. man muss in dem Moment auch das miniterm/putty auf 115200 umschalten. Ich meine mit quit kommt man wieder raus und hat dann wieder 1200 Baud.

saugnapf
Beiträge: 37
Registriert: So 30. Aug 2020, 18:12
Danksagung erhalten: 1 Mal

Re: Pylontech US2000

Beitrag von saugnapf »

Danke für deine Antwort!
Du meinst sicher das hier: ;)
"Zuerst muss die Konsole aktiviert werden. Dazu das Terminalprogramm auf 1200, 8,N,1 umschalten.
Dann den folgenden Hexstring an die Batterie senden:
Data: 7E 32 30 30 31 34 36 38 32 43 30 30 34 38 35 32 30 46 43 43 33 0D
Jetzt auf 115200,8,N,1 umschalten..
Data: 0D 0A senden.
Es erscheint der pylon> Prompt, der die Eingabe von Kommandos ermöglicht."
https://www.photovoltaikforum.com/threa ... /?pageNo=1

Mir ist der Schritt nicht klar, wo oder wie ich dann den pylon> Prompt bekomme.
z.B. kann ich den string per commix dierekt von meinem Win10 Laptop über RS232 (oder auch RS485) an die Batterie senden, die Batterie antwortet auch (auch wenn ich die Antwort nicht verstehe) aber da kommt natürlich kein pylon> Promt.
Oder ich kann mich per putty auf dem Raspi (solaranzeige.local) anmelden (pi@solaranzeige:), weiss aber nicht, wie ich die Batterie ansprechen, bzw. den HEX-string senden kann...

Antworten