Ich möchte hier ein kleines Bastelprojekt vorstellen, zu dem mich der TWS animiert hat.
In unserem Haus steht ein Frischwasserspeicher mit einem Cosmo Uno Solarregler, der als einzige Kommunikationsschnittstelle einen sogenannten VBus hat. In meinem Fall sind in diesem System 2 Temperatursensoren (Kollektor und Speicher) und eine Pumpe mit PWM Ansteuerung verbaut. Um die Anlage überwachen zu können habe ich einige Zeit recherchiert, bis ich endlich auf folgende Dokumentation des VBus gestoßen bin:
https://danielwippermann.github.io/reso ... cification
Auf dieser Seite ist das "physical layer" und das "protocol" des VBus dokumentiert und sogar "example schematics" für VBus Geräte sind hier zu finden.
Ein kleiner Test mit Multimeter, Oszilloskop und Saleae Logic bestätigte, dass es sich tatsächlich um die passende Dokumentation handeln musste. Offensichtlich steckt hinter meinem Cosmo Uno tatsächlich ein Resol Gerät. Der Logic Analyzer zeichnete fleißig Telegramme auf, die immer wieder dieses Schema zeigten:
Die Rohdaten sahen so aus:
Code: Alles auswählen
AA 10 00 40 78 10 00 01 13 13 14 51 56 23 04 1D 64 00 75 00 04 22 38 22 38 22 05 46 30 09 00 00 01 45 00 00 00 00 00 7F 00 00 00 00 00 7F_00 00 00 00 00 7F 65 00 00 00 00 1A 24 1E 00 00 01 3C 24 1E 00 00 01 3C 00 00 00 00 00 7F 00 00 00 00 00 7F 00 00 00 00 00 7F_00 00 00 00 00 7F 00 00 00 00 00 7F 00 00 00 00 00 7F 00 00 00 00 00 7F 00 00 00 00 00 7F 00 00 00 00 00 7F
AA 15 00 40 78 10 00 01 0B 16 03 01 00 00 00 7B 64 00 75 00 04 22 38 22 38 22 05 46 00 00 71 58 0C 2A 01 08 00 00 00 76 00 00 00 00 00 7F_02 0A 00 00 00 73 64 00 75 00 04 22 00 00 00 00 00 7F 01 0B 00 00 00 73 00 00 00 00 00 7F
AA 00 00 40 78 20 00 05 00 00 00 00 00 00 00 22
Footprints aussuchen und Platine routen sah am Ende so aus:
Erklärung: Zu diesem Zeitpunkt hatte ich ein ESP8266 und ein ESP32 NodeMCU board auf meinem Tisch liegen und mir war noch nicht klar woran ich den VBus anschließen wollte. Ich hatte aber eine deadline (ein Familienurlaub) vor dem ich die Platine bestellen wollte und darum habe ich das "Lochraster-Prinzip" gewählt: Die 4 Pins von J2 (GND, 3,3V, TX, RX) sind nirgendwo hin verbunden. Die 3 Lochreihen können zB NodeMCU Platinen verschiedener Breite/Bauart aufnehmen. Mit ein bisschen Fädeldraht können dann die Pins von J2 auf die passenden Beinchen der aufgesteckten NodeMCU verbunden werden. Wie das bei mir aussieht kann man weiter unten in den Bildern sehen.
Die Suche nach Bauteilen war etwas nervig und am Ende habe ich den für mich bequemsten Weg gewählt und alle SMD Bauteile direkt von JLC-PCB bestücken lassen. Der Preisunterschied von unter 3$ für 5 nackte Platinen zu mehr als 39$ (38,23€ Endpreis) für 5 SMD-bestückte Platinen ist zwar heftig, aber im Vergleich zu Bestellung von Mindermengen an Bauteilen, die ich von insgesamt 2 Shops bestellen und selbst auflöten hätte müssen...
Die durch die Bestückung etwas erhöhlte Produktionsdauer war auch ein Grund, warum ich die Bestellung unbedingt vor dem Urlaub abschicken wollte, damit die Wartezeit durch den Urlaub "verkürzt" werden konnte. Also abwarten und die Zeit sinnvoll nutzen für die Software.
Software: Die Controller Wahl fiel auf die NodeMCUs, weil es dafür Tasmota gibt und ich in der Tasmota Dokumentation den Resol VBus gefunden hatte:
https://tasmota.github.io/docs/Smart-Me ... -plus-vbus
Entsprechend der Tasmota Dokumentation konnte leider keine fertig compilierte Tasmota Version verwendet werden, weil in diesen Versionen SMI nicht aktiv ist. Also habe ich Tasmota-12.4.0.zip heruntergeladen und aus der user_config_override_sample.h folgende user_config_override.h erstellt und Tasmota damit compiliert. (Es ich dieses Projekt gemacht habe war 12.4.0 die aktuellste Version. Inzwischen gibt es neuere Versionen.)
Ein paar Wochen nach der Bestellung kam die ersehnte Lieferung und nach ein wenig Löterei konnte eine bereits mit Tasmota vorbereitete ESP8266 NodeMCU aufgesteckt werden.
Jetzt musste noch das SMI-Script angepasst werden. Mit Hilfe der Dokumentationen des Resol VBus und des Tasmota-SMI sowie meines Bus-Mitschnitts habe ich dieses Script erstellt:
Code: Alles auswählen
>D
r="1,AA100040781000011313"
>B
=>sensor53 r
>M 1
+1,3,v,0,9600,Solar
%r%vo4sw@10,T1 Kollektor,°C,temp1,1
%r%vo6sw@10,T2 Speicher,°C,temp2,1
%r%vo8sw@10,T3 Speicher,°C,temp3,1
%r%vo10sw@10,T4 Speicher,°C,temp4,1
%r%vo20ub@1,P1 PWM,%%,pump1PWM,0
%r%vo21ub@1,P2 PWM,%%,pump2PWM,0
%r%vo28uw@100,SW version,,SWversion,2
%r%vo32uw@1,Operating hours P1 low,h,OpHoursP1lo,0
%r%vo34uw@1,Operating hours P1 high,h,OpHoursP1hi,65536
%r%vo36uw@1,Operating hours P2 low,h,OpHoursP2lo,0
%r%vo38uw@1,Operating hours P2 high,h,OpHoursP2hi,65536
%r%vo64ub@b0:1,Store Cooling,,StoreCool,0
%r%vo65ub@b0:1,System Cooling,,SystemCool,0
%r%vo67ub@b1,Antifreeze,,Antifreeze,0
%r%vo68ub@b0:1,Collector Cooling,,CollectCool,0
%r%vo69ub@b0:1,Max Store Temp,,MaxStoreTemp,0
%r%vo72uw@1,Error Mask 1,,ErrorMask1,0
%r%vo74uw@1,Error Mask 2,,ErrorMask2,65536
#
Jetzt noch den MQTT Broker in Tasmota eintragen, um die Daten an den TWS zu übertragen und dort in einer Zeitserie abspeichern.
Auf den Platinen ist übrigens nur der RX Pfad bestückt, weil ich keinen Bedarf habe den Solarregler zu beeinflussen. Und ich bin mir auch nicht sicher, ob das ebenfalls mit dem Tasmota SMI möglich wäre.
(Apropos JLC-PCB: Die Mindeststückzahl von 5 Platinen ist etwas unpraktisch, wenn man nur einen Solarregler hat. Zum Zeitpunkt der Veröffentlichung dieses Beitrags liegen hier noch 3 überzählige Platinen. Edit: Jetzt sind alle weg. )