DOIF geht seit gestern nicht mehr - Update?

Begonnen von 87insane, 12 April 2019, 08:03:41

Vorheriges Thema - Nächstes Thema

87insane

Guten Morgen zusammen,

ich habe ein DOIF, welches durch ein anderes Modul eine Uhrzeit bekommt. Dies ist immer eine Weckzeit. Bis gestern ging das noch und seit heute Morgen nicht mehr.
Die Zeit steht im Reading aber aus einem mir unbekanntem Grund, passiert nichts mehr....

DOIF:
defmod letzter_wecker_rollos DOIF ([[ECHO_123:LastAlarm]] and [ECHO_123:LastAlarm] ne "0")\
(set sz_rollo pct 0)\
DOELSEIF ([00:15])
attr letzter_wecker_rollos room hidden


list DOIF:
Internals:
   CFGFN      ./FHEM/Tasmota.cfg
   DEF        ([[ECHO_123:LastAlarm]] and [ECHO_123:LastAlarm] ne "0")
(set sz_rollo pct 0)
DOELSEIF ([00:15])
   FUUID      123abc
   MODEL      FHEM
   NAME       letzter_wecker_rollos
   NR         105
   NTFY_ORDER 50-letzter_wecker_rollos
   STATE      cmd_1
   TYPE       DOIF
   VERSION    18890 2019-03-13 18:56:41
   READINGS:
     2019-04-12 07:47:29   Device          ECHO_123
     2019-04-12 07:53:32   cmd             1
     2019-04-12 07:53:32   cmd_event       set_cmd_1
     2019-04-12 07:53:32   cmd_nr          1
     2019-04-12 07:26:38   mode            enabled
     2019-04-12 07:53:32   state           cmd_1
     2019-04-12 07:33:32   timer_01_c01    13.04.2019 00:00:00
     2019-04-12 07:33:32   timer_02_c02    13.04.2019 00:15:00
   Regex:
     accu:
   attr:
     cmdState:
   condition:
     0          ::DOIF_time_once($hash,0,$wday) and ::ReadingValDoIf($hash,'ECHO_123','LastAlarm') ne "0"
     1          ::DOIF_time_once($hash,1,$wday)
   days:
   devices:
     0           ECHO_123
     all         ECHO_123
   do:
     0:
       0          set sz_rollo pct 0
     1:
       0         
     2:
   helper:
     event      alarm_06_status: off
     globalinit 1
     last_timer 2
     sleeptimer -1
     triggerDev
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: set_cmd_1
       state: cmd_1
     triggerEvents:
       alarm_06_status: off
       LastAlarm: 0
     triggerEventsState:
       alarm_06_status: off
       LastAlarm: 0
   internals:
   intervalfunc:
   itimer:
     all         ECHO_123
   localtime:
     0          1555106400
     1          1555107300
   perlblock:
   readings:
     0           ECHO_123:LastAlarm
     all         ECHO_123:LastAlarm
   realtime:
     0          00:00:00
     1          00:15:00
   time:
     0          [ECHO_123:LastAlarm]
     1          00:15:00
   timeCond:
     0          0
     1          1
   timer:
     0          0
     1          0
   timers:
     0           0
     1           1
   trigger:
   triggertime:
     1555106400:
       localtime  1555106400
       hash:
     1555107300:
       localtime  1555107300
       hash:
   uiState:
   uiTable:
Attributes:
   room       hidden


Mein notify berechnet den letzten Wecker in meiner Alexa. Das klappt wunderbar. Nachdem die Zeit dann in das Reading übergeben wurde, so war es vorgestern noch, weiß das DOIF wann es das sz_rollo hoch fahren soll. Leider sieht es aktuell so aus als würde das DOIF gar nicht mehr reagieren.


Danke an alle!

Damian

Es dürfte weniger etwas mit DOIF zu tun haben, als mit einer fehlenden Zeitangabe in [ECHO_123:LastAlarm].

Ich glaube nicht, dass dein Wecker um 00:00 Uhr los gehen soll.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

87insane

Da steht nichts drin, da beim list keiner gestellt war, anbei mal einer mit:

list mit gestelltem Wecker (nicht wundern, hab das DOIF umbenannt)


Internals:
   CFGFN     
   DEF        ([[ECHO_123:LastAlarm]] and [ECHO_123:LastAlarm] ne "0")
(set sz_rollo pct 0)
DOELSEIF ([00:15])
   FUUID      123abc
   MODEL      FHEM
   NAME       di_letzter_wecker_rollos
   NR         724
   NTFY_ORDER 50-di_letzter_wecker_rollos
   STATE      initialized
   TYPE       DOIF
   VERSION    18890 2019-03-13 18:56:41
   READINGS:
     2019-04-12 09:16:47   Device          ECHO_123
     2019-04-12 08:56:34   cmd             0
     2019-04-12 08:56:34   mode            enabled
     2019-04-12 08:56:34   state           initialized
     2019-04-12 08:56:34   timer_01_c01    13.04.2019 00:00:00
     2019-04-12 08:56:34   timer_02_c02    13.04.2019 00:15:00
   Regex:
     accu:
   condition:
     0          ::DOIF_time_once($hash,0,$wday) and ::ReadingValDoIf($hash,'ECHO_123','LastAlarm') ne "0"
     1          ::DOIF_time_once($hash,1,$wday)
   days:
   devices:
     0           ECHO_123
     all         ECHO_123
   do:
     0:
       0          set sz_rollo pct 0
     1:
       0         
     2:
   helper:
     event      alarm_04_status: on
     globalinit 1
     last_timer 2
     sleeptimer -1
     triggerDev ECHO_123
     triggerEvents:
       alarm_04_status: on
       LastAlarm: 09:20
     triggerEventsState:
       alarm_04_status: on
       LastAlarm: 09:20
   internals:
   intervalfunc:
   itimer:
     all         ECHO_123
   localtime:
     0          1555106400
     1          1555107300
   readings:
     0           ECHO_123:LastAlarm
     all         ECHO_123:LastAlarm
   realtime:
     0          00:00:00
     1          00:15:00
   time:
     0          [ECHO_123:LastAlarm]
     1          00:15:00
   timeCond:
     0          0
     1          1
   timer:
     0          0
     1          0
   timers:
     0           0
     1           1
   trigger:
   triggertime:
     1555106400:
       localtime  1555106400
       hash:
     1555107300:
       localtime  1555107300
       hash:
   uiState:
   uiTable:
Attributes:
   room       hidden

Damian

   realtime:
     0          00:00:00
     1          00:15:00
   time:
     0          [ECHO_123:LastAlarm]
     1          00:15:00


Hier steht  in [ECHO_123:LastAlarm] immer noch nichts sinnvolles drin.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

87insane

#4
Aber man sieht bei TriggerEvents nun genau die Zeit die als Wecker gestellt ist. Die Frage ist für mich, warum bekommt das DOIF (seit gestern / fhem Update durchgeführt) das nun nicht mehr mit. Genau in dem Teil, den du nennst, wird nichts mehr übertragen, obwohl das Trigger Event ankommt.

Edit: also im Reading LastAlarm steht eine Uhrzeit HH:MM und das sieht man ja beim trigger. Das ganze lief über ca 5 Monate genau so.

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

87insane

#6
Zur Erklärung...

Wenn ich in meiner Alexa einen, zwei.... Wecker stelle, wird ein notify ausgeführt, welches auswertet, welcher Wecker der letzte ist. Das hänge ich mal mit an auch wenn das soweit funktioniert, da ja das Reading auch beschrieben wird...

notify:
defmod n_letzter_wecker notify (ECHO_123:alarm_.._status:.(on|off)) {\
my $k = "0";;\
my $alarmoff = "0";;\
my $schleifennr = "1";;\
my $lastalarmalexa = "0";;\
\
foreach $k (1..ReadingsVal("$NAME", "AlarmCount", ""))\
{\
$schleifennr = sprintf("%02d", $k);;\
my $wecker = ReadingsVal("$NAME", "alarm_".$schleifennr."_originalTime" ,"0");;\
$wecker =~ s/:00.000$//;;\
\
if (ReadingsVal("$NAME", "alarm_".$schleifennr."_status", "") eq "on" && "$wecker" gt "$lastalarmalexa") \
{\
$lastalarmalexa = $wecker;;\
}\
\
elsif (ReadingsVal("$NAME", "alarm_".$schleifennr."_status", "") eq "off") \
{\
$alarmoff = $alarmoff + 1;;\
\
if (sprintf("%02d", $alarmoff) eq $schleifennr) \
{\
$lastalarmalexa = 0;;\
}\


list Alexa (List angepasst, da ich keine Wecker im ersten drin hatte):
Internals:
   CFGFN      ./FHEM/37_EchoDevice.cfg
   CHANGED   
   DEF        AB72C64C86AW2 123
   FUUID      123abc
   IODev      EchoDevices
   NAME       ECHO_123
   NR         298
   NTFY_ORDER 50-ECHO_123
   STATE      connected
   TYPE       echodevice
   model      Echo
   CHANGETIME:
     2019-04-12 07:29:15
   OLDREADINGS:
   READINGS:
     2019-04-12 11:17:42   AlarmCount      0
     2019-04-12 12:08:56   LastAlarm       12:18 Hier steht die Uhrzeit wenn ein Wecker an ist (HH:MM). Ansonsten steht hier 0
     2019-04-12 12:08:56   alarm_01_id     410a216f-6fae-4f04-940a-aae17ccaee62
     2019-04-12 12:08:56   alarm_01_originalTime 12:18:00.000
     2019-04-12 12:08:56   alarm_01_recurring 0
     2019-04-12 12:08:56   alarm_01_status on
     2019-04-12 12:08:56   alarm_count     1
     2019-04-12 11:17:34   BrowserLanguage de,en-US;q=0.7,en;q=0.3
     2019-04-12 11:17:34   BrowserUserAgent Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0
     2019-04-12 11:17:29   alarm_count     0
     2019-04-12 11:17:33   channel         Spotify
     2019-04-12 11:17:33   currentAlbum    ......
     2019-04-12 11:17:33   currentArtist   .....
     2019-04-12 11:17:33   currentArtwork  ....
     2019-04-12 11:17:33   currentTitle    ......
     2019-04-12 11:17:33   currentTuneInID -
     2019-04-12 11:17:38   deviceAddress   .........
     2019-04-12 11:17:40   dnd             off
     2019-04-12 11:17:38   microphone      false
     2019-04-12 11:17:29   musicalarm_count 0
     2019-04-12 11:17:34   mute            off
     2019-04-12 11:17:34   online          true
     2019-04-12 11:17:33   playStatus      paused
     2019-04-12 11:17:34   progress        0
     2019-04-12 11:17:34   progresslen     0
     2019-04-12 11:17:29   reminder_count  0
     2019-04-12 11:17:34   repeat          off
     2019-04-12 11:17:34   shuffle         off
     2019-04-12 11:17:34   state           connected
     2019-04-12 11:17:38   timeZoneId      Europe/Berlin
     2019-04-12 11:17:29   timer_count     0
     2019-04-12 11:17:29   timer_id        -
     2019-04-12 11:17:29   timer_remainingtime 0
     2019-04-12 09:56:46   voice           alexa schalte den wecker aus
     2019-04-12 09:56:46   voice_timestamp 1555046955540
     2019-04-12 11:17:34   volume          27
     2019-04-12 11:17:42   volume_alarm    47
     2019-04-12 11:17:39   wakeword        ALEXA
   helper:
     DEVICETYPE AB72C64C86AW2
     FAMILY     ECHO
     NAME       Kais Alexa
     RUNNING_REQUEST 0
     VERSION    631499520
     CMD_QUEUE:
Attributes:
   IODev      EchoDevices
   alias      Kais Alexa
   event-on-change-reading alarm_.._status,LastAlarm
   icon       echo
   room       Amazon
   userReadings AlarmCount {my $anz = grep( m/alarm_.._status/, ( keys %{$hash->{READINGS}} )); return $anz;}

Damian

Hast du hier editiert?

2019-04-12 12:08:56   LastAlarm       12:18 Hier steht die Uhrzeit wenn ein Wecker an ist (HH:MM). Ansonsten steht hier 0
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

87insane

Ja! Hab den Satz dahinter geschrieben... Zudem habe ich die Readings nachdem ich sie aus Verzweiflung gelöscht hatte, nicht direkt alle drin. Deswegen habe ich nur das was dann nach ein paar Minuten rein lief eingefügt. Wenn ich ein List mache, sieht es also bis auf meine Beisätze, ....., oder gelöschte Dinge wie BT Geräte genau so aus.

Warum? Ist das wichtig? Hast du eine Idee? Ich habe mich seit Monaten, jeden Tag gefreut wenn der Wecker klingelt und das Rollo hoch geht. Nun ist die Freude schon vorbei :(

Damian

#9
Damit ich das nachvollziehen kann:

1. poste aktuellen List von ECHO_123 ohne Veränderungen
2. gehe im Browser auf DEF von di_letzter_wecker_rollos und bestätige mit modify die Definition des DOIFs
3. poste List vom frisch initialisiertem DOIF
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

87insane

#10
Nach vielen PNs scheint nun klar zu sein das es Probleme mit dem notify gibt. Aus einem mir unbekannten Grund, setzt es am ende das Reading LastAlarm aber es wird kein event mehr erzeugt. Dies war bis vor ein paar Tagen aber nie ein Problem.

Am notify und doif selber wurde nichts geändert und das lief bisher immer gut. Gibt es jemanden der mir ggf. Sagen kann, warum das auf einmal so ist?


defmod n_letzter_wecker notify (ECHO_123:alarm_.._status:.(on|off)) {\
my $k = "0";;\
my $alarmoff = "0";;\
my $schleifennr = "1";;\
my $lastalarmalexa = "0";;\
\
foreach $k (1..ReadingsVal("$NAME", "AlarmCount", ""))\
{\
$schleifennr = sprintf("%02d", $k);;\
my $wecker = ReadingsVal("$NAME", "alarm_".$schleifennr."_originalTime" ,"0");;\
$wecker =~ s/:00.000$//;;\
\
if (ReadingsVal("$NAME", "alarm_".$schleifennr."_status", "") eq "on" && "$wecker" gt "$lastalarmalexa") \
{\
$lastalarmalexa = $wecker;;\
}\
\
elsif (ReadingsVal("$NAME", "alarm_".$schleifennr."_status", "") eq "off") \
{\
$alarmoff = $alarmoff + 1;;\
\
if (sprintf("%02d", $alarmoff) eq $schleifennr) \
{\
$lastalarmalexa = 0;;\
}\
}\
fhem("setreading $NAME LastAlarm $lastalarmalexa")\
}\
}\

CoolTux

Ich kann in dem Notify beim besten Willen nicht sehen wo LastAlarm gesetzt wird.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

87insane

Beitrag editiert. Hab beim kopieren am handy wohl nicht alles mit kopiert. SORRY!

CoolTux

Er soll also bei jedem Schleifendurchlauf das Reading setzen? Hab mir jetzt nicht alles angeschaut. Aber es heißt LastAlarm. Also gehe ich davon aus daß er das wirklich nur setzen soll wenn der letzte Alarm fest steht.

Sinn der Schleife ist offenbar den LastAlarm raus zu finden. Dazu müssen alle Alarme durchgegangen werden. Aber den tatsächlichen LastAlarm kennst Du dich bestimmt erst nach dem letzten Schleifendurchlauf und erst dann musst Du ihn setzen. Oder?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

87insane

Genau. Das notify soll bei einem event von dem alexa Device hin gehen und alle wecker prüfen. Sobald es alle wecker durch gegangen ist, soll es LastAlarm setzen. Ging bisher auch immer.

Dachte eigentlich, so wie ich das geschrieben habe, dass es nicht jede Runde sondern nur am ende einmal setzt.
Also wie dem auch sei, das reading wird auch gesetzt. Nur das doif triggert nicht mehr darauf.