DOIF mit Zeit zwischen Readings

Begonnen von dinkel75, 21 Januar 2018, 19:20:22

Vorheriges Thema - Nächstes Thema

dinkel75

Hallo,

ich steh mal wieder an!

Ich möchte mit einem DOIF auswerten, wann die letzte Statusmeldung geschickt wurde. Wenn diese Zeit zu lange ist, möchte ich dann einen Dummy setzen. Es klappt nicht - irgenwie ist mir die Klammersetzung ein Rätsel!
Hier meine DOIF def:

([{ReadingsAge("handy_status_akku","state",1212)}] > 3601) (set handy_lebt on) DOELSE (set handy_lebt off)


Kann da mal wer drüber gucken?

Dank!

JoWiemann

Off Topic

Das kann ja auch nicht gehen, oder wie soll ein Internethändler auf ein DOIF reagieren.  :) ;)

Duck und weg...
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

dinkel75

Versteh nicht was du meinst?
Bin hier aber schon im Anfängerforum oder?

JoWiemann

Die Programmiersprache heißt Perl der Versandhändler Pearl.

Grüße Jörg

Und, wie gepostet off Topic ...
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

JoWiemann

PS: So wie ich DOIF verstehe gehören die eckigen Klammern [] da nicht hin.

(Perl-Ebene [DOIF-Präprozessor] Perl-Ebene [DOIF-Präprozessor] ...). Mit [{...}] kann der Präprozessor nichts anfangen.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

KernSani

Moin,

1.) Bitte code tags verwenden (das # oben im Editor über den Smilies) - siehe hier
2.) Ein DOIF ist nicht gerade geeignet, um zu überwachen, ob ein Gerät aktiv ist, denn DOIF braucht einen Trigger (es muss also was passieren). Um etwas zu tun wenn für eine Zeit lang nichts passiert, gibt es den watchdog.

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

dinkel75

#6
Mit deinem off Topic kann ich halt nichts anfangen!

Habs geschafft: weder Eckige noch geschwungene Klammern.

(ReadingsAge("handy_status_akku","state",1212) < 1) (set handy_lebt on) DOELSE (set handy_lebt off)


dinkel75

Das mit dem Watchdog guck ich mir an - Danke!

JoWiemann

Zitat von: dinkel75 am 21 Januar 2018, 20:01:55
Mit deinem off Topic kann ich halt nichts anfangen!

Schade, keinen Sinn für Ironie? In Deinem Threadtitel schreibst Du: DOIF mit Pearl (so heißt der Internethändler, PERL die Programmiersprache) und ich merke an, dass ein Internethändler nichts mit einem DOIF anfangen kann.

...
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

KernSani

Zitat von: dinkel75 am 21 Januar 2018, 20:01:55
Habs geschafft: weder Eckige noch geschwungene
Kann man sich einfach merken: Im Bedingungsteil ist ein DOIF im wesentlichen Perl, mit ein bissche DOIF, im Anweisunsteil FHEM mir ein bisschen DOIF.

Wird dir aber nichts bringen, da dein DOIF nicht getriggert wird.

Und nochmal: Bitte code tags für coding...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Otto123

Edit: da war ich jetzt viel zu langsam, aber das Beispiel aus der Commandref passt vielleicht doch noch - oder?

Hallo Dinkel75,

ändere bitte den Betreff  ;)
Und nimm bitte Codetags -> die # Taste über dem  :-X

Und verschiebe Deine Frage besser nach dem Unterforum DOIF -> ganz unten links

Und in der Doku gibt es dieses Beispiel, das sollte bei Dir passen?
ZitatZeitspanne eines Readings seit der letzten Änderung   back

Bei Readingangaben kann die Zeitspanne mit [<Device>:<Reading>:sec] in Sekunden seit der letzten Änderung bestimmt werden.

Anwendungsbeispiel: Licht soll angehen, wenn der Status des Bewegungsmelders in den letzten fünf Sekunden upgedatet wurde.

define di_lamp DOIF ([BM:state:sec] < 5) (set lamp on-for-timer 300)
attr di_lamp do always

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

dinkel75

Danke Otto!

So einfach gehts, wenn mans weiß!

Hab noch einiges zu lernen, aber es wird!

KernSani

Ups... habe auch was gelernt, wusste garnicht, dass DOIF mittlerweile auch ein Watchdog ist...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Otto123

Zitat von: dinkel75 am 21 Januar 2018, 20:31:53
Danke Otto!

So einfach gehts, wenn mans weiß!

Hab noch einiges zu lernen, aber es wird!
Das mit der Betreff Zeile musst Du noch üben, die sollte Aussagekräftig zum Problem sein. DOIF ist jetzt ein bissl kurz  ;D
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

Es gibt noch die Variante:
ZitatZurücksetzen des Waittimers für das gleiche Kommando   back

Im Gegensatz zu do always wird ein Waittimer mit dem Attribut do resetwait auch dann zurückgesetzt, wenn die gleiche Bedingung wiederholt wahr wird.
Damit können Ereignisse ausgelöst werden, wenn etwas innerhalb einer Zeitspanne nicht passiert.
Das Attribut do resetwait impliziert eine beliebige Wiederholung wie do always. Diese lässt sich allerdings mit dem Attribut repeatsame einschränken s. u.

Anwendungsbeispiel: 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
aber die passt in dem Fall nicht so gut.
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