FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: 87insane am 12 April 2019, 08:03:41

Titel: DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 12 April 2019, 08:03:41
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!
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: Damian am 12 April 2019, 09:09:47
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.
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 12 April 2019, 09:18:25
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
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: Damian am 12 April 2019, 09:26:00
   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.
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 12 April 2019, 09:31:02
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.
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: Damian am 12 April 2019, 11:08:35
Poste mal ein List von ECHO_123
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 12 April 2019, 11:21:51
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;}
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: Damian am 12 April 2019, 15:04:55
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
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 12 April 2019, 16:37:08
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 :(
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: Damian am 12 April 2019, 18:14:38
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
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 14 April 2019, 12:09:23
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")\
}\
}\
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: CoolTux am 14 April 2019, 12:16:36
Ich kann in dem Notify beim besten Willen nicht sehen wo LastAlarm gesetzt wird.
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 14 April 2019, 12:19:07
Beitrag editiert. Hab beim kopieren am handy wohl nicht alles mit kopiert. SORRY!
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: CoolTux am 14 April 2019, 12:25:45
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?
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 14 April 2019, 12:32:41
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.
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: CoolTux am 14 April 2019, 12:35:14
Wenn Deine Formatierung stimmt (bin zu faul Klammern zu zählen) dann ist der setreading Befehl innerhalb der foreach Schleife.
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 14 April 2019, 12:40:06
Jo, hab ich auch gesehen. Das wäre ne Performance Sache. Allerdings ist die Frage, warum das doif auf einmal nicht mehr reagiert.
LastAlarm wird auf die korrekte Uhrzeit gesetzt. Aber doif schnappt sich die Zeit nicht mehr. Wenn ich manuell setreading gerät Reading Zeit mache, geht es sofort auch in das doif über. So war es bis vor ein paar Tagen auch mit dem notify. Hatte es echt lange im Einsatz und habe es geliebt :)
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: CoolTux am 14 April 2019, 12:44:10
Zitat von: 87insane am 14 April 2019, 12:40:06
Jo, hab ich auch gesehen. Das wäre ne Performance Sache. Allerdings ist die Frage, warum das doif auf einmal nicht mehr reagiert.
LastAlarm wird auf die korrekte Uhrzeit gesetzt. Aber doif schnappt sich die Zeit nicht mehr. Wenn ich manuell setreading gerät Reading Zeit mache, geht es sofort auch in das doif über. So war es bis vor ein paar Tagen auch mit dem notify. Hatte es echt lange im Einsatz und habe es geliebt :)

Mach das Notify erstmal stimmig und dann schauen wir weiter.
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 14 April 2019, 12:50:37
Was heist denn stimmig? Ob das nun jede Runde oder nur einmal gesetzt wird hat bisher ja auch keine Rolle gespielt.
Weis auch nicht aus dem kopf ob die variablen auserhalb der schleife noch laufen. Wenn ja gehört das ja nur eine klammer weiter runter. Aber das ist für mich gerade echt neben Sache.

Werde es am pc direkt anpassen aber das klärt leider noch nicht die frage. So wie es scheint, hast du dazu aber schon eine Idee. :)

Hatte in einem thread aus 2014 gelesen das aus einem notify heraus ein setreading kein event erzeugt. Das ist vermutlich eine veraltete Info, da es ja ging. Wurde an dem Konstrukt ggf. Ein Update durchgeführt von einem von euch? Ich mache immer brav fhem updates aber es zeigt sich mal wieder, das ich das besser nicht machen sollte. Never Change a Running System^^

Gesendet von meinem LG-H850 mit Tapatalk

Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: CoolTux am 14 April 2019, 12:54:35
Eine direkte Idee noch nicht. Meine Meinung ist aber immer erst einmal das offensichtliche gerade rücken auch wenn es eventuell nichts direktes mit dem Problem zu tun hat.
Woher weißt Du es kein Event kommt? Hast du zur Auslösezeit den Eventmonitor offen gehabt?
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 14 April 2019, 12:56:07
Jap ... Habe (was man hier nicht sieht) mit dem Kollegen von oben schon diverse PNs geschrieben und er hatte auch so seine Ideen. Daraus die Essens hatte ich dann hier veröffentlicht für die nach Welt.



Gesendet von meinem LG-H850 mit Tapatalk

Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: CoolTux am 14 April 2019, 13:07:24

readingsSingleUpdate( $defs{$NAME}, 'LastAlarm', $lastalarmalexa,1);


Statt dem setreading bitte einmal das testen. Ausserhalb der Schleife. In der Hoffnung daß der Wert von lastalarmalexa dann auch passt.
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 14 April 2019, 13:25:21
Teste ich sobald ein pc in der nähe ist. Die werte an sich bzw das Ergebnis hat immer gepasst. Wenn dein Vorschlag wieder ein event erzeugt, gehts sicher wieder.

Nach wie vor frage ich mich, warum es auf einmal nicht mehr geht. An notify wurde laut Changelog ja auch nichts mehr groß verändert. An setreading soweit ich dazu was gefunden habe, auch nicht mehr. Komisch, komisch

Gesendet von meinem LG-H850 mit Tapatalk

Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 14 April 2019, 16:17:52
Also das setreading hab ich mal über das handy weiter nach unten gesetzt. Das klappt auch und ist enorm schneller.

Im Event Monitor sehe ich wie LastAlarm gesetzt wird. Das doif nimmt die Zeit aber erst wenn ich in dem doif auf DEF klicke und danach auf speichern. So als würde man es eben frisch anlegen. Wenn ich einen anderen wecker stelle, übernimmt das doif dies nicht. Erst wieder wenn DEF+speichern.

Die andere Variante würde ich lieber am pc testen. Mein handy ist dafür nicht geeignet. Da aber anscheinend wieder ein event kommt, ist das ja schon mal gut.

Gesendet von meinem LG-H850 mit Tapatalk

Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: CoolTux am 14 April 2019, 16:33:14
Meine erste Vermutung.
Im Millisekunden Takt feuert das setreading. Dies löst Events aus die eventuell zu schnell hintereinander kommen.
Jetzt muss man schauen warum das DOIF nicht reagiert.
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: CoolTux am 14 April 2019, 16:38:21

([ECHO_123:"LastAlarm"] and [?ECHO_123:LastAlarm] != 0)


Ich weiß nicht hundertprozentig in das so stimmt. Das erste soll auf das Event von LastAlarm reagieren und das zweite dann nur abgefragt werden.
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 14 April 2019, 17:29:21


Zitat von: CoolTux am 14 April 2019, 16:38:21

([ECHO_123:"LastAlarm"] and [?ECHO_123:LastAlarm] != 0)


Ich weiß nicht hundertprozentig in das so stimmt. Das erste soll auf das Event von LastAlarm reagieren und das zweite dann nur abgefragt werden.

Hat locker 5 monate so geklappt.
Das erste soll reagieren wenn in dem Alarm Reading etwas passiert. Das zweite soll nur verhindern das es ausgeführt wird wenn 0 drin ist. Siehe notify... So stelle ich das quasi ab wenn zb Sonntag kein wecker an ist und man länger im dunklen schlafen will.

Kann es aber als test, genau wie das andere weiter oben einbauen.

Gesendet von meinem LG-H850 mit Tapatalk

Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 17 April 2019, 10:40:28
Guten Morgen zusammen,

leider kam ich erst sehr spät zur weiteren Bearbeitung. Anbei das Ergebnis.....

Das notify wertet die Zeit des letzten Weckers aus. Dies klappt auch sauber. Das Reading LastAlarm wird gesetzt.
Leider ist das Verhalten des DOIFs aber noch gleich (schlecht).

Anbei mal was ich so gesammelt habe....

1. Wecker gesetzt (via App oder lokal mit der Sprache an der Alexa)
2. Warten bis FHEM - Alexa das mitbekommen hat und durch das notify das Reading geschrieben wird

EventMonitor - Auswertung letzter Wecker:
2019-04-17 10:34:39 echodevice ECHO_123 alarm_02_originalTime: 18:35:00.000
2019-04-17 10:34:39 echodevice ECHO_123 alarm_02_status: on
2019-04-17 10:34:39 echodevice ECHO_123 alarm_count: 2
2019-04-17 10:34:39 echodevice ECHO_123 LastAlarm: 18:35


Hier sieht man auch, dass das Reading gesetzt wurde. Danach schaue ich im DOIF und sehe weiterhin nichts.
Klicke ich auf DEF und danach auf modify im DOIF, springt die Zeit direkt auf die, die in LastAlarm steht.

Leider ändert es auch nichts, wenn ich das via "readingsSingleUpdate( $defs{$NAME}, 'LastAlarm', $lastalarmalexa,1);"
versuche. Das Verhalten von DOIF bleibt gleich.
So wie ich das sehe, wird ein EVENT erzeugt, welches auch die Zeit zeigt, welche es sein sollte.

Komme hier nicht mehr weiter. Ich verstehe es einfach nicht....
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 17 April 2019, 12:23:22
Hab noch einen Fehler entdeckt bzw. das notify ein wenig schöner gemacht:


(ECHO_90F00818720600GX:alarm_.._status:.(on|off)) {
my $k = "0";
my $alarmoff = "0";
my $schleifennr = "1";
my $lastalarmalexa = "0";
#Log 1, "VOR SCHLEIFE lastalarmalexa: $lastalarmalexa";
foreach $k (1..ReadingsVal("$NAME", "AlarmCount", ""))
{
$schleifennr = sprintf("%02d", $k);
my $wecker = ReadingsVal("$NAME", "alarm_".$schleifennr."_originalTime" ,"0");
$wecker =~ s/:00.000$//;
#Log 1, "IN SCHLEIFE lastalarmalexa: $lastalarmalexa";
#Log 1, "IN SCHLEIFE schleifennr: $schleifennr wecker: $wecker lastalarmalexa: $lastalarmalexa";
if (ReadingsVal("$NAME", "alarm_".$schleifennr."_status", "") eq "on" && "$wecker" gt "$lastalarmalexa")
{
$lastalarmalexa = $wecker;
#Log 1, "GEFUNDEN lastalarmalexa: $lastalarmalexa";
}

elsif (ReadingsVal("$NAME", "alarm_".$schleifennr."_status", "") eq "off")
{
$alarmoff = $alarmoff + 1;

if (sprintf("%02d", $alarmoff) eq sprintf("%02d", ReadingsVal("$NAME", "AlarmCount", "")))
{
$lastalarmalexa = "keiner";
#Log 1, "KEIN lastalarmalexa: $lastalarmalexa";
}
}
}
        fhem("setreading $NAME LastAlarm $lastalarmalexa")
}


So ist es etwas schneller und die Prüfung auf alle Wecker = off klappt etwas schneller.

Es wird also nur einmal am Ende das Reading gesetzt. Ein Event wird wie oben im Beitrag erzeugt. DOIF interessiert es weiterhin nicht mehr.
PS: Ich weiß das am Ende das sprintf nicht nötig ist. War nur zum testen....
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: CoolTux am 17 April 2019, 12:26:06
Dann solltest Du bitte einmal ein list vom aktuellen DOIF zeigen.
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 17 April 2019, 12:51:05
Ist das gleiche wie auf Seite 1.

Wollte es kürzen aber hatte noch keine zündende Idee. Problem ist nach der Umstellung vom notify, bekomme ich im DOIF immer wenn kein Wecker gesetzt ist immer:
error: Wrong timespec : either HH:MM:SS or {perlcode} - Logisch da es keine Zeit ist. Ich würde das DOIF aber nur dann auch ausführen wollen, wenn im Reading LastAlarm NICHT "keiner" steht und eine Uhrzeit gesetzt ist.

Anbei der Code vom DOIF:
defmod di_letzter_wecker_rollos DOIF ([["ECHO_123:LastAlarm"]] and ["ECHO_123:LastAlarm"] ne "keiner")\
(set sz_rollo pct 0)\
DOELSEIF ([00:15])


Anbei aber nochmal ein LIST vom DOIF nachdem ein Wecker gesetzt wurde:
Internals:
   CFGFN      ./FHEM/Tasmota.cfg
   DEF        ([["ECHO_123:LastAlarm"]] and ["ECHO_123:LastAlarm"] ne "keiner")
(set sz_rollo pct 0)
DOELSEIF ([00:15])
   MODEL      FHEM
   NAME       di_letzter_wecker_rollos
   NR         103
   NTFY_ORDER 50-di_letzter_wecker_rollos
   STATE      initialized
   TYPE       DOIF
   VERSION    18890 2019-03-13 18:56:41
   READINGS:
     2019-04-17 12:43:10   cmd             0
     2019-04-17 12:43:10   mode            enabled
     2019-04-17 12:43:10   state           initialized
     2019-04-17 12:43:10   timer_01_c01    error: Wrong timespec : either HH:MM:SS or {perlcode}
     2019-04-17 12:43:10   timer_02_c02    18.04.2019 00:15:00
   Regex:
     accu:
     cond:
       :
         0:
           "ECHO_123:LastAlarm" ECHO_123:LastAlarm
   attr:
     cmdState:
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday) and ::EventDoIf('ECHO_123',$hash,'LastAlarm',0) ne "keiner"
     1          ::DOIF_time_once($hash,1,$wday)
   days:
   devices:
   do:
     0:
       0          set sz_rollo pct 0
     1:
       0         
     2:
   helper:
     globalinit 1
     last_timer 2
     sleeptimer -1
   intervalfunc:
   itimer:
   localtime:
     1          1555539300
   realtime:
     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
   triggertime:
     1555539300:
       localtime  1555539300
       hash:
   uiState:
   uiTable:
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: CoolTux am 17 April 2019, 13:00:35
Dann würde ich dafür einen neuen Thread im DOIF Bereich auf machen. Damian und die anderen können Dir da bestimmt helfen.
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 17 April 2019, 13:07:39
Werde ich das mal tun... Dachte das ggf. auch hier einer rein schaut. Danke Dir!
Titel: Antw:DOIF geht seit gestern nicht mehr - Update?
Beitrag von: 87insane am 17 April 2019, 13:21:58
Weiter hier:

https://forum.fhem.de/index.php/topic,99712.0.html (https://forum.fhem.de/index.php/topic,99712.0.html)