[gelöst]Warum wird cmd 5 getriggert.

Begonnen von Esjay, 08 Oktober 2017, 13:47:30

Vorheriges Thema - Nächstes Thema

Esjay

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

viegener

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.

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Esjay

Dank dir für die Erklärung! Schönen Sonntag Abend noch!
Grüße

Per

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.