Och eigentlich ganz einfach;-)
// Halb wenn warm
elseif (($ausfuehr==TRUE) AND($zeit>$schattentages) AND ($zeit<$schattennachts) AND (($sonnenwarm >= $temp_diff_soll_warm) OR (($innen >= $innen_warm) AND ($aussen >= $aussen_warm))))
{
$schaltzeit = $zeit;
$aktion=$automatisch_halb;
$machen=1;
$sperre=45;
$warum = "(3) Halb zu wegen Sonnenwärme";
}
Auf deutsch:
Wenn ich die Automatik haben will und es zwischen drei Stunden nach Sonnenaufgang und drei Stunden vor Sonnenutergang ist, und entweder die „Sonnenwärme“ über einem Grenzwert ist, oder es draussen und drinnen einen Temperaturwert übersteigt, sollen zwei Rollläden $machen=1 in eine Postion automatisch halb fahren, das Skript erst wieder nach einer (längeren) Zeit (als sonst) erneut starten… und das $warum sagt mir im Webfront, was die Aktion ausgelöst hat…
Das ganze Skript hänge ich mal dran, das steuert dann noch so einiges abhängig vom IST-Zustand oder wenn noch wärmer dann alle zu, oder wenn Nacht und kalt oder Tag und kalt oder Terassentür auf oder ein Rollladen wenn nicht zu dann aber nur auf 40%…
Sonst gehen die Rollläden dauernd rauf und runter, oder ich gehe zur Terassentür raus und der Rollladen macht hinter mir zu (sehr nett;-)…
Gruß
Olaf
<?
//2011-04-04
//Rollladenskript 2011
//
// automatische Anfahrpositionen
//
$offen=1;
$automatisch_halb=0.59;
$automatisch_schatten=0.25;
$automatisch_zu=0;
//
//
// Temperaturpunke
//
$aussen_sehr_kalt=0; // dann bleibt der Rollladen zu
$aussen_kalt=5; // für bei Sonnenuntergang bei kalt zu
$aussen_nacht=10; // für zu wenn Nacht und kühl
$aussen_warm=22;
$innen_warm=22;
$aussen_sehr_warm=27;
$innen_sehr_warm=24;
//
//
//ab hier ist nichts einzustellen..............................................
//
// IST-Temperaturen
$aussen1=GetValue(13698 /*[05.2 Klima\01 HMa Aussentemperatur\TEMPERATURE]*/);
$aussen2=GetValue(56257 /*[05.2 Klima\02 KS300.Wetterstation.FHZ1300\00 Temperatur]*/);
$aussen3=GetValue(42909 /*[05.2 Klima\03 HMa Glastemperatur\TEMPERATURE]*/);
$aussen=($aussen1+$aussen2+$aussen3)/3;
$innen1=GetValue(48912 /*[01 Heizung.Neubau\011 FHT80b Wohnzimmer\Temperatur]*/);
$innen2=GetValue(34464 /*[01 Heizung.Neubau\012 FHT80b Arbeitszimmer\Temperatur]*/);
$innen=($innen1+$innen2)/2;
$sonnenwarm=GetValue(42344 /*[05.2 Klima\Sonnenwärme (HMa Diff.)]*/);
//
//
//Rollladen Modus (TRUE = Automatisch, FALSE = Manuell
$ausfuehr = GetValue(24177 /*[HomeMatic Socket\Homematic Systemvariable auslesen\Modus Rollladen]*/);
//
//
//Zeit
$zeit = date("H:i");
$daylight = getvalue(45081 /*[10 Zeit\DAYLIGHT]*/);
$winter = getvalue(26922 /*[10 Zeit\Zeit Jahr Winter]*/);
$uebergang = getvalue(30873 /*[10 Zeit\Zeit Jahr Übergang]*/);
//
$sperre=15; // Wiederholzeit des Skript Vorgabe
//
$sonnenuntergang1 = getvalue(57449 /*[10 Zeit\11 SUNSET]*/);
$sonnenuntergang = explode(":",$sonnenuntergang1);
$nachts = date("H:i",mktime($sonnenuntergang[0]+3,$sonnenuntergang[1]));
$schattennachts=date("H:i",mktime($sonnenuntergang[0]-3,$sonnenuntergang[1]));
//
//
$sonnenaufgang1 = getvalue(36735 /*[10 Zeit\10 SUNRISE]*/);
$sonnenaufgang = explode(":",$sonnenaufgang1);
$tages = date("H:i",mktime($sonnenaufgang[0],$sonnenaufgang[1]-30));
$schattentages = date("H:i",mktime($sonnenaufgang[0]+3,$sonnenaufgang[1]));
//
//
//Sonstiges
$terassentuer= getvalue(41359 /*[02 Heizung.Altbau\021 FHT80b Küche\Window Open]*/);
//
//Sonnenwärme
if (($winter == true) or ($uebergang == true))
{
$temp_diff_soll_warm=10; // Differenz für Rollladen halb
$temp_diff_soll_sehr_warm=20; // Differenz für Rollladen Schatten
}
else
{
$temp_diff_soll_warm=5; // Differenz für Rollladen halb
$temp_diff_soll_sehr_warm=10; // Differenz für Rollladen Schatten
}
//
//
//Standardaktion
$aktion=$offen;
$machen=0;
//
//
// Hier gehen die Abfragen los............................................................................
//
if ($ausfuehr==FALSE)
{
$warum = "(1) manuell";
$machen=0;
}
//
// Halb wenn warm
elseif (($ausfuehr==TRUE) AND($zeit>$schattentages) AND ($zeit<$schattennachts) AND (($sonnenwarm >= $temp_diff_soll_warm) OR (($innen >= $innen_warm) AND ($aussen >= $aussen_warm))))
{
$schaltzeit = $zeit;
$aktion=$automatisch_halb;
$machen=1;
$sperre=45;
$warum = "(3) Halb zu wegen Sonnenwärme";
}
//
// Schatten wenn sehr warm
elseif (($ausfuehr==TRUE) AND ($zeit>$schattentages) AND ($zeit<$schattennachts) AND (($sonnenwarm >= $temp_diff_soll_sehr_warm) OR (($innen >= $innen_sehr_warm) AND ($aussen >= $aussen_sehr_warm))))
{
$aktion=$automatisch_schatten;
$machen=2;
$sperre=45;
$warum = "(2) Schatten wenn sehr warm";
}
//
//bei Nacht und Kalt zu
elseif (($ausfuehr==TRUE) AND ($aussen<=$aussen_kalt) AND ($daylight == FALSE))
{
$aktion=$automatisch_zu;
$machen=3;
$sperre=30;
$warum = "(4) bei Nacht und Kalt zu";
}
//
//bei Nacht und kühl zu
elseif (($ausfuehr==TRUE) AND ($aussen<=$aussen_nacht) AND (($zeit>$nachts) or ($zeit<$tages)) )//and (($winter == true) or ($uebergang == true))
{
$aktion=$automatisch_zu;
$machen=3;
$sperre=30;
$warum = "(5) bei Nacht und kühl zu";
}
//
//wenn sehr kalt dann zu
elseif (($ausfuehr==TRUE) AND ($aussen<=$aussen_sehr_kalt))
{
$aktion=$automatisch_zu;
$machen=3;
$sperre=30;
$warum = "(6) sehr kalt dann zu";
}
//
//nach Sonnenaufgang und Kalt dann offen
elseif (($ausfuehr==TRUE) AND ($aussen<=$aussen_kalt) AND ($daylight == TRUE))
{
$aktion=$offen;
$machen=2;
$sperre=30;
$warum = "(7) kalt, nach Sonnenaufgang offen";
}
//
//Tag dann offen
elseif (($ausfuehr==TRUE) AND ($zeit>$tages) AND ($zeit<$nachts)) //AND ($aussen<=$aussen_nacht)
{
$aktion=$offen;
$machen=2;
$warum = "(8) offen";
}
//
//öffnen, weil ist nichts
elseif (($ausfuehr==TRUE))
{
$aktion=$offen;
$machen=2;
$warum = "(9) öffnen, weil ist nichts";
}
//
//
$was=$aktion * 100;
//
Setvalue(15869 /*[04 Rollladen\01 Rollladen warum]*/,$warum);
//
ECHO $zeit," Uhr, Was: ",$was,"%. Warum: ",$warum,". Machen: ",$machen;
//
//
//AUSFUEHREN
//
$levelwork=Getvalue(33085 /*[04 Rollladen\01 Rollladen.WoZi.Ost\LEVEL]*/);$tun=$aktion;
if (($levelwork <> $tun) AND ($machen>=2)){HM_WriteValueFloat(45977 /*[04 Rollladen\01 Rollladen.WoZi.Ost]*/, "LEVEL", $tun);}
//
$levelwork=Getvalue(31630 /*[04 Rollladen\02 Rolladen.WoZi.Sued\LEVEL]*/);$tun=$aktion;
if (($levelwork <> $tun) AND ($machen>=2)){HM_WriteValueFloat(25937 /*[04 Rollladen\02 Rolladen.WoZi.Sued]*/, "LEVEL", $tun);}
//
$levelwork=Getvalue(29406 /*[04 Rollladen\03 Rollladen.WoZi.Suedwest\LEVEL]*/);$tun=$aktion;
if (($levelwork <> $tun) AND ($machen>=2)){HM_WriteValueFloat(35577 /*[04 Rollladen\03 Rollladen.WoZi.Suedwest]*/, "LEVEL", $tun);}
//
$levelwork=Getvalue(35313 /*[04 Rollladen\04 Rollladen.WoZi.West\LEVEL]*/);$tun=$aktion;
if (($levelwork <> $tun) AND ($machen>=2)){HM_WriteValueFloat(59229 /*[04 Rollladen\04 Rollladen.WoZi.West]*/, "LEVEL", $tun);}
//
$levelwork=Getvalue(13994 /*[04 Rollladen\11 Rollladen.ArZi.Ost\LEVEL]*/);$tun=$aktion;
if (($levelwork <> $tun) AND ($machen>=1)) {HM_WriteValueFloat(18002 /*[04 Rollladen\11 Rollladen.ArZi.Ost]*/, "LEVEL", $tun);}
//
$levelwork=Getvalue(13913 /*[04 Rollladen\12 Rollladen.ArZi.Sued\LEVEL]*/);$tun=$aktion;
if (($levelwork <> $tun) AND ($machen>=1)){HM_WriteValueFloat(16906 /*[04 Rollladen\12 Rollladen.ArZi.Sued]*/, "LEVEL", $tun);}
//
$levelwork=Getvalue(41670 /*[04 Rollladen\13 Rollladen.ArZi.Suedwest\LEVEL]*/);$tun=$aktion;
if (($levelwork <> $tun) AND ($machen>=2)){HM_WriteValueFloat(36007 /*[04 Rollladen\13 Rollladen.ArZi.Suedwest]*/, "LEVEL", $tun);}
//
$levelwork=Getvalue(19257 /*[04 Rollladen\14 Rollladen.ArZi.West\LEVEL]*/);$tun=$aktion;$tunawest=$aktion;
if ($aktion > 0.4) {$tunawest=0.4;}
if (($levelwork <> $tunawest) AND ($machen>=2)){HM_WriteValueFloat(54054 /*[04 Rollladen\14 Rollladen.ArZi.West]*/, "LEVEL", $tunawest);}
//
$levelwork=Getvalue(53910 /*[04 Rollladen\21 Rollladen.EssZi.Terasse\LEVEL]*/);$tun=$aktion;
if (($levelwork <> $tun) AND ($terassentuer == FALSE) AND ($machen>=2)){HM_WriteValueFloat(52559 /*[04 Rollladen\21 Rollladen.EssZi.Terasse]*/, "LEVEL", $tun);ECHO " Esszimmer " ;} //AND ($daylight == FALSE)
//
IPS_SetEventCyclic(26085 /*[04 Rollladen\00 Rolladen Skript +++++++++\]*/, 0, 0, 0, 2, 2 ,$sperre);// Wiederholzeit des Skript einstellen
?>