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:
#ifndef _USER_CONFIG_OVERRIDE_H_
#define _USER_CONFIG_OVERRIDE_H_
#ifndef USE_SCRIPT
#define USE_SCRIPT # adds about 17k flash size, variable ram size
#endif
#ifdef USE_RULES
#undef USE_RULES
#endif
#define USE_SCRIPT_SERIAL
#define SCRIPT_MAXSSIZE 64
#define USE_SCRIPT_WEB_DISPLAY
#define USE_SCRIPT_JSON_EXPORT
#define USE_SCRIPT_FATFS -1
#define FAT_SCRIPT_SIZE 4096
#define USE_SCRIPT_FATFS_EXT
#define SDCARD_DIR
#ifndef SUPPORT_MQTT_EVENT
#define SUPPORT_MQTT_EVENT
#endif
#endif // _USER_CONFIG_OVERRIDE_H_
Alles anzeigen
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:
>D 64
;variablen für berechnungen
res=0
rstr=""
label=""
lraw=""
val=0
volt=0
curr=0
temp=0
coul=0
>B
res=0
res=so(3 1 115200 8N1 1024)
;print open %res%
>F
res=sa()
if res>0
then
;print res=%res%
rstr=sr(10)
rstr=sb(rstr 1 sl(rstr))
;print read %rstr%
label=sb(rstr 0 7)
lraw=sb(rstr 0 10)
val=st(rstr : 2)
switch label
case "Voltage"
volt=val/1000
case "Current"
if lraw=="Current "
then
curr=val
endif
case "Tempera"
temp=val/1000
case "Coulomb"
coul=val
ends
endif
>S
if upsecs%5==0
then
res=sw("pwr 1\n")
;print write cmd
endif
;print %volt% %curr% %temp% %coul%
>T
; sende mqqt-Einzeltopis zusätzlich/anstatt json wie unter ">J)
=>publish iot/%topic%/Voltage %4volt%
=>publish iot/%topic%/Current %0curr%
=>publish iot/%topic%/Coulomb %0coul%
=>publish iot/%topic%/Tag %0tag%
>W
Spannung{m}%4volt% V
Strom{m}%0curr% mA
Temperatur{m}%3temp% C
Ladung{m}%0coul% %%
>J
,"pylon":{"Voltage":%4volt%,"Current":%0curr%,"Coulomb":%0coul%,"Temperature":%3temp%}
#
Alles anzeigen
(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)