GELÖST: MQTT und Shelly

Begonnen von Kornelius777, 08 September 2025, 17:01:45

Vorheriges Thema - Nächstes Thema

Kornelius777

Hallo zusammen,

ich kratze gerade meinen Kopf und komme alleine nicht weiter.

Mein Shelly:
Internals:
   CID        shelly_hoflicht
   DEF        shelly_hoflicht
   FUUID      68b70b72-f33f-f563-ba66-f126a4a391ffb594
   IODev      MQTT2_SERVER
   LASTInputDev MQTT2_SERVER
   MQTT2_SERVER_CONN MQTT2_SERVER_10.10.3.32_58340
   MQTT2_SERVER_MSGCNT 38
   MQTT2_SERVER_TIME 2025-09-08 16:44:40
   MSGCNT     38
   NAME       OUT.Licht_Hoflicht
   NR         285
   STATE      on
   TYPE       MQTT2_DEVICE
   eventCount 38
   JSONMAP:
     params_switch_0_temperature_tC temperature
     params_switch_0_temperature_tF 0
     params_wifi_sta_ip ip
     req_result_in_mode in_mode
     switch_state state
     switch_temperature_tC temperature
     switch_temperature_tF 0
   READINGS:
     2025-09-08 13:01:08   IODev           MQTT2_SERVER
     2025-09-02 17:22:33   attrTemplateVersion 20240627
     2025-09-08 16:44:40   dst             shelly-hoflicht/events
     2025-09-03 07:21:33   in_mode         follow
     2025-09-02 18:30:59   input_id        0
     2025-09-02 18:30:59   input_state     false
     2025-09-02 17:31:12   ip              10.10.3.32
     2025-09-08 16:44:40   method          NotifyStatus
     2025-09-08 13:01:09   mqtt_connected  true
     2025-09-08 13:01:09   online          true
     2025-09-08 10:34:36   params_events_1_cfg_rev 17
     2025-09-08 10:34:36   params_events_1_component sys
     2025-09-08 10:34:36   params_events_1_event config_changed
     2025-09-02 18:15:05   params_events_1_id 0
     2025-09-08 10:34:36   params_events_1_restart_required false
     2025-09-02 18:15:14   params_events_1_time_ms 997
     2025-09-08 10:34:36   params_events_1_ts 1757320476.25
     2025-09-02 18:30:59   params_input_0_state false
     2025-09-08 13:01:09   params_mqtt_connected true
     2025-09-08 16:42:43   params_switch_0_output true
     2025-09-08 16:42:43   params_switch_0_source MQTT
     2025-09-02 18:27:18   params_sys_available_updates_beta_version 1.7.1-beta1
     2025-09-08 10:34:36   params_sys_cfg_rev 17
     2025-09-08 16:44:40   params_sys_last_sync_ts 1757342680
     2025-09-08 16:44:40   params_sys_time 16:44
     2025-09-08 16:44:40   params_sys_unixtime 1757342680
     2025-09-08 16:44:40   params_ts       1757342680.54
     2025-09-08 16:44:40   src             shelly1mini-348518e0c6d0
     2025-09-08 16:42:43   state           on
     2025-09-08 16:42:43   switch_id       0
     2025-09-08 16:42:43   switch_source   MQTT
     2025-09-08 16:44:40   sys_available_updates_beta_version 1.7.1-beta1
     2025-09-08 16:44:40   sys_btrelay_rev 0
     2025-09-08 16:44:40   sys_cfg_rev     17
     2025-09-08 16:44:40   sys_fs_free     139264
     2025-09-08 16:44:40   sys_fs_size     393216
     2025-09-08 16:44:40   sys_kvs_rev     0
     2025-09-08 16:44:40   sys_last_sync_ts 1757342680
     2025-09-08 16:44:40   sys_mac         348518E0C6D0
     2025-09-08 16:44:40   sys_ram_free    139628
     2025-09-08 16:44:40   sys_ram_min_free 124664
     2025-09-08 16:44:40   sys_ram_size    253912
     2025-09-08 16:44:40   sys_reset_reason 1
     2025-09-08 16:44:40   sys_restart_required false
     2025-09-08 16:44:40   sys_schedule_rev 0
     2025-09-08 16:44:40   sys_time        16:44
     2025-09-08 16:44:40   sys_unixtime    1757342680
     2025-09-08 16:44:40   sys_uptime      512268
     2025-09-08 16:44:40   sys_utc_offset  7200
     2025-09-08 16:44:40   sys_webhook_rev 0
     2025-09-08 16:42:43   temperature     56.1
     2025-09-02 17:22:33   x_reboot        set
Attributes:
   DbLogExclude .*
   IODev      MQTT2_SERVER
   devStateIcon {
my $onl = ReadingsVal($name,'online','false') eq 'false'?'10px-kreis-rot':'10px-kreis-gruen';
$onl = FW_makeImage($onl);
my $light = FW_makeImage(ReadingsVal($name,'state','off'));
my $temp = ReadingsVal($name,'temperature','-100');
my $ip = ReadingsVal($name,'ip','none');
my $reb = ReadingsVal($name,'sys_restart_required','false') eq 'true'?'<a href="/fhem?cmd.dummy=set '.$name.' x_reboot&XHR=1"> ... Notwendigen Reboot durchführen</a>':'';
qq(<a href="http://$ip" target="_blank">${onl}</a><a href="/fhem?cmd.dummy=set $name toggle&XHR=1">${light}</a>$reb)
}
   devicetopic shelly-hoflicht
   genericDeviceType light
   getList    in_mode:noArg in_mode $DEVICETOPIC/rpc {"id": 1,"src":"$DEVICETOPIC", "method": "Switch.GetConfig", "params": {"id": 0}}
   icon       light_outdoor
   jsonMap    switch_state:state switch_temperature_tC:temperature switch_temperature_tF:0 params_wifi_sta_ip:ip params_switch_0_temperature_tC:temperature params_switch_0_temperature_tF:0 req_result_in_mode:in_mode
   model      shellyPlus_1
   readingList $DEVICETOPIC/online:.* online
  $DEVICETOPIC/events/rpc:.* { json2nameValue($EVENT,'',$JSONMAP) }
  $DEVICETOPIC/status/mqtt:.* { json2nameValue($EVENT, 'mqtt_', $JSONMAP) }
  $DEVICETOPIC/status/sys:.* { json2nameValue($EVENT, 'sys_', $JSONMAP) }
  $DEVICETOPIC/status/switch_0:.* { $EVENT =~ s/"output":true/"state":"on"/g; $EVENT =~ s/"output":false/"state":"off"/g; json2nameValue($EVENT, 'switch_', $JSONMAP) }
  $DEVICETOPIC/status/cloud:.* {}
  $DEVICETOPIC/rpc:.* { json2nameValue($EVENT, 'req_', $JSONMAP, 'in_mode')}
  $DEVICETOPIC/status/input_0:.* { json2nameValue($EVENT, 'input_', $JSONMAP) }
  fhem2shelly/rpc:.* {}
   room       Draussen
   setList    toggle:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Toggle","params": {"id":0}}
  off:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Set","params": {"id":0,"on":false}}
  on:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Set","params": {"id":0,"on":true}}
  on-for-timer $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Set","params": {"id":0,"on":true,"toggle_after":$EVTPART1}}
  off-for-timer $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Set","params": {"id":0,"on":false,"toggle_after":$EVTPART1}}
  in_mode:toggle,flip,detached {fhem("sleep 0.2; get $NAME in_mode"); my $val = $EVTPART1 ne 'toggle' ? $EVTPART1 : ReadingsVal($NAME,'in_mode','flip') eq 'flip' ? 'detached':'flip'; qq($DEVICETOPIC/rpc {"id":1,"src":"fhem2shelly","method":"Switch.SetConfig","params": {"id":0, "config": {"in_mode": "$val"}}})}
  x_update:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Shelly.Update","params": {"stage":"stable"}}
  x_reboot:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Shelly.Reboot"}
  x_eco:true,false $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Sys.SetConfig","params": {"config": {"device": {"eco_mode": $EVTPART1}}}}
   setStateList on off toggle on-for-timer off-for-timer
   webCmd     :

soll nach dem Einschalten immer nach 30 Minuten wieder ausgeschaltet werden.
Um das zu erreichen, habe ich ein notify gebastelt:
Internals:
   DEF        OUT.Licht_Hoflicht:.*
{
 
  my $state = ReadingsVal("OUT.Licht_Hoflicht", "state", "undef");
  Log3 ("$SELF", 3, "$SELF Shelly OUT.Licht_Hoflicht wurde geschaltet: $state");
 
  if ( ("$state" eq "on") || ("$state" eq "set_on") )
  {
    if (exists($defs{'at_Licht_Hoflicht_off'})) {fhem("delete at_Licht_Hoflicht_off")}
    fhem("define at_Licht_Hoflicht_off at +00:30:00 set OUT.Licht_Hoflicht off");;
    fhem("attr at_Licht_Hoflicht_off room Draussen");;
  }
  if ( ("$state" eq "off") || ("$state" eq "set_off") )
  {
    if (exists($defs{'at_Licht_Hoflicht_off'})) {fhem("delete at_Licht_Hoflicht_off")}
  }
}
   FUUID      68b712cd-f33f-f563-9398-f5764e01e4fa58a3
   NAME       notify_Licht_Hoflicht_on
   NOTIFYDEV  OUT.Licht_Hoflicht
   NR         286
   NTFY_ORDER 50-notify_Licht_Hoflicht_on
   REGEXP     OUT.Licht_Hoflicht:.*
   STATE      2025-09-08 16:44:40
   TRIGGERTIME 1757342680.96209
   TYPE       notify
   eventCount 3
   READINGS:
     2025-09-08 16:43:10   state           active
     2025-09-08 16:44:40   triggeredByDev  OUT.Licht_Hoflicht
     2025-09-08 16:44:40   triggeredByEvent method: NotifyStatus
Attributes:
   DbLogExclude .*
   room       Draussen


Wie ihr in obigem Beispiel (im Device selber) sehen könnt, hat $state um 16:42:43 Uhr auf "on" gewechselt.

Das Log3 hierzu sieht aber so aus:
2025.09.08 16:42:43 3: MQTT2_DEVICE set OUT.Licht_Hoflicht toggle
2025.09.08 16:42:43 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: set_toggle
2025.09.08 16:42:43 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:42:43 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:42:43 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:42:43 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:42:43 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:42:43 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:42:43 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:42:43 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:42:43 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:42:43 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:40 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on
2025.09.08 16:44:41 3: notify_Licht_Hoflicht_on Shelly OUT.Licht_Hoflicht wurde geschaltet: on

"Irgendwas" bringt den MQTT-Server dazu, um 16:44:40 Uhr und um 16:44:41 Uhr anzunehmen, dass gerade wieder geschaltet wurde.
Wo ist denn mein Gedankenfehler?
Wie kann ich sicherstellen, dass wirklich nur dieser eine Anschalt-Moment zur Berechnung herangezogen wird?

Bin gerade wirklich ratlos...

Danke für eure Hilfe!

(Vielleicht kann mir ja auch jemand erklären, warum das notify so dermaßen viele Log-Einträge schreibt...)

Kornelius777

Grmpf. Der "Spaß" geht weiter...
Kurz vor Ablauf der 30 Minuten, nach denen ausgeschaltet werden soll, hat "irgendwas" den Shelly neu geschaltet:
Internals:
  CID        shelly_hoflicht
  DEF        shelly_hoflicht
  FUUID      68b70b72-f33f-f563-ba66-f126a4a391ffb594
  IODev      MQTT2_SERVER
  LASTInputDev MQTT2_SERVER
  MQTT2_SERVER_CONN MQTT2_SERVER_10.10.3.32_58340
  MQTT2_SERVER_MSGCNT 42
  MQTT2_SERVER_TIME 2025-09-08 17:13:19
  MSGCNT    42
  NAME      OUT.Licht_Hoflicht
  NR        285
  STATE      on
  TYPE      MQTT2_DEVICE
  eventCount 42
  JSONMAP:
    params_switch_0_temperature_tC temperature
    params_switch_0_temperature_tF 0
    params_wifi_sta_ip ip
    req_result_in_mode in_mode
    switch_state state
    switch_temperature_tC temperature
    switch_temperature_tF 0
  READINGS:
    2025-09-08 13:01:08  IODev          MQTT2_SERVER
    2025-09-02 17:22:33  attrTemplateVersion 20240627
    2025-09-08 17:13:19  dst            shelly-hoflicht/events
    2025-09-03 07:21:33  in_mode        follow
    2025-09-02 18:30:59  input_id        0
    2025-09-02 18:30:59  input_state    false
    2025-09-02 17:31:12  ip              10.10.3.32
    2025-09-08 17:13:19  method          NotifyStatus
    2025-09-08 13:01:09  mqtt_connected  true
    2025-09-08 13:01:09  online          true
    2025-09-08 10:34:36  params_events_1_cfg_rev 17
    2025-09-08 10:34:36  params_events_1_component sys
    2025-09-08 10:34:36  params_events_1_event config_changed
    2025-09-02 18:15:05  params_events_1_id 0
    2025-09-08 10:34:36  params_events_1_restart_required false
    2025-09-02 18:15:14  params_events_1_time_ms 997
    2025-09-08 10:34:36  params_events_1_ts 1757320476.25
    2025-09-02 18:30:59  params_input_0_state false
    2025-09-08 13:01:09  params_mqtt_connected true
    2025-09-08 16:42:43  params_switch_0_output true
    2025-09-08 16:42:43  params_switch_0_source MQTT
    2025-09-02 18:27:18  params_sys_available_updates_beta_version 1.7.1-beta1
    2025-09-08 10:34:36  params_sys_cfg_rev 17
    2025-09-08 17:13:19  params_sys_last_sync_ts 1757344399
    2025-09-08 17:13:19  params_sys_time 17:13
    2025-09-08 17:13:19  params_sys_unixtime 1757344399
    2025-09-08 17:13:19  params_ts      1757344399.33
    2025-09-08 17:13:19  src            shelly1mini-348518e0c6d0
    2025-09-08 16:42:43  state          on
    2025-09-08 16:42:43  switch_id      0
    2025-09-08 16:42:43  switch_source  MQTT
    2025-09-08 17:13:19  sys_available_updates_beta_version 1.7.1-beta1
    2025-09-08 17:13:19  sys_btrelay_rev 0
    2025-09-08 17:13:19  sys_cfg_rev    17
    2025-09-08 17:13:19  sys_fs_free    139264
    2025-09-08 17:13:19  sys_fs_size    393216
    2025-09-08 17:13:19  sys_kvs_rev    0
    2025-09-08 17:13:19  sys_last_sync_ts 1757344399
    2025-09-08 17:13:19  sys_mac        348518E0C6D0
    2025-09-08 17:13:19  sys_ram_free    139632
    2025-09-08 17:13:19  sys_ram_min_free 124664
    2025-09-08 17:13:19  sys_ram_size    253912
    2025-09-08 17:13:19  sys_reset_reason 1
    2025-09-08 17:13:19  sys_restart_required false
    2025-09-08 17:13:19  sys_schedule_rev 0
    2025-09-08 17:13:19  sys_time        17:13
    2025-09-08 17:13:19  sys_unixtime    1757344399
    2025-09-08 17:13:19  sys_uptime      513987
    2025-09-08 17:13:19  sys_utc_offset  7200
    2025-09-08 17:13:19  sys_webhook_rev 0
    2025-09-08 16:42:43  temperature    56.1
    2025-09-02 17:22:33  x_reboot        set
Attributes:
  DbLogExclude .*
  IODev      MQTT2_SERVER
  devStateIcon {
my $onl = ReadingsVal($name,'online','false') eq 'false'?'10px-kreis-rot':'10px-kreis-gruen';
$onl = FW_makeImage($onl);
my $light = FW_makeImage(ReadingsVal($name,'state','off'));
my $temp = ReadingsVal($name,'temperature','-100');
my $ip = ReadingsVal($name,'ip','none');
my $reb = ReadingsVal($name,'sys_restart_required','false') eq 'true'?'<a href="/fhem?cmd.dummy=set '.$name.' x_reboot&XHR=1"> ... Notwendigen Reboot durchführen</a>':'';
qq(<a href="http://$ip" target="_blank">${onl}</a><a href="/fhem?cmd.dummy=set $name toggle&XHR=1">${light}</a>$reb)
}
  devicetopic shelly-hoflicht
  genericDeviceType light
  getList    in_mode:noArg in_mode $DEVICETOPIC/rpc {"id": 1,"src":"$DEVICETOPIC", "method": "Switch.GetConfig", "params": {"id": 0}}
  icon      light_outdoor
  jsonMap    switch_state:state switch_temperature_tC:temperature switch_temperature_tF:0 params_wifi_sta_ip:ip params_switch_0_temperature_tC:temperature params_switch_0_temperature_tF:0 req_result_in_mode:in_mode
  model      shellyPlus_1
  readingList $DEVICETOPIC/online:.* online
  $DEVICETOPIC/events/rpc:.* { json2nameValue($EVENT,'',$JSONMAP) }
  $DEVICETOPIC/status/mqtt:.* { json2nameValue($EVENT, 'mqtt_', $JSONMAP) }
  $DEVICETOPIC/status/sys:.* { json2nameValue($EVENT, 'sys_', $JSONMAP) }
  $DEVICETOPIC/status/switch_0:.* { $EVENT =~ s/"output":true/"state":"on"/g; $EVENT =~ s/"output":false/"state":"off"/g; json2nameValue($EVENT, 'switch_', $JSONMAP) }
  $DEVICETOPIC/status/cloud:.* {}
  $DEVICETOPIC/rpc:.* { json2nameValue($EVENT, 'req_', $JSONMAP, 'in_mode')}
  $DEVICETOPIC/status/input_0:.* { json2nameValue($EVENT, 'input_', $JSONMAP) }
  fhem2shelly/rpc:.* {}
  room      Draussen
  setList    toggle:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Toggle","params": {"id":0}}
  off:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Set","params": {"id":0,"on":false}}
  on:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Set","params": {"id":0,"on":true}}
  on-for-timer $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Set","params": {"id":0,"on":true,"toggle_after":$EVTPART1}}
  off-for-timer $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Switch.Set","params": {"id":0,"on":false,"toggle_after":$EVTPART1}}
  in_mode:toggle,flip,detached {fhem("sleep 0.2; get $NAME in_mode"); my $val = $EVTPART1 ne 'toggle' ? $EVTPART1 : ReadingsVal($NAME,'in_mode','flip') eq 'flip' ? 'detached':'flip'; qq($DEVICETOPIC/rpc {"id":1,"src":"fhem2shelly","method":"Switch.SetConfig","params": {"id":0, "config": {"in_mode": "$val"}}})}
  x_update:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Shelly.Update","params": {"stage":"stable"}}
  x_reboot:noArg $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Shelly.Reboot"}
  x_eco:true,false $DEVICETOPIC/rpc {"id":0,"src":"fhem2shelly","method":"Sys.SetConfig","params": {"config": {"device": {"eco_mode": $EVTPART1}}}}
  setStateList on off toggle on-for-timer off-for-timer
  webCmd    :

So kann ich mein notify dann wohl vergessen...

Hat jemand eine Idee?

Kornelius777

Als Workaround habe ich jetzt mal die Zeile
if (exists($defs{'at_Licht_Hoflicht_off'})) {fhem("delete at_Licht_Hoflicht_off")}auskommentiert.

Aber... Lösung ist das ja eigentlich keine...

betateilchen

Verwende eine sinnvolle regex in Deinem notify.

Derzeit triggert Dein notify auf jeden beliebigen event des Schalters.

DEF        OUT.Licht_Hoflicht:.*
Das ist kein mqtt Problem.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

Hallo,

Zitat von: Kornelius777 am 08 September 2025, 17:19:09Hat jemand eine Idee?

Das ausschalten im Shelly konfigurieren und in FHEM noch etwas üben.

Gruß Thomas




kgie

Ich weiß leider nicht genau was dein Shelly genau ist. Es wird also von irgendwo eingeschaltet und FHEM soll es wieder ausknipsen, ja? Und dieser Zustand spiegelt sich in dem Reading 'state'?

Ich würde da ein watchdog device nehmen, die Beschreibung findet sich ja in der FHEM commandref. In deinem Fall etwa so (aber guck bitte auch in die Doku):
define hoflicht_ausmachen watchdog OUT.Licht_Hoflicht:on 00:30 OUT.Licht_Hoflicht:off set OUT.Licht_Hoflicht off
Man muss noch das Attribut 'autoRestart' auf 1 setzen, sonst watcht der nur einmal. Wenn die Regex (OUT.Licht_Hoflicht:on etc.) nicht passen, dann im Event Monitor mal gucken, was da kommt. (Ich würde bei den Namen auch möglichst keine Punkte (.) nehmen, weil die in einer Regex ja für ein beliebiges Zeichen stehen - macht hier aber wohl nichts.)

Kornelius777

Danke für Eure Antworten.

Ich habe es jetzt so gelöst, dass ich mein notify angepasst habe. $EVENT wollte zusätzlich mit rein. Das notify sieht jetzt so aus:

OUT.Licht_Hoflicht:.* {
 
  my $state = ReadingsVal("OUT.Licht_Hoflicht", "state", "undef");
#  Log3 ("$SELF", 3, "$SELF Shelly OUT.Licht_Hoflicht wurde geschaltet: $state - $EVENT");
 
  if ( ( ("$state" eq "on") && ("$EVENT" eq "on") ) || ( ("$state" eq "set_on") && ("$EVENT" eq "on") ) )
  {
    if (exists($defs{'at_Licht_Hoflicht_off'})) {fhem("delete at_Licht_Hoflicht_off")}
    fhem("define at_Licht_Hoflicht_off at +00:30:00 set OUT.Licht_Hoflicht off");;
    fhem("attr at_Licht_Hoflicht_off room Draussen");;
  }
  if ( ( ("$state" eq "off") && ("$EVENT" eq "off") ) || ( ("$state" eq "set_off") && ("$EVENT" eq "off") ) )
  {
    if (exists($defs{'at_Licht_Hoflicht_off'})) {fhem("delete at_Licht_Hoflicht_off")}
  }
}

Kornelius777

Zitat von: TomLee am 08 September 2025, 17:33:02Das ausschalten im Shelly konfigurieren und in FHEM noch etwas üben.

Überleg dir mal, wie hilfreich diese Antwort wohl in einem fhem-Forum sein mag.
Konstruktiv ist sie jedenfalls nicht.

Nobbynews

#8
Zitat von: Kornelius777 am 09 September 2025, 06:46:34OUT.Licht_Hoflicht:.* {

    if (exists($defs{'at_Licht_Hoflicht_off'})) {fhem("delete at_Licht_Hoflicht_off")}
    fhem("define at_Licht_Hoflicht_off at +00:30:00 set OUT.Licht_Hoflicht off");;
    fhem("attr at_Licht_Hoflicht_off room Draussen");;
  }
}
Warum das at löschen und neu anlegen.
Schon mal über modify nachgedacht?
https://fhem.de/commandref_DE.html#modify

Das delete könntest Du Dir vermutlich auch sparen und statt dessen defmod verwenden.
https://fhem.de/commandref_DE.html#defmod

Und mit dem Parameter -silent ersparst Du Dir das rote ? wegen der Änderung an der config. Gibt es bei define, defmod und attr.

Edit:
Das Ausschalten des Hoflichtes würde ich über einen watchdog realisieren.
Damit spart man sich das hin und her schieben von Definitionen etc.
https://fhem.de/commandref_DE.html#watchdog

RalfRog

Zitat von: Kornelius777 am 09 September 2025, 06:49:58Überleg dir mal, wie hilfreich diese Antwort wohl in einem fhem-Forum sein mag.
Konstruktiv ist sie jedenfalls nicht.

So schlecht finde ich den Hinweis auf den Shelly von TomLee nicht. War auch mein erster Gedanke, denn manchmal hat man Alternativen nicht auf dem Schirm.

Gruß Ralf
FHEM auf Proxmox VM Bookworm (Futro S740) - nanoCUL, HM-MOD-RPI-PCB und MAX!Cube über LAN
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder sowie Shelly 3EM, 1PM, PlugS und IT Schaltsteckdosen

betateilchen

#10
Zitat von: Kornelius777 am 09 September 2025, 06:46:34Danke für Eure Antworten.

Ich habe es jetzt so gelöst, dass ich mein notify angepasst habe. $EVENT wollte zusätzlich mit rein. Das notify sieht jetzt so aus:

Kann man so machen, aber es ist doch wenig sinnvoll, dafür ein at zu definieren und quasi die SetExtensions nachzubauen, die vom Shelly-device ohnehin schon unterstützt werden.

Das device kennt "on-for-timer" und Shelly kennt grundsätzlich auch zu "on" einen zusätzlichen Parameter, mit dem man das Ausschalten schon beim Einschalten mitgeben kann, indem man "on,1800" als payload der mqtt Nachricht schickt. Vielleicht würde sogar die Verwendung von "eventMap" Deine Aufgabe schon lösen (ungeprüft).

Zitat von: Kornelius777 am 09 September 2025, 06:49:58Überleg dir mal, wie hilfreich diese Antwort wohl in einem fhem-Forum sein mag.
Konstruktiv ist sie jedenfalls nicht.

Toms Vorschlag war nicht so schlecht (auch wenn ich persönlich ihn nicht umsetzen würde). Es gibt eine Reihe Möglichkeiten, Deine Aufgabenstellung völlig ohne notify und ohne zusätzlichen perl-Code (quasi ziemlich umständlich 'von hinten durch die Brust ins Auge') zu lösen.
Offenbar fehlt Dir aber derzeit noch das Verständnis, was die FHEM-Bordmittel alles schon bereitstellen und auch das Verständnis dazu, wie mqtt und ein Shelly überhaupt zusammenarbeiten.

Jedenfalls fand ich Deine Antwort sehr viel weniger konstruktiv als den Vorschlag von Tom.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!