[Gelöst] Ausführungsteil wird nicht ausgeführt

Begonnen von Superposchi, 08 Mai 2023, 11:13:59

Vorheriges Thema - Nächstes Thema

Superposchi

Hallo, ich habe jetzt schon mit dem 2. DOIF das Probleme, dass die Bedingung korrekt erkannt aber der Ausführungsteil einfach ignoriert wird. Der STATE ändert sich korrekt in die passende cmd-Anzeige, doch der Befehl wird nicht ausgeführt. Kopiere ich den Befehlsteil ohne die Klammern in die Befehlszeile von Fhem und führe ihn mit Enter aus, wird der Befehl korrret abgesetzt und ausgeführt. Ich verstehe es nicht.

Bei dem einen DOIF handelt es sich um den Start meines Saugroboters und beim anderen um das Schalten eines HUE-Zwischensteckers. Dabei ist es noch kurioser, da der 1. Zweig zum Einschalten des HUEDevices funktioniert und der 2. Zweig mit dem Ausschaltbefehl wie geschrieben nicht ausgeführt wird obwohl die Bedingung korrekt erkannt wird und der STATE sich ändert.

Anbei mal ein List des DOIF's für den Saugroboter, vielleicht findet ja jemand einen Grund:
Internals:
  CFGFN     
  DEF        (([?saugroboter:switch_absend] eq "on") and [11:02|Mo])
          (set saugroboter goto 22350,29500)
  FUUID      64580484-f33f-7706-9a87-8bd4d06210407152
  MODEL      FHEM
  NAME      saugroboter_control_wischen
  NOTIFYDEV  global
  NR        201381
  NTFY_ORDER 50-saugroboter_control_wischen
  STATE      cmd_1
  TYPE      DOIF
  VERSION    27202 2023-02-11 13:41:29
  eventCount 30
  READINGS:
    2023-05-08 11:04:38  cmd            1
    2023-05-08 11:04:38  cmd_event      set_cmd_1
    2023-05-08 11:04:38  cmd_nr          1
    2023-05-08 11:04:38  error          29500: Unknown command 29500, try help.
    2023-05-08 11:00:55  mode            enabled
    2023-05-08 11:04:38  state          cmd_1
    2023-05-08 11:02:00  timer_01_c01    09.05.2023 11:02:00|Mo
    2023-05-08 11:04:38  wait_timer      08.05.2023 11:34:38 cmd_1 set_cmd_1
  Regex:
    accu:
    bar:
    collect:
  attr:
    cmdState:
    repeatcmd:
      1800
    wait:
      0:
        0
        150
      1:
        0
      2:
        0
    waitdel:
  condition:
    0          (::ReadingValDoIf($hash,'saugroboter','switch_absend') eq "on") and ::DOIF_time_once($hash,0,$wday,"Mo")
  days:
    0          Mo
  do:
    0:
      0          set saugroboter goto 22350,29500
    1:
  helper:
    NOTIFYDEV  global
    event      timer_1
    globalinit 1
    last_timer 1
    sleepdevice set_cmd_1
    sleepsubtimer 0
    sleeptimer 0
    timerdev 
    timerevent timer_1
    triggerDev
    timerevents:
      timer_1
    timereventsState:
      timer_1
    triggerEvents:
      timer_1
    triggerEventsState:
      timer_1
  interval:
  intervalfunc:
  localtime:
    0          1683622920
  realtime:
    0          11:02:00
  time:
    0          11:02:00
  timeCond:
    0          0
  timer:
    0          0
  timers:
    0          0
  triggertime:
    1683622920:
      localtime  1683622920
      hash:
  uiState:
  uiTable:
Attributes:
  alias      Nasswischen
  do        always
  group      Reinigung
  room      Steuerung->Sonstiges

betateilchen

Zeig doch mal ein list des Saugroboters.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

MadMax-FHEM

Zitat2023-05-08 11:04:38   error           29500: Unknown command 29500, try help.

Ich kenne DOIF ja nicht so gut und wüsste nicht, wie die korrekte Syntax lautet/lauten müsste...
...aber für mich sieht es so aus, als würde DOIF mit dem Komma im set-Befehl nicht "zurecht kommen"...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Superposchi

#3
Hier ein List des saugroboters - auch wenn es da nicht dran liegen kann, denn der Befehl wird ja aus der Befehlszeile heraus ordnungsgemäß ausgeführt.
Internals:
  DEF        192.168.178.158 66554a4c3263616776466e7639514f76
  FD        20
  FUUID      63e6c7fa-f33f-7706-79a8-946e837c17556310
  FVERSION  72_XiaomiDevice.pm:0.230210/2020-10-25
  NAME      saugroboter
  NR        91
  STATE      Docked (0 Tage)
  TYPE      XiaomiDevice
  eventCount 239
  hardware  Linux
  mac        64:90:C1:14:98:64
  model      roborock.vacuum.a10
  token      66554a4c3263616776466e7639514f76
  OLDREADINGS:
    2023-05-03 10:31:13  Room_Kueche    0
    2023-04-29 08:49:58  Room_Schlafzimmer 0
    2023-04-29 13:27:10  Room_Wohnzimmer 0
    2023-05-04 21:52:28  Roomlist        19 17
    2023-05-07 03:23:50  batteryPercent  99
    2023-05-04 21:52:28  comandline      segment 19 17
    2023-05-03 10:31:13  command        start
    2023-05-03 17:47:14  consumables_filter 20
    2023-05-03 17:47:14  consumables_main_brush 60
    2023-05-06 10:47:14  consumables_sensors 89
    2023-05-03 17:47:14  consumables_side_brush 40
    2023-02-10 00:01:00  days            27
    2023-05-01 03:28:49  device_uptime  0.07
    2023-05-04 23:04:21  dnd            on
    2023-03-31 19:33:06  dnd_enabled    on
    2023-05-08 11:03:43  error          actionlocked
    2023-04-28 16:17:25  event          target_not_reachable
    2023-05-07 03:12:20  history_0      2023-05-07 03:00:00: 12.24m² in 0.19h, finished cleaning
    2023-05-07 03:12:20  history_1      2023-05-06 11:47:34: 0.00m² in 0.01h, not finished
    2023-05-07 03:12:20  history_2      2023-05-06 11:41:49: 0.00m² in 0.00h, not finished
    2023-05-07 03:12:20  history_3      2023-05-06 11:40:25: 0.00m² in 0.01h, not finished
    2023-05-07 03:12:20  history_4      2023-05-06 09:33:43: 29.42m² in 0.51h, finished cleaning
    2023-05-07 03:12:20  history_5      2023-05-03 10:31:19: 29.18m² in 0.51h, finished cleaning
    2023-05-07 03:12:20  history_6      2023-04-29 13:27:21: 3.17m² in 0.09h, finished cleaning
    2023-05-07 03:12:20  history_7      2023-04-29 09:02:29: 12.63m² in 0.23h, not finished
    2023-05-07 03:12:20  history_8      2023-04-29 08:50:11: 9.46m² in 0.15h, finished cleaning
    2023-05-07 03:12:20  history_9      2023-04-28 16:21:04: 12.13m² in 0.25h, finished cleaning
    2023-05-07 03:04:20  in_cleaning    yes
    2023-05-08 11:19:45  in_fresh_state  no
    2023-05-08 11:19:45  in_returning    yes
    2023-05-07 03:12:20  last_clean_area 12.24
    2023-05-07 03:12:20  last_clean_time 0.19
    2023-05-07 03:12:20  last_timestamp  1683421200
    2023-05-08 11:19:45  state          Returning to base
    2023-05-08 11:22:52  state_old      Waiting
    2023-03-31 19:36:55  switch_absend  off
    2023-03-31 19:36:56  switch_timer    off
    2023-05-07 03:12:20  total_clean_area 6421.32
    2023-05-07 03:12:20  total_clean_time 119.44
    2023-05-07 03:12:20  total_cleans    438
    2023-05-07 01:47:11  wifi_rssi      -42
  READINGS:
    2023-04-04 17:48:11  Room_Bad        0
    2023-04-22 20:36:00  Room_Diele      0
    2023-05-04 21:52:28  Room_Kueche    17
    2023-05-04 22:12:21  Room_Schlafzimmer 20
    2023-05-04 21:52:28  Room_Wohnzimmer 19
    2023-05-04 22:12:21  Roomlist        19 20 17
    2022-12-20 13:06:15  app_bom        A.03.0097
    2022-12-20 13:06:15  app_language    en
    2022-12-20 13:06:15  app_location    de
    2022-12-20 13:06:15  app_logserver  awsde0.fds.api.xiaomi.com
    2022-12-20 13:06:15  app_name        custom_A.03.0097_CE
    2022-12-20 13:06:15  app_timezone    Europe/Berlin
    2022-12-20 13:06:15  app_wifiplan    DE
    2023-05-07 03:28:50  batteryPercent  100
    2022-12-20 13:06:18  batteryState    ok
    2022-12-20 13:06:15  carpet_high    500
    2022-12-20 13:06:15  carpet_integral 450
    2022-12-20 13:06:15  carpet_low      400
    2022-12-20 13:06:15  carpet_mode    on
    2022-12-20 13:06:15  carpet_stall_time 10
    2023-03-17 09:13:15  cleaning_mode  auto
    2023-05-04 22:12:21  comandline      segment 19 20 17
    2023-05-04 21:52:25  command        segment
    2023-05-08 03:47:14  consumables_filter 19
    2023-05-08 03:47:14  consumables_main_brush 59
    2023-05-07 03:47:14  consumables_sensors 88
    2023-05-08 03:47:14  consumables_side_brush 39
    2023-02-10 23:51:18  counter        0
    2023-05-04 22:24:05  days            0
    2022-12-20 13:06:12  device_firmware 3.5.8_6246
    2022-12-20 13:06:15  device_fw_features 111,112,113,114,115,116,117,118,119,120,121,122,123,124,125
    2023-05-04 01:47:11  device_uptime  22.37
    2023-05-05 07:01:43  dnd            off
    2023-05-05 11:47:14  dnd_enabled    off
    2023-03-31 18:55:06  dnd_end        07:00
    2023-03-31 18:55:00  dnd_start      23:00
    2023-05-08 11:03:46  error          none
    2023-04-28 16:40:34  error_code      None
    2023-05-03 11:03:21  event          back_to_dock
    2023-03-17 09:13:15  fan_power      106
    2023-05-08 03:47:14  history_0      2023-05-08 03:00:00: 0.25m² in 0.02h, finished cleaning
    2023-05-08 03:47:14  history_1      2023-05-07 03:00:00: 12.24m² in 0.19h, finished cleaning
    2023-05-08 03:47:14  history_2      2023-05-06 11:47:34: 0.00m² in 0.01h, not finished
    2023-05-08 03:47:14  history_3      2023-05-06 11:41:49: 0.00m² in 0.00h, not finished
    2023-05-08 03:47:14  history_4      2023-05-06 11:40:25: 0.00m² in 0.01h, not finished
    2023-05-08 03:47:14  history_5      2023-05-06 09:33:43: 29.42m² in 0.51h, finished cleaning
    2023-05-08 03:47:14  history_6      2023-05-03 10:31:19: 29.18m² in 0.51h, finished cleaning
    2023-05-08 03:47:14  history_7      2023-04-29 13:27:21: 3.17m² in 0.09h, finished cleaning
    2023-05-08 03:47:14  history_8      2023-04-29 09:02:29: 12.63m² in 0.23h, not finished
    2023-05-08 03:47:14  history_9      2023-04-29 08:50:11: 9.46m² in 0.15h, finished cleaning
    2023-05-07 03:12:20  in_cleaning    no
    2023-05-08 11:23:03  in_fresh_state  yes
    2023-05-08 11:23:03  in_returning    no
    2022-12-20 13:06:18  lab_status      yes
    2023-05-08 03:02:12  last_clean_area 0.25
    2023-05-08 03:02:12  last_clean_time 0.02
    2023-05-08 03:47:14  last_timestamp  1683507600
    2023-04-28 16:38:04  lock_status    off
    2022-12-20 13:06:18  map_present    yes
    2023-04-29 09:22:50  mop_forbidden_enable no
    2023-04-04 18:28:03  power          on
    2022-12-21 12:39:12  serial_number  R0402S01502669
    2023-05-08 11:23:03  state          Docked
    2023-05-08 11:23:03  state_old      Returning to base
    2023-04-24 19:34:05  switch          on
    2023-05-04 22:05:45  switch_absend  on
    2023-05-04 21:59:46  switch_night    on
    2023-03-31 19:36:56  switch_swiping  off
    2023-05-04 22:38:01  switch_timer    on
    2023-03-31 19:36:56  switch_wartung  off
    2022-12-21 12:39:12  timezone        Europe/Berlin
    2023-05-08 03:47:14  total_clean_area 6421.57
    2023-05-08 03:47:14  total_clean_time 119.46
    2023-05-08 03:47:14  total_cleans    439
    2022-12-20 13:06:15  volume          90
    2023-04-29 09:22:50  water_box_carriage_status no
    2023-03-17 09:13:15  water_box_mode  auto
    2023-04-29 09:22:50  water_box_status no
    2022-12-20 13:06:12  wifi_auth_fail_count 0
    2022-12-20 13:06:12  wifi_conn_fail_count 0
    2022-12-20 13:06:12  wifi_conn_success_count 1
    2022-12-20 13:06:12  wifi_dhcp_fail_count 0
    2023-05-08 01:47:10  wifi_rssi      -47
    2023-04-28 16:05:33  wifi_state      online
  helper:
    ConnectionState connected
    cleanrecord 10
    crypt      AES
    delay      60
    dev        132a
    historydays 10
    id        9c81
    ip        192.168.178.158
    last_read  1683539403
    packetid  4087
    port      54321
    sequence  -2
    timers    0
    token      66554a4c3263616776466e7639514f76
    day:
    history:
    packet:
      1          device_info
      10        app_get_locale
      102        get_status
      103        get_status
      104        get_status
      105        get_consumable
      106        get_clean_summary
      11        get_status
      12        device_info
      122        get_status
      123        get_status
      124        get_status
      125        get_consumable
      126        get_clean_summary
      13        wifi_stats
      14        get_consumable
      142        get_status
      143        get_status
      144        get_status
      145        get_consumable
      146        get_clean_summary
      15        get_clean_summary
      16        get_dnd_timer
      162        get_status
      163        get_status
      164        get_status
      165        get_consumable
      166        get_clean_summary
      2          wifi_stats
      3          get_consumable
      4          get_clean_summary
      4084      get_clean_record8
      4085      get_clean_record9
      4086      get_status
      42        get_status
      43        get_status
      44        get_status
      45        get_consumable
      46        get_clean_summary
      5          get_dnd_timer
      6          get_timer
      62        get_status
      63        get_status
      64        get_status
      65        get_consumable
      66        get_clean_summary
      7          get_sound_volume
      8          get_carpet_mode
      82        get_status
      83        get_status
      84        get_status
      85        get_consumable
      86        get_clean_summary
      9          get_fw_features
Attributes:
  alias      Saugroboter
  event-on-change-reading .*
  group      Geräte
  icon      vacuum_top
  oldreadings .*
  room      Wohnung->Wohnzimmer
  stateFormat state (days Tage)
  subType    VacuumCleaner
  timestamp-on-change-reading .*
  userReadings state_old { OldReadingsVal("saugroboter", "state", ReadingsVal("saugroboter", "state", 0)) },
counter {{maxNum(ReadingsVal("saugroboter","counter_wohnzimmer",0),ReadingsVal("saugroboter","counter_schlafzimmer",0),ReadingsVal("saugroboter","counter_kueche",0),ReadingsVal("saugroboter","counter_diele",0),ReadingsVal("saugroboter","counter_bad",0))}},
Roomlist
{my @r = ('Room_Wohnzimmer','Room_Schlafzimmer','Room_Kueche','Room_Diele','Room_Bad');
my @a;
for (@r){
push (@a,ReadingsNum($name,$_,0)) if ReadingsNum($name,$_,0) > 0;}
return join q( ), @a;},
comandline
{my $var=sprintf("%s %s",ReadingsVal("saugroboter","command",""),ReadingsVal("saugroboter","Roomlist",""));
$var =~ s/\ 0//g;
return $var;},
  verbose    1

@MadMax-FHEM
Das mit dem Komma wäre eine Möglichkeit, kann ich aber eigentlich ausschließen, da bei dem anderen nicht funktionieren DOIF lediglich ein "set HUEDevice26 on" (funktioniert) im ersten Zweig und ein "set HUEDdevice26 off" (funktioniert nicht) im zweiten Zweig steht. Also kein Komma vorhanden ist. Dabei ist halt interessant, dass das on ganz normal funktioniert und das off eben nur über die Befehlszeile von Fhem. Auch hier wird die Bedingung erkannt und der Zweig wird geschaltet (das STATE schatet auf cmd_2), nur der Befehl wird eben aus dem DOIF nicht ausgeführt.

Die Frage die ich mir stelle, wird der Befehl nicht ausgeführt oder erst gar nicht gesendet?
Kann man prüfen ob ein Befehl gesendet wird? Wann entsteht ein Event - beim Senden oder Ausführen?
Im EventMonitor wird beim zweiten Zweig (dem nicht funktionierenden) gar nichts angezeigt.

Hier doch mal das List des zweiten DOIF mit Problemen:
Internals:
   DEF        ([BLACKVIEW_TAB_8E:batteryPercent] < 5)
     (set HUEDevice26 on)
DOELSEIf ([BLACKVIEW_TAB_8E:batteryPercent] > 99)
     (set HUEDevice26 off)
   FUUID      6421c0cc-f33f-7706-80fd-899dde6c5301516c
   FVERSION   98_DOIF.pm:0.272020/2023-02-11
   MODEL      FHEM
   NAME       hmi_wz_control
   NOTIFYDEV  global,BLACKVIEW_TAB_8E
   NR         305
   NTFY_ORDER 50-hmi_wz_control
   STATE      cmd_2
   TYPE       DOIF
   VERSION    27202 2023-02-11 13:41:29
   eventCount 580
   READINGS:
     2023-05-08 11:58:03   Device          BLACKVIEW_TAB_8E
     2023-05-08 12:01:15   cmd             2
     2023-05-08 12:01:15   cmd_event       set_cmd_2
     2023-05-08 12:01:15   cmd_nr          2
     2023-05-08 11:58:03   e_BLACKVIEW_TAB_8E_batteryPercent 98
     2023-04-30 19:34:43   mode            enabled
     2023-05-08 12:01:15   state           cmd_2
   Regex:
     accu:
     bar:
     collect:
     cond:
       BLACKVIEW_TAB_8E:
         0:
           batteryPercent ^BLACKVIEW_TAB_8E$:^batteryPercent:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'BLACKVIEW_TAB_8E','batteryPercent') < 5
   do:
     0:
       0          set HUEDevice26 on
     1:
       0         
   helper:
     NOTIFYDEV  global,BLACKVIEW_TAB_8E
     event      batteryPercent: 98,display: on,lock: unlocked
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   BLACKVIEW_TAB_8E
     timerevent batteryPercent: 98,display: on,lock: unlocked
     triggerDev BLACKVIEW_TAB_8E
     timerevents:
       batteryPercent: 98
       display: on
       lock: unlocked
     timereventsState:
       batteryPercent: 98
       display: on
       lock: unlocked
     triggerEvents:
       batteryPercent: 98
       display: on
       lock: unlocked
     triggerEventsState:
       batteryPercent: 98
       display: on
       lock: unlocked
   internals:
   perlblock:
   readings:
     all         BLACKVIEW_TAB_8E:batteryPercent
   trigger:
   uiState:
   uiTable:
Attributes:
   alias      Wohnzimmertablet Strom
   do         always
   group      HMI
   icon       tablet
   room       Steuerung->Multimedia

Superposchi

Das mit dem Komma war doch ein Treffer. Habe es noch mal nachgelesen und entsprechend maskiert.
Nun funktioniert das eine DOIF schon mal.

Frage ist, warum das andere DOIF mit dem "set HUEDevice off" nicht funktioniert.

betateilchen

Zitat von: Superposchi am 08 Mai 2023, 12:00:05Hier ein List des saugroboters - auch wenn es da nicht dran liegen kann,

ich wollte eigentlich nur wissen, ob das "absend" wirklich richtig ist  8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Superposchi

Ja, das ist korrekt.
Ich baue in solche Funktionen gerne einen Schalter mit ein um sie schnell und einfach per HMI (FTUI3) ein-/ausschalten zu können.

Da es für den Saugroboter mehrere Startoptionen gibt sind diese als Reading mit dem Schema "switch_xxx" angelegt. Das absend steht in dem Fall für Abwesenheit.

Aber das DOIF funktioniert ja inzwischen dank dem Hinweis mit dem Komma.
Frage ist jetzt also nur noch warum das "set HUEDevice26 off" aus dem anderen DOIF nicht funktioniert.

TomLee

Weil "DOELSEIF" nicht korrekt geschrieben ist ?

ZitatDOELSEIf ([BLACKVIEW_TAB_8E:batteryPercent] > 99)
     (set HUEDevice26 off)

Superposchi

Ich habe es geändert und den Zwischenstecker manuell eingeschaltet.
Ich glaube zwar weniger, dass es daran lag (sonst hätte er ja eigentlich den Zweig gar nicht korrekt erkennen dürfen), aber teste es einfach mal aus. Schätze mal so in max. zwei Stunden sollte der Akku wieder die 99% erreichen und das DOIF auslösen.

MadMax-FHEM

ZitatSchätze mal so in max. zwei Stunden sollte der Akku wieder die 99% erreichen und das DOIF auslösen.
Nicht 99 sondern 100: > 99 -> 100 ;)

EDIT: (zum Test) evtl. mal runter setzen? 8)

Gruß, Joachim

FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

TomLee

Zitat von: MadMax-FHEM am 08 Mai 2023, 13:54:32EDIT: (zum Test) evtl. mal runter setzen? 8)

Oder einfach ein
set hmi_wz_control cmd_2ausführen.

Superposchi

Es ist tatsächlich das klein geschriebene f.

Ich verstehe es nicht. Nach jeder objektiven Logik hätte er dann eigentlich auch die Bedingung nicht akzeptieren dürfen bzw. den STATE nicht auf cmd_2 ändern dürfen.

Gibt es in Fhem überhaupt eine Logik?

Dennoch, Problem gelöst, Danke für die Hilfe an alle.

betateilchen

Zitat von: Superposchi am 08 Mai 2023, 15:32:03Gibt es in Fhem überhaupt eine Logik?

Natürlich gibt es die: "Mach es richtig, dann funktioniert es."
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!