Mit Online Wetter z.B. Rolladen steuern?

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

Vorheriges Thema - Nächstes Thema

ole30419

Oh jetzt geht es ans eingemachte. Benutze include Anweisungen. In der letzen Zeile von fhem.cfg steht:
include /usr/local/FHEM/share/fhem/FHEM/Terasse.cfg
Und in der Terassen.fg
#   hier Sonne  

define Beschattung_Sonne dummy
attr Beschattung_Sonne fp_Terrasse 280,280,2,Baschattung bei Sonne
attr Beschattung_Sonne room Terasse
attr Beschattung_Sonne setList state:aktiv,passiv
attr Beschattung_Sonne webCmd state

define Beschattung_Terasse_Sonne notify YahooWetter {Wetterregelung_Sonne("TR_Markise")}
attr Beschattung_Terasse_Sonne room Terasse

#  hier Wind  

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

define Windschutz notify YahooWetter {Wetterregelung_Wind("TR_Markise")}
attr Windschutz room Terasse


Oder brauchen wir noch mehr von der fhem.cfg
MfG Ole

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

ole30419

Ist das im Notepad++ gemacht? Denn gibt es leider nicht für Mac. Werde Win7 starten, gute Idee.
MfG Ole

MisterEltako

Ausgehend von der Fehlermeldung müsste deine Datei 99_testUtils.pm sein und folgenden Inhalt haben (1; am Schluß nicht vergessen):

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

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

sub
Wetterregelung_Sonne($){

    my $Aktorname = @_;
    if (Value("Beschattung_Sonne") eq "aktiv"){

        my $Temp= ReadingsVal("YahooWetter","temp_c","999");
        my $Sonne= ReadingsVal("YahooWetter","condition","kein Wert");
        my $now = time();
        my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime($now);

        if (($Temp >= 5) && ($Sonne =~ m/sonnig/) && (Value("$Aktorname")!=1) && ($hour >= 10)){
           fhem("set $Aktorname 1");
           Log 1, "Beschattungsposition wird angefahren.";
        }  elsif (($Temp<=2) && (Value("$Aktorname")==1)){
           fhem ("set $Aktorname 100");
           Log 1,"Markiese wird geöffnet Beschattung nicht mehr nötig.";
        }  elsif (($Temp==999) || ($Sonne eq "kein Wert")) {
           Log 1, "Yahoo-Wetter nicht erreichbar oder kein Wert geliefert, $Temp, $Sonne,";
        }
    }
}

sub
Wetterregelung_Wind($){

    my $Aktorname = @_;
    if (Value("Beschattung_Wind") eq "aktiv"){

       my $maxWind = 30;
       my $Wind = ReadingsVal("YahooWetter","wind","noInfo");

       if ($Wind > $maxWind){
           fhem("set $Aktorname 100");
           Log 1,"Windschutz: Wind ist $Wind, Markise wird eingefahren.";
        }  elsif (($Wind < ($maxWind)-5) && (Value("$Aktorname")==1)){
           Log 1, "Yahoo-Wetter nicht erreichbar oder kein Wert geliefert, $Wind,";
        }
    }
}
1;


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

ole30419

So habe mal mit Notepad++ die Zeile 1595 in der /fhem.pl angeschaut. Ich kann damit natürlich nicht anfangen.
Habe mal ein Bild angehangen den ein Screenshot im Win7 mit Mac Tastatur war auf der schnellen nicht möglich.

(siehe Anhang / see attachement)

@ MisterEltako das mir dem 1; habe ich in der 99_testUtils.pm drin siehe oben in "Nun mal die ganze 99_testUtils.pm"

Grüße Ole
MfG Ole

MisterEltako

Hi!

Also in FHEM.pl zu schauen bringt dich nicht weiter. Irgedwas stimmt meiner Meinung nach mit deiner 99_testUtils.pm nicht.

1. lösche deine angelegte 99_testUtils.pm im FHEMWEB
2. öffne 99_Utils.pm
3. lösche den gesamten Inhalt dieser Datei
4. kopiere den von mir o.g. Code stattdessen in diese Datei
5. abspeichern mit "speichern unter" als 99_testUtils.pm

Dann wieder testen ob es jetzt geht....

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

ole30419

Jup, Super !!!!!

Das habe ich so gemacht und ich bekomme auch keine Fehler Meldung mehr. Aber leider geht auch die Beschattung nun nicht mehr.

Wie kann man den die Übergabe von den, im FHEM bezeichneten ("TR_Markise") Aktor, zu dem in der ausgelagerten 99_testUtils.pm
("$Aktorname") Testen?

Und gleich noch eine Frage zu dem Windschutz. Ich möchte das der Windschutz auch die Markise einfährt egal in welche lage sich die Makise sich geraden befindet, außer Sie komplett eingefahren, aber das versteht sich ja von selbst.
MfG Ole

Dietmar63

Das kann nur noch an der Definition der notify liegen.

Baue in die beiden Funktionen am Anfang Logs ein, damit du erkennst wenn sie aufgerufen werden.

Dann musst du die notify untersuchen ob sie richtig formuliert sind.

Durch Eingabe von {funktion(.... ) } in fhem kannst du ohne notify testen
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

sub Wetterregelung_Sonne($){
my $Aktorname = @_;
if (Value("Beschattung_Sonne") eq "aktiv"){
 my $Temp= ReadingsVal("YahooWetter","temp_c","999");
 my $Sonne= ReadingsVal("YahooWetter","condition","kein Wert");
 my $now = time(); my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime($now);
 my $device=Value($Aktorname);
Log 1, "Aktor:$Aktorname,Temp:$Temp,Sonne:$Sonne,Stunde:$hour,Devicewert:$device";
}

....zum Testen, sonst ist es echt das "notify". Bitte dann posten.

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

ole30419

Hallo,

so haben den Fehler glaube gefunden, natürlich mit Euer Hilfe. Im Log wurde für den Aktornahme immer nur die 1 geschrieben.
ZitatAktor:1,Temp:4,Sonne:Dunst,Stunde:11,Devicewert:

Nun habe ich den Aktorname überall mal in Klammern gesetzt.
 my ($Aktorname) = @_;

Und nun wird im Log der Aktornahme richtig gesetzt.
ZitatAktor:(TR_Markise),Temp:4,Sonne:Dunst,Stunde:12,Devicewert:auf
MfG Ole

ole30419

So muss mich noch mal Korrigieren, es muss nicht alles in Klammern sondern nur am Anfang bei der Übergabe.

 my ($Aktorname) = @_;

Habe nun mal noch ein wenig mit der "wann muss was erfüllt sein" gespielt, bekomme es aber nicht hin so wie ich es möchte.
Ich möchte das die Makise nur in die Beschattung geht wenn sie zuvor nicht "von Hand" schon betätigt wurde. Also habe ich noch ein Bedingung dazugegeben.

if (($Temp >= 5) && ($Sonne =~ m/Dunst/) && (Value("$Aktorname")!= 1) && (Value("$Aktorname")== 100)  && ($hour >= 10)){

Aber nun wird gar nicht mehr automatisch Beschattet. Ich hoffe ich habe mich Richtig ausgedrückt.
Es soll nur automatisch Beschattet werden wenn keine zu vor manuell den Schalter betätigt hat.
MfG Ole

ole30419

So nun habe ich mal die "==100" durch "==auf" ersetzt und es funktioniert so wie ich es mir vorgestellt habe.

if (($Temp >= 5) && ($Sonne =~ m/Dunst/) && (Value("$Aktorname")!= 1) && (Value("$Aktorname")== auf)  && ($hour >= 10)){

Nur bekomme ich nun immer eine Fehlermeldung beim absichern der 99_testUtils.pm
Bareword "auf" not allowed while "strict subs" in use at /usr/local/FHEM/share/fhem/FHEM/99_testUtils.pm line 22.

Ich könnte damit leben aber FHEM?

Gruß Ole
MfG Ole

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

MisterEltako

Hi!

Ich denke der Vergleich ist bei dir falsch. " == " verwendet man für Zahlen, dagegen " eq " für Strings:

if (($Temp >= 5) && ($Sonne =~ m/Dunst/) && (Value("$Aktorname")!= 1) && (Value("$Aktorname") eq "auf") && ($hour >= 10)){....

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

ole30419

Hallo,
so habe noch mal überlegt was die Markise macht wenn es erst die Sonne scheint und dann ein Regenschauer gibt.

Hier würde die Markise nichts machen und Sie wird nass oder?if (($Temp >= 5) && ($Sonne =~ m/sonnig/) && (Value("$Aktorname")!=1) && ($hour >= 10)){
           fhem("set $Aktorname 1");
           Log 1, "Beschattungsposition wird angefahren.";
        }  elsif (($Temp<=2) && (Value("$Aktorname")==1)){
           fhem ("set $Aktorname 100");


Währ es so nicht besser?if (($Temp >= 5) && ($Sonne =~ m/sonnig/) && (Value("$Aktorname")!= 1) && (Value("$Aktorname") eq "auf")  && ($hour >= 10)){
           fhem("set $Aktorname 1");
           Log 1, "Beschattungsposition wird angefahren.";
        }  elsif (($Sonne != m/sonnig/) && (Value("$Aktorname")==1) || (sunset(-1200,"20:00","22:00"))){
           fhem ("set $Aktorname 100");

was meint Ihr, kann es bei dem Wetter auch schlecht testen.

Gruß Ole
MfG Ole