Wie immer, so gilt auch hier

bitte möglichst keine Screenshots, sondern Text (hier die Payload der einzlnen Topics) immer als Code markiert in Textform einfügen.
Dein Beispiel widerspricht Deiner Typbezeichnung. Kann es sein, dass es sich nicht um den
Shelly 1PM Mini, sondern den
Shelly Plus 1 PM Mini handelt?
Ein typischer Status sähe dann so aus (lesefreundlich formatiert)
Code: Alles auswählen
{
"id" : 0,
"source" : "mqtt",
"output" : true,
"apower" : 0.0,
"voltage" : 225.2,
"current" : 0.0,
"aenergy" : {
"total" : 0.0,
"by_minute" : [ 0.0, 0.0, 0.0 ],
"minute_ts" : 1643400340
},
"temperature" : {
"tC" : 49.2,
"tF" : 120.6
}
}
Und das sieht für mich auf den ersten Blick auch ähnlich aus wie Dein Screenshot.
In diesem Status gibt es verschiedene Informationen, z.B.
voltage,
current,
aenergy (aufgeteilt in
total und
by_minute (in mWh, die letzten drei Minuten, als Array).
Eine Eigenschaft
energy kann ich hingegen nicht entdecken, außerdem hat der einzige ähnliche Punkt
aenergy keinen Wert, sondern ist ein Objekt mit weiteren Eigenschaften, die allerdings eine (oder mehrere) Zahl(en) liefern, aber in keinem Fall den Wert
on bzw.
off.
Diese Strings tauchen in dem gesamten JSON Objekt gar nicht auf.
Der Schaltzustand des Relais wird stattdessen über die Eigenschaft
output geliefert, aber nicht als
on/off, sondern als Boolean
true/false. Und passend dazu musst Du das Relais auch komplett anders ansteuern.
Eine mutmaßlich passende Konfiguration könnte ungefähr so aussehen:
Code: Alles auswählen
Thing topic schalter "PJHs Shelly1PM-Mini" [
]{
Channels:
Type switch : ch1 "Schaltkanal" [ on="true", off="false", transformationPattern="JSONPATH:$.output",
commandTopic="shelly1pmminig3-5432045477bc/rpc", stateTopic="shelly1pmminig3-5432045477bc/status/switch:0",
formatBeforePublish="{\"id\":0, \"src\":\"shelly1pmminig3-5432045477bc\", \"method\":\"Switch.Set\", \"params\":{\"id\":0,\"on\":%s}}"
]
Type number : voltage "Spannung" [ stateTopic="shelly1pmminig3-5432045477bc/status/switch:0",
transformationPattern="JSONPATH:$.voltage"
]
Type number : current "Strom" [ stateTopic="shelly1pmminig3-5432045477bc/status/switch:0",
transformationPattern="JSONPATH:$.current"
]
Type number : energy "Verbrauch" [ stateTopic="shelly1pmminig3-5432045477bc/status/switch:0",
transformationPattern="JSONPATH:$.aenergy.total"
]
}
Allerdings habe ich kein Gen2/3 Shelly Device (mit Original Firmware), das basiert also vor allem auf Lesen der API Dokumentation und dunkler Erinnerungen an diese PitA von Shelly.
(EDIT: Ja, genau...
viewtopic.php?t=6254&start=30 da hatten wir das schon mal thematisiert...)
Weil es hier in Form einer
*.things Text Definition daherkommt, musst Du leider alle Anführungszeichen im JSON Output (formatBeforePublish) mit dem Backslash
\ escapen. Über die UI kannst Du hingegen "einfach" das geforderte JSON Objekt hinschreiben. Dabei wird der Parameter
on mit
%s gefüllt, welches dank der Parametrierung entweder
true oder
false annimmt.
Die drei number Channel dienen hier nur als Beispiel. Das Thing hat ja nicht nur den Schaltkanal, sondern auch Messwerte zu bieten.
Spätestens mit openHAB 4 (evtl. auch schon unter OH3, da bin ich mir nicht sicher, ist schon etwas her...) kannst Du in den number Channels jeweils noch den Parameter
unit ergänzen und dann dort passend V, A bzw. Wh eintragen, damit korrekt verlinkte QuantityType Items (Number:ElectricPotential, Number:ElectricCurrent und Number:Energy) automatisch den korrekten Wert inklusive Einheit anzeigen können.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet