IPSSchaltuhr

Sieht ja mächtig aus. Was schaltest Du denn damit alles so?

Zum Dashboard kann ich nichts sagen. Nutze ich nicht. WF reicht mir.

Wäre eine + - Taste sinniger?
Also 5 Tasten.
[+5] [+] [Schaltuhrname] [-] [-5]

Mit + / - wird zur nächsten/vorherigen Schaltuhr gesprungen.
Mit +5 / -5 wird um 5 Schaltuhren gesprungen.

Damit ist die Oberfläche aufgeräumter. Man kann aber nicht mehr direkt auf eine Schaltuhr springen.

Die Änderungen würde ich aber nur umsetzen, wenn die Änderungen mehrere Benutzer benötigen.

Also meldet euch, wenn ihr es geändert haben möchtet.

Gruß
Andre

Gesendet von meinem GT-I9100 mit Tapatalk 2

Mhh sehr nett aber ich werde mir eine eigene Uhr Bauen die per Dashboard und Webfront bedient werden kann.

Aber danke

Hallo Zusammen,

was muss ich machen, um eine neue Schaltuhr einzurichten?
Einfach in der IPSSchaltuhr_Configuration.inc.php

	function get_ZSUConfiguration() {
		return array(
			c_ZSUCircle.'3'  => array(
				c_Property_Name	=>   'Drucker',

hat nicht zum gewünschten Erfolg geführt. Oder muss man die Variabelen einzelnen anlegen.
Danke für die Unterstützung im Voraus.

Gert

Modul neu installiert ?
Es sollte unter „Program\IPSLibrary\app\modules\IPSSchaltuhr\IPSSchaltuhr_Timer“
auch die Timer geben.

Hi,

config File um eine Schaltuhr erweitern. Eventuell auch das Custom File.
Dann die Schaltuhr installieren.
Nur Installieren nicht laden!

Variablen, Timer Links etc werden dann automatisch angelegt.

Gruß
Andre

Gesendet von meinem GT-I9100 mit Tapatalk 2

Danke für die Schnelle Unterstützung.
Es war mir nicht klar, dass ich nach einer Änderung in der Config nochmal Installieren muß.

Gruß Gert

Hallo, ich glaube ich stehe bei der Einrichtung etwas auf dem Schlauch. Installation und Einrichtung Schaltuhr hat bestens funktioniert. Nur wie schalte ich jetzt z.B. einen eingerichteten Homematic Schalter (hier habe ich pro Schalter ja 2 Instanzen), wo muss ich was anbinden? In der Schaltuhr selbst kann ich nur die Sensoren zuweisen.

Tom

Hi,

im customconfigfile.
Nicht nur die ID sondern den ganzen Befehl eingeben.

War meine ich weiter vorne schon mal ein Thema. Der IPSWecker von mir arbeitet nach dem gleichen Prinzip.

Gruß Andrr

Gesendet von meinem GT-I9100 mit Tapatalk 2

Hast du da eventuell ein Beispiel. Im customconfigfile finde ich da kein Erklärung.

:Tom

Thread 29, 54, 66.

Gesendet von meinem B1-A71 mit Tapatalk 2

Vielen Dank! Jetzt hab ich das begriffen. Wer lesen kann… Ich habe die Threads scheinbar immer überlesen.

Tom

Ich habe ein kleines Verständnisproblem mit der Schaltuhr.

Ich möchte einen Bachlauf schalten, als Bedingungen habe ich die Außentemperatur und einen Regensensor. Ich möchte den Bachlauf nur an haben wenn es wärmer als 17° ist und es nicht regnet.

Wenn ich beides als Einschaltbedingung anlege und es zur Schaltzeit regnet oder kälter ist, es aber später z.B. aufhört zu regnen wird nicht eingeschaltet, später auch nicht mehr, ist das so richtig oder sollte eigentlich ab der Einschaltzeit die Bedingung geprüft werden?

Versuchsweise habe ich nun diese beiden Bedingungen als Laufzeitbedingung eingefügt. Hier ist es jedoch so, dass zur Startseite der Bachlauf angeht obwohl es z.B. regnet oder kälter ist und nach kurzer Zeit dann wieder ausgeht. Ist das normal so, eigentlich ist mindestens eine Bedingung ja nicht erfüllt? Kann ich das kurzzeitige einschalten irgendwie umgehen?

Oder verstehe ich generell etwas falsch?

Tom

Hallo,

die Regen- und Temperaturbedingungen müssen zur Laufzeit berücksichtigt werden. Wenn es Anfängt zu regnen oder zu kalt wird, wird die Pumpe abgeschaltet. Bzw. wieder eingeschaltet.

Wenn es bei den Einschaltbedingungen eingetragen wird, wird nur eingeschaltet, wenn es warm genug ist und nicht regnet. Ist es zu kalt wird nicht eingeschaltet, wenn es später wärmer wird, wird trotzdem nicht eingeschaltet.

Ohne Startbedingung wird immer eingeschaltet und dann ggf. zur Laufzeit wieder ausgeschaltet, wenn es z. B. regnet.

Das ist derzeit ein unschöner Effekt. Da ich die Schaltuhr selbst nicht nutzte, ist es mir bei der Entwicklung nicht aufgefallen. Für eine Korrektur fehlt mir derzeit die Zeit.

Eine Möglichkeit wäre einen Dummy Sensor (z.b. bool) eintragen. Die Bedingung muss immer Erfüllt sein.
Mit dem Starten der Aktion muss der Dummy Sensor aktualisiert werden. Ausgelöst z.b. durch eine weitere Schaltuhr mit einigen Sekunden Verzögerung. Nicht die eigene nehmen, da sonst eine Schleife entsteht. Dadurch wird die Laufzeitbedingungsprüfung sofort ausgelöst.

Die Pumpe schaltet dann zwar immer noch ein, aber nur für ein paar Sekunden.

Gruß
Andre

Gesendet von meinem B1-A71 mit Tapatalk 2

Das ist Schade. Danke aber für die Infos. Vielleicht hat ja noch jemand eine Idee wie ich das eventuell lösen kann?

Tom

Erst einmal vielen Dank für die tollen Scripte, die hier verfügbar sind!

Das Topic ist schon etwas älter, jedoch bin ich gerade auf eine ähnliche Herausforderung gestoßen. Folgendes wollte ich realisieren: Einstellen eines Zeitfensters (IPSSchaltuhr), in dem ein Aktor (in diesem Fall Relais für eine Outdoor Weihnachtsbeleuchtung) in Abhängigkeit der Dämmerung (IPSTwilight) gesteuert wird. Z.B. sollte eine Zeit zwischen 15 und 23 h eingestellt sein. Ab 15 h darf die Beleuchtung an sein, aber nur, wenn auch die Dämmerung begonnen hat. Um 23 h sollte dann ohne weitere Abhängigkeiten ausgeschaltet werden.

Hierzu habe ich folgende Anpassungen an den Scripten vorgenommen:

Script „IPSSchaltuhr_Event“, Zeile 80

if (count($Properts[c_Property_RunSensoren]) == $result and get_ControlValue(c_Control_SollAusgang, $CircleId) == true){

gegen

if (count($Properts[c_Property_RunSensoren]) == $result){

ersetzt.

Fogenden Code zweichen Zeile 82 und 83 hinzugefügt:

set_ControlValue(c_Control_SollAusgang, $CircleId, true);

Hier das gesamte Script:


<?
	/*
	 * This file is part of the IPSLibrary.
	 *
	 * The IPSLibrary is free software: you can redistribute it and/or modify
	 * it under the terms of the GNU General Public License as published
	 * by the Free Software Foundation, either version 3 of the License, or
	 * (at your option) any later version.
	 *
	 * The IPSLibrary is distributed in the hope that it will be useful,
	 * but WITHOUT ANY WARRANTY; without even the implied warranty of
	 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
	 * GNU General Public License for more details.
	 *
	 * You should have received a copy of the GNU General Public License
	 * along with the IPSLibrary. If not, see http://www.gnu.org/licenses/gpl.txt.
	 */

	/**@addtogroup IPSSchaltuhr
	 * @{
	 *
	 * @file          IPSSchaltuhr_Event.ips.php
	 * @author        André Czwalina
	 * @version
	* Version 1.00.0, 28.04.2012<br/>
	 *
	 *
	 */

	include_once "IPSSchaltuhr.inc.php";

			$eventId 	=  $_IPS['EVENT'];

			$strpos  	= strrpos(IPS_GetName($eventId), '-', 0);
			$CircleName = substr(IPS_GetName($eventId),0, $strpos);
//			$EventMode 	= substr(IPS_GetName($eventId), $strpos+1, strlen(IPS_GetName($eventId))-$strpos-1);
			$CircleId 	= get_CirclyIdByCircleIdent($CircleName, ZSU_ID_ZSUZEITEN);
			$Properts   = get_ZSUConfiguration()[$CircleName];
			$Name = $Properts[c_Property_Name];


			if (function_exists($CircleName)) {
					IPSLogger_Dbg(__file__, 'Zeitschaltuhr CallBack Funktion '.$Name.' Existiert in IPSSchaltuhr_Custom.');
//					IPSSchaltuhr_Log('Zeitschaltuhr gestartet:  '.$Name.', Aktion: Sensor');
//IPS_LogMessage('IPSSchaltuhr_Event','Zeitschaltuhr gestartet:  '.$Name.', Aktion: '.IPS_GetName($eventId));

					$OVId = get_ControlId(c_Control_RunAktiv, $CircleId);
					$LastDate = IPS_GetVariable($OVId);
					if ($LastDate['VariableUpdated']+30 < time()){
						set_Overview($CircleId);
					}

					$result = 0;
					$RunAktiv =  explode(',', get_ControlValue(c_Control_RunAktiv, $CircleId));
					$i=1;
					foreach ($Properts[c_Property_RunSensoren] as $PropName=>$PropData) {
						$SensorName = $PropData[c_Property_Name];
						$SensorID 	= $PropData[c_Property_SensorID];
						$SensorCo 	= $PropData[c_Property_Condition];
						$Value 		= $PropData[c_Property_Value];

						if ((bool)$RunAktiv[$i] == true){
								switch ($SensorCo){
								case '>':
									if (GetValue($SensorID) > $Value) $result++;
									 break;
								case '=':
									if (GetValue($SensorID) == $Value) $result++;
									 break;
								case '<':
									if (GetValue($SensorID) < $Value) $result++;
									 break;
								}
						} else {
								$result++;
						}
						$i++;
					}

					if (count($Properts[c_Property_RunSensoren]) == $result){
							if (get_ControlValue(c_Control_IstAusgang, $CircleId) == false){
									// --------------- Aktion -------------------
									set_ControlValue(c_Control_SollAusgang, $CircleId, true);
									set_ControlValue(c_Control_IstAusgang, $CircleId, true);
									IPSLogger_Inf(__file__, 'Starte Callback Aktion für:  '.$Name.', Mode: SensorStart');
									IPSSchaltuhr_Log('Starte Callback Aktion für:  '.$Name.', Mode: SensorStart');
									$CircleName($CircleId, 'Start');
			 				}

					} elseif (get_ControlValue(c_Control_SollAusgang, $CircleId) == true ){
							if (get_ControlValue(c_Control_IstAusgang, $CircleId) == true){
									// --------------- Aktion -------------------
									set_ControlValue(c_Control_IstAusgang, $CircleId, false);
									IPSLogger_Inf(__file__, 'Starte Callback Aktion für:  '.$Name.', Mode: SensorStop');
									IPSSchaltuhr_Log('Starte Callback Aktion für:  '.$Name.', Mode: SensorStop');
									$CircleName($CircleId, 'Stop');
							}
					}

			} else {
					IPSLogger_Err(__file__, "Zeitschaltuhr CallBack Funktion $CircleName in IPSSchaltuhr_Custom existiert nicht. Schaltuhr: ".$Name);
			}


	/** @}*/
?>

Durch diesen Eingriff wurde erreicht, dass die RunSensoren auch das Einschalten auslösen, wenn dies nicht zur Startzeit geschehen ist. Damit dies jedoch nur zwischen Start- und Stopzeit geschehen kann, wurde Folgendes geändert:

Script „IPSSchaltuhr_Timer“, folgender Code wurd ab Zeile 80 ergänzt:


						$RunAktiv =  explode(',', get_ControlValue(c_Control_RunAktiv, $CircleId));
						$i=0;
						foreach ($Properts[c_Property_RunSensoren] as $PropName=>$PropData) {
							if ((bool)$RunAktiv[$i+1] == true){
								$EventId  = IPSUtil_ObjectIDByPath('Program.IPSLibrary.app.modules.IPSSchaltuhr.IPSSchaltuhr_Event.'.get_ControlType($CircleId).'-'.$i);
								IPS_SetEventActive($EventId, true);
							}
							$i++;
						}

Folgender Code wurde ab Zeile 139 ergänzt:


						$RunAktiv =  explode(',', get_ControlValue(c_Control_RunAktiv, $CircleId));
						$i=0;
						foreach ($Properts[c_Property_RunSensoren] as $PropName=>$PropData) {
							if ((bool)$RunAktiv[$i+1] == true){
								$EventId  = IPSUtil_ObjectIDByPath('Program.IPSLibrary.app.modules.IPSSchaltuhr.IPSSchaltuhr_Event.'.get_ControlType($CircleId).'-'.$i);
								IPS_SetEventActive($EventId, false);
							}
							$i++;
						}

Gesamtes Script:


<?
	/*
	 * This file is part of the IPSLibrary.
	 *
	 * The IPSLibrary is free software: you can redistribute it and/or modify
	 * it under the terms of the GNU General Public License as published
	 * by the Free Software Foundation, either version 3 of the License, or
	 * (at your option) any later version.
	 *
	 * The IPSLibrary is distributed in the hope that it will be useful,
	 * but WITHOUT ANY WARRANTY; without even the implied warranty of
	 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
	 * GNU General Public License for more details.
	 *
	 * You should have received a copy of the GNU General Public License
	 * along with the IPSLibrary. If not, see http://www.gnu.org/licenses/gpl.txt.
	 */

	/**@addtogroup IPSSchaltuhr
	 * @{
	 *
	 * @file          IPSSchaltuhr_Timer.ips.php
	 * @author        André Czwalina
	 * @version
	* Version 1.00.0, 28.04.2012<br/>
	 *
	 *
	 */

	include_once "IPSSchaltuhr.inc.php";

	switch ($_IPS['SENDER']) {
		case 'TimerEvent':
			$eventId 	=  $_IPS['EVENT'];

			$strpos  	= strrpos(IPS_GetName($eventId), '-', 0);
			$CircleName = substr(IPS_GetName($eventId),0, $strpos);
			$EventMode 	= substr(IPS_GetName($eventId), $strpos+1, strlen(IPS_GetName($eventId))-$strpos-1);
			$CircleId 	= get_CirclyIdByCircleIdent($CircleName, ZSU_ID_ZSUZEITEN);
			$Properts   = get_ZSUConfiguration()[$CircleName];
			$Name = $Properts[c_Property_Name];


			if (function_exists($CircleName)) {
					IPSLogger_Dbg(__file__, 'Zeitschaltuhr CallBack Funktion '.$Name.' Existiert in IPSSchaltuhr_Custom.');
					IPSSchaltuhr_Log('Zeitschaltuhr gestartet:  '.$Name.', Aktion: '.$EventMode);

					if ($EventMode=='Start'){
						$result = 0;
						$StartAktiv =  explode(',', get_ControlValue(c_Control_StartAktiv, $CircleId));
						$i=1;
						foreach ($Properts[c_Property_StartSensoren] as $PropName=>$PropData) {
							$SensorName = $PropData[c_Property_Name];
							$SensorID 	= $PropData[c_Property_SensorID];
							$SensorCo 	= $PropData[c_Property_Condition];
							$Value 		= $PropData[c_Property_Value];

							if ((bool)$StartAktiv[$i] == true){
									switch ($SensorCo){
									case '>':
										if (GetValue($SensorID) > $Value) $result++;
										 break;
									case '=':
										if (GetValue($SensorID) == $Value) $result++;
										 break;
									case '<':
										if (GetValue($SensorID) < $Value) $result++;
										 break;
									}
							} else {
									$result++;
							}
							$i++;
						}

						if (count($Properts[c_Property_StartSensoren]) == $result){
								// --------------- Aktion -------------------
								set_ControlValue(c_Control_SollAusgang, $CircleId, true);
								set_ControlValue(c_Control_IstAusgang, $CircleId, true);
								IPSLogger_Inf(__file__, 'Starte Callback Aktion für:  '.$Name.', Mode: '.$EventMode);
								IPSSchaltuhr_Log('Starte Callback Aktion für:  '.$Name.', Mode: '.$EventMode);
								$CircleName($CircleId, $EventMode);
						} else {
								IPSLogger_Inf(__file__, 'Sensorenbedingungen für:  '.$Name.', nicht erfüllt');
								IPSSchaltuhr_Log('Sensorenbedingungen für:  '.$Name.', nicht erfüllt');
						}
						
						$RunAktiv =  explode(',', get_ControlValue(c_Control_RunAktiv, $CircleId));
						$i=0;
						foreach ($Properts[c_Property_RunSensoren] as $PropName=>$PropData) {
							if ((bool)$RunAktiv[$i+1] == true){
								$EventId  = IPSUtil_ObjectIDByPath('Program.IPSLibrary.app.modules.IPSSchaltuhr.IPSSchaltuhr_Event.'.get_ControlType($CircleId).'-'.$i);
								IPS_SetEventActive($EventId, true);
							}
							$i++;
						}
					}

					if ($EventMode=='Stop'){
						$result = 0;
						$StopAktiv =  explode(',', get_ControlValue(c_Control_StopAktiv, $CircleId));
						$i=1;
						foreach ($Properts[c_Property_StopSensoren] as $PropName=>$PropData) {
							$SensorName = $PropData[c_Property_Name];
							$SensorID 	= $PropData[c_Property_SensorID];
							$SensorCo 	= $PropData[c_Property_Condition];
							$Value 		= $PropData[c_Property_Value];

							if ((bool)$StopAktiv[$i] == true){
									switch ($SensorCo){
									case '>':
										if (GetValue($SensorID) > $Value) $result++;
										 break;
									case '=':
										if (GetValue($SensorID) == $Value) $result++;
										 break;
									case '<':
										if (GetValue($SensorID) < $Value) $result++;
										 break;
									}
							} else {
									$result++;
							}
							$i++;
						}

						if (count($Properts[c_Property_StopSensoren]) == $result){
								// --------------- Aktion -------------------
								set_ControlValue(c_Control_SollAusgang, $CircleId, false);
								set_ControlValue(c_Control_IstAusgang, $CircleId, false);
								IPSLogger_Inf(__file__, 'Starte Callback Aktion für:  '.$Name.', Mode: '.$EventMode);
								IPSSchaltuhr_Log('Starte Callback Aktion für:  '.$Name.', Mode: '.$EventMode);
								$CircleName($CircleId, $EventMode);
						} else {
								IPSLogger_Inf(__file__, 'Sensorenbedingungen für:  '.$Name.', nicht erfüllt');
								IPSSchaltuhr_Log('Sensorenbedingungen für:  '.$Name.', nicht erfüllt');
						}

						$RunAktiv =  explode(',', get_ControlValue(c_Control_RunAktiv, $CircleId));
						$i=0;
						foreach ($Properts[c_Property_RunSensoren] as $PropName=>$PropData) {
							if ((bool)$RunAktiv[$i+1] == true){
								$EventId  = IPSUtil_ObjectIDByPath('Program.IPSLibrary.app.modules.IPSSchaltuhr.IPSSchaltuhr_Event.'.get_ControlType($CircleId).'-'.$i);
								IPS_SetEventActive($EventId, false);
							}
							$i++;
						}
					}



			} else {
					IPSLogger_Err(__file__, "Zeitschaltuhr CallBack Funktion $CircleName in IPSSchaltuhr_Custom existiert nicht. Schaltuhr: ".$Name);
			}
			break;
		case 'WebFront':
			break;
		case 'Execute':
			break;
		case 'RunScript':
			break;
		default:
			IPSLogger_Err(__file__, 'Unknown Sender '.$_IPS['SENDER']);
			break;
	}


	/** @}*/
?>

Hierdurch wurde sichergestellt, dass die Ereignissteuerung für die Run-Sensoren nur zwischen der Start- und Stopzeit aktiv ist.

In der Konfiguration wurde dann der zu prüfende Wert sowohl in der Start-Bedingung als auch in der Run-Bedingung hinzugefügt:

Script „IPSSchaltuhr_Configuration“:


	function get_ZSUConfiguration() {
		return array(
			c_ZSUCircle.'1'  =>	array(
				c_Property_Name           =>   'Dachterrasse',

				c_Property_StartSensoren	=>   array(
					'1'	  	=>   array(
						c_Property_Name		=> 'IPSTwilight_Night',
						c_Property_SensorID	=> 47684 ,
						c_Property_Condition	=>	'=',
						c_Property_Value		=>	1,
						),
//
//					'2'	  	=>   array(
//						c_Property_Name			=> 'Helligkeit Garten',
//						c_Property_SensorID	=> 41726  ,
//						c_Property_Condition	=>	'>',
//						c_Property_Value		=>	30,
//						),

				),

				c_Property_RunSensoren		=>   array(
					'1'	  	=>   array(
						c_Property_Name		=> 'IPSTwilight_Night',
						c_Property_SensorID	=> 47684 ,
						c_Property_Condition	=>	'=',
						c_Property_Value		=>	1,
						),
				),

				c_Property_StopSensoren	  	=>   array(
				),
			),

Die Variable „IPSTwilight_Night“ ist vom Typ „integer“ und wird im Modul „IPSTwilight“ gesetzt (in Abhängigkeit der Dämmerung).

Hallo!

Kann man einer Schaltuhr auch mehrere Start- und Endzeiten mitgeben? Ähnlich wie bei den mechanischen Drehradschaltuhren?

Danke

Nein das ist nicht möglich. Eine Uhr = eine Schaltzeit. Du kannst aber bis 99 Uhren anlegen. Mehrere Uhren können das gleiche bewirken.

Hallo zusammen,
warum finde ich denn das Modul nicht in der IPSLibrary zur Installation? Wenn ich auf „Neues Module“ gehe wird es bei mir dort nicht angezeigt.
Was mache ich denn falsch?

Viele Grüße
Chris

Du machst nichts falsch.

Du musst es per Hand installieren.

In der Gui wird es zur Installation nicht angezeigt.

Ich kann die Schaltuhr einfach nicht installieren

Bekomme folgenden Fehler

Fatal error: Call to undefined function IPS_SetEventCyclicTimeBounds() in /usr/share/symcon/scripts/IPSLibrary/install/InstallationScripts/IPSSchaltuhr_Installation.ips.php on line 520
Abort Processing during Error: Call to undefined function IPS_SetEventCyclicTimeBounds() Error in Script /usr/share/symcon/scripts/IPSLibrary/install/InstallationScripts/IPSSchaltuhr_Installation.ips.php on Line 520 

Hat jemand eine Lösung??

Danke!!