Hallo,
ich habe mir einen einfachen Counter gebastelt in dem ich prüfe ob ein selbst erstelltes Reading eines Devices zu einem bestimmten Zeitpunkt einen bestimmten Wert aufweist. Bei 0 soll er das Reading auf 1 setzen, bei 1 auf 2 setzen und bei 2 auf drei setzen. Klappt alles hervorragend solange ich für den Zeitpunkt eine Zeitspanne von mehr als 15 Minuten angebe. Stelle ich es auf eine fixe Uhrzeit ein klappt es auf einmal nicht mehr.
Warum macht es einen Unterschied ob die Uhrzeit fix oder als Zeitspanne angegeben ist?
Hier das List vom DOIF wie es funktioniert, also mit Zeitspanne:
Internals:
.FhemMetaInternals 1
DEF (([02:00-02:29]) and ([?Saugroboter:counter] eq "0"))
(setreading Saugroboter counter 1)
DOELSEIF (([01:30-01:59]) and ([?Saugroboter:counter] eq "1"))
(setreading Saugroboter counter 2)
DOELSEIF (([01:00-01:29]) and ([?Saugroboter:counter] eq "2"))
(setreading Saugroboter counter 3)
FUUID 5fe98de0-f33f-793a-66fb-730b1a5167487477
FVERSION 98_DOIF.pm:0.238100/2021-02-23
MODEL FHEM
NAME Steuerung_Saugroboter_Counter
NOTIFYDEV global
NR 152
NTFY_ORDER 50-Steuerung_Saugroboter_Counter
STATE initialized
TYPE DOIF
VERSION 23810 2021-02-23 20:14:35
.attraggr:
.attrminint:
READINGS:
2021-03-23 09:21:08 cmd 0
2021-03-23 09:21:08 mode enabled
2021-03-23 09:21:08 state initialized
2021-03-23 09:21:08 timer_01_c01 24.03.2021 02:00:00
2021-03-23 09:21:08 timer_02_c01 24.03.2021 02:29:00
2021-03-23 09:21:08 timer_03_c02 24.03.2021 01:30:00
2021-03-23 09:21:08 timer_04_c02 24.03.2021 01:59:00
2021-03-23 09:21:08 timer_05_c03 24.03.2021 01:00:00
2021-03-23 09:21:08 timer_06_c03 24.03.2021 01:29:00
Regex:
accu:
attr:
cmdState:
wait:
0:
60
1:
60
2:
60
waitdel:
condition:
0 (::DOIF_time($hash,0,1,$wday,$hms)) and (::ReadingValDoIf($hash,'Saugroboter','counter') eq "0")
1 (::DOIF_time($hash,2,3,$wday,$hms)) and (::ReadingValDoIf($hash,'Saugroboter','counter') eq "1")
2 (::DOIF_time($hash,4,5,$wday,$hms)) and (::ReadingValDoIf($hash,'Saugroboter','counter') eq "2")
days:
do:
0:
0 setreading Saugroboter counter 1
1:
0 setreading Saugroboter counter 2
2:
0 setreading Saugroboter counter 3
3:
helper:
DEVFILTER ^global$
NOTIFYDEV global
globalinit 1
last_timer 6
sleeptimer -1
interval:
0 -1
1 0
2 -1
3 2
4 -1
5 4
intervalfunc:
localtime:
0 1616547600
1 1616549340
2 1616545800
3 1616547540
4 1616544000
5 1616545740
realtime:
0 02:00:00
1 02:29:00
2 01:30:00
3 01:59:00
4 01:00:00
5 01:29:00
time:
0 02:00:00
1 02:29:00
2 01:30:00
3 01:59:00
4 01:00:00
5 01:29:00
timeCond:
0 0
1 0
2 1
3 1
4 2
5 2
timer:
0 0
1 0
2 0
3 0
4 0
5 0
timers:
0 0 1
1 2 3
2 4 5
triggertime:
1616544000:
localtime 1616544000
hash:
1616545740:
localtime 1616545740
hash:
1616545800:
localtime 1616545800
hash:
1616547540:
localtime 1616547540
hash:
1616547600:
localtime 1616547600
hash:
1616549340:
localtime 1616549340
hash:
uiState:
uiTable:
Attributes:
alias Steuerung Counter
group Saugroboter
room Steuerung->Sonstiges
verbose 4
wait 60:60:60
P.S. Das Reading ist Teil eines Devices für einen Roborock Saugroboter. Hier das List dazu:
Internals:
.FhemMetaInternals 1
DEF 192.168.178.158 476c4f6f67484b634f49626178497658
FD 11
FUUID 5fc174fc-f33f-793a-c100-0ab0fe1a411fdbc6
FVERSION 72_XiaomiDevice.pm:0.230210/2020-10-25
NAME Saugroboter
NR 28
STATE Status: Docked <br> Letzte Reinigung: 1 Tage
TYPE XiaomiDevice
hardware Linux
mac 64:90:C1:14:98:64
model roborock.vacuum.a10
token 476c4f6f67484b634f49626178497658
.attraggr:
.attreocr:
.*
.attrminint:
.attrtocr:
.*
READINGS:
2020-12-01 13:44:19 app_bom A.03.0097
2020-12-01 13:44:19 app_language en
2020-12-01 13:44:19 app_location de
2020-12-01 13:44:19 app_logserver awsde0.fds.api.xiaomi.com
2020-12-01 13:44:19 app_name custom_A.03.0097_CE
2020-12-01 13:44:19 app_timezone Europe/Berlin
2020-12-01 13:44:19 app_wifiplan DE
2021-03-14 15:45:44 batteryPercent 100
2020-12-01 14:19:23 batteryState ok
2020-12-01 13:44:19 carpet_high 500
2020-12-01 13:44:19 carpet_integral 450
2020-12-01 13:44:19 carpet_low 400
2020-12-01 13:44:19 carpet_mode on
2020-12-01 13:44:19 carpet_stall_time 10
2021-02-02 11:55:50 cleaning_mode balanced
2021-03-06 13:12:21 consumables_filter 86
2021-02-25 16:09:46 consumables_main_brush 93
2021-03-14 15:28:38 consumables_sensors 73
2021-03-13 12:28:38 consumables_side_brush 89
2021-03-23 02:00:00 counter 1
2020-11-15 16:25:05 current_sound chinese
2021-02-28 09:58:26 device_firmware 3.5.8_5690
2020-12-01 13:44:19 device_fw_features 111,112,113,114,115,116,117,118,119,120,121,122,123,124,125
2021-03-10 03:28:35 device_uptime 0.06
2021-03-23 09:00:55 dnd off
2020-12-01 13:44:19 dnd_enabled on
2020-12-01 13:44:19 dnd_end 09:00
2020-12-01 13:44:19 dnd_start 20:00
2020-12-01 14:19:23 error none
2020-12-12 14:29:24 error_code None
2021-02-27 10:32:13 event start_with_water_box
2021-02-02 11:55:50 fan_power 102
2021-03-14 15:10:44 history_0 2021-03-14 14:24:10: 17.43m² in 0.32h, finished cleaning
2021-03-14 15:10:44 history_1 2021-03-13 11:23:37: 27.59m² in 0.53h, finished cleaning
2021-03-14 15:10:44 history_2 2021-03-06 12:33:46: 18.02m² in 0.33h, finished cleaning
2021-03-14 15:10:44 history_3 2021-02-27 15:47:28: 0.96m² in 0.01h, not finished
2021-03-14 15:10:44 history_4 2021-02-27 10:32:10: 17.50m² in 0.30h, finished cleaning
2021-03-14 15:10:44 history_5 2021-02-26 18:52:04: 0.50m² in 0.01h, not finished
2021-03-14 15:10:44 history_6 2021-02-26 16:56:57: 19.71m² in 0.40h, finished cleaning
2021-03-14 15:10:44 history_7 2021-02-26 10:58:10: 20.82m² in 0.35h, finished cleaning
2021-03-14 15:10:44 history_8 2021-02-25 15:13:33: 30.65m² in 0.52h, finished cleaning
2021-03-14 15:10:44 history_9 2021-02-21 17:00:58: 30.86m² in 0.54h, finished cleaning
2021-03-14 14:44:14 in_cleaning no
2021-03-14 15:10:44 in_fresh_state yes
2021-03-14 15:10:44 in_returning no
2020-12-01 14:19:23 lab_status yes
2021-03-14 14:44:14 last_clean_area 17.43
2021-03-14 14:44:14 last_clean_time 0.32
2021-03-14 15:10:44 last_timestamp 1615728250
2021-02-21 17:36:02 lock_status off
2020-11-15 16:25:29 log_upload_status 9
2020-12-01 14:19:23 map_present yes
2021-03-14 14:50:44 mop_forbidden_enable no
2020-11-30 14:36:08 serial_number XXXXXXXXXXXX
2021-03-14 15:45:44 state Docked
2020-11-30 14:36:08 timezone Europe/Berlin
2021-03-14 15:10:44 total_clean_area 1115.90
2021-03-14 15:10:44 total_clean_time 20.08
2021-03-14 15:10:44 total_cleans 83
2021-03-14 15:28:38 volume 70
2021-03-14 14:50:44 water_box_carriage_status no
2021-02-02 11:55:50 water_box_mode high
2021-03-14 14:50:44 water_box_status no
2020-11-30 22:32:46 wifi_auth_fail_count 0
2020-11-30 22:32:46 wifi_conn_fail_count 0
2020-11-30 22:32:46 wifi_conn_success_count 1
2020-11-30 22:32:46 wifi_dhcp_fail_count 0
2021-03-22 03:28:35 wifi_rssi -45
2021-02-21 20:57:42 wifi_state online
helper:
ConnectionState connected
cleanrecord 10
crypt AES
delay 60
dev 132a
historydays 10
id 9c81
ip XXXXXXXXXXX
last_read 1616487955
packetid 9798
port 54321
sequence -3
timers 0
token XXXXXXXXX
day:
2585 1614361924
2589 1613923258
2590 1613664130
2591 1613577858
history:
2585 3
2589 7
2590 8
2591 9
packet:
2586 get_clean_record4
9795 get_status
9796 get_status
9797 get_status
Attributes:
event-on-change-reading .*
group Reinigung
icon vacuum_top
room Wohnung->Wohnzimmer
stateFormat Status: state <br> Letzte Reinigung: counter Tage
subType VacuumCleaner
timestamp-on-change-reading .*
verbose 4
Wo ist das Listing vom DOIF, wie es nicht funktioniert?
Gibt es nicht, da ich es nicht mehr habe. Kann ja keine zwei Devices mit gleicher Aufgabe gleichzeitig betreiben, das stört sich ja.
So wie das DOIF im Moment ist würde ich sagen, falls das Reading counter einmal 0 ist läuft das DOIF ab bis das Reading counter 3 ist und dann passiert NIE wieder was. Das würde 3 Tage dauern.
wofür die 60sec waits?
wer ausser dem DOIF selbst kann noch das reading counter schreiben?
was hast Du damit vor (ich kann es mir aus dem DOIF einfach nicht vorstellen)
warum das aber nur mit Zeiträumen gehen soll kann ich nicht sagen, ergibt sich vielleicht wenn mehr bekannt ist.
Gruß
Hintergrund ist ein Tageszähler für den Saugrobotor.
Der Saugroboter wird immer gestartet wenn keine zu Hause ist und der Counter ungleich Null ist. Gleichzeitig wird er beim losfahren auf Null gesetzt. Das verhindert, dass der Saugroboter mehrfach am Tag fährt wenn mehrfach keiner zu Hause ist.
Das Doif ist dafür da, dass der Counter bis max 3 gezählt werden soll, weil dann eine Erinnerung ausgegeben werden soll, dass der Saugroboter trotz Anwesenheit fahren muss. Für den Fall, das zb im Urlaub oder jetzt im Homeoffice stetig jemand zu Hause ist und der Roboter so nicht zum automatischen Fahren kommt.
Hab es aber inzwischen mit einer richtigen Addition gelöst bei der der aktuelle Stand zu einer festen Uhrzeit ausgelesen und um 1 erhöht wiedergeschrieben wird solange er kleiner 3 ist.
na wenns läuft ist ja gut. Warum es mit Zeiten nicht funktioniert hat kann man so nicht sagen, ohne die Def dazu gesehen zu haben. [02:30] triggert eigentlich um 2:30 Uhr....
Zitat von: Superposchi am 25 März 2021, 16:55:58Hab es aber inzwischen mit einer richtigen Addition gelöst bei der der aktuelle Stand zu einer festen Uhrzeit ausgelesen und um 1 erhöht wiedergeschrieben wird solange er kleiner 3 ist.
Du kannst auch das Alter des Readings auslesen. Und wenn es größer als ein bestimmter Wert ist...