Notify mit mehreren Bedingungen

Begonnen von Guest, 15 Dezember 2010, 21:34:58

Vorheriges Thema - Nächstes Thema

Guest

Originally posted by: <email address deleted>

Hallo FHEMler,
seit zwei Monaten betreibe ich eine FHEM-Installation auf einer
Seagate Dockstar unter Debian mit zwei FHTs, einigen Fenster-/
Türkontakten und einem Außensensor KS300 - sowie einem CUL.

Zuallererst möchte ich mich vielmals bei Rudolf und allen anderen
Code- und Text-Produzenten bedanken. In FHEM steckt wirklich sehr viel
Arbeit, soweit ich das auch nur ansatzweise überblicken kann.

Leider habe ich selber mit Perl bisher nichts zu tun gehabt und meine
Linux-Kenntnisse sind auch nicht gerade preisverdächtig, weswegen ich
jetzt in eine Sackgasse geraten bin:

Der FHT heiz_bad soll morgens mit Aktivierung des Bewegungsmelders
piri_schlaf für eineinhalb Stunden die Temperatur auf 23 Grad Celsius
erhöhen und danach wieder absenken - aber nur wenn folgende
Bedingungen erfüllt sind: Es ist zwischen 4:30 Uhr und 9:00 Uhr, der
Fensterkontakt luft_bad ist "Closed" und der Türkuntakt tfk_tuer ist
"on".

Seit einer Woche tüftle ich nun an folgender Formel:

define mobabr notify piri_schlaf:on* { if(($hour > 4 || $hour  < 9) &&
($value{tfk_tuer} eq "on") && ($value{luft_bad} eq "Closed")) { fhem
("set heiz_bad desired-temp 23.0") } }

Probleme: Die zusätzlichen Bedingungen (Kontakte, eingeschränkte
Zeiten) werden nicht berücksichtigt, d.h. das Notify wird immer
ausgelöst, wenn piri_schlaf ein "on"-Ereignis liefert; mal abgesehen
davon, dass ich den Beginn der "scharfen" Zeit mangels Fähigkeiten auf
4 Uhr statt 4:30 Uhr legen musste.

Ich bin jetzt mit meinem Latein am Ende. Kann jemand von Euch mir
vielleicht weiter helfen und mich aufklären, warum das Notify tut was
es nicht soll?

Grüße
Gerhard

--
Sie haben diese Nachricht erhalten, da Sie der Google Groups-Gruppe FHEM users beigetreten sind.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-users@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-users+unsubscribe@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-users?hl=de, um weitere Optionen zu erhalten.

rudolfkoenig

                                                   

> Der FHT heiz_bad soll morgens mit Aktivierung des Bewegungsmelders
> piri_schlaf für eineinhalb Stunden die Temperatur auf 23 Grad Celsius
> erhöhen und danach wieder absenken - aber nur wenn folgende
> Bedingungen erfüllt sind: Es ist zwischen 4:30 Uhr und 9:00 Uhr, der
> Fensterkontakt luft_bad ist "Closed" und der Türkuntakt tfk_tuer ist
> "on".

Nicht getestet:

define mobabr_on notify piri_schlaf:on* {\
 my $hm = sprintf("%02d:%02d", $hour, $min);;\
 if( $hm > "04:30" && $hm  < "09:00" &&\
     $value{tfk_tuer} eq "on" &&\
     $value{luft_bad} eq "Closed" &&\
     !$data{mobabr_on}) {\
   $data{mobabr_on} = 1;;\
   fhem "set heiz_bad desired-temp 23.0";;\
   fhem "define at_mobabr_off at +01:30 trigger mobabr_off"\
 }\
}

define mobabr_off notify mobabr_off {\
   fhem "set heiz_bad desired-temp 18.0";;\
   delete($data{mobabr_on})\
}

--
Sie haben diese Nachricht erhalten, da Sie der Google Groups-Gruppe FHEM users beigetreten sind.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-users@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-users+unsubscribe@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-users?hl=de, um weitere Optionen zu erhalten.

Guest

Originally posted by: <email address deleted>

Danke!

(in den nächsten 5 Stunden im Logfile gefunden...)
Unknown command  }\    Erledigt.
Unrecognized character \xA0    Erledigt.

Jetzt kommt´s:
Argument "04:30" isn't numeric in numeric gt (>) at (eval 20) line 1.

>  if( $hm > "04:30" && $hm  < "09:00" &&\

Ich vermute mal, ich muss jeweils die Stunden und die Minuten einzeln
vergleichen.
Ich schau mal, wie ich morgen weiterkomme. Habe schon viel zu viel
Zeit heute vergrübelt.

Vielen Dank jedenfalls für diesen Lösungsansatz. Wenn ich das richtig
begriffen habe, hast Du sogar eine Sicherung gegen wiederholtes
Neutriggern eingebaut!?.

> !$data{mobabr_on}) {\
>     $data{mobabr_on} = 1;;\

--
Sie haben diese Nachricht erhalten, da Sie der Google Groups-Gruppe FHEM users beigetreten sind.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-users@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-users+unsubscribe@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-users?hl=de, um weitere Optionen zu erhalten.

rudolfkoenig

                                                   

> Argument "04:30" isn't numeric in numeric gt (>) at (eval 20) line 1.

sollte wohl
   if( $hm gt "04:30" && $hm lt "09:00" &&\
sein.

--
Sie haben diese Nachricht erhalten, da Sie der Google Groups-Gruppe FHEM users beigetreten sind.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-users@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-users+unsubscribe@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-users?hl=de, um weitere Optionen zu erhalten.

Guest

Originally posted by: <email address deleted>

>    if( $hm gt "04:30" && $hm lt "09:00" &&\

Script tut immer noch nicht.

Ich habe mal zum Testen einige Abfragen rausgenommen; es sieht nun so
aus (aus fhem.cfg kopiert):

define mobabr_on notify piri_schlaf:on* {\
 my $hm = sprintf("%02d:%02d", $hour, $min);;\
 if( $hm gt "18:00" && $hm lt "23:00" &&\
     !$data{mobabr_on}) {\
   $data{mobabr_on} = 1;;\
   fhem "set heiz_bad desired-temp 17.0";;\
   fhem "define at_mobabr_off at +0:05 trigger mobabr_off"\
 }\
}

define mobabr_off notify mobabr_off {\
   fhem "set heiz_bad desired-temp 12.0";;\
   delete($data{mobabr_on})\

Keine Reaktion, wenn der PIRI aktiviert wird. Im Log taucht nur "FS20
set piri_schlaf on" auf.
Dieses !$data{mobabr_on}) {\$data{mobabr_on} = 1;;\ macht mir noch
Kopfzerbrechen. Ich schau mal, ob ich mit meinem Perl-Studium
weiterkomme.

Gerhard

--
Sie haben diese Nachricht erhalten, da Sie der Google Groups-Gruppe FHEM users beigetreten sind.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-users@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-users+unsubscribe@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-users?hl=de, um weitere Optionen zu erhalten.

Guest

Originally posted by: <email address deleted>

Das Script scheitert offenbar am Zeitvergleich. Aber für heute reicht
´s mir mit dem herumprobieren ...

Gerhard

--
Sie haben diese Nachricht erhalten, da Sie der Google Groups-Gruppe FHEM users beigetreten sind.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-users@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-users+unsubscribe@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-users?hl=de, um weitere Optionen zu erhalten.

rudolfkoenig

                                                   

> Das Script scheitert offenbar am Zeitvergleich.

Stimmt, hab vergessen im sprintf das % Zeichen zu schuetzen.

Folgendes loggt richtig bei mir, wenn ich "trigger piri_schlaf on"
absetze:

define mobabr_on notify piri_schlaf:on* {\
 my $hm = sprintf("%%02d:%%02d", $hour, $min);;\
 Log 1, $hm;;\
 if( $hm gt "04:30" && $hm  lt "09:00") {\
   Log 1, "Hallo";;\
 }\
}

--
Sie haben diese Nachricht erhalten, da Sie der Google Groups-Gruppe FHEM users beigetreten sind.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-users@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-users+unsubscribe@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-users?hl=de, um weitere Optionen zu erhalten.

Zrrronggg!

                                                     

1. Super Idee. Ich wollte was ähnliches machen, habs aber verworfen
weil ich dachte: Na, dann ist die Heizung ja dauernd an, nur weil
einer mal was aus dem Kleiderschrank holt." Auf die Idee, die Uhrzeit
mit den typischen "Langsamwachwerdzeiten zu checken bin ich gar nicht
gekommen.

2. Wenn das Script irgendwann komplett läuft, könntest du (Gerhard)das
dann nochmal hier in endvariante Posten (für den Fall dass da noch
unentdeckte Fehler drin sind)? Ich würde das dann auch kommentiert ins
Wiki übertragen als Codebeispiel für andere. 8wenn keiner was dagegen
hat)


On 18 Dez., 09:01, Rudolf Koenig wrote:
> > Das Script scheitert offenbar am Zeitvergleich.
>
> Stimmt, hab vergessen im sprintf das % Zeichen zu schuetzen.
>
> Folgendes loggt richtig bei mir, wenn ich "trigger piri_schlaf on"
> absetze:
>
> define mobabr_on notify piri_schlaf:on* {\
>  my $hm = sprintf("%%02d:%%02d", $hour, $min);;\
>  Log 1, $hm;;\
>  if( $hm gt "04:30" && $hm  lt "09:00") {\
>    Log 1, "Hallo";;\
>  }\
>
>
>
> }

--
Sie haben diese Nachricht erhalten, da Sie der Google Groups-Gruppe FHEM users beigetreten sind.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-users@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-users+unsubscribe@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-users?hl=de, um weitere Optionen zu erhalten.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Guest

Originally posted by: <email address deleted>

> Folgendes loggt richtig bei mir, wenn ich "trigger piri_schlaf on"
> absetze:

Ich habe das ursprüngliche Script gerade mit der Änderung ausgiebig
getestet. Es funktioniert ohne Probleme.

Vielen Dank für die Hilfe! Ich verstehe jetzt einiges besser.
(Und meine Frau wird nicht mehr jeden Abend detailliert ausgefragt,
wann sie denn gedenke, das Bad zu benutzen.)

Gerhard

--
Sie haben diese Nachricht erhalten, da Sie der Google Groups-Gruppe FHEM users beigetreten sind.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-users@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-users+unsubscribe@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-users?hl=de, um weitere Optionen zu erhalten.

Guest

Originally posted by: <email address deleted>

> 2. Wenn das Script irgendwann komplett läuft, könntest du (Gerhard)das
> dann nochmal hier in endvariante Posten (für den Fall dass da noch
> unentdeckte Fehler drin sind)? Ich würde das dann auch kommentiert ins
> Wiki übertragen als Codebeispiel für andere. 8wenn keiner was dagegen
> hat)

Also hier nun die funktionierende Version:

define badbenutzung_on notify piri_schlaf:on* {\
 my $hm = sprintf("%%02d:%%02d", $hour, $min);;\
 if( $hm gt "04:30" && $hm lt "09:00" &&\
     $value{tfk_tuer} eq "on" &&\
     $value{luft_bad} eq "Closed" &&\
     !$data{badbenutzung_on}) {\
   $data{badbenutzung_on} = 1;;\
   fhem "set heiz_bad desired-temp 23.0";;\
   fhem "define at_badbenutzung_off at +01:30 trigger
badbenutzung_off"\
 }\
}

define badbenutzung_off notify badbenutzung_off {\
   fhem "set heiz_bad desired-temp 18.0";;\
   delete($data{badbenutzung_on})\
}

Der piri_schlaf überwacht den Nachttisch meiner Frau und schlägt an,
wenn sie das erste Mal nach dem Wecker greift. Da sie die
Schlummertaste regelmäßig benutzt, ist sichergestellt, dass die
Badheizung genügend Zeit hat (ca. 30 Min sollten es aber schon sein).

luft_bad (der Fensterkontakt des zu steuernden Heizungsreglers) wird
abgefragt, weil der Regler eine gewünschte Änderung (z.B. aus FHEM)
offenbar auch dann umsetzt, wenn das Fenster gerade geöffnet ist.

Der tfk_tuer ist eine Art Abwesenheitsschalter.

Rudolf hat eine sehr gute Lösung für mein Problem gefunden. Alleine
hätte ich das nie hinbekommen. Ich hätte jetzt bald einen via notify
getriggerten Dummi-Schalter als Ersatz für den Zeitvergleich benutzt.
So ist das doch nun viel eleganter ...

--
Sie haben diese Nachricht erhalten, da Sie der Google Groups-Gruppe FHEM users beigetreten sind.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-users@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-users+unsubscribe@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-users?hl=de, um weitere Optionen zu erhalten.

Zrrronggg!

                                                     

Kommt mir alles so bekannt vor, von 30 min Vorlauf Heizung Bad
angefangen bis hin zu "Dummy Schalter als Lösungsansatz"

On 18 Dez., 17:05, gmb wrote:
> > 2. Wenn das Script irgendwann komplett läuft, könntest du (Gerhard)das
> > dann nochmal hier in endvariante Posten (für den Fall dass da noch
> > unentdeckte Fehler drin sind)? Ich würde das dann auch kommentiert ins
> > Wiki übertragen als Codebeispiel für andere. 8wenn keiner was dagegen
> > hat)
>
> Also hier nun die funktionierende Version:
>
> define badbenutzung_on notify piri_schlaf:on* {\
>  my $hm = sprintf("%%02d:%%02d", $hour, $min);;\
>  if( $hm gt "04:30" && $hm lt "09:00" &&\
>      $value{tfk_tuer} eq "on" &&\
>      $value{luft_bad} eq "Closed" &&\
>      !$data{badbenutzung_on}) {\
>    $data{badbenutzung_on} = 1;;\
>    fhem "set heiz_bad desired-temp 23.0";;\
>    fhem "define at_badbenutzung_off at +01:30 trigger
> badbenutzung_off"\
>  }\
>
> }
>
> define badbenutzung_off notify badbenutzung_off {\
>    fhem "set heiz_bad desired-temp 18.0";;\
>    delete($data{badbenutzung_on})\
>
> }
>
> Der piri_schlaf überwacht den Nachttisch meiner Frau und schlägt an,
> wenn sie das erste Mal nach dem Wecker greift. Da sie die
> Schlummertaste regelmäßig benutzt, ist sichergestellt, dass die
> Badheizung genügend Zeit hat (ca. 30 Min sollten es aber schon sein).
>
> luft_bad (der Fensterkontakt des zu steuernden Heizungsreglers) wird
> abgefragt, weil der Regler eine gewünschte Änderung (z.B. aus FHEM)
> offenbar auch dann umsetzt, wenn das Fenster gerade geöffnet ist.
>
> Der tfk_tuer ist eine Art Abwesenheitsschalter.
>
> Rudolf hat eine sehr gute Lösung für mein Problem gefunden. Alleine
> hätte ich das nie hinbekommen. Ich hätte jetzt bald einen via notify
> getriggerten Dummi-Schalter als Ersatz für den Zeitvergleich benutzt.
> So ist das doch nun viel eleganter ...

--
Sie haben diese Nachricht erhalten, da Sie der Google Groups-Gruppe FHEM users beigetreten sind.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-users@googlegroups.com.
Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-users+unsubscribe@googlegroups.com.
Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-users?hl=de, um weitere Optionen zu erhalten.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL