ok, ich bin ja ein linux guy, dazu esp32 und Auslesen über die hintere ehz-Schnittstelle vom Zähler. Ich glaube, ich dokumentiere das hier nur für mich

aber was solls, das muss ja auch getan werden und vielleicht hilft die ein oder andere Information. Das ganze Projekt ist nur durch LLM-Unterstützung möglich geworden. Die LLM hat mich aber auch das ein und andere mal in die falsche Richtung geschickt.
initialer Prompt für die entwicklung von main.py (dem automatisch gestarteten Programm, das alles regelt:
Code: Alles auswählen
Ausgangslage:
Es wurde erfolgreich eine Kommunikationsbrücke vom Hager EHZ001K Stromzähler zum Olimex ESP32-POE-ISO etabliert.
Der Zähler gibt unaufgefordert Daten im SML-Protokoll über seine optische Schnittstelle (LMN) mit 9600 Baud aus, die via RS485 (mittels eines funktionierenden DollaTek-Adapters) auf den ESP32 gelangen.
Die ESP32-Seite läuft derzeit mit MicroPython und gibt die Rohdaten über USB aus.
Nächstes Vorhaben (Ziele für die neue Chat-Instanz):
Das Ziel ist es nun, die vom Hager Zähler empfangenen SML-Daten nicht nur über USB auszugeben, sondern sie über das Netzwerk verfügbar zu machen. Konkret soll:
- Modbus TCP zum Senden der Daten genutzt werden.
- Die Lösung über das Netzwerk (OTA) updatebar sein, ohne dass eine USB-Verbindung erforderlich ist.
- Die gesamte Implementierung stabil und leicht wartbar sein.
- Die Option, Tasmota als Firmware auf dem ESP32 einzusetzen, soll evaluiert werden.
- Die Sprache für den Code ist flexibel.
Ich hab mich für den Weg MicroPython (auf dem esp32) entschieden und dazu, den esp manuell über USB zu konfigurieren. das kann ich dann einfacher scripten und der ESP selbst braucht für die Installation keinen Netzwerkzugriff
Notiz an mich: NIEMALS den Esp32 über die externe Stromversorgung und USB gleichzeitig befeuern, immer nur eine Spannungsquelle!! sonst "hat Puff gemacht"
Ich habe mich also dagegen entschieden:
- den ESP mit Befehlen auf dem ESP "upzudaten"
- eine neue Firmware zu kompilieren, die alles enthält.
Anweisung an die LLM hierfür: (ich hätte ihr noch den Grund angeben sollen, damit sie die Motivation später mit berücksichtigen kann).
Code: Alles auswählen
ok ich geh den offline weg. ich würde den esp32 jetzt gerne über usb so vorbereiten, dass ich ihn danach ans netzwerk hängen kann und alles weitere per ethernet anstelle usb machen kann. Die Ersteinrichtung will ich über USB machen, also kein direkter Zugriff des ESP während der Erstinstallation ans Internet.
Terminalzugriff auf den esp32:Code: Alles auswählen
apt install picocom
picocom /dev/ttyUSB0 -b 115200
Exit with Ctrl+A, Ctrl+X.
Die Firmware (Micropython) für diesen esp32:
Code: Alles auswählen
https://micropython.org/download/ESP32_GENERIC/
https://micropython.org/resources/firmware/ESP32_GENERIC-20250415-v1.25.0.bin
flashen (immer erst löschen)
esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash
esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 ESP32_GENERIC-20250415-v1.25.0.bin
Für die Integration von Modbus
Code: Alles auswählen
git clone https://github.com/brainelectronics/micropython-modbus.git
cd micropython-modbus
"The umodbus library is in the micropython_modbus directory."
Transfer umodbus to ESP32 via USB
Code: Alles auswählen
mkdir /pyboard/lib
mkdir /pyboard/lib/umodbus
cp -r micropython-modbus/umodbus/* /pyboard/lib/umodbus
Verify:
You should see __init__.py, tcp.py, etc.
Exit rshell:
Test umodbus in REPL:
Reconnect to REPL with picocom /dev/ttyUSB0 -b 115200.
Run:
Code: Alles auswählen
picocom /dev/ttyUSB0 -b 115200
vorher:
[code] File "<stdin>", line 1, in <module>
NameError: name 'umodbus' isn't defined
nach Eingabe von
nachher:
Code: Alles auswählen
>>> print(umodbus)
<module 'umodbus' from '/lib/umodbus/__init__.py'>
funzt.
2be continued