Pylontech US2000 mit tasmota auslesen

  • Eines vorweg! Das ganz hier ist das Werk von Gerhard! gemu2015

    Er hat in den letzten Tagen die serielle Schnittstelle im Scripter angepasst und das Script geschrieben. Ich war quasi nur das Testkannichen welches am Anfang mal eine Frage hatte....

    Deshalb hier nochmal einen grosses Dankeschön an Gerhard!

    Es gibt mittlerweile viele Möglichkeiten den Pylontech Akku mit einem Raspbery, Arduino oder ESP8266-Board auszulesen z.B. hier oder hier.

    Viele haben, bis auf den Raspberry, eines gemeinsam. Änderungen und Erweiterungen kann ich nur mit Aufspielen einer neuen Firmware lösen. Mit der Scripting Language von Tasmota kann ich dies im laufenden Betrieb. Somit lässt sich z.B. neben dem Auslesen des Akkus auch noch z.B. einen Schaltlogik für Lade und Entladevorgänge einfach hinzufügen, oder zusätzliche Werte auslesen. (später mehr)

    Dieses Skript liesst nun also vier Werte über die serielle Schnittstelle des Pylontechs aus und zeigt diese auf der Weboberfläche an und sendet die Werte als Mqtt-JSON String. (teleperiod)

    Der Aufruf erfolgt alle 5 Sekunden, kann aber auch höher sein und kann im Script angepasst werden: (if upsecs%5==0)

    (Hinweis: bei z.B. 30sec dauert es nach dem Start entsprechend 30sec bis die ersten Daten gelesen werden)


    Die Hardware:

    NodeMCU v2 (oder gleichwertig)

    RS232toTTL-Adapter https://www.sparkfun.com/products/11189

    Kabel mit RJ14 oder RJ45 (je nach Modell)

    (Hinweis: bitte nicht am falschen Ende sparen. Die günstigen Adapter bei Ebay oder Amazon haben meistens einen Layout Fehler , welchen man mit umlöten eines SMD-Kondensators (in grober Sandkorngrösse!) korrigieren kann (Betonung liegt auf kann ;))


    Software:

    Die Firmware muss mit dem Development branch von tasmota kompiliert werden! Ich denke, die meisten "Power-User" werden wissen was zu tun ist.

    Hier also die benötigten Definitionen für die user_config_override.h:


    Für alle welche das ohne Kompilieren mal testen möchten, habe ich eine fertige firmware.bin erstellt. Diese ist für ein 4MB ESP8266, also ein NodeMCU oder Wemos D1.

    Der ESP startet nach dem Flashen mit einem tasmota-typischen AP, welcher dann unter 192.168.4.1 erreichbar ist. Hier kann man dann seine WLAN-Zugangsdaten eintragen und die Kiste ins heimische Netz integrieren.


    und schliesslich das Skript:

    (aus kommentierte print-Befehle dien(t)en zum Debuggen)

    UPDATE. 27.02.2022 - Strom wird jetzt richtig angezeigt


    Zusatzinfo: Ich musste bei meinem Akku nicht, wie oft zu lesen, erst die Konsole aktivieren , wie z.B:

    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.


    Die pylon> Konsole ist bei meinem US2000 permanent mit 115200 erreichbar. (Produktionsdatum 07/2021)

    Die vier Dipp-Schalter sind alle unten.


    Viele Grüsse

    ow

    UPDATES:

    neue fimware hinzugefügt (12.4.0.2)

    #define MAXSVARS 3 - nicht mehr notwendig

    Schaltbild aktualisiert

    Schaltbild erweitert mit RJ45 (US2000C)

  • Hier also noch eine beispielhafte Erweiterung der Funktionalität per Skript.

    In meinem Fall wird tagsüber anfallender PV-Überschuss in den Akku geleitet, nachts wird wieder aus dem Akku per Mikrowechselrichter eingespeist.

    Dazu nutze ich zwei Relais (SSR geschalten über normale GPIOs), welche wechselseitig geschalten sind, einmal für die Ladeseite und einmal für die Entladeseite. Zeitlich wird einfach bei Sonnenaufgang resp. Sonnenuntergang umgeschaltet.

    Ebenso müssen die Relais eine einstellbare Lade- und Entladeschwellen (SOC) vom Akku einhalten.

    Die Tag(Nacht)-Berechnung (Danke Gerhard) sieht dann so aus:

    if time>sunrise

    and time<sunset

    then

    tag=1

    else

    tag=0

    endif


    Die Ladeseite wird so gesteuert:

    if tag==1

    and

    if coul<socmax

    then

    spin(ladepin 1)

    spin(entladepin 0)

    else

    spin(ladepin 0)

    endif


    und so die Entladeseite:

    if tag!=1

    and

    if coul>socmin

    then

    spin(entladepin 1)

    spin(ladepin 0)

    else

    spin(entladepin 0)

    endif



    Hier noch das vollständige Skript:

    UPDATE 27.02.2022 - Fix Stromanzeige

    Testaufbau

    Das also ein Beispiel, wie einfach man mit dem Scripting eine Erweiterung realisieren kann. Feine Sache!

    Schönen 2. Advent!

    Gruss ow

    2 Mal editiert, zuletzt von opferwurst (27. Februar 2022 um 17:41)

  • Nach längerer Zeit ein kurzes Update. Ich habe nun meine Anlage seit einem Viertaljahr ohne Probleme am laufen.

    Tagsüber wird der PV-Überschuss zuerst dynamisch in den Akku geladen, wenn dieser geladen ist kommt der Heizer dran.

    Nachts wird über einen Micro-Wechselrichter wieder entladen. Die Entladeleistung kann fest mit einem Step-Down-Konverter (DKP6102) eingestellt werden und ist an den MPTT-Bereich des WRs angepasst. Optional hat der DKP6102 auch eine UART-Schnittstelle, somit könnte man das auch noch steuern...)

    Hier mal der momentane Aufbau:

    Akku-Werte:


    Gruss ow

  • Hallo

    wie komme ich dazu

    "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."

    diese Anweisung umzusetzen?

    Tasmota ist auf dem Wemos D1mini geflasht zeigt aber keine werte an.

    Danke für Deine Bemühungen

    Grüße

  • Hallo

    danke für die schnelle Antwort aber ich habe es auch hinbekommen es lag an einer falschen Belegung vom Kabel zum Pylontech Akku.

    Aber mal eine Frage ich möchte meine 2 Laderegler zum Akku hin wenn er voll geladen ist die Gleichstromleitung abschalten und wenn er eine bestimmte Prozentzahl erreicht hat wieder zuschalten.

    Geht das und was brauche ich dazu?

    Ich möchte nicht das der Akku sich abschaltet und nicht von alleine mehr angeht.

    Ich hoffe ich habe mich verständlich ausgedrückt.

    Grüße

  • Man könnte eine Zuleitung vom Laderegeler zur Batterie mit einem steuerbaren Relais, ählich meinem unterbrechen(steuern).

    Deine 48V/60A eines Ladereglers sind aber nicht ohne! Ich schalte mit meinen SSR-40DD lediglich max. 12A. Eventuell könnte dieser ausreichend sein. Dafür übernehme ich aber keine Garantie!

    Auch weiss ich nicht wie der Laderegler auf eine "weggeschaltete" Batterie reagiert.

    Steuern könntest Du das SSR ganz einfach über einen GPIO-Ausgang Deines Wemos. Das Script müsste mann entsprechend erweitern.

    Die Logic zum Schalten des Relais wäre zB.:

    wenn SOC vom Akku > 10% und < 95% dann GPIOx = 1 (an)

    sonst GPIOx = 0 (aus)

  • Hallo, bisher lief das Script mit Tasmota 10.0.0.3 wunderbar.

    Mit Tasmota 12.4.0 bekomme ich Fehler, die in der Console angezeit werden.

    var not found sa() und var not found sw("pwr 1/n")

    Sollte Zeile 23 und 61 im Script sein.

    Gibt es schon neue Infos dazu.

    Schalte damit einen Sonoff Pow wenn der Speicher kleiner oder gleich 10 % Ladung hat. :)

    unter

    >T

    dies

    if coul<=10

    then

    =>WebSend [192.168.2.41] /cm?cmnd=Power Off

    endif


    Danke

    2 Mal editiert, zuletzt von Ralla66 (7. März 2023 um 21:08)

  • Diese Tasmota Version ist mit speziellen Parametern kompiliert worden. Kann natürlich durch ein Update beeinflusst worden sein. Kenne mich da aber zu wenig aus. Warum hast Du überhaupt ein Update gemacht? Ich mache das eigentlich nie bei solchen Sachen. Werde aber die Tage mal mit der aktuellen Tasmota ein neues Binary erzeugen...

  • Mein Oldtimer liesst seit über einem Jahr meinen Akku aus, Schaltet meine Relais uns sendet ein paar Daten per MQTT. Und wenn sich die Anforderungen nicht ändern, macht der das bis er mal kaputt geht. Dazu noch ein Beispiel: Einen Stromzähler lese ich seit Anfang 2019 mit einer 6.4.0 aus.


    Wie ich schon geschrieben habe, musst Du Dir eine speziellen Tasmota-Version selber "bauen", aber das hier zu erklären wäre offtopic. Hier mal als Einstieg was zum lesen.

  • Wo ist das Problem eine spezielle Tasmota Scripting zu Compilieren, oder überhaupt zu bauen, sehe ich nicht.

    Suche halt Infos zu - > var not found sa() und var not found sw("pwr 1/n")

    Hier unter Serial IO support #define USE_SCRIPT_SERIAL

    Wo kommt der Fehler bei sa() her.

    2 Mal editiert, zuletzt von Ralla66 (11. März 2023 um 12:09)

  • Danke für die neue bin.

    Bei mir soll wenn die Speicherladung < 5% ist ein websend cmd gesendet werden um Verbraucher / Wechselrichter auszuschalten.

    Dazu kommt das per Timer Webgui aus Tasmota heraus per websend die Verbraucher auch Ein / Ausgeschaltet werden sollen.

    Soweit klappt das nun mit der 10er Tasmota. Bis auf die Timerzeit Anzeige ist das soweit ok. Die Funktion ist ja gegeben.

    Danke für die Mühe deiner seits.

  • Ich habe meine zwei ESP8266 gegen einen ESP32 getauscht und damit 3 Funktionen vereint:

    -Pylontech Akku auslesen (Spannung, Strom, Temperatur, SOC)

    -Lade- und Entladerelais steuern (nach Zeit und Akkustand)

    -dynamische Leistungsregelung per PWM eines Meanwell HLG-xxxH(AB oder B)-Netzteils zur Akkuladung (Überschussladung)

    Alles zusammen auf einer Leiterplatte passend auf für ein (SSR) Hutschienenhalter:



    Als ESP32 habe ich einen OLIMEX ESP32-POE verwendet. Durch die POE-Funktion spare ich mir das Netzteil im Schaltschrank. (POE-Einspeisung muss natürlich vorhanden sein) Zudem habe ich nun eine kabelgestützte Verbindung und muss nicht mehr die teilweise schlechte WLAN-Verbindung in meinem Keller nutzen. Um den Olimex eventuell mal zu tauschen, ist dieser nicht direkt aufgelötet sondern per Stift- und Buchsenleiste.

    Nach dem Flashen muss noch das entsprechende Template von blakadder aktiviert werden.

    Ebenfalls von OLIMEX gibt es einen RS232-TTL Konverter welcher sich einfach per Kabel mit dem ESP verbinden lässt. Die Verbindung zum Pylontech wird mit einem speziellen Kabel (DB9-Stecker--RJ14) hergestellt. Ich habe hier ein gewöhnliches RS232 Verlängerungskabel genommen, die Buchsenseite abgeschnitten und ein RJ14-Stecker auf gecrimpt. (Kabelbelegung gemäss Schaltplan)

    Die die Lade/Entlade-Ausgänge mit Printklemme lassen sich per Jumper überbrücken/testen.

    Und schliesslich ist noch ein Ausgang für ein dimmbares HLG-Netzteil vorhanden, an dem die DIM+ und DIM- Eingänge des HLGs direkt angeschlossen werden können um die Stromstärke zu regeln.

    Das PWM Signal muss bei meinem HLG invertierend sein.

    Der Überschuss wird in einem separaten tasmota-ESP direkt am Stromzähler erfasst, berechnet und per Globaler Variable allen anderen tasmota-Geräten im Netzwerk zur Verfügung gestellt.

    Eine LED zur einfachen optischen Kontrolle des PWM-Signals ist ebenfalls integriert.

    Alle GPIOs werden im Script definiert, eine Einstellung im WebGUI ist nicht mehr notwendig.

    Sollte jemand Interesse an der unbestückten Platine haben, ich hätte noch ein paar hier liegen.

    Im Anhang findet ihr eine fertig kompilierte Firmware für den Olimex. ACHTUNG. nach dem DL die Endung .zip in .7z ändern und mit 7-zZip entpacken!

    Gruss OW


    die verwendeten Einträge der user_config_override.h:


    Und das Skript:

    UPDATE:

    Schalbild erweitert mit RJ45 (US2000C)

  • Hallo,

    Du hast Dir ja vielleicht eine Arbeit gemacht.

    Aber kannst Du mir vielleicht sagen wie ich die Leistung (also was die Module bringen) DC Leitung von meinem Laderegler zum Pylontech Akku auslesen und in iobroker darstellen kann.

    Am besten was "einfaches" .

    Grüße

  • Da kann ich Dir leider nicht wirklich weiterhelfen, da ich meine PVs alle AC-seitig auslese und das geht ja mit den entsprechenden Shellys, Sonoffs etc. recht einfach.

    Vielleicht wäre ein PZEM-017-Umbau etwas, ist aber aufwändig. Einige Laderegler besitzen RS485 Schnittstellen, eventuell könnte man hierüber etwas erreichen. IOBroker nutze ich nicht...