Notify zwischen 22-4 Uhr ? Wie Tagübergreifend ???

Begonnen von TottiToad, 14 September 2017, 20:29:42

Vorheriges Thema - Nächstes Thema

TottiToad

Hallo zusammen,

ich versuche mich gerade mit einem weiteren Notify, doch leider funktioniert es nicht so wie gewünscht.

Es reagiert halt immer und nicht nur zwischen der angegebenen Zeit.


WZ.Hub.currentActivity:.PowerOff IF ($hms gt "22:00" or $hms lt "3:00") ((set LichtFlurSicherung on-for-timer 120), (set Sonos_Kueche Speak 30 de Gute Nacht), (define Time1 at +00:01:00 set HUEGroup1 off))

Den Code habe ich so im DEF definiert

- Das Notify "reagiert" sobald ich mit der Harmony den Fernseher etc. ausschalte
- Licht im Flur geht dann für 120sek an
- Sonos startet Sprachausgabe "Gute Nacht"
- Licht im Wohnzimmer wird nach einer Minute ausgeschaltet

Wie gesagt die "Set Befehle" funktionieren, jedoch egal zu welcher Zeit.

Was macht ich falsch ?
Wie muss ich den Zeitraum angeben ?

Grüße & Danke vorab
Torsten

P.S.: Habe gerade noch gemerkt das die Sprachausgabe 3x hintereinander erfolgt. Muss da wohl nochmal schauen warum

kumue

schau dir mal diesen thread an, interessant ist für dich die funktion isTime
https://forum.fhem.de/index.php/topic,76333

CoolTux

Hier einmal der Einfachheit halber

sub isInTime($) {

    my $dfi = shift;

    $dfi =~ s/{([^\x7d]*)}/$cmdFromAnalyze=$1; eval $1/ge; # Forum #69787
    my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
    my $dhms = sprintf("%s\@%02d:%02d:%02d", $wday, $hour, $min, $sec);
    foreach my $ft (split(" ", $dfi)) {
        my ($from, $to) = split("-", $ft);
        if(defined($from) && defined($to)) {
            $from = "$wday\@$from" if(index($from,"@") < 0);
            $to   = "$wday\@$to"   if(index($to,  "@") < 0);
            return 1 if($from le $dhms && $dhms le $to);
        }
    }
   
    return 0;
}


Diese Funktion bitte in eine 99_myUtils eintragen und abfragen mit

isInTime('22:00-24:00 00:00-04:00')
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

TottiToad

Alles schaue ich mir mal genauer an ;)


Aber auf dem ersten Blick geht es dann darum entweder eine Funktion in der 99_myUtils.pm einzubauen anstatt meiner Notify und/oder auf Perl Ebene, oder ?

Wenn ich es richtig verstehe bewege ich mit den Klammen "{ }" auf Perl ebenen und nicht im FHEM oder ?


An Funktionen in 99_myUtils.om will ich erst ran wenn ich mich weiter mit allem beschäftigt habe.
Ebenso mit DOIF.

Habe zwar schon auch zwei, drei DOIF am laufen.
Möchte aber gerne zu beginn erstmal NOTIFY richtig verstehen, bevor ich dann weiter mit DOIF mache. Unabhängig davon was welche Vorteile und Nachteile hat.

Bin doch neu und will lernen ;) :)

Grüße
Torsten

Frank_Huber

Alternativ Doif verwenden. ([WZ.Hub.currentActivity:.Power off] and ([22:00-24:00] or [00:00-04:00])) (set.......)

Gesendet von meinem S3_32 mit Tapatalk


TottiToad

@CoolTux

Danke !
Hab deinen Beitrag erst gesehen, als ich meine Antwort geschrieben hatte.


Also den Code in 99_myUtils kopieren und dann in mein Notify isInTime einbauen ?

So ?

WZ.Hub.currentActivity:.PowerOff IF (isInTime('22:00-04:00')) ((set LichtFlurSicherung on-for-timer 120), (set Sonos_Kueche Speak 30 de Gute Nacht Schlaft schön ihr zwei), (define Time1 at +00:01:00 set HUEGroup1 off))


Danke & Grüße
Torsten

kumue

Zitat von: TottiToad am 14 September 2017, 20:48:43
Aber auf dem ersten Blick geht es dann darum entweder eine Funktion in der 99_myUtils.pm einzubauen anstatt meiner Notify und/oder auf Perl Ebene, oder ?

Wenn ich es richtig verstehe bewege ich mit den Klammen "{ }" auf Perl ebenen und nicht im FHEM oder ?
Richtig, die Funktion - jetzt heißt sie isInTime  ;) - kommt in die 99_myUtils.pm.
Aufgerufen wird sie dann im notify.
Falls Du noch keine 99_myUtils.pm hast, dann schau im Wiki nach... da findest Du eine Anleitung.

Und wieder richtig, zwischen den { } bewegst Du dich auf der Perl-Ebene.

CoolTux

Hallo Torsten,

Da es sich um eine Perlfunktion handelt musst Du auf Perlebene gehen. Das machst Du aus FHEM heraus in dem Du Deinen Code in { } setzt. Du kannst FHEM und Perlcode nicht vermischen. Du kannst aber FHEM Routinen auf Perlebene aufrufen.
Also den Code von isInTime einfach in eine 99_myUtils kopieren. Diese dann neu laden
reload 99_myUtils
und dann im Notify

WZ.Hub.currentActivity:.PowerOff { fhem('set LichtFlurSicherung on-for-timer 120; set Sonos_Kueche Speak 30 de Gute Nacht Schlaft schön ihr zwei; define Time1 at +00:01:00 set HUEGroup1 off') if( isInTime('22:00-24:00 00:00-04:00'); }
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

TottiToad

Riesen Dank euch !!!!

Mal ne Frage zu Perl innerhalb Notify

Ist dies kein Nachteil sozusagen auf zwei Ebenen zu sein ?
Meine sowas mal gelesen zu haben ?

Probiere den Code gleich mal aus. eine 99_myUtils hatte ich schon angelegt.

Mal sehen ;)

Grüße & Danke

CoolTux

Zitat von: TottiToad am 14 September 2017, 21:06:15
Riesen Dank euch !!!!

Mal ne Frage zu Perl innerhalb Notify

Ist dies kein Nachteil sozusagen auf zwei Ebenen zu sein ?
Meine sowas mal gelesen zu haben ?

Probiere den Code gleich mal aus. eine 99_myUtils hatte ich schon angelegt.

Mal sehen ;)

Grüße & Danke

Im Grunde ist alles Perl. Daher kein wirklicher Nachteil.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

TottiToad

So nochmals Riesen Dank für die schnelle und Super Hilfe !

Es läuft perfekt !!!


Jetzt muss ich nur noch herausfinden warum WZ.Hub.currentActivity:.PowerOff beim ausschalten scheinbar dreimal gesendet wird und im event Monitor auftaucht.

Will ja nicht drei mal Gute Nach hören :) :) :)

Frank_Huber

Im Doif könntest du die mehrmalige Ausführung über Attribute verhindern.
Nur so nebenbei. 😉

Gesendet von meinem S3_32 mit Tapatalk


CoolTux

Schau mal ob du was mit event-on-change-reading oder so machen kannst.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

igami

notify unterstützt auch das Attribut disabled-for-intervals und lässt sich damit von 04:00 bis 22:00 Uhr ausschalten.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

en-trust

#14
Also bei mir funktionietr das isTime nicht...
Zumindest die 2.Zeit gibt keinen Anruf, wenn die Tür geöffnet wird. Zwischen 8-9:30 klappt hingegen.

Internals:
   DEF        (SN.EG.HomeMatic.HausTuer|SN.EG.HomeMatic.TerrassenTuer):open.* { fhem ('set mySIP call +4917... 30 !Alarm Alarm Alarm') if (isInTime('08:00-09:30 09:45-06:00'));}
   NAME       UnautorisierteTueroeffnung.Alert
   NR         1381
   NTFY_ORDER 50-UnautorisierteTueroeffnung.Alert
   REGEXP     (SN.EG.HomeMatic.HausTuer|SN.EG.HomeMatic.TerrassenTuer):open.*
   STATE      2020-10-26 09:50:19
   TRIGGERTIME 1603702219.96481
   TYPE       notify
   READINGS:
     2020-10-26 09:20:53   state           active
Attributes:
   room       Haus->Flur,Haus->Wohnzimmer,Status