Skip to content

ESP32 und vcontrold .... out of the box

vheat edited this page Mar 25, 2022 · 4 revisions

Long story short

Oben habe ich in 2013 beschrieben, wie ein einfacher Optolink Adapter an einen FriendlyARM an die TTL 3V3 Schnittstelle angeschlossen werden kann und der vcontrold auf dem FriendlyARM dann die Daten bereitstellt. Der Schaltplan zum Optolink Adapter ist in dem Beitrag angehängt. Dann gab es im Laufe der Jahre Wechsel der Hardware, erst zu einem RaspPi2 dann RaspPi3B, immer über den TTL 3V3 Port, den alle diese Boards auf dem HAT zur Verfügung stellen. Inzwischen habe ich einen durchlaufenden Rechner, Server wäre zuviel gesagt, der auch PV und andere Daten führt, Aufzeichnung in InfluxDB und Visualisierung über Grafana. Diverse Tasmota Steckdosen und weitere Steuerungen hängen da auch dran. Ich überlegte schon länger, wie ich den Setup vereinfachen könnte und, naja, den Stromverbrauch durch Abschalten des RaspPi verringern. Mir kam dann zuvor, daß der RaspPi nicht mehr bootete, erste Analyse, SD Karte verreckt, also war Handeln angesagt. Mir gefiel auch nicht, dass mein vcontrold auf einem recht alten Stand war. Ich bedanke mich bei allen, die den Framer-Layer auch zum Setzen von Daten erweitert haben.

Lösungsansatz

Aus der Überlegung, wie teste ich einen neuen Setup, kam die Erkenntnis, dass der vsim, also der Simulator zum vcontrold, über eine Socket Verbindung angesprochen wird, und das war der Schlüssel, da alle Bytes zur Vitronic, einschliesslich der CRC in den Socket gesteckt werden, genau so wie es über die Optolink Schnittstelle geht, egal ob KW oder 300er Protokoll.

Von meinen Tasmotas wusste ich, dass sie als TCP zu Seriell Brücke funktionieren können, wenn mit der entsprechenden Erweiterung kompiliert wurde. Also den Anweisung bei Tasmota gefolgt, Sources heruntergeladen und nach Änderung der Konfiguration gebaut, die Beschreibung war hier zuverlässig. Ich habe einen ESP32 NodeMCU ausgewählt, da ich etwas mehr processing power haben wollte, es laufen auch einige DS18B20 Temperatur-Sensoren mit, die über MQTT reporten. Langfristig würde ich gerne noch das Warmwasser, Umwälzung und Aufbereitung mit reinnehmen, so ein Dauerläufer bei Umwälzung geht doch auf die Wassertemperatur, sieht man sehr schön auch bei nur qualitativem Reportung durch die DS18B20, die auf den Warmwasserrohren aufgelegt sind. Also bischen mehr Muckis ist gut... Sollte aber auch problemlos mit ESP8266 gehen, hier liefert Tasmota bereits eine Zigbee Variante, die die TCP-Serial-Bridge bereits mitbringt. Vorteil des ESP32 ist auch, dass er mehrere serielle Ports hat, man sich also nicht der seriellen Konsole beraubt bzw den USB Anschluss nicht außer Betrieb nehmen muss.

Durchführung

Der vcontrold auf meinem Server war schnell kompiliert (Ubuntu Rechner). Das ist hier im Wiki beschrieben, letztendlich git clone und cmake.

Die Tasmotas bringen neben einer seriellen Konsole auch eine Konsole im Webinterface mit, dort drauf und die TCP-Serial-Bridge für 4800E2 konfiguriert und für einen Port, 18420 in meinem Fall, gestartet. Jetzt den vcontrold so konfiguriert wie im vsim Fall, also mit Ziel-IP-Adresse des Tasmota und Port 18420.

Und siehe da, Wirehark zeigt, dass Daten geschickt werden und sogar, dass die regelmäßigen 05 von der Vitronic kommen, aber sie wird nicht in den 300er Mode gesetzt und beantwortet keine Anfragen.

Ich habe ja oben schon auf meinen Optolink Adapter verwiesen, den hab ich natürlich unverändert verwendet. Problem ist aber, dass diese Schaltung für 5V Versorgungsspannung ausgelegt ist, die RaspPi sind da tolerant, ob die Pegel an den IO Pins genau bei 3V3 oder höher liegen, beim ESP32 war ich mir da nicht sicher und daher hatte ich den Optolink mit 3V3 versorgt. Damit geht bei unveränderter Schaltung natürlich ein geringerer Strom durch die Sende-Diode, kurz gesagt, sie leuchtet nicht so hell... Allerdings darf der Strom auch nicht zu groß sein, da dann, wie wir wissen, die Empfangs-Diode in der Vitronic übersteuert. Alte Überlegung, 10 mA durch die Diode sollte ausreichen. Damit und da ich faul bin, einen 560 Ohm Widerstand parallel zum vorhandenen 330 Ohm gelegt, das macht dann ca 200 Ohm und begrenzt den Strom auf unter 10 mA bei 3V3, und siehe da, die Vitronic antwortet.

Dieser Setup läuft jetzt seit einigen Tagen zuverlässig, einziger offener Punkt ist bei einem Restart des ESP muss ich die TCP-Seriell verbindung per Hand neu starten. Da hätten aber die Tasmotos auch eine Scripting Möglichkeit, das zu automatisieren.

So sieht das ganze aus, anstatt einer Kabelverbindungläuft es nun über WiFi. grafik

Zwei mögliche Verbesserungen

  1. Der ESP ist sooo klein, und hier ist ja schon ein 3D-gedruckter ESP Adapter präsentiert worden, die gesamte Schaltung in ein kleines Gehäuse, dass dann am Optolink-V hängt.. sollte für meine Therme gehen. Wenn ich mutig bin, suche ich mir sogar die Stromversorgung in der Therme, 5V müssten für die Viessmann Erweiterungskarten, LoRa usw, verfügbar sein. Da WiFi ist es bereits galvanisch entkoppelt, man muss nur vorsichtig sein und die entsprechenden Vorschriften zur Isolierung beachten, der ESP32 braucht nicht viel, aber pulst bekanntermaßen, wenn WLAN zuschaltet. Das hätte dann den Charme, kurz Adapter aufklippen und in die Heizung schauen, kein Kabelwirrwarr.

  2. den ganzen vcontrold in den ESP32, also in Tasmota integrieren, könnte gehen, da Tasmota für den ESP32 ein kleines Filesystem mitbringt und speichermäßig reichen sollte, allerdings ist das Tasmota System in C++ geschrieben und event-gesteuert, das würde also substantielles Umschreiben des vcontrold bedeuten, das ist was für lange Winterabende.

Links

Tasmota Serial-to-TCP-Bridge Im Umfeld gibt es die weitere Dokumentation zu Tasmota

Expressif ESP32 -> ESP32 Series Erhältlich bei den üblichen Anbietern unter ESP32 NodeMCU

Clone this wiki locally