Hauptmenü

Beschattungssteuerung

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

Vorheriges Thema - Nächstes Thema

Dietmar63

das mittlere Anführungszeichen in  "teilweise "wolkig"  könnte das Problem verursachen!
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

MisterEltako

zusätzlich muss es:
+{sunset_abs(-4800)} lauten!


}elsif (($Sonne eq "sonnig") || ($Sonne eq "teilweise wolkig")){\
   fhem("define Schoenwetter at +{sunset_abs(-4800)} set RolladenSchlafzimmer on");;\
   Log 3, "Es ist schoenes Wetter - Rollo 80min vor Sonnenuntergang öffnen...");;\
}elsif (($hour>= 12) && ($hour<=18) && (Value("RolladenSchlafzimmer") ne "on")) && (($mmonth >= 5) || ($mmonth <= 9)) && (($Sonne ne "sonnig") || ($Sonne ne "teilweise wolkig")){\
   fhem ("set RolladenSchlafzimmer on");;\


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

MisterEltako

Habe noch einen Gedankenanstoss für dich, damit das ganze übersichtlicher wird:
Das ganze wie oben schon erwähnt in die 99_myUtils.pm packen und über Definition in Fhem.cfg aufrufen.

# in fhem.cfg:
define Rollladensteuerung notify Wetter {\
 my $Temp= ReadingsVal("Wetter","fc1_low_c","999");;\
 my $Sonne= ReadingsVal("Wetter","fc1_condition","kein Wert");;\
 fhem("define Rollo_zu at +{sunrise_abs()} set RollladenSchlafzimmer on");;\
 fhem("define Rollo_zu at +{sunset_abs()} set RollladenSchlafzimmer off");;\
 Beschattungssteuerung($hour, $mmonth);;\
 }
 
 
 # 99_myUtils.pm:
 sub
 Beschattungssteuerung($$) {
 # Parameter: $hour, $mmonth
 my $hour = shift;
 my $mmonth = shift;
 my $Temp= ReadingsVal("Wetter","fc1_low_c","999");;\
 my $Sonne= ReadingsVal("Wetter","fc1_condition","kein Wert");

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

 if (($hour >= 12)&& ($hour <= 21)){

  if (($mmonth >= 5) && ($mmonth <= 9)){
   Log 3, "Beschattungssteuerung aktiv";

   if (($Temp >= 18)&& && (Value("RolladenSchlafzimmer") 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");
              fhem("define Schoenwetter at +{sunset_abs(-4800)} set RollladenSchlafzimmer on");

            }else{
              Log 3, "nur Beschattungsposition wird angefahren...";
              fhem("set RollladenSchlafzimmer off");
            }

   }elsif (($Temp < 18)&& (Value("RolladenSchlafzimmer") ne "on")){
            Log 3, "Rollladen oeffnen - es ist zu kalt!";
            fhem("set RollladenSchlafzimmer on");
   }
  }
}
}

Ich kann es leider erst heute Abend testen. Also kleine "Fehlerchen" sind event. noch drin.

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

SkodaSascha

Vielen Dank erst einmal, ich habe es jetzt mal versucht micht der 99_myUtils.pm. Werden die Daten in der Datei Original stehen benötigt, oder kann ich das alles löschen. Oder lieber drunter hängen?

Habe mit das mal angesehen, nun muss ich erst mal wieder verstehen was das alles heißt.
Es sieht aber so aus, dass:

}elsif (($Sonne eq "sonnig") || ($Sonne eq "teilweise wolkig")){\
   fhem("define Schoenwetter at +{sunset_abs(-4800)} set RolladenSchlafzimmer on");;\
   Log 3, "Es ist schoenes Wetter - Rollo 80min vor Sonnenuntergang öffnen...");;\
}elsif (($hour>= 12) && ($hour<=18) && (Value("RolladenSchlafzimmer") ne "on")) && (($mmonth >= 5) || ($mmonth <= 9)) && (($Sonne ne "sonnig") || ($Sonne ne "teilweise wolkig")){\
   fhem ("set RolladenSchlafzimmer on");;\


und das Skript für die 99_myUtils.pm nicht ganz überein passen. Die Temperatur <18 Grad "Rollladen oeffnen - es ist zu kalt!"muss ganz weg. Es soll nur hochgefahren werden wenn nicht Sonnig und nicht teilweise wolkig, sowie das mit der Monatsangabe und Sunset, aber das ist ja drin.


Habe das unten mal probiert, beim speichern der 99_myUtils.pm kommt:

Can't modify single ref constructor in scalar assignment at ./FHEM/99_Utils.pm line 156, near ");" syntax error at ./FHEM/99_Utils.pm line 168, near "&& &&" syntax error at ./FHEM/99_Utils.pm line 186, near "}" Missing right curly or square bracket at ./FHEM/99_Utils.pm line 187, at end of line


Wäre super wenn Du da noch einmal nachsehen kannst.
FHEM auf Raspberry Pi, HMLAN + CUL

MisterEltako

Also den bisherigen Code musst du komplett aus der fhem.cfg löschen.

in die 99_myUtils.pm kopierst du:

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");

 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("RolladenSchlafzimmer") 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");
              if (defined($defs{Schoenwetter}))     {fhem('delete Schoenwetter')};
              fhem("define Schoenwetter at +{sunset_abs(-4800)} set RollladenSchlafzimmer on");

            }elsif(Value("RollladenSchlafzimmer") ne "on"){
              Log 3, "nur Beschattungsposition wird aufgehoben...";
              if (defined($defs{Schoenwetter}))     {fhem('delete Schoenwetter')};
              fhem("set RollladenSchlafzimmer on");
            }

    }
  }
 }
}

und in die fhem.cfg kopierst du:

define Rollladensteuerung notify Wetter:condition.* {\
 my $Temp= ReadingsVal("Wetter","fc1_low_c","999");;\
 my $Sonne= ReadingsVal("Wetter","fc1_condition","kein Wert");;\
 fhem("define Rollo_zu at +{sunrise_abs()} set RollladenSchlafzimmer on");;\
 fhem("define Rollo_zu at +{sunset_abs()} set RollladenSchlafzimmer off");;\
 Beschattungssteuerung($hour, $month);;\
 }


Test über: trigger Wetter  sonnig

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

SkodaSascha


Habe nun alles eingefügt und dieses hier im Log:


2013.05.08 12:26:25 3: define Rollo_zu at +{sunset_abs()} set RolladenSchlafzimmer off : Rollo_zu already defined, delete it first
2013.05.08 12:26:25 3: Beschattungssteuerung aktiv
2013.05.08 12:56:25 3: define Rollo_zu at +{sunrise_abs()} set RolladenSchlafzimmer on : Rollo_zu already defined, delete it first
2013.05.08 12:56:25 3: define Rollo_zu at +{sunset_abs()} set RolladenSchlafzimmer off : Rollo_zu already defined, delete it first
2013.05.08 12:56:25 3: Beschattungssteuerung aktiv

FHEM auf Raspberry Pi, HMLAN + CUL

MisterEltako

define Rollladensteuerung notify Wetter:condition.* {\
 my $Temp= ReadingsVal("Wetter","fc1_low_c","999");;\
 my $Sonne= ReadingsVal("Wetter","fc1_condition","kein Wert");;\
if (defined($defs{Rollo_zu}))     {fhem('delete Rollo_zu')};
if (defined($defs{Rollo_auf}))     {fhem('delete Rollo_auf')};

fhem("define Rollo_zu at +{sunrise_abs()} set RollladenSchlafzimmer on");;\
 fhem("define Rollo_auf at +{sunset_abs()} set RollladenSchlafzimmer off");;\
 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

Beim speichern bekomme ich die Fehlermeldung:

Unknown command if, try help Unknown command fhem("define, try help

Im Log steht:

2013.05.08 20:13:11 3: Rolladensteuerung return value: Missing right curly or square bracket at (eval 8635) line 2, at end of line
syntax error at (eval 8635) line 2, at EOF


Müssten diese Zeilen:

fhem("define Rollo_zu at +{sunrise_abs()} set RolladenSchlafzimmer on");;\
fhem("define Rollo_auf at +{sunset_abs()} set RolladenSchlafzimmer off");;\

nicht

fhem("define Rollo_zu at +{sunrise_abs()} set RolladenSchlafzimmer off");;\
fhem("define Rollo_auf at +{sunset_abs()} set RolladenSchlafzimmer on");;\

heißen, wenn "runterfahren" off ist bei FS20. Oder verstehe ich diese Zeile falsch?
FHEM auf Raspberry Pi, HMLAN + CUL

MisterEltako

Schon wieder Flüchtigkeitsfehler! Nun aber, oder? ;-)

define Rollladensteuerung notify Wetter:condition.* {\
my $Temp= ReadingsVal("Wetter","fc1_low_c","999");;\
my $Sonne= ReadingsVal("Wetter","fc1_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 +{sunrise_abs()} set RollladenSchlafzimmer on");;\
fhem("define Rollo_zu at +{sunset_abs()} set RollladenSchlafzimmer off");;\

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

Hallo,

gestern hätte es laut Readings klappen müssen, leider nicht nichts passiert. Im Log steht:

2013.05.09 16:03:52 3: Beschattungssteuerung aktiv
2013.05.09 16:33:53 3: Beschattungssteuerung aktiv
2013.05.09 17:03:56 3: Beschattungssteuerung aktiv
2013.05.09 17:33:52 3: Beschattungssteuerung aktiv
2013.05.09 18:03:52 3: Beschattungssteuerung aktiv

Was mir noch aufgefallen ist,wenn ich die 99_Utils.pm "speichere" erscheint im Log:


Subroutine Utils_Initialize redefined at ./FHEM/99_Utils.pm line 11.
Subroutine time_str2num redefined at ./FHEM/99_Utils.pm line 17.
Subroutine min redefined at ./FHEM/99_Utils.pm line 25.
Subroutine max redefined at ./FHEM/99_Utils.pm line 33.
Subroutine abstime2rel redefined at ./FHEM/99_Utils.pm line 41.
Subroutine trim redefined at ./FHEM/99_Utils.pm line 62.
Subroutine ltrim redefined at ./FHEM/99_Utils.pm line 75.
Subroutine rtrim redefined at ./FHEM/99_Utils.pm line 87.
Subroutine UntoggleDirect redefined at ./FHEM/99_Utils.pm line 99.
Subroutine UntoggleIndirect redefined at ./FHEM/99_Utils.pm line 122.
Subroutine Beschattungssteuerung redefined at ./FHEM/99_Utils.pm line 151.


Muss ich zum testen "trigger Wetter sonnig" oben bei Fhem eingeben? Dort passiert dann gar nichts.
FHEM auf Raspberry Pi, HMLAN + CUL

MisterEltako

Das mit den Logeinträgen beim Speichern ist normal. Besser wäre es, wenn du eine eigene 99_myUtils anlegst, indem du 99_Utils öffnest und als 99_myUtils.pm speicherst. Dann musst du 99_myUtils öffnen, den gesamten Inhalt markieren und löschen. Dann den nachfolgenden gepostetet Teil komplett (auch die 1; ) einfügen.

Zum nicht schalten: Ich habe in meinem geposteten Code versehentlich die if-Abfrage mit Rolladen statt Rollladen geschrieben. Bitte überprüfen, ob das bei dir übereinstimmt.


package main;
use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}


#---------------------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------

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");
              if (defined($defs{Schoenwetter})){fhem('delete Schoenwetter')}
              fhem("define Schoenwetter at +{sunset_abs(-4800)} set RollladenSchlafzimmer on");

            }elsif(Value("RollladenSchlafzimmer") ne "on"){
              Log 3, "nur Beschattungsposition wird aufgehoben...";
              fhem("set RollladenSchlafzimmer on");
            }

    }
  }
 }
}

1;


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

SkodaSascha

Was mache ich mit der alten "99_Utils.pm", Datei komplett löschen, den Inhalt komplett löschen, oder den Teil mit der Beschattungssteuerung löschen?

Beim speichern der Datei "99_myUtils.pm" bekomme ich (die 1; ist mit dabei) diese Fehler:

ERROR:
syntax error at ./FHEM/99_myUtils.pm line 23, near ""Readingswerte$hour, $month, $Temp, $Sonne")"


Ich ändere die Skipte immer in "Rolladen", ist zwar die ganz alte Schreibweise,
aber was solls. Bei mir sind alle Aktoren so gespeichert.
FHEM auf Raspberry Pi, HMLAN + CUL

MisterEltako

Log 3, "Readingswerte$hour, $month, $Temp, $Sonne");

muss natürlich:

Log 3, "Readingswerte: $hour, $month, $Temp, $Sonne";

lauten.

Auf keine Fall die Orginal 99_Utils.pm oder deren Inhalt löschen!!!!

Nur den Teil, den du in deine eigene 99_myUtils.pm transferiert hast, kannst/solltest du aus der echten 99_Utils.pm löschen.

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

SkodaSascha

Sieht sehr gut aus:

2013.05.10 19:23:14 3: Readingswerte: 19, 5, 15, überwiegend wolkig
2013.05.10 19:23:14 3: Beschattungssteuerung aktiv

Nun hoffe ich mal auf einen schönen Tag, ob der Ablauf so ist wie ich mir das vorgestellt habe. Werde auf jeden Fall nochmal berichten...

Vielen Dank, ohne das Forum und besonderst MisterEltako hätte ich es nie gebacken bekommen.
FHEM auf Raspberry Pi, HMLAN + CUL

SkodaSascha

Sehr schön :-)
Heute hatten wir mal gutes Wetter, und der Rolladen ist in die Beschattungsposition gefahren.

2013.05.15 12:07:47 3: Readingswerte: 12, 5, 20, teilweise wolkig
2013.05.15 12:07:47 3: Beschattungssteuerung aktiv
2013.05.15 12:07:47 3: Beschattungsposition wird angefahren...
2013.05.15 12:07:47 3: Rolladen öffnet 80 min vor Sunset
2013.05.15 12:07:47 2: FS20 set RolladenSchlafzimmer off
2013.05.15 12:07:48 2: FS20 RolladenSchlafzimmer off

Nun habe ich mit mal die 99_myUtils.pm angesehen. Wie kann ich in dieser Zeile noch hinzufügen, dass
wenn nicht sonnig und nicht teilweise wolkig der Rolladen auch wieder hochfährt?


fhem("define Schoenwetter at +{sunset_abs(-4800)} set RolladenSchlafzimmer on");

Wir hatten das in der fhem.cfg mal so geschrieben:

}elsif (($hour>= 12) && ($hour<=18) && (Value("RolladenSchlafzimmer") ne "on")) && (($mmonth >= 5) || ($mmonth <= 9)) && (($Sonne ne "sonnig") || ($Sonne ne "teilweise wolkig")){\

FHEM auf Raspberry Pi, HMLAN + CUL