Hallo zusammen,
ich möchte über MQTT die shedule ein-/ausschalten, bzw. die shedule_rules ändern.
Die shedule_rules müsste ich erst einmal abfragen, um die aktuelle Konfiguration zu sichern, bzw. anzupassen.
Wenn ich das halbwegs verstanden habe, müsste ich es so in etwa pulblishen!?
shellies/shellyswitch25-<deviceid>/settings/roller/{index}
Als Index dann shedule_rules?
Was mir auch nicht klar ist, wo gebe ich die Anfrage ein?
Es handeln sich um Shelly 2.5 als roller konfiguriert und mit MQTT2_Server angebunden.
Danke und Gruß
Bernd
Hallo Bernd,
meines Wissen sind das HTTP API Befehle / Settings und die sind nicht per MQTT verfügbar.
https://shelly-api-docs.shelly.cloud/#shelly2-5-mqtt
https://shelly-api-docs.shelly.cloud/#shelly2-5-settings-relay-index
Da musst Du Dir wahrscheinlich etwas per HTTP (HTTPMOD) basteln. Ich hatte da mal was für den shellyplug s gebaut. Hilft vielleicht als Vorlage:
defmod shellyplug_s_h HTTPMOD none 0
attr shellyplug_s_h userattr get01Name get01URL get02Name get02URL get03Name get03URL set01IMap set01Name set01TextArg:0,1 set01URL set02Name set02TextArg:0,1 set02URL set03Name set03TextArg:0,1 set03URL set04Name set04TextArg:0,1 set04URL set05Name set05TextArg:0,1 set05URL set06Name set06TextArg:0,1 set06URL set07Name set07TextArg:0,1 set07URL set10Name set10TextArg:0,1 set10URL set11Name set11TextArg:0,1 set11URL set12Name set12TextArg:0,1 set12URL set15Name set15TextArg:0,1 set15URL set16Name set16URL set17Name set18URL
attr shellyplug_s_h eventMap /switch on:on/switch off:off/switch toggle:toggle
attr shellyplug_s_h extractAllJSON 1
attr shellyplug_s_h get01Name settings
attr shellyplug_s_h get01URL http://shellyplug-s-040E41/settings
attr shellyplug_s_h get02Name status
attr shellyplug_s_h get02URL http://shellyplug-s-040E41/status
attr shellyplug_s_h get03Name settings_relay_0
attr shellyplug_s_h get03URL http://shellyplug-s-040E41/settings/relay/0
attr shellyplug_s_h room HTTPMOD_Device
attr shellyplug_s_h set01Name mqtt_max_qos
attr shellyplug_s_h set01URL http://shellyplug-s-040E41/settings/?mqtt_max_qos=$val
attr shellyplug_s_h set02Name mqtt_retain
attr shellyplug_s_h set02TextArg 1
attr shellyplug_s_h set02URL http://shellyplug-s-040E41/settings/?mqtt_retain=$val
attr shellyplug_s_h set03Name mqtt_update_period
attr shellyplug_s_h set03URL http://shellyplug-s-040E41/settings/?mqtt_update_period=$val
attr shellyplug_s_h set04Name settings_relay_0_default_state
attr shellyplug_s_h set04TextArg 1
attr shellyplug_s_h set04URL http://shellyplug-s-040E41/settings/relay/0/?default_state=$val
attr shellyplug_s_h set05Name settings_relay_0_btn_type
attr shellyplug_s_h set05TextArg 1
attr shellyplug_s_h set05URL http://shellyplug-s-040E41/settings/relay/0/?btn_type=$val
attr shellyplug_s_h set06Name settings_relay_0_auto_on
attr shellyplug_s_h set06URL http://shellyplug-s-040E41/settings/relay/0/?auto_on=$val
attr shellyplug_s_h set07Name settings_relay_0_auto_off
attr shellyplug_s_h set07URL http://shellyplug-s-040E41/settings/relay/0/?auto_off=$val
attr shellyplug_s_h set10Name led_status_disable
attr shellyplug_s_h set10TextArg 1
attr shellyplug_s_h set10URL http://shellyplug-s-040E41/settings/?max_power=$val
attr shellyplug_s_h set11Name led_status_disable
attr shellyplug_s_h set11TextArg 1
attr shellyplug_s_h set11URL http://shellyplug-s-040E41/settings/?led_status_disable=$val
attr shellyplug_s_h set12Name led_power_disable
attr shellyplug_s_h set12TextArg 1
attr shellyplug_s_h set12URL http://shellyplug-s-040E41/settings/?led_power_disable=$val
attr shellyplug_s_h set15Name switch
attr shellyplug_s_h set15TextArg 1
attr shellyplug_s_h set15URL http://shellyplug-s-040E41/relay/0/?turn=$val
attr shellyplug_s_h set16Name timeron
attr shellyplug_s_h set16URL http://shellyplug-s-040E41/relay/0/?timer=$val&turn=on
attr shellyplug_s_h set17Name timeroff
attr shellyplug_s_h set18URL http://shellyplug-s-040E41/relay/0/?timer=$val&turn=off
Gruß Otto
Zitat von: Otto123 am 05 April 2021, 19:55:48
Hallo Bernd,
meines Wissen sind das HTTP API Befehle / Settings und die sind nicht per MQTT verfügbar.
https://shelly-api-docs.shelly.cloud/#shelly2-5-mqtt
https://shelly-api-docs.shelly.cloud/#shelly2-5-settings-relay-index
Da musst Du Dir wahrscheinlich etwas per HTTP (HTTPMOD) basteln. Ich hatte da mal was für den shellyplug s gebaut. Hilft vielleicht als Vorlage:
defmod shellyplug_s_h HTTPMOD none 0
attr shellyplug_s_h userattr get01Name get01URL get02Name get02URL get03Name get03URL set01IMap set01Name set01TextArg:0,1 set01URL set02Name set02TextArg:0,1 set02URL set03Name set03TextArg:0,1 set03URL set04Name set04TextArg:0,1 set04URL set05Name set05TextArg:0,1 set05URL set06Name set06TextArg:0,1 set06URL set07Name set07TextArg:0,1 set07URL set10Name set10TextArg:0,1 set10URL set11Name set11TextArg:0,1 set11URL set12Name set12TextArg:0,1 set12URL set15Name set15TextArg:0,1 set15URL set16Name set16URL set17Name set18URL
attr shellyplug_s_h eventMap /switch on:on/switch off:off/switch toggle:toggle
attr shellyplug_s_h extractAllJSON 1
attr shellyplug_s_h get01Name settings
attr shellyplug_s_h get01URL http://shellyplug-s-040E41/settings
attr shellyplug_s_h get02Name status
attr shellyplug_s_h get02URL http://shellyplug-s-040E41/status
attr shellyplug_s_h get03Name settings_relay_0
attr shellyplug_s_h get03URL http://shellyplug-s-040E41/settings/relay/0
attr shellyplug_s_h room HTTPMOD_Device
attr shellyplug_s_h set01Name mqtt_max_qos
attr shellyplug_s_h set01URL http://shellyplug-s-040E41/settings/?mqtt_max_qos=$val
attr shellyplug_s_h set02Name mqtt_retain
attr shellyplug_s_h set02TextArg 1
attr shellyplug_s_h set02URL http://shellyplug-s-040E41/settings/?mqtt_retain=$val
attr shellyplug_s_h set03Name mqtt_update_period
attr shellyplug_s_h set03URL http://shellyplug-s-040E41/settings/?mqtt_update_period=$val
attr shellyplug_s_h set04Name settings_relay_0_default_state
attr shellyplug_s_h set04TextArg 1
attr shellyplug_s_h set04URL http://shellyplug-s-040E41/settings/relay/0/?default_state=$val
attr shellyplug_s_h set05Name settings_relay_0_btn_type
attr shellyplug_s_h set05TextArg 1
attr shellyplug_s_h set05URL http://shellyplug-s-040E41/settings/relay/0/?btn_type=$val
attr shellyplug_s_h set06Name settings_relay_0_auto_on
attr shellyplug_s_h set06URL http://shellyplug-s-040E41/settings/relay/0/?auto_on=$val
attr shellyplug_s_h set07Name settings_relay_0_auto_off
attr shellyplug_s_h set07URL http://shellyplug-s-040E41/settings/relay/0/?auto_off=$val
attr shellyplug_s_h set10Name led_status_disable
attr shellyplug_s_h set10TextArg 1
attr shellyplug_s_h set10URL http://shellyplug-s-040E41/settings/?max_power=$val
attr shellyplug_s_h set11Name led_status_disable
attr shellyplug_s_h set11TextArg 1
attr shellyplug_s_h set11URL http://shellyplug-s-040E41/settings/?led_status_disable=$val
attr shellyplug_s_h set12Name led_power_disable
attr shellyplug_s_h set12TextArg 1
attr shellyplug_s_h set12URL http://shellyplug-s-040E41/settings/?led_power_disable=$val
attr shellyplug_s_h set15Name switch
attr shellyplug_s_h set15TextArg 1
attr shellyplug_s_h set15URL http://shellyplug-s-040E41/relay/0/?turn=$val
attr shellyplug_s_h set16Name timeron
attr shellyplug_s_h set16URL http://shellyplug-s-040E41/relay/0/?timer=$val&turn=on
attr shellyplug_s_h set17Name timeroff
attr shellyplug_s_h set18URL http://shellyplug-s-040E41/relay/0/?timer=$val&turn=off
Gruß Otto
Erstmal danke Otto.
Ich dachte auch, dass es nur mit Http geht. Laut API aktuell scheint es nun auch per MQTT zu gehen.
https://shelly-api-docs.shelly.cloud/#shelly2-settings-roller-index (https://shelly-api-docs.shelly.cloud/#shelly2-settings-roller-index)
Grundlegend kann ich im MQTT2_Server ein publish absetzen, nur wo bekomme ich die Antwort? Wie üblich als Popup o.ä.?
Da ist bei Dir Wunschlesemodus aktiv ;D - meine Links waren schon fast richtig. Du bist jetzt bei dem 2 er und nicht 2.5 er
Und Dein link ist HTTP API - MQTT ist weiter oben.
https://shelly-api-docs.shelly.cloud/#shelly2-5-settings-roller-index
Publishen kannst Du viel - aber ob das Einen interessiert?
Zitat von: Otto123 am 05 April 2021, 20:26:42
Da ist bei Dir Wunschlesemodus aktiv ;D - meine Links waren schon fast richtig. Du bist jetzt bei dem 2 er und nicht 2.5 er
Und Dein link ist HTTP API - MQTT ist weiter oben.
https://shelly-api-docs.shelly.cloud/#shelly2-5-settings-roller-index
Publishen kannst Du viel - aber ob das Einen interessiert?
Der Shelly2 war ein Versehen.
Dann sind nur die "wenigen" Befehle für MQTT und unter ColoT ist alles Http!?
Irgendwie ist die Seite jedes mal verwirrend :o
Dann setze ich mal auf gelöst.
Danke nochmal für das Bsp.
P.S. deine Links hatte ich überlesen, sorry.
Zitat von: frober am 05 April 2021, 20:46:33
Irgendwie ist die Seite jedes mal verwirrend :o
Da stimme ich zu ;) bin ich auch schon dem wunschlesen erlegen
Jetzt habe ich doch noch eine Frage:
Ich habe meinen Shelly definiert, innerhalb HTTPMOD funktioniert alles. Ich kann die shedule_rules setzen wie ich sie benötige.
Was muss ich einstellen, dass das auch über die Befehlszeile, bzw. ein notify funktioniert?
Ein set shedule_Rollo_Schlafzimmer Urlaub
funktioniert nicht :(
Im Eventmonitor kommt:
2021-05-04 17:23:16 HTTPMOD shedule_Rollo_Schlafzimmer Urlaub
Das passt, HTTPMOD zeigt aber keine Reaktion :o
Hi,
da ich das nicht habe kann ich nicht mal raten. Mach mal bitte ein list von dem shedule_Rollo_Schlafzimmer.
Aber normal ist der set Befehl der gleiche wie der den Du in der Oberfläche klickst ;)
Gruß Otto
Zitat von: Otto123 am 04 Mai 2021, 18:14:07
Hi,
da ich das nicht habe kann ich nicht mal raten. Mach mal bitte ein list von dem shedule_Rollo_Schlafzimmer.
Aber normal ist der set Befehl der gleiche wie der den Du in der Oberfläche klickst ;)
Gruß Otto
Hallo Otto,
das List hatte ich mir wg. der Passwörter etc. gespart, da es ja im Modul funktioniert. Habe vermutet, dass noch etwas allgemeines fehlt, um die Steuerung von Außen zu aktivieren.
Das es funktioniert wie die anderen Module hatte ich auch gedacht, bis meine Steuerung per Kalender nicht funktionierte. :(
das List:
Internals:
BUSY 0
DEF none 0
FUUID 608d804b-f33f-ff70-8483-0d3513f80f8a4dec
Interval 0
MainURL
ModuleVersion 4.1.08 - 1.4.2021
NAME shedule_Rollo_Schlafzimmer
NOTIFYDEV global
NR 463
NTFY_ORDER 50-shedule_Rollo_Schlafzimmer
STATE stop
TYPE HTTPMOD
value 0
HttpUtils:
NAME
addr http://ip:80
auth 1
buf
code 200
compress 1
conn
data
displayurl http://user:pw@ip/settings/roller/0?schedule_rules=0019bsr-01234-open,0019ass-0123456-close,0800-56-open
header
host ip
httpheader HTTP/1.1 200 OK
Server: Mongoose/6.18
Connection: close
Content-Type: application/json
Content-Length: 557
httpversion 1.0
hu_blocking 0
hu_filecount 1
hu_port 80
hu_portSfx
ignoreredirects 1
loglevel 4
path /settings/roller/0?schedule_rules=0019bsr-01234-open,0019ass-0123456-close,0800-56-open
protocol http
pwd pw
redirects 0
timeout 2
url http://user:pw@ip/settings/roller/0?schedule_rules=0019bsr-01234-open,0019ass-0123456-close,0800-56-open
user user
sslargs:
QUEUE:
READINGS:
2021-05-04 16:31:48 btn_reverse 0
2021-05-04 16:31:48 button_type momentary
2021-05-04 16:31:48 default_state stop
2021-05-04 16:31:48 input_mode openclose
2021-05-04 16:31:48 is_valid 1
2021-05-04 16:31:48 maxtime 20
2021-05-04 16:31:48 maxtime_close 20
2021-05-04 16:31:48 maxtime_open 21
2021-05-04 16:31:48 obstacle_action stop
2021-05-04 16:31:48 obstacle_delay 1
2021-05-04 16:31:48 obstacle_mode disabled
2021-05-04 16:31:48 obstacle_power 200
2021-05-04 16:31:48 off_power 2
2021-05-04 16:31:48 positioning 1
2021-05-04 16:31:48 power 0
2021-05-04 16:31:48 safety_action stop
2021-05-04 16:31:48 safety_allowed_on_trigger none
2021-05-04 16:31:48 safety_mode while_opening
2021-05-04 16:31:48 safety_switch 0
2021-05-04 16:31:48 schedule 1
2021-05-04 16:31:48 schedule_rules_0 0800-0123456-open
2021-05-04 16:31:48 schedule_rules_1 0019ass-0123456-close
2021-05-01 18:51:04 schedule_rules_2 0800-56-open
2021-05-04 16:31:48 state stop
2021-05-04 16:31:48 swap 0
2021-05-04 16:31:48 swap_inputs 0
REQUEST:
context set
data
header
ignoreredirects 0
method
num 01
retryCount 0
type set01
url http://user:pw@ip/settings/roller/0?schedule_rules=0019bsr-01234-open,0019ass-0123456-close,0800-56-open
value 0
defptr:
readingBase:
btn_reverse get
button_type get
default_state get
input_mode get
is_valid get
maxtime get
maxtime_close get
maxtime_open get
obstacle_action get
obstacle_delay get
obstacle_mode get
obstacle_power get
off_power get
positioning get
power get
safety_action get
safety_allowed_on_trigger get
safety_mode get
safety_switch get
schedule get
schedule_rules_0 get
schedule_rules_1 get
state get
swap get
swap_inputs get
readingNum:
btn_reverse 01
button_type 01
default_state 01
input_mode 01
is_valid 01
maxtime 01
maxtime_close 01
maxtime_open 01
obstacle_action 01
obstacle_delay 01
obstacle_mode 01
obstacle_power 01
off_power 01
positioning 01
power 01
safety_action 01
safety_allowed_on_trigger 01
safety_mode 01
safety_switch 01
schedule 01
schedule_rules_0 01
schedule_rules_1 01
state 01
swap 01
swap_inputs 01
readingOutdated:
requestReadings:
get01:
btn_reverse get 01
button_type get 01
default_state get 01
input_mode get 01
is_valid get 01
maxtime get 01
maxtime_close get 01
maxtime_open get 01
obstacle_action get 01
obstacle_delay get 01
obstacle_mode get 01
obstacle_power get 01
off_power get 01
positioning get 01
power get 01
safety_action get 01
safety_allowed_on_trigger get 01
safety_mode get 01
safety_switch get 01
schedule get 01
schedule_rules_0 get 01
schedule_rules_1 get 01
state get 01
swap get 01
swap_inputs get 01
Attributes:
extractAllJSON 1
get01Name Shedule
get01URL http://user:pw@ip/settings/roller/0
room Technik->Rolladen
set01Name Wochentag
set01NoArg on
set01URL http://user:pw@ip/settings/roller/0?schedule_rules=0019bsr-01234-open,0019ass-0123456-close,0800-56-open
set02Name Urlaub
set02NoArg on
set02URL http://user:pw@ip/settings/roller/0?schedule_rules=0800-0123456-open,0019ass-0123456-close
Hi,
da steht set02NoArg on ???
Also ich habe in meiner Definition
attr shellyplug_s_h set10Name led_status_disable
attr shellyplug_s_h set10TextArg 1
Bedeutet: in der Oberfläche habe ich ein Textfeld dort trage ich je nach dem was ich will eine 0 oder 1 ein, drücke vorne auch set und es wird ausgeführt.
Wenn ich in der FHEM Kommandzeile
set device led_status_disable 1
eingebe, wird das genauso ausgeführt. Ich sehe auch keinen Grund warum ein Befehl über das Klickmenu anders funktionieren soll wie der gleiche Befehl in der Kommandzeile.
Die Doku sagt
ZitatIf a set command should not require a parameter at all, then you can specify the attribute NoArg. For example:
attr PM set03Name On
attr PM set03NoArg
Was Du jetzt mit Deiner Kombination erreicht hast?
Wobei die Doku doch Käse ist, hinter dem Attribute muss doch ein Wert stehen? Typischerweise wird da per default 1 reingeschrieben...
Ich bin unsicher ....
Zitat von: Otto123 am 04 Mai 2021, 19:40:38
Hi,
da steht set02NoArg on ???
Da ich alles in der Adresse stehen habe, habe ich das Argumentfeld ausgeschaltet.
Das sollte aber doch nicht die Steuerung von Aussen beeinflussen. Wie geschrieben, mit dem Set im Modul funktioniert alles.
Da wir hier eh im falschen Unterforum sind, mache ich im Richtigen einen neuen Thread auf.
Danke schonmal...
wenn ich hier im Forum suche steht da immer set02NoArg 1 und nicht on. Aber vielleicht ist das egal.
Zitat von: Otto123 am 04 Mai 2021, 20:28:07
wenn ich hier im Forum suche steht da immer set02NoArg 1 und nicht on. Aber vielleicht ist das egal.
Das wird per Drop-down-Menü gewählt.
Warum das beim Anlegen on/off war, hmm, jetzt kommt 0/1.
Hab's geändert, macht aber keinen Unterschied.
Ich habe einen neuen Thread eröffnet
https://forum.fhem.de/index.php/topic,120865.msg1154409.html#msg1154409
(https://forum.fhem.de/index.php/topic,120865.msg1154409.html#msg1154409)