FHEM Forum

FHEM => Automatisierung => Thema gestartet von: dascrip am 18 August 2013, 14:34:54

Titel: Twilight läuft / läuft nicht...
Beitrag von: dascrip am 18 August 2013, 14:34:54
Hallo Zusammen,

ich habe meine Rolladensteuerung über Twilight laufen, was einwandfrei läuft:

define Sonnenuntergang notify juechen_twilight:light.* {\
  if($value{juechen_twilight}==10){\
    fhem("set gg_Rolladen_alle off");;\
  }\
}
attr Sonnenuntergang room Rollos

Nun habe ich versucht, die Außenlichtsteuerung analog dazu einzusetzen. Nur der Wert, an dem geschaltet wird, habe ich von 10 auf 7 geändert:

define Alicht notify juechen_twilight:light.* {\
  if($value{juechen_twilight}==7){\
    fhem("set gg_Aussenbeleuchtung on");;\
  }\
}

Diese funktioniert mal, mal wieder nicht. Jedes Mal, wenn es nicht funktioniert, bekomme ich folgende Fehlermeldung:

[TWILIGHT] No Weather location found at yahoo weather for location ID: 664247
xml:
<HEAD><TITLE>Maximum Transaction Time Exceeded</TITLE></HEAD>
<BODY BGCOLOR="white" FGCOLOR="black">
<FONT FACE="Helvetica,Arial"><B>
 Maximum Transaction Time Exceeded</B></FONT>

<!-- default "Maximum Transaction Time Exceeded" response (504) -->
</BODY>


Hat irgendwer eine Idee, woran es liegt? Denn mit den Rolladen funktioniert Twilight einwandfrei.

Danke

Gruß

Dominik
Titel: Aw: Twilight läuft / läuft nicht...
Beitrag von: Dietmar63 am 18 August 2013, 15:47:30
Das Modul ist vor wenigen Tagen von mir verändert worden.
Hol dir mal die neueste Version aus der Codebasis herunter. Neustart bzw. reload nicht vergessen.
Wenn sie erfolgreich läuft bekommst du folgenden output:
2013.08.18 06:11:51 3: [Twilight] sr_weather state=6  light=6  nextEvent=ss_weather 18.08.2013  20:36:06  deg=+0.0°
2013.08.18 06:11:50 3: [Twilight] sr_indoor  state=5  light=5  nextEvent=sr_weather 18.08.2013  06:11:50  deg=+0.0°
2013.08.18 06:11:50 3: [Twilight] sr         state=4  light=4  nextEvent=sr_indoor  18.08.2013  06:11:50  deg=+0.0°
2013.08.18 05:40:00 3: FS20 set Pumpe off
2013.08.18 05:27:42 3: [Twilight] sr_civil   state=3  light=3  nextEvent=sr         18.08.2013  06:11:50  deg=-6.0°
2013.08.18 04:38:42 3: [Twilight] sr_naut    state=2  light=2  nextEvent=sr_civil   18.08.2013  05:27:42  deg=-12.0°


Versuch mal deine Steuerungen auf die echten ss/sr Ereignisse umzubauen, die in aktEvent geliefert werden:
Bei mir läuft folgendes problemlos:

define TwilightMessage1       notify Twilight.*:aktEvent:.*ss_weather.*     set StehlampeTisch on;; set StehlampeTV on

ob das

define Sonnenuntergang notify juechen_twilight:light.* {\
 if($value{juechen_twilight}==10){\
 fhem("set gg_Rolladen_alle off");;\
 }\
 }


wirllich so funktiniert wage ich anzuzweifeln - mag aber sein.
$value{juechen_twilight}==10 dürfte nicht immer funktionieren. Müsste aus meiner Sicht auf ReadingsVal("juechen_twilight","state",-1)==10 umgebaut werden
Light nimmt nur Werte zwischen 1 und 6 an. Der state kann die Werte von 1-11 haben.

Für detailiertere Lichtwerte gibt es neue Readings, twilight und twilight_weather. Sie dir mal die Doku an.

mit
define TwilightMessages       notify Twilight.*:aktEvent:.*                  {Log 3, "Nachricht von @: %"}
kannst du alle Ereignisse beobachten und entscheiden welchses ss sr das Richtige für dich ist.
Titel: Aw: Twilight läuft / läuft nicht...
Beitrag von: Steffen am 18 August 2013, 19:52:25
Hallo!

Ich wollte jetzt auch mal testen aber bei diesem versuch stimmt irgendwas noch nicht:
myTwilight:light.* {
  my $D = ReadingsVal("Doreen","state","99");
  my $S = ReadingsVal("Steffen","state","99");
  my $L = ReadingsVal("myTwilight","light","99");
  if((($D) eq "present") || (($S) eq "present")) && (($L) "== 5")) {
    fhem("set AbendLicht on");
  }
}  


Ich glaube es liegt an "==5", hat jemand eine idee wie man es sonst schreiben könnte??

Mfg Steffen
Titel: Aw: Twilight läuft / läuft nicht...
Beitrag von: Puschel74 am 18 August 2013, 20:17:37
Hallo,

solche Abfragen habe ich so

my $light = ReadingsVal("myTwilight", "light", 99);
  my $fhttk_eing_tuer = ReadingsVal("EG_Eingangstuer", "Window", "nA");
  if ( $fhttk_eing_tuer eq "Closed" ) {
    if ($light < 6) {


realisiert und es klappt einwandfrei.

Warum du soviele Klammern machst - keine Ahnung.
Aber == sollte schon passen.
Wenn mich nicht alles täsucht ist = eine Zuweisung und == der Vergleich

Grüße
Titel: Aw: Twilight läuft / läuft nicht...
Beitrag von: Dietmar63 am 18 August 2013, 21:06:30
so:
 if((($D) eq "present") || (($S) eq "present")) && (($L) == 5)) {


einfacher:
 if(($D eq "present") || ($S eq "present")) && ($L == 5)) {


"== 5" falsch            
== "5" richtig
" kann man lassen, da es sich um einen numerischen Vergleich handelt.
== 5 noch richtiger
Titel: Aw: Twilight läuft / läuft nicht...
Beitrag von: Dietmar63 am 19 August 2013, 20:35:30
hast du es hinbekommen?
Titel: Aw: Twilight läuft / läuft nicht...
Beitrag von: dascrip am 19 August 2013, 20:44:47
Hallo Dietmar,

gestern Abend hat es nach dem Update funktioniert.

Danke!
Titel: Aw: Twilight läuft / läuft nicht...
Beitrag von: Steffen am 20 August 2013, 05:17:39
Zitat von: Dietmar63 schrieb am So, 18 August 2013 21:06so:
 if((($D) eq "present") || (($S) eq "present")) && (($L) == 5)) {


einfacher:
 if(($D eq "present") || ($S eq "present")) && ($L == 5)) {


"== 5" falsch            
== "5" richtig
" kann man lassen, da es sich um einen numerischen Vergleich handelt.
== 5 noch richtiger

Danke Dietmar63, bei mir hat es auch geklappt!

Mfg Steffen
Titel: Aw: Twilight läuft / läuft nicht...
Beitrag von: Steffen am 21 August 2013, 06:01:27
Guten Morgen!

Nun wollte ich noch eine zweite if einfügen:
myTwilight:light.* {
 my $D = ReadingsVal("Doreen","state","99");
 my $S = ReadingsVal("Steffen","state","99");
 my $L = ReadingsVal("myTwilight","light","99");
 my $hm = sprintf("%%02d:%%02d", $hour, $min);
 if(($D eq "present") || ($S eq "present")){
  if(($L == 3) && ($hm gt "05:00" && $hm lt "10:00")){
    fhem("set AbendLicht on");
  }
}


aber dann klappt es nicht mehr, mit jeder einzeln klappt es!

Könnte mir bitte jemand helfen, wie man eine zweites "if" einfügt?!

Mfg Steffen
Titel: Aw: Twilight läuft / läuft nicht...
Beitrag von: Dietmar63 am 21 August 2013, 06:58:00
Die Variablen $hour... Haben vermutlich keinen Inhalt.
Must du dir mit time() und localtime () besorgen.

etwa so:
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time());
 
Titel: Aw: Twilight läuft / läuft nicht...
Beitrag von: Dietmar63 am 21 August 2013, 20:24:36
läuft es?

Das Problem entsteht dadurch, dass die Perlausdrücke der fhem.cfg in fhem ohne Syntaxprüfung ablaufen.
Deshalb gibt es auch keine Fehlermeldung.

In deinem Fall wird $hour und $min mit Initialwerten belegt und ausgeführt.
Wenn du eine gewisse Sicherheit bekommen willst, kannst du eine Funktion in die 99_Utils aufnehen:


sub
lichtAn () {
 my $D = ReadingsVal("Doreen","state","99");
 my $S = ReadingsVal("Steffen","state","99");
 my $L = ReadingsVal("myTwilight","light","99");
 my $hm = sprintf("%%02d:%%02d", $hour, $min);
 if(($D eq "present") || ($S eq "present")){
  if(($L == 3) && ($hm gt "05:00" && $hm lt "10:00")){
    fhem("set AbendLicht on");
  }
 }
}


die fhem.cfg enthält dann nur folgendes:
myTwilight:light.* { lichtAn() }

Wenn jetzt die 99_util per reload geladen wird, bekommst du eine Fehlermeldung.
Wenn die 99_utils über die Fhem-Oberfläche gespeichert wird, bekommst du auch eine FM:


(siehe Anhang / see attachement)
Titel: Aw: Twilight läuft / läuft nicht...
Beitrag von: Steffen am 22 August 2013, 05:36:03
Zitat von: Steffen schrieb am Mi, 21 August 2013 06:01Guten Morgen!

Nun wollte ich noch eine zweite if einfügen:
myTwilight:light.* {
 my $D = ReadingsVal("Doreen","state","99");
 my $S = ReadingsVal("Steffen","state","99");
 my $L = ReadingsVal("myTwilight","light","99");
 my $hm = sprintf("%%02d:%%02d", $hour, $min);
 if(($D eq "present") || ($S eq "present")){
  if(($L == 3) && ($hm gt "05:00" && $hm lt "10:00")){
    fhem("set AbendLicht on");
  }
}


aber dann klappt es nicht mehr, mit jeder einzeln klappt es!

Könnte mir bitte jemand helfen, wie man eine zweites "if" einfügt?!

Mfg Steffen

Guten Morgen!

Nun habe ich den Fehler oder besser gesagt das Fehlende Zeichen "}":
myTwilight:light.* {
 my $D = ReadingsVal("Doreen","state","99");
 my $S = ReadingsVal("Steffen","state","99");
 my $L = ReadingsVal("myTwilight","light","99");
 my $hm = sprintf("%%02d:%%02d", $hour, $min);
 if(($D eq "present") || ($S eq "present")){
  if(($L == 3) && ($hm gt "05:00" && $hm lt "10:00")){
    fhem("set AbendLicht on");
  }
}"}"


So klappt es wie ich es mir vorstelle!

Danke nochmal an alle für die schnelle Hilfe.

Mfg Steffen
Titel: Aw: Twilight läuft / läuft nicht...
Beitrag von: Dietmar63 am 22 August 2013, 06:17:46
... Und $hour, $min must du nicht definieren?

Tipp:
Pack den Kram in die 99_Utils und du bekommst vom Compiler bessere Hinweise, und die fhem.cfg bleibt übersichtlich.
Titel: Aw: Twilight läuft / läuft nicht...
Beitrag von: moonsorrox am 22 August 2013, 11:45:18
Zitat von: Dietmar63 schrieb am Do, 22 August 2013 06:17Tipp:
Pack den Kram in die 99_Utils und du bekommst vom Compiler bessere Hinweise, und die fhem.cfg bleibt übersichtlich.

da ich morgen mein Rollladenaktor bekomme wollte ich mal fragen, ob ich dieses Programm so einsetzen kann wenn ich den Aktor angelernt habe. Wird beim anlernen angeboten wohin ich das schreiben kann oder geht das automatisch in die fhem.cfg
Bin absolut unerfahren und kenne mich nicht aus, deshalb die vielleicht etwas einfache Frage
Titel: Aw: Twilight läuft / läuft nicht...
Beitrag von: Dduieh am 26 August 2013, 17:39:50
Ich habe mir die neuste Version heruntergeladen, bekomme aber jetzt beim Restart folgenden Fehler:

2013.08.26 17:31:05 1: reload: Error:Modul 59_Twilight deactivated:
 Glob not terminated at ./FHEM/59_Twilight.pm line 20.

UPDATE:
Sorry, meine Schuld!!!
Habe einen Fehler beim Download gemacht. Jetzt läufts!