Die MQTT-Schnittstelle ermöglicht die Steuerung des PySignalduino-Gateways und den Empfang von dekodierten Nachrichten. Alle Befehle und Antworten verwenden das JSON-Format.
Der Standard-Topic für alle MQTT-Operationen ist signalduino/v1.
Dieser Wert kann über die Umgebungsvariable MQTT_TOPIC oder den CLI-Parameter --mqtt-topic angepasst werden. Wenn nur der Basis-Topic (z.B. foo) gesetzt wird, ist der finale Topic immer versionsspezifisch: foo/v1.
Alle nachfolgenden Beispiele verwenden signalduino/v1 als Basis.
| Zweck | Topic-Format | Anmerkungen |
|---|---|---|
Befehl senden (Request) |
|
Senden Sie hier die JSON-Payload, um einen Befehl auszuführen. |
Befehlsantwort (Success) |
|
Erfolgreiche Antworten von |
Befehlsfehler (Error) |
|
Fehler (z.B. Validierung oder Timeout). |
Empfangene Nachrichten |
|
Dekodierte Funknachrichten. |
Alle Requests verwenden das folgende JSON-Format. Für einfache Befehle (meiste GETs) kann die Payload einfach {} sein.
| Feld | Beschreibung |
|---|---|
|
(Optional) Eine Korrelations-ID ( |
|
(Nur für einfache SET-Befehle) Der Wert, der gesetzt werden soll. Typ variiert (Zahl, String). |
|
(Nur für komplexe Befehle) Ein Objekt für Befehle mit mehreren Argumenten (z.B. |
Eine erfolgreiche Response auf signalduino/v1/responses hat folgende Struktur:
{
"command": "der/ausgeführte/befehl",
"success": true,
"req_id": "F001",
"payload": {
// Die tatsächlichen Daten, z.B. Frequenz-Wert, Versionsstring, etc.
}
}Das Skript tools/sd_mqtt_cli.py dient als einfaches Python-Kommandozeilen-Tool, um Befehle an das PySignalduino MQTT-Gateway zu senden und die Antworten zu empfangen.
Das Tool benötigt die paho-mqtt Abhängigkeit, die in der requirements-dev.txt enthalten ist.
pip install paho-mqtt
python3 tools/sd_mqtt_cli.py --help| Kommando | Beschreibung | Beispiel |
|---|---|---|
|
Führt einen Factory Reset durch ( |
|
|
Fragt alle wichtigen CC1101-Einstellungen in einer aggregierten Nachricht ab. |
|
|
Fragt einen spezifischen CC1101-Parameter ab. Parameter: |
|
|
NEU: Fragt einen spezifischen System-Parameter ab. Parameter: |
|
|
NEU: Fragt nacheinander alle verfügbaren System- und CC1101-Parameter ab. Nützlich zur Diagnose des aktuellen Gerätezustands. |
|
GET-Befehle benötigen eine leere Payload ({}) oder nur eine req_id.
| Befehlspfad | Antwort-Payload (Beispiel payload) |
Beschreibung |
|---|---|---|
|
|
Firmware-Version. |
|
|
Verfügbarer RAM-Speicher ( |
|
|
System-Laufzeit ( |
|
|
Aktuelle Decoder-Konfiguration (aktivierte Protokollfamilien) als geparstes Dictionary. |
|
|
CC1101 Konfigurationsregister-Dump als gekapselter String. |
|
|
CC1101 PA-Tabelle. |
|
|
Liest den Wert eines einzelnen CC1101-Registers. Erfordert den Registernamen im |
|
|
Aktuelle RF-Frequenz in MHz. |
|
|
Aktuelle IF-Bandbreite in kHz. |
|
|
Aktuelle Empfängerverstärkung (LNA Gain) in dB. Mögliche Werte: |
|
|
Aktuelle Empfindlichkeit in dB. Mögliche Werte: |
|
|
Aktuelle Datenrate in kBaud. |
|
|
Aggregierte Abfrage aller CC1101-Haupteinstellungen. |
SET-Befehle, die einen Wert setzen, verwenden das value-Feld. Befehle, die nur eine Aktion auslösen, benötigen eine leere Payload. Nach allen CC1101-SET-Befehlen wird automatisch eine Re-Initialisierung des Chips durchgeführt.
Diese Befehle benötigen nur eine leere Payload ({}) oder eine req_id.
| Befehlspfad | Beschreibung | Beispiel mosquitto_pub |
|---|---|---|
|
Setzt EEPROM-Defaults zurück und startet das Gerät neu. |
|
|
Aktiviert den "Synced Message (MS)" Decoder ( |
|
|
Deaktiviert den "Synced Message (MS)" Decoder ( |
|
|
Aktiviert den "Unsynced Message (MU)" Decoder ( |
|
|
Deaktiviert den "Unsynced Message (MU)" Decoder ( |
|
|
Aktiviert den "Manchester Coded Message (MC)" Decoder ( |
|
|
Deaktiviert den "Manchester Coded Message (MC)" Decoder ( |
|
Diese Befehle benötigen das Feld value im Payload, das gegen ein definiertes JSON-Schema validiert wird.
| Befehlspfad | Wert (value) |
Erlaubte Werte | Beispiel mosquitto_pub |
|---|---|---|---|
|
RF-Frequenz in MHz ( |
|
|
|
Empfängerverstärkung in dB ( |
|
|
|
Empfindlichkeit in dB ( |
|
|
|
PA-Power-Level ( |
|
|
|
IF-Bandbreite in kHz ( |
Bestimmte Enum-Werte (z.B. |
|
|
Datenrate in kBaud ( |
|
|
|
Frequenzabweichung in kHz ( |
|
|
Komplexe Befehle verwenden das parameters-Feld im Payload.
Dieser Befehl sendet eine vorab encodierte Nachricht an das Signalduino-Gerät, die direkt an die Firmware übergeben wird.
{
"req_id": "SEND007",
"parameters": {
"protocol_id": 1,
"data": "AABBCC",
"repeats": 3,
"clock_us": 350,
"frequency_mhz": 433.92
}
}| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
|
|
Ja |
Die ID des zu verwendenden Protokolls (z.B. |
|
|
Ja |
Die zu sendenden Daten als Hex- oder Binär-String. |
|
|
Nein (Standard: 1) |
Die Anzahl der Wiederholungen ( |
|
|
Nein |
Optionale Taktfrequenz in Mikrosekunden ( |
|
|
Nein |
Optionale Frequenz in MHz ( |
PySignalduino lässt sich nahtlos in FHEM integrieren, indem ein MQTT-Broker als Vermittler genutzt wird. Die empfohlene Methode ist die Verwendung des FHEM-Moduls MQTT2_CLIENT zur Verbindung mit dem Broker und MQTT2_DEVICE zur Repräsentation des Signalduino.
Eine vollständige Beispielkonfiguration finden Sie in der Datei .devcontainer/fhem-data/fhem_signalduino_example.cfg. Im DevContainer wird diese Datei automatisch als FHEM-Konfiguration geladen, sodass PySignalDuino sofort verfügbar ist.
# 1. Verbindung zum Broker herstellen (falls noch nicht vorhanden)
define mqtt_broker MQTT2_CLIENT mqtt:1883
attr mqtt_broker autocreate simple
# 2. PySignalduino Device definieren
define PySignalDuino MQTT2_DEVICE
attr PySignalDuino IODev mqtt_broker
# 3. Readings für empfangene Nachrichten extrahieren
# Wandelt JSON-Payload automatisch in Readings um
attr PySignalDuino readingList signalduino/v1/state/messages:.* { json2nameValue($EVENT, '', $JSONMAP) }
# 4. Senden von Befehlen ermöglichen
attr PySignalDuino setList raw:textField signalduino/v1/commands/set/raw $EVTPART1 \
cc1101_reg:textField signalduino/v1/commands/set/cc1101_reg $EVTPART1 \
version:noArg signalduino/v1/commands/get/system/version-
Topics: Stellen Sie sicher, dass das
readingListAttribut dem in PySignalduino konfiguriertenMQTT_TOPICentspricht (Standard:signalduino/v1/state/messages). -
JSON Parsing: Die Funktion
json2nameValuein FHEM ist ideal, um die flachen JSON-Objekte von PySignalduino direkt in FHEM Readings umzuwandeln.