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
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.
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
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
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
hast du es hinbekommen?
Hallo Dietmar,
gestern Abend hat es nach dem Update funktioniert.
Danke!
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
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
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());
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)
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
... 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.
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
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!