FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Bibo am 31 Dezember 2012, 17:15:03

Titel: Twilight
Beitrag von: Bibo am 31 Dezember 2012, 17:15:03
Hallo Zusammen,
ich habe null Ahnung vom Programmieren, schon gar nicht von pearl. Durch das Fhem Wiki und die Einsteiger-Lektüre bin ich für meine Verhältnisse aber schon weit gekommen. Vielen Dank dafür!!!

Jetzt scheint es aber ins Eingmachte (zumindest für mich!!!) zu gehen, und ich komme nicht wirklich weiter.
Im fhem wiki finde ich eine Twilight Lösung, die mir aber zu komplex ist....
Folgendes Ziel: einschalten der Gartenbeleuchtung auf Basis von Twilight mit dem Sonnenuntergang! > Ausschalten zu einer fixen Uhrzeit > 22:00Uhr

Twilight läuft mit Längen- und Breitengrad für Düsseldorf, auch die Yahoo Wetterdaten sind drin.

Ich nehme mal an, dass man mit notify und if Anweisungen jetzt weitermachen müsste..?!
also irgendwie....Define lampen_garten_An_Sonnenuntergang Notify <if sunset=true, oder light >=6 > set lampe_garten on.

Wer kann helfen, bin für jeden Codeschnipsel dankbar.

Danke & Guten Rutsch,
Bibo
Titel: Aw: Twilight
Beitrag von: chrischan am 31 Dezember 2012, 17:34:03
Hallo Bibo,
ich ähnlich wenig Programmierkenntnisse, gelöst habe ich es folgendermaßen:

define Aussen_sunset_an at *{sunset("REAL")} set AuStr on

Hiermit schalte ich AuStr mit Sonnenuntergang ein. Man könnte das noch verzögern, wenn gewünscht.


define Hausfront_Strahler_off at *22:00 set AuStr off

Hier wird AuStr um 22:00 Uhr ausgeschaltet.

Ich denke, dass ist das was Du möchtest.

Das kann wahrscheinlich noch besser gemacht werden, aber für mich erfüllt es den Zweck.

Hoffe es hilft.

Gruß und guten Rutsch

Chrischan
Titel: Aw: Twilight
Beitrag von: Markus am 31 Dezember 2012, 18:12:20
versuch das mal.
myTwilight hast du ja definiert?

die zahl 4 oder 9 ist der heligkeitswert 0 ist zb. nacht

define Sonne dummy

define SonneAus notify myTwilight:light.* {\
  if($value{myTwilight}==4){\
    fhem("set Sonne on");;\
  }\
}
define SonneAn notify myTwilight:light.* {\
  if($value{myTwilight}==9){\
    fhem("set Sonne off");;\
  }\
}
define FileLog_Sonne FileLog ./log/Sonne-%Y.log Sonne
attr FileLog_Sonne logtype text
attr FileLog_Sonne room Logs


Gruß Markus und guten rutsch
Titel: Aw: Twilight
Beitrag von: Bibo am 31 Dezember 2012, 20:23:51
Hallo Chrischan,
habe ich mal eingebunden, gibt keinen Fehler. teste das dann morgen....
Frage:

[quote title=chrischan schrieb am Mo, 31 Dezember 2012 17:34

define Aussen_sunset_an at *{sunset("REAL")} set AuStr on

Hiermit schalte ich AuStr mit Sonnenuntergang ein. Man könnte das noch verzögern, wenn gewünscht.


[/quote]

Wo kommen die Werte her, auf die {sunset("REAL")} zugreift? Ist das auch die "Twilight" oder diese "SUNRISE EL"? Diese Datei finde ich in meinem FHEM überhaupt nicht! Daher bin ich überhaupt auf die Twilight gekommen, weil ich hier Breiten und Längengrade auf meinen Standort anpassen konnte.

Idee?

Gruß
Bibo
Titel: Aw: Twilight
Beitrag von: Bibo am 31 Dezember 2012, 20:27:35
Danke, Markus!

Was kommt nach dem Dummy? Irgendwo dahinter muss ich doch jetzt auf den Dummy zugreifen, um dann die "SET Lampe ON" zu definieren!?
Wieder über eine notify Funktion?

Danke.....und ich bin begeistert, wie das hier klappt! Tolle Sache mit dem Forum.

Zitat von: Markus schrieb am Mo, 31 Dezember 2012 18:12define Sonne dummy

define SonneAus notify myTwilight:light.* {\
  if($value{myTwilight}==4){\
    fhem("set Sonne on");;\
  }\
}
define SonneAn notify myTwilight:light.* {\
  if($value{myTwilight}==9){\
    fhem("set Sonne off");;\
  }\
}
define FileLog_Sonne FileLog ./log/Sonne-%Y.log Sonne
attr FileLog_Sonne logtype text
attr FileLog_Sonne room Logs


Titel: Aw: Twilight
Beitrag von: Markus am 01 Januar 2013, 04:31:08
du kannst sonne einfach durch deinen aktor ersetzen, zb licht_wohnzimmer

grus Markus
Titel: Aw: Twilight
Beitrag von: Sturi2011 am 01 Januar 2013, 09:09:00
Hi,

und die Lösung hat so einen weiteren Schönheitsfehler...im Hochsommer kann der errechnete Sonnenuntergang durchaus mal nach 22 Uhr erfolgen. Was dann? Lich gar nicht an? Licht die ganze Nacht an? Also entweder um 22 Uhr einen Dummy setzen und bei Sonnenaufgang zurücksetzen und diesen in die Abfrage mit einbauen oder einen zweiten Ausschaltbefehl auf einen Zeitpunk nach dem spätest möglichen Sonnenuntergang legen. Auf jeden Fall sollte so eine Funktion immer ein sicher definiertes Aus haben.

Gruß Andreas
Titel: Aw: Twilight
Beitrag von: Markus am 01 Januar 2013, 12:33:39
Da hat Andreas natürlich recht, mein fhem hat noch keinen Sommer erlebt aber für die Weihnachtsbeleuchtung hat Twilight super Funktioniert.

Markus
Titel: Aw: Twilight
Beitrag von: JohanK am 01 Januar 2013, 13:05:03
Normalerweise dachte Ich das sunset("REAL"."60",:"22:00","24:00") so funktioniert das ein gerät anschaltet nach sunset aber nicht früher als 22:00 und nicht später als 24:00. (und wenn sunset "REAL" zwischen 2200 und 2400 liegt, wird erst bei sunset, und mit eine Verzögerung von 60 Sekunden angeschaltet).
Funktioniert erst den nächsten tag, nächster zeit wird mit +24 stdn weggeschrieben.

Johan


Titel: Aw: Twilight
Beitrag von: JohanK am 01 Januar 2013, 13:06:58
edit post wäre sinnvoll :)
sunset("REAL","60","22:00","24:00")
Titel: Aw: Twilight
Beitrag von: Bibo am 01 Januar 2013, 13:16:21
Zitat von: Markus schrieb am Di, 01 Januar 2013 12:33Da hat Andreas natürlich recht, mein fhem hat noch keinen Sommer erlebt aber für die Weihnachtsbeleuchtung hat Twilight super Funktioniert.

Markus

Die 3 Tage im Sommer, an denen die Sonne nach 22:00 untergeht, schalte ich die Lampen noch "old-school" aus. Falls über ipad und Soft-Button schon als old-school gilt ;-)

Es funktioniert auf jeden Fall, habe es getestet! Markus, vielen Dank!

Ich wünsche noch einen schönen Neujahrs-Tag!

Gruß Bibo
Titel: Aw: Twilight
Beitrag von: Sturi2011 am 01 Januar 2013, 21:25:49
Hallo,

es ist eben die Frage ob es mit Twillight oder sunset gelöst wird. Eines begranzt die Zeiten, das andere nicht....
Und ja - Ipad ist Old-....(Von meinem IPad gesendet)

Gruß Andreas
Titel: Aw: Twilight
Beitrag von: Nilz am 07 Februar 2013, 16:05:56
Moin erstmal...

Wäre dieses Beispiel zu kurz gedacht und warum macht es nicht das, was es soll ?
NETIO_Socket4 ist vorher als Schalaktor definiert und lässt sich auch schalten.

---
define MyTwilight Twilight 52.278889 8.043056 3 683477

define Sonnenuntergang notify MyTwilight:light.* {\
  if($value{MyTwilight}<4 ){\
    fhem("set NETIO_Socket4 on");;\
  }\
}
define Sonnenaufgang notify MyTwilight:light.* {\
  if($value{MyTwilight}>=4){\
    fhem("set NETIO_Socket4 off");;\
  }\
}
---

Grüße...
Nilz
Titel: Aw: Twilight
Beitrag von: ilmtuelp0815 am 07 Februar 2013, 18:34:25
Hi Nilz!
Da du schon auf "light" abfragst, dann setzt du vielleicht besser:

if(ReadingsVal("MyTwilight","light","4") < 4

ein.
Titel: Aw: Twilight
Beitrag von: MisterEltako am 07 Februar 2013, 18:45:27
Hi!

Also ich habe es bei mir mit Twilight und einer TimeOffset-Funktion (diese stammt aus einem Post st hier im Forum).
Damit ist in diesem Beispiel das Schalten der Rollläden um 20min verschoben, aber spätestens 9:00 gehen die Rolläden auf.
Funktioniert bisher prima!!!


in Fhem.cfg:
define myTL Twilight 50.596 12.672 1 12831828
define FileLog_Twilight FileLog /usr/local/FHEM/var/log/Twilight-%Y.log myTL:light.*
attr FileLog_Twilight logtype Twilight:Plot,text
attr FileLog_Twilight room Notifys


define Rolll_Frueh at *{TimeOffset(ReadingsVal("myTL","sr","09:00:00"),+20)} {\
                       fhem("set Rollladen_EG Auf;;\
                             set Rollladen_Flur Auf;;\
                             sleep 10;;set Dimmer_Wozi off;;")}
attr Rolll_Frueh room Notifys

define Rolll_Daemm at *{TimeOffset(ReadingsVal("myTL","ss","17:30:00"),+40)} {\
                    fhem("set Rollladen_EG 1;;\
                          set Rollladen_Flur 5;;\
                          sleep 15;;set Dimmer_Wozi 50;;")}
attr Rolll_Daemm room Notifys

in myUtils.pm:
sub TimeOffset($;$)

  {
    my $PtimeOrg = shift;
    my $Poffset = shift;

    $PtimeOrg = "" unless(defined($PtimeOrg));
    $Poffset  = 0  unless(defined($Poffset));
    my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;

    if ($PtimeOrg !~ /[0-2][0-9]:[0-5][0-9]/ or substr($PtimeOrg,0,2) >= 24) {$PtimeOrg = $hour.":".$min;}

    my $TimeP     = mktime(0,substr($PtimeOrg,3,2),substr($PtimeOrg,0,2),$mday,$month,$year,$wday,$yday,$isdst);
    my $TimePM    = $TimeP + $Poffset * 60;
    my ($Psec,$Pmin,$Phour,$Pmday,$Pmonth,$Pyear,$Pwday,$Pyday,$Pisdst) = localtime($TimePM);
    my $ReturnText = sprintf("%02d:%02d:%02d", $Phour, $Pmin, $Psec);
  }

MfG, MisterEltako