Seite 1 von 2

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

Verfasst: 2. Mai 2021 00:08
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).

Re: Shelly Steuerung über OH3 mittels MQTT

Verfasst: 2. Mai 2021 00:36
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.

Re: Shelly Steuerung über OH3 mittels MQTT

Verfasst: 2. Mai 2021 10:37
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?

Re: Shelly Steuerung über OH3 mittels MQTT

Verfasst: 2. Mai 2021 13:06
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...

Re: Shelly Steuerung über OH3 mittels MQTT

Verfasst: 2. Mai 2021 13:36
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 :)

Re: Shelly Steuerung über OH3 mittels MQTT

Verfasst: 2. Mai 2021 15:41
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"] 
}

Re: Shelly Steuerung über OH3 mittels MQTT

Verfasst: 2. Mai 2021 18:23
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.

Re: Shelly Steuerung über OH3 mittels MQTT

Verfasst: 2. Mai 2021 21:32
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 :-)

Re: Shelly Steuerung über OH3 mittels MQTT

Verfasst: 3. Mai 2021 01:48
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.

Re: Shelly Steuerung über OH3 mittels MQTT

Verfasst: 3. Mai 2021 20:29
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.