IPSShadowing - eine Beschattungssteuerung

Hallo,

welche Sensoren verwendet Ihr mit der Beschattungssteuerung??? Bitte nach Möglichkeit Hersteller, Typ und Messbereiche nennen.

Gruß Proxima

Hi,

die wesentliche Programmlogik ist in der Function CheckProgrKlasse IPSShadowing_Device zu finden:


    // ----------------------------------------------------------------------------------------------------------------------------
    public function CheckPrograms($profileManager) {
      $deviceName        = IPS_GetIdent($this->deviceId);
      $profileIdTemp     = GetValue(IPS_GetObjectIDByIdent(c_Control_ProfileTemp, $this->deviceId));
      $profileIdSun      = GetValue(IPS_GetObjectIDByIdent(c_Control_ProfileSun, $this->deviceId));
      $profileIdBgnOfDay = GetValue(IPS_GetObjectIDByIdent(c_Control_ProfileBgnOfDay, $this->deviceId));
      $profileIdEndOfDay = GetValue(IPS_GetObjectIDByIdent(c_Control_ProfileEndOfDay, $this->deviceId));
      $profileIdWeather  = null;
      $programPresent    = GetValue(IPS_GetObjectIDByIdent(c_Control_ProgramPresent, $this->deviceId));
      $programTemp       = GetValue(IPS_GetObjectIDByIdent(c_Control_ProgramTemp, $this->deviceId));
      $programDay        = GetValue(IPS_GetObjectIDByIdent(c_Control_ProgramDay, $this->deviceId));
      $programNight      = GetValue(IPS_GetObjectIDByIdent(c_Control_ProgramNight, $this->deviceId));
      $programWeather    = null;
      $automaticActive   = GetValue(IPS_GetObjectIDByIdent(c_Control_Automatic, $this->deviceId));
      $tempIndoorPath    = $this->GetPropertyValue(c_Property_TempSensorIndoor);

      $controlId = @IPS_GetObjectIDByIdent(c_Control_ProfileWeather, $this->deviceId);
      if ($controlId!==false) {
        $profileIdWeather  = GetValue($controlId);
        $programWeather    = GetValue(IPS_GetObjectIDByIdent(c_Control_ProgramWeather, $this->deviceId));
      }

      $isDay               = $profileManager->IsDay($profileIdBgnOfDay, $profileIdEndOfDay);
      $isDayNightChange    = $profileManager->IsDayNightChange($profileIdBgnOfDay, $profileIdEndOfDay);
      $closeByTemp         = $profileManager->CloseByTemp($profileIdSun, $profileIdTemp, $tempIndoorPath);
      $shadowingByTemp     = $profileManager->ShadowingByTemp($profileIdSun, $profileIdTemp, $tempIndoorPath);
      $openByTemp          = $profileManager->OpenByTemp($profileIdSun, $profileIdTemp, $tempIndoorPath);
      $activationByWeather = $profileManager->ActivationByWeather($profileIdWeather);


      // Reset Manual Change Flag
      if ($isDayNightChange) {
        if (GetValue(IPS_GetObjectIDByIdent(c_Control_ManualChange, $this->deviceId))) {
          IPSLogger_Dbg(__file__, "Reset ManualChange Flag for Device '$deviceName'");
          SetValue(IPS_GetObjectIDByIdent(c_Control_ManualChange, $this->deviceId), false);
        }
        if (GetValue(IPS_GetObjectIDByIdent(c_Control_TempChange, $this->deviceId))) {
          IPSLogger_Dbg(__file__, "Reset TempChange Flag for Device '$deviceName'");
          SetValue(IPS_GetObjectIDByIdent(c_Control_TempChange, $this->deviceId), false);
        }
      }

      $changeByTemp      = GetValue(IPS_GetObjectIDByIdent(c_Control_TempChange, $this->deviceId));
      $changeByUser      = GetValue(IPS_GetObjectIDByIdent(c_Control_ManualChange, $this->deviceId));

      // Check all Programs
      // --------------------------------------------------------------------------------
      // Automatic Off ...
      if (!$automaticActive) {
        $programInfo = 'Automatic Off';

      // Activation by Wind/Rain
      } elseif ($activationByWeather and $programWeather<>c_ProgramId_Manual) {
        $programInfo = 'Wetterprogramm';
        $this->MoveByProgram($programWeather, 'Wetterprogramm');

      // Manual Change ...
      } elseif ($changeByUser) {
        $programInfo = 'Manuelle Änderung';

      // Custom
      } elseif (IPSShadowing_ProgramCustom($this->deviceId, $isDay)) {
        $programInfo = 'CustomProgram';
        // Action done in Custom Procedure

      // Present ...
      } elseif ($profileManager->GetPresent() and $programPresent==c_ProgramId_OpenedDay and $isDay) {
        $programInfo = 'Anwesenheit (Tag)';
        $this->MoveByProgram($programPresent, 'Anwesenheitsprogramm');
      } elseif ($profileManager->GetPresent() and $programPresent==c_ProgramId_OpenedNight and !$isDay) {
        $programInfo = 'Anwesenheit (Nacht)';
        $this->MoveByProgram($programPresent, 'Anwesenheitsprogramm');
      } elseif ($profileManager->GetPresent() and $programPresent==c_ProgramId_Opened) {
        $programInfo = 'Anwesenheit';
        $this->MoveByProgram($programPresent, 'Anwesenheitsprogramm');
      } elseif ($profileManager->GetPresent() and $programPresent==c_ProgramId_MovedOutTemp and $isDay and $closeByTemp) {
        $programInfo = 'Anwesenheit (Temperatur)';
        $this->MoveByProgram($programPresent, 'Anwesenheitsprogramm (Beschattung bei Temp und Anwesenheit)');

      // Temperature/Sun
      } elseif ($isDay and ($closeByTemp or $shadowingByTemp) and $programTemp<>c_ProgramId_Manual) {
        if ($closeByTemp) {
          $programInfo = 'Temperatur';
          $this->MoveByProgram($programTemp, 'Temperaturprogramm', true/*DimoutOption*/, true/*TriggeredByTemp*/);
        } elseif ($changeByTemp) {
          $programInfo = 'Temperatur (Warte Öffnen)';
        } elseif ($shadowingByTemp) {
          $programInfo = 'Temperatur (Beschattung)';
          $this->MoveByProgram($programTemp, 'Temperaturprogramm (Beschattung)', false/*DimoutOption*/, true/*TriggeredByTemp*/);
        } else {
          $programInfo = 'Temperatur (Error)';
        }

      // Day
      } elseif ($isDay) {
        if (!$openByTemp and $changeByTemp) {
          $programInfo = 'Tag (Warte Öffnen)';
        } elseif ($openByTemp and $changeByTemp) {
          SetValue(IPS_GetObjectIDByIdent(c_Control_TempChange, $this->deviceId), false);
          if ($programDay<>c_ProgramId_Manual) {
            $programInfo = 'Temperatur Reset (Tag)';
            $this->MoveByProgram($programDay, 'Temperatur Reset (Tag)');
          } else {
            $programInfo = 'Temperatur Reset (LastPosition)';
            $this->MoveByProgram(c_ProgramId_LastPosition, 'Temperatur Reset (LastPosition)');
          }
        } else {
          $programInfo = 'Tagesprogramm';
          $this->MoveByProgram($programDay, 'Tagesprogramm');
        }
        
      // Night
      } else {
        $programInfo = 'Nachtprogramm';
        $this->MoveByProgram($programNight, '"Nachtprogramm"');
      }
      $profileInfo = $profileManager->GetProfileInfo($profileIdBgnOfDay, $profileIdEndOfDay, $profileIdTemp, $tempIndoorPath);
      $deviceName = IPSShadowing_GetDeviceName($this->deviceId);
      echo "$deviceName -> $programInfo, $profileInfo 
";
      SetValue(IPS_GetObjectIDByIdent(c_Control_ProfileInfo, $this->deviceId), $programInfo.', '.$profileInfo);
    }
  }

die benötigten Profil Infos werden über den ProfileManager gemapped.

CloseByTemp = CloseByTemp + CloseByBrightness + Sun
OpenByTemp = OpenByTemp

Im Zweifel immer mal das Script IPSShadowing_ProgramTimer manuell ausführen, das zeigt einem dann in der Konsole, welcher Zweig gerade aktiv ist.

Wenn alle Parameter von OpenByTemp auf IGNORE stehen, dann sollte die Beschattung auch wieder aufgehen, sobald das TempProfil nicht mehr aktiv ist!

Hallo,

mir geht es hauptsächlich um den Helligkeitssensor. Welchen nutzt Ihr in Zusammenhang mit dieser wunderbaren Beschattungssteuerung???

Gruß Proxima

Hallo,

ich habe ein probleem mit ein markies, der fahrt ubertag bei sonne auf und nach eine weile wieder nach unter.
ich wil nur das der mit die sonnestand und helligheit functioniert.

ich habe ein par bilder dabei. das nach unter fahren komt durch das temperatur einstellung (aber da mach ich nur die helligheit einstellung)

ich denke das ich ein erzugerung zeit mit helligheitsensor mus einstellen aber geht das?

ich habe C-comfort actor fur markies und wetterstation fon Eib.

Ron

Hi,

Hier mal eine Möglichkeit, wie man für den Helligkeitssensor eine Hysterese Realisieren kann. Der Code stammt eigentlich von Kollege Spawn, der hatte die Änderung aber leider nie veröffentlicht…

Folgenden Code im File IPSShadowing_ProfileTemp.class.php (Zeile 96)


   if (IPSSHADOWING_BRIGHTNESSSENSOR <> '') {
      $this->brightnessValue  = round(GetValue(IPSUtil_ObjectIDByPath(IPSSHADOWING_BRIGHTNESSSENSOR)),1);
      $this->activationByBrigthness = ($this->brightnessValue>=$this->brightnessLevel);
   }

durch folgenden Code ersetzen:


    if (IPSSHADOWING_BRIGHTNESSSENSOR <> '') {
       $this->brightnessValue  = round(GetValue(IPSUtil_ObjectIDByPath(IPSSHADOWING_BRIGHTNESSSENSOR)),1);
       $profileActive=GetValue(IPS_GetObjectIDByIdent(c_Control_ProfileInfo, $this->instanceId));
       $this->brightnessValueHystheresis = !(strpos($profileActive,"inaktiv")>0)*round($this->brightnessLevel*0.12,1);   /* Hysteresis: 12 percent from absolute Brightness Value */
       $this->activationByBrigthness = ($this->brightnessValue>=($this->brightnessLevel-$this->brightnessValueHystheresis));
    }  

Falls es jemand erfolgreich testen konnte, dann bitte um Rückmeldung, damit ich es in die Library integrieren kann.

Hallo,

nutzt eigentlich irgend jemand einen Helligkeitssensor in Verbindung mit dieser Beschattungssteuerung ???

Gruß Proxima

Hallo,

ja ich nutz dem fur die markies im wohnzimmer.

Ron

Mit Hilfe der vielen Beiträge hier im Forum und der Wiki Beschreibung habe ich es geschafft IPSShadowing zu installieren und einzurichten. Leider bekomme ich bei jeder Eingabe im Webfront folgende Fehlermeldung. DA ich mit IPS och nicht so vertraut bin, kann ich diese Meldung nicht einordnen bzw. beheben. Kann mir jemand helfen?

Was ist die #26156-Instanz ? Die :1, oder die STATE-Variable ?

Hallo Andreas

Ich bekomme immer folgende Fehlermeldung im Script IPSShadowing_ProgramTimer.

Abort Processing during Error: Undefined offset: 36066
Error in Script
IPSShadowing_ProfileManager.class.php on Line 219

welche folgenden Code enthaelt:

	
218	public function IsDay($profileIdBgnOfDay, $profileIdEndOfDay) {
219	$profileBgnOfDay = $this->profilesBgnOfDay[$profileIdBgnOfDay];
220	$profileEndOfDay = $this->profilesEndOfDay[$profileIdEndOfDay];
221	return  (time() > $profileBgnOfDay->GetTime() and  time() < $profileEndOfDay->GetTime());
223	}

Hast Du eventuell eine Ahnung was/wo der Fehler sein koennte ?

Hallo Andy,

ich kanns Dir leider nicht genau sagen, aber es sieht so aus, als ob beim Anlegen eines Deiner Profile was schief gelaufen ist (oder auch beim Löschen eines Profiles)!
Löschen und Neuanlagen des Profiles sollte Dein Problem beheben.

Hintergrund: Beim Anlegen eines neuen Profiles werden auch automatisch die zughörigen IPS Variablen Profile modifiziert. Das passiert auch beim Löschen und falls das zu löschende Profile gerade von einem Device verwendet wird, dann sollte automatisch ein anderes verwendet werden.

Am besten, Du startest das Script IPSShadowing_ProgramTimer mal manuell und sieht Dir in der Konsole an, bei welchem Device der Fehler auftritt. Dort kannst Du dann bei dem fehlerhaften Device das entsprechende Profil korrigieren …

Hi Andreas

Habe mal alle Profile gelöscht und neue angelegt, aber keine Veränderung.

Anbei ein Screenshot was in der Konsole angezeigt wird.

Es sieht fuer mich als Laie sieht es so aus, dass es irgendwo in der IPSShadowing_Device.class.php (call Is Day) liegt.

Wie Du weisst, habe ich probiert alles in Englisch zu übersetzten, aber auf einem anderen Rechner wo noch alles original in DE ist tritt die gleiche Fehlermeldung auf.

Hallo Andreas

Ich habe noch ein weiteres Problem mit den EnOcean Eltako Shutter Devices.

Ich habe hier ein paar Eltako Jalousie Aktuatoren, die nicht so richtig mit IPSShadowing wollen. Die Aktuatoren sind via Eltako Switch eingelernt und bekommen auch einwandfrei Ihren Rueckkanal. Steuere ich einen der Aktuatoren via extern eingelernten Switch und/oder Thermokon Thanos Panel sehe ich die Aenderung in der Status Variable, bekomme aber kein Feedback in IPSShadowing.

D.h. steuere ich den Aktuator von extern (Switch/Thanos) aendert sich, die durch Dein Script generierte Variable „IsRunning“ nicht, obwohl sie es sollte. Ein Stop Befehl funktioniert auch nicht bzw. wird ignoriert.

Ich bin gerade auf der letzen V 3.0, aber auch mit der letzten Stable Version 2.7.xxxx geht es nicht.

Hast Du irgend einen Tip oder Idee ?

Guten Tag,

irgendwie komme ich nicht weiter, ich finde nicht die Stelle an der man die Himmelsrichtung für jedes einzelne Fenster (Rollladen) angeben kann. Die Laufzeiten für Öffnung usw. ist schon klar, auch die Ausrichtungs Profile für das Gebäude habe ich gefunden. Was mir fehlt ist die Verbindung zwischen den Beiden, als wo im Haus befindet sich welches Fenster.

Bitte um Hilfe.

Gruß
Frank

@ Powerfreddy,

Die ID-26156 ist das Modul für die Shutter Control in der Homematic. Die Shutter fahren, jedoch kommt die bereits oben beschriebene Warning Meldung. Habe den entsprechend Auszug aus dem Ojektbaum angehangen.

Gruß
Peer

Die Meldung kommt, weil das Shutter-Modul keine Level-Variable kennt. Allerdings brauchst Du das Modul auch nicht. Homematic geht direkt. Die :1 Instanz des jeweiligen Aktors als ID.

Gruß
Bruno

@Powerfreddy,

Vielen Dank für den Hinweis. Nachdem ich die Shutter Module gelöscht habe und im config Skript direkt die ID der Homematic Komponente gewählt habe, funktioniert es einwandfrei.

Gruß
Peer

Halo Frank,

ich bin zwar noch nicht lange hier, aber die Einstellungen für die einzelnen Fenster machst du im Beschattungs Element unter Sonnenstandsprofil. Vorher mußt du unter Profile-Sonnenstand die einzelnen (Profile) Richtungen erstellen, dann geht es auch.

Gruß Rene

Hallo Andy,

Autom. Synchronisierung ist derzeit nur für Homematic implementiert - einfach aus dem Grund, dass ich selber Homematic einsetze und es dadurch testen konnte.
Rückmeldungung für andere Hardware ist relativ leicht möglich, es muss die IPSShadowing_Installation entsprechend erweitert werden und auch die IPSComponentShutter_xxxx muss dieses Feature implementiert haben.
Mir fehlt bei Enocan noch das entsprechende Grundwissen, wenn Du mal einen Screenshot von einer Instanz einstellst, dann kann ich Dir eventuell was implementieren. Für eine Implementierung brauche ich die Info wie sich die Variable nennt, die die Position des Shutter Devices enthält.

Hallo René vielen Dank

eine Frage habe ich noch, ich wollte meine Rollladen-Instanzen jetzt in die Config Datei eintragen und dachten ich würde sie dann im Webfront sehen.
Leider sehe ich aber nur die drei Elemente die schon von der Installation her vorhanden sind.

Was mache ich denn hier falsch?

Gruß
Frank