IPSLight

Danke Bernhard,
habe mir dein Betriebsdatenerfassungsscript gerade installiert und läuft perfekt.

Grüße, Jürgen

Danke für die Rückmeldung.
Ich dachte nämlich es geht nimmer.

viel Spass damit
bb

Ich bin gerade dabei, einen IPSComponentDimmer_DMX zu bauen. ( der IPSComponentSwitch_DMX funktioniert schon einwandfrei.

Leider bekomme ich bei dem folgenden Code die angehängte Fehlermeldung.
Vielleicht könnt Ihr mir auf die Sprünge helfen.


<?
	/**@addtogroup ipscomponent
	 * @{
	 *
 	 *
	 * @file          IPSComponentDimmer_DMX.class.php
	 * @author       
	 *
	 *
	 */

   /**
    * @class IPSComponentDimmer_DMX
    *
    * Definiert ein IPSComponentDimmer_DMX Object, das ein IPSComponentDimmer Object für DMX implementiert.
    *
    * @author 
    * @version
    * Version 1, 25.02.2013<br/>
    */
	IPSUtils_Include ('IPSComponentDimmer.class.php', 'IPSLibrary::app::core::IPSComponent::IPSComponentDimmer');
	
	abstract class IPSComponentDimmer_DMX extends IPSComponentDimmer {

		private $instanceId;
		private $instanceNumber;
	
		/**
		 * @public
		 *
		 * Initialisierung eines IPSComponentDimmer_DMX Objektes
		 *
		 * @param integer $instanceId InstanceId des DMX Devices
		 * @param integer $instanceNumber Portnummber des DMX Devices
		 */
		public function __construct($instanceId, $instanceNumber) {
			$this->instanceId = IPSUtil_ObjectIDByPath($instanceId);
			$this->instanceNumber = IPSUtil_ObjectIDByPath($instanceNumber);
		}

		/**
		 * @public
		 *
		 * Function um Events zu behandeln, diese Funktion wird vom IPSMessageHandler aufgerufen, um ein aufgetretenes Event 
		 * an das entsprechende Module zu leiten.
		 *
		 * @param integer $variable ID der auslösenden Variable
		 * @param string $value Wert der Variable
		 * @param IPSModuleDimmer $module Module Object an das das aufgetretene Event weitergeleitet werden soll
		 */
		public function HandleEvent($variable, $value, IPSModuleDimmer $module){
		}

		/**
		 * @public
		 *
		 * Zustand Setzen 
		 *
		 * @param integer $power Geräte Power
		 * @param integer $level Wert für Dimmer Einstellung (Wertebereich 0-100)
		 */
		public function SetState($power, $level) {
			if (!$power) {
				DMX_SetValue($this->instanceId,$this->instanceNumber, 0);
			} else {
				$levelDMX = round ($level / 100 * 255);
				DMX_SetValue($this->instanceId,$this->instanceNumber, $levelDMX);
			}
			
		}

		/**
		 * @public
		 *
		 * Liefert aktuellen Level des Dimmers
		 *
		 * @return integer aktueller Dimmer Level
		 */
		public function GetLevel() {
			$instance_subIDs_array = IPS_GetChildrenIDs($this->instanceId);
			$instance_subIDs_array[$this->instanceNumber - 1];
			
			return (round(GetValue($instance_subIDs_array[$this->instanceNumber - 1]) / 255 * 100)) ;
		}

		/**
		 * @public
		 *
		 * Liefert aktuellen Power Zustand des Dimmers
		 *
		 * @return boolean Gerätezustand On/Off des Dimmers
		 */
		public function GetPower() {
			$instance_subIDs_array = IPS_GetChildrenIDs($this->instanceId);
			$instance_subIDs_array[$this->instanceNumber - 1];
	
			return GetValue($instance_subIDs_array[$this->instanceNumber - 1]) > 0;
		}

	}

	/** @}*/
?>

<edit>
Problem gelöst. Das „abstract“ musste bei der Klassendeklaration weg…

@gros_ibou

Auf meinem NewFeatures Repository befindet sich ein Prototyp von IPSLight mit Simulations Modus, habs allerdings noch nicht in der Praxis getestet, einige Kinderkrankheiten sind also zu erwarten.

Nach der Installation findet IPSLibrary.data.modules.IPSLight.Simulation einige Variablen, die man sich an eine geeignete Stelle im WebFront verlinken kann.

Aufgezeichnet wird immer, bei Aktivierung wird wahlweise einer der letzten 14 Tage abgespielt oder einer von 2 auswählbaren Referenztagen (Die Aufzeichnungen findet man im Ordner Simulation im Root Verzeichnis von IPS).

Zur Simulation werden alle Lichter verwendet, die in der Konfiguration den ensprechenden Eintrag haben:


            'Kueche'  =>  array(
               IPSLIGHT_NAME            => 'Küche',
               IPSLIGHT_GROUPS        => 'Erdgeschoss,All',
               IPSLIGHT_TYPE            => IPSLIGHT_TYPE_SWITCH,
               IPSLIGHT_COMPONENT       => 'IPSComponentSwitch_Homematic,12345',
               IPSLIGHT_POWERCIRCLE     => 'L1',
               IPSLIGHT_POWERWATT      => 60,
               IPSLIGHT_SIMULATION       => true),

Wie ist den der Stand:

Potenzielle Erweiterungen

Anwesenheitssimulation, Möglichkeit zum Abspielen eines beliebigen Tages in der Vergangenheit

Wenn wir grad beim Thema sind: Ist schon abzusehen wann der Sync zwischen Homematic Dimm Aktoren und IPSLight Dimmer richtig funktioniert?

@BennyBunny

hatte das bereits vor einiger Zeit bereits versucht und bin dabei aber auf ein paar Probleme gestoßen. Wenn ich mich richtig erinnere, war es so, dass bei Aktoren, die eine Rampenzeit definiert hatten währende der Ansteuerung die Zwischenwerte gesendet wurden. Das hat bei einer Ansteuerung über das WebFront dazu geführt, das der Regler hin und her gesprungen ist.
Mir ist bis jetzt noch keine 100% Lösung für das Problem eingefallen, mal sehen…

@weimiwolf

bin gerade (etwas unmotiviert) am Testen einer ersten Version, dauert noch etwas …

Hi

Not sure if I should put it in english section. My question is if anyone has a working xComfort setup with IPSLight.
I’ve tried different stuff, even tried to write my own IPSComponentDimmer_EatonMoeller. :slight_smile: It gives me errors, that i’m not sure how to fix.

Switching works, but I still get error (attached).

Thanks

Hi,

i think, this is an configuration issue - so please post your config for further help…

Hi

Sorry for late response. Here is the config.

IPSLight_Configuration

function IPSLight_GetLightConfiguration() {
		return array(
          // ------ Ny del ------
            'Stue Oppe'  =>  array(
               IPSLIGHT_NAME            => 'Stue Oppe',
               IPSLIGHT_GROUPS          => 'All,Stuer, Ny del',
               IPSLIGHT_TYPE            => IPSLIGHT_TYPE_DIMMER,
               IPSLIGHT_COMPONENT       => 'IPSComponentDimmer_EatonMoeller,56463'),
            'Gang Oppe'  =>  array(
               IPSLIGHT_NAME            => 'Gang Oppe',
               IPSLIGHT_GROUPS          => 'All,Stuer, Ny del',
               IPSLIGHT_TYPE            => IPSLIGHT_TYPE_DIMMER,
               IPSLIGHT_COMPONENT       => 'IPSComponentDimmer_EatonMoeller,47871'),

            'Bad Oppe ny del'  =>  array(
               IPSLIGHT_NAME            => 'Bad Oppe ny del',
               IPSLIGHT_GROUPS          => 'All,Bad, Ny del',
               IPSLIGHT_TYPE            => IPSLIGHT_TYPE_DIMMER,
               IPSLIGHT_COMPONENT       => 'IPSComponentDimmer_EatonMoeller,55025'),
            'Bad Oppe Lys Speil'  =>  array(
               IPSLIGHT_NAME            => 'Bad Oppe Lys Speil',
               IPSLIGHT_GROUPS          => 'All,Bad, Ny del',
               IPSLIGHT_TYPE            => IPSLIGHT_TYPE_SWITCH,
               IPSLIGHT_COMPONENT       => 'IPSComponentSwitch_EatonMoeller,54490'),
            'Soverom Vetle'  =>  array(
               IPSLIGHT_NAME            => 'Soverom Vetle',
               IPSLIGHT_GROUPS          => 'All,Soverom, Ny del',
               IPSLIGHT_TYPE            => IPSLIGHT_TYPE_DIMMER,
               IPSLIGHT_COMPONENT       => 'IPSComponentDimmer_EatonMoeller,49966'),
            'Soverom Selma'  =>  array(
               IPSLIGHT_NAME            => 'Soverom Selma',
               IPSLIGHT_GROUPS          => 'All,Soverom, Ny del',
               IPSLIGHT_TYPE            => IPSLIGHT_TYPE_DIMMER,
               IPSLIGHT_COMPONENT       => 'IPSComponentDimmer_EatonMoeller,40227'),
            'Soverom Sofie'  =>  array(
               IPSLIGHT_NAME            => 'Soverom Sofie',
               IPSLIGHT_GROUPS          => 'All,Soverom, Ny del',
               IPSLIGHT_TYPE            => IPSLIGHT_TYPE_DIMMER,
               IPSLIGHT_COMPONENT       => 'IPSComponentDimmer_EatonMoeller,43201'),

			// ------ Gammel del ------
            'Stue Nede'  =>  array(
               IPSLIGHT_NAME            => 'Stue Nede',
               IPSLIGHT_GROUPS          => 'All,Stuer',
               IPSLIGHT_TYPE            => IPSLIGHT_TYPE_DIMMER ,
               IPSLIGHT_COMPONENT       => 'IPSComponentDimmer_EatonMoeller,59384'),
			// ------ Utelys ------
            'Lys ute'  =>  array(
               IPSLIGHT_NAME            => 'Lys ute',
               IPSLIGHT_GROUPS          => 'All,Outside',
               IPSLIGHT_TYPE            => IPSLIGHT_TYPE_SWITCH ,
               IPSLIGHT_COMPONENT       => 'IPSComponentSwitch_EatonMoeller,32265'),
            'Lys foran garasje'  =>  array(
               IPSLIGHT_NAME            => 'Lys foran garasje',
               IPSLIGHT_GROUPS          => 'All,Outside',
               IPSLIGHT_TYPE            => IPSLIGHT_TYPE_SWITCH ,
               IPSLIGHT_COMPONENT       => 'IPSComponentSwitch_EatonMoeller,54333'),
			// ------ Garasje ------      IPSComponentSwitch_EatonMoeller
            'Lys garasje'  =>  array(
               IPSLIGHT_NAME            => 'Lys garasje',
               IPSLIGHT_GROUPS          => 'All,Outside',
               IPSLIGHT_TYPE            => IPSLIGHT_TYPE_SWITCH ,
               IPSLIGHT_COMPONENT       => 'IPSComponentSwitch_EatonMoeller,59819'),
			
			);
	}


	/**
	 *
	 * Definition der Beleuchtungs Gruppen
	 *
	 * Die Konfiguration erfolgt in Form eines Arrays, für jede Beleuchtungsgruppe wird ein Eintrag im Array erzeugt.
	 *
	 * Für jede Beleuchtungsgruppe werden dann die Eigenschaften in einem gesonderten Array hinterlegt:
	 *
	 * IPSLIGHT_NAME  - spezifiziert den Namen der Gruppe in der GUI, Änderungen an dieser Eigenschaft werden erst nach einem
	 *                  erneuten Ausführen der Installationsprozedur sichtbar.
	 *
	 * IPSLIGHT_ACTIVATABLE - gibt an, ob die Gruppe über die GUI eingeschaltet werden kann
	 *
	 * Eine Liste mit diversen Beispiel Konfigurationen findet sich auch im Example Ordner
	 *
	 *
	 * Beispiel:
	 * @code
        function IPSLight_GetGroupConfiguration() {
          return array(
            'All'  =>  array(
               IPSLIGHT_NAME            => 'All',
               IPSLIGHT_ACTIVATABLE     => false),
            'Erdgeschoss'  =>  array(
               IPSLIGHT_NAME            => 'Erdgeschoss',
               IPSLIGHT_ACTIVATABLE     => false),
             );
        }
	 * @endcocde
	 *
	 * @return string Liefert Array mit Beleuchtungs Gruppen
	 */
	function IPSLight_GetGroupConfiguration() {
		return array('All'         =>	array('All',            IPSLIGHT_ACTIVATABLE => false,),
		             'Soverom'     =>	array('Soverom',    IPSLIGHT_ACTIVATABLE => true,),
		             'Stuer'     =>	array('Stuer',    IPSLIGHT_ACTIVATABLE => true,),
		             'Outside'     =>	array('Outside',    IPSLIGHT_ACTIVATABLE => true,),
		             'Bad'     =>	array('Bad',    IPSLIGHT_ACTIVATABLE => true,),
		             'Ny del'     =>	array('Ny del',    IPSLIGHT_ACTIVATABLE => true,),
	   );
	}

	/**
	 *
	 * Definition der Beleuchtungs Programme
	 *
	 * Die Konfiguration erfolgt in Form eines Arrays, für jedes Beleuchtungsprogramm wird ein Eintrag im Array erzeugt.
	 *
	 * Für jedes Beleuchtungsprogramm werden dann die einzelnen Programme ebenfalls als Array hinterlegt, diese wiederum haben ihre
	 * Eigenschaften nochmals in einem Array gespeichert:
	 *
	 * IPSLIGHT_PROGRAMON  - Liste mit Beleuchungselementen, die bei diesem Programm eingeschaltet sein sollen.
	 *
	 * IPSLIGHT_PROGRAMOFF  - Liste mit Beleuchungselementen, die bei diesem Programm ausgeschaltet sein sollen.
	 *
	 * IPSLIGHT_PROGRAMLEVEL  - Liste mit Beleuchungselementen, die auf einen bestimmten Dimm Level gestellt werden sollen
	 *
	 * Eine Liste mit diversen Beispiel Konfigurationen findet sich auch im Example Ordner
	 *
	 *
	 * Beispiel:
	 * @code
        function IPSLight_GetProgramConfiguration() {
          return array(
				'Aus'  	=>	array(
					IPSLIGHT_PROGRAMOFF		=> 	'WellnessWand,WellnessDecke,WellnessSauna,WellnessDusche,WellnessAmbiente',
				),
				'TV'  	=>	array(
					IPSLIGHT_PROGRAMLEVEL	=> 	'WellnessWand,30',
					IPSLIGHT_PROGRAMOFF		=> 	'WellnessDecke,WellnessSauna,WellnessDusche,WellnessAmbiente',

				),
				'Relax'  	=>	array(
					IPSLIGHT_PROGRAMON		=> 	'WellnessSauna,WellnessDusche,WellnessAmbiente',
					IPSLIGHT_PROGRAMLEVEL	=> 	'WellnessDecke,30,WellnessWand,30',

				),
             );
        }
	 * @endcocde
	 *
	 * @return string Liefert Array mit Beleuchtungs Gruppen
	 */
	function IPSLight_GetProgramConfiguration() {
		return array(
				'Off'  	=>	array(
					IPSLIGHT_PROGRAMOFF		=> 	'Stue Oppe,Bad Oppe ny del,Soverom Vetle,Soverom Selma,Soverom Sofie',
				),
				'On'  	=>	array(
					IPSLIGHT_PROGRAMON		=> 	'Stue Oppe,Bad Oppe ny del,Soverom Vetle,Soverom Selma,Soverom Sofie',
				),
				'Kveld'  	=>	array(
					IPSLIGHT_PROGRAMLEVEL	=> 	'Stue Oppe,15,Bad Oppe ny del,10,Soverom Vetle,15,Soverom Selma,15,Soverom Sofie,15',
				),
		);
	}

	/**
	 *
	 * Definition der WebFront GUI
	 *
	 * Die Konfiguration der WebFront Oberfläche ist NICHT dokumentiert, ist aber analog zur normalen WebFront Konfigurator GUI
	 * aufgebaut.
	 *
	 * Beispiele finden sich im Example Ordner
	 *
	 * @return string Liefert Array zum Aufbau des WebFronts
	 */
	function IPSLight_GetWebFrontConfiguration() {
		return array(
			'Oversikt' => array(
				array(IPSLIGHT_WFCSPLITPANEL, 'Light_1_SPv1x',       'LightTP',        'Oversikt','Bulb',1,33,0,0,'true'),
				array(IPSLIGHT_WFCSPLITPANEL,   'Light_1_SPv1h1x',   'Light_1_SPv1x',   null,null,0,270,0,1,'true'),
				array(IPSLIGHT_WFCCATEGORY,       'Light_1_CAv1h1',  'Light_1_SPv1h1x', null,null),
				array(IPSLIGHT_WFCLINKS,            '',              'Light_1_CAv1h1',  'Soverom,Stuer,Outside'),
				array(IPSLIGHT_WFCCATEGORY,       'Light_1_CAv1h2',  'Light_1_SPv1h1x', null,null),
				array(IPSLIGHT_WFCGROUP,            'Soverom',      'Light_1_CAv1h2',  'Soverom Vetle,Soverom Selma,Soverom Sofie', 'Soverom Vetle,Soverom Selma,Soverom Sofie'),
				array(IPSLIGHT_WFCGROUP,            'Outside',      'Light_1_CAv1h2',  'Lys ute', 'Lys ute'),
				array(IPSLIGHT_WFCSPLITPANEL,   'Light_1_SPv23',     'Light_1_SPv1x',   null,null,1,50,0,0,'true'),
				array(IPSLIGHT_WFCCATEGORY,       'Light_1_CAv2',    'Light_1_SPv23',   null,null),
				array(IPSLIGHT_WFCGROUP,            'Stuer',   'Light_1_CAv2',    'Stue Oppe,Stue Nede', 'Stue oppe,Stue nede'),
				array(IPSLIGHT_WFCCATEGORY,       'Light_1_CAv3',    'Light_1_SPv23',   null,null),
				),
		);
	}

	/**
	 *
	 * Definition der Mobile GUI
	 *
	 * Die Konfiguration der Mobile GUI ist NICHT dokumentiert
	 *
	 * Beispiele finden sich im Example Ordner
	 *
	 * @return string Liefert Array zum Aufbau der Mobile GUI
	 */
	function IPSLight_GetMobileConfiguration() {
		return array(
			'Soverom,Stuer',
			'Soverom' => array(
				array(IPSLIGHT_WFCLINKS,            '',             'Soverom'),
				array(IPSLIGHT_WFCGROUP,            'Soverom', 'Soverom Vetle,Soverom Selma,Soverom Sofie', 'Soverom Vetle,Soverom Selma,Soverom Sofie'),
				),
			'Stuer' => array(
				array(IPSLIGHT_WFCLINKS,            '',             'Stuer'),
				array(IPSLIGHT_WFCGROUP,            'Stuer', 'Stue Oppe,Stue Nede', 'Stue oppe,Stue nede'),
				),
			'Outside' => array(
				array(IPSLIGHT_WFCLINKS,            '',             'Outside'),
				array(IPSLIGHT_WFCGROUP,            'Outside', 'Lys ute', 'Lys ute'),
				),
		);
	}

	/** @}*/

My attempt to write IPSComponentDimmer_EatonMoeller. I’m sure I’ve done something wrong here

	IPSUtils_Include ('IPSComponentDimmer.class.php', 'IPSLibrary::app::core::IPSComponent::IPSComponentDimmer');

	class IPSComponentDimmer_EatonMoeller extends IPSComponentDimmer {

      private $instanceId;

		/**
		 * @public
		 *
		 * Initialisierung eines IPSComponentSwitch_EatonMoeller Objektes
		 *
		 * @param integer $instanceId InstanceId des EatonMoeller Devices
		 */

		public function __construct($instanceId) {
			$this->instanceId = IPSUtil_ObjectIDByPath($instanceId);
		}

		/**
		 * @public
		 *
		 * Function um Events zu behandeln, diese Funktion wird vom IPSMessageHandler aufgerufen, um ein aufgetretenes Event
		 * an das entsprechende Module zu leiten.
		 *
		 * @param integer $variable ID der auslösenden Variable
		 * @param string $value Wert der Variable
		 * @param IPSModuleSwitch $module Module Object an das das aufgetretene Event weitergeleitet werden soll
		 */
		public function HandleEvent($variable, $value, IPSModuleDimmer $module){
		}

		/**
		 * @public
		 *
		 * Zustand Setzen
		 *
		 * @param boolean $value Wert für Schalter
		 * @param integer $onTime Zeit in Sekunden nach der der Aktor automatisch ausschalten soll (nicht unterstützt)
		 */
		public function SetState($value, $onTime=false) {
			MXC_SwitchMode($this->instanceId, $value);
		}

		/**
		 * @public
		 *
		 * Liefert aktuellen Zustand
		 *
		 * @return boolean aktueller Schaltzustand
		 */
		public function GetState() {
			GetValue(IPS_GetVariableIDByName('Status', $this->instanceId));
		}

		/**
		 * @public
		 *
		 * Liefert aktuellen Level des Dimmers
		 *
		 * @return integer aktueller Dimmer Level
		 */
		public function SetLevel($level) {
         MXC_DimSet($this->instanceId, 15);
		}

 		/**
		 * @public
		 *
		 * Liefert aktuellen Level des Dimmers
		 *
		 * @return integer aktueller Dimmer Level
		 */
		public function GetLevel() {
			GetValue(IPS_GetVariableIDByName('Intensity', $this->instanceId));
		}
	}

	/** @}*/

The error I’m getting now, when I try to switch lights on, attached:



VB

Hi vitus,

The error message tells you the problem:

Object named ny del could not be found

–> you have to specify the group names without blanks in the configuration


      IPSLIGHT_GROUPS          => 'All,Stuer, Ny del', //wrong

      IPSLIGHT_GROUPS          => 'All,Stuer,Ny del', // correct

Regarding the XComfort Dimmer, you have to implement all required functions from the abstract base class.
Here is an example how it could work (but i have not tested it yet):


<?
	/**@addtogroup ipscomponent
	 * @{
	 *
 	 *
	 * @file          IPSComponentDimmer_EatonMoeller.class.php
	 * @author        Andreas Brauneis
	 *
	 *
	 */

   /**
    * @class IPSComponentDimmer_EatonMoeller
    *
    * Definiert ein IPSComponentDimmer_EatonMoeller Object, das ein IPSComponentDimmer Object für EatonMoeller implementiert.
    *
    * @author Andreas Brauneis
    * @version
    * Version 2.50.1, 31.01.2012<br/>
    */

	IPSUtils_Include ('IPSComponentDimmer.class.php', 'IPSLibrary::app::core::IPSComponent::IPSComponentDimmer');

	class IPSComponentDimmer_EatonMoeller extends IPSComponentDimmer {

		private $instanceId;
	
		/**
		 * @public
		 *
		 * Initialisierung eines IPSComponentDimmer_EatonMoeller Objektes
		 *
		 * @param integer $instanceId InstanceId des EatonMoeller Devices
		 */
		public function __construct($instanceId) {
			$this->instanceId = IPSUtil_ObjectIDByPath($instanceId);
		}

		/**
		 * @public
		 *
		 * Funktion liefert String IPSComponent Constructor String.
		 * String kann dazu benützt werden, das Object mit der IPSComponent::CreateObjectByParams
		 * wieder neu zu erzeugen.
		 *
		 * @return string Parameter String des IPSComponent Object
		 */
		public function GetComponentParams() {
			return get_class($this).','.$this->instanceId;
		}

		/**
		 * @public
		 *
		 * Function um Events zu behandeln, diese Funktion wird vom IPSMessageHandler aufgerufen, um ein aufgetretenes Event 
		 * an das entsprechende Module zu leiten.
		 *
		 * @param integer $variable ID der auslösenden Variable
		 * @param string $value Wert der Variable
		 * @param IPSModuleDimmer $module Module Object an das das aufgetretene Event weitergeleitet werden soll
		 */
		public function HandleEvent($variable, $value, IPSModuleDimmer $module){
		}

		/**
		 * @public
		 *
		 * Zustand Setzen 
		 *
		 * @param integer $power Geräte Power
		 * @param integer $level Wert für Dimmer Einstellung (Wertebereich 0-100)
		 */
		public function SetState($power, $level) {
			MXC_SwitchMode($this->instanceId, $power);
			if ($power) {
				MXC_DimSet($this->instanceId, $level);
			}
		}

		/**
		 * @public
		 *
		 * Liefert aktuellen Level des Dimmers
		 *
		 * @return integer aktueller Dimmer Level
		 */
		public function GetLevel() {
			return GetValue(IPS_GetVariableIDByName('Intensity', $this->instanceId));
		}

		/**
		 * @public
		 *
		 * Liefert aktuellen Power Zustand des Dimmers
		 *
		 * @return boolean Gerätezustand On/Off des Dimmers
		 */
		public function GetPower() {
			return GetValue(IPS_GetVariableIDByName('Status', $this->instanceId)) > 0;
		}

	}

	/** @}*/
?>

Hast du da schon etwas entwickelt?
Ich fang auch gerade an mich damit zu beschäftigen und würde gerne eine Anwesenheitssimulation einbauen.

LG

Hi,

Hab schon mal implementiert, was die Zeiten aufzeichnet und theoretisch auch wieder abspielen kann, zu finden ist das Ganze auf meinem NewFeatures Branch (hat aber noch einige kleine Fehler).
Wir fahren bald auf Urlaub, hoffe ich schaff das bis dahin, halte Euch auf dem Laufenden…

Hallo Zusammen!

Ich hab mal eine erste Version meiner Anwesenheitssimulation fertiggestellt.
Es kann pro IPS-Light Gruppe eine Definition für die Simulation eingegeben werden.
Diese beinhaltet:
>Name
>Zeitraum in dem die Aktion stattfinden darf
>Eintrittswarhscheinlichkeit mit der die Aktion gestartet wird
>Mindestdauer der Aktion (Eventdauer wird bei erneutem Eintritt um diese Dauer verlängert)
>Name der zu schaltenden IPS-Light Gruppe

Das Script startet sich selbst alle 5 Minuten und Prüft, ob etwas eingeschaltet werden soll.
Mit der Variable Anwesenheitssimulation (bei mir hat sie die ID 59988) wird die Simulation ein- oder ausgeschaltet.


<?

 //Verwendet IPS Light
 include('IPSLibrary\app\modules\IPSLight\IPSLight.inc.php');
 
 //Script alle 5 Minuten ausführen
 IPS_SetScriptTimer($_IPS['SELF'], 5*60);
 
	//Definition pro Raum und Zeitraum
	// Wie oft (in %) soll etwas in welchem Zeitraum geschehen und wie lange
	$scenes = array(
	         'Küche'  =>  array(
	            'NAME'  					=> 'Küche',
					'ACTIVE_FROM_TO'    	=> '20:40-22:00',
					'EVENT_CHANCE'    	=> 20, //20% Eintrittswahrscheinlichkeit
					'EVENT_DURATION'  	=> 10, //10 Minuten
					'EVENT_IPSLIGHT_GRP'  => 'Küche'  //zu schaltende IPS-LIGHT Gruppe
					),
            'GangEG'  =>  array(
	            'NAME'  					=> 'GangEG',
					'ACTIVE_FROM_TO'    	=> '20:40-23:00',
					'EVENT_CHANCE'    	=> 10,
					'EVENT_DURATION'  	=> 2,
					'EVENT_IPSLIGHT_GRP'  => 'GangEG'
					),
				'Wohnzimmer' => array(
	            'NAME'  					=> 'Wohnzimmer',
					'ACTIVE_FROM_TO'    	=> '20:40-23:00',
					'EVENT_CHANCE'    	=> 20,
					'EVENT_DURATION'  	=> 30,
					'EVENT_IPSLIGHT_GRP' => 'Wohnzimmer'
					),
             'Fernseher' => array(
	            'NAME'  					=> 'Fernseher',
					'ACTIVE_FROM_TO'    	=> '19:00-23:00',
					'EVENT_CHANCE'    	=> 10,
					'EVENT_DURATION'  	=> 45, 
					'EVENT_IPSLIGHT_GRP' => 'Fernseher'
					)
				);
 
 if(getValueBoolean(59988 /*[Anwesenheitssimulation]*/)){//Anwesenheitssimulation aktiv
 
	foreach($scenes as $scene){

   	$actualTime = explode("-",$scene["ACTIVE_FROM_TO"]);
		$actualTimeStart = explode(":",$actualTime[0]);
		$actualTimeStartHour = $actualTimeStart[0];
		$actualTimeStartMinute = $actualTimeStart[1];
		$actualTimeStop = explode(":",$actualTime[1]);
		$actualTimeStopHour = $actualTimeStop[0];
		$actualTimeStopMinute = $actualTimeStop[1];

		$timeStart = mktime($actualTimeStartHour,$actualTimeStartMinute);
		$timeStop = mktime($actualTimeStopHour,$actualTimeStopMinute);
      $now = time();
      
   	if ($now > $timeStart && $now < $timeStop){
   	   $minutesRange = ($timeStop-$timeStart)/60;
   	   $actionTriggerMinutes = 5;
			$rndVal = rand(1,100); 
			
			if($rndVal < $scene["EVENT_CHANCE"]){
				IPSLight_SetGroupByName($scene["EVENT_IPSLIGHT_GRP"], true);
				$EreignisID = @IPS_GetEventIDByName($scene["NAME"]."_EVENT", IPS_GetParent($_IPS['SELF']));
				if ($EreignisID === false){ //Event nicht gefunden > neu anlegen
				   $EreignisID = IPS_CreateEvent(1);
				   IPS_SetName($EreignisID,$scene["NAME"]."_EVENT");
				   IPS_SetParent($EreignisID, IPS_GetParent($_IPS['SELF']));
				}
				IPS_SetEventActive($EreignisID,true);
			   IPS_SetEventCyclic($EreignisID, 1, 0, 0, 0, 0,0);
			   IPS_SetEventCyclicTimeBounds($EreignisID,$now+$scene["EVENT_DURATION"]*60,0);
			   IPS_SetEventCyclicDateBounds($EreignisID,$now+$scene["EVENT_DURATION"]*60,0);
			   IPS_SetEventScript($EreignisID,
												"include(\"scripts\IPSLibrary\app\modules\IPSLight\IPSLight.inc.php\");
".
												"IPSLight_SetGroupByName(\"".$scene["EVENT_IPSLIGHT_GRP"]."\", false);");
			   
			}
		}
   }
 
 }else{
	//Anwesenheitssimulation nicht aktiv
	//Alle Timer deaktivieren
	foreach($scenes as $scene){
	   $EreignisID = @IPS_GetEventIDByName($scene["NAME"]."_EVENT", IPS_GetParent($_IPS['SELF']));
		if ($EreignisID != false){
         IPS_SetEventActive($EreignisID,false);
		}
	}
 }

?>

LG,
Peter

Eine kurze Frage zu den RGB-Modulen. Es gibt eine Klasse IPSComponentRGB_IPS868 die vermutlich zur Ansteuerung der IPS868 RGBW-Dimmer gedacht ist. Sehe ich das richtig das diese Klasse den „W“-Teil komplett ignoriert, also nur die RGB-Leiste ansteuert?

Ich bastele mir gerade meinen eigenen RGBW-Dimmer auf Arduino-Basis und hatte gehofft ich kann die Klasse als Ausgangspunkt zur Einbindung meiner eigenen Hardware in IPSLight nehmen…

Na ja, als Ausgangsbasis kannst Du die Klasse auf jeden Fall nehmen, alle notwendigen Daten liegen ja als Parameter vor und Du kannst den Stripe ansteueren wie Du willst. Mir ist allerdings Dein Usecase noch nicht ganz klar …

lg
Andreas

Hallo,

um die Anzeige von Dimmern synchron zu halten, dachte ich, man könnte sie einfach über API ansprechen.

<?
 IPSUtils_Include ('IPSLight.inc.php', 'IPSLibrary::app::modules::IPSLight');
 IPSLight_SetDimmerAbs(12345,0)
 
?>

Leider gibt es immer Fehler:
ist 12345 die ID des FS20-Dimmers, kommt „Warning: Variable #43674 existiert nicht in [Program\IPSLibrary\app\modules\IPSLight\IPSLight_Manager] on line 222“

ist 12345 die ID der Variable „Intensität“ des FS20 Dimmers, kommt
]"Warning: Objekt Intensität wurde nicht gefunden in D:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSLight\IPSLight_Manager.class.php on line 227

Warning: Variable #0 existiert nicht in D:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSLight\IPSLight_Manager.class.php on line 228

Warning: Objekt Intensität#Level wurde nicht gefunden in D:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSLight\IPSLight_Manager.class.php on line 229

Notice: Undefined index: Intensität in D:\IP-Symcon\scripts\IPSLibrary\app\modules\IPSLight\IPSLight_Manager.class.php on line 231

Fatal error: Class ‚‘ not found in D:\IP-Symcon\scripts\IPSLibrary\app\core\IPSComponent\IPSComponent.class.php on line 59
Abort Processing during Fatal-Error: Class ‚‘ not found
Error in Script D:\IP-Symcon\scripts\IPSLibrary\app\core\IPSComponent\IPSComponent.class.php on Line 59"[/SIZE]

Welche ID muss ich denn nun eingeben? Ich steh da leider auf´m Schlauch…

nette Grüße
Sven

Hallo Sven,

Du musst die Variable <<NameDerBeleuchtung>>#LEVEL aus dem Verzeichnis Program.IPSLibrary.data.modules.IPSLight.Switches verwenden.

Alternativ kannst Du auch die Funktion „SynchronizeDimmer“ verwenden, diese hatte ich für die Synchronisation vorgesehen:


   ...

   IPSUtils_Include ('IPSLight.inc.php', 'IPSLibrary::app::modules::IPSLight');
   $lightManager = new IPSLight_Manager();
   $lightManager->SynchronizeDimmer($name, $state, $dimmerValue);

$name=xxx … Name der Beleuchtung in der Konfiguration
$state=true/false … Status der Beleuchtung
$dimmerValue=0…100 … Dimmerwert

Bei beiden Funktionen muss auf den Wertebereich der Dimmer Variable geachtet werden (0=Minimum, 100=Maximum).

Hallo Andreas,

Danke - da hätte ich ja auch wirklich selbst drauf komen können…

nette Grüße
Sven