ShellyPlus2PM frage nach MQTT Thing

Geflasht oder ungeflasht ...

Moderator: seppy

Antworten
Benutzeravatar
PeterA
Beiträge: 1090
Registriert: 8. Feb 2019 12:12
Answers: 13

ShellyPlus2PM frage nach MQTT Thing

Beitrag von PeterA »

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
- OpenHab 2.4
#PWRUP

Benutzeravatar
udo1toni
Beiträge: 15087
Registriert: 11. Apr 2018 18:05
Answers: 239
Wohnort: Darmstadt

Re: ShellyPlus2PM frage nach MQTT Thing

Beitrag von udo1toni »

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.
openHAB4.3.2 stable in einem Debian-Container (bookworm) (Proxmox 8.3.3, LXC), mit openHABian eingerichtet

Harka
Beiträge: 451
Registriert: 30. Apr 2021 13:13
Answers: 17

Re: ShellyPlus2PM frage nach MQTT Thing

Beitrag von Harka »

Zuletzt geändert von Harka am 4. Feb 2025 21:54, insgesamt 2-mal geändert.

Benutzeravatar
udo1toni
Beiträge: 15087
Registriert: 11. Apr 2018 18:05
Answers: 239
Wohnort: Darmstadt

Re: ShellyPlus2PM frage nach MQTT Thing

Beitrag von udo1toni »

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

Harka
Beiträge: 451
Registriert: 30. Apr 2021 13:13
Answers: 17

Re: ShellyPlus2PM frage nach MQTT Thing

Beitrag von Harka »

Zuletzt geändert von Harka am 4. Feb 2025 21:54, insgesamt 2-mal geändert.

Benutzeravatar
PeterA
Beiträge: 1090
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: ShellyPlus2PM frage nach MQTT Thing

Beitrag von PeterA »

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:

Code: Alles auswählen

{"id":0,"brightness":<value>}
Diese Payload musst über formatBeforePublish erzeugt werden, <value> wird dabei durch ein %f ersetzt, also so:

Code: Alles auswählen

formatBeforePublish: '{"id":0,"brightness":%f}'
Weil die Payload selbst doppelte Anführungszeichen enthält, muss der String mit einfachen Anführungszeichen markiert werden.

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:

Code: Alles auswählen

transformationPattern: JSONPATH:$["light:0"].brightness
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.
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)
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.

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" ]
Uuund so ähnlich mit formatBeforePublish hab auch schon mal gearbeitet aber ich hab keine Ahnung wie ich das für den neuen Shelly abändern müsste.

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}"]
LG Peter

Ps.: (Wir sollten dem Udo mal einen Shelly2PM spendieren) :)
- OpenHab 2.4
#PWRUP

Benutzeravatar
udo1toni
Beiträge: 15087
Registriert: 11. Apr 2018 18:05
Answers: 239
Wohnort: Darmstadt

Re: ShellyPlus2PM frage nach MQTT Thing

Beitrag von udo1toni »

PeterA hat geschrieben: 4. Feb 2025 21:11 Wir sollten dem Udo mal einen Shelly2PM spendieren
Bitte nicht! :) die Hardware ist bestimmt super, aber die Firmware ist Grütze.

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

Benutzeravatar
PeterA
Beiträge: 1090
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: ShellyPlus2PM frage nach MQTT Thing

Beitrag von PeterA »

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:

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 } }"]
Was übersehe ich ?
- OpenHab 2.4
#PWRUP

Benutzeravatar
PeterA
Beiträge: 1090
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: ShellyPlus2PM frage nach MQTT Thing

Beitrag von PeterA »

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
- OpenHab 2.4
#PWRUP

Antworten