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
Zeig doch mal ein list des Saugroboters.
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
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
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.
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)
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.
Weil "DOELSEIF" nicht korrekt geschrieben ist ?
ZitatDOELSEIf ([BLACKVIEW_TAB_8E:batteryPercent] > 99)
(set HUEDevice26 off)
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.
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
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_2
ausführen.
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.
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."