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

Re: Shelly Steuerung über OH3 mittels MQTT

Beitrag von AndRe5575 »

Log habe ich mir mal angeschaut. Ich habe allerdings folgendes Kommando zum starten dafür genutzt:

Code: Alles auswählen

log:set TRACE org.openhab.binding.http
den Fehler bzgl commandExtension habe ich behoben. Meine http.things Datei sieht nun so aus:

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="JSONPATH:$.schedule", 
			commandExtension="/settings/roller/0?schedule=%2$s", onValue="true", offValue="false"] 
}
Das einzige, was ich festgestellt habe, ist dass nun der Status eingelesen wird. Der angezeigte Button spiegelt den Status wieder. Ich sehe auch die get Befehle im log File, es erfolgt nur kein Sendebefehl.

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

Re: Shelly Steuerung über OH3 mittels MQTT

Beitrag von AndRe5575 »

Ok das Problem ist gefunden. Unter OpenHAB -> Einstellungen -> API security (show advanced) musste folgender Punkt aktiviert werden:
"Implicit user role for unauthenticated requests"
Ohne den Haken wurde nur das Ein Kommando gegeben, der Switch gab aber kein Kommando Aus. Da der Timer aktiviert war ist dies nicht aufgefallen, da der Switch ihn nur wieder eingeschaltet hatte.

MatzeMuc86
Beiträge: 1
Registriert: 9. Sep 2022 15:40
Answers: 0

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

Beitrag von MatzeMuc86 »

AndRe5575 hat geschrieben: 2. Mai 2021 00:08 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).
Könntest du bitte noch deine shelly_convert_pos.js sowie shelly.map teilen, würde mir helfen!
Danke und Grüße
MatzeMuc86

Antworten