FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Tungsten am 02 April 2019, 08:34:05

Titel: DOIF - Telegram bei Ausfall
Beitrag von: Tungsten am 02 April 2019, 08:34:05
Hallo Zusammen,

ich will mir ein Teleggram schicken lassen, wenn ein Reading nicht aktualisiert wird, da dann vermutlich die Verbindung ausgefallen ist. Irgendwie klappt das aber nicht. Könnte mich jemand in die richtige Richtung schubsen?

List vom DOIF


Internals:
   DEF        ([Aussen:humidity]) (set telegram message Achtung \nJeeLink Ausfall) DOELSE
   FUUID      5c472d1a-f33f-2776-d4fc-a4458db9dbxxxxx
   MODEL      FHEM
   NAME       JeelinkAusfallDOIF
   NR         112
   NTFY_ORDER 50-JeelinkAusfallDOIF
   STATE      cmd_1
   TYPE       DOIF
   VERSION    18890 2019-03-13 18:56:41
   READINGS:
     2019-03-29 10:52:39   Device          Aussen
     2019-03-17 10:12:15   cmd             1
     2019-03-17 10:12:15   cmd_event       Aussen
     2019-03-17 10:12:15   cmd_nr          1
     2019-03-29 10:51:43   e_Aussen_humidity 68
     2019-01-24 12:52:02   mode            enabled
     2019-03-17 10:12:15   state           cmd_1
     2019-03-29 10:51:43   wait_timer      29.03.2019 11:51:43 cmd_1 Aussen
   Regex:
     accu:
   attr:
     wait:
       0:
         3600
   condition:
     0          ::ReadingValDoIf($hash,'Aussen','humidity')
   devices:
     0           Aussen
     all         Aussen
   do:
     0:
       0          set telegram message Achtung \nJeeLink Ausfall
     1:
       0         
   helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   itimer:
   perlblock:
   readings:
     0           Aussen:humidity
     all         Aussen:humidity
   uiState:
   uiTable:
Attributes:
   do         resetwait
   room       6_DOIF,Telegram
   wait       3600


List vom Device

Internals:
   DEF        00
   FUUID      5c472d15-f33f-2776-0f6b-375b19fb0xxxxxxx
   IODev      myJeeLink
   NAME       Aussen
   NR         74
   STATE      T: 14.5 H: 68
   TYPE       LaCrosse
   addr       00
   corr1      0
   corr2      0
   READINGS:
     2019-03-29 10:56:03   battery         ok
     2019-03-29 10:56:03   humidity        68
     2019-03-29 10:55:40   state           T: 14.5 H: 68
     2019-03-29 10:56:03   temperature     14.5
     2019-03-12 14:44:38   windDirectionDegree 247.5
     2019-03-12 14:44:38   windDirectionText WSW
     2019-03-12 14:44:38   windGust        80.9
     2019-03-12 14:44:38   windSpeed       48.6
Attributes:
   DbLogExclude state,battery
   DbLogInclude temperature|humidity
   IODev      myJeeLink
   alias      1 Aussen
   event-min-interval temperature:900,humidity:900,state:900,battery:43200
   event-on-change-reading humidity:3,temperature:1
   fp_1_OG    191,875,1,Aussen,
   fp_2_EG    119,290,1,Aussen,
   fp_3_Keller 121,251,1,Aussen,
   icon       icoKLIMA
   room       2_Temperaturen
   suppressReading rain



Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Per am 02 April 2019, 11:40:45
Zitat von: Tungsten am 02 April 2019, 08:34:05Irgendwie klappt das aber nicht.
Was davon klappt denn nicht?
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Tungsten am 02 April 2019, 12:07:17
es wird kein Telegram verschickt. Telegram an sich funktioniert aber mit anderen DOIFs, sollte somit funktionieren.
Somit vermute ich den Fehler im DOIF, das erkennen soll wenn sich das Reading des Sensors nicht geändert hat in einem Zeitraum.
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Damian am 02 April 2019, 12:14:57
Zitat von: Tungsten am 02 April 2019, 12:07:17
es wird kein Telegram verschickt. Telegram an sich funktioniert aber mit anderen DOIFs, sollte somit funktionieren.
Somit vermute ich den Fehler im DOIF, das erkennen soll wenn sich das Reading des Sensors nicht geändert hat in einem Zeitraum.

laut list hat DOIF aber die Anweisung um 10:12:15 Uhr ausgeführt:

2019-03-17 10:12:15   cmd             1
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Tungsten am 02 April 2019, 12:26:57
ja, aber das war am 17.3.
das Device hat die Readings zuletzt am 29.3. aktualisiert. Da wurde der Pi auch einmal neu gestartet.
Damit hätte am 29.3. das DOIF schalten müssen, hat es aber nicht... :-(

     2019-03-29 10:56:03   humidity        68
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Per am 02 April 2019, 13:42:09
Sensor
2019-03-29 10:56:03   humidity        68

DOIF
2019-03-29 10:51:43   wait_timer      29.03.2019 11:51:43 cmd_1 Aussen

Sieht für mich aus, als geht es. War nur noch nicht so weit (11:51:43 sollte Telegram zuschlagen).
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Tungsten am 02 April 2019, 13:50:12
ja, aber heute ist der 2.4. und es ist nichts passiert, angekommen. also funktioniert es nicht. weiß aber nicht warum....
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Tungsten am 02 April 2019, 13:53:47
wenn ich manuell cmd_1 setze kommt die Nachricht an aber nicht im Live Betrieb.
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Per am 02 April 2019, 14:35:53
Setz das DOIF mal zurück und fang von vorn an.
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Damian am 02 April 2019, 14:41:34
Zitat von: Tungsten am 02 April 2019, 13:50:12
ja, aber heute ist der 2.4. und es ist nichts passiert, angekommen. also funktioniert es nicht. weiß aber nicht warum....

Du postest heute Lists, die aber schon paar Tage alt sind:

     2019-03-29 10:51:43   wait_timer      29.03.2019 11:51:43 cmd_1 Aussen


Dieser Eintrag wird entweder verlängert mit aktuellem Datum oder verschwindet, wenn er abläuft (nach 3600 Sekunden). Beides passt hier nicht zu heute.
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Tungsten am 02 April 2019, 14:49:22
nein, beide lists sind heute morgen frisch gezogen. es hätte am 29.3. ein Telegram geschickt werden sollen. Wurde es aber nicht. Seit dem sind die Readings nicht aktualisiert worden, da das Device nicht ansprechbar ist. Genau deshalb soll ja das Telegram geschickt werden, damit ich in den Kellere gehe und es einmal aus und wieder einstecke. Leider hat der Stick am Pi kein FTDI so dass nach Pi Restart der Stick einmal neu eingesteckt werden muss. Da ich dies immer vergesse habe ich das DOIF angelegt. Das scheint aber nicht zu funktionieren.
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Ellert am 02 April 2019, 15:21:56
Zitat von: Tungsten am 02 April 2019, 14:49:22
nein, beide lists sind heute morgen frisch gezogen. es hätte am 29.3. ein Telegram geschickt werden sollen. Wurde es aber nicht. Seit dem sind die Readings nicht aktualisiert worden, da das Device nicht ansprechbar ist. Genau deshalb soll ja das Telegram geschickt werden, damit ich in den Kellere gehe und es einmal aus und wieder einstecke. Leider hat der Stick am Pi kein FTDI so dass nach Pi Restart der Stick einmal neu eingesteckt werden muss. Da ich dies immer vergesse habe ich das DOIF angelegt. Das scheint aber nicht zu funktionieren.
wait-Timer überleben keinen Neustart. Mit DOIFtools kannst Du vor einem Neustart abfragen, ob noch wait-Timer laufen, s. https://wiki.fhem.de/wiki/DOIFtools#Laufende_Wait-Timer_anzeigen
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Tungsten am 02 April 2019, 15:32:13
hm, dann hab ich ein grundsätzliches design problem. wie löse ich das problem? ich schaue doch vor einem neustart nicht in FHEM nach wait timern, sonst könnte ich ja auch dran denken in den keller zu laufen und den stick raus und reinzustecken. vergesse ich aber immer wieder...
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Damian am 02 April 2019, 15:49:21
Zitat von: Tungsten am 02 April 2019, 14:49:22
nein, beide lists sind heute morgen frisch gezogen. es hätte am 29.3. ein Telegram geschickt werden sollen. Wurde es aber nicht. Seit dem sind die Readings nicht aktualisiert worden, da das Device nicht ansprechbar ist. Genau deshalb soll ja das Telegram geschickt werden, damit ich in den Kellere gehe und es einmal aus und wieder einstecke. Leider hat der Stick am Pi kein FTDI so dass nach Pi Restart der Stick einmal neu eingesteckt werden muss. Da ich dies immer vergesse habe ich das DOIF angelegt. Das scheint aber nicht zu funktionieren.

Dann muss auch dein DOIF stehen ;) , denn

dieser Eintrag

    2019-03-29 10:51:43   wait_timer      29.03.2019 11:51:43 cmd_1 Aussen

kann so nicht sein . Ob dein Device etwas sendet oder nicht, es können hier keine Zeiten stehen, die älter als deine gesetzten 3600 Sekunden sind.
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Tungsten am 02 April 2019, 16:02:47
was soll ich sagen, so habe ich es heute morgen ausgelesen.... :-(
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Ellert am 02 April 2019, 16:58:06
Zitat von: Tungsten am 02 April 2019, 15:32:13
hm, dann hab ich ein grundsätzliches design problem. wie löse ich das problem? ich schaue doch vor einem neustart nicht in FHEM nach wait timern, sonst könnte ich ja auch dran denken in den keller zu laufen und den stick raus und reinzustecken. vergesse ich aber immer wieder...
Es gibt ein globales Initialisierungsereignis nach einem Neustart, darauf könntest Du triggern.
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Damian am 02 April 2019, 17:53:39
Zitat von: Tungsten am 02 April 2019, 16:02:47
was soll ich sagen, so habe ich es heute morgen ausgelesen.... :-(

Tja, ich habe noch nicht erlebt, dass ein Timer verloren geht. Du kannst die wait-Zeitspanne auf ein paar Sekunden setzen und das Modul durch ein Event künstlich antriggern und schauen, ob nach Ablauf der Zeitspanne (ohne weitere Trigger) das wait_timer-Reading auf "no timer" wechselt, ansonsten stimmt mit deinem System etwas nicht.

Nach einem Neustart wird das Reading wait_timer gelöscht und erst mit dem ersten Trigger gesetzt.


Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Ellert am 02 April 2019, 18:20:17
Zitat von: Damian am 02 April 2019, 17:53:39
Nach einem Neustart wird das Reading wait_timer gelöscht und erst mit dem ersten Trigger gesetzt.

Das kann ich nicht nachvollziehen. Ich habe save und shutdown restart ausgeführt, danach wird der Timer weiterhin angezeigt. Die Readings werden nach der Initialisierung aus fhem.save restauriert, der laufende Timer natürlich nicht.

Wenn kein save ausgeführt wird, dann existiert das Reading nach Neustart nicht.

Zitat2019.04.02 18:02:33.164 0: Server shutdown

Zitatwait_timer  02.04.2019 18:32:12 cmd_1 FS   2019-04-02 18:02:12
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Ellert am 02 April 2019, 18:37:26
Das Reading existiert wie erwartet auch nach vermeintlichem Ablauf des Timers noch
Zitatwait_timer  02.04.2019 18:32:12 cmd_1 FS   2019-04-02 18:02:12
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Damian am 02 April 2019, 18:45:51
Zitat von: Ellert am 02 April 2019, 18:20:17
Das kann ich nicht nachvollziehen. Ich habe save und shutdown restart ausgeführt, danach wird der Timer weiterhin angezeigt. Die Readings werden nach der Initialisierung aus fhem.save restauriert, der laufende Timer natürlich nicht.

Wenn kein save ausgeführt wird, dann existiert das Reading nach Neustart nicht.

Ok. Dann erklärt das einiges. Den Fall habe ich so offenbar noch nicht getestet. Das Reading, wie viele andere, werden, wie ich gerade nachgeschaut habe, nur bei defmod zur Laufzeit gelöscht.

Es ist sicherlich ein Schönheitsfehler, den ich beheben könnte, auf der anderen Seite weiß man jetzt, dass das System, vor dem Ablauf des Timers heruntergefahren wurde.

Dann braucht man nur zu definieren:

([Aussen:humidity] or [global:"^INITIALIZED$"]) (set telegram message Achtung \nJeeLink Ausfall)

und alles ist gut.

PS.: DOELSE ist hier überflüssig
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Tungsten am 02 April 2019, 18:50:14
Danke Euch!

DOELSE am Ende habe ich mir mal angewöhnt...  ::)
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Tungsten am 02 April 2019, 18:52:54
eine Frage noch die mir gerade gekommen ist.
Ich frage hier ja umständlich ein Reading ab um zu prüfen um ein Stick arbeitet. Könnte man auch direkt auf das USB Devices am Pi prüfen, ob es da ist?
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Damian am 02 April 2019, 19:00:41
Zitat von: Tungsten am 02 April 2019, 18:52:54
eine Frage noch die mir gerade gekommen ist.
Ich frage hier ja umständlich ein Reading ab um zu prüfen um ein Stick arbeitet. Könnte man auch direkt auf das USB Devices am Pi prüfen, ob es da ist?

Dahinter verbirgt sich sicherlich ein USB-Device, welches in FHEM definiert ist und seinen aktuellen Zustand anzeigt, den man nach dem Hochfahren abfragen kann. Wie es geht, habe ich in meinem letzten Post aufgezeigt.
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Tungsten am 02 April 2019, 19:42:35
sorry, evtl habe ich mich nicht klar ausgedrückt. Das device was ich aktuell abfrage ist ein Lacross Funksensor. Kein USB Device. Ich versuche jedoch darüber, dass das Device keine neuen Readings erzeugt heraus zu finden ob der JeeLink USB Stick arbeitet.

Habe mal ein list auf das JeeLink device gemacht.

Nach einem Neustart des Pi fehlen ein paar Internals und werden erst nach einen Aus und Einstecken des JeeLink gesetzt. Wenn ich auf diese prüfen kann, wüsste ich dass der Stick nicht arbeitet.
Das einzige Reading ist State und das bleibt immer auf initialized.

Die Frage ist also eher ob ich auch auf Internals prüfen kann, ob vorhanden oder nicht?

Nach Neustart des Pi:
ZitatInternals:
   Clients    :PCA301:EC3000:RoomNode:LaCrosse:ETH200comfort:CUL_IR:HX2272:FS20:AliRF:Level:EMT7110:KeyValueProtocol
   DEF        /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0@57600
   DeviceName /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0@57600
   FD         19
   FUUID      5c472d14-f33f-2776-105c-8f08dac8ac011ab9
   NAME       myJeeLink
   NR         53
   PARTIAL   
   STATE      initialized
   TYPE       JeeLink
   initMessages
   model      LaCrosseITPlusReader.10.1q
   settings   (RFM12 f:868300 r:17241)
   MatchList:
     1:PCA301   ^\S+\s+24
     2:EC3000   ^\S+\s+22
     3:RoomNode ^\S+\s+11
     4:LaCrosse ^(\S+\s+9 |OK\sWS\s)
     5:AliRF    ^\S+\s+5
     6:EMT7110  ^OK\sEMT7110\s
     7:KeyValueProtocol ^OK\sVALUES\s
   READINGS:
     2019-04-02 19:13:00   state           initialized
Attributes:
   flashCommand avrdude -p atmega328P -c arduino -P [PORT] -D -U flash:w:[HEXFILE] 2>[LOGFILE]
   initCommands 0m 0r 0t 6M 2R 20T 868300f 60h 0a v
   room       LaCrosse

Nach Aus und Einstecken des Jeelink am Pi:
ZitatInternals:
   Clients    :PCA301:EC3000:RoomNode:LaCrosse:ETH200comfort:CUL_IR:HX2272:FS20:AliRF:Level:EMT7110:KeyValueProtocol
   DEF        /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0@57600
   DeviceName /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0@57600
   FD         64
   FUUID      5c472d14-f33f-2776-105c-8f08dac8ac011ab9
   NAME       myJeeLink
   NR         53
   PARTIAL   
   RAWMSG     OK 9 44 1 4 184 45
   STATE      initialized
   TYPE       JeeLink
   initMessages
   model      LaCrosseITPlusReader.10.1q
  myJeeLink_MSGCNT 87
  myJeeLink_TIME 2019-04-02 19:25:51
   settings   (RFM12 f:868300 r:17241)
   MatchList:
     1:PCA301   ^\S+\s+24
     2:EC3000   ^\S+\s+22
     3:RoomNode ^\S+\s+11
     4:LaCrosse ^(\S+\s+9 |OK\sWS\s)
     5:AliRF    ^\S+\s+5
     6:EMT7110  ^OK\sEMT7110\s
     7:KeyValueProtocol ^OK\sVALUES\s
   READINGS:
     2019-04-02 19:25:51   state           initialized
Attributes:
   flashCommand avrdude -p atmega328P -c arduino -P [PORT] -D -U flash:w:[HEXFILE] 2>[LOGFILE]
   initCommands 0m 0r 0t 6M 2R 20T 868300f 60h 0a v
   room       LaCrosse
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Tungsten am 02 April 2019, 20:01:28
okay, das beantwortet glaube ich meine Frage.
https://forum.fhem.de/index.php?topic=66389.0

Zu schnell geschrieben und noch nicht gesucht... ;-)
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Ellert am 02 April 2019, 22:58:59
Hast Du schon versucht das USB-Device by-path einzubinden, ich meine gelesen zu haben, dass damit die Zuordnungsprobleme behoben werden.
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Tungsten am 03 April 2019, 08:54:32
nein, was genau meinst du damit?

Mein Gedanke auf eins der Internals zu prüfen scheint nicht zu gehen, da das Internal ja gar nicht da ist. Was ich bisher gelesen habe kann man nur auf den Wert eines Internals prüfen, aber nicht ob das Internal überhaupt da ist, oder?
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Ellert am 03 April 2019, 09:17:53
Zitat von: Tungsten am 03 April 2019, 08:54:32
nein, was genau meinst du damit?
Du hast das USB-Device in FHEM eingebunden und wenn Du Dir die Listings ansiehst, dann siehst Du in der Zeile, die mit DEF beginnt, das es by-id eingebunden ist.
Da der CH340 keine ID hat, gibt es Zuordnungsprobleme. Wenn Du es by-path einbindest, soll es die Probleme nicht geben. Einen Link zu einer Anleitung habe ich nicht parat, da müsstest Du Dich selbst bemühen, die Stichworte sind hier schon gefallen.

Es ist immer sinvoller die Ursachen eines Problems zu bekämpfen, als die Symptome, aber Du könntest auch auf das nicht vorhanden sein eines Internals prüfen, über den Defaultwert.
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Tungsten am 12 April 2019, 11:39:34
habe es jetzt mal so eingebunden:

/dev/serial/by-path/platform-3f980000.usb-usb-0:1.2.4:1.0-port0@57600

Leider wird nach einem Restart des Pi auch in diesem Fall der Stick nicht eingebunden.
Ich muss wieder erst den Stick abziehen und wieder neu verbinden.
Schade, hatte gehofft dies mit deinem Hinweis nicht mehr machen zu müssen.
Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Ellert am 12 April 2019, 12:19:55
Kann sein, dass andere USB-Geräte (falls vorhanden) auch by-path eingebunden werden müssen, damit der Pfad nicht weggeschnapt wird.

Dann gibt es noch die Möglichkeit Geräte über eine udev-Regel eindeutig einzubinden, ein erster Einstieg https://wiki.ubuntuusers.de/udev/ , dass wurde hier auch schon mal diskutiert.

Titel: Antw:DOIF - Telegram bei Ausfall
Beitrag von: Beta-User am 12 April 2019, 12:32:17
Vielleicht noch ein paar Anmerkungen zur eindeutigen Adressierung von USB-Geräten: Grundsätzlich haben alle USB-Geräte eine Minimal-ID, anhand der das OS die ganzen Zuordnungen macht. Also auch die CHG34x-e. udev bringt einen da nur begrenzt weiter, denn der hat auch keine erweiterten Erkenntnismöglichkeiten (und wird afaik bei debian-Systemen üblicherweise verwendet, um "by-id" und "by-path" abzuleiten).

Das Problem bei den CHG34x ist nur, dass die alle DIESELBE ID haben, weswegen "by-id" dann nicht funktioniert, wenn man MEHRERE im Einsatz hat. Bei einem (dieses Typs, andere Typen sind schnurz) klappt das by-id nach meinem Kenntnisstand immer; hat man mehrere von denen, sollte man die betreffenden IO's ALLE by-path definieren. Alle anderen (nicht-CHG34x) können auch by-id sein, das ich grundsätzlich vorziehen würde, weil das auch dann klappt, wenn man mal Sticks abzieht und andersherum einsteckt.

MaW: was ist sonst noch an seriellen Geräten an USB eingebunden?