IPSShadowing - eine Beschattungssteuerung

Das Thema Türkontakt wollte ich gerade hier eintragen, da las ich den letzten Eintrag. Gibt hierzu bereits Lösungsansätze?

Ich hatte grob überlegt, ob ich eine Art Dummy-Instanz anlege und diese dann in das IPSShadowing-Modul als Aktor-ID im Configskript für die Tür-Rolllade eintrage.
Und dann hatte ich überlegt ob eine Art Skript den offenen Türzustand abfragt und die Schaltung (Rolllade runter) dann blockiert. Das würde dann aber immer der Fall sein. Aber ich würde diese Verschlusssperre nur im Automatik-Modus haben wollen und nicht, wenn die Beschattungselemente manuell gefahren werden.

Hat hier jemand eine Idee, wie man das lösen könnte?

Hallo,

ich habe das wie folgt gelöst:

In der Datei „IPSShadowing_Custom“ die Funktion ergänzt.
Bei mir sind da auch noch für alle Rolläden unterschiedliche Delays drin, da mein Digitalstrom nicht so viele Nachrichten auf dem Bus gleichzeitig verträgt.

Ich lese den Status des Fenstersensor an der Terrassentür, wenn diese geöffnet ist bleiben die beiden Rolläden zur Terrasse oben.


function IPSShadowing_BeforeActivateShutter($deviceId, $command) {
	
	   $status = GetValueInteger(10260);
	   if ($status == 2 and ($deviceId == 37231 or $deviceId == 43841)) {
	      return false;
	   }
}

Gruß
Christian

Guter Hinweis, werde ich mal testen, danke!

Ich habe es wie folgt probiert. Leider erfolglos!

		function IPSShadowing_BeforeActivateShutter($deviceId, $command) { 
     
       $status = GetValueBoolean(21252 /*[Erdgeschoss\Wohn-/Kochbereich\Türkontakt_EG_Gartentür\STATE]*/); 
       if ($status == true and ($deviceId == 30692)) { 
          return false; 
       } 
	   return true;

die Device-ID habe ich aus der Config übernommen:

c_Property_Component        => 'IPSComponentShutter_Homematic,30692 /*[Erdgeschoss\Wohn-/Kochbereich\Rolladenaktor_WHZ_Gartentür]*/',

Der Türkontakt ist ein Homematic-Fensterkontakt. Ich habe statt „true“ auch mal „1“ probiert. Leider erfolglos. Die Rolllade fährt auch, wenn die Tür auf ist.

Hallo,

ich glaube, Dein „return true“ gehört in den ELSE-Zweig.

 function IPSShadowing_BeforeActivateShutter($deviceId, $command) {  
      
       $status = GetValueBoolean(21252 /*[Erdgeschoss\Wohn-/Kochbereich\Türkontakt_EG_Gartentür\STATE]*/);  
       if ($status == true and ($deviceId == 30692))
         {
          return false;  
         }
       else
         {
          return true;
         }

Gruß Proxima

Habe ich ergänzt. Klappt auch nicht. Im Messagefile kann ich leider auch nichts erkennen.

Dann Bau doch Mal ein Echo ein, welchen Zweig er geht.
Vielleicht stimmt die DeviceID nicht

Bin unterwegs, kann also leider nicht schauen

Hallo,

hab das etwas anders gelöst mit dem Fensterkontakt.

Sobald das Fenster geöffnet wird, wird die Automatik ausgeschalten und der Rolladen fährt hoch. Bei der Terrassentür immer komplett hoch, bei den Fenstern „auf Lücke“ wenn es schon Nacht ist, am Tag komplett. Hat den Vorteil, dass wenn ich mal auf die Terasse will, nicht erst den Rollladen hoch fahren muss, der fährt allein hoch sobald ich den Türgriff aufmache.

Dazu der Code:


<?
IPSUtils_Include("IPSShadowing.inc.php", "IPSLibrary::app::modules::IPSShadowing");
IPSUtils_Include("IPSLogger.inc.php", "IPSLibrary::app::core::IPSLogger");

if ($_IPS['SENDER'] == 'Variable'){
	//Terrassentür, Device7
	if ($_IPS['VARIABLE'] == 25473 /*[Hardware\Homematic-Wired\HMW-Sen-SC-12-DR HEQ0103004\TFK_Terrassentuer\SENSOR]*/){
		$zustand = GetValue($_IPS['VARIABLE']);
		$deviceId = 41532 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device7]*/ ;
	   	$manual = 38342 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device7\ManualChange]*/ ;
	   	$automatik = 55316 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device7\Automatic]*/ ;
		$fullopen = true;
		switchState($zustand, $deviceId, $manual, $automatik, $fullopen);
	}
	//Schlafzimmer, Device8
	if ($_IPS['VARIABLE'] == 58453 /*[Hardware\Homematic-Wired\HMW-Sen-SC-12-DR HEQ0103004\TFK_Schlafzimmer\SENSOR]*/){
		$zustand = GetValue($_IPS['VARIABLE']);
		$deviceId = 28630 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device8]*/ ;
	   	$manual = 22709 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device8\ManualChange]*/ ;
	   	$automatik =  57288 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device8\Automatic]*/ ;
		$fullopen = false;
		switchState($zustand, $deviceId, $manual, $automatik, $fullopen);
	}
}

//ab hier nichts ändern

function switchState($zustand, $deviceId, $manual, $automatik, $fullopen){
	IPS_Sleep(500); //Warten
	switch($zustand){
    	case 0 /*Geschlossen*/:
        	$profileManager = new IPSShadowing_ProfileManager();
            $profileManager->UpdateProfileInfos();
            $device = new IPSShadowing_Device($deviceId);
            $device->ChangeSetting($manual, false);
            $device->ChangeSetting($automatik, true);
            $device->CheckPrograms($profileManager);
        break;
		case 1 /*Geöffnet*/:
			$profileManager = new IPSShadowing_ProfileManager();
            $profileManager->UpdateProfileInfos();
			$device = new IPSShadowing_Device($deviceId);
            $device->ChangeSetting($automatik, false);
            $device->ChangeSetting($manual, true);
            $device->CheckPrograms($profileManager);
            if (GetValue(16905 /*[Location\Ist es Tag]*/) == true){
				$device = $device->MoveByControl(c_MovementId_Opened);
			}else{	
				if ($fullopen == true){
					$device = $device->MoveByControl(c_MovementId_Opened);
				}else{
					$device = $device->MoveByControl(c_MovementId_90);
				}
			}
	    break;
    }
}
?>

Vielleicht hilft es jemandem.

Grüße

Hab ich bei uns mit Hoppe Türgriff (EnOcean) und Jalousie (KNX) so gelöst:

<?php

IPS_Sleep(1000); //Warten, damit die Automatik nicht kurz aktiviert wird, wenn man von geschlossen auf gekippt stellt.

IPSUtils_Include('IPSShadowing.inc.php', 'IPSLibrary::app::modules::IPSShadowing'); 
 
$deviceID = 14980 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device7]*/; 
$automatik = 42280 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device7\Automatic]*/; 
$manual = 32413 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device7\ManualChange]*/; 
$zustand = GetValueInteger(40935 /*[EnOcean\Türgriff Essen\Status]*/); 

$profileManager = new IPSShadowing_ProfileManager(); 
$profileManager->UpdateProfileInfos(); 
$device = new IPSShadowing_Device($deviceID); 

switch($zustand){ 
	//geschlossen
	case 1: 
		$device->ChangeSetting($manual, false); 
		$device->ChangeSetting($automatik, true); 
		$device->CheckPrograms($profileManager);
	break; 

	//gekippt   
	case 3:
		$device->ChangeSetting($manual, false); 
		$device->ChangeSetting($automatik, true); 
		$device->CheckPrograms($profileManager);	
	break; 

	//geöffnet
	case 0:
	case 2: 
		$device->ChangeSetting($manual, true); 
		$device->ChangeSetting($automatik, false); 
		$device->CheckPrograms($profileManager);
		$device = $device->MoveByControl(c_MovementId_Opened);
	break;
}

?>

Das Skript wird bei Variablenaktualisierung der Statusvariable des Türgriffs ausgeführt.

Damit wird die Jalousie auf Automatik gestellt, wenn der Griff nach unten oder oben steht. Wenn er auf geöffnet steht, fährt die Jalousie für die Tür hoch. Wenn man von geschlossen auf gekippt stellt, bleibt die Automatik an aufgrund des IPS_Sleep(1000) am Anfang des Skripts.

Wow, das sind gute Ideen! Danke!

@user813:
Hast du den Code in der IPSCustom eingefügt oder ist ein eigenständiges Skript, welches durch Variablenänderung des Türkontaktes ausgelöst wird?

Seit dem neusten update für die 5.0 Version von IPS hab ich das Problem, dass die Rolläden nie die Position 0% oder 100% erreichen…

Beispiel Tagesbeginn auf OFFEN alle fahren hoch und auch auf Endanschlag , aber Position ist zwischen 3 und 6 % bei allen

das selbe bei GESCHLOSSEN, da stehen dann alle Positionen zwischen 94% und 96% … also nicht 100 %

einer eine Idee ???

@michel

Zweiteres, also eigenständiges Skript durch die Fensterkontakte ausgelöst.

Gesendet von meinem HUAWEI VNS-L31 mit Tapatalk

@muckel

hab das auch bei einer meiner Beschattungen, muss mit einem Rundungsproblem und einer meiner letzten Bugfixes zusammenhängen. Auf die Schnelle konnte ich das Problem aber nicht finden, werde mir das aber in den nächsten Tagen nochmals genauer ansehen.

Das Skript von user183 ist echt mein Favorit. Ich habe es soweit implementiert. Das Swtichen der Manualfunktion im Webfront von „an“ auf „aus“ und zurück, je nach dem, ob die Tür auf oder zu ist, funktioniert super. Nur der Automatik-Funktions-Wechsel läuft nicht. Auf der Suche nach der Ursache habe ich im Meldungsfenster gesehen, dass ich generell ein paar Fehler bei der Ausführung des Moduls habe…
Das Kernproblem scheint aber zu sein, dass alle Skripte von IPSLogger nicht verfügbar sind. Sie werden zwar in der Listenansicht dargestellt, aber beim Doppelklick kommt „… konnte nicht gefunden werden…“ Ein Modulupdate brachte auch nichts. Dann habe ich das Modul gelöscht und wollte es neu installieren. Ich glaube damit habe ich mir richtig was zerschossen…

Versuche IPSLogger jetzt erstmal wieder hinzubekommen.

So, läuft wieder. Baseloader erneut ausgeführt, dann war alles wieder da. Auch die Skripte von IPSLogger sind wieder gefüllt. Ich habe dennoch folgende Fehlermeldungen in IPSShadowing, mit denen ich nichts anfangen kann. Kann mich da jemand aufklären?

Vielen Dank im Voraus.

16.08.2018 00:05:06 | ScriptEngine | Ergebnis für Ereignis 11258
<br />
<b>Warning</b>:  Objekt mit Ident ManualChange wurde nicht gefunden in <b>/var/lib/symcon/scripts/IPSLibrary/app/modules/IPSShadowing/IPSShadowing_Device.class.php</b> on line <b>625</b><br />
<br />
<b>Warning</b>:  Variable #0 existiert nicht in <b>/var/lib/symcon/scripts/IPSLibrary/app/modules/IPSShadowing/IPSShadowing_Device.class.php</b> on line <b>625</b><br />
<br />
<b>Warning</b>:  Objekt mit Ident StepsToDo wurde nicht gefunden in <b>/var/lib/symcon/scripts/IPSLibrary/app/modules/IPSShadowing/IPSShadowing_Device.class.php</b> on line <b>78</b><br />
<br />
<b>Fatal error</b>:  Uncaught Exception: Variable StepsToDo could NOT be found for DeviceId=30692 in /var/lib/symcon/scripts/IPSLibrary/app/modules/IPSShadowing/IPSShadowing_Device.class.php:80
Stack trace:
#0 /var/lib/symcon/scripts/IPSLibrary/app/modules/IPSShadowing/IPSShadowing_Device.class.php(100): IPSShadowing_Device->GetVariableValue('StepsToDo')
#1 /var/lib/symcon/scripts/IPSLibrary/app/modules/IPSShadowing/IPSShadowing_Device.class.php(630): IPSShadowing_Device->SetStatus()
#2 /var/lib/symcon/scripts/17805.ips.php(35): IPSShadowing_Device->ChangeSetting(28340, false)
#3 /var/lib/symcon/scripts/17805.ips.php(13): switchState(false, 30692, 28340, 24112, true)
#4 {main}
  thrown in <b>/var/lib/symcon/scripts/IPSLibrary/app/modules/IPSShadowing/IPSShadowing_Device.class.php</b> on line <b>80</b><br />
Abort Processing during Fatal-Error: Uncaught Exception: Variable StepsToDo could NOT be found for DeviceId=30692 in /var/lib/symcon/scripts/IPSLibrary/app/modules/IPSShadowing/IPSShadowing_Device.class.php:80
Stack trace:
#0 /var/lib/symcon/scripts/IPSLibrary/app/modules/IPSShadowing/IPSShadowing_Device.class.php(100): IPSShadowing_Device->GetVariableValue('StepsToDo')
#1 /var/lib/symcon/scripts/IPSLibrary/app/modules/IPSShadowing/IPSShadowing_Device.class.php(630): IPSShadowing_Device->SetStatus()
#2 /var/lib/symcon/scripts/17805.ips.php(35): IPSShadowing_Device->ChangeSetting(28340, false)
#3 /var/lib/symcon/scripts/17805.ips.php(13): switchState(false, 30692, 28340, 24112, true)
#4 {main}
  thrown
   Error in Script /var/lib/symcon/scripts/IPSLibrary/app/modules/IPSShadowing/IPSShadowing_Device.class.php on Line 80

Habe heute mal das Update auf 5.0 gemacht.
Leider funktioniert alles was über den Homepilot läuft nicht mehr.
Beim Anklicken der Instanz bekomme ich folgende Fehlermeldung:

Homepilot_Error.JPG

Auch beim Anlegen einer neuen I/O-Instanz die gleiche Meldung.

Ist das überhaupt für V 5.0 schon angepasst bzw. was mache ich falsch?

VG, Roland

Hallo Zusammen,

ich versuche immer noch den Fehlermeldungen auf den Grund zu gehen:

18.08.2018 07:31:17 | ScriptEngine | Ergebnis für Ereignis 11258
Warning: Objekt mit Ident TemperatureChange wurde nicht gefunden in /var/lib/symcon/scripts/IPSLibrary/app/modules/IPSShadowing/IPSShadowing_Device.class.php on line 620

Warning: Variable #0 existiert nicht in /var/lib/symcon/scripts/IPSLibrary/app/modules/IPSShadowing/IPSShadowing_Device.class.php on line 620

Die Line 620 in ipsshadowing_Device Skript sieht so aus:

	public function ChangeSetting($controlId, $value) {
			if (GetValue($controlId)<>$value) {
				if (IPS_GetIdent($controlId)==c_Control_Automatic) {
// Ab hier beginnt line 620:
					if (GetValue(IPS_GetObjectIDByIdent(c_Control_TempChange, $this->deviceId))) {
						SetValue(IPS_GetObjectIDByIdent(c_Control_TempChange, $this->deviceId), false);
					}
				} else {
				}
				if (GetValue(IPS_GetObjectIDByIdent(c_Control_ManualChange, $this->deviceId))) {
					SetValue(IPS_GetObjectIDByIdent(c_Control_ManualChange, $this->deviceId), false);
				}
				SetValue($controlId, $value);
				IPSShadowing_LogChange($this->deviceId, $value, $controlId);
				$this->SetStatus();
			}
		}

Was kann ich machen, um den Fehler weiter einzugrenzen. Hat jemand Ansätze, wie ich hier weiter vorgehen kann?

Ist das überhaupt ein Fehler in IPSShadowing Skript oder könnte es it dem Update auf IPS 5.0 zu tun haben?

Was bedeutet Variable 0# existiert nicht und warum finde ich diese Variable nicht? Für mich klingt das nach einer systeminternen Fehlermeldung, weil sich die ID auch so ungewöhnlich anhört.

Hier zur Vollständigkeit das auslösende Skript. Wobei für mich es so aussieht, dass das nicht der Grund ist.

<?
IPSUtils_Include("IPSShadowing.inc.php", "IPSLibrary::app::modules::IPSShadowing"); 
IPSUtils_Include("IPSLogger.inc.php", "IPSLibrary::app::core::IPSLogger"); 

if ($_IPS['SENDER'] == 'Variable'){ 
    //Terrassentür, Device4 
    if ($_IPS['VARIABLE'] == 21252 /*[Erdgeschoss\Wohn-/Kochbereich\Türkontakt_EG_Gartentür\STATE]*/){ 
        $zustand = GetValue($_IPS['VARIABLE']); 
        $deviceId = 30692 /*[Erdgeschoss\Wohn-/Kochbereich\Rolladenaktor_WHZ_Gartentür]*/ ; 
           $manual = 28340 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device4\ManualChange]*/ ; 
           $automatik = 24112 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device4\Automatic]*/ ; 
        $fullopen = true; 
        switchState($zustand, $deviceId, $manual, $automatik, $fullopen); 
    } 
    //Schlafzimmer, Device5 
    if ($_IPS['VARIABLE'] == 36995 /*[Erdgeschoss\Schlafzimmer\Fensterkontakt_Schlafzimmer\STATE]*/){ 
        $zustand = GetValue($_IPS['VARIABLE']); 
        $deviceId = 17977 /*[Erdgeschoss\Schlafzimmer\Rolladenaktor Schlafzimmer]*/ ; 
           $manual = 28420 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device5\ManualChange]*/; 
           $automatik =  13276 /*[Program\IPSLibrary\data\modules\IPSShadowing\Devices\Device5\Automatic]*/ ; 
        $fullopen = false; 
        switchState($zustand, $deviceId, $manual, $automatik, $fullopen); 
    } 
} 

//ab hier nichts ändern 

function switchState($zustand, $deviceId, $manual, $automatik, $fullopen){ 
    IPS_Sleep(500); //Warten 
    switch($zustand){ 
        case 0 /*Geschlossen*/: 
            $profileManager = new IPSShadowing_ProfileManager(); 
            $profileManager->UpdateProfileInfos(); 
            $device = new IPSShadowing_Device($deviceId); 
            $device->ChangeSetting($manual, false); 
            $device->ChangeSetting($automatik, true); 
            $device->CheckPrograms($profileManager); 
        break; 
        case 1 /*Geöffnet*/: 
            $profileManager = new IPSShadowing_ProfileManager(); 
            $profileManager->UpdateProfileInfos(); 
            $device = new IPSShadowing_Device($deviceId); 
            $device->ChangeSetting($automatik, false); 
            $device->ChangeSetting($manual, true); 
            $device->CheckPrograms($profileManager); 
            if (GetValue(43376 /*[Location Control\Ist es Tag]*/) == true){ 
                $device = $device->MoveByControl(c_MovementId_Opened); 
            }else{     
                if ($fullopen == true){ 
                    $device = $device->MoveByControl(c_MovementId_Opened); 
                }else{ 
                    $device = $device->MoveByControl(c_MovementId_90); 
                } 
            } 
        break; 
    } 
} 
?>

Ich bin für jeden Hinweis dankbar!!!

Hallo zusammen,

habe bei mir folgendes Problem das wenn die Automatik mein Rolladen z.b. am Morgen nach oben fahren lässt dies IPS jedoch im Webront nicht anzeigt was heißt das laut Anzeige im IPS die Rolladen immer noch geschlossen sind.
Ich verwende FS20 Aktoren für das öffnen und schließen und die geben ja keine Rückmeldung.
Jedoch hatte ich bevor ich auf die Beschattungssteuerung hier gestoßen bin dies einfach mit einem Erreignis im jeweiligen Device geregelt und da hat es im Webfront auch Funktioniert.

Kann man das hier irrgend wo einstellen denn das nervige daran ist eig. das wenn man dann die Rolladen z.b. im Sommer mal auf 75% Runter lassen will immer erst nochmal dem Webfront sagen muß das die Rolladen geöffnet sind was heißt alle Öffnen und warten bis die Sec. gezählt sind und alle auf Offen stehen dann erst auf 75%.:banghead:

Hoffe ihr versteht was ich meine :smiley:

Ich habe nun endlich unsere Rollo Beschattung mit HomeMatic Sensoren und IP-Symcon und IPSShadowing optimiert.
Bisher läuft alles prima, selbst mit neuem Symcon 5.

https://mytec-home.de/smart-home/rollosteuerung-mit-licht-temperatursensoren-ueber-ip-symcon

Einzig was mir fehlt, dass ich in den Temperaturprofilen auch unterschiedliche Helligkeitssensoren auswählen kann.

Das Thema werde ich wohl die nächsten Wochen selbst angehen…

Hallo,

wie im letzten Post geschrieben, habe ich IPSShadowing etwas modifiziert, sodass ich nun auch mehrere Temperatur- & Helligkeitssensoren verwenden kann.

Hier ein Screenshot von meinem aktuellen Temperaturprofil, welches ich nun auch wie Sonnenstand in Süd & West benannt habe. Eben mit entsprechender Sensorauswahl.

Soweit scheint alles zu funktionieren und seit gestern schalten die Profile entsprechend den Werten auf in-/aktiv.

Ich habe mir sämtliche Änderungen dokumentiert und werde alles, sofern ich keine Fehlfunktionen mehr feststellen kann, in meinem Blog posten. https://mytec-home.de

Hier und da werde ich auch noch auf ein paar andere Dinge erledigen, so möchte ich z.B.

[ul]
[li]in der Beschattungsanzeige auch die Helligkeit
[/li][li]Positionsangaben sind teilweise ungenau
[/li][li]andere Auffälligkeiten
[/li][/ul]

LG