Update
Ich habe dem Steuerungscode auf Rust portiert und damit die Stabilität nochmals deutlich verbessert.
Wenn Interesse besteht, kann ich den Code gerne zur Verfügung stellen.
Anfragen über den Matrix Raum:
Worum geht es in diesem Artikel?
Elero ist eine Hersteller von Antriebstechnik. Die Produkte können unter anderen über ein vermaschtes 868MHz Funknetz bedient werden. Elero bietet eine cloud-basierte SmartHome Lösung für die Steuerung ihrer Geräte über das Internet bzw eine App an. Die Produkte von Elero werden auch in Lösungen einiger Hersteller von Sonnenschutz und Rollläden genutzt. In meinem Fall ist das der Hersteller Schlotterer. Als Fernsteuerung kommt in meinem Fall die VarioTel-2 von Elero zum Einsatz. In diesem Artikel werden wir eine Funkfernbedienung auf Basis eines NodeMCU und eines CC1101-basierensen Transceivers bauen. Diese Funkfernbedienung programmieren und als MQTT Endpunkt in OpenHAB einbinden.
Voraussetzung
- OpenHAB (oder HomeAssistant) Installation mit MQTT Integration (MQTT Messagebroker)
NodeMCU
Unter der Bezeichnung NodeMCU sind eine Reihe von ESP8266-basierenden SoC-Module zu finden, die sich durch ihren geringen Preis (bei größeren Stückzahlen um unter €5) und vergleichsweise gute Funktionalität (WLAN und diverse Schnittstellen) für diese Aufgabe anbieten. Für unsere Anwendung verbinden wir das NodeMCU-Modul über den SPI-Bus mit dem CC1101-Transceiver. Es ist zu empfehlen ein NodeMCU Modul mit 2 oder mehr MByte Flash-Speicher zu verwenden.
Die beiden Module werden über folgende Pins zusammengeschalten:
NodeMCU <=> CC1101
D1 <=> GDO0
D2 <=> GDO2
D5 <=> SCLK
D6 <=> MISO
D7 <=> MOSI
D8 <=> CS
Als Antenne kann ein 82mm langes Stück Draht verwendet werden.
Installation MicroPython
MicroPython ist ein Betriebssystem zur Ausführung von Python Code auf einer Vielzahl von SoC-Systemen.
Voraussetzung
- Software für die Shell über die serielle Schnitstelle (picocom unter Linux oder Putty unter Windows)
- ESPtool zum Upload der Firmware:
pip install esptool - Ampy für den Upload der Software:
pip install adafruit-ampy - mpy-cross Crosscompiler:
pip install mpy-cross
Ablauf
- Download von MicroPython: Download (Bei geringerem Flash-Speicher sind andere Images zu wählen)
- Anpassung der Konfiguration (config.py) (siehe Kapitel unten)
- Flash am NodeMCU Modul löschen:
esptool.py --port /dev/ttyUSB0 erase_flash - Upload auf das Modul mit ESPtool:
esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect -fm dout 0 <MicroPython-Image> - Download der Eleropy Software von Codeberg
- Kompelierung der Datei eleroProtocol.py in Bytecode: `mpy-cross eleroProtocol.py'
- Upload jeder einzelnen Datei mit AMPY:
ampy --port /dev/ttyUSB0 put <Dateiname>Hinweis: eleroProtocol.mpy statt eleroProtocol.py - Restart des NodeMCU Moduls
- Über picocom kann die Ausgabe beobachtet werden
Hinweis: AMPY und Picocom verwenden die selbe Schnittstelle. D.h. für den Upload muss Picocom beendet werden (Strg-A & Strg-X).
Konfiguration
Die Konfiguration der Applikation erfolgt in der Datei config.py. Die meisten Parameter sind selbsterklärend.
wifi_ifconfig … Wenn None eingetragen wird, so wird DHCP für die IP-Konfiguration genutzt.
Sender und Empfänger Codes ermitteln
Für die Konfiguration der Sender (Funkfernbedienungen) und Empfänger (Rollläden) müssen die Rollläden mit den Fernbedienungen steuerbar sein. Das System wird nach der Konfiguration wie eine der Fernbedienungen verhalten.
Um die richtigen Adressen der Sender und Empfänger herausfinden zu können muss man die restliche Konfiguration in config.py abgeschlossen haben und entdprechend dem Punkt “Ablauf” auf das NodeMCU Modul gespielt haben und restartet haben.
Nun verbindet man sich mit dem Modul (picocom) und sieht sich die Ausgaben an (falls keine Ausgaben angezeigt werden, so empfiehlt sich ein Reset des Moduls (Reset Taste oder machine.soft_reset()).
Beim Drücken einer Sendetaste auf der Fernbedienung werden ein oder mehrere Meldungen angezeigt. Hier ein Beispiel:
len= 29, cnt= 234, typ=6A, chl=50,src=[2D9401],bwd=[2D9401],fwd=[2D9401] - des=1::[034B1D],rssi=-53.0,lqi=46,crc=1, pay=00:00:40:00:00:00:00:40:
Wichtig ist, eine Medlung zu nehmen, bei der src, bwd und fwd identisch ist (das sind Meldungen direkt von der Fernbedienung und nicht weitergeleitete Meldungen).
Nun ist der Wert in src die ID der Fernbedienung (remote) und der Wert in der eckigen Klammer von des der Empfänger (blind). Es kann auch sein, dass in einem Kanal mehrere Empfänger programiert sind, dann sind alle in des gelistet.
Fragen & Kommentare
Sollte es Kommentare zu diesem Artikel geben, dann unten die Kommentar-Funktion verwenden.
Bei Fragen stehe ich gerne in folgen Matrix-Raum für euch zur Verfügung: