Shelly Steuerung über OH3 mittels MQTT (gelöst)

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

AndRe5575
Beiträge: 73
Registriert: 8. Jun 2020 20:16
Answers: 0

Shelly Steuerung über OH3 mittels MQTT (gelöst)

Beitrag von AndRe5575 »

Hallo zusammen,

zur Zeit verwende ich OpenHab 3 um meine Shellys (2.5) zu steuern.
mqtt.things:

Code: Alles auswählen

Bridge mqtt:broker:embedded-mqtt-broker "MQTT Bridge" [host="172.16.0.12", port="1883", secure=false, username="****", password="****"]
{
    Thing topic Rollo "Rollo Wohnzimmer" 
    {
        Channels:
        Type rollershutter  : Position  "Rollo Prozent"      [stateTopic="shellies/shellyswitch25-/roller/0/pos", transformationPattern="JS:shelly_convert_pos.js" , commandTopic="shellies/shellyswitch25/roller/0/command/pos", transformationPatternOut="JS:shelly_convert_pos.js" ]
        Type rollershutter  : Control   "Rollo Schalter"     [stateTopic="shellies/shellyswitch25/roller/0/pos", transformationPattern="JS:shelly_convert_pos.js" , commandTopic="shellies/shellyswitch25/roller/0/command", transformationPatternOut="MAP:shelly.map"]
	Type number         : Watts     "Rollo Watt"         [stateTopic="shellies/shellyswitch25/roller/0/power"]
	Type number         : Energy    "Rollo Total"        [stateTopic="shellies/shellyswitch25/roller/0/energy", transformationPattern="JS:shelly_convertkwh.js" ]
        Type number         : Temp      "Rollo Temperatur"   [stateTopic="shellies/shellyswitch25/temperature"]
        Type contact        : Cmd_Up    "Rollo Schalter"     [stateTopic="shellies/shellyswitch25/input/1"]
        Type contact        : Cmd_Down  "Rollo Schalter"     [stateTopic="shellies/shellyswitch25/input/0"]
    }
}
mqtt.items:

Code: Alles auswählen

Group:Rollershutter                 All_Up
Group:Rollershutter                 Controll_All
Group:Number:SUM                    total_kWh
Group:Contact:OR (OPEN,CLOSED)      CMD_up
Group:Contact:OR (OPEN,CLOSED)      CMD_down

Rollershutter   Rollo_Shutter            "Rollo"                  (All_Up)        {channel="mqtt:topic:embedded-mqtt-broker:Rollo:Position"}
Rollershutter   Rollo_Switch             "Rollo"                  (Controll_All)  {channel="mqtt:topic:embedded-mqtt-broker:Rollo:Control"}
Number          Rollo_MeterCurrentWatts  "Rollo Watt"                             {channel="mqtt:topic:embedded-mqtt-broker:Rollo:Watts"}
Number          Rollo_total_kWh          "Rollo Total energy"     (total_kWh)     {channel="mqtt:topic:embedded-mqtt-broker:Rollo:Energy"}
Number          Rollo_Temperatur         "Rollo Temperatur"                       {channel="mqtt:topic:embedded-mqtt-broker:Rollo:Temp"}
Contact         Rollo_CMD_up             "Rollo Taste Hoch"       (CMD_up)        {channel="mqtt:topic:embedded-mqtt-broker:Rollo:Cmd_Up"}
Contact         Rollo_CMD_down           "Rollo Taste Runter"     (CMD_down)      {channel="mqtt:topic:embedded-mqtt-broker:Rollo:Cmd_Down"}
Sitemap:

Code: Alles auswählen

sitemap demo label="My home automation" {

    Frame   label="Wohnzimmer"
    {
        Slider      item=Rollo_Shutter           label="Position"               icon="rollershutter"
        Switch      item=Rollo_Switch            label="Schalter"               icon="rollershutter"    mappings=[0="Hoch",STOP="Stop",100="Runter"]
        Selection   item=Rollo_Shutter           label="Feste Position"         icon="rollershutter"    mappings=["0"="0 - Auf","20"="20","40"="40","60"="60","80"="80","100"="100 - Zu"]
        Default     item=Rollo_Temperatur        label="Temperatur  [%.1f °C]"  icon="temperature"
        Default     item=Rollo_MeterCurrentWatts label="akt Verbrauch [%.1f W]" icon="energy"
        Text        item=Rollo_MeterTotalKWH     label="Zähler [%.1f kWh]"      icon="energy" 
    }
}
Der Teil funktioniert soweit auch Einwandfrei. Nun würde ich gerne den Autotimer per Switch Ein und Aus schalten können. Leider ist dieses weder mit dem Binding noch mittels MQTT möglich (zumindest habe ich keinen Weg gefunden)

Also wollte ich es mittels http Binding versuchen:

http.things

Code: Alles auswählen

Thing http:url:Rollo_Timer "Zeitsteuerung Wohnzimmer" [baseURL="http://172.16.0.14", refresh=30]{
Channels:
Type Switch : Scheduler [ stateExtension="/settings/roller/", stateTransformation="getValue:$.schedule", commandExtension="/settings/roller/0?schedule=false", onValue="true", offValue="false"] 
}
Und folgende Zeile meiner Items Datei hinzugefügt:

Code: Alles auswählen

Switch          Rollo_Timer_Off          "Rollo Timer Aus"                        {channel="http:url:Rollo_Timer:Scheduler"}
und folgende Zeile meiner Sitemap:

Code: Alles auswählen

        Switch      item=Rollo_Timer_Off         label="Schalter"               icon="switch"           
Bisher leider ohne Erfolg. Ich sehe meinen offensichtlichen Fehler leider nicht.

Des Weiteren versuche ich mittels eines langen Tastendrucks alle meine Rolladen hoch bzw. runter zu fahren.
Dafür habe ich hier auch eine offenes Thema im Forum. Auch bei dem Thema komme ich nicht weiter.

(LongPress und DoublePress würde ich auch gerne für verschieden Szenarien bzgl. der Beleuchtung nutzen, wenn die Timer einmal laufen sollte die andere Anwendung ja kein Thema sein. Ggf. weiß auch jemand zu dem Thema:viewtopic.php?f=15&t=5396 einen Rat).
Zuletzt geändert von AndRe5575 am 8. Mai 2021 10:28, insgesamt 1-mal geändert.

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

Re: Shelly Steuerung über OH3 mittels MQTT

Beitrag von udo1toni »

Ich kenne die mqtt Befehle von Shelly nicht, bei Tasmota ist das kein Problem, da man wortwörtlich alle Parameter über mqtt steuern kann, also auch Timer ein- und ausschalten.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

AndRe5575
Beiträge: 73
Registriert: 8. Jun 2020 20:16
Answers: 0

Re: Shelly Steuerung über OH3 mittels MQTT

Beitrag von AndRe5575 »

Da man die Shellys nicht einfach auf Tasmota updaten kann fällt dies leider weg (Bin froh das die Shellys sind, wo sie sind :-) ). Das umschalten per Browser und http Befehl funzt ja ohne Probleme, nun muss ich nur noch OpenHab dazu bekommen die entsprechenden Links auf Knopfdruck zu öffnen.

Jemand hier, der Erfahrung bzgl. der http Bindings hat und mir meinen Fehler aufzeigen kann?

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

Re: Shelly Steuerung über OH3 mittels MQTT

Beitrag von udo1toni »

?

Die Shellies können sehr wohl einfach mit Tasmota geflasht werden. Du kannst die Shellies aber auch über das Shelly Binding einbinden, vielleicht lässt sich darüber ja der Timer steuern (ich habe mit dem Shelly Binding noch keine Erfahrung).

EDIT: Ach so, vermutlich meinst Du das mit dem Flashen so, dass Du nicht ohne größere Umstände an die Hardware ran kommst... Dann allerdings ist das etwas doof...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

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

Re: Shelly Steuerung über OH3 mittels MQTT

Beitrag von udo1toni »

http Binding:

Die ganze Konfiguration sieht falsch aus. Ich habe aber leider kein Device hier, um die richtige Konfiguration dazu raus zu suchen...
Aber ich rate einfach mal:

Code: Alles auswählen

Thing http:url:Rollo_Timer "Zeitsteuerung Wohnzimmer" [baseURL="http://172.16.0.14/settings/", refresh=30]{
Channels:
    Type switch : Scheduler [ stateExtension="roller/getValue", stateTransformation="JSONPATH:$.schedule", commandExtension="roller/0?schedule=", onValue="true", offValue="false"] 
}
Die baseURL endet mindestens mit einem / und kann noch weitere identische Teile beinhalten.
Die stateExtension muss den eigentlichen Befehl enthalten (hier das getValue)
Das Ergebnis muss mit jsonpath transformiert werden (der Transformation Service muss dazu installiert sein, das ist nicht automatisch der Fall)
Gegeben, dass das JSON Objekt unterhalb der Root einen Punkt schedule hat, der entweder true oder false ist, sollte damit die stateTransformation wie angegeben aussehen. Der verwendete Service muss mit angegeben werden, immerhin stehen hier unterschiedliche Services zur Verfügung, die sogar miteinander kombiniert werden können.
die commandExtension darf nicht den eigentlichen Wert enthalten, sondern den Teilpfad bis dorthin. Es ist möglich, dass hier noch ein Platzhalter fehlt, das wäre dann %2$, also so:

Code: Alles auswählen

commandExtension="roller/0?schedule=%2$"
Es erscheint mir fragwürdig, dass es schedule als Teil des JSON Objekts direkt unter root geben soll, der Steuerbefehl aber unter roller/0 abgesetzt wird. Bist Du Dir da sicher?

Wenn ich die Doku von Shelly richtig interpretiere, sieht die Einstellung doch noch mal anders aus:

Code: Alles auswählen

Thing http:url:Rollo_Timer "Zeitsteuerung Wohnzimmer" [baseURL="http://172.16.0.14/settings/roller/", refresh=30]{
Channels:
    Type switch : Scheduler [ stateExtension="0", stateTransformation="JSONPATH:$.schedule", commandExtension="0?schedule=%2S", onValue="true", offValue="false"] 
}
Also nix mit getValue, man sendet lediglich keinen Parameter mit und bekommt als Antwort das JSON Objekt.

Aber alles nur Theorie :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

AndRe5575
Beiträge: 73
Registriert: 8. Jun 2020 20:16
Answers: 0

Re: Shelly Steuerung über OH3 mittels MQTT

Beitrag von AndRe5575 »

Hallo und Danke für die Tipps,

leider ist die Funktion noch nicht gegeben.

Am Ende soll ja nur folgender Link von OpenHab geöffnet werden:
(Ich habe gerade erst gesehen, dass ich =false statt =%2$ in meinem Code stehen hatte. Dies war nur von einem Test, zuvor hatte ich dort die =%2$ stehen)

bzgl der Aussage: Die baseURL endet mindestens mit einem /

Ich dachte es wäre egal, ob die baseURL mit einem / endet oder ob die Extension mit einem / startet.

Mittels http://172.16.0.14/settings/roller/getValue wird mir so ziemlich alles an Werten des Shellys angezeigt
Mittels http://172.16.0.14/settings/roller/0 nur eine reduzierte Anzahl an Angaben (Aber für meinen Fall auch ausreichend, da schedule in beiden Fällen vorhanden ist)

Ausgabe bei Firefox:

schedule: true bzw. schedule: false

Ich habe den Code mal wie vorgeschlagen angepasst, wie gehabt leider ohne Erfolg. Kann ich eigentlich auch hier in einem Log File sehen welche http Adresse von dem binding versucht wird zu öffnen?

Code: Alles auswählen

Thing http:url:Rollo_Timer "Zeitsteuerung Wohnzimmer" [baseURL="http://172.16.0.14/settings/roller/", refresh=30]{
Channels:
Type Switch : Scheduler [ stateExtension="0", stateTransformation="JSONPATH:$.schedule", commandExtension="0?schedule=%2S", onValue="true", offValue="false"] 
}

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

Re: Shelly Steuerung über OH3 mittels MQTT

Beitrag von udo1toni »

AndRe5575 hat geschrieben: 2. Mai 2021 15:41 Mittels http://172.16.0.14/settings/roller/getValue wird mir so ziemlich alles an Werten des Shellys angezeigt
Mittels http://172.16.0.14/settings/roller/0 nur eine reduzierte Anzahl an Angaben (Aber für meinen Fall auch ausreichend, da schedule in beiden Fällen vorhanden ist)
Ah. Das geht so aus der Doku nicht hervor (oder ich habe es komplett überlesen, was ohne weiteres drin ist)

Hast Du den jsonpath Transformation Service installiert?

Was den httpRequest betrifft, so könntest Du das Logging für das http Binding aufdrehen, das geht von der Karaf Konsole aus.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

AndRe5575
Beiträge: 73
Registriert: 8. Jun 2020 20:16
Answers: 0

Re: Shelly Steuerung über OH3 mittels MQTT

Beitrag von AndRe5575 »

Hast Du den jsonpath Transformation Service installiert?
Ja ist installiert (Das Ein/Ausschalten müsste aber auch ohne funktionieren, nur würde es keine entsprechende Rückmeldung geben)
Was den httpRequest betrifft, so könntest Du das Logging für das http Binding aufdrehen, das geht von der Karaf Konsole aus.
Da kenne ich mich noch weniger mit aus :-)

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

Re: Shelly Steuerung über OH3 mittels MQTT

Beitrag von udo1toni »

Na, Du verbindest Dich mit der GNU/Linux Konsole. Dort gibst Du

Code: Alles auswählen

openhab-cli console
ein. openHAB fordert die Eingabe eines Passwortes, das sollte habopen lauten.

Anschließend kannst Du openHAB vollumfänglich steuern. Um das Logging für http aufzudrehen, nutzt Du den Befehl

Code: Alles auswählen

log:set DEBUG org.openhab.binding.http
Anschließend sollten mehr Informationen bei jedem Request geloggt werden.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

AndRe5575
Beiträge: 73
Registriert: 8. Jun 2020 20:16
Answers: 0

Re: Shelly Steuerung über OH3 mittels MQTT

Beitrag von AndRe5575 »

Wieder einmal vielen Dank für den Support.
Habe es gerade auf die schnelle getestet, leider keine Einträge in meinem log File.
Werde aber wohl auch erst am Wochenende Zeit finden mich wieder etwas länger mit dem Problem zu befassen.

Antworten