[gelöst] AT aus NOTIFY startet nicht

Begonnen von metzedo, 21 September 2020, 20:00:13

Vorheriges Thema - Nächstes Thema

metzedo

Hallo zusammen,

ich habe in Verbindung von AT und NOTIFY folgendes Problem:
Ich möchte per Notify über Telegram an eine Tabletteneinnahme erinnert werden. FHEM soll nun, nachdem ich morgens die erste Tablette genommen habe und dies per Telegramnachricht (Dummy von Nein auf Ja) FHEM mitgeteilt habe, mich alle 4 Stunden an diese Tablette per Nachricht erinnern. Diese Nachrichten sollen im minutentakt eingehen, bis ich bestätigt habe, das ich die Tablette genommen habe. Nun zu meinem Problem:
Leider erstellt FHEM nach dem ersten Mal kein neues AT.
Mein Notify sieht so aus:
tablette {
    if (Value("tablette") eq "ja") {
fhem("set telegrambot.Do send Tablette nehmen!!");
fhem("set tablette nein");
fhem("define tabletten_info_timer at +0:00:20 set tablette ja");
}
elsif (Value("tablette") eq "nein"){
fhem("set tablette nein");
}
}



Internals:
   FUUID      5f68c2f3-f33f-85ae-02a8-1a777fcb016aa09b
   NAME       tablette
   NR         53
   STATE      nein
   TYPE       dummy
   READINGS:
     2020-09-21 19:46:59   state           nein
Attributes:
   room       Notify
   setList    ja nein
   webCmd     ja:nein



telegrambot.Do ist mein TelegramBot


Hier ein Auszug aus dem Eventmonitor:

2020-09-21 19:46:39 TelegramBot telegrambot.Do send Tablette nehmen!!
2020-09-21 19:46:39 at tabletten_info_timer Next: 19:46:59
2020-09-21 19:46:39 Global global DEFINED tabletten_info_timer
2020-09-21 19:46:39 dummy tablette ja
2020-09-21 19:46:39 dummy tablette nein
2020-09-21 19:46:39 TelegramBot telegrambot.Do sentMsgResult: SUCCESS
2020-09-21 19:46:39 TelegramBot telegrambot.Do sentMsgId: 672
2020-09-21 19:46:39 TelegramBot telegrambot.Do sentMsgPeerId: *************8
2020-09-21 19:46:59 TelegramBot telegrambot.Do send Tablette nehmen!!
2020-09-21 19:46:59 dummy tablette ja
2020-09-21 19:46:59 dummy tablette nein
2020-09-21 19:47:00 TelegramBot telegrambot.Do sentMsgResult: SUCCESS
2020-09-21 19:47:00 TelegramBot telegrambot.Do sentMsgId: 673
2020-09-21 19:47:00 TelegramBot telegrambot.Do sentMsgPeerId: ************8


Hier der Auszug aus dem Log: (Danke an Otto123 für den Hinweis):
2020.09.21 19:46:23 3: define tabletten_info_timer at +0:00:20 set tablette ja : tabletten_info_timer already defined, delete it first
2020.09.21 19:46:23 3: n_tabletten_test return value: tabletten_info_timer already defined, delete it first
2020.09.21 19:46:59 3: define tabletten_info_timer at +0:00:20 set tablette ja : tabletten_info_timer already defined, delete it first
2020.09.21 19:46:59 3: n_tabletten_test return value: tabletten_info_timer already defined, delete it first


Wie ihr seht startet beim 1. Mal (Status von Telegram gesetzt) der Timer, wenn er sich allerdings dann beim 2. Mal selber aufrufen würde, wird nur noch die Telegramnachricht versendet.

Ich hoffe, ich konnte das Problem einigermaßen verständlich schildern.

Otto123

#1
Hi,

grundlegend bitte das beachten: https://forum.fhem.de/index.php/topic,71806.0.html
Ok hat sich teilweise überschnitten - Du hast editiert :)

Vermutung: Du erzeugst quasi rekursiv das gleiche at. Da es schon da ist wird es nicht neu erzeugt.
Dein Auszug ist aus dem Eventmonitor, schau mal ins Log dort wird es eventuell bei der 2. Runde Fehler geben ( was zu beweisen war )

1. Tipp: niemals einfach auf alles reagieren! notify Trigger tablette:.ja tablette:ja spart Dir das if (){}
2. Tipp: Versuch es einfach mit einem sleep 20
3. Tipp das hier:
elsif (Value("tablette") eq "nein"){
fhem("set tablette nein")

Ist doch redundant? Wenn nein dann nein?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rudolfkoenig

Endlich ein Beispiel, wo die Rekursive-Endlosschleife-Vermeidung sinnvoll zuschlaegt. :)

metzedo

Hey,

schonmal Danke für die schnellen Tips. War leider erst nach dem Speichern über die "Code"-Markierung gestolpert....

Ich habe nun mein Notify wie folgt angepasst:

tablette:.ja
set telegrambot.Do send Tablette nehmen!!;
set tablette nein;
define tabletten_info_timer at +0:00:20 set tablette ja;


Leider passiert nun gar nichts mehr, das Notify "löst" nicht aus...

Wo liegt denn nun mein Fehler  :-\

Otto123

#4
Vorschlag:
defmod tablette dummy
attr tablette room tablette
attr tablette setList ja nein
attr tablette webCmd ja:nein

defmod n_ja notify tablette:ja define a_tablette at +*00:00:10 setreading tablette Alarm on
attr n_ja room tablette

defmod n_nein notify tablette:nein delete a_tablette;;setreading tablette Alarm off
attr n_nein room tablette


Kann man eleganter machen, aber so ist es ausführlich :)

Der Alarm ist nur symbolisch, musst Du deine Variante nehmen ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Otto123

Zitat von: metzedo am 21 September 2020, 20:27:56
Wo liegt denn nun mein Fehler  :-\
Du hast nicht den Eventmonitor zum erzeugen des notifys genommen ;) siehe mein Code.
Mein Tipp oben war falsch, hab es korrigiert.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rudolfkoenig

Falls ein notify nicht reagiert, dann am besten das notify ueber den Event-Monitor anlegen oder den Notify-Regexp darueber anpassen.

Otto123

anstatt der zwei notify:
defmod n_ja2 notify tablette:ja define a_tablette at +*00:00:10 setreading tablette Alarm on;;sleep tablette:nein;; delete a_tablette
attr n_ja2 room tablette
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

metzedo