115 lines
4.5 KiB
Markdown
115 lines
4.5 KiB
Markdown
# Shelly Modul
|
|
|
|
> Status: Implementiert. Der Parser verarbeitet Shelly-NG-Komponenten der
|
|
> Generationen 2, 3 und 4 generisch und unabhängig vom Gerätenamen.
|
|
|
|
Das Modul verarbeitet Shelly-RPC- und Statusmeldungen über das native
|
|
IP-Symcon-MQTT-Datenflussinterface. Es gehört zu Enelix Utils und besitzt
|
|
keine Abhängigkeit zum Enelix EMS.
|
|
|
|
## Ziel und Abgrenzung
|
|
|
|
- freie MQTT-Client-ID und freie ein- oder mehrstufige Topic-Präfixe
|
|
- automatische Erkennung aller gemeldeten Komponenten und skalaren Werte
|
|
- vollständige Speicherung von Listen als JSON-String
|
|
- konfigurierbare Erzeugung nach Datenpunktgruppen
|
|
- weiterhin schaltbare `Switch.Set`-Ausgänge
|
|
- keine Verwaltung von Broker- oder Shelly-Zugangsdaten
|
|
- keine Shelly-Gen1-`shellies/...`-Topics
|
|
|
|
Die generische Verarbeitung ist absichtlich nicht an eine statische Liste von
|
|
Gerätemodellen gekoppelt. Neue Komponenten landen in der Gruppe `Other` und
|
|
können damit ohne Moduländerung eingelesen werden.
|
|
|
|
## MQTT-Datenfluss
|
|
|
|
| Richtung | Topic | Inhalt |
|
|
| --- | --- | --- |
|
|
| Shelly nach Symcon | `<Prefix>/online` | Online-Status |
|
|
| Shelly nach Symcon | `<Prefix>/events/rpc` | `NotifyStatus` oder `NotifyEvent` |
|
|
| Shelly nach Symcon | `<Prefix>/status/<Komponente>` | Komponentenstatus |
|
|
| Shelly nach Symcon | `<Prefix>/status` | Gerätestatus |
|
|
| Shelly nach Symcon | `<Prefix>/announce` | Geräteinformationen |
|
|
| Symcon nach Shelly | `<Prefix>/rpc` | RPC-Aufruf `Switch.Set` |
|
|
|
|
Der Gerätepräfix wird vom bekannten Topic-Ende her bestimmt. Dadurch sind
|
|
`symcon/events/rpc` und `gebaeude/etage/aktor/events/rpc` gleichermassen
|
|
gültig. Die MQTT-Client-ID ist nicht Bestandteil der Erkennungslogik.
|
|
|
|
## Properties
|
|
|
|
| Ident | Standard | Beschreibung |
|
|
| --- | --- | --- |
|
|
| `UseDeviceTopicFilter` | `false` | Aktiviert den optionalen Präfixfilter. |
|
|
| `DeviceTopicPrefix` | `shelly` | Filterwert; ohne aktivierten Filter wirkungslos. |
|
|
| `CreateOnline` | `true` | Online-Status. |
|
|
| `CreateDeviceInfo` | `true` | Modell- und Geräteinformationen. |
|
|
| `CreateInputs` | `true` | Inputs und Eingangsereignisse. |
|
|
| `CreateSwitches` | `true` | Schaltausgänge und Schalterstatus. |
|
|
| `CreateCovers` | `true` | Cover- und Beschattungswerte. |
|
|
| `CreateLights` | `true` | Licht-, Dimm- und Farbwerte. |
|
|
| `CreatePower` | `true` | Wirk- und Scheinleistung. |
|
|
| `CreateVoltage` | `true` | Spannungswerte. |
|
|
| `CreateCurrent` | `true` | Stromwerte. |
|
|
| `CreateEnergy` | `true` | Bezogene und zurückgelieferte Energie. |
|
|
| `CreateFrequency` | `true` | Netzfrequenz. |
|
|
| `CreatePowerFactor` | `true` | Leistungsfaktor. |
|
|
| `CreateMeterDetails` | `true` | Weitere Zählerdaten. |
|
|
| `CreateTemperature` | `true` | Temperaturwerte. |
|
|
| `CreateHumidity` | `true` | Feuchtewerte. |
|
|
| `CreateIlluminance` | `true` | Helligkeit und Beleuchtungsstärke. |
|
|
| `CreateBattery` | `true` | Batterie- und Versorgungswerte. |
|
|
| `CreateEnvironment` | `true` | Weitere Umweltsensoren. |
|
|
| `CreateSystem` | `false` | System- und Netzwerkstatus. |
|
|
| `CreateOther` | `false` | Unbekannte und zukünftige Komponenten. |
|
|
| `Debug` | `false` | Diagnoseausgaben der Instanz. |
|
|
|
|
Ein deaktivierter Bereich wird weder neu angelegt noch aktualisiert. Eine
|
|
automatische Löschung bestehender Objekte findet nicht statt.
|
|
|
|
## Typabbildung
|
|
|
|
| Shelly-Wert | IP-Symcon-Typ |
|
|
| --- | --- |
|
|
| Boolean | Boolean |
|
|
| bekannte IDs, Revisionen und Zeitangaben | Integer |
|
|
| übrige numerische Messwerte | Float |
|
|
| String | String |
|
|
| Liste | JSON-String |
|
|
| `null` | wird ignoriert |
|
|
|
|
Verschachtelte Objekte werden rekursiv in stabile Pfade wie
|
|
`switch:0.aenergy.total` zerlegt. Technische Idents enthalten einen kurzen
|
|
Hash, damit Sonderzeichen, lange Pfade und ähnlich benannte Punkte nicht
|
|
kollidieren.
|
|
|
|
## Öffentliche Funktion
|
|
|
|
```php
|
|
SHELLY_SetOutput(
|
|
int $InstanzID,
|
|
string $DeviceTopic,
|
|
int $Output,
|
|
bool $Value
|
|
): void;
|
|
```
|
|
|
|
Die Funktion validiert das Topic und den Ausgangsindex. Ein fehlendes oder
|
|
inaktives MQTT-Gateway erzeugt eine verständliche Exception.
|
|
|
|
## Kompatibilität
|
|
|
|
Die bestehenden Variablen für Online, Typ, Inputs, Switch-Ausgänge und die
|
|
Switch-Temperatur behalten ihre bisherigen Idents. Der frühere Präfixwert
|
|
`shelly` wirkt nach dem Update nur noch, wenn der neue Filter explizit
|
|
aktiviert wird.
|
|
|
|
## Prüfung
|
|
|
|
- Parser-Tests für freie und mehrstufige Topics
|
|
- Tests für unbekannte Modelle und generische Komponenten
|
|
- Tests für Gruppenklassifikation, Ereignisse und Typabbildung
|
|
- PHP-Syntaxprüfung und JSON-Prüfung
|
|
- Praxistest in IP-Symcon 8.0 mit projektseitigen Gen2-, Gen3- und
|
|
Gen4-Geräten bleibt nach dem Merge erforderlich
|