Mit Online Wetter z.B. Rolladen steuern?

Begonnen von ole30419, 08 Februar 2013, 20:02:33

Vorheriges Thema - Nächstes Thema

MisterEltako

Hi!

define Local_Wetter Weather deinCode 3600 de

define Test notify Local_Wetter {\
my $Temp= ReadingsVal("Local_Wetter","fc1_low_c","999");;\
my $Sonne= ReadingsVal("Local_Wetter","fc1_condition","kein Wert");;\
if (($Temp >= 22) && ($Sonne eq "sonnig") && (Value("Rollladen")!=15) && ($hour >= 10)){\
fhem("set Rollladen 15");;\  
Log 1, "Beschattungsposition wird angefahren...";;\
}elsif (($Temp<22) && (Value("Rollladen")==15)){\
fhem ("set Rollladen 100");;\
Log 1,"Rollladen wird geöffnet...";;\
} elsif ($Temp=999) || ($Sonne eq "kein Wert") {\
Log 1, "Yahoo-Wetter nicht erreichbar oder kein Wert geliefert";;\
}\
else {\
Log 1, "Rollladen unverändert";;\
}\
}

1.if:  Ist wahr wenn >22° & sonnig & Rollladen noch nicht in Schattenposition & nach 10 Uhr...Rollladen auf 15% zu
2.if:  Ist wahr wenn <22° & Rollladen bereits in Beschattungspos. gewesen ... Rollladen auf = 100%
3.if:  Ist wahr wenn keine Wetterdaten von Yahoo-Wetter möglich
4.else wenn nix zu tun ist... <--- dieses undbedingt nach Testung wieder rausnehmen, da sonst Log zugemüllt wird!


Ich empfehle Rollladen nicht mit off zu schließen sondern die %-Angaben zu nutzen, da sonst die Beschattungsposition von unten kommend anders ist als wenn der Rollladen von oben kommt. Also lieber 100%(ist auf), 15% (ist zum Bsp. Beschattung oder von dir gewünschter Wert) 1% (ist gleich zu) - dann stimmen die Positionen in etwa.

MfG, MisterEltako.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

UliM

....sofern man einen HM-Rolladenaktormhat.
Ich hab nen FS20-RSU, da gibt's keine %-Positionen. Man nur ganz hoch oder ganz runterfahren (on/off) oder mit on-for-timer in eine best. Position fahren. Drum sieht der urspr. Code somaus wie er aussieht :)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

ole30419

Hallo,
ok, habe das mal mit meine Aktoren umgeschrieben und mal versucht das von UliM, mit dem Wind, mit ein zubauen, habe ich mal in fett geschrieben. Zum Testen habe ich erst mal ein Rolladen statt der Markise genommen. Habe HM- Aktoren da geht das mit den 0% auf und 100% zu.
Kann das so gehen?

define Test_Sonne notify YahooWetter {\
my $Temp= ReadingsVal("YahooWetter","fc1_low_c","999");;\
my $Sonne= ReadingsVal("YahooWetter","fc1_condition","kein Wert");;\
my $maxWind = 50;;\
my $wind = ReadingsVal("YahooWetter","wind_condition","noInfo");;\
if ($wind > $maxWind){\
fhem("set WZ_Roll2_Ost 100");;\
Log 1,"Rollladen wird geöffnet...";;\
}\

if (($wind < ($maxWind)-5) && ($Temp >= 5) && ($Sonne eq "sonnig") && (Value("WZ_Roll2_Ost")!=90) && ($hour >= 10)){\
fhem("set WZ_Roll2_Ost 90");;\
Log 1, "Beschattungsposition wird angefahren...";;\
}elsif (($Temp<2) && (Value("WZ_Roll2_Ost")==90)){\
fhem ("set WZ_Roll2_Ost 100");;\
Log 1,"Rollladen wird geöffnet...";;\
}\
} elsif ($Temp=999) || ($Sonne eq "kein Wert") {\
Log 1, "Yahoo-Wetter nicht erreichbar oder kein Wert geliefert";;\
}\
}

PS: kann man die ganzen Klammer mit irgendwas prüfen?

MfG, ole3019
MfG Ole

MisterEltako

Hi!

Eine "}"-Klammer ist in obigem Beispielcode von dir zuviel. Und was willst du mit:
if (($wind < ($maxWind)-5) bezwecken.

Das müsste dann schon so lauten:
if (($wind < ($maxWind-5))...)}\
oder gleich:
if (($wind < 45)...)}\

Sonst müsste das meiner Meinung nach funktionieren.

define Test_Sonne notify YahooWetter {\
my $Temp= ReadingsVal("YahooWetter","fc1_low_c","999");;\
my $Sonne= ReadingsVal("YahooWetter","fc1_condition","kein Wert");;\
my $maxWind = 50;;\
my $wind = ReadingsVal("YahooWetter","wind_condition","noInfo");;\
if ($wind > $maxWind){\
fhem("set WZ_Roll2_Ost 100");;\
Log 1,"Rollladen wird geöffnet...";;\
}\
if (($wind < ($maxWind)-5) && ($Temp >= 5) && ($Sonne eq "sonnig") && (Value("WZ_Roll2_Ost")!=90) && ($hour >= 10)){\
fhem("set WZ_Roll2_Ost 90");;\
Log 1, "Beschattungsposition wird angefahren...";;\
}elsif (($Temp<2) && (Value("WZ_Roll2_Ost")==90)){\
fhem ("set WZ_Roll2_Ost 100");;\
Log 1,"Rollladen wird geöffnet...";;\
} elsif ($Temp=999) || ($Sonne eq "kein Wert") {\
Log 1, "Yahoo-Wetter nicht erreichbar oder kein Wert geliefert";;\
}\
}


Klammer testen kann man, wie o.g. mit Notpad++ bei in den Optionen eingestelltem Perl als Sprache gut testen.

MfG, MisterEltako.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

ole30419

ZitatUnd was willst du mit:
if (($wind < ($maxWind)-5) bezwecken.

Das die Markise ab der maximalen Windstärke minus 5 nicht ausfährt.
MfG Ole

ole30419

Hallo,
ich brauch noch mal Eure Hilfe. Mein Log wird nun vollgeschrieben mit dem ,,Yahoo-Wetter nicht erreichbar oder kein Wert geliefert" aber das Wette wird korrekt angezeigt.
Hier noch mal der ganze Code:
define Test_Sonne notify YahooWetter {\
my $Temp= ReadingsVal("YahooWetter","fc1_low_c","999");;\
my $Sonne= ReadingsVal("YahooWetter","fc1_condition","kein Wert");;\
my $maxWind = 50;;\
my $wind = ReadingsVal("YahooWetter","wind_condition","noInfo");;\
if ($wind > $maxWind){\
fhem("set WZ_Roll2_Ost 100");;\
Log 1,"Rollladen wird geöffnet...";;\
}\
if (($wind < ($maxWind)-5) && ($Temp >= 5) && ($Sonne eq "sonnig") && (Value("WZ_Roll2_Ost")!=90) && ($hour >= 10)){\
fhem("set WZ_Roll2_Ost 90");;\
Log 1, "Beschattungsposition wird angefahren...";;\
}elsif (($Temp<2) && (Value("WZ_Roll2_Ost")==90)){\
fhem ("set WZ_Roll2_Ost 100");;\
Log 1,"Rollladen wird geöffnet...";;\
} elsif (($Temp=999) || ($Sonne eq "kein Wert")) {\
Log 1, "Yahoo-Wetter nicht erreichbar oder kein Wert geliefert";;\
}\
}

Was ich noch geändert hatte wahren die Klammern um:

} elsif (($Temp=999) || ($Sonne eq "kein Wert")) {\

Da ich da auch immer Fehler im Log hatte.
MfG Ole

MisterEltako

Hi!

Nur ein kleiner Flüchtigkeitsfehler...mit großer Wirkung:

statt ($Temp=999)
besser:
$Temp == 999)
sonst weist man ja $Temp die 999 zu statt zu vergleichen....

Außerdem bei der Windabfrage statt:
my $wind = ReadingsVal("YahooWetter","wind_condition","noInfo");;\
bitte:
my $wind = ReadingsVal("YahooWetter","wind","noInfo");;\
nutzen. Sonst hast du in der Variablen statt z.B. 11 bei deiner Abfrage: Wind: NNW 11 km/h!!! Und das minus 5 ist dann schwierig ;o)

Ergänze doch noch den Log um die Variablen, dann weist du gleich wo der Fehler liegen könnte:
Log 1, "Yahoo-Wetter nicht erreichbar oder kein Wert geliefert, $Temp, $Sonne, $Wind";;\

MfG, MisterEltako.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

ole30419

Hallo,
super das mit dem doppelten  Gleichheitszeichen wahr wohl auch der Fehler für die Fehlermeldung: ,,Yahoo-Wetter nicht erreichbar oder kein Wert geliefert" .
Ob der Rollladen nun auch so seine Dienste erledigt wie ich mir das vorstelle werde ich in den nächsten Tagen sehen. Und werde dann auch noch mal berichten.
 
Danke noch mal an alle, das macht richtig Spaß mit Euch hier im Forum.
MfG Ole

leitronic

ich fasse kurz zusammen: (nicht nur für Gutenbergs und Schavans)
Hier ist kopieren ausdrücklich willkommen, Verbesserungsvorschläge übrigens auch!

define Test_Sonne notify YahooWetter {\
my $Temp= ReadingsVal("YahooWetter","fc1_low_c","999");;\
my $Sonne= ReadingsVal("YahooWetter","fc1_condition","kein Wert");;\
my $maxWind = 50;;\
my $wind = ReadingsVal("YahooWetter","wind_condition","noInfo");;\
my $wind = ReadingsVal("YahooWetter","wind","noInfo");;\
if ($wind > $maxWind){\
fhem("set WZ_Roll2_Ost 100");;\
Log 1,"Rollladen wird geöffnet...";;\
}\
if (($wind < ($maxWind)-5) && ($Temp >= 5) && ($Sonne eq "sonnig") && (Value("WZ_Roll2_Ost")!=90) && ($hour >= 10)){\
fhem("set WZ_Roll2_Ost 90");;\
Log 1, "Beschattungsposition wird angefahren...";;\
}elsif (($Temp<2) && (Value("WZ_Roll2_Ost")==90)){\
fhem ("set WZ_Roll2_Ost 100");;\
Log 1,"Rollladen wird geöffnet...";;\
} elsif (($Temp==999) || ($Sonne eq "kein Wert")) {\
Log 1, "Yahoo-Wetter nicht erreichbar oder kein Wert geliefert, $Temp, $Sonne, $Wind";;\
}\
}

ole30419

Ja, genauso.....

nur weiss ich nicht ob es auch bei leichter Bewölkung in die Beschattung fährt, da hier ja was mit Sonne stehen muss oder?

my $Sonne= ReadingsVal("YahooWetter","fc1_condition","kein Wert");;\



MfG Ole

MisterEltako

Hi!

Also entweder lässt du die Abfrage der Sonne weg oder ergänzt das um den Eintrag "leicht bewölkt" oder so ähnlich.

if (($wind < ($maxWind)-5) && ($Temp >= 5) && (($Sonne eq "sonnig") || ($Sonne eq "leicht bewölkt")) && (Value("WZ_Roll2_Ost")!=90) ....


MfG, MisterEltako.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

ole30419

Ja, danke habe ich nun auch noch hinzugefügt, das mit dem "leicht bewölkt".

Nun wollte ich auch noch so eine Aktiv/Passiv Button haben, aber mir dem Ende komme ich nicht klar.
Damit habe ich angefangen:
define Beschatung_auto dummy
attr Beschatung_auto setList state:aktiv,passiv
attr Beschatung_auto webCmd state
attr Beschatung_auto room Terasse


Aber wo kommt das hin? eq "aktiviert"

Das habe ich hier gefunden.Link
MfG Ole

MisterEltako

Am übersichtlichsten vielleicht so:

define Beschattung_auto dummy
attr Beschattung_auto setList state:aktiv,passiv
attr Beschattung_auto webCmd state
attr Beschattung_auto room Terasse

define Test_Sonne notify YahooWetter {\
if (Value("Beschattung_auto") eq "aktiv"){\
my $Temp= ReadingsVal("YahooWetter","fc1_low_c","999");;\
my $Sonne= ReadingsVal("YahooWetter","fc1_condition","kein Wert");;\
my $maxWind = 50;;\
my $wind = ReadingsVal("YahooWetter","wind_condition","noInfo");;\
my $wind = ReadingsVal("YahooWetter","wind","noInfo");;\
if ($wind > $maxWind){\
fhem("set WZ_Roll2_Ost 100");;\
Log 1,"Rollladen wird geöffnet...";;\
}\
if (($wind < ($maxWind)-5) && ($Temp >= 5) && ($Sonne =~ m/sonnig/) && (Value("WZ_Roll2_Ost")!=90) && ($hour >= 10)){\
fhem("set WZ_Roll2_Ost 90");;\
Log 1, "Beschattungsposition wird angefahren...";;\
}elsif (($Temp<2) && (Value("WZ_Roll2_Ost")==90)){\
fhem ("set WZ_Roll2_Ost 100");;\
Log 1,"Rollladen wird geöffnet...";;\
} elsif (($Temp==999) || ($Sonne eq "kein Wert")) {\
Log 1, "Yahoo-Wetter nicht erreichbar oder kein Wert geliefert, $Temp, $Sonne, $Wind";;\
}\
}\
}

(=~ m/sonnig/  ---> bedeutet: "sonnig" oder auch "meistens sonnig" wäre im Vergleich beides wahr)

MfG, MisterEltako
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

ole30419

Super danke, auch für die Korrektur der Rechtschreibung.

Gruße aus Peine
MfG Ole

ole30419

Hallo,
 so nun schein endlich mal die Sonne um die automatische Beschattung zu testen. Aber sie geht nicht ;-(

if (($Wind < ($maxWind)-5) && ($Temp >= 5) && ($Sonne =~ m/sonnig/) && (Value("WZ_Roll2_Ost")!=90) && ($hour >= 10)){\
fhem("set WZ_Roll2_Ost 90");;\


Sie soll ja (zum Test eingestellt) bei Wind kleine 45 & ab Temperatur grösser 5C° & "Sonne" und est ab 10:00 Uhr beschatten.
alle Bedienungen sind erfüllt aber es passiert nichts.

Nun habe ich die Beschattung mal mit manuell mit "set WZ_Roll2_Ost 90" ausgelöst und wenn Fhem bei mir das Wetter abruft wird der Rolladen wider komplett auf gemacht. Ich verstehe das nicht. Hier noch mal der der ganze Code:
define Beschattung_auto dummy
attr Beschattung_auto fp_Terrasse 280,280,2,Baschattung Automatisch
attr Beschattung_auto room Terasse
attr Beschattung_auto setList state:aktiv,passiv
attr Beschattung_auto webCmd state

define Test_Sonne notify YahooWetter {\
if (Value("Beschattung_auto") eq "aktiv"){\
my $Temp= ReadingsVal("YahooWetter","fc1_low_c","999");;\
my $Sonne= ReadingsVal("YahooWetter","fc1_condition","kein Wert");;\
my $maxWind = 50;;\
my $Wind = ReadingsVal("YahooWetter","wind","noInfo");;\
if ($Wind > $maxWind){\
fhem("set WZ_Roll2_Ost 100");;\
Log 1,"Rollladen wird geöffnet es ist zu viel Wind.";;\
}\
if (($Wind < ($maxWind)-5) && ($Temp >= 5) && ($Sonne =~ m/sonnig/) && (Value("WZ_Roll2_Ost")!=90) && ($hour >= 10)){\
fhem("set WZ_Roll2_Ost 90");;\
Log 1, "Beschattungsposition wird angefahren...";;\
}elsif (($Temp<=2) && (Value("WZ_Roll2_Ost")==90)){\
fhem ("set WZ_Roll2_Ost 100");;\
Log 1,"Rollladen wird geöffnet zu kalt...";;\
} elsif (($Temp==999) || ($Sonne eq "kein Wert")) {\
Log 1, "Yahoo-Wetter nicht erreichbar oder kein Wert geliefert, $Temp, $Sonne, $Wind";;\
}\
}\
}
attr Test_Sonne room Terasse

Und auch noch eine Auszug aus dem Log:  
2013.03.04 13:49:15 2: CUL_HM set WZ_Roll2_Ost 90 rxt:1
2013.03.04 13:50:06 2: CUL_HM set WZ_Roll2_Ost 100 rxt:1
2013.03.04 13:50:06 1: Rollladen wird geöffnet zu kalt...


Und der eventMonitor: 2013-03-04 14:27:07 CUL_HM WZ_Roll2_Ost set_100
2013-03-04 14:27:07 Weather YahooWetter wind: 11
2013-03-04 14:27:07 Weather YahooWetter wind_condition: Wind: SSO 11 km/h
2013-03-04 14:27:07 Weather YahooWetter humidity: 64
2013-03-04 14:27:07 Weather YahooWetter temperature: 6
2013-03-04 14:27:07 CUL_HM WZ_Roll2_Ost deviceMsg: 90 % (to HM_LANInterface)
2013-03-04 14:27:07 CUL_HM WZ_Roll2_Ost motor: up:90 %
2013-03-04 14:27:07 CUL_HM WZ_Roll2_Ost 90 %
2013-03-04 14:27:13 CUL_HM WZ_Roll2_Ost deviceMsg: auf (to HM_LANInterface)
2013-03-04 14:27:13 CUL_HM WZ_Roll2_Ost motor: stop:auf
2013-03-04 14:27:13 CUL_HM WZ_Roll2_Ost auf


Wie gesagt es wir immer wenn das Wette abgerufen wird die Beschattung aufgehoben aber es wird nicht Beschatten.

PS. Der  Aktiv/Passiv Button funktionier bestens danke !!!
MfG Ole