ShellyPlus2PM frage nach MQTT Thing
Moderator: seppy
- PeterA
- Beiträge: 1090
- Registriert: 8. Feb 2019 12:12
ShellyPlus2PM frage nach MQTT Thing
Hallo zusammen,
ja auch ich bin nun dabei die 1st.GEN Shelly 2.5 gegen 2nd.GEN ShellyPlus2PM zu tauschen.
Wer hat denn hier das schon erfolgreich hinter sich gebracht ?
Im speziellen frage ich nach dem Syntax im thing für den "command" an den Shelly um von 0% bis 100% zu fahren.
Ich lese viel mit "format before publish" aber damit hab ich bei den alten Shelly nichts zu tun gehabt.
LG Peter
ja auch ich bin nun dabei die 1st.GEN Shelly 2.5 gegen 2nd.GEN ShellyPlus2PM zu tauschen.
Wer hat denn hier das schon erfolgreich hinter sich gebracht ?
Im speziellen frage ich nach dem Syntax im thing für den "command" an den Shelly um von 0% bis 100% zu fahren.
Ich lese viel mit "format before publish" aber damit hab ich bei den alten Shelly nichts zu tun gehabt.
LG Peter
- OpenHab 2.4
#PWRUP
#PWRUP
- udo1toni
- Beiträge: 15087
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: ShellyPlus2PM frage nach MQTT Thing
Wenn Du den Dimmer mit mqtt steuern willst, musst Du dafür rpc Aufrufe verwenden (rpc -> RemoteProcedureCall). Dafür gibt es das rpc Topic.
Und der Aufruf erfolgt mit einem JSON Objekt. Du musst das JSON Objekt passend vorbereiten, das geschieht mit formatBeforePublish.
Der letzte Thread dazu (meines Wissens) wäre dieser hier viewtopic.php?t=9308 und ich habe mit @runa letztes Wochenende noch etwas weiter an dem Thema gearbeitet, ist halt immer etwas tricky, wenn man die Hardware nicht selbst hat. Die API Dokumentation von Shelly ist zwar an vielen Stellen sehr detailliert, an anderen dann aber auch in sich widersprüchlich und ganz allgemein verschweigen sie auch einige Dinge.
Das A und O: alles, was der Shelly an Informationen raus rückt, kommt über ein Topic. Die Payload ist immer JSON, aber das JSON ist hochgradig dynamisch, es enthält diverse Informationen, aber eben immer nur einen Teil, was es dann auch schwer machen kann, das "richtige" JSON mit der passenden Rückmeldung zu erwischen, um z.B. herauszufinden, ob der Shelly gerade ein- oder ausgeschaltet wurde.
Das bedeutet leider auch, dass man bei jeder stateTransformation ein passendes REGEX voranstellen muss, um zu verhindern, dass der jeweilige Channel auf NULL wechselt, sobald ein anderes JSON vorbei schneit.
Und der Aufruf erfolgt mit einem JSON Objekt. Du musst das JSON Objekt passend vorbereiten, das geschieht mit formatBeforePublish.
Der letzte Thread dazu (meines Wissens) wäre dieser hier viewtopic.php?t=9308 und ich habe mit @runa letztes Wochenende noch etwas weiter an dem Thema gearbeitet, ist halt immer etwas tricky, wenn man die Hardware nicht selbst hat. Die API Dokumentation von Shelly ist zwar an vielen Stellen sehr detailliert, an anderen dann aber auch in sich widersprüchlich und ganz allgemein verschweigen sie auch einige Dinge.
Das A und O: alles, was der Shelly an Informationen raus rückt, kommt über ein Topic. Die Payload ist immer JSON, aber das JSON ist hochgradig dynamisch, es enthält diverse Informationen, aber eben immer nur einen Teil, was es dann auch schwer machen kann, das "richtige" JSON mit der passenden Rückmeldung zu erwischen, um z.B. herauszufinden, ob der Shelly gerade ein- oder ausgeschaltet wurde.
Das bedeutet leider auch, dass man bei jeder stateTransformation ein passendes REGEX voranstellen muss, um zu verhindern, dass der jeweilige Channel auf NULL wechselt, sobald ein anderes JSON vorbei schneit.
openHAB4.3.2 stable in einem Debian-Container (bookworm) (Proxmox 8.3.3, LXC), mit openHABian eingerichtet
-
- Beiträge: 451
- Registriert: 30. Apr 2021 13:13
Re: ShellyPlus2PM frage nach MQTT Thing
…
Zuletzt geändert von Harka am 4. Feb 2025 21:54, insgesamt 2-mal geändert.
- udo1toni
- Beiträge: 15087
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: ShellyPlus2PM frage nach MQTT Thing
Soweit ich durch die API durchgestiegen bin, kann man aber den Dimmer nicht über separate command/status Topics steuern, sondern ausschließlich über rpc.
openHAB4.3.2 stable in einem Debian-Container (bookworm) (Proxmox 8.3.3, LXC), mit openHABian eingerichtet
-
- Beiträge: 451
- Registriert: 30. Apr 2021 13:13
Re: ShellyPlus2PM frage nach MQTT Thing
…
Zuletzt geändert von Harka am 4. Feb 2025 21:54, insgesamt 2-mal geändert.
- PeterA
- Beiträge: 1090
- Registriert: 8. Feb 2019 12:12
Re: ShellyPlus2PM frage nach MQTT Thing
Um dem ShellyPlus2PM im "Rollershutter" Modus die entsprechende Position 0 - 100 zu senden möchte er laut der Doku vermutlich den Payload auf "pos" haben.udo1toni hat geschrieben: ↑30. Dez 2024 18:15
Das heißt, das commandTopic wird so aussehen: <topic_prefix>/command/<component:id>, wobei <topic_prefix> gerätespezifisch ist und <component:id> mutmaßlich light:0 bzw. light:1 heißt. Und dann wird es vermutlich Set als Topic geben, wobei dort dann eine JSON Payload hingeschickt werden muss:Diese Payload musst über formatBeforePublish erzeugt werden, <value> wird dabei durch ein %f ersetzt, also so:Code: Alles auswählen
{"id":0,"brightness":<value>}
Weil die Payload selbst doppelte Anführungszeichen enthält, muss der String mit einfachen Anführungszeichen markiert werden.Code: Alles auswählen
formatBeforePublish: '{"id":0,"brightness":%f}'
In der Gegenrichtung sollte das stateTopic dann so aussehen: <topic_prefix>/status/<component:id>, sinngemäß wie oben.
Das Topic liefert dann ebenfalls ein JSON zurück, also braucht es ein passendes transformationPattern, so:Wobei die API Doku hier ein konkretes Beispiel schuldig bleibt, es wäre also nicht ganz unwichtig, die echte gelieferte Payload mittels MQTT Explorer (oder einem ähnlichen Werkzeug) anzuschauen und den JSONPath notfalls erst mal anzupassen.Code: Alles auswählen
transformationPattern: JSONPATH:$["light:0"].brightness
Da ich selbst keinen solchen Dimmer habe, ist der Pfad halt nur geraten![]()
Der Dimmer hat nur einen Thing Channel (bzw. zwei, weil es ja ein Doppel-Dimmer ist)! Es gibt keinen extra Channel zum Ein- oder Ausschalten, das geschieht durch Helligkeit 0 bzw. 100 (oder eben den gewünschten Helligkeitswert)
Auszug aus der Doku:
https://shelly-api-docs.shelly.cloud/ge ... tt-control
Code: Alles auswählen
Accepted commands are:
status_update - causes the status of the corresponding component to be published on its <topic_prefix>/status/cover:<id> topic.
calibrate - starts calibration procedure.
open[,number] - opens the cover, optional duration parameter.
close[,number] - closes the cover, optional duration parameter.
stop - stops previously initiated movement.
pos,number - cover goes to position, required parameter.
rel,number - cover goes to relative position, required parameter.
Wie würde das denn im alten thing Code von OpenHab aussehen ?
So sieht das aktuell aus:
Code: Alles auswählen
Type rollershutter : Shellyswitch25_745118_roller "Rolladen DG Flur" [ stateTopic="shellies/shellyswitch25-745118/roller/0/pos", commandTopic="shellies/shellyswitch25-745118/roller/0/command/pos" ]
Code: Alles auswählen
Type number : MaxDischargePower "Maximale Inverter Leistung" [ stateTopic="N/c0619ab2dc41/settings/0/Settings/CGwacs/CGwacs/MaxDischargePower", transformationPattern="JSONPATH:$.value", commandTopic="W/c0619ab2dc41/settings/0/Settings/CGwacs/MaxDischargePower", formatBeforePublish="{\"value\": %s}"]
Ps.: (Wir sollten dem Udo mal einen Shelly2PM spendieren)

- OpenHab 2.4
#PWRUP
#PWRUP
- udo1toni
- Beiträge: 15087
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: ShellyPlus2PM frage nach MQTT Thing
Bitte nicht!

Wenn ich richtig liege, sind sowohl der Shelly2PM als auch der Nachfolger Shelly 2.5 auf der Liste Tasmota-kompatibler Hardware.
Das größte "Problem" ist dabei der mit ~ 1,25 mm Rasterabstand eher ungewöhnliche Programmieranschluss - auf der anderen Seite muss man das Gerät nicht mal öffnen, wenn man den Adapter hat.
openHAB4.3.2 stable in einem Debian-Container (bookworm) (Proxmox 8.3.3, LXC), mit openHABian eingerichtet
- PeterA
- Beiträge: 1090
- Registriert: 8. Feb 2019 12:12
Re: ShellyPlus2PM frage nach MQTT Thing
Einen kleinen Schritt bin ich weiter: Den Status bzw. die Position vom Rollladen kommt in OpenHab an.
Aber das commandTopic bzw. die Position kommt nicht beim Shelly an:
Was übersehe ich ?
Aber das commandTopic bzw. die Position kommt nicht beim Shelly an:
Code: Alles auswählen
Type rollershutter : ShellyPlus2PM_c4d8d5517818_roller "Rollladen Test" [ stateTopic="shellyplus2pm-c4d8d5517818/status/cover:0", transformationPattern="JSONPATH:$.current_pos", commandTopic="shellyplus2pm-c4d8d5517818/rpc", formatBeforePublish="{ \"method\": \"Cover.GoToPosition\", \"params\": { \"id\": 0, \"position\": %s } }"]
- OpenHab 2.4
#PWRUP
#PWRUP
- PeterA
- Beiträge: 1090
- Registriert: 8. Feb 2019 12:12
Re: ShellyPlus2PM frage nach MQTT Thing
FYI:
Ein User "schossel" aus der englischen Community hats zum laufen gebracht:
https://community.openhab.org/t/oh3-exa ... s/141143/5
Funktioniert hier auch!
EDIT: Funktioniert auf meinem Testsystem OpenHab 4.X
Auf meinem Produktivsystem (OH2.4) nicht.... war ja klar...
Gruß Peter
Ein User "schossel" aus der englischen Community hats zum laufen gebracht:
https://community.openhab.org/t/oh3-exa ... s/141143/5
Funktioniert hier auch!
EDIT: Funktioniert auf meinem Testsystem OpenHab 4.X
Auf meinem Produktivsystem (OH2.4) nicht.... war ja klar...
Gruß Peter
- OpenHab 2.4
#PWRUP
#PWRUP