Shelly plus 1

Geflasht oder ungeflasht ...

Moderator: seppy

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

Re: Shelly plus 1

Beitrag von udo1toni »

Das TransformationPattern ist verkehrt.

Code: Alles auswählen

 transformationPattern: JSONPATH:$.params.switch:0.temperature.tC
Sprich, da fehlt ein Punkt nach dem Dollar.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

violine21
Beiträge: 589
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Shelly plus 1

Beitrag von violine21 »

udo1toni hat geschrieben: 25. Jan 2022 02:17 Sprich, da fehlt ein Punkt nach dem Dollar.
Danke! Der Routinier weiss, auf was er achten muss ;)
Ich habe den Wald vor lauter Bäumen nicht gesehen.

Mir ist aufgefallen, das der Shelly nach einem Reboot sehr geschwätzig ist.
Da kommen jede Menge an Informationen.
Was mich interessieren würde, wie entlocke ich dem Shelly diese Informationen per MQTT-Kommando aus OH heraus?

Was ich bis jetzt habe:
- laufende Statusmeldung (ca. jede 30 Sekunden)
- Betriebstemperatur
- Betriebsspannung
- Leistung
- WiFi-IP-Adresse
- WiFi-RSSI
- WiFi-Verbindungspartner
- WiFi-Verbindungsstatus

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

Re: Shelly plus 1

Beitrag von udo1toni »

Die API des Shelly ist vom Hersteller dokumentiert (die sind echt vorbildlich...)

https://shelly-api-docs.shelly.cloud/
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

violine21
Beiträge: 589
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Shelly plus 1

Beitrag von violine21 »

udo1toni hat geschrieben: 25. Jan 2022 20:23 Die API des Shelly ist vom Hersteller dokumentiert (die sind echt vorbildlich...)
Danke Udo! Habe das alles gelesen und die wichtigsten Status-Nachrichten in das Thing als Channel übernommen.
Wenn ich den Shelly per http ein- und ausschalte, zeigt mir das das Switch-Item korrekt an.

Was ich nicht verstehe, wie schalte ich per OH3 das Shelly-Relais?
Wie muss dazu der Channel konfiguriert werden?
Der http-Befehl für EIN lautet:

Code: Alles auswählen

http://192.168.33.1/rpc/Switch.Set?id=0&on=true
für AUS:

Code: Alles auswählen

http://192.168.33.1/rpc/Switch.Set?id=0&on=false
Lässt sich das so einfach in MQTT umsetzen?

Der Schaltstatus:

Code: Alles auswählen

UID: mqtt:topic:01144906ea:shellyplus1pm-7c87ce637f30
label: Shelly Plus 1PM
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:01144906ea
location: Test
channels:
  - id: test_switch
    channelTypeUID: mqtt:switch
    label: Schalter
    description: null
    configuration:
      stateTopic: shellyplus1pm-7c87ce637f30/events/rpc
      transformationPattern: JSONPATH:$.params.switch:0.output
      off: "false"
      on: "true"
Edit:
Hier noch das Kommando via MQTT.fx:

Code: Alles auswählen

shellyplus1pm-7c87ce637f30/rpc

{
  "id": 0,
  "src": "shellyplus1pm-7c87ce637f30",
  "method":"Switch.Set", "params":{"id":0,"on":true}
}

{
  "id": 0,
  "src": "shellyplus1pm-7c87ce637f30",
  "method":"Switch.Set", "params":{"id":0,"on":false}
}

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

Re: Shelly plus 1

Beitrag von udo1toni »

Du musst lediglich mqtt im Shelly aktivieren. Anschließend kannst Du die passenden Topics verwenden. Das ist in der Doku etwas schwammig beschrieben :)

Wobei ich gerade bei Gen2 nachgelesen habe... Scheint, als ob die Shelly Entwickler mqtt auf dem Shelly kaputt machen, was eine Grütze...
Es sieht so aus, dass jeweils ein json Objekt gesendet werden muss, in dem dann versteckt in einem der Unterknoten drin steht, ob ON oder OFF (oder Toggle) geschaltet werden soll.

Im englischen Forum gibt es dazu einen Thread https://community.openhab.org/t/shellyp ... qtt/128382. Mir scheint es fast einfacher, das Ding auf Tasmota umzuflashen, wobei ich verstehen kann, wenn Du das vermeiden möchtest.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

violine21
Beiträge: 589
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Shelly plus 1

Beitrag von violine21 »

udo1toni hat geschrieben: 26. Jan 2022 22:36 Du musst lediglich mqtt im Shelly aktivieren.
MQTT ist aktiviert.
udo1toni hat geschrieben: 26. Jan 2022 22:36 Scheint, als ob die Shelly Entwickler mqtt auf dem Shelly kaputt machen, was eine Grütze...
Nicht nur das, das CoAP-basierende Protokoll, mit dem das Shelly-Binding arbeitet, scheint auch nicht mehr dabei zu sein.
Dafür gibt es jetzt eine Möglichkeit, einfache Scripte zu hinterlegen und in der App/Cloud sind einige Dinge dazu gekommen.
Mir scheint, die haben erkannt, womit noch mehr Geld verdient werden kann... ;)
udo1toni hat geschrieben: 26. Jan 2022 22:36 ob ON oder OFF (oder Toggle) geschaltet werden soll
Schalten kann ich über OH3. Der JSON-Code (Command-Topic) für EIN:

Code: Alles auswählen

{
  "id": 0,
  "src": "shellyplus1pm-7c87ce637f30",
  "method":"Switch.Set", "params":{"id":0,"on":true}
}
und für AUS:

Code: Alles auswählen

{
  "id": 0,
  "src": "shellyplus1pm-7c87ce637f30",
  "method":"Switch.Set", "params":{"id":0,"on":false}
}
Der Unterschied liegt nur bei dem Wort true/false. Das bekomme ich aber nicht in ein Switch-Item. Entweder ich kann einschalten oder ausschalten.
Togglen bekomme ich nicht mit einem Switch realisiert :(
Ich weiss nicht, wie das Command-Topic aussehen muss.
Mit zwei Schaltern habe ich es geschafft, aber das ist ja nicht der Sinn der Sache.
Tasmota wäre keine Option.

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

Re: Shelly plus 1

Beitrag von udo1toni »

Das ist nicht weiter schwer, Du musst lediglich die Channel Parameter passend setzen. on="true", off="false", und als outgoingValueFormat halt {"id": 0, "src": "shellyplus1pm-7c87ce637f30", "method":"Switch.Set", "params":{"id":0,"on":%s}}

Wenn Du das Ganze über Textkonfiguration machst, musst Du die Anführungszeichen jeweils escapen. Über die UI sollte openHAB sich selbst darum kümmern. Die Parameter findest Du über Show Advanced.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

violine21
Beiträge: 589
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Shelly plus 1

Beitrag von violine21 »

Danke Udo!
Jetzt habe ich das Prinzip erkannt.
Dasim outgoingValueFormat ist der Platzhalter für die beiden Channel-Parameter
  • Custom On/Open Value --> true
  • Custom Off/Closed Value --> false

Goetterbote
Beiträge: 1
Registriert: 28. Jan 2022 17:03

Re: Shelly plus 1

Beitrag von Goetterbote »

violine21 hat geschrieben: 27. Jan 2022 15:56 Jetzt habe ich das Prinzip erkannt.
Ich leider noch nicht im vollen Umfang.

Es wäre super, wenn einer von euch das Vorgehen hier nochmal zusammenfassen könnte (Kochrezept).

Die Infos, wie ein Plus Shelly mit OH3 über MQTT zu steuern ist, sind bestimmt alle genannt.
Für nicht ganz so Versierte wie mich, ist es aber schwierig rauszulesen, welche Schritte im Einzelnen nach der MQTT Aktivierung auf dem Plus1PM zu machen sind.

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

Re: Shelly plus 1

Beitrag von udo1toni »

Ich versuche mal ein "außer dem Shelly und openHAB ist noch nichts passiert":
  1. Für mqtt braucht es einen Broker. Wenn man openHAB mittels des openHABian Image auf einem Raspberry betreibt oder alternativ manuell mit openHABian aufgesetzt hat, kann man mosquitto über openhabian-config einfach nachinstallieren.
  2. Aktuell gibt es immer wieder die Rückmeldung, dass man keinen Kontakt zum Broker bekommt. Um das zu verifizieren, sollte man einen mqtt Sniffer wie z.B. mqtt.fx einsetzen (es gibt aber auch kostenlose Apps für iOS und Android). Damit kann man bequem testen, ob man sich erfolgreich mit dem Broker verbinden kann.
  3. openHAB muss ebenfalls mit dem Broker Kontakt aufnehmen, über das mqtt Binding.
  4. mqtt ist aus Sicht von openHAB ein Bussystem. Entsprechend braucht es eine Bridge.
  5. Für jedes Gerät am Bus braucht es ein Thing.
  6. Jede Eigenschaft eines Thing, welche gesteuert oder ausgelesen werden soll, muss einen Channel erhalten.
Zu 4.: Einrichtung über Administration -> Einstellungen -> Things -> Add Thing (das weiße Plus in blauem Kreis rechts unten) -> MQTT Binding -> MQTT Broker (nicht System MQTT Broker!) -> uniqueID auf einen sinnvollen wert setzen (z.B. mosquitto) Label kann bleiben oder auch später angepasst werden, nicht so die uniqueID... Broker Hostname ist die IP, über die openHAB erreichbar ist (angenommen, mosquitto läuft auf dem gleichen Rechner) localhost oder 127.0.0.1 ist hier nur 2. Wahl, denn nur über die normale IP ist auch sichergestellt, dass die Kommunikation auch wirklich funktioniert.

Zu 5.: Genauso wie bei der Bridge, nur jetzt statt MQTT Broker ein generic MQTT Thing anlegen. Auch hier gilt: sinnvolle Bezeichnung in uniqueID eintragen! Die uniqueID darf nur aus Buchstaben des englischen Alphabets sowie arabischen Ziffern und dem Unterstrich bestehen [A-Z|a-z|0-9|_] und jedes Zeichen ist exakt einzutragen. Großbuchstaben und Kleinbuchstaben sind unterschiedliche Zeichen! In den Eigenschaften muss natürlich noch die Bridge ausgewählt werden. Show Advanced bringt weitere Optionen.
Man kann ein LWT setzen. LWT heißt "LastWill&Testament" und jedes Gerät, welches über MQTT kommuniziert, kann dem Broker beim Verbindungsaufbau eine Payload mitteilen, die der Broker über das LWT des Geräts in dessen Namen veröffentlicht, falls der Kontakt zum Broker abreißen sollte. Darüber kann man also hervorragend feststellen, ob ein Gerät Online oder Offline ist. Natürlich kann man auch die entsprechende Payload eintragen, welche ausgewertet werden soll.

Nachdem das Thing angelegt ist, kann man es direkt wieder öffnen und Channel hinzufügen. Dabei ist es wichtig, den korrekten Channeltyp zu nutzen, also z.B. On/Off Switch, falls es sich um ein Relais handelt.
Das MQTT State Topic ist die Rückmeldung vom Shelly, dass das Relais geschaltet wurde. Das Topic ist ein anderes, als das, über welches der Schaltbefehl an den Shelly gesendet wird. Der Status ist ebenfalls in JSON eingepackt. Entsprechend brauchen wir JSONPATH zum Auswerten des Status. (muss gesondert installiert werden)
In der Gegenrichtung kommt das Command Topic ins Spiel. Da auch hier JSON verwendet wird, muss die ausgehende Nachricht entsprechend formatiert werden.
Sowohl die ankommende als auch die abgehende Message variiert pro Gerät, da muss man halt selbst schauen, was da hin kommt. Der Punkt ist aber, dass der eigentliche Wert als true und false abgeliefert wird. Entsprechend setzt man diese beiden Werte für den On-Value und den Off-Value ein. Ankommend liefert JSONPATH dann direkt true oder false, was zu ON und OFF wird. Abgehend setzt man in die Payload, welche zum Broker geschickt wird an der Stelle, wo true oder false stehen muss den Platzhalter %s ein.

Der Channel wird nohc mit einem Switch Item verlinkt, welches man anschließend verwenden kann, um das Relais im Shelly ein- und auszuschalten. Umgekehrt muss jeder Schaltvorgang am Shelly fast unmittelbar dazu führen, dass das Item seinen Zustand ändert.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten