IPSShadowing - eine Beschattungssteuerung

Hallo zusammen,

ich wollte erstmal ein dickes Danke an Andreas loswerden für IPS_Shadowing, ich setze das mittlerweile mit Homematic Jalousieakzoren bei mir im Haus an 15 Fenstern und einer Markise ein!!

Eine Sache fehlt mir jedoch, leider kann ich diese nicht selber implementieren. Wahrscheinlich dürfte das aber nicht so schwer sein, daher meine Frage:
Um die Fahrten der Rolladen dynamischer zu gestalten (Anwesenheitssimulation) würde ich mir eine Checkbox oder ähnliches Wünschen um die beispielsweise durch die Dämmerung vorgegebenen Fahrtzeiten zufällig innerhalb eines bestimmten Zeitrahmens (+/- 10 min bspw) zu variieren!
Meinst du / meint ihr sowas wäre möglich zu implementieren? Mit der rand-Funktion sollte das ja möglich sein, oder?

Danke schonmal im Voraus!

Gruß
spooniester

Behaupte mal Dass Einbrecher an anderen Dingen erkennen können ob jemand zu Hause ist, oder nicht. Da wird sich keiner mit der Uhr hinstellen und die Zeit ab Dämmerung bis Rolladen messen. Zu mal sich die Dämmerungszeiten fast täglich ändern. :wink:

Gruß
Bruno

Hi,
da gebe ich dir recht, trotzdem erzeugt es einen anderen Eindruck wenn die Rolladen nicht alle gleichzeitig sondern mit einem „Versatz“ untereinander runterfahren! Es geht mir also um die Dynamik der einzelnen Devices zueinander und nicht nur um die generelle Dynamik der „Dämmerung“!
Das kam vielleicht nicht ganz klar rüber :wink:

Gruß
spooniester

Dann sieht die Sache anders aus :smiley:

Habe mir da verschiedene Profile erstellt mit denen ich dies (in dem Fall teilweise) erschlage. Ist zwar dann immer der gleiche Ablauf, von dem her nicht das, was Du haben willst. Mal schauen ob Andreas was bastelt.

Hallo Andreas,

kurze Rückfrage:

Wenn ich mittels MoveByEvent die Rückmeldungen von den Aktoren an IPSShadowing sende, dann wird der Status Manual ja auf TRUE gesetzt.

Ich hab jetzt seit ein paar Tagen das Problem, dass meine Tagesprogramme (Morgens und Abends) nicht sauber fahren.

Ich hab auch noch einen Blick in das Resettimer Skript geworfen, aber dort steht ja nichts ausser einem include drinnen. Das sollte also Korrekt sein.

Wenn ich mir deine Programm-Logik ansehe, dann sollte die Einstellung Manuell TRUE für die Tagesprogramme egal sein.

Das Skript ProgrammTimer sollte ja alle 5 Minuten die Funktion CheckPrograms triggern, welches dann bei einem Tag/Nacht Wechsel die Variable Manuell resettet.

Ich weiß nicht genau, wo mein Problem liegt. Ich bin mir auch nicht sicher, ob wirklich alle 5 Minuten das ProgrammTimer Skript gestartet wird.

Die Probleme sind erst aufgetreten nachdem ich ein Backup von IPS aufsetzen musste, da mir die Installation von IPSLight das komplette IPS-Symcon zerschossen hatte. (Keine Saubere GUI mehr vorhanden. Auch IPSShadowing, IPSTwilight, etc waren verschwunden).

Die Installation von IPSLight bleibt sowieso öfters hängen. Warum konnte ich bisher nicht nachvollziehen. Nach einem manuellen Anhalten und Restarten des IPS Dienstes, lief die Installation dann. Mit dem gleichen Config Skript.

Oh, jetzt hab ich wieder viel geschrieben :wink:

Gruß
Maze

Hallo Maze,

ja, Status wird auf manuell gesetzt, ansonsten würde ja die Programmsteuerung den manuellen Eingriff wieder rückgängig machen. Das Flag wird zu jedem Tag/Nacht wechsel wieder zurückgesetzt, alternativ kannst Du es auch jederzeit manuell machen.

Starte einfach mal den Programmtimer manuell, dann siehst Du in der Konsole den jeweiligen Programmstatus (welches Programm wird warum gewählt).

IPS ist bei mir schon seit längerer Zeit nicht mehr hängen geblieben, hatte das früher auch öfters mal und konnte den Grund nicht genau ermitteln.
Am sichersten ist es, wenn Du nach dem Start der Installation das WebFront zumachst, da bei der Installation das komplette WebFront neu generiert wird. Alternativ kannst Du auch einfach die Generierung des WebFronts/MobileInterface über den Wizard deaktivieren (wenn Du keine Änderungen an der Konfig vorgenommen hast, die eine Regenerierung erfordern).

Hallo Andreas,

danke für die Rückmeldung.

Ich hatte auch die Webfront aktualisierung im Verdacht. Hab da noch rumgespielt, weil ich gerade erst mit IPSLight begonnen hatte.

@Enocean Rückmeldungen:
Ich hab hier mal den Link zum Thread reingestellt, in dem ich kurz erläutere, wie ich die Rückmeldung meiner Eltako Enocean Aktoren in IPSShadowing und IPSLight umgesetzt habe. Natürlich mit den Skripten :wink:

Gruß
Maze

PS: Das mit dem GIT hab ich noch nicht weiter verfolgt :wink: Ist Neuland und mir fehlt gerade die Zeit.

Guten Morgen Zusammen,

@Andreas:
Meiner Meinung nach ist in der Funktion IsDayNightChange ein Problem:

		public function IsDayNightChange($profileIdBgnOfDay, $profileIdEndOfDay) {
			$profileBgnOfDay = $this->profilesBgnOfDay[$profileIdBgnOfDay];
			$profileEndOfDay = $this->profilesEndOfDay[$profileIdEndOfDay];
			$timeCurrent = time();
			$timeLast    = time()-300;

			return (($timeCurrent > $profileBgnOfDay->GetTime() and  $timeLast < $profileBgnOfDay->GetTime()) or 
			        ($timeCurrent > $profileEndOfDay->GetTime() and  $timeLast < $profileEndOfDay->GetTime()));
		}

Und zwar, wenn man eine manuelle Zeit einstellt, welche auf 5 Minuten endet. (zB 07:30).

Bei mir wurde heute morgen wiederholt der Manuelle Modus nicht deaktiviert. Meiner Ansicht nach, liegt das an den Bedingungen im return Bereich.

Die Fragst nur nach > und < ab. Dass heißt aber um Umkehrschluss, dass IsDayNightChange für alle xx:x5 er Zeiten niemals true wird! (Wenn die Zeit recht ungenau, sprich nur auf die Minute, verwendet / berechnet wird).

Um das am einfachsten zu umgehen, sollte immer im ersten Abfragebereich das > Zeichen durch ein >= ersetzt werden.

Gruß
Matthias

@Matthias

ich denke, da hast Du recht --> Fix ist online …

Verbesserte Synchronisierung ist auch online, sieht jetzt mal so aus:


		// ----------------------------------------------------------------------------------------------------------------------------
		public function MoveByEvent($Level) {
			IPSLogger_Dbg(__file__, "Received StateChange from Shutter '".IPS_GetName($this->deviceId)."', NewLevel=".round($Level).", CurrentLevel=".$this->GetVariableValue(c_Control_Position));
			if ($this->GetVariableValue(c_Control_Position) <> $Level and
			    $this->GetVariableValue(c_Control_StepsToDo)=="") {
				IPSLogger_Inf(__file__, "Apply StateChange from Shutter '".IPS_GetName($this->deviceId)."', Level=".round($Level));
				$shadowingType = $this->GetPropertyValue(c_Property_ShadowingType);
				if ($Level <= 5) {
					switch($shadowingType) {
						case c_ShadowingType_Marquees: 
							$this->SetVariableValue(c_Control_Movement, c_MovementId_MovedIn); break;
						default:
							$this->SetVariableValue(c_Control_Movement, c_MovementId_Opened); break;
					}
				} else if ($Level >= 95) {
					switch($shadowingType) {
						case c_ShadowingType_Marquees: 
							$this->SetVariableValue(c_Control_Movement, c_MovementId_MovedOut); break;
						case c_ShadowingType_Shutter: 
							$this->SetVariableValue(c_Control_Movement, c_MovementId_Closed); break;
						default:
							$this->SetVariableValue(c_Control_Movement, c_MovementId_Shadowing); break;
					}
				} else if ($Level > 45 and $Level < 55) {
					switch($shadowingType) {
						case c_ShadowingType_Marquees: 
						case c_ShadowingType_Shutter: 
							$this->SetVariableValue(c_Control_Movement, c_MovementId_50); break;
						default:
							$this->SetVariableValue(c_Control_Movement, c_MovementId_Stop); break;
					}
				} else if ($Level > 70 and $Level < 80) {
					switch($shadowingType) {
						case c_ShadowingType_Marquees: 
						case c_ShadowingType_Shutter: 
							$this->SetVariableValue(c_Control_Movement, c_MovementId_75); break;
						default:
							$this->SetVariableValue(c_Control_Movement, c_MovementId_Stop); break;
					}
				} else if ($Level > 85 and $Level < 95) {
					switch($shadowingType) {
						case c_ShadowingType_Shutter: 
							$this->SetVariableValue(c_Control_Movement, c_MovementId_90); break;
						default:
							$this->SetVariableValue(c_Control_Movement, c_MovementId_Stop); break;
					}
				} else {
					$this->SetVariableValue(c_Control_Movement, c_MovementId_Stop);
				}
				$this->SetVariableValue(c_Control_Position, $Level);
				if (!$this->GetVariableValue(c_Control_ManualChange) and
				    $this->GetVariableValue(c_Control_Automatic)) {
					$this->SetVariableValue(c_Control_ManualChange, true);
				}
				$this->SetStatus();
			}
		}

Hi Brownson,

klasse Arbeit. Macht Spaß mit deinen Modulen zu arbeiten.
Jedoch habe ich folgendes Problem, dass ich mir momentan nicht erklären kann.

Folgende Einstellungen sind gesetzt:

Sowohl Werttags, wie auch am Wochenende
Tagesbeginng: 8:45 (individuelle Zeit)
Tagesende: 20:00 (individuelle Zeit)

In den Meldungen sehe ich nun Folgendes:


<table>
<tbody>
<tr id="206" style="color:#FFFFFF;">
<td>2014-01-29 08:45</td>
<td>Schliessen von 'Wohnzimmer' durch "Nachtprogramm", Programm='Geschlossen'</td>
</tr>
<tr id="207" style="color:#FFFFFF;">
<td>2014-01-29 08:45</td>
<td>Schliessen von 'Schlafzimmer' durch "Nachtprogramm", Programm='Geschlossen'</td>
</tr>
<tr id="208" style="color:#FFFFFF;">
<td>2014-01-29 08:50</td>
<td>Öffnen von 'Wohnzimmer' durch Tagesprogramm, Programm='Offen'</td>
</tr>
<tr id="209" style="color:#FFFFFF;">
<td>2014-01-29 08:50</td>
<td>Öffnen von 'Schlafzimmer' durch Tagesprogramm, Programm='Offen'</td>
</tr>
</tbody>
</table>

Meine Frage: Wieso schaltet er um 8:45 Uhr die Rolladen durch das Nachtprogramm zu, um die dann wieder um 8:50 Uhr zu öffnen?

@jevico

hab versucht das bei mir nachzustellen, konnte aber kein Problem feststellen.

Passiert das bei Dir jeden Tag?
Hast Du eventuell selbst einen Timer definiert, der um die Uhrzeit etwas auslöst?

Bei mir ist es heute auch aufgetreten. Die Rollläden wurden vor der Zeit manuell aufgefahren und fuhren dann zu.

Ich schau mir die Skripte später an und melde mich dann nochmal.

Gruß Maze

Hallo Zusammen,

das „Problem“ liegt an dem fehlenden Gleichheitszeichen in der IsDay Funktion:

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

Das Gleichheitszeichen hatten wir ja in der letzten Änderung für die IsDayNightChange Funktion gesetzt. Dadurch wird der Status zum richtigen Zeitpunkt von Manuell auf Automatik gesetzt.

Wenn jetzt jedoch der BeginOfDay genau auf einer x5 Minute lag, dann war zu dem Nacht-Tag Wechsel, die Flag für IsDay immer noch auf false.

Mit dem obigen Code, sollte das Problem behoben sein.

Gruß
Maze

Könnte man noch eine Art Frostschutz einbauen, dass optional z.B. bei unter 0C der Rolladen nicht mehr automatisch auf/zugefahren wird? :confused:

Hi.

Kann es nur bestätigen. Wenn man die Rolladen vorher hochgefahren hat, werden sie später wieder runtergefahren um dann 5 Min später wieder hochzufahen :smiley:
Da es nicht soooo schlimm ist, kann ich auch noch auf die Behebung durch brownsen warten. Aber schön, dass ich nicht alleine bin mit dem Problem.

Danke schon mal an Maze77 für die Fehlersuche.

@Maze

Danke, hab die Änderung übernommen …

Gern :slight_smile:
Gruß Maze

@IPSLibrary-Community

Ich kann ein Update zum WeatherProfile bezüglich Windgeschwindigkeit für den Betatest zur Verfügung stellen.
Auf Wunsch von Brownson benötige ich Betatester um die Migrierung der Änderungen endgültig abzuschließen.
(Andreas hat derzeit viel zu viel um die „Ohren“.)

Änderungen:

[ul][li]zusätzliches Variablenprofil : Beaufortskala (LINK WIKIPEDIA)
[/li][li]das gwünschte Profil ist in der Konfiguration einstellbar (Übernahme durch wiederholte Installation im Modulmanager)
[/li][li]die Regenerkennung und Winderkennung sind UND verknüpft
[/li][INDENT]für ODER Verknüpfung: einfach 2 Profile mit getrennter Einstellung für Regen- und Winderkennung[/INDENT][/ul]
Screencopy im IPS-WIKI

Zu tauschende Dateien:
im Order: IP-Symcon\scripts\IPSLibrary\app\modules\IPSShadowing
IPSShadowing_Device.class.php
IPSShadowing_ProfileWeather.class.php
im Order: IP-Symcon\scripts\IPSLibrary\install\InstallationScripts
IPSShadowing_Installation.ips.php

Bitte nicht vergessen: vorher eine Sicherungskopie der 3 Dateien zu machen.

Anschließend eine Installation von IPSShadowing (im ModuleManager oder ModuleManagerGUI) durchführen.

Gruß
Günter

Beaufort.zip (18.5 KB)

Hallo Günter,

… mach Dir das Leben nicht so schwer - Du hast GIT :wink:

Download Deiner Änderungen:


	IPSUtils_Include ("IPSModuleManager.class.php", "IPSLibrary::install::IPSModuleManager");
	$moduleManager = new IPSModuleManager('IPSShadowing', 'https://raw.github.com/nickSpawn/IPSLibrary-brownson/Development-original/');
	$moduleManager->UpdateModule();

Konfiguration anpassen:


	/** Profil Wetterdefinition / Klassifiktation
	 *
	 * Definition/Masseinheit des Windlevels.
	 * Einstellung:   false       Vergleich der Windgeschwindigkeit mit dem Windlevel in km/h
	 *                true        Vergleich der Windgeschwindigkeit mit dem Windlevel in Beaufort
	 *
	 * Dieser Parameter kann jederzeit geändert werden.
	 * Für die Übernahme der Änderung ist eine erneute Installation über den ModuleManager oder ModuleManagerGUI notwendig.
	 */
	define ("IPSSHADOWING_WINDLEVEL_CLASSIFICATION",		true);

Installation ausführen (einfach über die GUI aufrufen, WebFront braucht man nicht neu generieren).

fertig.

Habs gerade kurz asuprobiert, hat funktioniert :slight_smile:

Bei Problemen kann man durch ein Update über die ModuleManagerGUI wieder auf die original Version zurückgehen.

Wenns sonst noch wer erfolgreich am Laufen hat, bitte um Rückmeldung.