Hallo zusammen,
ich habe eine Verständniss Frage.
Ich habe folgenden DOIF . Wenn ich jetzt im Telegram Chat #ProgTest den Buchstaben M schicke, bekomme ich wie in cmd8 mein Menü, gehe ich dann auf Roberta Saugstufen, wird cmd 9 getriggert. Tippe ich nun auf eine der Zahlen, wird cmd 10 getriggert, und urplötzlich triggert auch cmd 5 . Und das obwohl ich bei dem Device Roberta event-on-change-reading gesetzt habe, und der state "Docked" vom Staubsauger nicht um die besagte Zeit getriggert wurde. Kann mir das jemand erklären?
Internals:
DEF (["^TelegramBot$:^msgText: Roberta.Start$"]and ["^TelegramBot$:^msgChat: #ProgTest$"])
(set Roberta start)
DOELSEIF
(["^TelegramBot$:^msgText: Roberta.Stopp$"]and ["^TelegramBot$:^msgChat: #ProgTest$"])
(set Roberta stop)
DOELSEIF
(["^TelegramBot$:^msgText: Roberta.Laden$"]and ["^TelegramBot$:^msgChat: #ProgTest$"])
(set Roberta charge)
DOELSEIF
(["^TelegramBot$:^msgText: Roberta.Status$"]and ["^TelegramBot$:^msgChat: #ProgTest$"])
(set TelegramBot msg @#ProgTest Hier ein paar Infos : \nBatterie Level = [Roberta:batteryLevel]% \nState = [Roberta:state] \nLetzte Reinigung = [Roberta:history_0])
DOELSEIF
([Roberta:state] eq "Docked")
(set TelegramBot msg @#ProgTest Letzte Reinigung =\n[Roberta:history_0]\nBattery Level = [Roberta:batteryLevel]%\nIch lade mich jetzt wieder auf)
DOELSEIF
([Roberta:state] eq "Cleaning")
(set TelegramBot msg @#ProgTest Ich fahre jetzt los und melde mich wenn ich fertig bin)
DOELSEIF
([Roberta:error] ne "none")
(set TelegramBot msg @#ProgTest (Roberta Start) (Roberta Stopp) (Roberta Laden) (Roberta Status) Ich habe einen Fehler. Er lautet [Roberta:error_code] Hier mögliche Kommandos)
DOELSEIF
(["^TelegramBot$:^msgText: M$"] and ["^TelegramBot$:^msgChat: #ProgTest$"])
(set TelegramBot msg @#ProgTest (Roberta Start) (Roberta Stopp) (Roberta Laden) (Roberta Status) (Roberta Saugstufe) Hier das Menü für Roberta)
DOELSEIF
(["^TelegramBot$:^msgText: Roberta.Saugstufe$"]and ["^TelegramBot$:^msgChat: #ProgTest$"])
(set TelegramBot msg @#ProgTest (90|80|70|60|50) (40|30|20|10|0) Mögliche Saugstufen)
DOELSEIF
([TelegramBot:"^msgText:..*$"] and ["^TelegramBot$:^msgChat: #ProgTest$"])
{
my $var1 = ReadingsNum("TelegramBot", "msgText", "");
fhem "set Roberta fan_power $var1";
}
NAME RobertaDoif
NR 214
NTFY_ORDER 50-RobertaDoif
STATE cmd_5
TYPE DOIF
READINGS:
2017-10-08 13:37:21 Device TelegramBot
2017-10-08 13:37:21 cmd 5
2017-10-08 13:37:21 cmd_event Roberta
2017-10-08 13:37:21 cmd_nr 5
2017-10-08 13:37:21 e_Roberta_error none
2017-10-08 13:37:21 e_Roberta_events fan_power: 20
2017-10-08 13:37:21 e_Roberta_state Docked
2017-10-08 13:37:21 e_TelegramBot_events sentMsgResult: SUCCESS,sentMsgId: 3865,sentMsgPeerId: -xxxxx
2017-10-08 13:37:19 matched_event_c10_1 msgChat: #ProgTest
2017-10-08 13:37:19 matched_event_c1_2 msgChat: #ProgTest
2017-10-08 13:37:19 matched_event_c2_2 msgChat: #ProgTest
2017-10-08 13:37:19 matched_event_c3_2 msgChat: #ProgTest
2017-10-08 13:37:19 matched_event_c4_2 msgChat: #ProgTest
2017-10-08 13:37:15 matched_event_c8_1 msgText: M
2017-10-08 13:37:19 matched_event_c8_2 msgChat: #ProgTest
2017-10-08 13:37:17 matched_event_c9_1 msgText: Roberta Saugstufe
2017-10-08 13:37:19 matched_event_c9_2 msgChat: #ProgTest
2017-10-08 13:37:21 state cmd_5
condition:
0 EventDoIf('^TelegramBot$',$hash,'^msgText: Roberta.Start$',0)and EventDoIf('^TelegramBot$',$hash,'^msgChat: #ProgTest$',0)
1 EventDoIf('^TelegramBot$',$hash,'^msgText: Roberta.Stopp$',0)and EventDoIf('^TelegramBot$',$hash,'^msgChat: #ProgTest$',0)
2 EventDoIf('^TelegramBot$',$hash,'^msgText: Roberta.Laden$',0)and EventDoIf('^TelegramBot$',$hash,'^msgChat: #ProgTest$',0)
3 EventDoIf('^TelegramBot$',$hash,'^msgText: Roberta.Status$',0)and EventDoIf('^TelegramBot$',$hash,'^msgChat: #ProgTest$',0)
4 ReadingValDoIf($hash,'Roberta','state') eq "Docked"
5 ReadingValDoIf($hash,'Roberta','state') eq "Cleaning"
6 ReadingValDoIf($hash,'Roberta','error') ne "none"
7 EventDoIf('^TelegramBot$',$hash,'^msgText: M$',0) and EventDoIf('^TelegramBot$',$hash,'^msgChat: #ProgTest$',0)
8 EventDoIf('^TelegramBot$',$hash,'^msgText: Roberta.Saugstufe$',0)and EventDoIf('^TelegramBot$',$hash,'^msgChat: #ProgTest$',0)
9 EventDoIf('TelegramBot',$hash,'^msgText:..*$',1) and EventDoIf('^TelegramBot$',$hash,'^msgChat: #ProgTest$',0)
devices:
4 Roberta
5 Roberta
6 Roberta
9 TelegramBot
all Roberta TelegramBot
do:
0:
0 set Roberta start
1:
0 set Roberta stop
10:
2:
0 set Roberta charge
3:
0 set TelegramBot msg @#ProgTest Hier ein paar Infos : \nBatterie Level = [Roberta:batteryLevel]% \nState = [Roberta:state] \nLetzte Reinigung = [Roberta:history_0]
4:
0 set TelegramBot msg @#ProgTest Letzte Reinigung =\n[Roberta:history_0]\nBattery Level = [Roberta:batteryLevel]%\nIch lade mich jetzt wieder auf
5:
0 set TelegramBot msg @#ProgTest Ich fahre jetzt los und melde mich wenn ich fertig bin
6:
0 set TelegramBot msg @#ProgTest (Roberta Start) (Roberta Stopp) (Roberta Laden) (Roberta Status) Ich habe einen Fehler. Er lautet [Roberta:error_code] Hier mögliche Kommandos
7:
0 set TelegramBot msg @#ProgTest (Roberta Start) (Roberta Stopp) (Roberta Laden) (Roberta Status) (Roberta Saugstufe) Hier das Menü für Roberta
8:
0 set TelegramBot msg @#ProgTest (90|80|70|60|50) (40|30|20|10|0) Mögliche Saugstufen
9:
0 { my $var1 = ReadingsNum("TelegramBot", "msgText", ""); fhem "set Roberta fan_power $var1"; }
helper:
event sentMsgResult: SUCCESS,sentMsgId: 3865,sentMsgPeerId: -xxxxx
globalinit 1
last_timer 0
sleeptimer -1
timerdev Roberta
timerevent fan_power: 20
triggerDev TelegramBot
timerevents:
fan_power: 20
timereventsState:
fan_power: 20
triggerEvents:
sentMsgResult: SUCCESS
sentMsgId: 3865
sentMsgPeerId: -xxxxx
triggerEventsState:
sentMsgResult: SUCCESS
sentMsgId: 3865
sentMsgPeerId: -xxxxx
internals:
itimer:
readings:
4 Roberta:state
5 Roberta:state
6 Roberta:error
all Roberta:state Roberta:error
regexp:
0:
0 ^TelegramBot$:^msgText: Roberta.Start$
1 ^TelegramBot$:^msgChat: #ProgTest$
1:
0 ^TelegramBot$:^msgText: Roberta.Stopp$
1 ^TelegramBot$:^msgChat: #ProgTest$
2:
0 ^TelegramBot$:^msgText: Roberta.Laden$
1 ^TelegramBot$:^msgChat: #ProgTest$
3:
0 ^TelegramBot$:^msgText: Roberta.Status$
1 ^TelegramBot$:^msgChat: #ProgTest$
4:
5:
6:
7:
0 ^TelegramBot$:^msgText: M$
1 ^TelegramBot$:^msgChat: #ProgTest$
8:
0 ^TelegramBot$:^msgText: Roberta.Saugstufe$
1 ^TelegramBot$:^msgChat: #ProgTest$
9:
0 ^TelegramBot$:^msgChat: #ProgTest$
all:
0 ^TelegramBot$:^msgText: Roberta.Start$
1 ^TelegramBot$:^msgChat: #ProgTest$
2 ^TelegramBot$:^msgText: Roberta.Stopp$
3 ^TelegramBot$:^msgText: Roberta.Laden$
4 ^TelegramBot$:^msgText: Roberta.Status$
5 ^TelegramBot$:^msgText: M$
6 ^TelegramBot$:^msgText: Roberta.Saugstufe$
state:
STATE:
trigger:
all TelegramBot
Attributes:
Hier mal ein Log File vom Doif
2017-10-08_13:37:15.498 TelegramBot Contacts: -xxxxx::#ProgTest xxxxx:Katha: xxxxx:Stephan: -xxxxx::#Home -xxxxx::#Alarmanlage -xxxxx::#Roberta
2017-10-08_13:37:15.524 TelegramBot msgId: 3860
2017-10-08_13:37:15.524 TelegramBot msgPeer: Stephan
2017-10-08_13:37:15.524 TelegramBot msgPeerId: xxxxx
2017-10-08_13:37:15.524 TelegramBot msgChat: #ProgTest
2017-10-08_13:37:15.524 TelegramBot msgChatId: -xxxxx
2017-10-08_13:37:15.524 TelegramBot msgText: M
2017-10-08_13:37:15.524 TelegramBot msgReplyMsgId:
2017-10-08_13:37:15.524 TelegramBot msgFileId:
2017-10-08_13:37:15.561 RobertaDoif cmd_nr: 8
2017-10-08_13:37:15.561 RobertaDoif cmd: 8
2017-10-08_13:37:15.561 RobertaDoif cmd_event: TelegramBot
2017-10-08_13:37:15.561 RobertaDoif cmd_8
2017-10-08_13:37:15.868 TelegramBot sentMsgResult: SUCCESS
2017-10-08_13:37:15.868 TelegramBot sentMsgId: 3861
2017-10-08_13:37:15.868 TelegramBot sentMsgPeerId: -xxxxx
2017-10-08_13:37:17.164 TelegramBot Contacts: -xxxxx::#Home -xxxxx::#Alarmanlage -xxxxx::#Roberta -xxxxx::#ProgTest xxxxx:Katha: xxxxx:Stephan:
2017-10-08_13:37:17.188 TelegramBot msgId: 3862
2017-10-08_13:37:17.188 TelegramBot msgPeer: Stephan
2017-10-08_13:37:17.188 TelegramBot msgPeerId: xxxxx
2017-10-08_13:37:17.188 TelegramBot msgChat: #ProgTest
2017-10-08_13:37:17.188 TelegramBot msgChatId: -xxxxx
2017-10-08_13:37:17.188 TelegramBot msgText: Roberta Saugstufe
2017-10-08_13:37:17.188 TelegramBot msgReplyMsgId: 3861
2017-10-08_13:37:17.188 TelegramBot msgFileId:
2017-10-08_13:37:17.224 RobertaDoif cmd_nr: 9
2017-10-08_13:37:17.224 RobertaDoif cmd: 9
2017-10-08_13:37:17.224 RobertaDoif cmd_event: TelegramBot
2017-10-08_13:37:17.224 RobertaDoif cmd_9
2017-10-08_13:37:17.544 TelegramBot sentMsgResult: SUCCESS
2017-10-08_13:37:17.544 TelegramBot sentMsgId: 3863
2017-10-08_13:37:17.544 TelegramBot sentMsgPeerId: -xxxxx
2017-10-08_13:37:19.485 TelegramBot Contacts: -xxxxx::#Roberta -xxxxx::#Alarmanlage -xxxxx::#Home xxxxx:Stephan: xxxxx:Katha: -xxxxx::#ProgTest
2017-10-08_13:37:19.510 TelegramBot msgId: 3864
2017-10-08_13:37:19.510 TelegramBot msgPeer: Stephan
2017-10-08_13:37:19.510 TelegramBot msgPeerId: xxxxx
2017-10-08_13:37:19.510 TelegramBot msgChat: #ProgTest
2017-10-08_13:37:19.510 TelegramBot msgChatId: -xxxxx
2017-10-08_13:37:19.510 TelegramBot msgText: 20
2017-10-08_13:37:19.510 TelegramBot msgReplyMsgId: 3863
2017-10-08_13:37:19.510 TelegramBot msgFileId:
2017-10-08_13:37:19.541 Roberta fan_power 20
2017-10-08_13:37:19.556 RobertaDoif cmd_nr: 10
2017-10-08_13:37:19.556 RobertaDoif cmd: 10
2017-10-08_13:37:19.556 RobertaDoif cmd_event: TelegramBot
2017-10-08_13:37:19.556 RobertaDoif cmd_10
2017-10-08_13:37:21.678 Roberta fan_power: 20
2017-10-08_13:37:21.698 TelegramBot msg @#ProgTest Letzte Reinigung =\n2017-10-08 11:58:14: 0.00m² in 0.00h, not finished\nBattery Level = 100%\nIch lade mich jetzt wieder auf
2017-10-08_13:37:21.713 RobertaDoif cmd_nr: 5
2017-10-08_13:37:21.713 RobertaDoif cmd: 5
2017-10-08_13:37:21.713 RobertaDoif cmd_event: Roberta
2017-10-08_13:37:21.713 RobertaDoif cmd_5
2017-10-08_13:37:21.935 TelegramBot sentMsgResult: SUCCESS
2017-10-08_13:37:21.935 TelegramBot sentMsgId: 3865
2017-10-08_13:37:21.935 TelegramBot sentMsgPeerId: -xxxxx
Hier ein list von meinem Staubsauger
Internals:
DEF 192.168.178.78 xxxxxxxxxxxxxx
FD 47
NAME Roberta
NR 160
STATE Docked
TYPE XiaomiDevice
device_type
mac LOCALNETWORK
model rockrobo.vacuum
READINGS:
2017-10-08 13:35:10 battery ok
2017-10-08 13:35:10 batteryLevel 100
2017-10-08 13:15:07 consumables_filter 73
2017-10-08 13:15:07 consumables_main_brush 86
2017-10-08 13:15:07 consumables_sensors -30
2017-10-08 13:15:07 consumables_side_brush 80
2017-06-15 17:36:50 device_firmware 3.3.6_003055
2017-06-15 17:36:50 device_lifetime 1.35
2017-10-08 13:35:10 dnd on
2017-10-08 13:15:07 dnd_enabled on
2017-10-08 13:15:07 dnd_end 05:30
2017-10-08 13:15:07 dnd_start 06:00
2017-10-08 13:37:21 error none
2017-10-08 13:35:10 error_code None
2017-10-08 13:37:21 fan_power 20
2017-10-08 13:15:07 history_0 2017-10-08 11:58:14: 0.00m² in 0.00h, not finished
2017-10-08 13:15:07 history_1 2017-10-07 14:04:17: 40.09m² in 0.76h, finished cleaning
2017-10-08 11:13:23 history_10 2017-09-23 10:39:54: 29.56m² in 0.50h, finished cleaning
2017-10-08 13:15:07 history_2 2017-10-05 19:47:06: 0.00m² in 0.00h, not finished
2017-10-08 13:15:07 history_3 2017-10-05 19:46:17: 0.00m² in 0.00h, not finished
2017-10-08 13:15:07 history_4 2017-10-05 19:35:36: 0.00m² in 0.00h, not finished
2017-10-08 13:15:07 history_5 2017-10-05 17:21:20: 0.00m² in 0.00h, not finished
2017-10-08 13:15:07 history_6 2017-10-05 16:59:02: 1.37m² in 0.00h, not finished
2017-10-08 13:15:07 history_7 2017-10-05 09:30:17: 44.31m² in 0.83h, finished cleaning
2017-10-08 13:15:07 history_8 2017-10-03 11:24:02: 45.69m² in 0.83h, finished cleaning
2017-10-08 13:15:07 history_9 2017-09-29 15:57:07: 46.05m² in 0.88h, finished cleaning
2017-10-08 13:35:10 in_cleaning no
2017-10-08 13:35:10 last_clean_area 0.00
2017-10-08 13:35:10 last_clean_time 0.00
2017-10-08 13:15:07 last_timestamp 1507456694
2017-10-08 13:35:10 map_present yes
2017-10-08 12:15:04 serial_number 1387100331716
2017-10-08 13:35:10 state Docked
2017-10-08 12:15:04 timezone Europe/Berlin
2017-10-08 13:15:07 total_clean_area 2006.01
2017-10-08 13:15:07 total_clean_time 39.27
2017-10-08 13:15:07 total_cleans 58
2017-10-08 12:15:04 wifi_auth_fail_count 0
2017-10-08 12:15:04 wifi_conn_fail_count 0
2017-10-08 12:15:04 wifi_conn_success_count 1
2017-10-08 12:15:04 wifi_dhcp_fail_count 0
2017-06-15 17:36:50 wifi_rssi -54
2017-10-08 12:15:04 wifi_state connecting
helper:
ConnectionState connected
cleanrecord 10
crypt AES
dev 034f
historydays 5
id 06d2
ip 192.168.178.78
last_read 1507462641
packetid 966
port 54321
sequence 1507424924
timers 0
token xxxxxxxxxxxxx
day:
history:
packet:
2 device_info
252 get_status
295 get_status
312 get_status
335 get_status
341 get_status
352 get_status
42 get_status
471 get_status
504 get_status
513 device_info
52 device_info
551 get_status
596 get_status
597 get_status
700 get_status
736 get_status
845 get_status
846 get_status
855 device_info
890 get_status
908 device_info
Attributes:
event-on-change-reading .*
room Flur,Home
subType VacuumCleaner
verbose 0
Danke
Die Erklärung ist eigentlich relativ einfach:
In der commandref steht:
Zitattandardmäßig werden angegebene Readings ausgewertet, wenn irgendein Event des angegebenen Devices triggert.
Also triggert der event
2017-10-08_13:37:19.541 Roberta fan_power 20
das cmd 5
Problem: Du hast relativ generische Bedingungen, die immer mal wieder zwischendurch angestossen werden können. Hier müsstest Du die verschiedenen Ereignissteuerungen in DOIF mal nachlesen.
Dank dir für die Erklärung! Schönen Sonntag Abend noch!
Grüße
Nochwas:
(["^TelegramBot$:^msgText: Roberta.Start$"] and ["^TelegramBot$:^msgChat: #ProgTest$"])
wird NIE wahr, weil zwei Events NIE gleichzeitig auftreten können.
Cmd5 ist die erste echte Möglichkeit in deinem DOIF, damit wird diese wohl relativ oft auftreten, da die von dir geplanten Filter vorher nicht greifen.