IPSShadowing - eine Beschattungssteuerung

Auch meine Beschattungssteuerung ist mittlerweile fertig:

Man kann Rolladen und Jalousien in einem Konfigurationsfile definieren und mittels Steuerung eine autom. Beschattung abhängig von Tag, Nacht, Temperatur und Anwesenheit realisieren.

Detailierte Beschreibung von Funktion, Konfiguration und Installation findet im WIKI

Hallo Andreas,

einen großes Kompliment zu deinen Skripten und insbesondere für die Installationsroutinen.

Bezüglich der Beschattung habe ich eine kleine Frage obwohl die eigentlich alle Skripte von Dir betrifft.

In der Konfiguration können ja Sensoren für die erweiterte Steuerung angegeben werden.

Kannst Du mir verraten wie ich z.B. den Temperatursensor aussen richtig eintrage?

Im Screenshot siehst Du den Consolenpfad zu meinem Aussentemperatursensor den ich wie folgt in die IPSShadowing_Configuration.ips.php eingetragen habe.

 define ("c_Setting_TempOutdoorPath", "Terrasse.Wetterstation.Außentemperatur.Temperatur");

Laut meinem Log bekomme ich den Fehler das der Sensor nicht korrekt eingetragen ist.

Hast Du einen Tip für mich was ich hier falsch mache.

Danke im voraus.

Hallo Werner,

da fehlt einfach nur die Instance, so sollte es klappen:


define ("c_Setting_TempOutdoorPath", "Terrasse.Wetterstation.Außentemperatur.Temperatur");  

lg
Andreas

Hi Andreas,

sorry, hatte ich bereits nach dem Erstellen der Nachricht gesehen bringt aber irgendwo auch keine Änderung oder muß ich das Installationsskript neu starten?

Ich gehe davon aus das ich unterhalb der Root-Instanz in der Console mit der Aufzählung beginne.

Neuinstallation ist nicht erforderlich, von root weg stimmt auch.
Sieht alles in Ordnung aus.
Eventuell liegt ja das Problem beim Innentemperatur Sensor, es wird ja immer die Differenz ausgewertet ?

Das selbe Problem habe ich bei der Innentemperatur

 define ("c_Setting_TempIndoorPath",  "Erdgeschoß.Wohnzimmer.Heizung.Klimawerte.Temperatur");

Hier der PHP-Fehler dazu.

Halt, habe den Fehler gefunden - ist ein Bug!

die verwendete Funktion wertet nur Kategorien aus:


	// ----------------------------------------------------------------------------------------------------------------------------
   function get_IdByPath($Path) {
      if ($Path=="") {
         return false;
      }
		$NameList     = explode('.',$Path);
		$VariableId   = false;
		$ParentId     = 0;
		foreach ($NameList as $Idx=>$Name) {
		   if ($Idx < count($NameList)-1) {
	   		$ParentId = IPS_GetCategoryIDByName($Name, $ParentId);
			} else {
	   		$VariableId = IPS_GetVariableIDByName($Name, $ParentId);
	   	}
		}
		return $VariableId;
	}

die Routine im Installer macht es richtig:


	// ----------------------------------------------------------------------------------------------------------------------------
	function get_ObjectIDByPath($Path) {
		$CategoryList = explode('.',$Path);
		$ObjId = 0;
		foreach ($CategoryList as $Idx=>$Category) {
		   $ObjId = IPS_GetObjectIDByName($Category, $ObjId);
		   if ($ObjId==null) die("'$Category' could NOT be found !!!");
		}
		return $ObjId;
	}

lg
Andreas

Und natürlich auch beim Sunrise/Sunset.

Hier könnte es aber am Var-Typ STRING liegen oder am Leerzeichen im Pfad.

 // Twillight Configuration
 define ("c_Setting_TwilightBODPath",   "Tools.Sunrise Sunset.SUNRISE");
 define ("c_Setting_TwilightEODPath",   "Tools.Sunrise Sunset.SUNSET");
 define ("c_Setting_TwilightLimitedBODPath", "");
 define ("c_Setting_TwilightLimitedEODPath", "");

ja genau, da liegts am ObjectType Script, Blank sollte kein Problem sein

Das heißt jetzt.

Was soll ich machen?

Ersetze mal die Funktion get_IdByPath im File IPSShadowing_Control.ips.php mit folgender:


	// ----------------------------------------------------------------------------------------------------------------------------
   function get_IdByPath($Path) {
      if ($Path=="") {
         return false;
      }
		$CategoryList = explode('.',$Path);
		$ObjId = 0;
		foreach ($CategoryList as $Idx=>$Category) {
		   $ObjId = IPS_GetObjectIDByName($Category, $ObjId);
		   if ($ObjId==null) return false;
		}
		return $ObjId;
	}

lg
Andreas

Vielleicht noch ein Feature das ich mir wünschen würde…

…könnte man einen Offset in Minuten für das Wochenende und Feiertage einbauen wann z.B. die Rollläden höchfahren. Möchte ja am Wochenende und an den Feiertagen ein wenig länger schlafen :slight_smile:

Bezüglich des Fehler. Nach Änderung der Function habe ich keine Fehler mehr von den Sensoren und der Sunrise/Sunset bekommen, sieht als gut aus.

Danke für die prompte Unterstützung.

Noch eine Frage.

Wenn ich einen neuen Aktor hinzufüge muss ich dann das Installationsskript neu starten und wenn ja gibt es dann Komplikationen?

Ja, wenn Du ein neues Device hinzufügst ist eine erneutes Ausführen des Installationsscriptes erforderlich. Komplikationen sind nicht zu erwarten.

Eventuell werde ich noch eine Möglichkeit einbauen eine Weckerzeit einzubinden …

lg
Andreas

Hallo Andreas,

erstmal klasse Arbeit und tolle Anregungen sowie auch eine gute Doku die du uns hier anbietest. Vielen Dank dafür …

Ich habe mir gerade mal die Scripte angesehen. Scheint mir etwas etwas zu komplex zu sein, um hier mal schnell eine Anpassung an meine Bedürfnisse durchzuführen. :o

Du schreibst das es immo nur mit HM funktioniert und nutzt wenn ich das richtig interpretiere das Script IPSShadowing_Control.ips.php mit den HM Instancen dafür.

Ich habe bis jetzt meine Scripte für Steuerungaufgaben immer komplett von der HW gelöst und schalte und walte eigentlich alles nur über Variablen, denen natürlich dann weitere Scripte hinterlegt sind um die HW anzusprechen.
Wird mal ein Aktor gegen den eines anderen System getauscht brauche ich nur das HW Script abzuändern und die Steuerungen bleiben bestehen.
So auch bei meiner Rolladensteuerung. Hier gibt es eine Variable Wohnzimmer die den Wert "oben,unten,einviertel,halb,dreiviertel, usw.) annehmen kann.

Siehst du eine Möglichkeit deine Steuerung so anzupassen, das man direkt diese Variablen ansprechen kann um auch später weiter HW unabhängig zu bleiben?

In meinem Rolladenscript benutze ich auch unterschiedliche Zeiten für z.B. Roll_rauf die abhängig vom Wochenende und den gesetzlichen Feiertagen sind - ist so etwas auch noch geplant?

Ich benutze z.Zt. noch kein WF weil ich die Arbeit bis jetzt gescheut habe alles vom Designer hierauf umzustellen.
Habe ich das jetzt richtig verstanden das mit deinem Installationsscript das WF ohne weiteres Zutun so aussieht, wie du das auf deinen Screenshots hier zeigst?

Viele, viele Fragen …
Doc

Hallo Andreas,

sieht echt gut aus, was du da gemacht hast! Ich bin aber auch DOCs Meinung. Ein Hardware Abstraktion Layer wäre schön. Ich nutze auch Homematic Aktoren, das ganze Timing lasse ich aber die CCU machen. IPS übergibt nur Prozentwerte für Offen, Schatten, Geschlossen, etc. Die Positionierung läuft sehr zuverlässig.
Schön wäre so eine Function zum selbst erweitern:

function HAL_Move($id, $movment [up|down|stop|percent_position])

Vielleicht versuche ich es mal selbst. Die Vorarbeit ist echt top!

Gruss, Michael

Hallo Doc,

zum letzteren: ja Du brauchst das Installationsscript nur zu starten und es wird alles entsprechend angelegt (lediglich den WF Konfigurator ID ist zu setzen. Danach sollte sich das Bewegen aller Devices bereits simulieren lassen.

Die Trennung von der Hardware habe ich letztendlich über mein Konfigurationsfile gelöst. Dort gibt man den DeviceType und den DevicePath an.

Eine Erweiterung auf Deine Bedürfnisse sollte auch kein großes Problem sein. Schau Dir mal die Prozedure IPSShadowing_MoveByDevice im File IPSShadowing_Movement.ips.php an. Schau Dir auch mal meinen letzten Beitrag in meiner Bewässerungssteuerung an, dort habe ich einen analogen Entwurf gemacht …

Eine Erweiterung der Zeit Steuerung kann ich mir gut vorstellen, habe aber noch keine konkreten Pläne - mal sehen.

lg
Andreas

Hallo Andreas,

danke dir für die Info.
Ich bin gerade dabei, mich ins WF einzuarbeiten.

Wenn ich soweit bin werde ich mal versuchen, das anzupassen.
Ich finde das eigentlich sehr schade, das die tollen Scripts hier immer so Hardwarenah sind und nicht mit der unterschiedlichsten HW genutzt werden kann.

Viele Grüße,
Doc

Ja leider… hab versucht das mit 1-wire zum laufen zu bringen, bin natürlich an meinem laienhaften null Durchblick gescheitert. Das ist mir leider zu komplex.
:mad:

Ok, gebt mir noch 1-2 Tage Zeit - ich bastel da was …

… wie würden den Deine Kommandos lauten zum schalten von 1-Wire?

lg
Andreas

Das ist ein wenig mehr:
Funktion:

$ins - Instanz des DS2408 (1-wire Modul )
$dir - Direction (0 = Up, 1 = Down)
$sec - Seconds 0 - 120sec

function SHUTTER ($ins, $dir, $sec, $var="") {
   TMEX_F29_SetStrobe($ins, True);
   $res = ($dir * 128 ) + $sec;
   TMEX_F29_SetPort((integer)$ins, (integer)$res);
   if ( $var<>"") {
      if ($dir == 0) {
         SetValueBoolean($var,FALSE);
      } else {
         SetValueBoolean($var,TRUE);
      }
   }
}

dann gehts mit z.B.

@SHUTTER(52420 /*[EG\Wohnzimmer\Terrasse]*/, 0, 50, "");  //Rolladen fährt 50sec