Hilfe bei Jalousiesteuerung

Hallo,
ich bin mit meinen dürftigen PHP Kenntnissen am Ende, aber hier gibts bestimmt einige für die meine Aufgabenstellung „easy“ ist.

Ich möchte Rollos automatisch bei bestimmten Bedingungen fahren, diese sind:

hoch:
Montag - Freitag: Morgens um 8:15 hoch
Samstag - Sonntag Morgens um 09:00 hoch

runter:
Sonntag - Donnerstag um 19:45 runter
Freitag und Samstag um 20:45 runter

Und alle Schaltvorgänge nur, falls eine bestimmte Variable (auto_on) auf true steht, diese Variable wird im Dashboard auf true/false getoggelt.

Ich muss also 3 Dinge auswerten:

  1. auto_on == true?
  2. Uhrzeit
    3 Wochentag

Ich bin auf folgendes Skript (noch mit ein paar „echos“ zur Kontrolle gekommen, welches ich jede Minute ausführen lasse.


<?
$auto_on = getvalue (23060 /*[Rollos\Rollo_Automatik_an]*/);
$tag = getvaluestring (28945 /*[Allgemeines\Sunset-Sunrise\WEEKDAY]*/);
$uhrzeit = getvaluestring (40793 /*[Allgemeines\Sunset-Sunrise\TIME]*/);
echo $tag;
echo $uhrzeit;

Switch ($uhrzeit){

//Rollos im UG an Abenden vor Wochentagen um 19:45 runter
case "19:45":
if ($tag == "Sonntag" or $tag == "Montag" or $tag == "Dienstag" or $tag == "Mittwoch" or $tag == "Donnerstag" and $auto_on == true){
    IPS_RunScript (14933 /*[Rollos\Kind UG\Rollo_Kind_UG_Schlitz]*/);
    IPS_RunScript (16834 /*[Rollos\Bad UG\Rollo_Bad_UG_runter]*/);
    IPS_RunScript (56845 /*[Rollos\Gaeste UG\Rollo_Gaeste_UG_runter]*/);
    echo ("Rollos automatisch im Wochentagsprogramm herunter gefahren");
}
break;

//Rollos im UG an Abenden vor Wochenenden um 20:45 runter
case "20:45":
if ($tag == "Freitag" or $tag == "Samstag" and $auto_on == true){
    IPS_RunScript (14933 /*[Rollos\Kind UG\Rollo_Kind_UG_Schlitz]*/);
    IPS_RunScript (16834 /*[Rollos\Bad UG\Rollo_Bad_UG_runter]*/);
    IPS_RunScript (56845 /*[Rollos\Gaeste UG\Rollo_Gaeste_UG_runter]*/);
    echo ("Rollos automatisch im Wochenendprogramm herunter gefahren");
}
break;

//Rollos im UG am Wochende um 09:00 hoch
case "09:00":
if ($tag == "Freitag" or $tag == "Samstag" and $auto_on == true){
    IPS_RunScript (47608 /*[Rollos\Kind UG\Rollo_Kind_UG_rauf]*/);
    IPS_RunScript (44531 /*[Rollos\Gaeste UG\Rollo_Gaeste_UG_rauf]*/);
    IPS_RunScript (12002 /*[Rollos\Bad UG\Rollo_Bad_UG_rauf]*/);
    echo ("Rollos automatisch im Wochenendprogramm hoch gefahren");
}
break;

//Rollos im UG an Morgen an Wochentagen um 08:15 hoch
case "08:15":
if ($tag == "Montag" or $tag == "Dienstag" or $tag == "Mittwoch" or $tag == "Donnerstag" or $tag == "Freitag" and $auto_on == true){
    IPS_RunScript (47608 /*[Rollos\Kind UG\Rollo_Kind_UG_rauf]*/);
    IPS_RunScript (44531 /*[Rollos\Gaeste UG\Rollo_Gaeste_UG_rauf]*/);
    IPS_RunScript (12002 /*[Rollos\Bad UG\Rollo_Bad_UG_rauf]*/);
    echo ("Rollos automatisch im Wochentagsprogramm hoch gefahren");
}
break;
}
?>

Ich bin mir sicher das ist weit weg von einer idealen Lösung, ich habe aber sowieso das Problem, dass irgendwie die logischen Verknüpfungen nicht funktionieren.

Es wäre nett, wenn mir jemand helfen könnte, wie man diese Aufgabenstellung lösen würde, es reicht ja für einen (logischen) Block (z.B. Freitag und Samstag um 20:45 runter) auf die anderen Blöcke könnte ich es dann wohl „extrapolieren“

Jeder Hinweis ist willkommen :slight_smile:

Versuch mal:

if (($tag == "Freitag" or $tag == "Samstag") and $auto_on == true){

Beispiel an: //Rollos im UG an Abenden vor Wochenenden um 20:45 runter

Zu dem Problem mit den Tagen.
Wenn du eine array mit allen Wochentagen an denen der Rolladen um 20:45 runtergefahren werden soll in eine Array packst:

$down_at_2045=array("Freitag", "Samstag");

und dann mit einer in_array Abfrage prüfst ob der aktuelle Wochentag in der Array vorkommt:

if(in_array($tag, $down_at_2045)){

würde dann der entsprechende Case dafür so aussehen:

//Rollos im UG an Abenden vor Wochenenden um 20:45 runter
case "20:45":
if (in_array($tag, $down_at_2045) and $auto_on == true){
    IPS_RunScript (14933 /*[Rollos\Kind UG\Rollo_Kind_UG_Schlitz]*/);
    IPS_RunScript (16834 /*[Rollos\Bad UG\Rollo_Bad_UG_runter]*/);
    IPS_RunScript (56845 /*[Rollos\Gaeste UG\Rollo_Gaeste_UG_runter]*/);
    echo ("Rollos automatisch im Wochenendprogramm herunter gefahren");
}
break;

Gruß
Tobias

PS: Kann es nicht testen, denke aber es geht. Bei Interesse könnte ich auch das ganze Script neu schreiben. Hierfür wäre wichtig zu wissen womit du deine Rolladen fährst, sprich den Inhalt von Script 56845 und 12002

Hallo Tobias, danke für die Hilfe. Die Skripte die ich aufrufe fahren nur einen Aktor:

<?
ZW_DimSet(49345 /[Rollos\Kind UG\Z-Wave Rollo Kind UG (NodeID 004)]/,13);
?>

Ich komme erst morgen zum Testen, da meine Tochte jetzt schläft und ich nicht Rollos hoch/runter probieren kann :slight_smile:

Für einen Rolladen extra ein Script anzulegen halte ich nicht für sinnvoll.
Soll ich ein Script schreiben?
Dafür brauche ich ein Befehl für auf und einen für zu.
Sinnvoll wäre auch zu wissen welches System du nutzt und was die Zahlen (bei dir 13) bedeuten.

Warum erstellst du nicht einfach ein/mehrere Ereignis(se) für das jeweilige Skript an?

Dann musst du
a) nicht alle Minute ein Skript starten
b) weniger programmieren

Bleibt im Skript nur noch


if(GetValue(23060 /*[Rollos\Rollo_Automatik_an]*/))
{
    IPS_RunScript (47608 /*[Rollos\Kind UG\Rollo_Kind_UG_rauf]*/);
    IPS_RunScript (44531 /*[Rollos\Gaeste UG\Rollo_Gaeste_UG_rauf]*/);
    IPS_RunScript (12002 /*[Rollos\Bad UG\Rollo_Bad_UG_rauf]*/);
    echo ("Rollos automatisch im Wochentagsprogramm hoch gefahren");
}

</span></span>
:wink:

paresy

Ich nutze Z-Wave. Die Rollos lassen sich wie Dimmer direkt anfahren. Der Wert (13 im Beispiel) ist der %-Wert der Position:

Hoch: ZW_DimSet(Instanz_ID,100)
Runter: ZW_DimSet(Instanz_ID,0)
Auf Schlitz: ZW_DImSet (Instanz_ID, 13)

Ich habe extra einzelne Skripts geschrieben, da ich die Aktoren an anderer Stelle (z.B. beim image toggle im Dashboard) auch schalten muss, in die gleichen Positionen.

Ich probier mal Paresy’s Vorschlag aus. Der scheint ganz einfach und ist am wenigsten Arbeit. Melde mich dann morgen. Nochmals vielen Dank für Dein Angebot,wirklich sehr nett.

@wupperi

Warum machst Du dies nicht über das Sunlight Script aus der Community und einer Abfrage der dortigen Variable DAYLIGHT auf True oder False ?

Damit hast Du eine vom Sonnenaufgang und Sonnenuntergang und Wohnort geführte Jealousiesteuerung und musst Dir über dieses Thema eigentlich keine Gedanken mehr machen. Zumal dieses eine Anwesenheit, bei z.B. Urlaub, wesentlich besser simuliert.

Für bestimmte zeitliche Anpassungen kannst Du für beide Zeiten einen Offset einstellen, so dass Du der berechneten Zeit vor- oder nachgreifen kannst.

Wenn Dir ein Sunlight Script nicht alle nötigen Zeiten ergibt, weil Du die Rolläden zu verschiedenen Zeiten nutzen möchtest, dann erstellst Du ein zweites Sunlight Script mit einer Benennung aller Variablen mit „XXXXX1“, also DAYLIGHT1.

Dieses Sunlight Script gibt Dir auch den Wochentag zurück und dann kannst Du mit einfachen „IF Wochentag Gleich“ Abfragen eines Scripts das Verhalten Deiner Rolläden entsprechend steuern und das relevante Sunlight Script dort einbinden.

Für Dein Beispiel wäre das sicherlich die einfachste Variante mit dem Vorteil dass Du Sonnenauf- und untergang, Wochentag, Jahr, Monat, Datum, etc… noch in der IPSymcon Umgebung hast und diese Variablen sich für allerlei Spass nutzen lassen, wie z.B. die Mülltonnensignalisierung oder was auch immer :slight_smile:

Das mal so meine 2 cents zum Thema.

Gruss
B71

Vielen Dank für die vielen Antworten. Ich habe es jetzt so gemacht wie von Paresy vorgeschlagen:

Skript 1: Rolladen hoch, per IPS Timer ausgeführt Mo - Fr um 8:15 und Samstag und Sonntag um 8:45h

Sktipt 2: Rolladen runter: per IPS Timer ausgeführt Sonntag bis Donnerstag um 19:45 und Freitag und Samstag um 20:45.

Was mir nicht klar war: Mehrere IPS Timer je Skript sind setzbar, dass diese innerhalb eines Events eine logische Verknüpfung von z.B. Tag und Uhrzeit erlauben (Trigger: Mo und DI und MI und DO und FR aber nur um 19:45) und dass verschiedene IPS Timer, die ein Skript triggern, voneinander unabhängig laufen.

Somit checke ich in meinem Skript nur noch ob auto_on == true. Wenns so ist, wird der Rollo gefahren, wenn nicht, ist das Skript halt nur durchgelaufen und wird beim nächsten IPS Timer event wieder getriggert.

Hallo,

da ich sehr viele Rolladen zu steuern habe, wäre ich auch an weiteren
Beispielscripten/Lösungsansätzen intressiert.

Hatte glaube schon mal gesucht und neben dem Thread hier nur für IPSYMCON V1 ein Script gefunden.

Einige Ideen sind ja schon gennant zur intelligenten Lösung. Auch ich will
so wenig wie möglich programmieren damit es übersichtlich bleibt.
Das Sunrise/Sunset Script habe ich schon am rennen. Super Arbeit Danke noch mal an den Autor :wink: Hab zwar auch ein Dämmerungssensor der will aber noch nicht so wie ich will.

Die Idee mit dem Regelswitch ist schon mal gut, dass macht Sinn.
Vielleicht kann jemand mal sein Rolladensteuerungsscript zur Verfügung stellen.

Ich verwende 16x FS20MS.

Danke

Sascha