Hauptmenü

DOIF oder NOTIFY?

Begonnen von c.brinkmann, 10 Oktober 2017, 15:57:34

Vorheriges Thema - Nächstes Thema

c.brinkmann

Moin Moin!

Je größer meine Programme werden und je mehr ich meiner eigenen Kreativität freien Raum für neue Projekte lasse, kommt bei mir immer mehr die Frage über den Unterschied eines DOIF´s und einer NOTIFY.
Wenn man sich Projekte von anderen anguckt, wird meistens für jeden einzelnen Befehl ein eigenes Notify angelegt.
Ich habe hauptsächlich zwei DOIF´s mit denen ich größtenteils experimentiere. Unter anderem ist das die Tür. hier werden bei verschiedenen Tastendrücken, etc. die Tür gesteuert. (Sind in der Summe 33 cmd´s. Bis auf, dass jeder Befehl nur einmal hintereinander ausgeführt werden kann, erkenne ich keine Nachteile, bzw unterschiede zu einem Notify. Ich habe mich für ein einzelnes DOIF entschieden, da ich keine 33 eigene Programme haben wollte.

Nun meine Frage: kann mir jemand den Unterschied beider erklären, bzw. mir ein Tip geben, wo ich dieses herausfinden kann?

Gruß, Christian

CoolTux

Das ist eher eine Glaubensfrage.
Und Umfangreiche Sachen macht man weder mit DOIF noch mit Notify sondern einzig in einer 99_myUtils. 33 CMD's da ist doch sicherlich jeglicher Überblick verloren gegangen.
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

CoolTux

Hier mal was zum Thema Licht damit man mal sieht das man sowas nicht in ein Notify oder DOIF pressen kann.
Die komplette Lichtsteuerung erfolgt voll Automatisch. Die Lichtschalter sind so sauber als wären sie neu eingebaut  ;D



###### Wohnungslicht ################
sub autoLightControl() {

## Hilfsvariablen
my $adv = adv();
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time());
my $lux = ReadingsVal('twilightStahnsdorf','lux',1000);

#### Helligkeitswert vom Pflanzensensor mit abfragen
fhem("set PflanzeFensterRechts statusRequest") if($hour > 04 and $hour < 23);
fhem("sleep 60; set PflanzeFensterLinks statusRequest") if($hour > 04 and $hour < 23);


########################
## Abends Licht an

    if( ((ReadingsVal( "twilightStahnsdorf", "twilight_weather", "100" ) < 55 and ReadingsVal( "twilightStahnsdorf", "twilight_weather", "100" ) > 24 and ReadingsVal( "twilightStahnsdorf", "state", "100" ) > 6
          and ReadingsVal( "twilightStahnsdorf", "state", "100" ) < 11 ) or (ReadingsVal( "twilightStahnsdorf", "twilight_weather", "100" ) > 24 and ReadingsVal( "twilightStahnsdorf", "state", "100" ) > 5
          and ReadingsVal( "twilightStahnsdorf", "state", "100" ) < 11))
        and (Value("dummyLgTV") eq "on" or ReadingsVal("Eltern","state","absent") eq "home") and $lux < 200 ) {

        if( Value( "LED_StreifenSelectTwilightDummy" ) eq "on" ) {
                if( $adv ) {     ## Abfrage Adventszeit aus 99_myUtils_Helper
                    fhem "set lightScenenLicht_Media scene Twilight_7_WohnzimmerFlurWeihnacht";
                    fhem "set room=Weihnacht:FILTER=state=off on";
                } else {
                    fhem "set lightScenenLicht_Media scene Twilight_7_WohnzimmerFlur";
                    fhem "set room=Weihnacht:FILTER=state=off on" if( Value("dummyLichtWinter") eq "active" );
                }
        } else {
                if( $adv ) {     ## Abfrage Adventszeit aus 99_myUtils_Helper
                    fhem "set lightScenenLicht_Media scene Twilight_7_WohnzimmerWeihnacht";
                    fhem "set room=Weihnacht:FILTER=state=off on";
                } else {
                    fhem "set lightScenenLicht_Media scene Twilight_7_Wohnzimmer";
                    fhem "set room=Weihnacht:FILTER=state=off on" if( Value("dummyLichtWinter") eq "active" );
                }
        }
           
            CommandSet(undef,"LichtDimmerStevenDeckenLampe_Sw:FILTER=pct=0 pct 50") if( Value("rr_Steven") eq "home" and $lux < 200 and Value('autoLichtsteuerungSteven') eq 'on' );
    }

    elsif( ReadingsVal( "twilightStahnsdorf", "twilight_weather", "100" ) < 66 and ReadingsVal( "twilightStahnsdorf", "twilight_weather", "100" ) > 24 and ReadingsVal( "twilightStahnsdorf", "state", "100" ) > 6
     and ReadingsVal( "twilightStahnsdorf", "state", "100" ) < 10 and $lux < 300 ) {
    fhem "set LED_StreifenFlurDecke bri 254; set LED_StreifenFlurDecke hue 44444 : sat 90" if( Value( "LED_StreifenSelectTwilightDummy" ) eq "on" );
    }

    elsif( ReadingsVal( "twilightStahnsdorf", "twilight_weather", "100" ) < 66 and ReadingsVal( "twilightStahnsdorf", "state", "100" ) == 6
     and ReadingsVal( "twilightStahnsdorf", "nextEvent", "ss_weather" ) eq "ss_weather" and $lux < 300) {
    fhem "set LED_StreifenFlurDecke bri 254; set LED_StreifenFlurDecke hue 44444 : sat 90" if( Value( "LED_StreifenSelectTwilightDummy" ) eq "on" );
    }
   
    ### Wenn die Eltern nicht zu Hause sind aber die Kinder
    elsif( ReadingsVal( "twilightStahnsdorf", "twilight_weather", "100" ) < 20 and ReadingsVal( "twilightStahnsdorf", "state", "100" ) > 9
     and ReadingsVal("Eltern","state","home") ne "home" and ReadingsVal("Kinder","state","absent") eq "home" and $lux < 200 ) {
    fhem "set LED_StreifenFlurDecke bri 254; set LED_StreifenFlurDecke hue 44444 : sat 90" if( Value( "LED_StreifenSelectTwilightDummy" ) eq "on" and $hour < 20 );
        fhem "set LED_StreifenFlurDecke bri 100; set LED_StreifenFlurDecke hue 47104 : sat 254" if( Value( "LED_StreifenSelectTwilightDummy" ) eq "on" and $hour > 19 );
        fhem "set room=Weihnacht:FILTER=state=off on" if( $adv or Value("dummyLichtWinter") eq "active" );     ## Abfrage Adventszeit aus 99_myUtils_Helper
        CommandSet(undef,"LichtDimmerStevenDeckenLampe_Sw:FILTER=pct=0 pct 50") if( Value("rr_Steven") eq "home" and $lux < 200 and Value('autoLichtsteuerungSteven') eq 'on' );
    }

    elsif( $hour > 20 and ReadingsVal( "twilightStahnsdorf", "twilight_weather", "100" ) < 40 and $lux < 200 and (Value("dummyLgTV") eq "on" or
     ReadingsVal("Eltern","state","absent") eq "home") ) {
    if( Value( "LED_StreifenSelectTwilightDummy" ) eq "on" ) {
            if( $adv ) {     ## Abfrage Adventszeit aus 99_myUtils_Helper
                fhem "set lightScenenLicht_Media scene Twilight_10_WohnzimmerFlurWeihnacht; set structureCandleFlur:FILTER=state=off on";
                fhem "set room=Weihnacht:FILTER=state=off on";
            } else {
                fhem "set lightScenenLicht_Media scene Twilight_10_WohnzimmerFlur; set structureCandleFlur:FILTER=state=off on";
                fhem "set room=Weihnacht:FILTER=state=off on" if( Value("dummyLichtWinter") eq "active" );
            }
    } else {
            if( $adv ) {     ## Abfrage Adventszeit aus 99_myUtils_Helper
                fhem "set lightScenenLicht_Media scene Twilight_10_WohnzimmerWeihnacht";
                fhem "set room=Weihnacht:FILTER=state=off on";
            } else {
                fhem "set lightScenenLicht_Media scene Twilight_10_Wohnzimmer";
                fhem "set room=Weihnacht:FILTER=state=off on" if( Value("dummyLichtWinter") eq "active" );
            }
    }
    }

    elsif( $hour > 19 and ReadingsVal( "twilightStahnsdorf", "twilight_weather", "100" ) < 60 and $lux < 200 and (Value("dummyLgTV") eq "on" or
     ReadingsVal("Eltern","state","absent") eq "home") ) {
    if( Value( "LED_StreifenSelectTwilightDummy" ) eq "on" ) {
            if( $adv ) {     ## Abfrage Adventszeit aus 99_myUtils_Helper
                fhem "set lightScenenLicht_Media scene Twilight_8_WohnzimmerFlurWeihnacht";
                fhem "set room=Weihnacht:FILTER=state=off on";
            } else {
                fhem "set lightScenenLicht_Media scene Twilight_8_WohnzimmerFlur";
                fhem "set room=Weihnacht:FILTER=state=off on" if( Value("dummyLichtWinter") eq "active" );
            }
    } else {
            if( $adv ) {     ## Abfrage Adventszeit aus 99_myUtils_Helper
                fhem "set lightScenenLicht_Media scene Twilight_8_WohnzimmerWeihnacht";
                fhem "set room=Weihnacht:FILTER=state=off on";
            } else {
                fhem "set lightScenenLicht_Media scene Twilight_8_Wohnzimmer";
                fhem "set room=Weihnacht:FILTER=state=off on" if( Value("dummyLichtWinter") eq "active" );
            }
    }
    }


########################
## Abends Licht aus

    elsif( ReadingsVal( "twilightStahnsdorf", "twilight_weather", "100" ) < 66 and ReadingsVal( "twilightStahnsdorf", "state", "100" ) > 5
     and Value("dummyLgTV") eq "off" and Value('structureLichtIsabelsZimmer') eq 'on' and ReadingsVal("Eltern","state","home") ne "home" ) {
    fhem "set structureLichtWohnzimmer [FILTER=STATE!=off] off" if( Value( "LED_StreifenSelectTwilightDummy" ) eq "on" );
    }


########################
## Morgens Licht aus

    elsif( ReadingsVal( "twilightStahnsdorf", "state", "100" ) == 4 and ReadingsVal( "twilightStahnsdorf", "twilight_weather", "100" ) > 55 and $lux > 200 and $lux < 500 ) {
    fhem "set (structureLichtWohnzimmer|NetzschalterKinZimIsabelHintenLinks):FILTER=STATE=on off; set group=Licht.Weihnachten:FILTER=state=on off";
        fhem "set group=Licht.Weihnachtsbaum:FILTER=state=on off" if( Value("dummyWeihnachtsbaumAutoOFF") eq "active" ) ;
    }

    elsif( (ReadingsVal( "twilightStahnsdorf", "state", "100" ) == 5 and ReadingsVal( "twilightStahnsdorf", "twilight_weather", "100" ) > 54 and $lux > 200 and $lux < 300) or ($lux > 300 and $lux < 500) ) {
    fhem "set (structureLichtWohnzimmer|NetzschalterKinZimIsabelHintenLinks):FILTER=STATE=on off; set group=Licht.Weihnachten:FILTER=state=on off";
        fhem "set group=Licht.Weihnachtsbaum:FILTER=state=on off" if( Value("dummyWeihnachtsbaumAutoOFF") eq "active" ) ;
    }

    elsif( (ReadingsVal( "twilightStahnsdorf", "state", "100" ) == 6 and ReadingsVal( "twilightStahnsdorf", "twilight_weather", "100" ) > 65 and $lux > 200 and $lux < 300) or ($lux > 300 and $lux < 700) ) {
        fhem "set (structureLichtWohnzimmer|structureLichtBadezimmer|NetzschalterKinZimIsabelHintenLinks):FILTER=STATE=on off; set group=Licht.Weihnachten:FILTER=state=on off";
        fhem "set group=Licht.Weihnachtsbaum:FILTER=state=on off" if( Value("dummyWeihnachtsbaumAutoOFF") eq "active" );
       
        if( (ReadingsVal( "twilightStahnsdorf", "elevation", "15" ) < 15 and ReadingsVal( "twilightStahnsdorf", "twilight_weather", "100" ) > 80 and $lux > 300 and $lux < 400) or ($lux > 400 and $lux < 700) ) {
            fhem "set LED_StreifenFlurDecke:FILTER=onoff=1 off" if( Value( "LED_StreifenSelectTwilightDummy" ) eq "on" );
        }
       
        elsif ( (ReadingsVal( "twilightStahnsdorf", "elevation", "15" ) > 15 and $lux > 300 and $lux < 400) or ($lux > 400 and $lux < 700) ) {
            fhem "set LED_StreifenFlurDecke:FILTER=onoff=1 off" if( Value( "LED_StreifenSelectTwilightDummy" ) eq "on" );
        }
    }
   
    elsif($lux > 250 and $lux < 700) {
        CommandSet(undef,"set LED_StreifenFlurDecke:FILTER=onoff=1 off") if( Value( "LED_StreifenSelectTwilightDummy" ) eq "on" and $lux > 500);
        CommandSet(undef,"LichtDimmerStevenDeckenLampe_Sw:FILTER=pct!=0 pct 0") if( Value("rr_Steven") eq "home" and $lux > 250 and Value('autoLichtsteuerungSteven') eq 'on' );
    }
}
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

Beta-User

Hier gibt es eine größere Diskussion dazu.

notify gehört für mich wie at zur FHEM-Grundfunktionalität, DOIF ist mir mit seinen ganzen Attributen und deren Wechselwirkungen eher suspekt, deswegen versuche ich eher perl-code einzusetzen, wenn es mehr wie eine Abfrage nach einem Event ist (notify+perl-code)...
Und überhaupt nicht nachvollziehen kann ich es, wenn statt eines notify für immer dieselbe Reaktion auf ein Event ein DOIF mit "do always" eingesetzt wird.

Aber: jeder wie er mag ;) .

Gruß, Beta-User

@CoolTux: Wie wird die sub den aufgerufen?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

CoolTux

Zitat von: Beta-User am 10 Oktober 2017, 16:15:13
Hier gibt es eine größere Diskussion dazu.

notify gehört für mich wie at zur FHEM-Grundfunktionalität, DOIF ist mir mit seinen ganzen Attributen und deren Wechselwirkungen eher suspekt, deswegen versuche ich eher perl-code einzusetzen, wenn es mehr wie eine Abfrage nach einem Event ist (notify+perl-code)...
Und überhaupt nicht nachvollziehen kann ich es, wenn statt eines notify für immer dieselbe Reaktion auf ein Event ein DOIF mit "do always" eingesetzt wird.

Aber: jeder wie er mag ;) .

Gruß, Beta-User

@CoolTux: Wie wird die sub den aufgerufen?

Über ein Notify welches auf twilight:azimuth.* triggert und im noch 3 kleine Abfragen macht.
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

betateilchen

oh... ein Popcorn-Thread... in welchem Umzugskarton hab ich bloß die Popcornmaschine verpackt *grübel*
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Frank_Huber

Zitat von: betateilchen am 10 Oktober 2017, 16:35:30
oh... ein Popcorn-Thread... in welchem Umzugskarton hab ich bloß die Popcornmaschine verpackt *grübel*
mein Gedanke.
ein Popcorn Thread. ;-)

meine 2 cent dazu:
ich nutze beides. für klare Aktionen wie "Wasser oder Rauchmelder löst aus --> mache etwas" nutze ich notify.
Alles was verzweigter ist mit mehreren Bedingungen nutze ich DOIF. finde ich persönlicher übersichtlicher und durch die ganzen Attribute flexibler.