Zeitsteuerung

Hallo Experten,
ich habe ein Problem und finde einfach den Fehler nicht. Meine Haussteuerung soll im Urlaub ( Im Script $home genannt ) eine anderes Program ablaufen lassen als wenn ich arbeiten gehe (durch variabel $arbeit signalisiert ). Diese Variabelen setzte ich über meinen touchscreen. Die variabelen sind auch korekt im Baum gesetzt und angezeigt. Die erste Schleife $home == true ) läuft auch Fehlerfrei, aber wenn die Variabele $arbeit == true ist, springt mein script nicht in diese Schleife. Hat jemand einen Tip für mich? Ich stehe echt auf dem Schlauch. Hier mein Script.

$home = getvalueboolean(58326 /*[vHeimurlaub]*/);
$arbeit = getvalueboolean(20220 /*[vArbeit]*/);
$man = getvalueboolean(30992 /*[vManuel]*/);
$time = date("H:i");

if($home == true)
  {
  If($time >= "04:00" and $time <= "04:05")
  /*"Aufwachen"*/
    {
     setValue(36904 /*[Heizung\Gehen\vGehen]*/,false);
     setValue(41375 /*[Heizung\Aufwachen\vAufwachen]*/,true);
    IPS_Runscript(10025 /*[Heizung\Aufwachen\sAufwachen]*/);
    }

  Else if($time >= "05:55" and $time <= "06:00")
  /*Sonos Büro an*/
            {
          setValue(45337 /*[Musik\v\Buero\Sonos]*/,true);
         }
  Else if($time >= "07:00" and $time <= "07:05")
  /*"Gehen"*/
         {
         setValue(41375 /*[Heizung\Aufwachen\vAufwachen]*/,false);
            setValue(36904 /*[Heizung\Gehen\vGehen]*/,true);
         IPS_Runscript(21088 /*[Heizung\Gehen\sGehen]*/);
         }
   Else if($time >= "07:06" and $time <= "20:30")
  /*"kommen"*/
         {
         setValue(36904 /*[Heizung\Gehen\vGehen]*/,false);
         setValue(40645 /*[Heizung\Kommen\vKommen]*/,true);
         IPS_Runscript(54758 /*[Heizung\Kommen\sKommen]*/);
         }
  Else if($time >= "08:10" and $time <= "08:20")
  //Sonos Küche an
         {
          setValue(55552 /*[Musik\v\Kueche\Sonos]*/,true);
          }

  Else if($time >= "20:31" and $time <= "20:35")
  /*"Gehen"*/
           {
           setValue(40645 /*[Heizung\Kommen\vKommen]*/,false);
           setValue(36904 /*[Heizung\Gehen\vGehen]*/,true);
       IPS_Runscript(21088 /*[Heizung\Gehen\sGehen]*/);
         }

  Else if($time >="23:15" and $time <="23:20")
//Sonos aus
         {
         setValue(55552 /*[Musik\v\Kueche\Sonos]*/,false);
         setvalue(45337 /*[Musik\v\Buero\Sonos]*/,false);
         }
   }
    /* Tagabsenkung */
Else If($arbeit == true)
  {
  If($time >= "04:00" and $time <= "04:05")
  /*"Aufwachen"*/
    {
  IPS_Runscript(10025 /*[Heizung\Aufwachen\sAufwachen]*/);
    }

  Else if($time >= "05:55" and $time <= "006:00")
  //Sonos Büro an
         {
          setValue(45337 /*[Musik\v\Buero\Sonos]*/,true);
         }
  Else if($time >= "07:00" and $time <= "07:05")
 /*"Gehen"*/
          {
IPS_Runscript(21088 /*[Heizung\Gehen\sGehen]*/);
         }

  Else if($time >= "08:10" and $time <= "08:20")
//Sonos Küche an
         {
          setValue(55552 /*[Musik\v\Kueche\Sonos]*/,true);
          }

  Else if($time >="08:35" and $time <="08:40")
//Sonos aus
         {
         setValue(55552 /*[Musik\v\Kueche\Sonos]*/,false);
         setvalue(45337 /*[Musik\v\Buero\Sonos]*/,false);
         }
  Else if($time >= "14:16:00" and $time <= "14:20:00")
//"Kommen
         {
      IPS_Runscript(54758 /*[Heizung\Kommen\sKommen]*/);
          }

  Else if($time >= "20:31" and $time <= "20:35")
//"Gehen"
         {
IPS_Runscript(21088 /*[Heizung\Gehen\sGehen]*/);
         }

  Else if($time >="23:15" and $time <="23:20")
//Sonos aus
         {
         setValue(55552 /*[Musik\v\Kueche\Sonos]*/,false);
         setvalue(45337 /*[Musik\v\Buero\Sonos]*/,false);
         }
    }
?>

Viele dank im Vorraus,
Ralph

Hallo Ralph,

bitte setze das Script in PHP-Tags, sonst macht sich kaum jemand die Mühe, das durchzugehen, weil schlecht nachzuvollziehen ist… gerade bei längeren Scripts.

Symbolleiste ganz rechts „php“ :wink:

probier es mal so.

If($arbeit == true)

es reicht auch wenn Du es so schreibst.

If($arbeit)

ist das selbe.

Muss es nicht

elseif

heißen, oder ist das das Gleiche? :confused:

@ralph125

Wird denn $home überhaupt „false“, wenn $arbeit „true“ wird?
… sonst wird „else if“ garnicht abgearbeitet!

Sorry für die fehlenden Tags.
$home wird automatish false wenn $arbei true ist.
Ich dachte immer es heist else if, jedenfalls funktioniert es so bei der Zeitabfrage in der $home schleife. Aber ich werde es gleich mal probieren.
Danke auf jeden fall schon mal euch alen,
ralph

Wieso verwendest du da überhaupt zwei Variablen? Eine reicht doch aus :slight_smile:

Geht leider immer noch nicht.
Ich beschreibe nochmal was ich genau machen will.
Ipsymcon steuert über ein USB board eine andere Automatisation ( Honeywell) die sowohl die Heizung als auch das Licht und die Rollos steuert. Hier werden sogenannte Lifestyles hinterlegt die z.B. Räume auf bestimmet Temp halten usw. Zusätzlich soll Ipsymcon mein Multiroomsystem steuern. Alles möchte ich über meinen Touchscreen aktivieren. Hierbei verbinde ich jeweils Radiobutton mit den Variablen.
$home soll automatisch ablaufen wenn ich Zuhause bin
$arbeit soll tagsüber Geräte ausschalten und die Heizung bis abends absenken
$manuell soll die Lifestyles manuell aktivieren, bis ich sie wieder ausschalte (also ohne Zeitprogram)

Die Funktion manuel und home gehen, nur die tagabsenkung (2.Schleife) wird nicht angesprungen obwohl $home auf true steht und $arbeit auf false.
Hat noch jemand einen Tip?
ralph

Meinst du den zweiten Teil deiner ersten if-Bedingung, also unter „/* Tagabsenkung */“?
Schleifen sind was anderes…

Woran erkennst du, dass PHP dort nicht hinkommt? Schreib da mal direkt einen Debug-Code rein, ohne irgendeine andere Bedingung auf die Zeit.

Wolltest du das nicht genau andersherum? Also wenn $home auf true steht und $arbeit auf false dann der erste Teil?

Eine Kleinigkeit, die mir noch aufgefallen ist:
($time >= „05:55“ and $time <= „006:00“)
Das ist nie wahr, denn die Stunde kann nie >= 05 und gleichzeitig <= 00 sein.

Stefan

@ralph125

Was triggert eigentlich das Script?
Das Setzen der Variablen oder wird es zyklisch getriggert?

Sollen die Zeiten durch „else if“ tatsächlich voneinander abhängig sein, oder soll gerade DAS ausgeführt werden, was in einer angegebenen Zeitspanne liegt… unabhängig von anderen?

Hallo Stefan,
also das mit der Zeit ist wirklich blöd von mir, danke, schon behoben. Also wenn $home true ist, wird der erste teil angesprungen, das funktioniert auch. Und wenn $arbeit true ist ist $home automatisch false und es soll auf den zweiten teil gesprungen werden „Tagabsenkung“, das geht nicht. Ich sehe nur dass es nicht angsprungen wird, da keine Variabele in den Meldungen geändert wird. Da ich gerade erst mit php und Ipsymcon angefangen habe, kenne ich den debug mode nicht. Kannst Du mir das kurz erklären?

Ich triggere das script wenn $manuel == false ist und dann alle 2 minuten zyclisch, daher diese Zeitbereiche. Dann schaltet das USB Board mit der ttl Flanke von low nach high meine andere Haussteuerung. Das funktioniert wie gesagt auch beim ersten teil des scripts und im Manuellen modus.

Icxh bin echt ratlos warum der zweite teil nicht angesprungen wird.
Danke für die rege Hilfe,
Ralph

Hallo Ralph um Fehler in Scripten zu finden sollte man diese zur Erprobung ersteinmal kürzen um diese selber besser zu verstehen und um die Errorquelle zu lokalisieren.
Das ist quasi was Du willst:


$home   = false;
$arbeit = true;

if($home == true)
{
 	echo "hallo home";
}
Else If($arbeit == true)
{
	echo "hallo arbeit";
}

//Ausgabe => hallo arbeit

Ich glaube aber nicht das bei Dir diese Bedingung erfüllt wird und darum solltest Du in den zweiten Block (der mit Arbeit == true) erstmal alles andere rausnehmen und eine Debugvariable schreiben(quasi SetValue(12345, true); und prüfen ob diese in IPS geschrieben wird. Dazu im Objektbaum einen Doppelklick auf diese machen und auf Wert editiern gehen, dieses Fenster an der Seite andocken und schauen ob diese Var mit Zeitstempel angezeigt wird. Mit dieser Var kannst Du dann beim Triggern etc. rumprobieren und diese im Script immer an andere Stellen setzen um zu schauen an welche Stellen der PHP Interpreter kommt.

Im übrigen ist elseif und else if fast identisch, in Deinem Fall so ok.

Ich glaube du hast dich da vertippt.
Du meinst bestimmt elseif und else if sind fast identisch.
Else und elseif ist doch ein bedeutender Unterschied.

Gruß
Smudo

Yep, danke.:wink:

danke Euch allen,
ich wedre mal den debuglevel ausprobieren. Jetzt habe ich jedenfalls genügend ansetzte zum fehler finden.
Super forum !!
Ich schreibe Euch wenn ich denb Fehler gefunden habe,
ralph