Shelly Pro 3EM => Einbindung via MQTT ???
Moderator: seppy
-
- Beiträge: 7
- Registriert: 5. Mär 2023 17:46
Shelly Pro 3EM => Einbindung via MQTT ???
Hallo miteinander,
ich habe seit kurzem einen Shelly Pro 3EM im Einsatz. nun möchte ich diesen in openhab integrieren. Da das Shelly-Binding den Pro 3EM zwar erkennt, jedoch nicht unterstütz, bleibt nur der Weg über MQTT. Hierbei benötige ich Hilfe:
Auf einem Raspi ist openhab 3.4.2 sowie der Mosqitto-MQTT-Server istalliert.
Der Shelly Pro 3EM ist in der Verteilung installiert, ans LAN angeschlossen, MQTT aktiviert und verbunden. Über die IP-Adresse kann ich drauf zugreifen und mir die Website mit den aktuellen Werten anzeigen lassen.
nun das ganze in Openhab versucht zu integrieren:
1. MQTT-Broker (Mosquitto) hinzugefügt
Erscheint grün und online bei den Things
2. Generic-MQTT-Thing hinzugefügt
Als Quelle den MQTT-Broker angegen, erscheint grün und online bei den Things
3. Channels im Generic-MQTT-Thing definieren
An dieser Stelle benötige ich Hilfe
Hier möchte ich mir die aktuelle Leistung in Watt anzeigen lassen, für L1, L2, L3. Soweit ich das verstanden habe benötige ich dafür jeweils einen Channel. So das insgesamt 3 Channels zu definieren sind. Nur wie?
Wenn ich mit MQTTfx mich verbinde und spionieren gehe, sehe ich verschiedne Topics und dahinter wiederum Werte.
Beim ersten sichten der Werte würde L1 dem Wert "a_act_power", L2 dem Wert "b_act_power" und L3 dem Wert "c_act_power" entsprechen.
Wie komme ich an dieser Stelle zu den korrekten Einträgen für die Channels?
Vielen Dank schon einmal für eure Bemühungen
LG Sebastian
ich habe seit kurzem einen Shelly Pro 3EM im Einsatz. nun möchte ich diesen in openhab integrieren. Da das Shelly-Binding den Pro 3EM zwar erkennt, jedoch nicht unterstütz, bleibt nur der Weg über MQTT. Hierbei benötige ich Hilfe:
Auf einem Raspi ist openhab 3.4.2 sowie der Mosqitto-MQTT-Server istalliert.
Der Shelly Pro 3EM ist in der Verteilung installiert, ans LAN angeschlossen, MQTT aktiviert und verbunden. Über die IP-Adresse kann ich drauf zugreifen und mir die Website mit den aktuellen Werten anzeigen lassen.
nun das ganze in Openhab versucht zu integrieren:
1. MQTT-Broker (Mosquitto) hinzugefügt
Erscheint grün und online bei den Things
2. Generic-MQTT-Thing hinzugefügt
Als Quelle den MQTT-Broker angegen, erscheint grün und online bei den Things
3. Channels im Generic-MQTT-Thing definieren
An dieser Stelle benötige ich Hilfe
Hier möchte ich mir die aktuelle Leistung in Watt anzeigen lassen, für L1, L2, L3. Soweit ich das verstanden habe benötige ich dafür jeweils einen Channel. So das insgesamt 3 Channels zu definieren sind. Nur wie?
Wenn ich mit MQTTfx mich verbinde und spionieren gehe, sehe ich verschiedne Topics und dahinter wiederum Werte.
Beim ersten sichten der Werte würde L1 dem Wert "a_act_power", L2 dem Wert "b_act_power" und L3 dem Wert "c_act_power" entsprechen.
Wie komme ich an dieser Stelle zu den korrekten Einträgen für die Channels?
Vielen Dank schon einmal für eure Bemühungen
LG Sebastian
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- udo1toni
- Beiträge: 14780
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Shelly Pro 3EM => Einbindung via MQTT ???
Da es hier nur ums Lesen von Werten geht und diese alle in einem JSON Objekt geliefert werden, reicht Dir tatsächlich ein Channel vom Typ string.
Aber zunächst: Der Screenshot ist als Überblick zwar nett, besser wäre es aber gewesen, das konkrete Topic und die Payload als Text einzufügen:
Ein Glück gibt es Texterkennung
Die Formatierung kommt dann als Zuckerguss obendrauf, wenn man passende Werkzeuge nutzt
Wie oben erwähnt, brauchst Du nur einen string Channel (Hier als Kind der nicht mit gelisteten Bridge definiert):
Die Payload für available und not available ist geraten, da musst Du schauen, was das Topic tatsächlich liefert Das Topic hingegen ließ sich aus dem Screenshot ersehen also in diesem Fall doch ganz praktisch.
Als Ergebnis hast Du nun jedenfalls einen string Channel mit dem Namen json, nehmen wir an, die Bridge hört auf den Namen mosquitto, kannst Du nun verschiedene Items mit diesem Channel koppeln:
Die Notation ist für *.items Dateien, daraus kannst Du aber sehr gut erkennen, wie das Ganze nun abläuft, Du kannst die Konfiguration auch direkt über die Main UI vornehmen.
Voraussetzung ist natürlich, dass die JSONPATH Transformation installiert ist.
Die Items sind alle mit dem selben Channel verknüpft, der einzige Unterschied besteht im jsonpath, der im Link gesetzt ist.
Zu bemerken ist noch, dass Du so nackte Zahlen bekommst, es fehlt also die konkrete Einheit. Die Alternative wäre, jeweils das identische Topic als stateTopic in achtzehn number Channels zu setzen, jsonpath als incoming transformation zu nutzen und über den zusätzlichen Parameter unit die jeweils korrekte Einheit zu setzen. Dann kannst Du UoM Items verknüpfen, ohne weitere Angaben im Link. Für die reine Anzeige spielt UoM erst mal keine große Rolle, man kann die Einheit auch manuell ergänzen, interessnt wird UoM, wenn man Einheiten ineinander umrechnen will...
Aber zunächst: Der Screenshot ist als Überblick zwar nett, besser wäre es aber gewesen, das konkrete Topic und die Payload als Text einzufügen:
Code: Alles auswählen
shellypro3em-c8f09e8972c4/status/em:0
Code: Alles auswählen
{
"id": 0,
"a_current": 0.828,
"a_voltage": 236.6,
"a_act_power": 146.5,
"a_aprt_power": 195.8,
"a_pf": -6.81,
"b_current": 6.266,
"b_voltage": 235.6,
"b_act_power":26.1,
"b_aprt_power": 62.4,
"b_pf":-0.63,
"c_current": 6.576,
"c_voltage": 237.3,
"c_act_power": 2.0,
"c_aprt_power": 136.6,
"c_pf": -0.50,
"n_current": null,
"total_current": 1.670,
"total_act_power": 174.501,
"total_aprt_power": 394.860,
"user_calibrated_phase": []
}
Die Formatierung kommt dann als Zuckerguss obendrauf, wenn man passende Werkzeuge nutzt
Wie oben erwähnt, brauchst Du nur einen string Channel (Hier als Kind der nicht mit gelisteten Bridge definiert):
Code: Alles auswählen
Thing topic shellypro3em "Shelly Pro 3 EM" @ "mqtt" [
availabilityTopic="shellypro3em-c8f09e8972c4/online",
payloadNotAvailable="offline",
payloadAvailable= "online"
]{
Channels:
Type string : json "JSON Data" [ stateTopic= "shellypro3em-c8f09e8972c4/status/em:0" ]
}
Als Ergebnis hast Du nun jedenfalls einen string Channel mit dem Namen json, nehmen wir an, die Bridge hört auf den Namen mosquitto, kannst Du nun verschiedene Items mit diesem Channel koppeln:
Code: Alles auswählen
Number SP3emL1curr "L1 Strom" {channel="mqtt:topic:mosquitto:shellypro3em:json"[profile="transform:JSONPATH",function="$.a_current"]}
Number SP3emL1volt "L1 Spannung" {channel="mqtt:topic:mosquitto:shellypro3em:json"[profile="transform:JSONPATH",function="$.a_voltage"]}
Number SP3emL1actp "L1 Leistung" {channel="mqtt:topic:mosquitto:shellypro3em:json"[profile="transform:JSONPATH",function="$.a_act_power"]}
Number SP3emL1prtr "L1 Leistung2" {channel="mqtt:topic:mosquitto:shellypro3em:json"[profile="transform:JSONPATH",function="$.a_aprt_power"]}
Number SP3emL1pf "L1 Power Factor" {channel="mqtt:topic:mosquitto:shellypro3em:json"[profile="transform:JSONPATH",function="$.a_pf"]}
Number SP3emL2curr "L2 Strom" {channel="mqtt:topic:mosquitto:shellypro3em:json"[profile="transform:JSONPATH",function="$.b_current"]}
Number SP3emL2volt "L2 Spannung" {channel="mqtt:topic:mosquitto:shellypro3em:json"[profile="transform:JSONPATH",function="$.b_voltage"]}
Number SP3emL2actp "L2 Leistung" {channel="mqtt:topic:mosquitto:shellypro3em:json"[profile="transform:JSONPATH",function="$.b_act_power"]}
Number SP3emL2prtr "L2 Leistung2" {channel="mqtt:topic:mosquitto:shellypro3em:json"[profile="transform:JSONPATH",function="$.b_aprt_power"]}
Number SP3emL2pf "L2 Power Factor" {channel="mqtt:topic:mosquitto:shellypro3em:json"[profile="transform:JSONPATH",function="$.b_pf"]}
Number SP3emL3curr "L3 Strom" {channel="mqtt:topic:mosquitto:shellypro3em:json"[profile="transform:JSONPATH",function="$.c_current"]}
Number SP3emL3volt "L3 Spannung" {channel="mqtt:topic:mosquitto:shellypro3em:json"[profile="transform:JSONPATH",function="$.c_voltage"]}
Number SP3emL3actp "L3 Leistung" {channel="mqtt:topic:mosquitto:shellypro3em:json"[profile="transform:JSONPATH",function="$.c_act_power"]}
Number SP3emL3prtr "L3 Leistung2" {channel="mqtt:topic:mosquitto:shellypro3em:json"[profile="transform:JSONPATH",function="$.c_aprt_power"]}
Number SP3emL3pf "L3 Power Factor" {channel="mqtt:topic:mosquitto:shellypro3em:json"[profile="transform:JSONPATH",function="$.c_pf"]}
Number SP3emCurrTotal "Strom gesamt" {channel="mqtt:topic:mosquitto:shellypro3em:json"[profile="transform:JSONPATH",function="$.total_current"]}
Number SP3emActPTotal "Leistung gesamt" {channel="mqtt:topic:mosquitto:shellypro3em:json"[profile="transform:JSONPATH",function="$.total_act_power"]}
Number SP3emAptPTotal "Leistung2 geamt" {channel="mqtt:topic:mosquitto:shellypro3em:json"[profile="transform:JSONPATH",function="$.total_aprt_power"]}
Voraussetzung ist natürlich, dass die JSONPATH Transformation installiert ist.
Die Items sind alle mit dem selben Channel verknüpft, der einzige Unterschied besteht im jsonpath, der im Link gesetzt ist.
Zu bemerken ist noch, dass Du so nackte Zahlen bekommst, es fehlt also die konkrete Einheit. Die Alternative wäre, jeweils das identische Topic als stateTopic in achtzehn number Channels zu setzen, jsonpath als incoming transformation zu nutzen und über den zusätzlichen Parameter unit die jeweils korrekte Einheit zu setzen. Dann kannst Du UoM Items verknüpfen, ohne weitere Angaben im Link. Für die reine Anzeige spielt UoM erst mal keine große Rolle, man kann die Einheit auch manuell ergänzen, interessnt wird UoM, wenn man Einheiten ineinander umrechnen will...
openHAB4.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.8, LXC), mit openHABian eingerichtet
-
- Beiträge: 7
- Registriert: 5. Mär 2023 17:46
Re: Shelly Pro 3EM => Einbindung via MQTT ???
Lieber Udo1Toni,
Danke für die ausführliche Antwort. Ich werde versuchen es nachzuvollziehen. Da ich mich jedoch erst seit ca. 3 Wochen mit openHab
auseinandersetze werde ich sicherlich öfter nachfragen müssen.
Eine erste Frage habe ich schon nach dem lesen Deiner Antwort. Wo wird der von dir erwähnte
So sieht aktuell der Code der Bridge aus:
So sieht aktuell der Code des Generic-Thing aus:
Insofern der String-Channel dann richtig gesetzt bzw. eingebunden ist, kann ich dann daraus/darauf Items verlinken, wenn ich es richtig
verstanden habe . Die JSONPATH Transformation habe ich installiert.
LG
Danke für die ausführliche Antwort. Ich werde versuchen es nachzuvollziehen. Da ich mich jedoch erst seit ca. 3 Wochen mit openHab
auseinandersetze werde ich sicherlich öfter nachfragen müssen.
Eine erste Frage habe ich schon nach dem lesen Deiner Antwort. Wo wird der von dir erwähnte
eingefügt ? Auf der Bridge oder im Generic Thing?brauchst Du nur einen string Channel (Hier als Kind der nicht mit gelisteten Bridge definiert)
So sieht aktuell der Code der Bridge aus:
Code: Alles auswählen
UID: mqtt:broker:5f5af93f20
label: MQTT_Mosquitto
thingTypeUID: mqtt:broker
configuration:
lwtQos: 0
publickeypin: true
clientid: 1e04eb93-a756-4ccf-b72f-9964afb310c9
keepAlive: 60
hostnameValidated: true
birthRetain: true
secure: false
certificatepin: true
shutdownRetain: false
password: XXXX
protocol: TCP
qos: 0
reconnectTime: 60000
port: 1883
mqttVersion: V3
host: 192.168.178.5
lwtRetain: true
enableDiscovery: true
username: mqttuser
Code: Alles auswählen
UID: mqtt:topic:5f5af93f20:2786feca29
label: Shelly_Pro_3EM
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:5f5af93f20
verstanden habe . Die JSONPATH Transformation habe ich installiert.
LG
- udo1toni
- Beiträge: 14780
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Shelly Pro 3EM => Einbindung via MQTT ???
Du kannst einfach ein generic mqtt Thing erzeugen, mit der Bridge verbinden und im dem Thing den string Channel anlegen.
Ich nutze gerne die Schreibweise, wie sie in den *.things Dateien verwendet wird. Dort wäre die Bridge gewöhnlich ein Element oberhalb des Things, deshalb die verwirrende Randbemerkung
Ich nutze gerne die Schreibweise, wie sie in den *.things Dateien verwendet wird. Dort wäre die Bridge gewöhnlich ein Element oberhalb des Things, deshalb die verwirrende Randbemerkung
openHAB4.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.8, LXC), mit openHABian eingerichtet
-
- Beiträge: 7
- Registriert: 5. Mär 2023 17:46
Re: Shelly Pro 3EM => Einbindung via MQTT ???
Guten Abend Udo1Toni,
grundsätzlich kann ich Dir folgen, jedoch im Detail hapert es dann.
Ich habe wie von dir angeregt ein Generic-MQTT-Thing angelegt. Anschließend versucht im Generic-MQTT-Thing einen Channel zu definieren. und auf ein Item zu verlinken. Das ganze habe ich mehrmals versucht ohne Erfolgt ...
Daher an dieser Stelle meine Bitte / Frage, ob Du den 2 Post vorher von mir geposteten Code der Bridge bzw. des Generic-MQTT-Thing einmal kontrollieren, ggf. korrigiren und musterhaft einen Channel mit Item ergänzen kannst, z.B. Aktuelle Power L1 [a_act_power] . So das ich eine Vorlage zum erarbeiten des Restes habe ?
LG
grundsätzlich kann ich Dir folgen, jedoch im Detail hapert es dann.
Ich habe wie von dir angeregt ein Generic-MQTT-Thing angelegt. Anschließend versucht im Generic-MQTT-Thing einen Channel zu definieren. und auf ein Item zu verlinken. Das ganze habe ich mehrmals versucht ohne Erfolgt ...
Daher an dieser Stelle meine Bitte / Frage, ob Du den 2 Post vorher von mir geposteten Code der Bridge bzw. des Generic-MQTT-Thing einmal kontrollieren, ggf. korrigiren und musterhaft einen Channel mit Item ergänzen kannst, z.B. Aktuelle Power L1 [a_act_power] . So das ich eine Vorlage zum erarbeiten des Restes habe ?
LG
- udo1toni
- Beiträge: 14780
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Shelly Pro 3EM => Einbindung via MQTT ???
Code: Alles auswählen
UID: mqtt:topic:5f5af93f20:2786feca29
label: Shelly_Pro_3EM
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:5f5af93f20
channels:
- id: json
channelTypeUID: mqtt:string
label: JSON Data
description: ""
configuration:
stateTopic: shellypro3em-c8f09e8972c4/status/em:0
Für die Items gibt es leider keine Textansicht, allerdings sollte es möglich sein, die Liste als Text zu importieren (natürlich musst Du dann die ChannelUID anpassen - oder Du legst gleich eine neue Bridge an, die eine sinnvollere ID hat, und ein Thing, welches ebenfalls eine sinnvolle ID hat. Die von openHAB generierten alphanumerischen Zeichenketten sind ausgewürfelt, damit es keine Doppelungen gibt. Man kann aber jederzeit beim Anlegen eine andere ID setzen (bitte immer mit einem Buchstaben beginnen und ausschließlich die Zeichen des englischen Alphabets sowie die arabischen Ziffern verwenden)
openHAB4.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.8, LXC), mit openHABian eingerichtet
-
- Beiträge: 7
- Registriert: 5. Mär 2023 17:46
Re: Shelly Pro 3EM => Einbindung via MQTT ???
Vielen Dank, das hat soweit geklappt. Hab mir einfach meherere Generische MQTT-Things angelegt und den entsprechenden Datenstrom via Jasonpath eingebunden. Zum Visualisieren völlig ausreichend. Der jeweilige Datenstrom übertrögt ja die Werte ohne Einheit. Nun Wollte ich das ganze etwas händisch aufhübschen. Dazu wollte ich die Metadaten ergänzen => Add Metadate => State Description. Hier bei Pattern den Wert " %2f W" eingegeben. Es erfolgt keine Veränderung bzw. Anzeige des "W" . Ist das normal bzw. woran kann das liegen? Oder gibt es einen andere Lösung?
LG
LG
-
- Beiträge: 596
- Registriert: 20. Sep 2019 05:49
Re: Shelly Pro 3EM => Einbindung via MQTT ???
Da fehlt ein Punkt.Tourentiger hat geschrieben: ↑27. Mär 2023 17:06 " %2f W" eingegeben. Es erfolgt keine Veränderung bzw. Anzeige des "W"
Code: Alles auswählen
%.2f W
-
- Beiträge: 7
- Registriert: 5. Mär 2023 17:46
Re: Shelly Pro 3EM => Einbindung via MQTT ???
Das habe ich bereits mehrfach kontrolliert. Auch mit " . " . Ändert nix. Werte werden nach wie vor ohne " W " angezeigt .violine21 hat geschrieben: ↑27. Mär 2023 18:06Da fehlt ein Punkt.Tourentiger hat geschrieben: ↑27. Mär 2023 17:06 " %2f W" eingegeben. Es erfolgt keine Veränderung bzw. Anzeige des "W"Code: Alles auswählen
%.2f W
- udo1toni
- Beiträge: 14780
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Shelly Pro 3EM => Einbindung via MQTT ???
Ich denke, Du erwartest, dass die Anzeige in der Liste der Items geändert ist.
Das Pattern für die State Description wirkt nur in den Pages der Main UI oder in den Sitemaps der Basic UI.
Wenn Du in der Administrationsansicht überall die Einheit mit angegeben haben willst, musst Du leider für jeden Wert einen eigenen number Channel anlegen und die Transformation direkt im Channel mit angeben.
Bei einem number Channel gibt es unter den Advanced Options auch ein Feld Unit, über das Du dann die Einheit angibst (also hier "W").
Anschließend musst Du ein Number:Energy Item mit dem Channel verknüpfen, welches dann automatisch die Einheit mitführt.
Das Pattern für die State Description wirkt nur in den Pages der Main UI oder in den Sitemaps der Basic UI.
Wenn Du in der Administrationsansicht überall die Einheit mit angegeben haben willst, musst Du leider für jeden Wert einen eigenen number Channel anlegen und die Transformation direkt im Channel mit angeben.
Bei einem number Channel gibt es unter den Advanced Options auch ein Feld Unit, über das Du dann die Einheit angibst (also hier "W").
Anschließend musst Du ein Number:Energy Item mit dem Channel verknüpfen, welches dann automatisch die Einheit mitführt.
openHAB4.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.8, LXC), mit openHABian eingerichtet