Development – Erweiterung IPSComponent

Hinzufügen neuer Hardware Anbindungen

Folgende Schritte sind nötig, um eine neue Hardware Anbindung für die IPSLibrary zu erstellen:

  • Neue Ableitung der Klasse und Implementierung
  • Tests
  • Registrierung in der Filelist
  • Deployment und Laden

Beispiel für eine Schalter Komponente für den EIB:

Die folgenden Zeilen zeigen, wie man eine Switch Komponente für EIB erstellt. Für andere Komponenten geht man einfach analog vor.

Neue Klasse zur Anbindung der Hardware

Neues File IPSComponentSwitch_EIB.class.php im Verzeichnis “…IP-Symcon\scripts\IPSLibrary\app\core\IPSComponent\IPSComponentSwitch\” anlegen:

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

   class IPSComponentSwitch_EIB extends IPSComponentSwitch {

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

      public function HandleEvent($variable, $value, IPSModuleSwitch $module){
         $module->SyncState($value, $this);
      }

      public function SetState($value) {
         EIB_Switch($this->instanceId, $value);
      }

      public function GetState() {
         GetValue(IPS_GetVariableIDByName('Value', $this->instanceId));
      }

   }

Die üblichen Kommentare zur Dokumentation der Klasse wurde an dieser Stelle zwecks der Übersichtlichkeit einmal weggelassen.

Testen der Klasse

Ab diesem Zeitpunkt kann die neue Klasse bereits in allen Modulen verwendet werden, will man die neue Klasse auch noch in der IP-Symcon Konsole sichtbar machen, sind auch noch die restlichen Schritte notwendig.

Möglichkeit 1
Direktes Include des neuen IPSComponent Files und Instanzieren eines Objektes:

   IPSUtils_Include ("IPSComponentSwitch_EIB.class.php", 
                     "IPSLibrary::app::core::IPSComponent::IPSComponentSwitch");
   $component = new IPSComponentSwitch_EIB(12345);
   $component->SetState(true);

Möglichkeit 2
Verwendung der generischen Konstruktor Funktion, diese sucht sich das File, das eingebunden werden soll, anhand des Klassennamen.

   IPSUtils_Include ("IPSComponent.class.php", "IPSLibrary::app::core::IPSComponent");
   $component = IPSComponent::CreateObjectByParams('IPSComponentSwitch_EIB,12345');
   $component->SetState(true);

Registrierung im Download File

Mit folgender Zeile wird die neue Klasse im File IPSComponent_FileList.ini registriert.

ScriptFiles[]="IPSComponentSwitch\IPSComponentSwitch_EIB.class.php"

Zu finden ist dieses File im Verzeichnis “…IP-Symcon\scripts\IPSLibrary\install\DownloadListFiles”:

Deployment und Laden

Zur Registrierung des Files in IP-Symcon muss das File aus einem Repository geladen werden. Dies kann man sehr einfach machen, indem man das IPSComponent Modul in ein Verzeichnis des eigenen System exportiert und von dort wieder einen „Download“ startet:

Deployment

   IPSUtils_Include ("IPSModuleManager.class.php", "IPSLibrary::install::IPSModuleManager");
   $moduleManager = new IPSModuleManager('IPSComponent', 'C:\IPS\GIT\IPSLibrary');
   $moduleManager->DeployModule('');

Download

   IPSUtils_Include ("IPSModuleManager.class.php", "IPSLibrary::install::IPSModuleManager");
   $moduleManager = new IPSModuleManager('IPSComponent', 'C:\IPS\GIT\IPSLibrary');
   $moduleManager->UpdateModule('');