IPSShadowing - eine Beschattungssteuerung

Hallo zusammen,

ich habe schon seit einer Ewigkeit ein Problem mit IPSShadowing und heute komme ich endlich mal dazu es hier mal einzustellen … ich habe nämlich keine Ahnung woran das liegen könnte.
Ich nutze für meine Rollladen im Dachgeschoß ein spezielles Temperatur-Profil. Das funktioniert auch spitze! … aber es gibt einen Fehler bei einem der Rollladen. Dieser Fehler tritt nur auf, wenn ich das Abwesenheits-Flag gesetzt habe. Dann greift für diesen einen Rollladen das Temperatur-Profil nicht mehr. Er bleibt einfach offen.
Ich habe schon überall gesucht, finde allerdings den Fehler nicht. Hat jemand einen Hinweis?

Zitat aus dem Wiki: "Übersteuert wird das ganze durch die Programme „Temperatur“ und „Anwesenheit“, wobei „Anwesenheit“ die höchste Priorität hat. Ist "

Wenn ich ein Umlaut im „c_Property_Name“ läuft der Installationsscript bei mir auf Win10 64b SymCAN4.0 nicht durch.

Hallo,

Installation auf Win10 64b SymCAN4.0

ich habe bei mir 2 Probleme, wo ich bis jetzt noch nichts gefunden habe im Wiki und Forum:

  • Sobald ich eine „c_ShadowingDevice“ über 10 habe lässt sich der Script bei mir nicht mehr installieren. Ist 10 wirklich der Limit oder muss ich noch irgendwo ein Parameter umändern?
  • Wenn einmal ein „c_ShadowingDevice“ als „c_ShadowingType_Marquees“ definiert war verschwindet nachher beim umändern auf ein anderes Typ (und Neuinstallation) die Steuerung per Wetter Profil nicht mehr. Ist dies gewollt? Mich stört es nicht und benutze es sogar weil fir fast in jedem Zimmer mindestens 1 Fenster mit einer Größe über 2mx2m haben und ich Putzfaul bin bei den Fenstern :wink:

Vielen Dank im Voraus.

Gelöst „c_ShadowingDevice“ über 10: Nicht mehr genügend freie Variablen im Moment um weitere Devices anzulegen.

In den Einstellungen zu Tagesbeginn und Tagesende wird zwischen Werktag und Wochenende unterschieden. Das ist meiner Frau aber zu undifferenziert, sie hätte gerne, das man für jeden Wochentag einzeln individuell die Uhrzeit einstellen kann, da die Rollläden sonst unter der Woche immer zum gleichen Zeitpunkt öffnen, meine Tochter und meine Frau aber zu unterschiedlichen Zeiten die Woche aufstehen müssen.

Wie kann ich das denn am besten in Verbindung mit IPSShadowing lösen? Ich dachte jetzt im ersten Moment daran für jeden Tag zwei Variablen pro Raum anzulegen in die die Uhrzeit zum Öffnen und zum Schließen eingetragen wird. Den Modus bei IPSShadowing müsste dann bei Tagesbeginn und Tagesende wohl auf individuell stehen.

Wie bekomme ich das nun so eingerichtet das täglich passend zum aktuellen Wochentag die passende Uhrzeit zum Öffnen und Schließen eingetragen wird? Hat das von Euch schon mal jemand gemacht, bzw. kann mir auf die Sprünge helfen wie so was in IPS einzurichten ist?

@DATA78Lux

Mittlerweile sind die Konstanten für bis zu 30 Devices vordefiniert, sollte da also kein Problem geben - Fehlermeldung wäre interessant.

Wetterprofil wird derzeit nur für Markisen unterstützt.

@Fonzo

Mach Dir doch einfach ein Skript das zB jeden Tag um Mitternacht aufgerufen wird und die Variablen für IPSShadowing entsprechend setzt.

Das war meine Idee am besten mit einem Wochenplan. Da ich aber mit einem Wochenplan bisher noch nicht gearbeitet habe wollte ich fragen ob mir da jemand Hilfe beim einrichten geben kann.

Ich nehme mal an das Vorgehen wäre wohl so:

  • Erstellen von einem Profil für Tagesbeginn und Tagesende pro Rollladen den ich individuell schalten will im Webfront von IPSShadowing
  • Zuweisen des passenden Tagesbeginn Profil und Tagesende Profil unter Beschattungs Elemente im Webfront von IPSShadowing
  • Erstellen eines Wochenplans mit den Wochenplan Zuständen Rollladen auf und Rollladen zu

Wo ich nun hänge ist:

  • Wie lautet der Variablenname von Werktag Zeit und Wochenende Zeit des Profils von IPSShadowing und wo finde ich diesen genau im Objektbaum?
  • Was muss ich bei Wochenplan bei Aktion eintragen damit mir der Wochenplan die Variablen passend setzt
  • Oder bin ich da auf dem Holzweg und das ganze muss ich ohne einen Wochenplan lösen, was aber schade wäre da es so einfacher zu bedienen wäre?
  • Wie muss denn das Skript aussehen das mir die Zeiten des Wochenplans passend in die Variablen von IPSShadowing schreibt?

Ich beantworte das mal selber für den Fall, dass das noch jemand machen will. Ich habe es jetzt hoffentlich hinbekommen.

Ich habe erst mal für jeden Rollladen bzw. Rollladen Gruppe, die ich einzeln schalten will ein Profil im Webfront von IPSShadowing für Tagesbeginn und Tagesende angelegt.
Dann habe ich unter Beschattungs Elemente für jeden Rolladen das passende Profil für Tagesbeginn Profil und Tagesende Profil zugewiesen.

Jetzt habe ich mir unter einer Kategorie eine Dummy Instanz für den Rollladen angelegt unter der ich einen Wochenplan erstellt habe.
IPSShadowing-2.png

Das Aktionsfeld habe ich leer gelassen.

Jetzt habe ich ein SKript angelegt und auf dieses Skript ein Ereignis gesetzt, dass einmal täglich Nachts das Skript ausführt.

IPSShadowing-1.png

Das Skript nutzt das Skript von tgusi74
Aktuelle Aktion im Wochenplan herausfinden
Vielen herzlichen Dank an tgusi74 für das prima Skript :).

Das sieht dann so aus:


//ObjektId des Wochenplans
$ID = 24466 /*[Geräte\Rollläden\IPSShadowing Zeiteinstellung Rollläden\Rollladen Bad\Unnamed Object (ID: 24466)]*/;
$Zustand = GetWeekplanState($ID);

$Tagesbeginn = $Zustand["StartTime"];
$Tagesende = $Zustand["EndTime"];

// Zeit umwandeln
$Tagesbeginn = explode(" ", $Tagesbeginn);
$TimeTagesbeginn = substr($Tagesbeginn[1], 0, 5);
$DateTagesbeginn = $Tagesbeginn[0];
$Tagesende = explode(" ", $Tagesende);
$TimeTagesende = substr($Tagesende[1], 0, 5);
$DateTagesende = $Tagesende[0];


// Wochentag
$tage = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
$tag = date("w");
$wochentag = $tage[$tag];

// Zeit setzen Objektbaum Program/IPSLibrary/data/modules/IPSShadowing/Profiles/ BgnOfDay or EndOfDay
if ($wochentag == "Samstag" || $wochentag == "Sonntag")
{
// Zeit Wochenende setzten
SetValueString(33675 /*[Program\IPSLibrary\data\modules\IPSShadowing\Profiles\BgnOfDay\Offen Rollladen Bad\WeekendTime]*/, $TimeTagesbeginn);
SetValueString(49012 /*[Program\IPSLibrary\data\modules\IPSShadowing\Profiles\EndOfDay\Geschlossen Rollladen Bad\WeekendTime]*/, $TimeTagesende);

}
else
{
// Zeit Werktag setzten
SetValueString(46017 /*[Program\IPSLibrary\data\modules\IPSShadowing\Profiles\BgnOfDay\Offen Rollladen Bad\WorkdayTime]*/, $TimeTagesbeginn);
SetValueString(35401 /*[Program\IPSLibrary\data\modules\IPSShadowing\Profiles\EndOfDay\Geschlossen Rollladen Bad\WorkdayTime]*/, $TimeTagesende);

}



/****************************************************************************
GetWeekplanState,
  liest den Zustand eines gewünschten Wochenplanereignisses aus

  GetWeekplanStateGetWeekplanState(WochenplanID,[Abfragezeitpunkt_als_Systemzeit])

Example: $Zustand = GetWeekplanState(1234);
         oder
         $Zustand = GetWeekplanStateGetWeekplanState(1234,time()-24*3600)

[ActionID] => 4                          ==> Aktiver Zustand zum Abfragezeitpunkt
[ActionName] => FREI                     ==> Zustandsbezeichnung zum Abfragezeitpunkt
[CheckSysTime] => 1423986592             ==> Zeitpunkt fuer den die Ueberprufung gestartet wurde
[CheckTime] => 15.02.2015 08:49:52       ==> Formatierter Ueberpruefungszeitpunkt
[StartSysTime] => 1423861200             ==> Schaltpunkt wo der AKTIVE ZUSTAND aktiv wurde
[StartTime] => 13.02.2015 22:00:00       ==> Formatierter Startpunkt
[EndSysTime] => 1424034000               ==> Schaltpunkt wo der AKTIVE ZUSTAND verlassen wird
[EndTime] => 15.02.2015 22:00:00         ==> Formatierter Endpunkt
[Periode] => 172800                      ==> Zeitdauer des aktiven Zustand ins Sekunden
[PeriodeHours] => 48                     ==> Formatierte Zeitdauer STUNDEN
[PeriodeMinutes] => 0                    ==> Formatierte Zeitdauer MINUTEN
[PeriodeSeconds] => 0                    ==> Formatierte Zeitdauer SEKUNDEN
[PreviousActionID] => 2                  ==> Zustand der VOR dem aktuellen Zustand
[PreviousActionName] => 2-Mittelschicht  ==> Zustandsbezeichung vorherigen Zustand
[NextActionID] => 3                      ==> Zustand der den aktuellen Zustand beloest wird
[NextActionName] => 3-Nachtschicht       ==> Zustandsbezeichung zukuenftiges Zustandes
[WeekPlanID] => 15405                    ==> ID des Wochenplans
[WeekPlanName] => SCHICHTPLANTEST        ==> Name des Wochenplans
[WeekPlanActiv] => 1                     ==> Zustand ob der Wochenplan aktiv ist oder nicht

ReleaseNotes:
15.02.2015 tgusi74
 + Function erstellt und geprüft
14.05.2015 tgusi74 #1
 + Fehler beseitigt mit Schaltpunkt um 00:00:00 am aktuellen Tag
15.05.2015 tgusi74 #2
 + Fehler beseitigt mit Schaltpunkt um 00:00:00 am Folgetag
28.12.2015 tgusi74 #3
 + Variablen frueher initialisiert
 + Wenn kein Tagesevent vorhanden, dann default 0
31.12.2015 tgusi74 #4
 + Diverse Aenderungen wegen ID=0 im Wochenplan
 + WeekPlanName, WeekPlanID, WeekPlanName hinzugefuegt
02.01.2016 tgusi74 #5
 + Komplettumbau der Funktion wegen diverser Fehler mit ID=0
06.01.2015 tgusi74 #6
 + Ausgeblendete Tage (Luecken) haben nicht funktioniert,
   daher jetzt gesondert pruefen ==> DayFound
*****************************************************************************/

function GetWeekplanState($ID, $SysTimePoint=NULL, $CheckOnlySlot=false)
 {
   if($SysTimePoint == NULL)
     {
      $SysTimePoint = time();
     }

   $State = array();
   $State['ActionID']           = 0;
   $State['ActionName']         = "";
   $State['CheckSysTime']       = $SysTimePoint;
   $State['CheckTime']          = "01.01.1970 00:00:00";
   $State['StartSysTime']       = $SysTimePoint-86400*7;
   $State['StartTime']          = "01.01.1970 00:00:00";
   $State['EndSysTime']         = $SysTimePoint+86400*7;
   $State['EndTime']            = "01.01.1970 00:00:00";
   $State['Periode']            = 0;
   $State['PeriodeHours']       = 0;
   $State['PeriodeMinutes']     = 0;
   $State['PeriodeSeconds']     = 0;
   $State['PreviousActionID']   = 0;
   $State['PreviousActionName'] = "";
   $State['NextActionID']       = 0;
   $State['NextActionName']     = "";
   $State['WeekPlanID']         = $ID;
   $State['WeekPlanName']       = IPS_GetName($ID);
   $State['WeekPlanActiv']      = 0;

   $e = IPS_GetEvent($ID);
   if ($e['EventType'] != 2)
      {
       echo ("Bei der ID= " . $ID . " handelt es sich um keinen Wochenplan !! ==> ABBRUCH !!" . "
");
       return($State);
      }

   if ($e['EventActive'] == 1)
      {
       //#4 - Aktivstatus mitausgeben
       $State['WeekPlanActiv'] = 1;
      }

   //#3 Variablen vorinitialisieren
   $StartPointFound = false;
   $EndPointFound   = false;
   $DayEventFound   = false;
   $DayFound        = false;

   //Durch alle Gruppen gehen
   foreach($e['ScheduleGroups'] as $g)
     {
      //pruefen ob Gruppe fuer Zeitpunkt zustaendig
      if(($g['Days'] & pow(2,date("N",$SysTimePoint)-1)) > 0)
        {
         $DayFound        = true;
         $StartPointFound = false;
         $ActualSlotFound = false;
         $EndPointFound   = false;
         $State['StartSysTime'] = mktime(0,0,0,date("m",$SysTimePoint),date("d",$SysTimePoint),date("Y",$SysTimePoint));
         $SearchTimeActDay      = date("H",$SysTimePoint) * 3600 + date("i",$SysTimePoint) * 60 + date("s",$SysTimePoint);

         //Aktuellen Schaltpunkt suchen --> Wir nutzen die Eigenschaft, dass die Schaltpunkte immer aufsteigend sortiert sind.
         foreach($g['Points'] as $p)
           {
            $StartTimeActDaySlot  = $p['Start']['Hour'] * 3600 + $p['Start']['Minute'] * 60 + $p['Start']['Second'];
            $DayEventFound = true;

            if($SearchTimeActDay >= $StartTimeActDaySlot)
              {
               if($ActualSlotFound == false)
                 {
                  $ActualSlotFound = true;
                  $State['ActionID']     = $p['ActionID'];
                  $State['StartSysTime'] = mktime($p['Start']['Hour'],$p['Start']['Minute'],$p['Start']['Second'],date("m",$SysTimePoint),date("d",$SysTimePoint),date("Y",$SysTimePoint));
                 }
               else
                 {
                  $StartPointFound = true;
                  $State['PreviousActionID']  = $State['ActionID'];
                  $State['ActionID']          = $p['ActionID'];
                  $State['StartSysTime'] = mktime($p['Start']['Hour'],$p['Start']['Minute'],$p['Start']['Second'],date("m",$SysTimePoint),date("d",$SysTimePoint),date("Y",$SysTimePoint));
                 }
              }
            else
              {
               if($EndPointFound == false)
                 {
                  $EndPointFound   = true;
                  $State['NextActionID']     = $p['ActionID'];
                  $State['EndSysTime'] = mktime($p['Start']['Hour'],$p['Start']['Minute'],$p['Start']['Second'],date("m",$SysTimePoint),date("d",$SysTimePoint),date("Y",$SysTimePoint));
                 }
               else
                 {
                  break;
                 }
              }
           }
         break; //Sobald wir unseren Tag gefunden haben, können wir die Schleife abbrechen.
                //Jeder Tag darf nur in genau einer Gruppe sein.
        }
     }

     //wenn kein Tag gefunden wird ==> Tag ist ausgeblendet !!
     if($DayFound == false)
       {
        if($CheckOnlySlot == false)
          {
           for($i=0;$i<=7;$i++)
              {
               foreach($e['ScheduleGroups'] as $g)
                  {
                   //pruefen ob Gruppe fuer Zeitpunkt zustaendig
                   if(($g['Days'] & pow(2,date("N",$SysTimePoint)-1-$i)) > 0)
                     {
                      $DayFound=true;
                      break 2;
                     }
                  }
              }

           $State['StartSysTime'] = mktime(00,00,00,date("m",$SysTimePoint),date("d",$SysTimePoint)+1-$i,date("Y",$SysTimePoint));
          }

        for($i=0;$i<=6;$i++)
           {
            foreach($e['ScheduleGroups'] as $g)
               {
                //pruefen ob Gruppe fuer Zeitpunkt zustaendig
                if(($g['Days'] & pow(2,date("N",$SysTimePoint)-1+$i)) > 0)
                  {
                   $DayFound=true;
                   break 2;
                  }
               }
           }

        if($State['StartSysTime'] <= $SysTimePoint)
          {
           $State['StartSysTime']=$SysTimePoint;
          }

        $State['CheckSysTime']   = mktime(00,00,00,date("m",$SysTimePoint),date("d",$SysTimePoint)-1+$i,date("Y",$SysTimePoint));
        $State['EndSysTime']     = mktime(00,00,00,date("m",$SysTimePoint),date("d",$SysTimePoint)-1+$i,date("Y",$SysTimePoint));
        $EndPointFound = false;
       }

  if($CheckOnlySlot == false)
    {

     //Startpunkt wurde zwar gefunden aber die ActionID ist 0 --> vorigen Schaltpunkt suchen
     if( ($StartPointFound == true) && ($State['ActionID'] == 0) )
       {
        do{
           $prevevent1 = GetWeekplanState($ID, $State['StartSysTime']-1 ,true);

           $State['StartSysTime']     = $prevevent1['StartSysTime'];
           $State['PreviousActionID'] = $prevevent1['ActionID'];

           if ( ($State['ActionID'] == 0) && ($prevevent1['ActionID'] != 0) )
              {
               $State['StartSysTime']     = $prevevent1['StartSysTime'];
               $State['ActionID']         = $prevevent1['ActionID'];
               $State['PreviousActionID'] = $prevevent1['PreviousActionID'];
               $DayEventFound = true;
              }
          } while(  ($State['ActionID'] == 0) && ($prevevent1['StartSysTime'] >= ($State['CheckSysTime']-86400*7)) );

        //Jetzt auch nochmals checken ob sich nicht auch der vorherige zu 0 veraendert hat
        if($State['PreviousActionID'] == 0)
          {
           $CheckTime1 = $State['StartSysTime'];

           do{
              $prevevent1 = GetWeekplanState($ID, $CheckTime1-1 ,true);

              $CheckTime1  = $prevevent1['StartSysTime'];

              if( ($State['PreviousActionID'] == 0) && ($prevevent1['ActionID'] != 0) )
                {
                 $State['PreviousActionID'] = $prevevent1['ActionID'];
                 $DayEventFound = true;
                }
             } while(  ($State['PreviousActionID'] == 0) && ($prevevent1['StartSysTime'] >= ($State['CheckSysTime']-86400*14)) ); //hier geht auch 7

           }
    }

    //Startpunkt liegt an einen der Vortage !!
    if($StartPointFound == false)
      {
       do{
          $prevevent1 = GetWeekplanState($ID, $State['StartSysTime']-1 ,true);

          if ( ($prevevent1['ActionID'] == 0) && ($prevevent1['PreviousActionID'] == 0) && ($prevevent1['NextActionID'] == 0) )
             {
              $State['StartSysTime'] = mktime(00,00,00,date("m",$prevevent1['StartSysTime']),date("d",$prevevent1['StartSysTime']),date("Y",$prevevent1['StartSysTime']));
             }
          elseif ( ($prevevent1['NextActionID'] == 0) && ($prevevent1['PreviousActionID'] == 0) && ($State['ActionID'] == $prevevent1['ActionID']) )
             {
              $State['StartSysTime'] = mktime(00,00,00,date("m",$prevevent1['StartSysTime']),date("d",$prevevent1['StartSysTime']),date("Y",$prevevent1['StartSysTime']));
             }
          else
             {
              $State['StartSysTime']     = $prevevent1['StartSysTime'];
              $State['PreviousActionID'] = $prevevent1['ActionID'];

              if( ($State['ActionID'] == 0) && ($prevevent1['ActionID'] != 0) )
                {
                 $State['StartSysTime']     = $prevevent1['EndSysTime']; //??
                 $State['ActionID']         = $prevevent1['ActionID'];
                 $State['PreviousActionID'] = $prevevent1['PreviousActionID'];
                 if($prevevent1['NextActionID'] == 0)
                   {
                    $State['StartSysTime'] = $prevevent1['StartSysTime'];
                   }

                 $DayEventFound = true;
                }
             }
          } while( ( ($State['ActionID'] == 0) || ($State['ActionID'] == $prevevent1['PreviousActionID']) )&& ($prevevent1['StartSysTime'] >= ($State['CheckSysTime']-86400*14)) );


          //Checken ob nicht doch der vorherige Schaltpunkt jetzt 0 ist
          if($State['PreviousActionID'] == 0)
            {
             $CheckTime1 = $State['StartSysTime'];

             do{
                $prevevent1 = GetWeekplanState($ID, $CheckTime1-1 ,true);
                if ( ($prevevent1['ActionID'] == 0) && ($prevevent1['PreviousActionID'] == 0) && ($prevevent1['NextActionID'] == 0) )
                   {
                    $CheckTime1 = mktime(00,00,00,date("m",$prevevent1['StartSysTime']),date("d",$prevevent1['StartSysTime']),date("Y",$prevevent1['StartSysTime']));
                   }
                else
                   {
                    $CheckTime1  = $prevevent1['StartSysTime'];
                   }

                if ( ($State['PreviousActionID'] == 0) && ($prevevent1['ActionID'] != 0) )
                   {
                    $State['PreviousActionID'] = $prevevent1['ActionID'];
                    $DayEventFound = true;
                   }
               } while(  ($State['PreviousActionID'] == 0) && ($prevevent1['StartSysTime'] >= ($State['CheckSysTime']-86400*14)) );
            }
      }

    //Vorheriger Schaltpunkt hat selben Status wie ActionID --> somit vorherigen Schaltpunkt fuer VORGAENGER suchen
    if ($State['ActionID'] == $State['PreviousActionID'])
       {
        $CheckTime1 = $State['StartSysTime'];

        do{
           $prevevent1 = GetWeekplanState($ID, $CheckTime1-1 ,true);

           if( ($prevevent1['ActionID'] == 0) && ($prevevent1['PreviousActionID'] == 0) && ($prevevent1['NextActionID'] == 0) )
             {
              $CheckTime1 = mktime(00,00,00,date("m",$prevevent1['StartSysTime']),date("d",$prevevent1['StartSysTime']),date("Y",$prevevent1['StartSysTime']));
             }
           elseif( ($prevevent1['NextActionID'] == 0) && ($prevevent1['PreviousActionID'] == 0) )
             {
              $CheckTime1 = mktime(00,00,00,date("m",$prevevent1['StartSysTime']),date("d",$prevevent1['StartSysTime']),date("Y",$prevevent1['StartSysTime']));
             }
           else
             {
              $CheckTime1 = $prevevent1['StartSysTime'];

              if( ($State['PreviousActionID'] != $prevevent1['ActionID']) && ($prevevent1['ActionID'] != 0) )
                {
                 $State['PreviousActionID'] = $prevevent1['ActionID'];
                 $State['StartSysTime']     = $prevevent1['EndSysTime'];
                 $DayEventFound = true;
                }
             }
           } while(  ($State['PreviousActionID'] == $State['ActionID']) && ($prevevent1['StartSysTime'] >= ($State['CheckSysTime']-86400*7)) );
       }


    //Endpunkt wurde zwar gefunden aber der naechste Schaltpunkt ist 0
    if( ($EndPointFound==true) && ($State['NextActionID'] == 0) )
      {
       $CheckTime1 = $State['EndSysTime'];

       do{
          $nextevent1 = GetWeekplanState($ID, $CheckTime1,true);

          if( ($nextevent1['ActionID'] == 0) && ($nextevent1['PreviousActionID'] == 0) && ($nextevent1['NextActionID'] == 0) )
            {
             $CheckTime1 = mktime(0,0,0,date("m",$nextevent1['StartSysTime']),date("d",$nextevent1['StartSysTime'])+1,date("Y",$nextevent1['StartSysTime']));
            }
         elseif( ($nextevent1['NextActionID'] == 0) && ($nextevent1['PreviousActionID'] == 0) )
            {
             $CheckTime1 = mktime(0,0,0,date("m",$nextevent1['StartSysTime']),date("d",$nextevent1['StartSysTime'])+1,date("Y",$nextevent1['StartSysTime']));
            }
         else
            {
             $CheckTime1 = $nextevent1['EndSysTime'];

             if( ($State['NextActionID'] != $nextevent1['ActionID']) || ($nextevent1['ActionID'] != 0) )
               {
                $State['NextActionID']  = $nextevent1['ActionID'];
                $State['EndSysTime']    = $nextevent1['StartSysTime'];
                $DayEventFound = true;
               }
            }
         } while( ($State['NextActionID'] == 0) && ($State['EndSysTime'] <= ($State['CheckSysTime']+86400*7)) );
      }



    //Endpunkt liegt an einen der Folgetage !!
    if($EndPointFound==false)
      {
       if(($State['StartSysTime']+86400*6) < $State['CheckSysTime'])
         {
          $State['CheckSysTime'] = ($State['StartSysTime']+86400*6);
         }

       $State['EndSysTime'] = mktime(0,0,0,date("m",$State['CheckSysTime']),date("d",$State['CheckSysTime'])+1,date("Y",$State['CheckSysTime']));

       do{
          $nextevent1 = GetWeekplanState($ID, $State['EndSysTime'],true);

          if( ($nextevent1['ActionID'] == 0) && ($nextevent1['PreviousActionID'] == 0) && ($nextevent1['NextActionID'] == 0) )
            {
             $State['EndSysTime'] = mktime(0,0,0,date("m",$nextevent1['StartSysTime']),date("d",$nextevent1['StartSysTime'])+1,date("Y",$nextevent1['StartSysTime']));
            }
          elseif( ($nextevent1['NextActionID'] == 0) && ($nextevent1['PreviousActionID'] == 0) )
            {
             $State['EndSysTime'] = mktime(0,0,0,date("m",$nextevent1['StartSysTime']),date("d",$nextevent1['StartSysTime'])+1,date("Y",$nextevent1['StartSysTime']));
            }
          else
            {
             $State['EndSysTime']   = $nextevent1['StartSysTime'];
             $State['NextActionID'] = $nextevent1['ActionID'];

             if( ($State['NextActionID'] == 0) || ($State['ActionID'] == $nextevent1['ActionID']) )
               {
                $State['EndSysTime']     = $nextevent1['EndSysTime'];
                $DayEventFound = true;
               }
            }
          } while( ( ($State['ActionID'] == $nextevent1['ActionID']) || ($State['NextActionID']  == $nextevent1['NextActionID']) )&& ($State['EndSysTime'] <= ($State['CheckSysTime']+86400*7)) );


       //Wenn es kein Abloesezeitpunkt (nur ein Event im Wochenplan) gibt !!
       if( ($State['EndSysTime'] >= ($State['CheckSysTime']+86400*7)) && ($State['NextActionID']== 0) )
         {
          $State['NextActionID'] = $State['ActionID'];
         }


       //Wenn naechster Schaltpunkt = 0 ist --> Folgeevent suchen !!
       if( ($State['NextActionID'] == 0) && ($State['ActionID'] != 0) && ($State['PreviousActionID'] != 0) )
         {
          $CheckTime1 = mktime(0,0,0,date("m",$State['CheckSysTime']),date("d",$State['CheckSysTime'])+1,date("Y",$State['CheckSysTime']));

          do{
             $nextevent1 = GetWeekplanState($ID, $CheckTime1,true);

             if( ($nextevent1['ActionID'] == 0) && ($nextevent1['PreviousActionID'] == 0) && ($nextevent1['NextActionID'] == 0) )
               {
                $CheckTime1 = mktime(0,0,0,date("m",$nextevent1['StartSysTime']),date("d",$nextevent1['StartSysTime'])+1,date("Y",$nextevent1['StartSysTime']));
               }
             elseif( ($nextevent1['NextActionID'] == 0) && ($nextevent1['PreviousActionID'] == 0) )
               {
                $CheckTime1 = mktime(0,0,0,date("m",$nextevent1['StartSysTime']),date("d",$nextevent1['StartSysTime'])+1,date("Y",$nextevent1['StartSysTime']));
               }
             else
               {
                $CheckTime1     = $nextevent1['EndSysTime'];

                if( ($State['NextActionID'] != $nextevent1['ActionID']) || ($nextevent1['ActionID'] != 0) )
                  {
                   $State['NextActionID']  = $nextevent1['ActionID'];
                   $State['EndSysTime']    = $nextevent1['StartSysTime'];
                   $DayEventFound = true;
                  }
               }
            } while( ($State['NextActionID'] == 0) && ($State['EndSysTime'] <= ($State['CheckSysTime']+86400*7)) );
         }


       //Wenn alle 3 Schaltpunkte gleich sind, dann Ueberpruefungszeitpunkt zurueckliefern (Kein oder nur EIN Event im Wochenplan)
       if( ($State['ActionID'] == $State['PreviousActionID']) && ($State['ActionID'] == $State['NextActionID']) )
         {
          $State['StartSysTime'] = $SysTimePoint;
          $State['EndSysTime']   = $SysTimePoint;
         }


      }
    }



  $State['CheckSysTime']   = $SysTimePoint;
  $State['CheckTime']      = date("d.m.Y H:i:s",$State['CheckSysTime']);
  $State['StartTime']      = date("d.m.Y H:i:s",$State['StartSysTime']);
  $State['EndTime']        = date("d.m.Y H:i:s",$State['EndSysTime']);

  $State['Periode']        = $State['EndSysTime'] - $State['StartSysTime'];
  $State['PeriodeHours']   = floor($State['Periode'] / 3600);
  $State['PeriodeMinutes'] = $State['Periode']       / 60   % 60;
  $State['PeriodeSeconds'] = $State['Periode']              % 60;

  foreach($e['ScheduleActions'] as $n)
    {
     if ($n['ID'] == $State['ActionID'])
        {
         $State['ActionName'] = $n['Name'];
        }

     if($n['ID'] == $State['PreviousActionID'])
       {
        $State['PreviousActionName'] = $n['Name'];
       }

     if($n['ID'] == $State['NextActionID'])
       {
        $State['NextActionName'] = $n['Name'];
       }
    }

   return($State);
 }


Gibt es für das Temperaturprofil eine Hysterese?
Bei mir fahren die Rollläden über 23 Grad zu…wenn dann gerade mal kurz danach wieder 22.9 sind, fahren die Rollläden wieder auf.

Danke

Marco

Ja, änder in dem Temperaturprofil öffnen innen oder außen auf 22°

Hallo zusammen,

kennt jemand eine Möglichkeit, wie man in dem Modul einstellen kann, dass die Rollläden um ~1s zeitversetzt angesteuert werden?

In unserem Wohnzimmer haben wir insgesamt 6 Rollläden, welche am Tagesende alle herunterfahren sollen.
Sporadisch kommt es vor, dass ein Rollladen aber nicht herunter fährt. Ich vermute, das dies mit den Enocean Aktoren zusammen hängt, da diese alle das Signal über ein Antennenmodul über den RS485 Bus bekommen und so ggf. ein „Signal“ verloren geht.

Gruß Tobias

Hallo,

ich habe im EG auch 6 Rollos, die gleichzeitig runterfahren.
Aber das haben die bei mir noch nie gemacht… Ich sende über ein LAN Modul und vermute, dass das Gerät halt ein paar Millisekunden braucht um die Befehle hintereinander abzusetzen.
Die starten zwar alle innerhalb von 1 bis 1,5 Sekunden (sprich Pause von ca. 0,2 Sec), aber nicht gleichzeitig… Das Feature ist somit bei mir quasi eingebaut.

Naja.
Wenn Du das erzwingen willst bau am besten in die IPSShadowing_ProgramTimer Datei in die Schleife die alle Rollos durchgeht und prüft, ob etwas zu erledigen ist eine 1 Sec Pause ein.

Etwa so:

foreach($deviceIds as $deviceId) {
	$device = new IPSShadowing_Device($deviceId);
	$device-&gt;CheckPrograms($profileManager);

sleep(60);
}

Grüße!

ERLEDIGT - da hatte sich noch ein Umlaut versteckt (gibt es dafür ein Fix?)


Hallo Andreas,

vor ca. 2 Wochen habe ich Symcon erfolgreich auf die Version 4.0 ‚upgraded‘ und alles lief bisher ohne Probleme.

Heute Morgen wollte ich dann für einen Rolladen die Zeiten anpassen und dann das Modul neu installieren.

Die Installation bleibt leider hängen mit der Fehlerangabe:

und der Status bleibt auf Installing

Hat jemand einen Tipp für mich, was da passiert und wie ich das am besten fixen kann?

Vorab schon mal Danke für jeden Hinweis.

Gruß
Dieter

Mit 4.1 soll die Lösung kommen. Ich bin auch gespannt ob das hilft.

Moin, kann mir jemand bitte den letzten Stand erklären, wie genau die Profile kombiniert werden ? Ich habe folgendes eingerichtet:

1.) Temperatur innen/außen
2.) Sonnenstand

wenn 1 UND 2 aktiv sind, fährt das Rollo wie erwartet runter. Ist dann aber im Laufe des Tages Profil 2 inaktiv und aufgrund der Hitze 1 noch aktiv, fährt das Rollo aber nicht hoch, ist das so beabsichtigt ? Eigentlich hätte ich erwartet, dass das Rollo hochfährt, wenn 1 ODER 2 nicht mehr aktiv sind. Ob es klappt, wenn 1 UND 2 nicht mehr aktiv sind, kann ich nicht sagen - so lange habe ich es nie ausgehalten und die Rollos dann doch manuell hochgefahren.

In diesem Thread lauern mehrere Workarounds - aber welcher genau hilft mir da am besten ?

Dank und hitzige Grüße,
Tom

Hallo Andreas,

ich bin gerade dabei meine Jalousiesteuerung in IPSymcon selbst zu bauen (eine abgespeckte Version, die wenig Variablen verbraucht, genau auf meine Bedürfnisse angepasst).

Ich würde gerne die Grafiken Sonnenstand in IPSView einbinden. Die Grafiken die du generiert hast sind klasse, womit hast du die denn gemacht? Kannst du mir einen Tipp geben, wie ich die in IPSView am besten einbinde, ohne IPSShadowing als Library komplett zu installieren?

Die Daten zu den Sonnstandsdiagrammen habe ich, bzw. kann ich mit 2 Scripten selbst ermitteln.

Danke für deine Hilfe.

Viele Grüße Alexander

Hi,

Grafiken werden mit der GD Library von PHP erstellt, siehe http://php.net/manual/de/book.image.php

Den Code von IPSShadowing findest Du im File IPSShadowing_Azimuth.inc.php
Der Code ist glaub ich relativ unabhängig von der Library und sollte gut zu übernehmen sein …

Dies würde mich auch Interessieren.

Danke.

Ist leider recht komplex zu implementieren, arbeite mit einer gedämpften T-Variable (Mittelwert aus 5 Messungen) erfüllt den Ersatz der Hysterese recht gut.
Beste Grüße
hoep

Gesendet von iPad mit Tapatalk