FHEM Forum

FHEM => fhem-users => Thema gestartet von: Guest am 15 Januar 2012, 20:02:35

Titel: Dämmerungssensor FS20SD...
Beitrag von: Guest am 15 Januar 2012, 20:02:35
Originally posted by: <email address deleted>

Ich versuche gerade folgendes Szenario zu programmieren:

Wenn mein Dämmerungssensor FS20SD anzeigt, dass es dunkel wird
(DaemmerungOn), sollen mehrere Befehle gesendet werden. Dafür habe ich
folgendes implementiert:

define DaemmerungOn FS20 xxxx yy
define at_SD_On notify DaemmerungOn:on "(sleep 2;; perl fhem.pl
localhost:7072 'set WZ.JalLinksRunter on')"

Das funktioniert soweit auch recht gut. Nun soll als weitere Bedingung
dazu kommen, dass es nicht früher als 1 Stunden vor Sonnenuntergang
ist (also sunset(-3600)) und auch nicht später als Sonnenuntergang +
30 Minuten (also sunset(1800)).

Wie kann man das am besten anstellen?

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Dämmerungssensor FS20SD...
Beitrag von: borsti67 am 15 Januar 2012, 20:10:20
                                                 

> Ich versuche gerade folgendes Szenario zu programmieren:

ich versuche gerade, denn Sinn zu verstehen...?
Du hast doch nun schon einen Dämmerungssensor, damit bist Du doch auf
sunset+co gar nicht (mehr) angewiesen, da diese je nach Bewölkung etc
subjektiv total "falsche" Schaltzeiten bewirken...?

> 30 Minuten (also sunset(1800)).
>
> Wie kann man das am besten anstellen?

ins Blaue geraten: Indem Du die zusätzlichen Parameter der
sunset/sunrise-Funktionen einbeziehst? Siehe commandref.html#SUNRISE_EL

Gruss
Torsten

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Dämmerungssensor FS20SD...
Beitrag von: LaLeLu am 16 Januar 2012, 07:05:29
                                                       

Vielleicht hilft Dir mein funktionsfähiger Code.
Die Syntax bei define ... notify, if und sleep etc. funktioniert bei
mir so:

# ANRUFEN auf Handy, wenn im Bad das Fenster offen ist und die Wohnung
verlassen wird.
define n_FensterIstOffenBeimVerlassen notify Flur_Wohnungstuer.off {\
{Log 3, ('  n_FensterIstOffenBeimVerlassen  NOTIFY:  ****** Anfang
******')}\
{Log 3, ('  n_FensterIstOffenBeimVerlassen  Die Wohnungstuer wurde
geschlossen.')}\
if( Value("Bad_Fenster") eq "Open") {\
    {Log 3, ('  n_FensterIstOffenBeimVerlassen  Das Fenster im Bad ist
noch offen!') }\
    {Log 3, ('  n_FensterIstOffenBeimVerlassen  FHEM ruft an!') }\
    { system(" echo ATDT012312345678 | nc 127.0.0.1 1011" ) }\
    {Log 3, ('  n_FensterIstOffenBeimVerlassen  FHEM beendet den
Anruf.') }\
    { system(" sleep 20 ;; echo ATH0 | nc 127.0.0.1 1011 " ) }\
  }\
  else {\
    {Log 3, ('  n_FensterIstOffenBeimVerlassen  Keine Aktion. Das
Fenster im Bad ist geschlossen.') }\
  }\
  {Log 3, ('  n_FensterIstOffenBeimVerlassen  NOTIFY:  ****** Ende
******')}\
}

Das Entscheidende ist Syntax wie:
       { system(" sleep 20 " ) }\
Du musst anstelle von
       if( Value("Bad_Fenster") eq "Open") {\
eine Abfrage auf Sonnenauf- bzw. untergang schreiben.

Ich hoffe, es hilft Dir.

Gruss
LaLeLu


On 15 Jan., 20:10, borsti wrote:
> > Ich versuche gerade folgendes Szenario zu programmieren:
>
> ich versuche gerade, denn Sinn zu verstehen...?
> Du hast doch nun schon einen Dämmerungssensor, damit bist Du doch auf
> sunset+co gar nicht (mehr) angewiesen, da diese je nach Bewölkung etc
> subjektiv total "falsche" Schaltzeiten bewirken...?
>
> > 30 Minuten (also sunset(1800)).
>
> > Wie kann man das am besten anstellen?
>
> ins Blaue geraten: Indem Du die zusätzlichen Parameter der
> sunset/sunrise-Funktionen einbeziehst? Siehe commandref.html#SUNRISE_EL
>
> Gruss
> Torsten

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Dämmerungssensor FS20SD...
Beitrag von: Guest am 16 Januar 2012, 07:35:51
Originally posted by: <email address deleted>

Danke euch beiden!

Gibt es eine Möglichkeit, einen neuen Schaltzeitpunkt zu definieren?
Wenn ich z.B. das Notify von meinem Dämmerungssensor als Zeitpunkt
definieren könnte, hätte ich mein Problem gelöst. Also sowas:

define at_SD_On notify DaemmerungOn:on

und dann

define JalosieRunter at *(at_SD_On) set WZ.JalRunter on

Geht sowas?

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Re: Dämmerungssensor FS20SD...
Beitrag von: borsti67 am 16 Januar 2012, 09:16:49
                                                 

Vielleicht hilft Dir ja so ein Schnipsel als Denkanstoss:

define az_Nachtlicht_an at *{sunset(-(90*60),"12:00","22:50")} { \
   fhem("set az_Rollo off");; \
   if(Value("HomeStatus") < 4) { \
     if($month==12) { fhem("define az_Nachtlicht_an_timer at +00:02:00
set az_Rollo on-for-timer 13") };; \
     fhem("set az_Fensterbank on") \
   } \
}

Macht folgendes:
- wird 90min vor Sonnenuntergang ausgeführt, aber NUR, wenn dieser
zwischen 12 und 22:50 liegt
- Rollo runterfahren
- im Dezember haben wir meist Lichterbögen im Fenster, damit man die
auch sehen kann, wird die Jalousie dann wieder 1/3 hochgefahren
- Fensterbankbeleuchtung an

(um 23:00 läuft einer weiterer AT-job, der das Rollo schließt und die
Beleuchtung ausschaltet)

Gruss
Torsten

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Dämmerungssensor FS20SD...
Beitrag von: Guest am 16 Januar 2012, 09:56:01
Originally posted by: <email address deleted>

Ja, im Primzip ist es das, was ich brauche.

Nur wenn ich jetzt auf die mathematische Berechnung des
Sonnenuntergangs (sunset) nach deiner Idee verzichte und stattdessen
NUR meinen Dämmerungssensor nehmen möchte, wie mache ich das dann?

Eigentlich müsste ich die Zeitangabe von sunset(..) durch mein Notify
(at_SD_on) austauschen, aber das geht ja nicht...



--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Dämmerungssensor FS20SD...
Beitrag von: Guest am 16 Januar 2012, 10:31:53
Originally posted by: <email address deleted>

Also so müsste es aussehen:

define at_SD_On1 notify DaemmerungOn:on { if (AktuelleZeit >
sunset(-3600) && AktuelleZeit < sunset(3600)) { fhem "set
RolloVorneRunter at +00:01:00 on-for-timer 50" } }
define at_SD_On2 notify DaemmerungOn:on { if (AktuelleZeit >
sunset(-3600) && AktuelleZeit < sunset(3600)) { fhem "set
RolloHintenRunter at +00:30:00 on-for-timer 50" } }

Sind also zwei Aktionen, die nach meinem Dämmerungssensor ausghelöst
werden sollen. Dabei soll die zweite Aktion eine halbe Stunde später
stattfinden.

Nur muss ich jetzt noch "AktuelleZeit" erstetzen.

Geht das so?!

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Re: Dämmerungssensor FS20SD...
Beitrag von: borsti67 am 16 Januar 2012, 11:20:03
                                                 

Scheint mir immer noch sehr umständlich.

auf alle Fälle brauchst Du keine 2 notify's, da beide die selbe
Bedingung haben:

define at_SD_On notify DaemmerungOn:on {
   if (AktuelleZeit>sunset(-3600) &&  AktuelleZeit<  sunset(3600)) {
     fhem "set RolloVorneRunter at +00:01:00 on-for-timer 50";
     fhem "set RolloHintenRunter at +00:30:00 on-for-timer 50"
  }
}

Vielleicht kannst Du mal genau spezifizieren, was genau unter welchen
Umständen passieren soll? Und eben auch das Gegenteil, warum es
ausserhalb obiger Zeiten NICHT passieren soll?

Ich lese bisher da heraus, dass Du Deine Rolläden (teilweise? Oder warum
timer?) schließen willst, wenn eine gewisse Dunkelheit erreicht ist;
dieses aber nur dann, wenn sowieso gerade Sonnenuntergangszeit ist (+/-
1 Stunde). Mir erschliesst sich nach wie vor der Sinn nicht...

Gruss
Torsten

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Dämmerungssensor FS20SD...
Beitrag von: Guest am 16 Januar 2012, 11:29:40
Originally posted by: <email address deleted>

Also eigentlich ganz einfach:

Wenn FS20SD meldet, dass es dunkel ist, sollen die Rolläden vorne auf
Halbmast gehen. Eine halbe Stunde später dann aber ganz runter (die
anderen auch, ist aber hier erstmal egal).

Dazu kommt, dass ich ein Zeitfenster festlegen will, damit nicht
versehentlich mittags die Rolläden runtergehen (z.B. wenn es so dunkel
wird, dass der FS20SD schon meldet).

Kann sowas funktionieren:

define at_SD_On notify DaemmerungOn:on {\
 my $hm = sprintf("%%02d:%%02d", $hour, $min);;\
 if( $hm gt sunset(-3600) && $hm lt sunset(3600) {\
    fhem "set RolloVorneRunter at +00:01:00 on-for-timer 15";;
    fhem "set RolloVorneRunter at +00:30:00 on-for-timer 50";;
    fhem "set RolloHintenRunter at +00:30:00 on-for-timer 50";; }\
}

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Re: Dämmerungssensor FS20SD...
Beitrag von: borsti67 am 16 Januar 2012, 12:49:57
                                                 

Am 16.01.2012 11:29, schrieb Frank:
> Also eigentlich ganz einfach:
>
> Wenn FS20SD meldet, dass es dunkel ist, sollen die Rolläden vorne auf
> Halbmast gehen.

ok, wenn der SD zuverlässig seinen Dienst tut, passt das sicherlich.
Durch die Obergrenze kann es Dir passieren, dass die Rolläden im Sommer
gar nicht halb runterfahren, sondern erst durch den 2. von Dir erwähnten
Vorgang sofort ganz runter - das ist Dir klar?
Weiterhin hat die notify-Methode den Nachteil, dass Du im Nachhinein
nicht weißt, wann genau die Schaltung erfolgt ist. Meist kein Problem,
aber gerade wenn Du mit on-for-timer etc arbeitest, kann das merkwürdige
Folgen haben, wenn der nächste Schaltbefehl in dieses Intervall fällt.
Eigene leidvolle Erfahrung. ;)

> Eine halbe Stunde später dann aber ganz runter (die
> anderen auch, ist aber hier erstmal egal).

Nicht unbedingt - ich empfehle generell, nicht nur einen Vorgang
isoliert zu betrachten, sondern ALLES, was damit zusammenhängt. Sonst
sieht man manchmal den Wald vor Bäumen nicht mehr!

Also habe ich die Logik jetzt so richtig verstanden:
- Wenn es Abenddämmerung ist UND der SD Dunkelheit meldet, sollen
nacheinander mehrere Rollo-Steuerbefehle abgesetzt werden
- Um xx:xx Uhr werden die Rollos allesamt runtergefahren (würde ich der
"soundsoviel später"-Methode eindeutig vorziehen!)

Mein Vorschlag wäre etwa so:
(Meine Annahmen: Deine Rollo-Aktoren heißen "RolloVorne" und
"RolloHinten", der Zustand ON bedeutet "geschlossen")

define at_LukenDicht at 23:00 set RolloVorne,RolloHinten on
=== um 23 Uhr alle Rolläden herunterfahren

define nf_DS_On notify DaemmerungOn:on {
   if(substr(sunset_rel(),0,2) < 2) {
=== ich hoffe, PERL zickt nicht wenn ich so einen Teilstring als Zahl
auswerte?
   fhem("set RolloVorne on-for-timer 15");
=== erste Verdunkelungsstufe sofort (klappt natürlich alles nur, wenn
niemand manuell verstellt hat!)
   fhem("set at_RolloVorneRunter at +00:30:00 set RolloVorne
on-for-timer 50");
=== 2. Stufe 30 min später
   fhem("set at_RolloHintenRunter at +00:30:30 set RolloHinten
on-for-timer 50");
=== diese auch nach 30min "dimmen" (kleine Verzögerung zum vorigen
Befehl kann nicht schaden)
   }
}

Vielleicht hilft's ja...

> Kann sowas funktionieren:

nein, da Du 2 at-Befehle mit gleichem Namen und mehrere "\" vergessen
hast. Zudem fehlt jeweils der Name des Aktors für den on-for-timer. ;)
>
> define at_SD_On notify DaemmerungOn:on {\
>   my $hm = sprintf("%%02d:%%02d", $hour, $min);;\
>   if( $hm gt sunset(-3600)&&  $hm lt sunset(3600) {\
>      fhem "set RolloVorneRunter at +00:01:00 on-for-timer 15";;
>      fhem "set RolloVorneRunter at +00:30:00 on-for-timer 50";;
>      fhem "set RolloHintenRunter at +00:30:00 on-for-timer 50";; }\
> }
>


Gruss
Torsten

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Dämmerungssensor FS20SD...
Beitrag von: Guest am 16 Januar 2012, 13:20:15
Originally posted by: <email address deleted>

Danke1 Jetzt hab ich's!

Aber erst nochmal eine Frage: Wo ist der Unterschied zwischen:

    fhem "define Test1 at +00:00:05 set RolloVorneRunter on-for-timer
15"

und:

    fhem "set RolloVorneRunter at +00:00:05 on-for-timer 15"    <--
geht das überhaupt so?

??

Ansonsten sieht es bei mir jetzt so aus (und funktioniert!):

define at_SD_On notify DaemmerungOn:on {\
  my $hm = sprintf("%%02d:%%02d", $hour, $min);;\
  if( $hm gt sunset(-3600) && $hm lt sunset(3600) ) {\
    Log 1, "Dämmerung: ".$hm;;\
    fhem "define Test1 at +00:00:05 set RolloVorneRunter on-for-timer
15";; \
    fhem "define Test2 at +00:30:00 set RolloVorneRunter on-for-timer
50";; \
    fhem "define Test3 at +00:31:00 set RolloHintenRunter on-for-timer
50";; \
  }\
  else {\
    Log 1, "Dämmerung: ".$hm." außerhalb Sonnenuntergang: ".sunset();;
\
  }\
}

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Re: Dämmerungssensor FS20SD...
Beitrag von: borsti67 am 16 Januar 2012, 14:04:47
                                                 

> Aber erst nochmal eine Frage: Wo ist der Unterschied zwischen:
>
>      fhem "define Test1 at +00:00:05 set RolloVorneRunter on-for-timer
> 15"
>
> und:
>
>      fhem "set RolloVorneRunter at +00:00:05 on-for-timer 15"<--
> geht das überhaupt so?

kann doch gar nicht gehen (und der Unterschied ist doch
offensichtlich???) - nach der Zeitdefinition muss der auszuführende
Befehl kommen. "on-for-timer" ist aber kein Befehl, und selbst wenn es
einer wäre - wo steht denn, welches Gerät zu schalten ist? ;)

Gruss
Torsten

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Dämmerungssensor FS20SD...
Beitrag von: Guest am 16 Januar 2012, 20:54:06
Originally posted by: <email address deleted>

Wie kann man denn jetzt noch verhindern, dass die ganze Sache in
kurzer Zeit zweimal hintereinander aufgerufen wird?
(Das Problem habe ich nämlich jetzt...)

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Re: Dämmerungssensor FS20SD...
Beitrag von: borsti67 am 16 Januar 2012, 21:09:53
                                                 

Am 16.01.2012 20:54, schrieb Frank:
> Wie kann man denn jetzt noch verhindern, dass die ganze Sache in
> kurzer Zeit zweimal hintereinander aufgerufen wird?
> (Das Problem habe ich nämlich jetzt...)
>

dazu musst Du Dir wohl entweder beim Schalten eine Variable setzen, die
den momentanen Zustand zwischenspeichert, und diese dann auswerten; oder
den "last state" heranziehen. Das hab' ich aber auch noch nie gemacht...

Gruss
Torsten

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Dämmerungssensor FS20SD...
Beitrag von: Guest am 16 Januar 2012, 21:14:30
Originally posted by: <email address deleted>

Kannst Du mir auf die Schnelle sagen, wie man eine Variable

a) anlegt/initialisiert
b) verändert
c) abfragt

?

On 16 Jan., 21:09, borsti wrote:
> Am 16.01.2012 20:54, schrieb Frank:
>
> > Wie kann man denn jetzt noch verhindern, dass die ganze Sache in
> > kurzer Zeit zweimal hintereinander aufgerufen wird?
> > (Das Problem habe ich nämlich jetzt...)
>
> dazu musst Du Dir wohl entweder beim Schalten eine Variable setzen, die
> den momentanen Zustand zwischenspeichert, und diese dann auswerten; oder
> den "last state" heranziehen. Das hab' ich aber auch noch nie gemacht...
>
> Gruss
> Torsten

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Re: Dämmerungssensor FS20SD...
Beitrag von: borsti67 am 16 Januar 2012, 21:18:45
                                                 

> Kannst Du mir auf die Schnelle sagen, wie man eine Variable

guck mal hier: http://fhemwiki.de/wiki/Schalten_mit_mehreren_Bedingungen

...keine Ahnung, ob das mit dem $data elegant oder eher halbseiden ist,
aber zumindest scheint es zu funktionieren...

Gruss
Torsten

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com