IPSLibrary

Ziel der Library ist es gemeinsam eine solide Sammlung an Scripts zu schaffen, die

[ul]
[li]von mehreren Usern gewartet werden können
[/li] [li]eine möglichst große Auswahl an Hardware unterstützt
[/li] [li]gut dokumentiert sind,
[/li] [li]durch Installation Scripts auch von weniger versierten Usern installiert werden können
[/li] [li]Möglichkeiten zur persönlichen Konfiguration und Erweiterung bieten (Motto: man muss nicht jede Code Zeile verstehen, man muss nur wissen wie man das jeweilige Module benutzt)
[/li] [li]eine bequeme Möglichkeit zum Update auf eine aktuellere Version bieten
[/li] [li]einen modularen Aufbau haben, sodass sie selektiv installiert werden können mit der Möglichkeit sie untereinander zu verlinken
[/li] [li]Entwicklern aus den verschiedensten Gebieten (Web/HTML, PHP, Hardware) die Möglichkeit bietet gemeinsam an einem Projekt zu arbeiten mit der Möglichkeit sich permanent zu synchronisieren.
[/li][/ul]

Diskussionen und Kommentare zur IPSLibrary bitte hier.

Aufbau der Library:

Vorteile

[ul]
[li]Weniger Aufwand bei Versions Upgrades von IP-Symcon. Durch die gemeinsame Code Basis können Versions Sprünge von IP-Symcon leichter und schneller bewerkstelligt werden.
[/li] [li]Scripts können von mehreren Personen gewartet werden, die Abhängigkeit von Einzelpersonen wird dadurch geringer.
[/li] [li]Direktes Profitieren von Weiterentwicklungen der Gruppe
[/li][/ul]

1 „Gefällt mir“

[ol]
[li]IPSLibrary
[/li][li]Inhaltverzeichnis
[/li][li]Verzeichnis Struktur der IPSLibrary
[/li][li]IP-Symcon Struktur der IPSLibrary
[/li][li]Konzepte der IPSLibrary
[/li][li]IPSComponent
[/li][li]IPSMessageHandler
[/li][li]Versions Handling
[/li][li]IPSModuleManager
[/li][li]IPSModuleManager – Konfiguration
[/li][li]Initialer Download/Base Installation
[/li][li]Installation neuer Module
[/li][li]Update eines oder mehrerer Module
[/li][li]Vorgehen im Fehlerfall
[/li][li]Migration alter bestehender Module in die IPSLibrary
[/li][li]Deinstallation von Modulen
[/li][li]Liste der derzeitigen Module
[/li][li]License
[/li][li]Mitwirken bei der Entwicklung/Git
[/li][li]Code Repository
[/li][li]Coding Guidelines
[/li][li]Dokumentation – Doxygen File, Docu File
[/li][li]Wichtige Links
[/li][li]Hinzufügen neuer Module
[/li][li]Demo Installation
[/li][li]Module Erweiterungen
[/li][/ol]

Die IPSLibrary enthält folgende Verzeichnisse:

[ul]
[li]app, enthält alle Module Skripte. Das app Verzeichnis untergliedert sich noch weiter in:
[/li] [LIST]
[li]core -beinhaltet alle Scripts, die für die core Funktionalität nötig sind
[/li] [li]modules - beinhaltet alle Scripts für Module der IPSLibrary
[/li] [li]hardware - beinhalted Scripte zur Anbindung von diverser Hardware
[/li] [/ul]
[li]config, enthält alle Konfigurations Dateien (INI Files, PHP Dateien in denen Konfigurationen abgelegt sind, PHP Dateien mit Callback Funktionen). Der Ordner hat die gleiche Struktur wie der app Folder und ist für die Konfiguration der Module und persönliche Anpassungen vorgesehen.
[/li] [li]install, hier liegen alle Scripts, die für die Installation von Modulen benötigt werden.
[/li] [li]webfront, enthält die Dateien, die normalerweise im IP-Symcon Ordner /webfront/user/ liegen.
[/li] [li]tests, ist für automatisierte Tests der Library vorgesehen.
[/li][/LIST]

Neben dem IPSLibrary Verzeichnis gibt es noch weitere Verzeichnisse:

[ul]
[li]tools, ist für externe Tools (diverse Helper Programme, alternative Clients, usw.) reserviert. Unterteilt sich in erster Linie in die verwendete Programmiersprache und dann noch weiter in src und bin.
[/li] [li]extensions, Ablageort für IP-Symcon Module Erweiterungen (DLLs). Unterteilt sich ebenfalls in src und bin.
[/li][/ul]

Die IPS Struktur ist im Root in folgende 3 Teile gegliedert:

[ul]
[li]Visualization, hier liegt die komplette Visualisierung. Dieser Zweig besteht de facto nur aus Links, Kategorien und Dummy Instanzen (zur Gruppierung). Die Links verweisen zu Variablen im Programm Ordner bzw. direkt in die Hardware Kategorie falls keine Programm Logik notwendig ist.
[/li] [li]Programm, in diesem Ordner befindet sich die komplette Logik zur Steuerung der Module. Die Library ist in einem eigenem Ordner IPSLibrary beheimatet, um sie von persönlichen Programmen zu trennen. Dieser Zweig besteht de facto nur aus Kategorien, Skripten, Variablen und einigen Dummy Instanzen zur Gruppierung.
[/li] [li]Hardware, Location für alle Hardware gebundenen Instanzen, die zur Kommunikation mit externen System benötigt werden (MediaPlayer, Homematic Devices, Register Variablen, …).
[/li][/ul]

Visualization:
Die Visualisierung unterteilt sich noch weiter in die einzelnen Frontents:

[ul]
[li]WebFront
[/li] [li]Mobile
[/li] [li]EDIP
[/li] [li]Dashboard
[/li][/ul]

Programm:
Die IPSLibrary unterteilt sich hier in folgende Hauptbereiche:

[ul]
[li]app, hier sind alle Programm Module abgelegt. Der Bereich unterteilt sich noch weiter in core (beinhaltet alle Kern Module, die Voraussetzung für die Installation fast aller anderer Module sind) , modules (beinhaltet alle anderen und in hardware (beinhaltet Skripte, die Teil der IPSLibrary sind und zur direkten Ansteuerung von Hardware benötig werden). Module, die optional installiert werden können).
[/li] [li]config, Ablageort für Konfigurations Dateien. Ist für persönliche Anpassungen vorgesehen und wird von der Update Prozedur NICHT überschrieben.
[/li] [li]data, beinhaltet die Daten der Module (Variablen). Wird von den Installations Scripts generiert, darf ebenfalls nicht manuell verändert werden, da es bei einem Update wieder überschrieben wird.
[/li] [li]install, beinhaltet alles was zur autom. Installation bzw. für das Update bestehender Module benötigt wird.
[/li][/ul]

Hardware:
Die genaue Unterteilung bleibt jedem letztendlich selber überlassen, für die Module der IPSLibrary erfolgt aber eine Aufteilung nach Art der Kommunikations bzw. nach Hersteller.

[ul]
[li]Homematic
[/li] [li]1-Wire
[/li] [li]IPS868
[/li] [li]MediaPlayer
[/li] [li]Onkyo
[/li] [li]EDIP
[/li][/ul]

Folgende Konzepte wurden bei der Implementierung der IPSLibrary …

[ul]
[li]IPSModuleManager – bietet die Möglichkeit zur Installation und zum Update von Modulen
[/li] [li]IPSVersionHandler – bietet Möglichkeiten zur Versionskontrolle installierter Module
[/li] [li]IPSComponent – stellt eine einheitliche Schnittstelle zwischen der Hardware und den verwendeten Modulen her
[/li] [li]IPSMessageHandler – kümmert sich um die aktive Rückmeldung der Hardware und verteilt die Messages (Events) zu den diversen Modulen
[/li][/ul]

IPSComponent
IPSComponent bildet einen abstraction Layer zur Hardware, dieser stellt für alle Module ein einheitliches Interface zu den unterschiedlichen Hardware Komponenten her.

Zur Zeit sind folgende Basis Komponenten vorgesehen:

[ul]
[li]IPSComponentShutter – Ansteuerung von Rollos,Markisen,Jalousien…
[/li] [li]IPSComponentSwitch – Ansteuerung Schalter
[/li] [li]IPSComponentDimmer – Ansteuerung Dimmer
[/li] [li]IPSComponentRGB – Ansteuerung RGB Leds
[/li] [li]IPSComponentPlayer – Ansteuerung von MP3/Webradio Playern
[/li] [li]IPSComponentAVControl – Ansteuerung Audio/Video Geräten
[/li] [/ul]

Von diesen Basis Klassen gibt es weitere Ableitungen, die die jeweilige Hardware Anbindung implementieren, hier eine Liste der Implementierungen für die Shutter Component:

[ul]
[li]IPSComponentShutter_Homematic
[/li] [li]IPSComponentShutter_MoellerEaton
[/li] [li]IPSComponentShutter_LCN
[/li] [li]IPSComponentShutter_1Wire
[/li] [li]IPSComponentShutter_FS20
[/li] [li]IPSComponentShutter_Enocean
[/li] [li]IPSComponentShutter_IPSShutterControl
[/li][/ul]

IPSModule
IPSModule bildet die Schnittstelle zu den Modulen, um die Rückmeldung der Hardware Komponenten zu den Modulen zu realisieren. So gibt es zB zu der Komponente IPSComponentPlayer (realisiert durch die Klassen IPSComponentPlayer_Mediaplayer, IPSComponentPlayer_Sonos und IPSComponentPlayer_Squeezebox) die analoge Klasse IPSModulePlayer (implementiert durch die Klasse IPSModulePlayer_NetPlayer), die sich um die Rückmeldung der Player kümmert.

Erzeugen eines Objektes:
In der Basis Klasse IPSComponent (von dieser erben alle anderen Klassen) stehen einige Funktionen zur Verfügung, die es ermöglichen Objekte dynamisch anhand definierter Regeln zu erzeugen:

Wichtig
IPSComponents haben keine Persistenz (Variablen) sondern es handelt sich um Scripte (Klassen), die eine definierte Schnittstelle zwischen der Hardware und den Modulen bereitstellt.

IPSLibrary_IPSComponentPlayer.png

Dieses core Modul ermöglicht in der implementierten Basis Version die aktive Rückmeldung der Hardware zu den Modulen.

Im Konfigurations File des MessageHandlers kann man eine VariableID definieren und jeweils eine Source und Destination Komponente. Dadurch erfolgt die Rückmeldung zu den Modulen auf die gleiche Weise wie die Ansteuerung und es kann in der jeweiligen Hardware Komponente die Umrechnung auf den Wertebereich der Schnittstelle erfolgen (zum Beispiel IPSComponentAVControl.SetVolume(0 – 100), IPSComponentAVControl.SetSource(0-x).

Beispiel Konfiguration:


$eventConfiguration = array(
  39520 => array('OnChange','IPSComponentPlayer_MediaPlayer,24582','IPSModulePlayer_NetPlayer',),
  );

Dieser Eintrag in der Datei IPSMessageHandler_Configuration.inc.php veranlasst den Installer des MessageHandlers ein Event auf die Variable 52123 (aktueller Titel des Mediaplayers) anzulegen. Bei jeder Variablen Änderung wird nun der MessageHandler aufgerufen, erzeugt 2 Objekte aus den angegeben Parametern und ruft auf dem ersten Objekt die Methode HandleEvent mit den Parametern Variable, Value und IPSModule auf.
Später ist auch denkbar diese Konfiguration und Events automatisch anzulegen, sobald die entsprechende Hardware über ein Module einmal angesteuert wurde.

Auf diese Art ist es zum Beispiel möglich jede Hardware, die einen IPSComponentPlayer implementiert mit jedem Modul, das einen IPSModulePlayer implementiert kommunizieren zu lassen.

oder mit der Komponente IPSComponentSwitch in einem Modul etwas zu Schalten ohne irgend eine Rücksicht auf die Hardware zu nehmen

oder Beschattungen unabhängig von einem Hersteller anzusteuern

oder einen Helligkeits Sensor einzubinden ohne Rücksicht auf den Hersteller nehmen zu müssen …

Aufbau der Modul Versions Nummern:

IPSMajorVersion.IPSMinorVersion.ModuleVersion.ModuleState

[ul]
[li]IPSMajorVersion und IPSMinorVersion bezeichnen die IPS Version, die für die aktuelle Entwicklung bzw. Erweiterung des Modules verwendet wurde. Diese Nummer kann im Prinzip frei gewählt werden, eine Empfehlung ist aber die Modul Nummer so zu wählen, dass es die erforderliche IP-Symcon Version für eine Installation wiederspiegelt.[/li][li]ModuleVersion ist die eigentliche Versionsnummer des Modules.[/li][li]ModuleState beschreibt den Status des Modules (Beta, Released, …)[/li][/ul]

Beispiele:
IPSComponent 2.50.9
IPSLogger 2.50.1
NetPlayer 2.50.3.Beta

Installations States:
Alle Module durchlaufen folgende Installations Zustände:

[ul]
[li]Loading[/li] [li]Loaded[/li] [li]Installing[/li] [li]OK [/li][/ul]

Version Checks
Vor der Installation werden die Versionen aller benötigten Komponenten überprüft, im Minimum sind dies:

[ul]
[li]die installierte IPS Version wird überprüft, die für die Installation des Modules im mindesten benötigt wird[/li] [li]Version des IPSModuleManager wird überprüft[/li] [li]Core Module der Library werden überprüft (IPSComponent, IPSLogger)[/li][/ul]

Eine Beschreibung der geforderten Version findet man in der Doku des jeweiligen Modules.

Der IPSModuleManager bildet das Herzstück des IPSLibrary Installers. Er beinhaltet diverse Konfigurations Möglichkeiten, die man in der Datei IPSModuleManager.ini verändern kann (Ablagerort: IPSLibrary\install\InitializationFile).

Der IPSModuleManager supportet die folgenden Möglichkeiten:

[ul]
[li]Initialer Download und Installation neuer Module
[/li][li]Update auf neuere Version von Modulen
[/li] [li]Versionsverwaltung für Module
[/li] [li]Backup Handler
[/li] [li]Konfigurations Handler
[/li][li]Log Handler
[/li][/ul]

Initialer Download und Updates
Siehe Beschreibung weiter unten.

Versions Verwaltung
Der IPSModuleManager beinhaltet eine interne Versionsverwaltung, der die aktuelle IPS Version überprüft und auch alle Module überprüft, die Voraussetzung des aktuellen Modules sind.

Konfigurations Handler
Der Konfigurations Handler bietet die Möglichkeit Installation Parameter (wie zum Beispiel WebFront Konfigurator ID, persönliche Icons, Namen usw.) in einem Initialisierungs File abzulegen und so die Installation der Module auf die persönlichen Bedürfnisse abzustimmen.

Backup Handler
Vor dem Download der neuen Skripte wird auch automatisch ein Backup der Skripte des betroffen Modules gemacht.
Ablageort für Backups ist standardmäßig auf /backups/ gesetzt und kann über den Konfigurations Parameter „BackupDirectory“ jederzeit verändert werden. Das Backup des jeweiligen Update Vorgangs wird dann in einem Folder IPSLibrary_YYYY-MM-DD_HH:MI abgelegt.

Log Handler
Der LogHandler legt bei jedem Update oder Installations Vorgang ein Protokoll File an, wo man die einzelnen Schritte des Installations Ablaufes nachvollziehen kann.
Standardmäßig ist das Output Verzeichnis auf „logs“ gesetzt, kann aber jederzeit über den Parameter „LogDirectory“ verändert werden.
Output erfolgt in eine Datei mit dem Namen IPSModuleManager_YYYY-MM-DD_HHMI.log

IPSModuleManager_Overview.png

Alle Konfigurations Einstellung, die für Installation von Modulen benötigt werden, sind in Initialisierungs Files abgelegt. Ablageort für diese Files ist „IPSLibray\install\InitializationFiles\“, die Files werden beim initialen Download des Modules aus den Files im „Default“ Verzeichnis generiert und bei späteren Updates nicht mehr verändert.
Bei Problemen kann das File wieder mit der Version im Default Verzeichnis repariert werden. Im Verzeichnis „Examples“ finden sich noch weitere Files, die Beispiele für die jeweilige Konfiguration beinhalten.

Eine kurze Beschreibung des jeden Parameters, ist im jeweiligen Initialisierungs File zu finden.

Allgemeine Parameter sind im Konfigurations File des Module Managers abgelegt (Backup Directory, Logging Directory), spezielle Module Parameter sind dann im jeweiligen Ini File des Modules abgelegt.

Teilweise werden Parameter auch in beiden Files gesucht. Zum Beispiel werden die diversen Parameter zur Installation des WebFronts (Enabled, Root, WFCId) zuerst im jeweiligen Module Ini File gesucht (zB IPSLogger.ini), ist es dort nicht definiert, wird im File IPSModuleManager.ini gesucht.

Beispiel:


[WFC10]
Enabled=true
Path=Visualization.WebFront.Entertainment
ID=
TabName=
TabIcon=Speaker
TabOrder=20

[Mobile]
Enabled=true
Path=Visualization.Mobile
Name=Entertainment
Order=20
Icon=Speaker

markiert immer eine Gruppe von Einstellungen, In der Gruppe “WFC10” werden die Einstellungen gesucht, die für die WebFront Installation benötigt werden. (WFC10 - WebFront mit 10 Zoll Optimierung). Analog gibt es eine Gruppe „Mobile“, die für das Mobile Interface (iPhone, iPad und Android) verwendet wird.

Beschreibung der wichtigsten Parameter:

[ul]
[li]„Enabled“ definiert, ob das jeweilige Interface installiert wird
[/li] [li]„Path“ bestimmt den Installations Pfad in IP-Symcon
[/li] [li]„ID“ bezeichnet die ID des Webfront Konfigurators der verwendet werden soll, wenn nichts angegeben wird, verwendet die Installations Prozedure den erst Besten der gefunden wird.
[/li] [li]“TabName“ definiert Namen im SplitPane des WebFronts
[/li] [li]“TabIcon“ definiert Icon im SplitPane des WebFronts
[/li] [li]“TabOrder“ definiert Position im SplitPane des WebFronts
[/li] [li]“Name“ für Mobile Frontend Installation
[/li] [li]“Order“ Position Mobile Frontend
[/li] [li]“Icon“ Icon für Mobile Frontend
[/li][/ul]

Hinweis:
Mit der aktuellen Version des Modules IPSModuleManagerGUI steht eine Möglichkeit zur Verfügung, diese Einstellungen auch bequem über einen kleinen Wizard im WebFront vornehmen zu können.

Mit dem BaseLoader Script ist der komplette Download des IPSLibrary Installers und der benötigten „core“ Module aus dem Source Code Repository möglich:

Folgende Module werden durch das Script heruntergeladen und installiert:

[ul]
[li]IPSModuleManager
[/li][li]IPSLogger
[/li][li]IPSModuleManagerGUI
[/li][li]IPSMessageHandler
[/li][li]IPSComponent
[/li][/ul]

Der initiale Download sollte auch, falls noch nicht vorhanden, die Datei __autoload.php anlegen und folgende Zeilen hinzufügen:


    include_once IPS_GetKernelDir()."\scripts\IPSLibrary\app\core\IPSUtils\IPSUtils.inc.php";
    IPSUtils_Include("IPSLogger_PhpErrorHandler.inc.php", "IPSLibrary::app::core::IPSLogger");

Nach dem Ausführen des BaseLoader Scriptes steht können alle weiteren Module bequem über das WebInterface von IPSModuleManagerGUI installiert werden:

Die Installation neuer Module gliedert sich in 3 Phasen:

[ul]
[li]Module Download[/li] [li]Konfiguration[/li] [li]Installation[/li][/ul]

Module Download
Ein Module kann nach mit folgendem Code geladen werden:


   IPSUtils_Include ("IPSModuleManager.class.php","IPSLibrary::install::IPSModuleManager");
   $moduleManager = new IPSModuleManager('IPSLogger');
   $moduleManager->LoadModule();

Konfiguration
Ist nicht bei jedem Module nötig, Details über die jeweilige Konfiguration kann der jeweiligen Module Dokumentation entnommen werden.

Module Installation
Folgende Schritte werden bei einer Installation ausgeführt:

[ul]
[li]Check von anderen Modulen, die für die Installation Voraussetzung sind[/li] [li]Versions Check von referenzierten Modulen[/li] [li]Installation (beinhaltet das Anlegen aller benötigten Variablen und Skripte)[/li][/ul]

Beispiel zur Installation des IPSLogger Modules:


   IPSUtils_Include ("IPSModuleManager.class.php","IPSLibrary::install::IPSModuleManager");
   $moduleManager = new IPSModuleManager('IPSLogger');
   $moduleManager->InstallModule();

Hinweis:
Download und Installation kann auch mit dem Modul IPSModuleManagerGUI vorgenommen werden.

Update eines einzelnen Modules erfolgt mit folgendem Code:


   IPSUtils_Include ("IPSModuleManager.class.php","IPSLibrary::install::IPSModuleManager");
   $moduleManager = new IPSModuleManager('IPSLogger');
   $moduleManager->UpdateModule();

Ein Update aller installierten Module kann mit folgendem Code gemacht werden;


   IPSUtils_Include ("IPSModuleManager.class.php","IPSLibrary::install::IPSModuleManager");
   $moduleManager = new IPSModuleManager('');
   $moduleManager->UpdateAllModules();

Bei einem Update werden alle Skripte des jeweiligen Modules neu aus dem Repository geladen
(Konfigurations Skripte / Dateien werden nicht verändert). Sollte nach dem Update eine neue
Versionsnummer gefunden werden, wird automatisch das Installations Script ausgeführt (inklusive
Anpassung der WebFront und Mobile Strukturen).

Hinweis:
Download und Installation kann auch mit dem Modul IPSModuleManagerGUI vorgenommen werden.

Sollte der Installations Vorgang mit einem Fehler abbrechen, so sollte man sich als erstes die Fehlermeldung genau durchlesen – meistens gibt diese bereits Auskunft über den zugrunde liegenden Fehler.

Konfigurations Fehler
Mit hoher Wahrscheinlichkeit wird der Fehler wohl in einer ungültigen Konfiguration liegen, in jedem Falle die Dokumentation in den Konfigurations Files nochmals genau lesen, als Referenz kann man auch einen Blick auf die Files im Example Verzeichnis des jeweiligen Modules werfen.

Der IPSModuleManager ist so eingestellt, dass er bei jedem Fehler sofort abbricht. Im Fehlerfall also Problem beheben und Installation erneut starten.

Änderungen an der Konfiguration
Sehr viele Konfigurations Parameter erfordern ein erneutes Ausführen der Installation (ist normalerweise im Konfigurations File vermerkt).


   IPSUtils_Include ("IPSModuleManager.class.php","IPSLibrary::install::IPSModuleManager");
   $moduleManager = new IPSModuleManager('<<MyModuleName>>');
   $moduleManager->InstallModule();

Fehler bei Hardware Anbindung
Um Fehler bei der Anbindung über den IPSComponent Layer zu verhindern, sollte dieser bereits vor der Installation des eigentlichen Modules überprüft werden. Details sind der Dokumentation der jeweiligen Komponente zu entnehmen.

Im Falle eines Homematic Shutter Modules könnte man das auf folgende Weise machen:


   $component = new IPSComponentShutter_Homematic(12345 /*ID der Homematic Instanz*/);
   $component->MoveDown(); /*Herunterfahren der Beschattung*/

Manuelles Löschen
Manche Konfigurations Änderungen erfordern ein manuelles Löschen der alten Daten, wie zum Beispiel das Entfernen von Geräten in der Entertainment Steuerung. Sollte etwas zuviel gelöscht werden – kein Problem, ein erneutes Ausführen der Installation behebt das Problem.

Fehler Liste
Eine List von aufgetretenen Fehlern und deren Ursache und Lösung befindet sich im folgenden Thread

Jeder Post enthält:

[ul]
[li]eine Beschreibung des Fehlers (Fehlermeldung oder fehlerhaftes Verhalten)[/li] [li]die Ursache (fehlerhafte Konfiguration oder …)[/li] [li]eine kurze Beschreibung wie das Problem behoben wurde[/li][/ul]

Die Migrations bestehender Skripte (IPSLogger, IPSShadowing, …) konnte durch diverse Struktur Änderungen nicht komplett automatisiert werden.

Es wird generell empfohlen die alten Module komplett zu löschen und mit der IPSLibrary neu zu installieren.

Es ist auch möglich alte Module mit der IPSLibrary zu mischen, allerdings empfiehlt es sich in diesem Fall den IPSLogger auf die neue Struktur zu migrieren.
Für bestehende Module kann dann der IPSLogger durch ein Include File mit dem Namen „IPSLogger.ips.php“ im /scripts Verzeichnis auf die neue Struktur verlinkt werden (kompletten Inhalt der Datei mit folgendem Code ersetzen):


<?
   IPSUtils_Include ('IPSLogger.inc.php',      'IPSLibrary::app::core::IPSLogger');
?>

Alle anderen IPSLogger_xxx Files können gelöscht werden

Migrations Script:
Weiters gibt es auch noch die Möglichkeit ein Migrations Script auszuführen, das teilweise versucht die bestehenden Strukturen in die IPSLibrary zu migrieren:

Es gibt jedoch ein Script, dass die alten Installationen so gut es geht in die neue Struktur migriert (um die bereits vorhandenen IDs in IPS nicht zu Veränderung und Verlinkungen auf die bereits installierten Module nicht ungültig zu machen. Voraussetzung ist, dass die IPSLibrary Base Installation bereits vorhanden ist (siehe Thread weiter oben).

1.) Folgendes Script lädt die neuen Files für das jeweilige Module und verschiebt auch alle Variablen in die neue Struktur (die Zeile für das zu migrierende Modul muss auskommentiert werden.
Ein manuelles Anlegen des Scriptes ist nicht erforderlich, es wird bereits durch den „BaseLoader“ erzeugt und ist unter Program.IPSLibrary.install.BaseLoader zu finden):

2.) Die Anpassungen im jeweiligen Konfigurations File muss manuell gemacht werden (es kann aber der Inhalt von den alten Konfigurations Files direkt übernommen werden).

3.) Installations Script nochmals ausführen:


   $moduleManager = new IPSModuleManager('<<MyModuleName>>');
   $moduleManager->InstallModule();

ACHTUNG:
Pfad für WebFront und Mobile Installation haben sich geändert. Diese liegt jetzt unter „Visualization.WebFront“ bzw. „Visualization.Mobile“. Pfad im Init File (/IPSLibrary/install/InitializationFiles/<<Module>>.ini anpassen oder Links manuell verschieben.

Im Falle des IPSLoggers hat sich die Struktur im WebFront von „WebFront.Logger“ auf „Visualization.WebFront.IPSLogger“ und bei Mobile von
„iPhone.System.Logging“ auf „Visualization.Mobile.System.Logging“ geändert.

Beim IPSLogger muss auch noch das Widget manuell korrigiert werden (die ID des Scriptes muss auf das neue Script Program.IPSLibrary.app.core.IPSLogger.IPSLogger_ClearSingleOut.ips.php korrigiert werden, alternativ kann das Widget auch gelöscht werden, es wird dann beim nächsten Installation Vorgang automatisch angelegt).

Im Zweifel einfach die bestehenden Struktur des jeweiligen Modules löschen, und die Installation erneut ausführen.

In der aktuellen Version des IPSModuleManagers ist nun auch eine automatische Deinstallation möglich:


   IPSUtils_Include ("IPSModuleManager.class.php","IPSLibrary::install::IPSModuleManager");
   $moduleManager = new IPSModuleManager('<<MyModuleName>>');
   $moduleManager->DeleteModule();  

Die Deinstallation läuft im Wesentlichen folgendermaßen ab:

Als erstes die Visualisierung entfernen:

[ul]
[li]Löschen der IPS Einträge (Links, …) im Mobile Frontend (Visualization.Mobile.<<Module>>)[/li] [li]Löschen der Webfront Konfigurator Einträge (Einträge mit Namen <<ModuleName_XXX>> löschen)[/li] [li]Löschen der IPS Einträge (Links, …) im WebFront Ordner (Visualization.WFC10.<<Module>>)[/li][/ul]

Danach die eigentliche Programm Logik entfernen:

  • [li]Löschen der IPS Einträge (Variablen, …) im Program.IPSLibrary.data.<<Moduletype>>.<<Module>> Folder[/li] [li]Löschen der IPS Einträge (Skripte, …) im Program.IPSLibrary.app.<<Moduletype>>.<<Module>> Folder[/li] [li]Löschen der IPS Einträge (Skripte, …) im Program.IPSLibrary.config.<<Moduletype>>.<<Module>> Folder[/li] [li]Löschen der IPS Einträge (Skripte) im install Folder[/li] Program.IPSLibrary.install.InitializationFiles.<<Module>>.ini,
    Program.IPSLibrary.install. InstallationScripts.<<Module>>_Installation,
    Program.IPSLibrary.install. DownloadListFiles.<<Module>>_Filelist.ini,

Zum Ende werden noch die Dateien im Filesystem gelöscht:

  • [li]Löschen der Dateien im IPSLibrary/app/<<Moduletype>>/<<Module>> Verzeichnis[/li] [li]Löschen der Dateien im IPSLibrary/config/<<Moduletype>>/<<Module>> Verzeichnis[/li] [li]Löschen der Dateien im /webfront/user/<<Module>> Verzeichnis[/li] [li]Löschen der Installations Dateien[/li] IPSLibrary/install/InitializationFiles/<<Module>>.ini,
    IPSLibrary/install/ InstallationScripts/<<Module>>_Installation.ips.php,
    IPSLibrary/install/ DownloadListFiles/<<Module>>_Filelist.ini,

Hinweis:
Das Löschen eines Modules kann auch mit dem Modul IPSModuleManagerGUI vorgenommen werden.

Derzeitige Module:

[ul]
[li]IPSLogger– Logging Handler[/li] [li]IPSComponent – Hardware Abstraktions Layer[/li] [li]IPSEDIP– Ansteuerung von eDIP Displays der Firma ASSEMBLY ELECTRONICS[/li] [li]Entertainment– Modul zur kompletten Entertainment Steuerung[/li] [li]NetPlayer– Player zum Abspielen von MP3s und WebRadios[/li] [li]IPSWatering– Bewässerungs Steuerung[/li] [li]IPSTwilight– Dämmerungsberechnung mit Visualisierung[/li] [li]IPSWeatherForcastAT– Wettervorhersage für Österreich[/li] [li]BusBahnInfo - Anzeige von Bus und Bahn Informationen[/li] [li]WithingsInfo - Einbindung von Withings Waage & Blutdruck[/li] [li]IPSWecker - Wecker und Zeitschaltuhr[/li] [li]IPSSchaltuhr - Zeitschaltuhr[/li] [li]IPSShadowing– Beschattungs Steuerung[/li] [li]Plugwise– Pugwise Energieverbrauchsmessung[/li] [li]IPSModuleManagerGUI– GUI zum Laden und Updaten von Modulen[/li] [li]IPSLight – Lichtsteuerung[/li] [li]IPSCam – Kamerasteuerung[/li] [li]AudioMax – Multiroom Steuerung von eServiceOnline[/li] [li]IPSHomematic – Anlegen und Überwachen von Homatic Komponenten[/li] [li]IPSHighcharts – Chart Visualisierung[/li] [li]IPSPowerControl – Energieverbrauchs Visualisierung [/li][/ul]

Weiters sind noch vorhanden:

[ul]
[li]IPSTools - .Net Programm zum Steuern und Abfragen diverser Windows Funktionalitäten (Bildschirmschoner starten, Mausposition abfragen, …)[/li] [li]eBusAdapter – IP-Symcon Delphi Extension zur Anbindung eines eBusAdapters[/li][/ul]

Die komplette IPSLibrary unterliegt der GPL (General Public License). Alle Source Files sollten einen kurzen Header haben, der darauf hinweist.

/**
* 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.
*/

http://www.gnu.org/licenses/gpl.txt.

GNU General Public License

Ein Mitwirken bei der IPSLibrary ist auf vielfältige Weise möglich:

[ul]
[li]Erstellen von Konzepten für die Entwicklung neuer Module (welche Konfigurations Möglichkeiten würde ein geplantes Module benötigen, wie könnte die Visualisierungen aussehen, welche Schnittstellen bräuchte das Module, wie kann die jeweilige Hardware angesteuert werden, …).
[/li] [li]Entwicklung – Erstellen neuer Module, Erweiterung der bestehenden Module mit zusätzlichen Features,
[/li] [li]Dokumentation – Schreiben von User Dokumentation (Welche Möglichkeiten bieten die Module zur Konfiguration, wie kann man die Module untereinander verlinken, welche Dinge müssen manuell erledigt werden). Zusätzlich sind auch noch Beiträge im Wiki bzw. auch im Forum auf die man verlinken kann willkommen, wo man noch diverse Hintergrund Informationen bekommt (Hardware die man erfolgreich im Einsatz hat, Schaltpläne, Zusammenfassungen über diverse Themenbereiche der Hausautomatisierung und vieles mehr…)
[/li] [li]Testen – Testen von neuen Entwicklungen, Testen der Module nach neuen IP-Symcon Releases, Implementieren von automatisierten Tests, …
[/li] [li]Support – Hilfestellung bei Installations- oder Konfigurationsproblemen
[/li][/ul]

Um Änderungen im Code zu veröffentlichen, ist die Installation eines GIT Clients notwendig. Ein intuitiver Client wäre zum Beispiel:

Git Client - SmartGit

Vorhandene Code Repositories siehe weiter unten…

Zur Zeit gibt es das offizielle Release Repository und einige Development Repositories.

Release Repository:
IPSLibrary

5 Developer Repositories:
IPSLibrary Development Brownson
IPSLibrary Development 1007
IPSLibrary Development MCS-51
IPSLibrary Development MyFly
IPSLibrary Development Domizei

In der neuesten Version des IPSModuleManagers ist auch ein Support mehrerer Repositories implementiert.

Durch das Ausführen des BaseLoader Skriptes wird der ModuleManager aus dem Release Repository heruntergeladen, dieser beinhaltet auch eine Liste der bevorzugten Repositories (zu finden im Config Verzeichnis mit dem Namen KnownRepositories.ini).
Die GUI bietet dann jeweils das Modul mit der höchsten Versionsnummer zum Download an.

Zusätzlich oder andere Repositories kann man durch das File KnownUserRepositories.ini einbinden.

Ansicht eines Repositories im WebBrowser