Rolladen in bestimmten Monaten ab bestimmter Temperatur herunterfahren

Begonnen von docb, 19 Juni 2013, 16:58:07

Vorheriges Thema - Nächstes Thema

docb

Hallo fhem-Freunde,
ich bastel gerade an einer neuen Funktion: ich möchte, dass im Sommer jeden Tag geprüft wird, ob eine Höchsttemperatur von 25°C erreicht wird und wenn ja, soll ein Rolladen heruntergefahren werden. Bislang habe ich folgenden Ansatz mit zwei Fragen:

Eine Automatisierungsfunktion startet die Prüfung jeden Tag um 08:00 Uhr:

define at_Hitzebeschattung at 08:00:00 { Hitzebeschattung() }

In der 99_myUtils habe ich bislang folgendes:

sub Hitzebeschattung() {
  if($month ge "5" && $month le "9") {
   fhem ("set WZ_Jal_Links 60%");
  }
 }

Jetzt meine Fragen:
1. Sagt mir fhem, dass in der 99_myUtils ein Fehler mit $month besteht - wie kann ich das beheben?

Global symbol "$month" requires explicit package name at ./FHEM/99_myUtils.pm line 81


2. Habe ich folgendes Wettermodul eingebunden:

#Wetter
define Wetter Weather 12837071 900 de
attr Wetter event-on-update-reading temperature,humidity,wind,wind_condition
attr Wetter room Wetter

define FL_Wetter FileLog ./log/wetter-%Y-%m.log Wetter
attr FL_Wetter logtype temp4hum4:wind|wind_condition|humidity|temperature,text
define PL_Wetter weblink fileplot FL_Wetter:temp4hum4:CURRENT
attr PL_Wetter label "Yahoo Wetterdaten in München Min $data{min1}, Max $data{max1},Last $data{currval1} °C"
attr PL_Wetter room Wetter

attr FL_Wetter logtype text
attr FL_Wetter room Z_Logfiles
attr Wetter localicons 1

define Wetter_Icons weblink htmlCode {WeatherAsHtml("Wetter")}
attr Wetter_Icons room Wetter

Das Ergebnis schaut u.a. so aus:

(siehe Anhang / see attachement)


Wie kann ich da denn die vorhergesagte Höchsttemperatur für den Tag raus, damit ich noch eine entsprechende if-Abfrage in die 99_myUtils reinschreiben kann?

Viele Grüße
Doc
I love FHEM!

Dietmar63

Die Zeitinformation ist im Modul nicht verfügbar. Du musst sie mit time() und localtime() holen und Aufbereiten.

Viele Beispiele hier im Forum

Die Readings eines Geräts bekommst du mit der ReadingsVal()
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Puschel74

Hallo,

sicher auch etwas kompliziert aber ich verlasse mich nicht auf die Wetter-(Temperatur)-Vorhersage sondern habe einen S300TH auf der Terrasse.
Hier der Code:

Eingang_aussen:temperature.* {
  my $temp_aussen = ReadingsVal("Eingang_aussen", "temperature", 99);
  my $now=sprintf("%%02d:%%02d",$hour,$min);
  my $light = ReadingsVal("myTwilight", "light", 99);
  my $rollo_status = Value("OG_Zimmer_Rollo");
  my $SommerWinter_Status = Value("SommerWinter");
  my $Migraene_Status = Value("Migraene_Check");
  my $Zimmer_Temp = ReadingsVal("OG_Zimmer_Heizung","measured-temp",99);
  if ($Migraene_Status eq "Nein") {
    if ($SommerWinter_Status eq "Sommer") {
      if (($now gt "08:05") && ($now lt "20:00")) {
        if ($temp_aussen > 25 && $rollo_status eq "Auf") {
          fhem("set OG_Zimmer_Rollo on-for-timer 3");
     fhem("setstate OG_Zimmer_Rollo Ab25");
        }
if ($temp_aussen < 25 && $rollo_status eq "Ab25") {
          fhem("set OG_Zimmer_Rollo off-for-timer 3");
     fhem("setstate OG_Zimmer_Rollo Auf");
        }
   if ($temp_aussen > 27 && $rollo_status eq "Ab25") {
     fhem("set OG_Zimmer_Rollo on-for-timer 2");
          fhem("setstate OG_Zimmer_Rollo Ab50");
   }
   if ($temp_aussen < 27 && $rollo_status eq "Ab50") {
     fhem("set OG_Zimmer_Rollo off-for-timer 3");
          fhem("setstate OG_Zimmer_Rollo Ab25");
   }
if ($temp_aussen > 29 && $rollo_status eq "Ab50") {
     fhem("set OG_Zimmer_Rollo on-for-timer 3");
     fhem("setstate OG_Zimmer_Rollo Ab75");
   }
if ($temp_aussen < 29 && $rollo_status eq "Ab75") {
     fhem("set OG_Zimmer_Rollo off-for-timer 3");
     fhem("setstate OG_Zimmer_Rollo Ab50");
   }
   if ($temp_aussen > 31 && $rollo_status eq "Ab75") {
     fhem("set OG_Zimmer_Rollo on-for-timer 2");
     fhem("setstate OG_Zimmer_Rollo Ab");
   }
if ($temp_aussen < 31 && $rollo_status eq "Ab") {
     fhem("set OG_Zimmer_Rollo off-for-timer 2");
     fhem("setstate OG_Zimmer_Rollo Ab75");
   }
   if (($temp_aussen < $Zimmer_Temp) && ($rollo_status ne "Auf")) {
     fhem("set OG_Zimmer_Rollo off");
   }
      }
      if (($now gt "20:30") && ($now lt "21:45")) {
        if (($temp_aussen < $Zimmer_Temp) && ($rollo_status eq "Ab") && ($temp_aussen > 10)) {
          fhem("set OG_Zimmer_Rollo off-for-timer 9");
          fhem("setstate OG_Zimmer_Rollo Ab50");
        }
      }
    }
  }
}


Die Rollo wird in Etappen je nach Aussentemperatur herunter- und auch wieder hinaufgefahren.
Der Status wird aktualisiert damit die Icons passen.
Zeitbegrenzung habe ich
a) von 08:05 Uhr bis 20:00 Uhr weil
um 8 Uhr die Rollo per sunrise hoch fährt um um 20:05 per sunset runter.
Dazwischen soll die Rollo unten bleiben und
b) von 20:30 bis 21:45 Uhr -
sollte sich in dieser Zeit die Aussentemperatur unter die Raumtemperatur senken fährt die Rollo in "Lüftungsposition".
d.h. spätestens ab 21:45 Uhr bleibt die Rollo so stehen wie sie ist.
Zum Wohle der Nachbarn (und auch unserer Ruhe) soll dazwischen die Rollo keinen Mucks machen.

Dieser Code läuft aber nur wenn unser SommerWinter-Dummy auf Sommer steht.
Die letzte Prüfung auf > 10 ° Aussentemperatur kann daher wieder raus.

Grüße

Edith: Das ist nur der erste, bei mir funktionierende, Code.
Änderungen (Twilight kann auch wieder raus) muss ich noch vornehmen.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

docb

Mensch klasse, vielen Dank!
@Dietmar: das mit $monat habe ich aus der wiki und ich dachte da bei mir $hour funktioniert, sollte das auch klappen. Danke für den Tipp, werde hier nach der Lösung mit localtime suchen!
@Puschel: super, hab mir noch den ReadingsVal in der wiki angeschaut und jetzt verstehe ich das... werde wenn es klappt noch mein Endwerk posten, falls jemand auch so etwas braucht. Das wird dann etwas kürzer ausfallen wie deins ;-)
Beste Grüße
Doc
I love FHEM!

docb

Hallo nochmal, jetzt habe ich doch noch eine Frage:
Ich habe mein Skript jetzt mal soweit fertig:

sub Hitzebeschattung() {
  my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
  if($month ge "5" && $month le "9") {
   if(ReadingsVal("Wetter", "fc1_high_c", 99) ge "25") {
    fhem ("set WZ_Jal_Links 60%");
   }
  }
 }

Beim speichern gibts keine Fehler, sollte soweit also passen. Gibt es jetzt noch eine Möglichkeit, dass ich sehen kann, ob das funktioniert bzw. wie fhem das abarbeitet?

Ich habs mit einem trigger versucht und offenem Eventmonitor, aber da zeigt es nur 2013-06-19 19:11:19 at at_Hitzebeschattung an. Im Logfile finde ich gleich gar nichts dazu.
Viele Grüße
doc
I love FHEM!

Puschel74

Hallo,

bau dir doch in deinen Code einen Logeintrag ein.
Log 3,("Beschattung wird geprüft");
Dann siehst du was passiert.
Oder du schreibst dir das ReadingsVal von Wetter in eine Variable und lässt die auch noch ausgeben.
Dann siehst du ob du den richtigen Wert ausliest.

Wir rufst du die Sub den auf?
Sollte das über das anfangs gepostete at passieren kannst du da mit trigger mWn auch nichts anstossen sondern musst warten bis die Uhrzeit erreicht ist.
Also evtl. mal das at auf jetzt+1 Minute stellen oder auf ein notify umbauen zum triggern.

Grüße

Edith: Falsch - du kannst auch das at triggern - musst du mal schauen, Rudi und andere haben schonmal gepostet wie das geht.
Ist mir aber zu kompliziert zum merken - ich stell lieber die Zeit auf gleich und schau was passiert
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

docb

@Puschel, Log habe ich eingebaut, kanns aber erst morgen testen, Familie ruft ;-)
@Andre: übersteigt mein momentanes fhem-verständnis. Kann ich so das at triggern? Einfach abtippen und das in <> mit meinem at ersetzen?
Viele Grüße an alle!
Dankeschön
doc
I love FHEM!

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

docb

Guten Morgen,
das ganze funktioniert soweit - über Telnet lese ich aber einen Fehler aus:
Argument "31%" isn't numeric in numeric gt (>) at ./FHEM/10_CUL_HM.pm line 2129.
Das kommt von meinem Aufruf aus der 99_myUtils.pm:   fhem ("set WZ_Jal_Links 31%");

Was mache ich denn da falsch?
Viele Grüße
Doc
I love FHEM!

docb

Habs selbst rausgefunden....
einfach % weglassen und es funktioniert ;-)
Viele Grüße
doc
I love FHEM!

docb

So, bin fertig - falls das Skript jemand brauchen kann:

sub Hitzebeschattung() {
  my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
  if(($month ge "5" && $month le "9") && (ReadingsVal("Wetter", "fc1_high_c", 99) ge "25")){
   #if(ReadingsVal("Wetter", "fc1_high_c", 99) ge "25") {
    fhem ("set WZ_Jal_Links 31");
fhem ("set KZ_Jal 10");
fhem ("set Beschattung on");
my $text = "Rolläden wurden wegen gemeldeter Höchsttemperatur von ".ReadingsVal("Wetter", "fc1_high_c", 99)."°C heruntergefahren!";
NotifyMyAndroid('0','FHEM','Hitzebeschattung',$text);
  # }
  } else {
  fhem ("set Beschattung off");
  }
  Log 3,("Beschattung wird geprüft - Tageshöchsttemperatur: ".ReadingsVal("Wetter", "fc1_high_c", 99));
 }


Das device "Beschattung" ist ein dummy, der mir nur anzeigt, ob die Beschattung geschaltet wurde...
Viele Grüße
doc
I love FHEM!

locodriver

Auch wenn das Thema schon "durch" ist, ich habe so etwas ähnliches am Laufen:
Link

Schönes WE

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

docb

Hallo und danke - dein Skript finde ich echt elegant - werde mir da noch schön ein paar Anregungen (v.a. Fehlerabfragen) raus"klauen" ;-)
Viele Grüße
doc
I love FHEM!

docb

Ach und weil ich deine Konfiguration gerade lese - was treiben denn deine Somfy Motoren an? Eine Markise zufällig?
Viele Grüße
doc
I love FHEM!