Twilight läuft / läuft nicht...

Begonnen von dascrip, 18 August 2013, 14:34:54

Vorheriges Thema - Nächstes Thema

dascrip

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

Dietmar63

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.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Steffen

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

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Dietmar63

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
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Dietmar63

Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

dascrip

Hallo Dietmar,

gestern Abend hat es nach dem Update funktioniert.

Danke!

Steffen

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

Steffen

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

Dietmar63

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());
 
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Dietmar63

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)
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Steffen

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

Dietmar63

... 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.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

moonsorrox

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
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Dduieh

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!