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.
- 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
Dieses Projekt steht unter der MIT‑Lizenz – siehe LICENSE für Details.
Basierend auf der originalen FHEM‑SIGNALDuino‑Implementierung von @Sidey79 und der Community.