IPSLibrary

Sinn und Zweck von Coding Guidelines sollten wohl allgemein bekannt sein
Programmierstil

Anbei einige Links zu PHP Projekten und deren Guidelines:
PHP Coding Standard - Regeln und Empfehlungen
PHP Coding Standard
Manual :: Coding Standards
http://www.buxaprojects.com/de/php_coding_guidelines.htm

Bitte um aktive Diskussion, welche Coding Guidelines für IPS und das IPSLibrary Projekt wohl am praktikabelsten sind, insbesondere über folgende Punkte:

[ul]
[li]File Naming Conventions
[/li] [li]Geschweifte Klammern (Allman-Stil oder nicht)
[/li] [li]Kommentare in Englisch oder Deutsch
[/li] [li]Dokumentation / Fileheader
[/li] [li]Benennung von Variablen, Funktionen
[/li] [li]Benennung von Konstanten
[/li][/ul]

Stand der Dinge
Derzeitiges Naming von Dateien:
.class.php für Dateien mit Klassen
.inc.php für Dateien, die man inkludieren kann
.ips.php für Dateien, die direkt von IPS getriggert werden (ActionScript, …)

Geschweifte Klammern werden zur Zeit im Java/Linux Stil gesetzt
Einrückungsstil

Konstanten in Großbuchstaben

Die Dokumentation unterteilt sich in folgende Kategorien

[ul]
[li]Wiki Artikel[/li] [li]Diskussions Thread im Forum[/li] [li]Source Code [/li][/ul]

Zu den meisten Modulen ist ein WIKI Artikel vorhanden, wo folgende Dinge zu finden sind:

[ul]
[li]Allgemeine Funktionsbeschreibung des Modules[/li] [li]Übersicht zur Installation und Konfiguration[/li] [li]API Beschreibung[/li] [li]Beschreibung der Callback Funktionen[/li] [li]Screenshots [/li][/ul]

Eine Übersicht über alle Wiki Artikel ist hier zu finden.

Im Diskussions Thread ist eine kurz Vorstellung des Moduls zu finden, sowie diverse Posts zu Problemlösungen und Erweiterungen.

Im SourceCode ist die „technische“ Dokumentation der Module zu finden, zur Formatierung wird Doxygen verwendet.
Details zur Konfiguration bzw. die Beschreibung der Callback Funktionen befindet sich grossteils nur im Source Code.

PHP Manual
PHP: PHP-Handbuch - Manual
PHP: Sprachreferenz - Manual

GIT
Git - Fast Version Control System
Pro Git - Table of Contents

GIT Client
Git Client - SmartGit

GIT Repository
IPSLibrary
IPSLibrary Development Brownson
IPSLibrary Development 1007

Doxygen
Doxygen
Doxygen Manual
Doxygen DocBlocks
Dokumentationswerkzeug Doxygen
Doxygen Commands

GPL
http://www.gnu.org/licenses/gpl.txt.
GNU General Public License

Als erstes stellt sich die Frage über die Art des Modules – handelt es sich um eine reine Hardware Anbindung oder um ein allgemeines Module, das eine allgemeine Aufgabe löst und mit verschiedenster Hardware kommunizieren kann.
Je nach dem ist die Platzierung in der IPSLibrary zu wählen, eventuell sollte man auch über eine Aufteilung in Hardware und Module Teil nachdenken.

Vor der Entwicklung/Implementierung eines neuen Modules wäre eine aktive Diskussion hier im Forum sicher wünschenswert, um möglichst viele Anforderungen bereits im Design zu berücksichtigen.
Anbindung neuer Hardware sollte möglichst über IPSComponent/IPSMessageHandler erfolgen (siehe auch Post weiter oben).

Um neue Hardware in bestehende Module zu integrieren, sollte es in Zukunft reichen, eine IPSComponent Klasse der jeweiligen Hardware zu implementieren

Detailierter Installations Ablauf:

Module gliedern sich in einen Installations- und einen Application Teil. Der Applikations Teil gliedert sich wiederum in Konfiguration, Daten und die eigenliche Programm Logik (das spiegelt sich auch in der verwendeten Struktur wieder.

Die Installation wird mit dem IPSModuleManager gesteuert, dieser benötigt für die Installation eines Modules 3 Files:

[ul]
[li]DownloadList File, beinhaltet alle Dateien, die zur Installation eines Modules nötig sind.[/li] [li]Installations INI File, beinhaltet alle Parameter, die bei der Installation angepasst werden können (WebFront, Mobile …).[/li] [li]Installations Script File, dieses Script erledigt die eigentliche Installation (Anlegen der Variablen, Events, …). [/li][/ul]

Nach dem Starten von LoadModule wird zuerst eine aktuelle Version des DownloadList Files geladen und danach alle darin aufgelisteten Files. Für alle aufgelisteten „Default“ Files wird beim erstmaligen Laden eine „Working Copy“ angelegt, die bei späteren Updates aber nicht mehr überschrieben wird.
Beim erstmaligen Laden des Modules erfolgt auch die Registrierung der Scripts in der IP-Symcon Baum Struktur.

Mit dem Starten von InstallModule wird das Installations Script ausgeführt. Dort wird als erstes die Version aller benötigten Sub-Module überprüft und danach startet die eigentliche Installation, die alle benötigten Objekte angelegt (Variablen, Events, …).

Ein Beispiel zur Entwicklung eines eigenen Modules ist im WIKIzu finden

Da man die meisten Module auch ohne entsprechende Hardware betreiben kann, ist es möglich eine Demo Installation der IPSLibrary zu installieren und die Funktionen der diversen Module zu testen.

Zu diesem Zweck liegen in den Example Verzeichnissen Konfigurations Files, die man benützen kann um ein Modul zu installieren.

Zur Zeit sind folgende Module in der Demo Version enthalten:

[ul]
[li]IPSModuleManager
[/li] [li]IPSModuleManagerGUI – WebFront Interface zu Installation und Update von Modulen
[/li] [li]IPSLogging – Logging und Error Handler der IPSLibrary
[/li] [li]IPSComponent – Hardware Abstraktions Layer der IPSLibrary
[/li] [li]IPSMessageHandler – Rückmeldung der Hardware zu den Modulen
[/li] [li]IPSShadowing – Beschattungssteuerung
[/li] [li]IPSWatering – Bewässerungssteuerung
[/li] [li]IPSLight – Lichtsteuerung
[/li] [li]IPSMessageHandler – Rückmeldung der Hardware zu den Modulen
[/li] [li]NetPlayer mit dem IPS eigenen MediaPlayer (Musik Verzeichnis muss danach noch gesetzt werden)
[/li] [li]AudioMax – Ansteuerung des MultiRoom Systems von eServiceOnline
[/li] [li]Entertainment Steuerung
[/li][/ul]

Der Code zur Installation der Demo Version ist im WIKIzu finden.

Voraussetzung ist, dass das BaseLoader Script bereits ausgeführt wurde.

Hinweis:
Die Installation benötigt ungefähr 500 Variablen

Module Erweiterungen 2012-02-10

[ul]
[li]Initialer Library Release 2.5 beta
[/li][li]Anpassung der Entertainment Steuerung an IPS 2.5
[/li][li]Verbesserte Installation des IPSLoggers (Autom. Installation InfoWidget und PHP-ErrorHandler )
[/li][li]Neues Module NetPlayer
[/li][/ul]

edit 2015-11-16
Link zur Doku entfernt …

Neue WIKI Artikel:

[ul]
[li]Step by Step Anleitung für Modul
[/li][li]IPSModuleManager Funktionen
[/li][li]Development Environment
[/li][/ul]

IPSLibrary Release

[ul]
[li]IPSModuleManager - neue Funktion DeleteModule, ermöglicht die Deinstallation von Modulen
[/li][li]Doxygen Build File und Screenshots in die Library aufgenommen, bietet nun für jeden die Möglichkeit die Doku zu generieren
[/li][/ul]

Development Environments:

[ul]
[li]1007 - Withings-Waage, Einbindung der Withings Waage
[/li][li]1007 - BusBahnInfo, Anzeige von Bus und Bahn Informationen
[/li][li]Brownson - IPSWatering, Bewässerungssteuerung
[/li][li]Brownson - IPSTwilight, Dämmerungsberechung
[/li][li]Brownson - IPSWeatherForcastAT, Wettervorhersage Österreich
[/li][/ul]

Neue WIKI Artikel:

[ul]
[li]Versionsverwaltung mit GIT (besten Dank an dieser Stelle an 1007)
[/li][/ul]

IPSLibrary Release:

[ul]
[li]IPSModuleManger - diverse kleinere Bug Fixes
[/li][li]Alle Module im IPSLibrary Release supporten jetzt eine Deinstallation
[/li][/ul]

Wir dürfen einen neuen IPSLibrary Entwickler begrüssen - Welcome MCS-51

Development Repository:
MCS-51 - Wecker/Zeitschaltuhr
MCS-51 - Erweiterung von IPSEDIP

Habe auch die Modul Übersicht mal auf den aktuellsten Stand gebracht und mit den zugehörigen Threads im Forum verlinkt.

Neuer WIKI Artikel:

[ul]
[li]Dokumentation IPSShadowing[/li][/ul]

Neue Entwickler:
Auch einen neuen Entwickler dürfen wir begrüßen - Welcome Domizei385 (implementiert einige Erweiterungen für die Entertainmentsteuerung)

Neue Module

[ul]
[li]IPSSchaltuhr - eine Zeitschaltuhr[/li][li]IPSShadowing - eine Beschattungssteuerung[/li][li]Plugwise Energieverbrauchsmessung[/li][/ul]

ModuleManager

[ul]
[li]Erweiterung IPSModuleManager – Support mehrerer Repositories[/li] [li]BaseLoader – Überarbeitetes BaseLoader Script[/li] [li]IPSModuleManagerGUI– GUI zum Laden und Updaten von Modulen[/li][/ul]

WIKI
Zahlreiche neue Wiki Artikel stehen zur Verfügung

Neue Module

[ul]
[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]

Demo Installation
Neues Demo Installations Script ist verfügbar

WIKI

Habe einen WIKI Artikel geschrieben, wie das prinzipielle Vorgehen bei einer Erweiterung von IPSComponent ist

Entwickler

Wir dürfen auch wieder einen neuen Entwickler begrüssen, der einige Zwave Anbindungen beisteuern wird. Ein herzliches Willkommen an Skeal.

Hallo,

könnt ihr bitte die Links in den Posts hier aktualisieren (404) oder sonst die Artikel aus dem Forum nehmen.

Danke Paul

Es sollte jetzt alle Links passen, falls noch was fehlt, bitte um Angabe des Posts …

Guten Abend!
heute habe ich bemerkt das IPSLibrary nicht mehr funktioniert.
Habe nun Alles gelöscht und wollte neu installieren (BaseLoader). Hier das Ergebnis:

IP-Symcon 5.0, Raspberry Pi, 19.09.2018, a73d830a649

Hier nochmal die Fehlermeldung die beim Skriptausführen erstellt wird:

Fatal error: Uncaught Exception: script /var/lib/symcon/scripts/IPSLibrary/app/core/IPSLogger/IPSLogger_PhpErrorHandler.inc.php could NOT be found! in /var/lib/symcon/scripts/IPSLibrary/app/core/IPSUtils/IPSUtils.inc.php:38
Stack trace:
#0 /var/lib/symcon/scripts/__autoload.php(4): IPSUtils_Include(’/var/lib/symcon…’, ‚IPSLibrary::app…‘)
#1 /usr/share/symcon/scripts/__autoinclude.inc.php(30): require_once(’/var/lib/symcon…’)
#2 {main}
thrown in /var/lib/symcon/scripts/IPSLibrary/app/core/IPSUtils/IPSUtils.inc.php on line 3

Danke für die Hilfe!
lg

Hallo Brownson,

könntest du bitte HighCharts um die Aggregationen 5=5 Minuten und 6=1 Minute erweitern?
.\IPSLibrary\app\modules\Charts\IPSHighcharts\IPSHighcharts.inc.php:
line 438:

		if  (isset($Serie['AggType']) && ($Serie['AggType']<0 || $Serie['AggType']>6) )

line 515ff:

						if ($Serie['AggType'] == 0)   //0=Hour
							$Serie['AggNameFormat'] = "d.m.Y H:i";
						else if ($Serie['AggType'] == 1) //1=Day
							$Serie['AggNameFormat'] = "d.m.Y";
						else if ($Serie['AggType'] == 2) //2=Week
							$Serie['AggNameFormat'] = "\K\WW Y";
						else if ($Serie['AggType'] == 3) //3=Month
							$Serie['AggNameFormat'] = "M Y";
						else if ($Serie['AggType'] == 4) //4=Year
							$Serie['AggNameFormat'] = "Y";
						else if ($Serie['AggType'] == 5) //5=5-Minute
							$Serie['AggNameFormat'] = "i";
						else if ($Serie['AggType'] == 6) //6=Minute
							$Serie['AggNameFormat'] = "i";

Findet man deinen Code in Github, damit man dort einen Beitrag leisten kann?