Dieses Projekt ist eine moderne Python-Implementierung der SIGNALDuino-Protokolle mit vollständiger asyncio-Unterstützung und integrierter MQTT-Bridge. Es ermöglicht die Kommunikation mit SIGNALDuino-Hardware (über serielle Schnittstelle oder TCP) und veröffentlicht empfangene Signale sowie empfängt Steuerbefehle über MQTT.
PySignalduino ist Teil des RFD-FHEM-Ökosystems, das ursprünglich als Perl-basierte Lösung für die Hausautomationssoftware FHEM begann. Die Entwicklung lässt sich in folgende Meilensteine unterteilen:
- 2010er Jahre: Die RFD-FHEM-Community entwickelte Hardware- und Softwarelösungen für die Funkkommunikation mit 433/868 MHz Geräten.
- SIGNALDuino-Hardware: Ein Arduino-basierter Transceiver mit CC1101 Funkmodul, der als kostengünstige Alternative zu kommerziellen Lösungen entstand.
- Perl-Implementierung: Die ursprüngliche Protokollimplementierung erfolgte in Perl als FHEM-Modul
00_SIGNALduino.pm.
- 2020er Jahre: Mit der wachsenden Popularität von Python und MQTT entstand der Bedarf nach einer moderneren, asynchronen Lösung.
- PySignalduino: Diese Bibliothek portiert die Perl-Protokolle (
SD_Protocols.pm,SD_ProtocolData.pm) in eine native Python-Implementierung. - Asynchrone Architektur: Vollständige
asyncio-Integration für bessere Performance und einfachere Integration in moderne IoT-Systeme.
- Open Source: Das Projekt wird von einer aktiven Community auf GitHub gepflegt und weiterentwickelt.
- Firmware-Entwicklung: Die SIGNALDuino-Firmware wird parallel im Repository RFD-FHEM/SIGNALDuino entwickelt.
- Version 3.5.0: Die aktuelle Firmware-Version bietet erweiterte Funktionen wie WiFi-Unterstützung für ESP32-basierte Boards.
⚠️ EntwicklungsstatusPySignalduino befindet sich noch in aktiver Entwicklung und hat noch kein offizielles Release veröffentlicht. Die API kann sich zwischen Versionen ändern. Entwickler sollten bei der Verwendung Vorsicht walten lassen und auf mögliche Breaking Changes vorbereitet sein.
PySignalduino ist keine direkte Portierung, sondern eine Neuimplementierung mit folgenden Unterschieden:
- Asynchrone Verarbeitung: Statt Threads wird
asyncioverwendet. - MQTT-Integration: Eingebaute MQTT-Bridge für nahtlose Integration in IoT-Ökosysteme.
- Moderne Python-Praktiken: Typisierung, strukturierte Logging, Konfiguration über Umgebungsvariablen.
Die SIGNALDuino-Firmware (Microcontroller-Code) wird in einem separaten Repository entwickelt:
- GitHub Repository: https://github.com/RFD-FHEM/SIGNALDuino
- Aktuelle Version: v3.5.0
- Unterstützte Hardware:
- Arduino Nano mit CC1101
- ESP32-basierte Boards (z.B. ESP32-DevKitC)
- Maple Mini (STM32)
- Build-Anleitungen: Das Repository enthält PlatformIO-Konfigurationen und Arduino-IDE-Projektdateien für einfache Kompilierung.
- Vollständig asynchron – Basierend auf
asynciofür hohe Performance und einfache Integration in asynchrone Anwendungen. - MQTT-Integration – Automatisches Publizieren dekodierter Nachrichten in konfigurierbare Topics und Empfang von Steuerbefehlen (z.B.
version,set,mqtt). - Unterstützte Transporte – Serielle Verbindung (über
pyserial-asyncio) und TCP-Verbindung. - Umfangreiche Protokollbibliothek – Portierung der originalen FHEM‑SIGNALDuino‑Protokolle mit
SDProtocolsundSDProtocolData. - Konfiguration über Umgebungsvariablen – Einfache Einrichtung ohne Codeänderungen.
- Ausführbares Hauptprogramm –
main.pybietet eine sofort einsatzbereite Lösung mit Logging, Signalbehandlung und Timeout‑Steuerung. - Komprimierte Datenübertragung – Effiziente Payload‑Kompression für MQTT‑Nachrichten.
- Python 3.8 oder höher
- pip (Python-Paketmanager)
-
Repository klonen:
git clone https://github.com/.../PySignalduino.git cd PySignalduino -
Abhängigkeiten installieren (empfohlen in einer virtuellen Umgebung):
pip install -e .Dies installiert das Paket im Entwicklermodus inklusive aller Runtime‑Abhängigkeiten:
pyserialpyserial-asyncioaiomqtt(asynchrone MQTT‑Client‑Bibliothek)python-dotenvrequests
-
Für Entwicklung und Tests zusätzlich:
pip install -r requirements-dev.txt
-
Umgebungsvariablen setzen (optional). Erstelle eine
.env‑Datei im Projektverzeichnis:SIGNALDUINO_SERIAL_PORT=/dev/ttyUSB0 MQTT_HOST=localhost LOG_LEVEL=INFO
-
Programm starten:
python3 main.py --serial /dev/ttyUSB0 --mqtt-host localhost
Oder nutze die Umgebungsvariablen:
python3 main.py
-
Ausgabe beobachten. Das Programm verbindet sich mit dem SIGNALDuino, initialisiert die Protokolle und beginnt mit dem Empfang. Dekodierte Nachrichten werden im Log ausgegeben und – sofern MQTT konfiguriert ist – an den Broker gesendet.
| Variable | Beschreibung | Beispiel |
|---|---|---|
SIGNALDUINO_SERIAL_PORT |
Serieller Port (z.B. /dev/ttyUSB0) |
/dev/ttyACM0 |
SIGNALDUINO_BAUD |
Baudrate (Standard: 57600) |
115200 |
SIGNALDUINO_TCP_HOST |
TCP‑Host (alternativ zu Serial) | 192.168.1.10 |
SIGNALDUINO_TCP_PORT |
TCP‑Port (Standard: 23) |
23 |
MQTT_HOST |
MQTT‑Broker‑Host | mqtt.eclipseprojects.io |
MQTT_PORT |
MQTT‑Broker‑Port (Standard: 1883) |
1883 |
MQTT_USERNAME |
Benutzername für MQTT‑Authentifizierung | user |
MQTT_PASSWORD |
Passwort für MQTT‑Authentifizierung | pass |
MQTT_TOPIC |
Basis‑Topic für Publikation/Subscription | signalduino/ |
LOG_LEVEL |
Logging‑Level (DEBUG, INFO, WARNING, ERROR, CRITICAL) | DEBUG |
Alle Umgebungsvariablen können auch als Argumente übergeben werden (sie haben Vorrang). Eine vollständige Liste erhält man mit:
python3 main.py --helpWichtige Optionen:
--serial PORT– Serieller Port--tcp HOST– TCP‑Host--mqtt-host HOST– MQTT‑Broker--mqtt-topic TOPIC– Basis‑Topic--timeout SECONDS– Automatisches Beenden nach N Sekunden--log-level LEVEL– Logging‑Level
{basis_topic}/decoded– JSON‑Nachricht jedes dekodierten Signals.{basis_topic}/raw– Rohdaten (falls aktiviert).{basis_topic}/status– Statusmeldungen (Verbunden/Getrennt/Fehler).
{basis_topic}/cmd/version– Liefert die Firmware‑Version des SIGNALDuino.{basis_topic}/cmd/set– Sendet einenset‑Befehl an den SIGNALDuino.{basis_topic}/cmd/mqtt– Steuert die MQTT‑Integration (z.B. Kompression an/aus).
Die genauen Payload‑Formate und weitere Befehle sind in der Befehlsreferenz dokumentiert.
PySignalduino/
├── signalduino/ # Hauptpaket
│ ├── controller.py # Asynchroner Controller
│ ├── mqtt.py # MQTT‑Publisher/Subscriber
│ ├── transport.py # Serielle/TCP‑Transporte (asyncio)
│ ├── commands.py # Befehlsimplementierung
│ └── ...
├── sd_protocols/ # Protokollbibliothek (SDProtocols)
├── tests/ # Umfangreiche Testsuite
├── docs/ # Dokumentation (AsciiDoc)
├── main.py # Ausführbares Hauptprogramm
├── pyproject.toml # Paketkonfiguration
└── requirements*.txt # Abhängigkeiten
pytestFür Tests mit Coverage‑Bericht:
pytest --cov=signalduino --cov=sd_protocolsBeiträge sind willkommen! Bitte erstelle einen Pull‑Request oder öffne ein Issue im Repository.
- Installationsanleitung
- Benutzerhandbuch
- Asyncio‑Migrationsleitfaden
- Protokollreferenz
- Befehlsreferenz
Die Dokumentation wird automatisch mit einer dynamischen Sitemap (sitemap.xml) und branch‑spezifischen robots.txt‑Dateien versehen, um die Auffindbarkeit in Suchmaschinen zu verbessern.
- Sitemap‑Generierung: Das Skript
tools/generate_sitemap.pyscannt den Build‑Output, weist Prioritäten und Update‑Frequenzen zu und generiert eine valide XML‑Sitemap gemäß sitemaps.org. - Branch‑spezifische URLs: Für die Branches
main,previewunddevelopwerden unterschiedliche Base‑URLs verwendet. - Integration in CI/CD: Der GitHub Actions Workflow
.github/workflows/docs.ymlgeneriert die Sitemap automatisch nach jedem Build und passt dierobots.txtentsprechend an.
Weitere Details zur Architektur finden Sie im Architektur‑Dokument.
Dieses Projekt steht unter der MIT‑Lizenz – siehe LICENSE für Details.
Basierend auf der originalen FHEM‑SIGNALDuino‑Implementierung von @Sidey79 und der Community.