Datenaustausch
Leichtgewichtiges Modul zum Teilen von Variablen und Medien zwischen zwei (oder mehr) Symcon Systemen über MQTT.
1. Funktionsumfang
Der Datenaustausch-Konfigurator verbindet zwei oder mehr Symcon Instanzen über einen gemeinsamen MQTT Broker, indem ausgewählte Variablen und Medienobjekte auf Topics gemappt werden. Pro Eintrag bestimmt die Richtung (publish, subscribe, publish+subscribe) ob der Wert gesendet, empfangen oder bidirektional synchronisiert wird. Ein integrierter Ping-Pong-Schutz verhindert dabei Rückkopplungsschleifen bei bidirektionalen Einträgen.
Konzept
System A MQTT Broker System B
───────── ─────────── ────────
Variable "Temperatur" → symcon/share/temp/aussen → Lokale Variable "Temp_A"
Variable "Licht EG" ↔ symcon/share/licht/eg ↔ Lokale Variable "Licht_B"
Auf System A werden Variablen als Shared Variables eingetragen → das Modul published deren Werte auf MQTT.
Auf System B werden dieselben Topics als Mapped Variables auf lokale Variablen gemappt → eingehende MQTT-Nachrichten setzen die lokalen Variablen.
RequestAction vs SetValue
Das Modul entscheidet automatisch:
| Bedingung | Methode |
|---|---|
Variable hat VariableAction | RequestAction() – korrekte Ausführung der verknüpften Aktion (z.B. Lampe dimmen) |
| Keine Aktion verknüpft | SetValue() – direktes Schreiben |
Warum nicht immer RequestAction?RequestAction erfordert eine verknüpfte Instanz. Auf reinen “Datenvariablen” (z.B. berechnete Werte) gibt es keine Aktion → SetValue ist korrekt.
Hinweise
- Die übergeordnete MQTT Client-Instanz muss die geteilten Topics abonniert haben (Standard
#, alternativ mindestens<Präfix>#, z. B.symcon/share/#). Das Modul selbst abonniert keine Topics. - Ist der MQTT Client nicht verbunden, zeigt die Instanz den Status Nicht verbunden. Nach dem Wiederverbinden werden alle Objekte erneut publiziert (sofern Alle Objekte beim Start publizieren? aktiv ist).
- Alle Topics nutzen
Retain = true→ der Empfänger bekommt den letzten Wert sofort nach Connect - Das Modul registriert Variablen dynamisch im
MessageSink– kein Kernel-Neustart nötig nach Konfigurationsänderung - Es erfolgt keine Prüfung der Objektkompatibilität, d.h. kein Test ob die zu synchronisierenden Variablen vom gleichen Typ sind!
- Medieninhalte werden Base64-kodiert übertragen (ab v2.0, nicht kompatibel zu älteren Versionen – alle beteiligten Systeme gleichzeitig aktualisieren!)
- Ping-Pong-Schutz: Wird ein Objekt über MQTT geschrieben, wird genau die eine Aktualisierung mit diesem Wert nicht erneut publiziert; lokale Änderungen auf einen anderen Wert werden immer sofort gesendet. Das eigene Echo des Brokers wird einmalig verworfen.
2. Voraussetzungen
- Symcon ab Version 8.1
- Getestet mit verschiedenen Variablen und Bildern < 100kb
3. Installation
- Über den Modul Store das Modul Datenaustausch Konfigurator installieren.
- Alternativ über das Modul Control folgende URL hinzufügen.
https://github.com/Wilkware/ShareDataodergit://github.com/Wilkware/ShareData.git
4. Einrichtung
- Unter ‘Instanz hinzufügen’ ist das Datenaustausch Konfigurator-Modul unter dem Hersteller ‘(Konfigurator)’ aufgeführt.
Konfigurationsseite:
Einstellungsbereich:
🔗 Verbindung …
| Name | Beschreibung |
|---|---|
| Topic-Präfix | Ist das grundlegende Themenpräfix, unter dem alle spezifischen Subtopics für Nachrichten in einem MQTT-System organisiert werden. Standardmäßig ist der Präfix auf ‘symcon/share/’ vorbelegt. |
📊 Variablen …
| Name | Beschreibung |
|---|---|
| Variable | Symcon Variable auswählen |
| MQTT Sub-Topic | Topic ohne Präfix, z.B. temp-aussen |
| Richtung | Publish = nur senden, Subscribe = nur empfangen, Publish + Subscribe = bidirektional |
| Bei Aktualisierung synchronisieren | Auch nur bei Änderung von Metadaten (Timestamp, keine Werteänderung) senden |
🖼️ Medien …
| Name | Beschreibung |
|---|---|
| Medienobjekt | Symcon Medienobjekt auswählen |
| MQTT Sub-Topic | Topic ohne Präfix, z.B. snapshot |
| Richtung | Publish = nur senden, Subscribe = nur empfangen, Publish + Subscribe = bidirektional |
⚙️ Erweiterte Einstellungen …
| Name | Beschreibung |
|---|---|
| Alle Objekte beim Start publizieren? | Option, ob alle konfigurierten Objekte beim Start von Symcon publiziert werden sollen |
Aktionsbereich:
🚀 Aktion ausführen …
| Aktion | Beschreibung |
|---|---|
| ALLE OBJEKTE JETZT PUBLIZIEREN | Löst eine Momentaufnahme(Snapshot) aus. |
5. Statusvariablen
Es werden keine Statusvariablen angelegt.
6. Darstellungen
Es werden keine Darstellungen oder Profile benötigt.
7. Visualisierung
Es ist keine weitere Steuerung oder gesonderte Darstellung integriert.
8. Befehlsreferenz
Das Modul stellt keine direkten Funktionsaufrufe zur Verfügung.
9. Versionshistorie
v2.0.20260929
- NEU: Medien werden jetzt Base64-kodiert übertragen (nicht kompatibel zu v1.x – alle Systeme gleichzeitig aktualisieren!)
- NEU: Instanz-Status zeigt die Verbindung zum MQTT Client, nach dem Wiederverbinden wird automatisch neu publiziert
- NEU: Warnung bei leeren oder doppelten Topics
- NEU: Neue Einträge starten mit Richtung Publish, Medienauswahl zeigt nur Medienobjekte
- FIX: Rückkopplungsschleifen bei bidirektionalen Einträgen behoben
- FIX: Option Alle Objekte beim Start publizieren? wird beim Systemstart beachtet
- FIX: Genauigkeit von Float-Werten und Fehlerbehandlung beim Empfang verbessert
- FIX: Diverse Text- und Übersetzungsfehler korrigiert
v1.1.20260817
- NEU: Synchronisierung nach Systemstart verbessert
- NEU: Namespaces für Bibliotheken eingeführt
- FIX: Instanz-Status wird jetzt korrekt gesetzt
v1.0.20260614
- NEU: Initialversion
Entwickler
Seit nunmehr über 10 Jahren fasziniert mich das Thema Haussteuerung. In den letzten Jahren betätige ich mich auch intensiv in der Symcon Community und steuere dort verschiedenste Skript und Module bei. Ihr findet mich dort unter dem Namen @pitti ;-)
Spenden
Die Software ist für die nicht kommerzielle Nutzung kostenlos, über eine Spende bei Gefallen des Moduls würde ich mich freuen.
Lizenz
Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 4.0 International