Shelly 1PM Mini Status auslesen

Allgemeine Fragen zum Thema "Smart Home" und Entscheidungshilfen

Moderator: seppy

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

Shelly 1PM Mini Status auslesen

Beitrag von PJH »

Hallo sehr geehrte Forumsteilnehmer,

ich komme wieder einmal nicht ohne die Hilfe der Forumsexperten aus.

Ich habe (erst einmal testweise) einen Shelly 1PM Mini angeschafft.

Der soll, da ich noch openHAB 3 benutze und das Shelly-Binding damit nicht funktioniert, per MQTT angesteuert werden.

Der Schaltvorgang klappt, aber das Auslesen der entsprechenden Werte bekomme ich nicht hin.

Ich habe folgendes Thing angelegt:

Code: Alles auswählen

Thing topic schalter "PJHs Shelly1PM-Mini"
	{
    	Channels:

        Type switch: shelly1pm1 "Shelly1PM-1" [ stateTopic="shelly1pmminig3-5432045477bc/status/switch:0",
												transformationPattern="JSONPATH:$.energy",
											        commandTopic="shelly1pmminig3-5432045477bc/command/switch:0",
												on="on", off="off"							  ]
    }
Und dazu die Items:

Code: Alles auswählen

Switch shelly1 "Shelly Relay 1" { channel="mqtt:topic:mosquitto:schalter:shelly1pm1"}
Number shelly1a "Shelly Relay 1 Status" { channel="mqtt:topic:mosquitto:schalter:shelly1pm1"} 
Und die Anzeige in der Sitemap:

Code: Alles auswählen

Switch item=shelly1 label="Shelly Relay 1 [MAP(de.map):%s]" icon=relay
Text item=shelly1a label="[%.2f]"
Während das Schalten des Relays einwandfrei funktioniert, kann ich die Werte nicht auslesen.

Im Log bekomme ich die Anzeige:

[ab.binding.mqtt.generic.ChannelState] - Command '235.4' from channel 'mqtt:topic:mosquitto:schalter:shelly1pm1' not supported by type 'OnOffValue': No enum constant org.openhab.core.library.types.OnOffType.235.4

235,4 ist wohl der Wert für Volt, der ja auch stimmt.

Die Anzeige im MQTT Explorer lautet:
Bildschirmfoto 2024-10-13 um 14.46.28.png
Würde mir wohl bitte einer, oder natürlich auch mehrere, der Experten weiter helfen?

Vielen Dank und einen schönen Gruß. PJH
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 4.3 im Synology NAS Docker-Container.

Harka
Beiträge: 487
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Shelly 1PM Mini Status auslesen

Beitrag von Harka »

viewtopic.php?t=9166
Du brauchst vermutlich auch den output

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

Re: Shelly 1PM Mini Status auslesen

Beitrag von PJH »

Danke, aber ändert sich nix. Ich brauch ja auch den Input, out funktioniert ja.

Schöne Grüße. PJH
openHAB 4.3 im Synology NAS Docker-Container.

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

Re: Shelly 1PM Mini Status auslesen

Beitrag von udo1toni »

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

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

Re: Shelly 1PM Mini Status auslesen

Beitrag von PJH »

Ich habe die Lösung aus einem anderen Beitrag von udo1toni gefunden. Danke dafür.

Ich habe (derzeit) nur noch 2 Probleme.

1. Was bedeutet "apower"
und
2. Wie wird die Temperatur ausgelesen.

Ich habe dafür folgendes item erstellt:

Code: Alles auswählen

Number shelly1pmm1_temperatur "Shelly Status Temperatur" {channel="mqtt:topic:mosquitto:schalter:json"[profile="transform:JSONPATH",function="$.temperature"]}
Aber das funktioniert nicht.

Wenn ich statt temperature (z.B.) voltage einsetze klappt das.

Bei der Temperatur muss sicherlich noch Celsius oder Fahrenheit angegeben werden, aber wie?

Vielen Dank für Hilfe und einen schönen Gruß.
openHAB 4.3 im Synology NAS Docker-Container.

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

Re: Shelly 1PM Mini Status auslesen

Beitrag von udo1toni »

Schau Dir bitte das JSON Objekt an:

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
  }
}
apower ist vermutlich die gerade abgerufene Leistung in Watt (actual power oder vielleicht auch average power?). Die Temperatur kannst Du in °C oder °F abrufen, entsprechend musst Du $.temperature.tC schreiben (oder eben $.temperature.tF, falls °F erwünscht ist)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

Re: Shelly 1PM Mini Status auslesen

Beitrag von PJH »

Hallo udo1toni, guten Tag.

Nein, mein Shelly Relay ist der 1PM Mini.

Und damit funktionieren Deine Angaben leider nicht. Da hat sich wohl 'was geändert!?

So, wie ich es angegeben habe, funktioniert soweit alles, jetzt auch durch das hinzufügen von ".tC" bei "temperatur" nun diese Anzeige auch.

Zu meinem Screenshot noch eine Erklärung. Das ist der Auszug aus dem MQTT Explorer, der sich nicht einfach als Code kopieren ließ.

Danke und einen schönen Gruß. PJH
openHAB 4.3 im Synology NAS Docker-Container.

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

Re: Shelly 1PM Mini Status auslesen

Beitrag von udo1toni »

Dann passt aber der von Dir gezeigte Screenshot nicht.
Schau bitte mal, auf welcher Firmware Du bist.

MQTT Explorer: Klick links auf das Topic, Klick rechts bei "Value" auf das Copy to Clipboard Symbol. Ist wirklich extrem einfach...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

Re: Shelly 1PM Mini Status auslesen

Beitrag von PJH »

Hallo udo1toni,

ja, das Kopieren aus dem MQTT Explorer war wohl zu einfach für mich. Das nächste Mal.

Ich habe nur einen 1PM Mini, daher auch die "richtige" Anzeige aus dem MQTT Explorer.

Meine Shelly Firmwareversion war 1.3.3 ich habe jetzt auf 1.4.2 upgedatet.

Die Auswertungsanzeige im MQTT Explorer hat sich allerdings (bis natürlich auf die Werte) nichts geändert.

Nochmals vielen Dank für Deine Hilfe und Bemühungen und einen schönen Gruß.

PJH.
openHAB 4.3 im Synology NAS Docker-Container.

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

Re: Shelly 1PM Mini Status auslesen

Beitrag von PJH »

Hallo udo1toni, guten Morgen.

Kennst Du dich eventuell auch mit dem ShellyRGBW2 Controller aus?

Ich habe ihn zwar "am Laufen", kann die Werte auch auslesen, aber ich kann ihn nicht ein- und ausschalten.

Aus der Weboberfläche des Controllers geht das einwandfrei und die Anzeige im MQTT-Explorer sieht so aus:

Code: Alles auswählen

shellies/shellyrgbw21/color
0=on

{
  "ison": true,
  "source": "http",
  "has_timer": false,
  "timer_started": 0,
  "timer_duration": 0,
  "timer_remaining": 0,
  "mode": "color",
  "red": 255,
  "green": 53,
  "blue": 107,
  "white": 0,
  "gain": 100,
  "effect": 0,
  "transition": 0,
  "power": 0.7,
  "power": 3.97,
  "overpower": false
}
Aus openHAB (3.3) klapp das aber nicht, obwohl die Werte on, off auch so übergeben werden.

Auch wenn ich im MQTT-Explorer on oder off "publishe" wird der entsprechende Wert bei "color/0" angezeigt, aber es tut sich nix.

Ich vermute, dass der Fehler bei "source":"http" liegt. Bei all meinen anderen Shellys steht bei Source "mqtt".

Aber bei den Einstellungen des Controllers ist mqtt eingeschaltet.

Kannst Du mir helfen?

Danke und schöne Grüße. PJH
openHAB 4.3 im Synology NAS Docker-Container.

Antworten