Möchte diesmal ein kleines Skript zur Anwesenheitssteuerung vorstellen.

<?
	/**
	 * @file          IPSView_PresenceControl.ips.php
	 * @author        brownson
	 * @version
	 *   Version 1.0, 2014-01-20 brownson: Initiale Version<br/>
	 *
	 * Skript/Variable um eine Anwesenheitssteuerung zu realisieren.
	 *
	 * Konfiguration Einstellungen:
	 *   $presenceStatusList     ... Liste der Anwesenheitsstatus, die unterstützt
	 *                               werden:
	 *                               - Anwesend
	 *                               - Nachtruhe
	 *                               - Unterwegs
	 *                               - Urlaub
	 *                               Nach dem ersten Ausführen des Skriptes, wird
	 *                               die Status Variable und das zugehörige Profil
	 *                               angelegt.
	 *
	 *   Presence_Present        ... Hier können Befehle platziert werden, die beim
	 *                               Status "Anwesend" ausgeführt werden sollen.
	 *   Presence_Sleeping       ... Hier können Befehle platziert werden, die beim
	 *                               Status "Nachtruhe" ausgeführt werden sollen.
	 *   Presence_OutOfHome      ... Hier können Befehle platziert werden, die beim
	 *                               Status "Unterwegs" ausgeführt werden sollen.
	 *   Presence_Holiday        ... Hier können Befehle platziert werden, die beim
	 *                               Status "Urlaub" ausgeführt werden sollen.
	 *
	 */

	define ('PRESENCE_VALUE_PRESENT',					0);
	define ('PRESENCE_VALUE_SLEEPING',					1);
	define ('PRESENCE_VALUE_OUTOFHOME',					2);
	define ('PRESENCE_VALUE_HOLIDAY',					3);

	/*
	 * Konfiguration:
	 * -------------------------------------------------------------------------
	 */

	$presenceStatusList = array(PRESENCE_VALUE_PRESENT    => 'Anwesend',
                               PRESENCE_VALUE_SLEEPING   => 'Nachtruhe',
                               PRESENCE_VALUE_OUTOFHOME  => 'Unterwegs',
                               PRESENCE_VALUE_HOLIDAY    => 'Urlaub');

	function Presence_Present() {
	}

	function Presence_Sleeping() {
	}

	function Presence_OutOfHome() {
	}

	function Presence_Holiday() {
	}

	/*
	 * Programmlogik:
	 * -------------------------------------------------------------------------
	 */
	$scriptID     = $_IPS['SELF'];
	$sender       = $_IPS['SENDER'];
	$parentID     = IPS_GetParent($scriptID);


	if ($sender=='Execute') {
		@IPS_DeleteVariableProfile('PresenceStatus');
		$variableId  = CreateVariablePresence('PresenceStatus',  1, $parentID, 10,
		                         'PresenceStatus', $scriptID, $presenceStatusList);
	} else {
		$variableId  = CreateVariablePresence('PresenceStatus',  1, $parentID, 10,
		                         'PresenceStatus', $scriptID, $presenceStatusList);
		$value        = $_IPS['VALUE'];

		SetValue($variableId, $value);
		switch ($value) {
			case PRESENCE_VALUE_PRESENT:
				Presence_Present();
				break;
			case PRESENCE_VALUE_SLEEPING:
				Presence_Sleeping();
				break;
			case PRESENCE_VALUE_OUTOFHOME:
				Presence_OutOfHome();
				break;
			case PRESENCE_VALUE_HOLIDAY:
				Presence_Holiday();
				break;
			default:
				die("Unbekannter Wert $value für Anwesenheit");
		}
	}
	
	/*
	 * Funktionen:
	 * -------------------------------------------------------------------------
	 */

	function CreateVariablePresence ($name, $type, $parentId, $position=0, $profile,
	                                 $action=null, $associations) {
		$variableId = @IPS_GetObjectIDByIdent($name, $parentId);
		if ($variableId === false) {
	 		@IPS_CreateVariableProfile($profile, 1);
			IPS_SetVariableProfileText($profile, '', '');
			IPS_SetVariableProfileValues($profile, 0, 0, 0);
			IPS_SetVariableProfileDigits($profile, 0);
			IPS_SetVariableProfileIcon($profile, null);
			foreach($associations as $idx => $association) {
					IPS_SetVariableProfileAssociation($profile, $idx, $association, "", null);
			}

			$variableId = IPS_CreateVariable($type);
			IPS_SetParent($variableId, $parentId);
			IPS_SetName($variableId, $name);
			IPS_SetIdent($variableId, $name);
			IPS_SetPosition($variableId, $position);
  			IPS_SetVariableCustomProfile($variableId, $profile);
 			IPS_SetVariableCustomAction($variableId, $action);
		}
		return $variableId;
	}

?>

Nach dem erstmaligen Ausführen des Skriptes, wird automatisch die zugehörige Variable in IP-Symcon angelegt.

Das Skript legt auch gleich ein passendes Variablen Profil an, um eine Darstellung im WebFront zu ermöglichen. Zusätzlich dient dieses Profil auch als Default Konfiguration in IPSView.

In den Funktionsblöcken der einzelnen Zustände werden die Befehle platziert, die beim Einschalten des jeweiligen Anwesenheitsstatus ausgeführt werden sollen.

Beispiele hierfür sind:

  • Alle Lichter ausschalten bei Status „Abwesend“
  • WLAN aktivieren bzw. deaktivieren
  • Alarmanlage aktivieren bzw. deaktivieren
  • Touchscreens ausschalten bei „Nachtruhe“ oder „Abwesenheit“
  • Bestimmte Lichtszene starten bei Status „Nachtruhe“

Einbindung in IPSView:

Eine Einbindung ist in folgenden Variationen möglich:

  • ValueButton: Nach Aktivierung des Buttons wird der jeweilige Anwesenheitsstatus gesetzt
  • AssoziationButton: Nach Aktivierung erscheint ein Popup zur Auswahl des neuen Anwesenheitsstatus
  • AssoziationImage: Nach Aktivierung erscheint ein Popup zur Auswahl des neuen  Anwesenheitsstatus
  • VarLabel: Anzeige des aktuellen Anwesenheitsstatus als Text

Bei Buttons bietet sich auch die Möglichkeit an, die Zustände in unterschiedlichen Farben darzustellen.

IPSView_Presence_Designer  IPSView_Presence_Client