Hauptmenü

Beschattungssteuerung

Begonnen von SkodaSascha, 28 April 2013, 13:07:01

Vorheriges Thema - Nächstes Thema

MisterEltako

Also wenn du noch den o.g. Code von mir verwendest könnte das so lauten:

sub
Beschattungssteuerung($$) {
# Parameter: $hour, $month
my $hour = shift;
my $month = shift;
my $Temp= ReadingsVal("Wetter","fc1_low_c","999");
my $Sonne= ReadingsVal("Wetter","fc1_condition","kein Wert");
Log 3, "Readingswerte$hour, $month, $Temp, $Sonne");

if (($Temp==999) || ($Sonne eq "kein Wert")) {
Log 3, "Yahoo-Wetter nicht erreichbar oder kein Wert geliefert";
return;}

if (($month >= 5) && ($month <= 9)){
   Log 3, "Beschattungssteuerung aktiv";
   if (($hour >= 12)&& ($hour <= 21)){
        if (($Temp >= 18)&&(Value("RollladenSchlafzimmer") ne "off")){
             if (($Sonne eq "sonnig")||($Sonne eq "teilweise wolkig")){
                 Log 3, "Beschattungsposition wird angefahren...";
                 Log 3, "Rollladen öffnet 80 min vor Sunset";
                 fhem("set RollladenSchlafzimmer off");
                 
            }elsif(Value("RollladenSchlafzimmer") ne "on"){
                #wenn nicht mehr ,,sonnig" oder ,,teilweise wolkig" dann:
                Log 3, " Beschattungsposition wird aufgehoben...";
                fhem("set RollladenSchlafzimmer on");
            };
            #Beschattung egal ob sonnig oder nicht bei >18° 80min vor Sonnenuntergang
            # aufgehoben
            if (defined($defs{Schoenwetter})){fhem('delete Schoenwetter')};
            fhem("define Schoenwetter at +{sunset_abs(-4800)} set RollladenSchlafzimmer on");
        }
   }
}

}


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

locodriver

Hallo Miteinander, ich habe eine Sonnenschutzvariante laufen, die meine Zwecke erfüllt und nicht so aufgebläht ist. Ich greife auch auf Yahoo zurück. Da das Yahoowetter nicht immer so angegeben ist wie die realen Bedingungen sind, erschien es mir völlig ausreichend, nicht jede mögliche Bedingung in die Auswertung einzubeziehen - d.h. man sollte nicht versuchen, eine Genauigkeit zu erzielen welche durch die Eingangsparameter nicht möglich sein kann:

define WZ_Rolare_SoSchu at *10:01  {Log 1, "Max ist ".ReadingsVal("Wetter_Borsdorf","fc1_high_c",0)}{if ((Value("Rolaautomatik") eq "Ein") && ($month> 4) && ($month< 10) &&( ReadingsVal("Wetter_Borsdorf","fc1_high_c",0)>23) && (Value("WZ_Balkon") =~ m"geschlossen")) {fhem "set WZ_Rolare SoSchu";;}}
attr WZ_Rolare_SoSchu room 001Wohnzimmer


Ich prüfe von Mai bis September um 10:01 Uhr, ob der prognostizierte Höchstwert größer als 23 Grad ist und wenn die Rolaautomatik (ein Dummy) "Ein" und die Balkontür "geschlossen" ist wird der Rolare in Sonnenschutzposition gefahren (bei mir 45%). Das Zimmer ist nicht völlig dunkel (Zimmerpflanzen), wird aber nicht aufgeheizt. Um 16 Uhr lasse ich dann den Rola ohne weitere Bedingungen wieder hochfahren. Diese Steuerung hat sich bei mir im letzten Sommer schon bewährt und läuft in einer Includedatei.
Und noch mal Danke an Mr.Eltako an die Unterstützung, die Klammern richtig zu sortieren.

Schöne Pfingsten Uwe
fhem 6.0 auf Rpi3 Bookworm
HM-LAN-CFG (FW 0.965), HM-MOD-UART, 2x HM-TC-IT-WM-W-EU, 4x HM-Sec-RHS und 3x HM-CC-RT-DN, 6x HM-LC-Bl1-FM mit je 1x Somfy-Motor,
2x HM-LC-SW2-FM für Licht und Lüfter, 2x HM-PB-6-WM55, Alexa, Jeelinkcross, CUL, CUNO2, IR-Blaster

MisterEltako

Hi, locodriver!

Ist sicher auch eine gute Lösung, aber ich finde das schöne an FHEM ist, das alles möglich ausprobiert werden kann und individuell verfeinert werden kann. Ich führe die Codezeilen lieber etwas ausführlicher auf, um es später ohne großes Überlegen nachvollziehen zu können. Zudem mag ich es wenn eigene Logeinträge auf Fehler im Ablauf hinweisen bzw. diese automatisch abgefangen werden.

Aber letztendlich wird jeder sein eigenes Prinzip haben. Ich finde gerade das Herumexperimentieren so spannend an FHEM im Vergleich zu anderen Hausautomationssytemen. Da kann man immer dazu lernen. Einfach abschreiben, kann doch jeder ;o).

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

SkodaSascha

So, nachdem nun ENDLICH der Sommer gekommen ist, und auch mal die Sonne scheint, läßt sich die Steuerung unter realen Bedingungen testen.

Ich habe nun noch 2 weitere Rollläden die sich auf der Sonnenseite befinden eingefügt, und das die Zimmer ganz dunkel sind habe ich mit off-for-timer geändert. Ein wenig Licht ist schon nicht schlecht.

Um das ganze nicht ganz so dolle aufzublähen wie auch schon locodriver schrieb, habe ich das schließen bei Sonnenuntergang zu festen Zeiten geändert.

Ach so, heute sagte Yahoo Wetter den ganzen Tag "bewölkt", dabei schien hier nur die Sonne mit ein paar Wolken. Ich habe nun bewölkt auch noch mit reingenommen.

Ich hänge hier nochmal meinen Code an, mit der bitte das dort nochmal drübergesehen wird. Mit der "fhem.cfg" bin ich mir nicht so sicher ob da alles OK ist.

fhem.cfg
define Rolladensteuerung notify Wetter:condition.* {\
my $Temp= ReadingsVal("Wetter","temp_c","999");;\
my $Sonne= ReadingsVal("Wetter","condition","kein Wert");;\
if (defined($defs{Rollo_zu})) {fhem('delete Rollo_zu')};;\
if (defined($defs{Rollo_auf})) {fhem('delete Rollo_auf')};;\
fhem("define Rollo_auf at *21:00 set RolladenSchlafzimmer on;;set RolladenWohnzimmer on");;\
Beschattungssteuerung($hour, $month);;\
}


99_myUtils
sub
Beschattungssteuerung($$) {
# Parameter: $hour, $month
my $hour = shift;
my $month = shift;
my $Temp= ReadingsVal("Wetter","temp_c","999");
my $Sonne= ReadingsVal("Wetter","condition","kein Wert");
Log 3, "Readingswerte: $hour, $month, $Temp, $Sonne";

if (($Temp==999) || ($Sonne eq "kein Wert")) {
Log 3, "Yahoo-Wetter nicht erreichbar oder kein Wert geliefert";
return;}

if (($month >= 5) && ($month <= 9)){
   Log 3, "Beschattungssteuerung aktiv";
   if (($hour >= 13)&& ($hour <= 20)){
        if (($Temp >= 20)&&(Value("RolladenSchlafzimmer") ne "off-for-timer 14")){
             if (($Sonne eq "sonnig")||($Sonne eq "teilweise wolkig")||($Sonne eq "bewölkt")){
                 Log 3, "Beschattungsposition wird angefahren...";
                 Log 3, "Rolladen öffnet um 21:00 Uhr";
                 fhem("set RolladenSchlafzimmer off-for-timer 14");
                 fhem("set RolladenWohnzimmer off-for-timer 14");
                 fhem("set RolladenKinderzimmer off-for-timer 14");
                 
            }elsif(Value("RolladenSchlafzimmer") ne "on"){
                #wenn nicht mehr ,,sonnig" oder ,,teilweise wolkig oder "bewolkt" dann:
                Log 3, " Beschattungsposition wird aufgehoben...";
                fhem("set RolladenSchlafzimmer on");
                fhem("set RolladenWohnzimmer on");                
            };
            #Beschattung egal ob sonnig oder nicht bei >20° oder 21:00 Uhr
            # aufgehoben
            if (defined($defs{Schoenwetter})){fhem('delete Schoenwetter')};
   
}
}
}

}

1;
FHEM auf Raspberry Pi, HMLAN + CUL

MisterEltako

fhem.cfg:

define Rolladensteuerung notify Wetter:condition.* {\
    fhem("define Rollo_auf at *21:00 set RolladenSchlafzimmer on;;set RolladenWohnzimmer on");;\
    Beschattungssteuerung();;\
}


99_myUtils.pm

sub
Beschattungssteuerung() {

my $Temp= ReadingsVal("Wetter","temp_c","999");
my $Sonne= ReadingsVal("Wetter","condition","kein Wert");
Log 3, "Readingswerte: $Temp, $Sonne";
....u.s.w.



die Überprüfung, ob definiert brauchst du nach deinen Änderungen nicht mehr:
if (defined($defs{Rollo_zu})) {fhem('delete Rollo_zu')};;\
if (defined($defs{Rollo_auf})) {fhem('delete Rollo_auf')};;\

genauso brauchst du die Parameter nicht übergeben, da du sie ja direkt in der 99_myUtils abfragst

So mag es vielleicht funktionieren, aber für mich wäre wichtig, dass der Rollladen Sonnenstandsabhängig oder Helligkeitsabhängig schliesst. Aber erneut ausbaufähig ist der Code .... ;o)

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

SkodaSascha

Ich habe die fhem.cfg so gespeichert, nun habe ich die Fehlermeldung:

2013.06.07 16:57:18 3: Rolladensteuerung return value: Not enough arguments for main::Beschattungssteuerung at (eval 4629) line 1, near "()"

Die Rollläden sollen um 21 Uhr öffnen, danach ist ein Helligkeitssensor dafür da um bei Dämmerung die Rollläden wieder runter zu fahren. Diser ist direkt Programmiert, bei Ausfall der Fritzbox geht es wenigstens noch Morgens hoch und Abends wieder runter.

Hier nochmal meine 99_myUtils.pm, was passt da mal wieder nicht. Ich werd noch verrückt ...

sub
Beschattungssteuerung($$) {
# Parameter: $hour, $month
my $hour = shift;
my $month = shift;
my $Temp= ReadingsVal("Wetter","temp_c","999");
my $Sonne= ReadingsVal("Wetter","condition","kein Wert");
Log 3, "Readingswerte: $hour, $month, $Temp, $Sonne";

if (($Temp==999) || ($Sonne eq "kein Wert")) {
Log 3, "Yahoo-Wetter nicht erreichbar oder kein Wert geliefert";
return;}

if (($month >= 5) && ($month <= 9)){
   Log 3, "Beschattungssteuerung aktiv";
   if (($hour >= 13)&& ($hour <= 20)){
        if (($Temp >= 20)&&(Value("RolladenSchlafzimmer") ne "off-for-timer 14")){
             if (($Sonne eq "sonnig")||($Sonne eq "teilweise wolkig")||($Sonne eq "bewölkt")){
                 Log 3, "Beschattungsposition wird angefahren...";
                 Log 3, "Rolladen öffnet um 21:00 Uhr";
                 fhem("set RolladenSchlafzimmer off-for-timer 14");
                 fhem("set RolladenWohnzimmer off-for-timer 14");
                 fhem("set RolladenKinderzimmer off-for-timer 14");
                 
            }elsif(Value("RolladenSchlafzimmer") ne "on"){
                #wenn nicht mehr ,,sonnig" oder ,,teilweise wolkig" oder "bewölkt" dann:
                Log 3, " Beschattungsposition wird aufgehoben...";
                fhem("set RolladenSchlafzimmer on");
                fhem("set RolladenWohnzimmer on");
                fhem("set RolladenKinderzimmer on");};
               
}
}
}

}

1;
FHEM auf Raspberry Pi, HMLAN + CUL

MisterEltako

Schau doch meinen vorigen Post nochmals an! Du musst auch den Teil in der 99_myUtils.pm ändern!

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

SkodaSascha

Ok, hab ich mir nochmal angesehn. Du meintest den oberen Teil der geändert werden musste. Ein speichern brachte:

Global symbol "$hour" requires explicit package name at ./FHEM/99_myUtils.pm line 21. Global symbol "$month" requires explicit package name at ./FHEM/99_myUtils.pm line 21. Global symbol "$month" requires explicit package name at ./FHEM/99_myUtils.pm line 27. Global symbol "$month" requires explicit package name at ./FHEM/99_myUtils.pm line 27. Global symbol "$hour" requires explicit package name at ./FHEM/99_myUtils.pm line 29. Global symbol "$hour" requires explicit package name at ./FHEM/99_myUtils.pm line 29.

Ich hoffe ich hab das kapiert und kein blödsin gemacht.
FHEM auf Raspberry Pi, HMLAN + CUL

MisterEltako

Sorry, jetzt habe ich gepennt. Du hast je doch noch $hour und $month Vergleiche drin. Dachte, das du die auch entfernt hast.

Also so:


fhem.cfg

define Rolladensteuerung notify Wetter:condition.* {\
fhem("define Rollo_auf at *21:00 set RolladenSchlafzimmer on;;set RolladenWohnzimmer on");;\
Beschattungssteuerung($hour, $month);;\
}



99_myUtils:

sub
Beschattungssteuerung($$) {
# Parameter: $hour, $month
my $hour = shift;
my $month = shift;
my $Temp= ReadingsVal("Wetter","temp_c","999");
my $Sonne= ReadingsVal("Wetter","condition","kein Wert");
Log 3, "Readingswerte: $hour, $month, $Temp, $Sonne";

if (($Temp==999) || ($Sonne eq "kein Wert")) {
Log 3, "Yahoo-Wetter nicht erreichbar oder kein Wert geliefert";
return;}

if (($month >= 5) && ($month <= 9)){
   Log 3, "Beschattungssteuerung aktiv";
   if (($hour >= 13)&& ($hour <= 20)){
        if (($Temp >= 20)&&(Value("RolladenSchlafzimmer") ne "off-for-timer 14")){
             if (($Sonne eq "sonnig")||($Sonne eq "teilweise wolkig")||($Sonne eq "bewölkt")){
                 Log 3, "Beschattungsposition wird angefahren...";
                 Log 3, "Rolladen öffnet um 21:00 Uhr";
                 fhem("set RolladenSchlafzimmer off-for-timer 14");
                 fhem("set RolladenWohnzimmer off-for-timer 14");
                 fhem("set RolladenKinderzimmer off-for-timer 14");
                 
            }elsif(Value("RolladenSchlafzimmer") ne "on"){
                #wenn nicht mehr ,,sonnig" oder ,,teilweise wolkig oder "bewolkt" dann:
                Log 3, " Beschattungsposition wird aufgehoben...";
                fhem("set RolladenSchlafzimmer on");
                fhem("set RolladenWohnzimmer on");                
            };
            #Beschattung egal ob sonnig oder nicht bei >20° oder 21:00 Uhr
            # aufgehoben
            if (defined($defs{Schoenwetter})){fhem('delete Schoenwetter')};
   
}
}
}

}

1;


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

SkodaSascha


Nun habe ich nur noch:

2013.06.08 07:09:00 3: define Rollo_auf at *21:00 set RolladenSchlafzimmer on;set RolladenWohnzimmer on : Rollo_auf already defined, delete it first
FHEM auf Raspberry Pi, HMLAN + CUL

MisterEltako

fhem.cfg

define Rolladensteuerung notify Wetter:condition.* {\
if (defined($defs{Rollo_auf})) {fhem('delete Rollo_auf')};;\
fhem("define Rollo_auf at *21:00 set RolladenSchlafzimmer on;;set RolladenWohnzimmer on");;\
Beschattungssteuerung($hour, $month);;\
}


MfG, MisterEltako

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

SkodaSascha

Danke, beim Speichern bekomme ich aber:

ERROR:
Please define Rollo_auf first

Ich weiß nicht ob es zusammenhängt, wenn das Wetter abgerufen wird schaltet jetzt der Rolladen Wohnzimmer auf on. Erst einmal ist es noch gar keine 13 Uhr, und warum will er hochfahren?

2013.06.08 12:05:21 3: Readingswerte: 12, 6, 21, bewölkt
2013.06.08 12:05:21 3: Beschattungssteuerung aktiv
2013.06.08 12:05:21 2: FS20 RolladenWohnzimmer on  
FHEM auf Raspberry Pi, HMLAN + CUL

MisterEltako


define Rolladensteuerung notify Wetter:condition.* {\
if (defined($defs{Rollo_auf})) {fhem('delete Rollo_auf')};;\
fhem("define Rollo_auf at *21:00 {set RolladenSchlafzimmer on;;;;set RolladenWohnzimmer on")};;\
Beschattungssteuerung($hour, $month);;\
}

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

SkodaSascha

Habe ich probiert, jetzt bekomme ich keine Readingswerte mehr. Wenn ich im Weather Modul die Werte hole, kommt im Log:

2013.06.08 21:01:36 3: Rolladensteuerung return value: Unmatched right curly bracket at (eval 4776) line 1, at end of line
syntax error at (eval 4776) line 1, near "; }"

Um 21 Uhr ist nichts passiert.
FHEM auf Raspberry Pi, HMLAN + CUL

MisterEltako

define Rolladensteuerung at +00:00:15 {\
if (defined($defs{Rollo_auf})) {\
   fhem('delete Rollo_auf');;\
   }\
fhem("define Rollo_auf at *21:00 {set RolladenSchlafzimmer on;;;;set RolladenWohnzimmer on}");;\
Beschattungssteuerung($hour, $month);;\
}


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