Enigma: DOIF wenn Reading sich nicht ändert

Begonnen von Michi240281, 17 September 2015, 15:05:50

Vorheriges Thema - Nächstes Thema

Michi240281

Hallo zusammen,

ich würde gerne mit dem Enigma-Modul und einem DOIF erreichen, dass eine Nachricht auf dem Screen angezeigt wird, wenn sich ein Reading z.B. 2h lang nicht ändert.

Anwendungsfall: Man schaut abends fern und schläft dabei ein. Dann soll nach z.B. 2h auf dem gleichen Kanal eine Mitteilung auf dem Screen erscheinen, dass man umschalten soll und wenn das nicht innerhalb von x Minuten passiert, geht der Receiver aus (und damit laufen dann weitere Folgereaktionen ab).

Nur wie bekommt man die Bedingung irgendwie formuliert, dass sich ein Reading NICHT ÄNDERT?

Besten Dank an Euch
Viele Grüße
Michael
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

marvin78


Loredo

genau der Fall ist doch in der deutschen Commandref für DOIF beschrieben
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Michi240281

@Marvin: Ob watchdog oder DI ist ja an sich egal

@Loredo: Echt? Dann schau ich da mal, danke!!!
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Michi240281

#4
Das scheint nicht zu funktionieren:

Internals:
   CFGFN
   DEF        ([DM500HD:channel:sec] > 20) (set DM500HD msg message 30 TEST)
   NAME       DM500HD_Test
   NR         92076
   NTFY_ORDER 50-DM500HD_Test
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-09-20 21:13:46   Device          DM500HD
     2015-09-20 21:13:46   e_DM500HD_channel SAT.1_HD
     2015-09-20 21:12:33   state           initialized
   Condition:
     0          ReadingSecDoIf('DM500HD','channel') > 20
   Devices:
     0           DM500HD
     all         DM500HD
   Do:
     0:
       0          set DM500HD msg message 30 TEST
     1:
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Internals:
   Itimer:
   Readings:
     0           DM500HD:channel
     all         DM500HD:channel
   State:
   Timerfunc:
   Trigger:
Attributes:
   do         always


Ne Idee, woran das liegen kann?


@Damian: Hast du vllt ne Idee?
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Michi240281

ALso scheinbar funktioniert das nicht so, wie ich das verstanden habe. Dachte, mit folgendem Audruck könnte ich darauf reagieren, wenn sich das Reading 60 Minuten nicht ändert:


([Spark_One:channel:sec] > 3600) (set Spark_One msg message 30 TEST)


Aber da passiert einfach überhaupt nichts!

@Damian: Ist das Modul in dieser Hinsicht unvollständig?

Habe es jetzt so gelöst, dass ich auf "< 10" prüfe und dann einen wait-timer starte, der 3600 Sekunden läuft. Funktioniert, aber ist ja irgendwie nicht die elegante Lösung! Haste ne Idee dazu?

Danke und Gruß
Michael
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Damian

Zitat von: Michi240281 am 27 September 2015, 21:55:24
ALso scheinbar funktioniert das nicht so, wie ich das verstanden habe. Dachte, mit folgendem Audruck könnte ich darauf reagieren, wenn sich das Reading 60 Minuten nicht ändert:


([Spark_One:channel:sec] > 3600) (set Spark_One msg message 30 TEST)


Aber da passiert einfach überhaupt nichts!

@Damian: Ist das Modul in dieser Hinsicht unvollständig?

Habe es jetzt so gelöst, dass ich auf "< 10" prüfe und dann einen wait-timer starte, der 3600 Sekunden läuft. Funktioniert, aber ist ja irgendwie nicht die elegante Lösung! Haste ne Idee dazu?

Danke und Gruß
Michael

So wird es nicht funktionieren. Man muss nur die richtige Stelle in der Commandref finden:

ZitatAnwendungsbeispiel: Meldung beim Ausbleiben eines Events

define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again")
attr di_push wait 1800
attr di_push do resetwait

Gruß

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

Michi240281

Kannst du mir den Absatz evtl. erklären? Ist nicht selbsterklärend finde ich....
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Damian

Zitat von: Michi240281 am 29 September 2015, 16:54:16
Kannst du mir den Absatz evtl. erklären? Ist nicht selbsterklärend finde ich....

Mit Wait wird der Trigger verzögert, mit do resetwait wird die Verzögerungszeit wieder neu gesetzt, wenn in der Wait-Phase wieder ein Trigger kommt.

Das ist alles, nicht mehr und auch nicht weniger.

Gruß

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

Michi240281

Aber dann muss ich in der Abfrage nur das Device angeben, ohne reading etc.?

define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again")
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Damian

Zitat von: Michi240281 am 30 September 2015, 13:20:18
Aber dann muss ich in der Abfrage nur das Device angeben, ohne reading etc.?

define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again")

oder einfach einen beliebigen Trigger des Devices (eingleitet mit einem Fragezeichen), also:

define di_push DOIF ([mein_device:?])(set pushmsg "sensor failed again")

Gruß

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

Michi240281

Ok, so richtig leuchtet mir das aber nicht ein! Könnte ja dann sein, dass sich irgendein Reading ändert.....ich will aber ja dann reagieren, wenn das reading "channel" sich 60 Minuten nicht ändert? Bin ich zu doof das zu verstehen?
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

marvin78

#12
@Michi: Bist du wieder zum nicht lesen über gegangen?

Damian schreibt

Zitat von: Damian am 30 September 2015, 13:33:09
oder einfach einen beliebigen Trigger des Devices (eingleitet mit einem Fragezeichen), also:

define di_push DOIF ([mein_device:?])(set pushmsg "sensor failed again")

Edit: Wobei das für deine Anwedung eher so lautet


define di_push DOIF ([mein_device:channel])(set pushmsg "sensor failed again")

Damian

Zitat von: marvin78 am 30 September 2015, 14:43:36
@Michi: Bist du wieder zum nicht lesen über gegangen?

Damian schreibt

Edit: Wobei das für deine Anwedung eher so lautet


define di_push DOIF ([mein_device:channel])(set pushmsg "sensor failed again")

ja, allerdings wird dann ja das Reading channel ausgewertet und wenn das Reading Null ist, dann ist die Bedingung nicht wahr.

Besser wäre in diesem Fall das Event auszuwerten und das wird bei DOIF, um es von der Auswertung eines Readings zu unterscheiden (wie oben angegeben), mit einem Fragezeichen eingeleitet.

dann also:

define di_push DOIF ([mein_device:?channel])(set pushmsg "sensor failed again")


Gruß

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

marvin78

Grr. Das Fragezeichen habe ich schlicht vergessen bzw. rausgelöscht.