# SDK (PHP) > Symcon Dokumentation · Deutsch · erzeugt am 2026-09-26 > Index: https://www.symcon.de/de/llms.txt Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/ _Benötigt Symcon >= 4.0_ ### Beschreibung Ab der Version 4.0 können Module mithilfe von PHP erstellt werden. ### Voraussetzungen PHP Kenntnisse IP-Symcon 4.0 oder höher ### Video-Tutorials Für viele Themen rund um das SDK stehen [Video-Tutorials](../../getting-started.md) auf unserem YouTube-Kanal bereit. ### Einbindung in IP-Symcon Die Datenstruktur kann [hier](sdk-php.md) nachgesehen werden. Der erste Schritt wäre das Erstellen der [Bibliothek](sdk-php.md) , sowie das Einrichten aller benötigen Dateien. Diese können ebenfalls der Strukturübersicht entnommen werden. Anschließend können die [Module](sdk-php/module.md) entwickelt werden. > **Hinweis:** Um ein Modul in der lokalen Entwicklung neuzuladen ist jeweils ein kurzer Neustart des Dienstes nötig. Dieser Schritt ist bei einem Update via Repository nicht nötig. Nach vollendeter Entwicklung wird es empfohlen, dass die Bibliothek samt Modul/-en in einem Repository zusammengefasst wird. Beispielsweise wie in diesem: [Rechenmodule](https://github.com/symcon/Rechenmodule) Anschließend können die Module, direkt über die Repository-URL, im [Module Control](../../modules/module-control.md) hinzugefügt werden. Auch ist es mögich dieses Modul für den [Module-Store einzureichen](sdk-php.md). ![Repository hinzufügen](https://www.symcon.de/media/pages/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/a89ff557a6-1790424938/sdktools-addrepo.png) ## Aktionen Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/aktionen/ _Benötigt Symcon >= 6.0_ ### Beschreibung Es ist möglich eigene Aktionen als Teil der [Bibliothek](sdk-php.md) zu definieren. Diese können nach der Installation der Bibliothek wie unter [Aktionen](../../concepts/automations.md) beschrieben verwendet werden. Werden Aktionen abgespeichert oder konfiguriert resultiert dies in drei Werten: Dem Aktionsziel, der AktionsID und den Aktionsparametern. Das Aktionsziel stellt hierbei das Zielobjekt dar, beispielsweise im Falle eines Ereignisses das darunterliegende Objekt. Die AktionsID identifiziert eindeutig die ausgewählte Aktion. Die Parameter sind eine Menge an Werten, welche individuell zur Aktion gehören. Hierdurch kann ein Benutzer eine Aktion weiter parametrisieren und beispielsweise angeben auf welchen Wert eine Variable geschaltet werden soll. ### Struktur Für jede Aktion, welche Teil der Bibliothek sein soll, muss eine JSON-Datei im Unterordner "actions" der Bibliothek erstellt werden. Diese JSON-Datei muss ein JSON-Objekt beinhalten, welches der folgenden Struktur folgt. | Parameter | Datentyp | Beschreibung | | ----------------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | id | string | Einmalige GUID zur eindeutigen Identifikation der Aktion. [GUID Generator](../sdk-tools.md) | | caption | string | Sichtbare Bezeichnung der Aktion | | form | array/string | Dieses Feld kann ein Array von Konfigurationselementen beinhalten wie in den Bereichen "elements" oder "actions" der [Konfigurationsformulare](sdk-php/configuration-forms.md). Alternativ kann das Formular durch ein PHP-Skript dynamisch generiert werden. In diesem Fall enthält dieses Feld den entsprechenden Code, welcher das Konfigurationsformular als Objekt zurückgibt. Der PHP-Code kann auf mehrere Strings in einem Array aus Strings aufgeteilt werden. Soll eine bereits definierte Aktion bearbeitet werden, beispielsweise in einem Ereignis, so stehen die definierten Parameter als Systemvariablen zur Verfügung, siehe [SelectAction](sdk-php/configuration-forms.md). Die Einstellungen des Formulars stellen die Parameter der Aktion dar, wobei jedes benannte Konfigurationselement seinen Wert unter seinem "name" zur Verfügung stellt. | | action | array/string | PHP-Code, welcher die Ausführung der Aktion definiert. Wird die Aktion ausgeführt, so wird der PHP-Code aus diesem Feld ausgeführt. Dabei stehen die Parameter als Systemvariablen zur Verfügung. | | priority (optional) | int | Priorität der Aktion, in einer Auswahl werden Aktionen nach der Priorität sortiert | | category (optional) | string | (__default:__ "other") Die Kurzform der Kategorie der Aktion. Mögliche Kategorien sind unter [category](https://www.symcon.de/./#category) aufgelistet. | | restrictions (optional) | array | (__default:__ []) Eine Liste von Restriktionen, welche einschränken, unter welchen Bedingungen diese Aktion angeboten wird. Die möglichen Restriktionen sind in den Tabellen [restrictions](https://www.symcon.de/./#restrictions) beschrieben. | | locale (optional) | object | (__default:__ []) Hier kann wie in der [Lokalisierung eines Moduls](sdk-php.md) die Aktion lokalisiert werden. Hierdurch wird sowohl die Form als auch die caption lokalisiert. | | format (optional) | string | (__default:__ Inhalt von caption) Dieser String stellt eine Kurzformatierung der Aktion mit ihren Parametern dar, welche an verschiedenen Stellen angezeigt werden kann. Die Formatierung wird in [ICU-Syntax](https://formatjs.io/docs/core-concepts/icu-syntax/) notiert. Dort können als Variablen die Parameter (Name entsprechend des Parameters) sowie des Ziel (Name "TARGET") verwendet werden. Für die Formatierung stehen einige zusätzliche [Symcon-spezifische Typen](https://www.symcon.de/./#Formatierung) zur Verfügung. Der Inhalt von format wird durch die locale übersetzt. | | description (optional) | string | (__default:__ "") Dieser Text wird als Beschreibung für die Aktion in der Aktionsauswahl angezeigt. Der Inhalt von description wird durch die locale übersetzt. | | readable (optional) | array/string | (__default:__ Inhalt von action, wobei alle Statusvariablen von Parametern durch die eingestellten Werte ersetzt werden) PHP-Code, welcher die Aktion als lesbaren Code zurückgibt. Dies wird beispielsweise für "Befehle einfügen" im Skripteditor verwendet. Dabei stehen die Parameter als Systemvariablen zur Verfügung. | | deprecated (optional) | array/string | (__default:__ Nicht veraltet) Wenn dieser Parameter gesetzt ist, wird die Aktion als veraltet betrachtet und wird in einer Auswahl nicht angezeigt. Wenn ein Dialog zum Bearbeiten dieser Aktion geöffnet wird, wird der PHP-Code in diesem Parameter mit den aktuellen Parametern der Aktion ausgeführt. Diese Aktion wird direkt in die Aktion transformiert, welche der PHP-Code zurückgibt. | #### category | Kurzform | Name | Beschreibung | | -------- | ------------------------- | --------------------------------------------------------------------------- | | target | Zielspezifisch | Aktionen, die zu einem spezifischen Ziel gehören, üblicherweise einem Modul | | math | Mathematische Operationen | Mathematische Operationen um Objekte zu modifizieren | | set | Wert setzen | Aktionen, die den Wert einer Variable setzen | | switch | Wert schalten | Aktionen, die den Wert einer Variable schalten | | expert | Experte | Aktionen, die tieferes Verständniss über IP-Symcon oder PHP erfordern | | other | Andere Aktionen | Aktionen, die in keine andere Kategorie passen | #### restrictions ##### Restriktionen für alle Objekttypen | Parameter | Datentyp | Beschreibung | | ------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | objectType | array | Die Aktion wird nur für Ziele der angegebenen Typen angeboten (0 = Kategorie, 1 = Instanz, 2 = Variable, 3 = Skript, 4 = Ereignis, 5 = Media, 6 = Link) | | includeEnvironments | array | Eine Liste von Umgebungen in welchen die Aktion angeboten wird, siehe [Umgebungen](https://www.symcon.de/./#Umgebungen) | | excludeEnvironments | array | Eine Liste von Umgebungen in welchen die Aktion nicht angeboten wird. Bei Übereinstimmungen mit "includeEnvironments" wird die Aktion nicht angezeigt. Siehe [Umgebungen](https://www.symcon.de/./#Umgebungen) | | writable | bool | Ist diese Restriktion auf true gesetzt, so wird die Aktion nur angeboten, falls das Zielobjekt nicht schreibgeschützt sein. Ist das Ziel eine Variable, so darf diese zusätzlich keine [Variablenaktion](../../concepts.md) haben. | ##### Restriktionen für Zielobjekte vom Typ Instanz | Parameter | Datentyp | Beschreibung | | ------------------------ | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | hasActionStatusVariables | bool | Ist diese Restriktion auf true gesetzt, so wird die Aktion nur angeboten, falls die Instanz mindestens eine schaltbare Statusvariable hat | | hasInstanceFunctions | bool | Ist diese Restriktion auf true gesetzt, so wird die Aktion nur angeboten, falls die Instanz mindestens eine öffentliche Funktion besitzt, welche nicht vom IPSModule geerbt wurde | | moduleID | array | Die Aktion wird nur angeboten, falls die ModulID der Zielinstanz in dieser Liste enthalten ist | | moduleType | array | Die Aktion wird nur angeboten, falls der Modultyp der Instanz in dieser Liste enthalten ist (0: Kern, 1: I/O, 2: Splitter, 3: Gerät, 4: Konfigurator, 5: Discovery, 6: Visualisierung) (seit Symcon 9.0) | | hasIdent | array | Die Aktion wird nur angeboten, falls die Zielinstanz für jeden Eintrag dieser Liste ein Kind mit dem entsprechenden Ident hat (seit Symcon 6.1) | | hasNoIdent | array | Die Aktion wird nur angeboten, falls die Zielinstanz für jeden Eintrag dieser Liste KEIN Kind mit dem entsprechenden Ident hat (seit Symcon 8.0) | ##### Restriktionen für Zielobjekte vom Typ Variable | Parameter | Datentyp | Beschreibung | | ------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | requestAction | bool | Ist diese Restriktion auf true gesetzt, so wird die Aktion nur angeboten, falls die Variable über eine Variablenaktion verfügt | | variableType | array | Die Aktion wird nur angeboten, falls der Variablentyp der Zielvariablen in dieser Liste enthalten ist (0 = Boolean, 1 = Integer, 2 = Float, 3 = String) | | profilesInclude | array | Die Aktion wird nur angeboten, falls der Name ihres aktuell verwendetes Profils in dieser Liste enthalten ist | | profilesExclude | array | Die Aktion wird nur angeboten, falls der Name ihres aktuell verwendeten Profils NICHT in dieser Liste enthalten ist | | profileIsEnum | bool | Ist diese Restriktion auf true gesetzt, so wird die Aktion nur angeboten, falls das Profil der Variablen eine Aufzählung darstellt (Schrittweite = 0, mindestens eine Assoziation) | | profileIsPercentage | bool | Ist diese Restriktion auf true gesetzt, so wird die Aktion nur angeboten, falls das Profil der Variablen einen Prozentwert darstellt (Suffix = "%", Max Wert > Min Wert) | | presentation | array | Die Aktion wird nur angeboten, falls die ID der verwendeten Darstellung in dieser Liste enthalten ist | ##### Restriktionen für Zielobjekte vom Typ Automation | Parameter | Datentyp | Beschreibung | | ---------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | scriptType | array | Die Aktion wird nur angeboten, falls der Automationstyp der Automation in dieser Liste enthalten ist (0 = PHP-Skript, 1 = Ablaufplan, 2 = IPSWorkflow) (ab Version 6.1) | ##### Restriktionen für Zielobjekte vom Typ Ereignis | Parameter | Datentyp | Beschreibung | | --------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | | eventType | array | Die Aktion wird nur angeboten, falls der Ereignistyp des Ereignis in dieser Liste enthalten ist (0 = Ausgelöst, 1 = Zyklisch, 2 = Wochenplan) (ab Version 6.3) | ##### Umgebungen | Umgebung | Beschreibung | | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | | Default | Die Standardumgebung in welcher die meisten Aktionen definiert sind, viele Auswahlen beschränken sich auf diese Aktionen oder bieten sie zusätzlich an | | TestCommands | Aktionsauswahl im "Befehle testen"-Dialog einer Instanz, hier werden "Default"-Aktionen nicht mit angeboten | | EventTrigger | Aktionsauswahl in einem ausgelösten Ereignis | | EventCyclic | Aktionsauswahl in einem zyklischen Ereignis | | EventSchedule | Aktionsauswahl in einem Wochenplan | | FlowScript | Aktionsauswahl im Ablaufplan | | ScriptEditor | Aktionsauswahl im "Befehl hinzufügen"-Dialog eines Skripteditors | | Weitere Umgebungen | Es können eigene Umgebungen definiert werden, um beispielsweise spezielle Aktionen als Teil einer Instanzkonfiguration anzubieten | #### Systemvariablen Sowohl in einem möglichen PHP-Skript für die Form als auch in dem Skript für die Ausführung kann via Systemvariablen auf das Ziel der Aktion und die eingestellten Parameter zugegriffen werden. So stehen folgende Systemvariablen in diesen Skripten zur Verfügung: | Systemvariable | Beschreibung | | -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | $_IPS['TARGET'] | ObjektID des Ziels der Aktion | | $_IPS[(Name des Parameters)] (z.B. $_IPS['VALUE']) | Der eingestellte bzw. ausgewählte Wert des Parameters. Diese Felder stehen in einem Skript für die Form nicht zur Verfügung, falls die Aktion initial ausgewählt wird und somit noch keine Parameter ausgewählt wurden. Daher sollte dort mit der PHP-Funktion isset geprüft werden, ob die Systemvariablen vorhanden sind. | | Weitere [Systemvariablen](../../concepts/automations.md) | Weitere Systemvariablen stehen basierend auf der Ausführung der Aktion zur Verfügung. Sollte es hierbei zu Überschneidungen mit Parameternamen kommen, werden die Parameterwerte verwendet und es kann nicht auf die regulären Systemvariablen zugegriffen werden. | #### Formatierung Im Feld format können alle Typen des [ICU-Formats](https://formatjs.io/docs/core-concepts/icu-syntax/) verwendet werden. Zusätzlich wurden Symcon-spezifische Typen eingeführt. Wie bei ICU üblich, bestehen diese aus drei Teilen: Der Parameterbezeichnung, der Typbezeichnung und optionalen zusätzlichen Parametern. ##### profile Der Wert wird auf Basis des Profils der Zielvariablen dargestellt. Hat das Ziel kein Profil, so wird der Wert direkt dargestellt. Beispiele: {VALUE, profile} ##### valueFormatted Es wird der formatierte Wert der Variablen mit der ObjektID des Wertes dargestellt. Beispiele: {VARIABLE, valueFormatted} ##### object Es wird der Name des Objekts mit der ObjektID des Wertes dargestellt. | Parameter | Beschreibung | | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ident (optional) | Wird als Parameter "ident" gefolgt von einer Parameterbezeichnung angegeben, so wird stattdessen der Name des Kindes mit dem Ident, welcher dem Parameter entspricht, dargestellt. Steht der Wert hinter ident in einfachen Anführungszeichen ('), so wird der Wert dazwischen direkt als Ident verwendet. | Beispiele: {VARIABLE, object}, {TARGET, object, ident IDENT} ##### action Es wird die Formatierung der Aktion, welche als JSON-String codiert im Wert steht, dargestellt. | Parameter | Beschreibung | | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | targetID (optional) | Wird als Parameter "targetID" gefolgt von einer Parameterbezeichnung angegeben, so wird die ZielID der formatierten Aktion auf den Wert des entsprechenden Parameters gesetzt. Wird zusätzlich direkt danach "ident" gefolgt von einer Parameterbezeichnung angegeben, so wird die ZielID stattdessen auf die ObjektID des Kindes mit dem Ident, welcher dem Parameter entspricht, dargestellt. Steht der Wert hinter ident in einfachen Anführungszeichen ('), so wird der Wert dazwischen direkt als Ident verwendet. | | linkTarget (optional) | Wird der Parameter "linkTarget" gesetzt, so wird die ZielID des Links als Ziel der formatierten Aktion verwendet. Bei "linkTarget" müssen keine zusätzlichen Parameter angegeben werden. "linkTarget" kann mit targetID kombiniert werden, indem "linkTarget" danach angegeben wird. Dann wird das beschriebene Ziel als Link betrachtet und dessen Ziel für die Aktion verwendet. | Beispiele: {ACTION, action}, {ACTION, action, targetID VARIABLE}, {ACTION, action, targetID TARGET ident IDENT}, {ACTION, action, linkTarget}, {ACTION, action, targetID LINK linkTarget} ##### scheduleAction Es werden die Namen von Wochenplanaktionen von Wochenplänen unter dem angegebenen Elternobjekt mit der ID des Wertes dargestellt. | Parameter | Beschreibung | | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | parent | Wird als Parameter "parent" gefolgt von einer Parameterbezeichnung angegeben, so wird als Elternobjekt des Objekt mit dem Wert als ID verwendet | | action | Wird als Parameter "action" gefolgt von einer AktionsID in einfachen Anführungszeichen (') angegeben, so werden nur Namen von Wochenplanaktionen dargestellt, welche die entsprechende Aktion ausführen | Beispiele: {SCHEDULE_ACTION, scheduleAction, parent PARENT}, {SCHEDULE_ACTION, scheduleAction, parent PARENT action '{7938A5A2-0981-5FE0-BE6C-8AA610D654EB}'} ##### selectPresentation Verschiedene Formatierungen je nach verwendeter Darstellung einer Variablen | Parameter | Beschreibung | | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ID einer Darstellung | Wird als Parameter die ID einer Darstellung gefolgt von einer Formatierung verwendet, so wird die Formatierung genutzt, falls die Variable die Darstellung verwendet | | other | Wird als Parameter "other" gefolgt von einer Formatierung verwendet, so wird die Formatierung genutzt, falls die ID der verwendeten Darstellung sonst nicht als Parameter zu finden war | Beispiele: {TARGET, selectPresentation, {6B9CAEEC-5958-C223-30F7-BD36569FC57A}{Schieberegler} {05CC3CC2-A0B2-5837-A4A7-A07EA0B9DDFB}{Farbe} other{Sonstige Darstellung}} ### Beispiele __switchValueString.json__ ```php { "id": "{A4D52B67-BE4B-4AD0-964F-B9BA2556AAB0}", "caption": "Switch to Value", "form": [ { "type": "ValidationTextBox", "name": "VALUE", "caption": "Value" } ], "action": "RequestAction($_IPS['TARGET'], $_IPS['VALUE']);", "restrictions": { "objectType": [ 2 ], "variableType": [ 3 ], "profileIsEnum": false, "requestAction": true }, "priority": 10, "locale": { "de": { "Switch to Value": "Schalte auf Wert", "Value": "Wert", "Set to {VALUE, profile}": "Setze auf {VALUE, profile}" } }, "format": "Set to {VALUE, profile}" } ``` __setValueIntegerPreviousReminder.json__ ```php { "id": "{92971E6F-4AC1-BEF8-B325-9E044D27B3EB}", "caption": "Set to Value", "form": [ "$form = [", " {", " 'type' => 'SelectColor',", " 'name' => 'VALUE',", " 'allowTransparent' => false,", " 'caption' => 'Value',", " 'writable' => true", " }", "];", "if (isset($_IPS['VALUE'])) {", " $form[] = {", " 'type' => 'Label'", " 'caption' => 'Previously selected value: ' . $_IPS['VALUE']", " };", "}", "return $form;" ], "action": "SetValue($_IPS['TARGET'], $_IPS['VALUE']);", "restrictions": { "objectType": [ 2 ], "variableType": [ 1 ], "profilesExclude": [ "~HexColor" ] }, "priority": 5, "locale": { "de": { "Set to Value": "Setze auf Wert", "Value": "Wert", "Set to {VALUE, profile}": "Setze auf {VALUE, profile}" } }, "format": "Set to {VALUE, profile}" } ``` __switchStatusVariable.json__ ```php { "id": "{E616C2B2-A827-1712-4AE0-841C57B3DD74}", "caption": "Switch Status Variable", "form": [ "$options = [];", "$firstVariable = false;", "foreach (IPS_GetChildrenIDs($_IPS['TARGET']) as $childID) {", " $object = IPS_GetObject($childID);", " if (($object['ObjectType'] === 2) && ($object['ObjectIdent'] !== '')) {", " if (!HasAction($childID)) {", " continue;", " }", " if (!$firstVariable) {", " $firstVariable = $object;", " }", " $options[] = [", " 'caption' => $object['ObjectName'],", " 'value' => $object['ObjectIdent']", " ];", " }", "}", "return [", " [", " 'type' => 'Select',", " 'name' => 'IDENT',", " 'caption' => 'Status Variable',", " 'options' => $options,", " 'value' => $firstVariable['ObjectIdent'],", " 'onChange' => 'IPS_UpdateFormField(\"ACTION\", \"targetID\", IPS_GetObjectIDByIdent($IDENT, ' . $_IPS['TARGET'] . '), $id);'", " ],", " [", " 'type' => 'SelectAction',", " 'name' => 'ACTION',", " 'caption' => 'Action',", " 'targetID' => isset($_IPS['IDENT']) ? IPS_GetObjectIDByIdent($_IPS['IDENT'], $_IPS['TARGET']) : $firstVariable['ObjectID']", " ]", "];" ], "action": [ "$targetVariableID = IPS_GetObjectIDByIdent($_IPS['IDENT'], $_IPS['TARGET']);", "$action = json_decode($_IPS['ACTION'], true);", "echo IPS_RunActionWait($action['actionID'], $targetVariableID, $action['parameters']);" ], "restrictions": { "objectType": [ 1 ], "hasActionStatusVariables": true }, "locale": { "de": { "Switch Status Variable": "Schalte Statusvariable", "Status Variable": "Statusvariable", "{TARGET, object, ident IDENT}: Switch Variable": "{TARGET, object, ident IDENT}: Schalte Variable" } }, "format": "{TARGET, object, ident IDENT}: {ACTION, action, targetID TARGET ident IDENT}", "readable": [ "$targetVariableID = IPS_GetObjectIDByIdent($_IPS['IDENT'], $_IPS['TARGET']);", "$action = json_decode($_IPS['ACTION'], true);", "$action['parameters']['TARGET'] = $targetVariableID;", "$action['parameters']['ENVIRONMENT'] = $_IPS['ENVIRONMENT'];", "$action['parameters']['PARENT'] = $_IPS['PARENT'];", "echo IPS_GetActionReadableCode($action['actionID'], $action['parameters']) . \"\\n\";" ] } ``` __multiplySetVariable.json (veraltete Aktion)__ ```php { "id": "{085176EC-BEE5-3732-15E5-8C82875CABD4}", "caption": "Multiply with Value of other Variable", "form": [ "$variable = IPS_GetVariable($_IPS['TARGET']);", "$types = [];", "if ($variable['VariableType'] === 2) {", " $types = [1, 2];", "}", "else {", " $types = [ $variable['VariableType'] ];", "}", "return [", " [", " 'type' => 'SelectVariable',", " 'name' => 'VARIABLE',", " 'caption' => 'Variable',", " 'validVariableTypes' => $types", " ]", "];" ], "action": "SetValue($_IPS['TARGET'], GetValue($_IPS['TARGET']) * GetValue($_IPS['VARIABLE']));", "restrictions": { "objectType": [ 2 ], "variableType": [ 1, 2 ], "profileIsEnum": false, "writable": true }, "locale": { "de": { "Multiply with Value of other Variable": "Multipliziere mit Wert einer anderen Variablen", "Variable": "Variable", "Multiply by value of {VARIABLE, object}": "Multipliziere mit Wert von {VARIABLE, object}", "Set the target variable to its current value multiplied with the value of another variable": "Setze die Zielvariable auf ihren aktuellen Wert multipliziert mit dem Wert einer anderen Variablen" } }, "format": "Multiply by value of {VARIABLE, object}", "category": "math", "description": "Set the target variable to its current value multiplied with the value of another variable", "deprecated": [ "return [", " 'actionID' => '{A3153696-013A-41B1-A001-5E8085D95465}',", " 'parameters' => [", " 'DYNAMIC' => true,", " 'FACTOR' => 0,", " 'VARIABLE' => $_IPS['VARIABLE']", " ]", "];" ] } ``` ## Bibliotheken Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/bibliotheken/ _Benötigt Symcon >= 4.0_ ### Beschreibung Die Bibliothek ist die Basis für jede Modulentwicklung. Es können auch mehrere Module zu einer Bibliothek zusammengefasst werden. Die benötigte Verzeichnisstruktur kann unter [Struktur](sdk-php.md) eingesehen werden. Diese kann über ein Repository (wir empfehlen Github oder Bitbucket) zur Verfügung gestellt werden. ### Einbindung in IP-Symcon Die Datei library.json muss vorhanden sein, welche im Hauptverzeichnis liegt. Anhand der Verzeichnisstruktur kann IP-Symcon die gesamte Bibliothek über das "Module Control" einlesen. | Parameter | Datentyp | Beschreibung | | ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | id | string | Jedes Modul besitzt zur eindeutigen Identifikation eine eigene GUID (siehe unten Infobox). [GUID Generator](../sdk-tools.md) | | author | string | Unter welchem Namen wurde die Bibliothek entwickelt | | compatibility (ab 4.3) | array | Überprüft ob die benötigte Version installiert ist. Es kann auf Kernelversion und/oder Datum geprüft werden. (Weitere Beschreibung siehe Tabelle) | | name | string | Der Name der gesamten Bibliothek. (A-Z, a-z, 0-9, Leerzeichen, Unterstrich sind erlaubte Zeichen. Leerzeichen und Unterstriche dürfen dabei jedoch nicht am Anfang oder Ende sein. Ein leerer Name ist ebenfalls nicht gültig.) | | url | string | URL zu der Homepage (Muss mit http:// oder https:// beginnen. Darf Alternativ auch leer sein) | | version | string | Versionsnummer. Diese kann als String beliebig definiert werden. Wir empfehlen eine Darstellung in der Form "Zahl.Zahl". Bsp: "4.2" | | build | integer | Buildnummer | | date | integer | Unix-Zeitstempel | > **Hinweis:** Die GUID ist eine UUID und hat das Format 8-4-4-4-12. Die Zahlen geben die Anzahl der Ziffern an. Die Ziffern bestehen aus Zeichen zwischen 0-9 und A-F. Es müssen immer Bindestriche und geschweifte Klammern vorhanden sein und es dürfen nur Großbuchstaben verwendet werden. (Beispiel: {12345678-90AB-CDEF-1234-567890ABCDEF} ) #### Compatibility | Parameter | Datentyp | Beschreibung | | ------------------ | -------- | ---------------------------------------- | | version (optional) | string | Mindest-Version als String. Bsp: "4.2" | | date (optional) | integer | Datum als UnixTimestamp. Bsp: 1491343200 | ### Beispiele __library.json__ ```php { "id": "{F96B257F-85E7-47CF-8340-8FE850AACD10}", "author": "Symcon GmbH", "name": "Misc Modules", "url": "https://www.symcon.de", "compatibility": { "version": "4.2", "date": 1491343200 }, "version": "1.0", "build": 0, "date": 0 } ``` ## Darstellungen Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/darstellungen/ _Benötigt Symcon >= 8.0_ ### Beschreibung Eine visuelle Übersicht aller Darstellungen gibt es in der [Objekt-Darstellung](../../components/object-presentation.md). Die Darstellung einer Variable kann über die Funktionen [RegisterVariable](sdk-php/module.md) und [MaintainVariable](sdk-php/module.md) gesetzt werden. Die Darstellung einer Variable wird über einen Array mit folgenden "Key"->"Value" Paaren bestimmt. | Key | Beschreibung | | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | PRESENTATION | Die als GUID formatierte ID der zu nutzenden Darstellung (Konstanten der [Darstellungen](sdk-php.md)) | | TEMPLATE | (optional) Die als GUID formatierte ID der zu nutzenden Vorlage (Konstanten der [Vorlagen](sdk-php.md)) | | *Darstellungsparameter* | (optional) Anstelle einer Vorlage können auch beliebig viele Parameter einer Darstellung gesetzt werden. Die Parameter werden auf der gleichen Ebene gesetzt wie der PRESENTATION Parameter | > **Hinweis:** Wird ein Parameter direkt gesetzt werden die Werte der Vorlage ignoriert Beispiel: Die Darstellung einer Variable wird bei Erstellung auf einen Schieberegler mit einem eigenen Suffix gesetzt. ```php $this->RegisterVariableFloat('Value', 'Value', [ 'PRESENTATION' => VARIABLE_PRESENTATION_SLIDER, 'SUFFIX' => ' %' ]); ``` #### Darstellungen | Darstellung | | --------------------------------------------------- | | [Aufzählung](sdk-php.md) | | [Datum/Uhrzeit](sdk-php.md) | | [Dauer](sdk-php.md) | | [Farbe](sdk-php.md) | | [Rollladen](sdk-php.md) | | [Schalter](sdk-php.md) | | [Schieberegler](sdk-php.md) | | [Webinhalt](sdk-php.md) | | [Wertanzeige](sdk-php.md) | | [Werteingabe](sdk-php.md) | ## Aufzählung Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/darstellungen/aufzaehlung/ _Benötigt Symcon >= 8.0_ ### Parameter Informationen zu den visuellen Eigenschaften und Bedeutungen der Parameter sind in der [Objekt-Darstellung](../../components/object-presentation.md) zu finden. | Name | Typ | Parameter | Beschreibung | | ------------ | ------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------- | | PRESENTATION | String | The ID of the presentation | VARIABLE_PRESENTATION_ENUMERATION
{52D9E126-D7D2-2CBB-5E62-4CF7BA7C5D82} | | ICON | String | Standard Icon | [Icons](../../components/icons.md) | | OPTIONS | String | Optionen | JSON-kodierte Liste von Objekten, die genauen Parameter sind unter [Optionen](https://www.symcon.de/./#Optionen) beschrieben | | LAYOUT | Integer | Anordnung | 0: Spalte, 1: Reihe, 2: Gitter | | DISPLAY | Integer | Zeige... | 0: Beschriftung, 1: Icon, 2: Beschriftung und Icon | ### Optionen | Name | Typ | Parameter | Beschreibung | | ---------- | ---------------------------- | ----------------- | ------------------------------------------- | | Value | Boolean/String/Integer/Float | Wert | Abhängig vom Typ der Variable | | Caption | String | Beschriftung | | | IconActive | Boolean | Überschreibe Icon | | | IconValue | String | Icon | [Icons](../../components/icons.md) | | Color | Integer | Farbe | | ### Beispiele ```php // Beim Registrieren einer Variable für PHP-Module // Es werden nur Icons angezeigt. Eines ist farblich hervorgehoben. $this->RegisterVariableInteger('Modus', 'Modus', [ 'PRESENTATION' => VARIABLE_PRESENTATION_ENUMERATION, 'DISPLAY' => 1 /* Icon */, 'OPTIONS' => json_encode([ ['Value' => 1, 'Caption' => 'Automatic', 'IconActive' => true, 'IconValue' => 'circle-a'], ['Value' => 2, 'Caption' => 'Eco', 'IconActive' => true, 'IconValue' => 'circle-e', 'Color' => 40448], ['Value' => 3, 'Caption' => 'Manual', 'IconActive' => true, 'IconValue' => 'circle-m'], ]) ]); // Für bestehende Variablen via Skript // Es werden nur Icons angezeigt. Eines ist farblich hervorgehoben. IPS_SetVariableCustomPresentation(12345, [ 'PRESENTATION' => VARIABLE_PRESENTATION_ENUMERATION, 'DISPLAY' => 1 /* Icon */, 'OPTIONS' => json_encode([ ['Value' => 1, 'Caption' => 'Automatic', 'IconActive' => true, 'IconValue' => 'circle-a'], ['Value' => 2, 'Caption' => 'Eco', 'IconActive' => true, 'IconValue' => 'circle-e', 'Color' => 40448], ['Value' => 3, 'Caption' => 'Manual', 'IconActive' => true, 'IconValue' => 'circle-m'], ]) ]); ``` ## Datum/Uhrzeit Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/darstellungen/datum-uhrzeit/ _Benötigt Symcon >= 8.0_ ### Parameter Informationen zu den visuellen Eigenschaften und Bedeutungen der Parameter sind in der [Objekt-Darstellung](../../components/object-presentation.md) zu finden. | Name | Typ | Parameter | Beschreibung | | --------------- | ------- | -------------------- | -------------------------------------------------------------------------- | | PRESENTATION | String | GUID der Darstellung | VARIABLE_PRESENTATION_DATE_TIME
{497C4845-27FA-6E4F-AE37-5D951D3BDBF9} | | DATE | Integer | Datumsanzeige | 0: Kein, 1: Jahr, Monat und Tag, 2: Monat und Tag, 3: Jahr und Tag | | MONTH_TEXT | Boolean | Formatiere Monat als | false: Zahl, true: Text | | DAY_OF_THE_WEEK | Boolean | Zeige Wochentag | | | TIME | Integer | Zeitanzeige | 0: Keine, 1: Stunden und Minuten, 2: Stunden, Minuten und Sekunden | ### Vorlagen ```php // Registriert eine Variable mit einer Datum Vorlage. $this->RegisterVariableFloat('Date', 'Datum', [ 'PRESENTATION' => VARIABLE_PRESENTATION_DATE_TIME, 'TEMPLATE' => VARIABLE_TEMPLATE_DATE, ]); ``` | Name | Konstante | GUID | | ------------- | --------------------------- | -------------------------------------- | | Datum | VARIABLE_TEMPLATE_DATE | {B4C70F3E-6613-DA1A-7279-5DEE8DEB1B24} | | Uhrzeit | VARIABLE_TEMPLATE_TIME | {362DA268-56A2-E771-5E53-17E38B5D82E6} | | Datum/Uhrzeit | VARIABLE_TEMPLATE_DATE_TIME | {BB0E9933-0403-BD3A-D1C9-255646934B00} | ### Beispiele ```php // Beim Registrieren einer Variable für PHP-Module // Es werden nur Icons angezeigt. Eine Option ist farblich hervorgehoben. $this->RegisterVariableInteger('Wecker', 'Weckzeit', [ 'PRESENTATION' => VARIABLE_PRESENTATION_DATE_TIME, 'DATE' => 0 /* Kein */, 'TIME' => 2 /* Stunden, Minuten und Sekunden */, ]); // Zeigt nur die Uhrzeit an: 05:09:37 $this->RegisterVariableInteger('Wecker', 'Weckzeit', [ 'PRESENTATION' => VARIABLE_PRESENTATION_DATE_TIME, 'DATE' => 0 /* Kein */, 'TIME' => 2 /* Stunden, Minuten und Sekunden */, ]); // Für bestehende Variablen via Skript // Zeigt ein Datum folgendermaßen an: So., 3. Mai 2026 05:09 IPS_SetVariableCustomPresentation(12345, [ 'PRESENTATION' => VARIABLE_PRESENTATION_DATE_TIME, 'DATE' => 1 /* Jahr, Monat und Tag */, 'DAY_OF_THE_WEEK' => true, 'TIME' => 1 /* Stunden und Minuten */, ]); // Zeigt nur die Uhrzeit an: 05:09:37 IPS_SetVariableCustomPresentation(12345, [ 'PRESENTATION' => VARIABLE_PRESENTATION_DATE_TIME, 'DATE' => 0 /* Kein */, 'TIME' => 2 /* Stunden, Minuten und Sekunden */, ]); ``` ## Dauer Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/darstellungen/dauer/ _Benötigt Symcon >= 8.0_ ### Parameter Informationen zu den visuellen Eigenschaften und Bedeutungen der Parameter sind in der [Objekt-Darstellung](../../components/object-presentation.md) zu finden. | Name | Type | Parameter | Beschreibung | | -------------- | ------- | -------------------- | -------------------------------------------------------------------------------------------------- | | PRESENTATION | String | GUID der Darstellung | VARIABLE_PRESENTATION_DURATION
{08A6AF76-394E-D354-48D5-BFC690488E4E} | | COUNTDOWN_TYPE | Integer | Darstellungstyp | 0: Wert in Variable, 1: Dauer bis zum Wert in der Variable, 2: Dauer seit Wert in der Variable | | FORMAT | Integer | Format | 0: Nur Sekunden, 1: Minuten und Sekunden, 2: Stunden, Minuten und Sekunden, 3: Stunden und Minuten | | MILLISECONDS | Boolean | Zeige Millisekunden | | ### Beispiele ```php // Beim Registrieren einer Variable für PHP-Module // Formatiert den Wert der Variable wie folgt: 03:54 $this->RegisterVariableInteger('Countdown', 'Countdown', [ 'PRESENTATION' => VARIABLE_PRESENTATION_DURATION, 'COUNTDOWN_TYPE' => 0 /* Wert in Variable*/, 'FORMAT' => 1 /* Minuten und Sekunden */, ]); // Formatiert die Dauer bis zu dem Zeitstempel in der Variable wie folgt: 03:10:08 $this->RegisterVariableInteger('Countdown', 'Countdown', [ 'PRESENTATION' => VARIABLE_PRESENTATION_DURATION, 'COUNTDOWN_TYPE' => 1 /* Dauer bis zum Wert in der Variable*/, 'FORMAT' => 2 /* Minuten und Sekunden */, ]); // Für bestehende Variablen via Skript // Formatiert den Wert der Variable wie folgt: 03:54 IPS_SetVariableCustomPresentation(12345, [ 'PRESENTATION' => VARIABLE_PRESENTATION_DURATION, 'COUNTDOWN_TYPE' => 0 /* Wert in Variable*/, 'FORMAT' => 1 /* Minuten und Sekunden */, ]); // Formatiert die Dauer bis zu dem Zeitstempel in der Variable wie folgt: 03:10:08 IPS_SetVariableCustomPresentation(12345, [ 'PRESENTATION' => VARIABLE_PRESENTATION_DURATION, 'COUNTDOWN_TYPE' => 1 /* Dauer bis zum Wert in der Variable*/, 'FORMAT' => 2 /* Minuten und Sekunden */, ]); ``` ## Farbe Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/darstellungen/farbe/ ### Parameter Informationen zu den visuellen Eigenschaften und Bedeutungen der Parameter sind in der [Objekt-Darstellung](../../components/object-presentation.md) zu finden. > **Hinweis:** Um alle Parameter der Darstellung nutzen zu können, muss die Variable vom Typ String sein. Ist der Variablentyp Integer so ist die Kodierung fest RGB (0). Weitere Parameter sind für Integer Variablen nicht möglich. | Name | Typ | Parameter | Beschreibung | | ------------------ | ------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | PRESENTATION | String | Die ID der Darstellung | VARIABLE_PRESENTATION_COLOR
{05CC3CC2-A0B2-5837-A4A7-A07EA0B9DDFB} | | ENCODING | Integer | Kodierung | 0: RGB, 1: CMYK, 2: HSV, 3: HSL 4: xy | | PRESET_VALUES | String | Standardwerte | JSON-kodierte Liste von Objekten, die genauen Parameter sind unter [Farben](https://www.symcon.de/./#Farben) beschrieben. Nicht verfügbar bei Kodierung xy | | COLOR_SPACE | Integer | Farbraum | 0: Benutzerdefiniert, 1: sRGB, 2: AdobeRGB, 3: DCI-P3, 4: Rec2020 | | CUSTOM_COLOR_SPACE | String | Benutzerdefinierter Farbraum | JSON-kodierte Liste von Objekten, die genauen Parameter sind unter [Benutzerdefinierter Farbraum](https://www.symcon.de/./#Benutzerdefinierter_Farbraum) beschrieben | | COLOR_CURVE | Integer | Farbkurve | 0: Keine, 1: Benutzerdefiniert, 2: Tageslicht, 3: Tageslicht (Frühling), 4: Tageslicht (Sommer), 5. Tageslicht (Winter) | | CUSTOM_COLOR_CURVE | String | Benutzerdefinierte Farbkurve | JSON-kodierte Liste von Objekten, die genauen Parameter sind unter [Benutzerdefinierter Farbkurve](https://www.symcon.de/./#Benutzerdefinierter_Farbkurve) beschrieben | ### Farben | Parameter | Typ | Beschreibung | | --------- | ------- | ----------------- | | Color | Integer | Farbe als Integer | ### Benutzerdefinierter Farbraum Ein Farbraum wird durch 4 Objekte mit den Folgenden Parametern beschrieben. Der 1. Eintrag ist dabei für Rot, der 2. für Grün, der 3. für Blau und der 4. für den Weißpunkt. | Parameter | Typ | Beschreibung | | --------- | ----- | ------------------------------------------------------------- | | x | Float | X-Position der Farbe auf der CIE-Normfarbtafel im Bereich 0-1 | | y | Float | Y-Position der Farbe auf der CIE-Normfarbtafel im Bereich 0-1 | Beispiel: ```php // sRGB [ {"x":0.64,"y":0.33}, {"x":0.3,"y":0.6}, {"x":0.15,"y":0.06}, {"x":0.3127,"y":0.329} ] ``` ### Benutzerdefinierter Farbkurve Eine Farbkurve besteht aus einer beliebigen Anzahl von Farben, die etwa die Farbtemperatur über den Verlauf eines Tages darstellen. | Parameter | Typ | Beschreibung | | --------- | ----- | ------------------------------------------------------------- | | x | Float | X-Position der Farbe auf der CIE-Normfarbtafel im Bereich 0-1 | | y | Float | Y-Position der Farbe auf der CIE-Normfarbtafel im Bereich 0-1 | Beispiel: ```php // Tageslicht (Winter) [ {"x": 0.477, "y" 0.4137}, {"x": 0.4599, "y" 0.4106}, {"x": 0.433, "y" 0.4027}, {"x": 0.4103, "y" 0.3932}, {"x": 0.3918, "y" 0.3835}, {"x": 0.3761, "y" 0.374}, {"x": 0.3631, "y" 0.3652}, {"x": 0.352, "y" 0.357}, {"x": 0.3439, "y" 0.3507}, {"x": 0.3367, "y" 0.3447}, {"x": 0.3348, "y" 0.343}, ] ``` ### Vorlagen ```php // Registriert eine Variable mit grünen Farbtönen als Standardwerte. $this->RegisterVariableString('Farbe', 'Farbe', [ 'PRESENTATION' => VARIABLE_PRESENTATION_COLOR, 'TEMPLATE' => VARIABLE_TEMPLATE_COLOR_FOREST, ]); ``` | Name | Konstante | GUID | | ---------- | ------------------------------- | -------------------------------------- | | Regenbogen | VARIABLE_TEMPLATE_COLOR_RAINBOW | {0C711895-2F8E-DBFE-1700-84173491D229} | | Wald | VARIABLE_TEMPLATE_COLOR_FOREST | {A7467E68-5C39-5BD9-C0C8-BCE6004FEEAA} | ### Beispiele ```php // Beim Registrieren einer Variable für PHP-Module // Erlaubt die Farbauswahl im Format RGB mit Rot, Grün und Blau als Standardwerte. $this->RegisterVariableString('FarbeRGB', 'Farbe', [ 'PRESENTATION' => VARIABLE_PRESENTATION_COLOR, 'ENCODING' => 0 /* RGB */, 'PRESET_VALUES' => json_encode([['Color' => 16711680], ['Color' => 65280], ['Color' => 255]]), ]); // Erlaubt die Farbauswahl im Format xy in einem eigenen Farbraum $this->RegisterVariableString('FarbeXY', 'Farbe', [ 'PRESENTATION' => VARIABLE_PRESENTATION_COLOR, 'ENCODING' => 4 /* xy*/, 'COLOR_SPACE' => 0 /* Benutzerdefiniert */, 'SELECTION' => 1 /* CIE Diagramm */, 'CUSTOM_COLOR_SPACE' => json_encode([ ['x' => 0.692, 'y' => 0.308], // Rot ['x' => 0.170, 'y' => 0.700], // Grün ['x' => 0.153, 'y' => 0.048], // Blau ['x' => 0.3127,'y' => 0.329] // Weißpunkt ]) ]); // Für bestehende Variablen via Skript // Erlaubt die Farbauswahl im Format RGB mit Rot, Grün und Blau als Standardwerte. IPS_SetVariableCustomPresentation(12345, [ 'PRESENTATION' => VARIABLE_PRESENTATION_COLOR, 'ENCODING' => 0 /* RGB */, 'PRESET_VALUES' => json_encode([['Color' => 16711680], ['Color' => 65280], ['Color' => 255]]), ]); // Erlaubt die Farbauswahl im Format xy in einem eigenen Farbraum IPS_SetVariableCustomPresentation(12345, [ 'PRESENTATION' => VARIABLE_PRESENTATION_COLOR, 'ENCODING' => 4 /* xy*/, 'COLOR_SPACE' => 0 /* Benutzerdefiniert */, 'SELECTION' => 1 /* CIE Diagramm */, 'CUSTOM_COLOR_SPACE' => json_encode([ ['x' => 0.692, 'y' => 0.308], // Rot ['x' => 0.170, 'y' => 0.700], // Grün ['x' => 0.153, 'y' => 0.048], // Blau ['x' => 0.3127,'y' => 0.329] // Weißpunkt ]) ]); ``` ## Rollladen Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/darstellungen/jalousie/ _Benötigt Symcon >= 8.0_ ### Parameter Informationen zu den visuellen Eigenschaften und Bedeutungen der Parameter sind in der [Objekt-Darstellung](../../components/object-presentation.md) zu finden. | Name | Typ | Parameter | Beschreibung | | -------------------- | ------------- | ---------------------------- | ----------------------------------------------------------------------- | | PRESENTATION | String | Die ID der Darstellung | VARIABLE_PRESENTATION_SHUTTER
{6075FC22-69AF-B110-3749-C24138883082} | | USAGE_TYPE | Integer | Verwendungstyp | 0: Offen, 1: Rotation | | OPEN_OUTSIDE_VALUE | Integer/Float | Offen bei / Außen bei | | | CLOSE_INSIDE_VALUE | Integer/Float | Geschlossen bei / Innen bei | | | MAX_ROTATION_INSIDE | Integer/Float | Maximale Rotation nach innen | | | MAX_ROTATION_OUTSIDE | Integer/Float | Maximale Rotation nach außen | | | SUN_POSITION | Integer | Sonnenposition | 0: Links, 1: Rechts, 2: (Keine) | ### Vorlagen ```php // Registriert eine Variable, die Lamellen nach rechts gedreht darstellen. $this->RegisterVariableFloat('Lamelle', 'Lamelle', [ 'PRESENTATION' => VARIABLE_PRESENTATION_SHUTTER, 'TEMPLATE' => VARIABLE_TEMPLATE_SHUTTER_LAMELLA_RIGHT, ]); ``` | Name | Konstante | GUID | | -------------- | ------------------------------------------ | -------------------------------------- | | Lamelle rechts | VARIABLE_TEMPLATE_SHUTTER_LAMELLA_RIGHT | {3BE75DE9-7D84-C082-2E77-9ED3AEE04D63} | | Lamelle links | VARIABLE_TEMPLATE_SHUTTER_LAMELLA_LEFT | {22A0DF9C-C200-154A-641B-3A3CB096DB6D} | ### Beispiele ```php // Beim Registrieren einer Variable für PHP-Module // Ein Variable, die die Öffnung Rollladen darstellt. Bei einem Variablenwert von 150 ist die Darstellung geschlossen - bei 0 offen. $this->RegisterVariableInteger('Shutter', 'Shutter', [ 'PRESENTATION' => VARIABLE_PRESENTATION_SHUTTER, 'CLOSE_INSIDE_VALUE' => 150, 'USAGE_TYPE' => 0 /* Offen */, 'SUN_POSITION' => 2 /* Keine */, 'OPEN_OUTSIDE_VALUE' => 0, ]); // Ein Variable, die die Rotation von Lamellen darstellt. Bei einem Variablenwert von 100 ist die Darstellung nach außen gedreht - bei 0 innen. $this->RegisterVariableInteger('Shutter', 'Shutter', [ 'PRESENTATION' => VARIABLE_PRESENTATION_SHUTTER, 'CLOSE_INSIDE_VALUE' => 100, 'OPEN_OUTSIDE_VALUE' => 0, 'USAGE_TYPE' => 1 /* Rotation */, 'SUN_POSITION' => 1 /* Rechts */, 'MAX_ROTATION_INSIDE' => -30, 'MAX_ROTATION_OUTSIDE' => 30, ]); // Für bestehende Variablen via Skript // Ein Variable, die die Öffnung Rollladen darstellt. Bei einem Variablenwert von 150 ist die Darstellung geschlossen - bei 0 offen. IPS_SetVariableCustomPresentation(12345, [ 'PRESENTATION' => VARIABLE_PRESENTATION_SHUTTER, 'CLOSE_INSIDE_VALUE' => 150, 'USAGE_TYPE' => 0 /* Offen */, 'SUN_POSITION' => 2 /* Keine */, 'OPEN_OUTSIDE_VALUE' => 0, ]); // Ein Variable, die die Rotation von Lamellen darstellt. Bei einem Variablenwert von 100 ist die Darstellung nach außen gedreht - bei 0 innen. IPS_SetVariableCustomPresentation(12345, [ 'PRESENTATION' => VARIABLE_PRESENTATION_SHUTTER, 'CLOSE_INSIDE_VALUE' => 100, 'OPEN_OUTSIDE_VALUE' => 0, 'USAGE_TYPE' => 1 /* Rotation */, 'SUN_POSITION' => 1 /* Rechts */, 'MAX_ROTATION_INSIDE' => -30, 'MAX_ROTATION_OUTSIDE' => 30, ]); ``` ## Legacy Profil Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/darstellungen/legacy-profil/ ### Parameter Informationen zu den visuellen Eigenschaften und Bedeutungen der Parameter sind in der [Objekt-Darstellung](../../components/object-presentation.md) zu finden. | Name | Typ | Parameter | Beschreibung | | ------------ | ------ | ---------------------- | ---------------------------------------------------------------------- | | PRESENTATION | String | Die ID der Darstellung | VARIABLE_PRESENTATION_LEGACY
{4153A8D4-5C33-C65F-C1F3-7B61AAF99B1C} | | PROFILE | String | Profil | [Variablenprofile](../../concepts.md) | ### Beispiele ```php // Beim Registrieren einer Variable für PHP-Module $this->RegisterVariableFloat('Temperature', 'Temperature', [ 'PRESENTATION' => VARIABLE_PRESENTATION_LEGACY, 'PROFILE' => '~Temperature', ]); // Für bestehende Variablen via Skript IPS_SetVariableCustomPresentation(12345, [ 'PRESENTATION' => VARIABLE_PRESENTATION_LEGACY, 'PROFILE' => '~Temperature', ]); ``` ## Schalter Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/darstellungen/schalter/ _Benötigt Symcon >= 8.0_ ### Parameter Informationen zu den visuellen Eigenschaften und Bedeutungen der Parameter sind in der [Objekt-Darstellung](../../components/object-presentation.md) zu finden. | Name | Typ | Parameter | Beschreibung | | -------------- | ------- | --------------------------------------------------------- | ---------------------------------------------------------------------- | | PRESENTATION | String | Die ID der Darstellung | VARIABLE_PRESENTATION_SWITCH
{60AE6B26-B3E2-BDB1-A3A1-BE232940664B} | | USE_ICON_FALSE | Boolean | Individuelle Icons passend zum Wert | | | ICON_TRUE | String | Icon für true, auch für false, falls USE_ICON_FALSE false | [Icons](../../components/icons.md) | | ICON_FALSE | String | Icon für false, falls USE_ICON_FALSE true | [Icons](../../components/icons.md) | | GLOW_COLOR | Integer | Farbe des Leuchtens wenn aktiv | | | GLOW_INTENSITY | Integer | Intensität des Leuchtens wenn aktiv | | | USAGE_TYPE | Integer | Verwendung der Variable | 0: An/Aus, 1: Stumm schalte, 2: Keine hiervon | ### Beispiele ```php // Beim Registrieren einer Variable für PHP-Module // Ein Schalter, der grün leuchtet. $this->RegisterVariableInteger('Status', 'Status', [ 'PRESENTATION' => VARIABLE_PRESENTATION_SWITCH, 'GLOW_COLOR' => 3210585, 'GLOW_INTENSITY' => 20, 'USAGE_TYPE' => 0 /* An/Aus */ ]); // Ein Schalter mit eigenen Icons zum Stumm schalten $this->RegisterVariableInteger('Mute', 'Mute', [ 'PRESENTATION' => VARIABLE_PRESENTATION_SWITCH, 'USE_ICON_FALSE' => true, 'ICON_FALSE' => 'volume', 'USAGE_TYPE' => 1 /* Stumm schalten */, 'ICON_TRUE' => 'volume-xmark', ]); // Für bestehende Variablen via Skript // Ein Schalter, der grün leuchtet. IPS_SetVariableCustomPresentation(12345, [ 'PRESENTATION' => VARIABLE_PRESENTATION_SWITCH, 'GLOW_COLOR' => 3210585, 'GLOW_INTENSITY' => 20, 'USAGE_TYPE' => 0 /* An/Aus */ ]); // Ein Schalter mit eigenen Icons zum Stumm schalten IPS_SetVariableCustomPresentation(12345, [ 'PRESENTATION' => VARIABLE_PRESENTATION_SWITCH, 'USE_ICON_FALSE' => true, 'ICON_FALSE' => 'volume', 'USAGE_TYPE' => 1 /* Stumm schalten */, 'ICON_TRUE' => 'volume-xmark', ]); ``` ## Schieberegler Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/darstellungen/schieberegler/ _Benötigt Symcon >= 8.0_ ### Parameter Informationen zu den visuellen Eigenschaften und Bedeutungen der Parameter sind in der [Objekt-Darstellung](../../components/object-presentation.md) zu finden. | Name | Typ | Parameter | Beschreibung | | ------------------- | ------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | | PRESENTATION | String | Die ID der Darstellung | VARIABLE_PRESENTATION_SLIDER
{6B9CAEEC-5958-C223-30F7-BD36569FC57A} | | MIN | Integer/Float | Minimaler Wert | | | MAX | Integer/Float | Maximaler Wert | | | STEP_SIZE | Integer/Float | Schrittweite | | | GRADIENT_TYPE | Integer | Gradient | 0: Standard, 1: Temperatur, 2: Farbtemperatur, 3: Benutzerdefiniert | | CUSTOM_GRADIENT | String | Benutzerdefinierter Gradient | JSON-kodierte Liste von Objekten mit den Parametern 'Value' und 'Color', wobei Color analog zu [SelectColor](sdk-php/configuration-forms.md) codiert wird | | USAGE_TYPE | Integer | Verwendung der Variable | 0: Temperatur, 1: Farbtemperatur, 2: Intensität, 3: Lautstärke, 4: Fortschritt, 5: Keine hiervon | | PREFIX | String | Präfix | | | SUFFIX | String | Suffix | | | PERCENTAGE | Boolean | Anzeigetyp | false: Absolut, true: Prozentual | | THOUSANDS_SEPARATOR | String | Tausendertrennzeichen | Client: Standard vom Nutzer, sonst direkt der Wert | | DIGITS | Integer | Nachkommastellen | | | DECIMAL_SEPARATOR | String | Dezimaltrennzeichen | Client: Standard vom Nutzer, sonst direkt der Wert | | ICON | String | Icon | | | INTERVALS_ACTIVE | Boolean | Verwende aktualisierte Parameter für spezifische Intervalle | | | INTERVALS | String | Intervalle | JSON-kodierte Liste von Objekten, die genauen Parameter sind unter [Intervalle](https://www.symcon.de/./#Intervalle) beschrieben | #### Intervalle | Name | Typ | Parameter | Beschreibung | | ---------------- | ------------- | ----------------------------- | ----------------------------------------- | | IntervalMinValue | Integer/Float | Anfang des Intervalls | | | IntervalMaxValue | Integer/Float | Ende des Intervalls | | | ConstantActive | Boolean | Anzeige | false: Formatierter Wert, true: Konstante | | ConstantValue | String | Konstante | | | ConversionFactor | Integer/Float | Umrechnungsfaktor | | | PrefixActive | Boolean | Überschreibe Präfix | | | PrefixValue | String | Präfix | | | SuffixActive | Boolean | Überschreibe Suffix | | | SuffixValue | String | Suffix | | | DigitsActive | Boolean | Überschreibe Nachkommastellen | | | DigitsValue | Integer | Nachkommastellen | | | IconActive | Boolean | Überschreibe Icon | | | IconValue | String | Icon | | ### Vorlagen ```php // Registriert eine Variable mit einer Raumtemperatur Vorlage. $this->RegisterVariableFloat('TargetValue', 'Sollwert', [ 'PRESENTATION' => VARIABLE_PRESENTATION_SLIDER, 'TEMPLATE' => VARIABLE_TEMPLATE_SLIDER_ROOM_TEMPERATURE, ]); ``` | Name | Konstante | GUID | | -------------- | -------------------------------------------- | -------------------------------------- | | Raumtemperatur | VARIABLE_TEMPLATE_SLIDER_ROOM_TEMPERATURE | {868B087E-A38D-2155-EBE0-157AFBBF9E8C} | | Farbtemperatur | VARIABLE_TEMPLATE_SLIDER_COLOR_TEMPERATURE | {66062309-21A9-26C0-213F-775C52E1473B} | | Energie | VARIABLE_TEMPLATE_SLIDER_ENERGY | {BC799412-0C66-551F-CAEC-7566F5D52BD9} | | Leistung | VARIABLE_TEMPLATE_VALUE_PRESENTATION_BATTERY | {8EC19DF0-89FB-A77E-ED7D-047A949CF292} | ### Beispiele ```php // Beim Registrieren einer Variable für PHP-Module // Ein Schieberegler, mit einer spanne von 0 - 2000W. Ab 1000 W wird der Wert als kW angezeigt. $this->RegisterVariableInteger('Leistung', 'Leistung', [ 'PRESENTATION' => VARIABLE_PRESENTATION_SLIDER, 'ICON' => 'bolt', 'SUFFIX' => ' W', 'MIN' => 0, 'MAX' => 2000, 'INTERVALS_ACTIVE' => true, 'INTERVALS' => json_encode([ [ 'IntervalMinValue' => 1000, 'IntervalMaxValue' => 999999, 'ConversionFactor' => 1000, 'SuffixActive' => true, 'SuffixValue' => ' kW', 'DigitsActive' => true, 'DigitsValue' => 2, 'ConstantActive' => false, 'PrefixActive' => false, ] ]) ]); // Für bestehende Variablen via Skript // Ein Schieberegler, mit einer spanne von 0 - 2000W. Ab 1000 W wird der Wert als kW angezeigt. IPS_SetVariableCustomPresentation(12345, [ 'PRESENTATION' => VARIABLE_PRESENTATION_SLIDER, 'ICON' => 'bolt', 'SUFFIX' => ' W', 'MIN' => 0, 'MAX' => 2000, 'INTERVALS_ACTIVE' => true, 'INTERVALS' => json_encode([ [ 'IntervalMinValue' => 1000, 'IntervalMaxValue' => 999999, 'ConversionFactor' => 1000, 'SuffixActive' => true, 'SuffixValue' => ' kW', 'DigitsActive' => true, 'DigitsValue' => 2, 'ConstantActive' => false, 'PrefixActive' => false, ] ]) ]); ``` ## Webinhalt Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/darstellungen/webinhalt/ _Benötigt Symcon >= 8.0_ ### Parameter Informationen zu den visuellen Eigenschaften und Bedeutungen der Parameter sind in der [Objekt-Darstellung](../../components/object-presentation.md) zu finden. | Name | Typ | Parameter | Beschreibung | | ------------ | ------- | ------------------------ | --------------------------------------------------------------------------- | | PRESENTATION | String | Die ID der Darstellung | VARIABLE_PRESENTATION_WEB_CONTENT
{9DE1D610-5106-97FB-714D-1AADEDF8377A} | | HTML_TYPE | Integer | Anzeigetyp | 0: HTML Inhalt, 1: Webseite | | PADDING | Boolean | Ränder entfernen | | ### Beispiele ```php // Beim Registrieren einer Variable für PHP-Module // Der Variablenwert wird als Link behandelt. Die Webseite wird ohne Ränder in der Kacheln dargestellt. $this->RegisterVariableString('Website', 'Website', [ 'PRESENTATION' => VARIABLE_PRESENTATION_WEB_CONTENT, 'HTML_TYPE' => 1 /* Webseite*/, 'PADDING' => true, ]); // Für bestehende Variablen via Skript // Der Variablenwert wird als Link behandelt. Die Webseite wird ohne Ränder in der Kacheln dargestellt. IPS_SetVariableCustomPresentation(12345, [ 'PRESENTATION' => VARIABLE_PRESENTATION_WEB_CONTENT, 'HTML_TYPE' => 1, 'PADDING' => true, ]); ``` ## Wertanzeige Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/darstellungen/wertanzeige/ _Benötigt Symcon >= 8.0_ ### Parameter Informationen zu den visuellen Eigenschaften und Bedeutungen der Parameter sind in der [Objekt-Darstellung](../../components/object-presentation.md) zu finden. | Name | Type | Parameter | Beschreibung | | ------------ | ------- | ---------------------- | ---------------------------------------------------------------------------------- | | PRESENTATION | String | Die ID der Darstellung | VARIABLE_PRESENTATION_VALUE_PRESENTATION
{3319437D-7CDE-699D-750A-3C6A3841FA75} | | ICON | String | Standardicon | [Icons](../../components/icons.md) | | COLOR | Integer | Standardfarbe | | | PREFIX | String | Präfix | | | SUFFIX | String | Suffix | | #### Float und Integer | Name | Type | Parameter | Beschreibung | | ------------------- | ------------- | ----------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | | USAGE_TYPE | Integer | Verwendung der Variable | 0: Keine hiervon, 1: Temperatur | | PERCENTAGE | Boolean | Anzeigetyp | true: Prozent, false: Absolut | | MIN | Integer/Float | Minimaler Wert | | | MAX | Integer/Float | Maximaler Wert | | | THOUSANDS_SEPARATOR | String | Tausendertrennzeichen | Client: Standard vom Nutzer, sonst direkt der Wert | | DIGITS | Integer | Nachkommastellen | | | DECIMAL_SEPARATOR | String | Dezimaltrennzeichen | Client: Standard vom Nutzer, sonst direkt der Wert | | INTERVALS_ACTIVE | Boolean | Verwende aktualisierte Parameter für spezifische Intervalle | | | INTERVALS | String | Intervalle | JSON-kodierte Liste von Objekten, die genauen Parameter sind unter [Intervalle](https://www.symcon.de/./#Intervalle) beschrieben | #### Intervalle | Name | Typ | Parameter | Beschreibung | | ---------------- | ------------- | ----------------------------- | ----------------------------------------- | | IntervalMinValue | Integer/Float | Anfang des Intervalls | | | IntervalMaxValue | Integer/Float | Ende des Intervalls | | | ConstantActive | Boolean | Anzeige | false: Formatierter Wert, true: Konstante | | ConstantValue | String | Konstante | | | ConversionFactor | Integer/Float | Umrechnungsfaktor | | | PrefixActive | Boolean | Überschreibe Präfix | | | PrefixValue | String | Präfix | | | SuffixActive | Boolean | Überschreibe Suffix | | | SuffixValue | String | Suffix | | | DigitsActive | Boolean | Überschreibe Nachkommastellen | | | DigitsValue | Integer | Nachkommastellen | | | IconActive | Boolean | Überschreibe Icon | | | IconValue | String | Icon | | | ColorActive | Boolean | Überschreibe Farbe | | | Color | Integer | Farbe | | #### Boolean und String | Name | Type | Parameter | Beschreibung | | --------- | ------- | -------------- | ----------------------------------------------------------------------------------------------------------------- | | MULTILINE | Boolean | Mehrere Zeilen | | | OPTIONS | String | Optionen | JSON-kodierte Liste von Objekten, die genauen Parameter sind unter [Optionen](https://www.symcon.de/./#Optionen) beschrieben | ### Optionen | Name | Typ | Parameter | Beschreibung | | ----------- | -------------- | ------------------- | ------------------------------------------- | | Value | Boolean/String | Wert | Abhängig vom Typ der Variable | | Caption | String | Beschriftung | | | IconActive | Boolean | Überschreibe Icon | | | IconValue | String | Icon | [Icons](../../components/icons.md) | | ColorActive | Boolean | Farbe überschreiben | | | ColorValue | Integer | Farbe | | ### Vorlagen ```php // Registriert eine Variable mit einer Temperatur Vorlage. $this->RegisterVariableFloat('Temperature', 'Raumtemperatur', [ 'PRESENTATION' => VARIABLE_PRESENTATION_VALUE_PRESENTATION, 'TEMPLATE' => VARIABLE_TEMPLATE_VALUE_PRESENTATION_ROOM_TEMPERATURE, ]); ``` | Name | Konstante | GUID | | ---------------- | ----------------------------------------------------- | -------------------------------------- | | Raumtemperatur | VARIABLE_TEMPLATE_VALUE_PRESENTATION_ROOM_TEMPERATURE | {90AF8F8F-183F-BBFD-E078-35FAB6DCFE4F} | | Leistung | VARIABLE_TEMPLATE_VALUE_PRESENTATION_POWER | {2FED3D39-073D-6037-901B-2586A1AB5569} | | Energie | VARIABLE_TEMPLATE_VALUE_PRESENTATION_ENERGY | {C899FCFA-063E-897E-9DA4-28ADD278EED5} | | Batterie | VARIABLE_TEMPLATE_VALUE_PRESENTATION_BATTERY | {7BD38CF5-07F2-5B5B-8F7F-15398B823BFC} | | Batterie (Farbe) | VARIABLE_TEMPLATE_VALUE_PRESENTATION_BATTERY_COLOR | {C90EF36A-165E-D0B0-032C-F468F483D42B} | ### Beispiele ```php // Beim Registrieren einer Variable für PHP-Module // Eine Alarm Variable mit Icon und Hintergrundfarbe $this->RegisterVariableBoolean('Alarm', 'Alarm', [ 'PRESENTATION' => VARIABLE_PRESENTATION_VALUE_PRESENTATION, 'OPTIONS' => json_encode([ ['Value' => false, 'Caption' => 'OK', 'IconActive' => true, 'IconValue' => 'siren'], ['Value' => true, 'Caption' => 'Alarm', 'IconActive' => true, 'IconValue' => 'siren-on', 'ColorValue' => 16711680, 'ColorActive' => true], ]) ]); // Leistung in Watt mit Darstellung von Werten über 1000 als Kilowatt $this->RegisterVariableInteger('Leistung', 'Leistung', [ 'PRESENTATION' => VARIABLE_PRESENTATION_VALUE_PRESENTATION, 'ICON' => 'bolt', 'SUFFIX' => ' W', 'INTERVALS_ACTIVE' => true, 'INTERVALS' => json_encode([ [ 'IntervalMinValue' => 1000, 'IntervalMaxValue' => 999999, 'ConversionFactor' => 1000, 'SuffixActive' => true, 'SuffixValue' => ' kW', 'DigitsActive' => true, 'DigitsValue' => 2, 'ConstantActive' => false, 'PrefixActive' => false, ] ]) ]); // Für bestehende Variablen via Skript // Es werden nur Icons angezeigt. Eine Option ist farblich hervorgehoben. IPS_SetVariableCustomPresentation(12345, [ 'PRESENTATION' => VARIABLE_PRESENTATION_VALUE_PRESENTATION, 'OPTIONS' => json_encode([ ['Value' => false, 'Caption' => 'OK', 'IconActive' => true, 'IconValue' => 'siren'], ['Value' => true, 'Caption' => 'Alarm', 'IconActive' => true, 'IconValue' => 'siren-on', 'ColorValue' => 16711680, 'ColorActive' => true], ]) ]); // Leistung in Watt mit Darstellung von Werten über 1000 als Kilowatt IPS_SetVariableCustomPresentation(12345, [ 'PRESENTATION' => VARIABLE_PRESENTATION_VALUE_PRESENTATION, 'ICON' => 'bolt', 'SUFFIX' => ' W', 'INTERVALS_ACTIVE' => true, 'INTERVALS' => json_encode([ [ 'IntervalMinValue' => 1000, 'IntervalMaxValue' => 999999, 'ConversionFactor' => 1000, 'SuffixActive' => true, 'SuffixValue' => ' kW', 'DigitsActive' => true, 'DigitsValue' => 2, 'ConstantActive' => false, 'PrefixActive' => false, ] ]) ]); ``` ## Werteingabe Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/darstellungen/werteingabe/ _Benötigt Symcon >= 8.0_ ### Parameter Informationen zu den visuellen Eigenschaften und Bedeutungen der Parameter sind in der [Objekt-Darstellung](../../components/object-presentation.md) zu finden. | Name | Typ | Parameter | Beschreibung | | ------------ | ------- | ---------------------- | --------------------------------------------------------------------------- | | PRESENTATION | String | Die ID der Darstellung | VARIABLE_PRESENTATION_VALUE_INPUT
{6F477326-1683-A2FD-D2E7-477F366ECB62} | | PREFIX | String | Präfix | | | SUFFIX | String | Suffix | | | MULTILINE | Boolean | Mehrzeilige Eingabe | | ### Beispiele ```php // Beim Registrieren einer Variable für PHP-Module // Erlaubt es zahlen frei einzugeben. $this->RegisterVariableFloat('Strompreis', 'Kosten pro kWh', [ 'PRESENTATION' => VARIABLE_PRESENTATION_VALUE_INPUT, 'SUFFIX' => ' €', ]); // Ermöglicht es Freitext über mehrere Zeilen einzugeben. $this->RegisterVariableString('Einkaufsliste', 'Einkaufsliste', [ 'PRESENTATION' => VARIABLE_PRESENTATION_VALUE_INPUT, 'MULLTILINE' => true, ]); // Für bestehende Variablen via Skript // Erlaubt es zahlen frei einzugeben. IPS_SetVariableCustomPresentation(12345, [ 'PRESENTATION' => VARIABLE_PRESENTATION_VALUE_INPUT, 'SUFFIX' => ' €', ]); // Ermöglicht es Freitext über mehrere Zeilen einzugeben. IPS_SetVariableCustomPresentation(12345, [ 'PRESENTATION' => VARIABLE_PRESENTATION_VALUE_INPUT, 'MULLTILINE' => true, ]); ``` ## Datenfluss Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/datenfluss/ ### Beschreibung Der Datenfluss soll erklären, wie Daten zwischen "Device <-> Splitter <-> I/O" in IP-Symcon versendet werden und was dafür eingerichtet werden muss. > **Hinweis:** Für eine einfache Erstellung eines Moduls inklusive des Datenflusses, wird die Nutzung des [Modul-Generators](../sdk-tools.md) empfohlen. _Typischer Aufbau_ ![Datenfluss](https://www.symcon.de/media/pages/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/datenfluss/5c21f6a468-1790424938/sdktools-datenflussmockup.png) ### Datenflussrichtung Es gibt 2 Datenflussrichtungen. #### I/O zu Device Diese Flussrichtung ist, wie in der Abbildung sichtbar, von der übgeordneten Instanz via [SendDataToChildren](sdk-php/module.md) zu den Children. Die ankommenden Daten werden innerhalb der Children von der überschreibaren Funktion [ReceiveData](sdk-php/module.md) verarbeitet. Zwischen I/O und Device kann optional und falls nötig ein Splitter eingepflegt werden. #### Device zu I/O Diese Flussrichtung ist, wie in der Abbildung sichtbar, von der untergeordneten Instanz via [SendDataToParent](sdk-php/module.md) zu dem Parent. Die ankommenden Daten werden innerhalb des Parents von der überschreibaren Funktion [ForwardData](sdk-php/module.md) verarbeitet. Zwischen Device und I/O kann optional und falls nötig ein Splitter eingepflegt werden. ### I/O Module Bei selbstentwickelten Modulen sind die [GUIDs](../../concepts.md) für Devices und Splitter in der jeweiligen [module.json](sdk-php/module.md) Datei anzugeben. Diese können über den [GUID Generator](../sdk-tools.md) erstellt werden. _Seitens der I/O stehen folgende Datenpakete für I/O Typen zur Verfügung._ | I/O Modul | Modul GUID | Unterstütze Datenpakete | | --------------------------------------------------------------- | -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | [Client Socket](../../modules/clientsocket.md) | {3CFF0FD9-E306-41DB-9B5A-9D06D38576C3} | Simpel | | [HID](../../modules/hid.md) | {E6D7692A-7F4C-441D-827B-64062CFE1C02} | Erweitert (Event) | | [HTTP Client](../../modules/httpclient.md) | {4CB91589-CE01-4700-906F-26320EFCF6C4} | Erweitert (HTTP Request) | | [Multicast Socket](../../modules/multicastsocket.md) | {BAB408E0-0A0F-48C3-B14E-9FB2FA81F66A} | Simpel
Erweitert (Socket) | | [Serial Port](../../modules/serialport.md) | {6DC3D946-0D31-450F-A8C6-C42DB8D7D4F1} | Simpel | | [Server Sent Event Client](../../modules/serversenteventclient.md) | {2FADB4B7-FDAB-3C64-3E2C-068A4809849A} | Erweitert (SSE) | | [Server Socket](../../modules/serversocket.md) | {8062CF2B-600E-41D6-AD4B-1BA66C32D6ED} | Simpel
Erweitert (Socket) | | [UDP Socket](../../modules/udpsocket.md) | {82347F20-F541-41E1-AC5B-A636FD3AE2D8} | Simpel
Erweitert (Socket)
Erweitert (UDP) | | [Virtual I/O](../../modules/virtualio.md) | {6179ED6A-FC31-413C-BB8E-1204150CF376} | Simpel
Erweitert (Socket) | | [WebSocket Client](../../modules/websocketclient.md) | {D68FD31F-0E90-7019-F16C-1949BD3079EF} | Simpel | #### Datenpakete Die Datenpakete werden JSONString kodiert. Diese beinhalten einmal die [GUID](../../concepts.md) des Datenpakettyps und die eigentlichen Daten. Über die GUID als Identifikator weiß das jeweilge Modul, welche Daten in dem Datenpaket sind und deren Formatierung. #### Simpel RX GUID: {018EF6B5-AB94-40C6-AA53-46943E824ACF} TX GUID: {79827379-F36E-4ADA-8A95-5F8D1DC92FA9} | Parameter | Datentyp | Beschreibung | | --------- | -------- | ---------------------- | | Buffer | String | Beliebiger Dateninhalt | ```php // Beispiel für das Senden an den Parent (TX Paket) vom Typ Simpel public function SendData() { $this->SendDataToParent(json_encode([ 'DataID' => "{79827379-F36E-4ADA-8A95-5F8D1DC92FA9}", 'Buffer' => utf8_encode("Hallo Welt String"), ])); } // Empfangene Daten vom Parent (RX Paket) vom Typ Simpel public function ReceiveData($JSONString) { $data = json_decode($JSONString); $data['Buffer'] = utf8_decode($Data['Buffer']); //Im Meldungsfenster zu Debug zwecken ausgeben IPS_LogMessage("DATA", print_r($data, true)); } ``` #### Erweitert (Event) RX GUID: {FD7FF32C-331E-4F6B-8BA8-F73982EF5AA7} TX GUID: {4A550680-80C5-4465-971E-BBF83205A02B} | Parameter | Datentyp | Beschreibung | | --------- | -------- | ---------------------- | | Buffer | String | Beliebiger Dateninhalt | | EventID | Integer | ID für das Event | ```php // Beispiel für das Senden an den Parent (TX Paket) vom Typ Erweitert (Event) public function SendData() { $this->SendDataToParent(json_encode([ 'DataID' => "{4A550680-80C5-4465-971E-BBF83205A02B}", 'Buffer' => utf8_encode("Hallo Welt String"), 'EventID' => 123 ])); } // Empfangene Daten vom Parent (RX Paket) vom Typ Erweitert (Event) public function ReceiveData($JSONString) { $data = json_decode($JSONString); $data['Buffer'] = utf8_decode($Data['Buffer']); //Im Meldungsfenster zu Debug zwecken ausgeben IPS_LogMessage("DATA", print_r($data, true)); } ``` #### Erweitert (Socket) RX GUID: {7A1272A4-CBDB-46EF-BFC6-DCF4A53D2FC7} TX GUID: {C8792760-65CF-4C53-B5C7-A30FCC84FEFE} | Parameter | Datentyp | Beschreibung | | ---------- | -------- | ---------------------------------------------------------- | | Buffer | String | Beliebiger Dateninhalt | | Type | Integer | Typ der Verbindung (0 = Data, 1 = Connect, 2 = Disconnect) | | ClientIP | String | IP-Adresse der Verbindung | | ClientPort | Integer | Port der Verbindung | ```php // Beispiel für das Senden an den Parent (TX Paket) vom Typ Erweitert (Socket) public function SendData() { $this->SendDataToParent(json_encode([ 'DataID' => "{C8792760-65CF-4C53-B5C7-A30FCC84FEFE}", 'Buffer' => utf8_encode("Hallo Welt String"), 'Type' => 0, 'ClientIP' => "192.168.0.8", 'ClientPort' => 502 ])); } // Empfangene Daten vom Parent (RX Paket) vom Typ Erweitert (Socket) public function ReceiveData($JSONString) { $data = json_decode($JSONString); $data['Buffer'] = utf8_decode($Data['Buffer']); //Im Meldungsfenster zu Debug zwecken ausgeben IPS_LogMessage("DATA", print_r($data, true)); } ``` #### Erweitert (UDP) RX GUID: {9082C662-7864-D5CA-863F-53999200D897} TX GUID: {8E4D9B23-E0F2-1E05-41D8-C21EA53B8706} | Parameter | Datentyp | Beschreibung | | ---------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | Buffer | String | Beliebiger Dateninhalt | | ClientIP | String | IP-Adresse der Verbindung, wenn leer dann wird die im UDP Socket eingestellte Hostadresse genutzt. (Wird ignoriert, wenn Broadcast aktiv ist) | | ClientPort | Integer | Port der Verbindung, wenn auf 0 gesetzt wird der im UDP Socket eingestellte Port genutzt | | Broadcast | Boolean | Broadcast de-/aktiviert (False = Deaktiviert, True = Aktiviert) | ```php // Beispiel für das Senden an den Parent (TX Paket) vom Typ Erweitert (UDP) public function SendData() { $this->SendDataToParent(json_encode([ 'DataID' => "{8E4D9B23-E0F2-1E05-41D8-C21EA53B8706}", 'Buffer' => utf8_encode("Hallo Welt String"), 'ClientIP' => "192.168.0.8", 'ClientPort' => 502 'Broadcast' => false, ])); } // Empfangene Daten vom Parent (RX Paket) vom Typ Erweitert (UDP) public function ReceiveData($JSONString) { $data = json_decode($JSONString); $data['Buffer'] = utf8_decode($Data['Buffer']); //Im Meldungsfenster zu Debug zwecken ausgeben IPS_LogMessage("DATA", print_r($data, true)); } ``` #### Erweitert (SSE) RX GUID: {5A709184-B602-D394-227F-207611A33BDF} | Parameter | Datentyp | Beschreibung | | --------- | -------- | --------------------------------------------------- | | Event | String | Beliebiger Eventtyp | | Data | String | Beliebiger Dateninhalt | | Retry | String | In Millisekunden bis zu einem erneuten Sendeversuch | | ID | String | ID für das Event | TX GUID: {79827379-F36E-4ADA-8A95-5F8D1DC92FA9} TX wird nicht ausgewertet muss aber gesetzt sein ```php // Empfangene Daten vom Parent (RX Paket) vom Typ Erweitert (SSE) public function ReceiveData($JSONString) { $data = json_decode($JSONString); //Im Meldungsfenster zu Debug zwecken ausgeben IPS_LogMessage("DATA", print_r($data, true)); } ``` Weitere Informationen gibt es unter [https://www.w3.org/TR/eventsource/](https://html.spec.whatwg.org/multipage/server-sent-events.html#the-eventsource-interface) #### Erweitert (HTTP Request) RX GUID: {018EF6B5-AB94-40C6-AA53-46943E824ACF} | Parameter RX | Datentyp | Beschreibung | | ------------ | -------- | ---------------------- | | Buffer | String | Beliebiger Dateninhalt | TX GUID: {D4C1D08F-CD3B-494B-BE18-B36EF73B8F43} | Parameter TX | Datentyp | Beschreibung | | ------------- | -------- | --------------------------------------- | | RequestMethod | String | GET oder POST | | RequestURL | String | URL der anzufragenden Webseite | | RequestData | String | Welcher Datenwert angefragt werden soll | | Timeout | Integer | Millisekunden bis ein Timeout kommt | ```php // Beispiel für das Senden an den Parent (TX Paket) vom Typ Erweitert (HTTP Request) public function SendData() { $this->SendDataToParent(json_encode([ 'DataID' => "{D4C1D08F-CD3B-494B-BE18-B36EF73B8F43}", 'RequestMethod' => utf8_encode("POST"), 'RequestURL' => utf8_encode("https://reqbin.com/echo/post/form"), 'RequestData' => utf8_encode("dummy-post-data"), 'Timeout' => 10000 ])); } // Empfangene Daten vom Parent (RX Paket) vom Typ Simpel public function ReceiveData($JSONString) { $data = json_decode($JSONString); $data['Buffer'] = utf8_decode($Data['Buffer']); //Im Meldungsfenster zu Debug zwecken ausgeben IPS_LogMessage("DATA", print_r($data, true)); } ``` ### Voraussetzung und Einrichtung Die [GUIDs](../../concepts.md) für die verwendeten Datenpakettypen werden in der [module.json](sdk-php/module.md) definiert. Damit ein Datenfluss zwischen 2 Instanzen etabliert werden kann, muss der Sendende bei dem passenden Requirement die genutzte Kommunikationsart eintragen. Der Empfänger trägt seinerseits unter Implemented die GUID der Kommunikationsart ein. Wenn mehrere GUIDs verschiedener Datenpakettypen in die [module.json](sdk-php/module.md) eingetragen werden, kann ein Modul auch mehrere Datenpakettypen interpretieren und verarbeiten. > **Hinweis:** Für IPSModule: Ebenfalls muss von jedem Child der jeweilige Parent via [ConnectParent](sdk-php/module.md), [RequireParent](sdk-php/module.md) oder [ForceParent](sdk-php/module.md) eingerichtet sein. Beim neuerem IPSModuleStrict werden die notwendigen Instanzen für den Datenfluss automatisch von der Verwaltungskonsole erstellt. Wenn diese Automatik nicht passend ist, kann das jeweilige Modul über die Funktion [GetCompatibleParents](sdk-php/module.md) die Automatik der Verwaltungskonsole beeinflussen. ### Beispiel Kommunikation zwischen I/O, Splitter und Device. Das Device hat den Splitter als Parent und der Splitter hat das I/O als Parent. _Auszug aus den jeweiligen module.json_ __Beispiel GUIDs der Datenpakettypen:__ IO_TX: {65465465-6546-6546-6546-65465465} IO_RX: {AE3AE3A-AE3A-AE3A-AE3A-AE3AE3AE} Device_TX: {78978978-7897-7897-7897-78978978} Device_RX: {12312312-1231-1231-1231-12312312} ```php // Innerhalb des I/Os (Parent vom Splitter) // I/Os haben normalerweise keine weitere Parents. Somit sollte die Liste normalerweise leer sein. "parentRequirements": [], // GUID des Datenpakettyps, welches via SendDataToChildren genutzt wird "childRequirements": ["{AE3AE3A-AE3A-AE3A-AE3A-AE3AE3AE}"], // Liste GUIDs der Datenpakettypen auf die gehorcht wird. // Diese wird von der Funktion ForwardData (Daten kommen vom Child) verarbeitet. "implemented": ["{65465465-6546-6546-6546-65465465}"], // Innerhalb des Splitters (Parent vom Device, Child vom I/O) // GUID des Datenpakettyps, welches via SendDataToParent genutzt wird "parentRequirements": ["{65465465-6546-6546-6546-65465465}"], // GUID des Datenpakettyps, welches via SendDataToChildren genutzt wird "childRequirements": ["{12312312-1231-1231-1231-12312312}"], // Liste GUIDs der Datenpakettypen auf die gehorcht wird. // Diese wird in wird entweder von der Funktion ForwardData (Daten kommen vom Child) oder ReceiveData (Daten kommen vom Parent) verarbeitet. "implemented": ["{AE3AE3A-AE3A-AE3A-AE3A-AE3AE3AE}", "{78978978-7897-7897-7897-78978978}"], // Innerhalb des Device (Child vom Splitter) // GUID des Datenpakettyps, welches via SendDataToParent genutzt wird "parentRequirements": ["{78978978-7897-7897-7897-78978978}"], // Devices haben normalerweise keine weitere Children. Somit sollte die Liste normalerweise leer sein. "childRequirements": [], // Liste GUIDs der Datenpakettypen auf die gehorcht wird. // Diese wird von der Funktion ReceiveData (Daten kommen vom Parent) verarbeitet. "implemented": ["{12312312-1231-1231-1231-12312312}"], ``` ## Datenverwaltung Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/datenverwaltung/ _Benötigt Symcon >= 4.0_ ### Beschreibung Ein Modul hat grundlegend vier verschiedene Formen Daten zu verwalten. Dies sind Eigenschaften, Attribute, Buffer und Statusvariablen. Diese Unterscheiden sich in Aufgabe, Zugriffsmöglichkeiten und Persistenz. Eigenschaften Attribute Buffer Statusvariablen #### Eigenschaften Eigenschaften sind persistente Daten eines Moduls, welche vom Benutzer konfiguriert werden sollen/müssen. Diese Daten werden erst bei "Übernehmen" gespeichert. Eigenschaften sind zum Beispiel benötigte Logindaten, Geräte-ID oder Intervall zur Abfrage von Sensorwerten. Dies geschieht im Regelfall über die Konfigurationsseite, welche über die [form.json](sdk-php/configuration-forms.md) definiert wird. | Funktionsname | Kurzbeschreibung | | -------------------------------------------------------------- | ------------------------------------------ | | [ReadPropertyBoolean](sdk-php/module.md) | Liefert den Wert einer Boolean Eigenschaft | | [ReadPropertyFloat](sdk-php/module.md) | Liefert den Wert einer Float Eigenschaft | | [ReadPropertyInteger](sdk-php/module.md) | Liefert den Wert einer Integer Eigenschaft | | [ReadPropertyString](sdk-php/module.md) | Liefert den Wert einer String Eigenschaft | | [RegisterPropertyBoolean](sdk-php/module.md) | Erstellt eine Boolean Eigenschaft | | [RegisterPropertyFloat](sdk-php/module.md) | Erstellt eine Float Eigenschaft | | [RegisterPropertyInteger](sdk-php/module.md) | Erstellt eine Integer Eigenschaft | | [RegisterPropertyString](sdk-php/module.md) | Erstellt eine String Eigenschaft | ```php public function Create() { //Never delete this line! parent::Create(); $this->RegisterPropertyBoolean("EmulateStatus", true); $this->RegisterPropertyFloat("Faktor", 0.5); $this->RegisterPropertyInteger("DeviceID", 0); $this->RegisterPropertyString("Text", ""); } ``` #### Attribute Attribute sind persistente Daten eines Moduls, welche einzig vom Modul selbst gesetzt und sofort gespeichert werden. Dies sind zum Beispiel Tokens bei verschlüsselten Verbindungen oder gespeicherte Werte einer Szenensteuerung. | Funktionsname | Kurzbeschreibung | | --------------------------------------------------------------- | ---------------------------------------- | | [ReadAttributeBoolean](sdk-php/module.md) | Liefert den Wert eines Boolean Attributs | | [ReadAttributeFloat](sdk-php/module.md) | Liefert den Wert eines Float Attributs | | [ReadAttributeInteger](sdk-php/module.md) | Liefert den Wert eines Integer Attributs | | [ReadAttributeString](sdk-php/module.md) | Liefert den Wert eines String Attributs | | [RegisterAttributeBoolean](sdk-php/module.md) | Erstellt ein Boolean Attribut | | [RegisterAttributeFloat](sdk-php/module.md) | Erstellt ein Float Attribut | | [RegisterAttributeInteger](sdk-php/module.md) | Erstellt ein Integer Attribut | | [RegisterAttributeString](sdk-php/module.md) | Erstellt ein String Attribut | | [WriteAttributeBoolean](sdk-php/module.md) | Schreibt in ein Boolean Attribut | | [WriteAttributeFloat](sdk-php/module.md) | Schreibt in ein Float Attribut | | [WriteAttributeInteger](sdk-php/module.md) | Schreibt in ein Integer Attribut | | [WriteAttributeString](sdk-php/module.md) | Schreibt in ein String Attribut | __Beispiel__ ```php public function Create() { //Never delete this line! parent::Create(); $this->RegisterAttributeBoolean("BoolAttr", true); $this->RegisterAttributeInteger("IntAttr", 5); $this->RegisterAttributeFloat("FloatAttr", 3.7); $this->RegisterAttributeString("StrAttr", "lalala"); } public function BumpAndShow() { var_dump($this->ReadAttributeBoolean("BoolAttr")); var_dump($this->ReadAttributeInteger("IntAttr")); var_dump($this->ReadAttributeFloat("FloatAttr")); var_dump($this->ReadAttributeString("StrAttr")); $this->WriteAttributeBoolean("BoolAttr", !$this->ReadAttributeBoolean("BoolAttr")); $this->WriteAttributeInteger("IntAttr", $this->ReadAttributeInteger("IntAttr")*2); $this->WriteAttributeFloat("FloatAttr", $this->ReadAttributeFloat("FloatAttr")+0.1); $this->WriteAttributeString("StrAttr", $this->ReadAttributeString("StrAttr") . "öäü"); } ``` #### Buffer Buffer sind nicht persistente Daten eines Moduls, welche einzig vom Modul selbst verwaltet werden sollen. Dies sind zum Beispiel eingehende Datensätze, welche nicht in einem übermittelt werden, sondern nach und nach eintreffen und somit zusammengesetzt werden müssen. Erst bei einem vollständigem Datensatz werden diese vom Buffer genommen und vom Modul verarbeitet. | Funktionsname | Kurzbeschreibung | | ---------------------------------------------------- | -------------------------------- | | [GetBuffer](sdk-php/module.md) | Liefert den Inhalt eines Buffers | | [GetBufferList](sdk-php/module.md) | Liefert ein Array aller Buffer | | [SetBuffer](sdk-php/module.md) | Erstellt einen Buffer | __Beispiel__ ```php public function ReceiveData($JSONString) { //Decode JSONString $data = json_decode($JSONString); //Parse and write values to our buffer $this->SetBuffer("Test", utf8_decode($data->Buffer)); //Print buffer IPS_LogMessage("IOTest", $this->GetBuffer("Test")); } ``` #### Statusvariablen Statusvariablen sind persistente Daten eines Moduls, welche vom Modul jederzeit verändert werden können. Diese sind im Objektbaum sichtbar und stehen zur weiteren Verarbeitung und Darstellung in den [Visualisierungen](../../components/tile-visualization.md) zur Verfügung. Statusvariablen sind zum Beispiel Sensorwerte, im WebFront darzustellende Aktorenwerte und Statuswerte zur Weiterverarbeitung. | Funktionsname | Kurzbeschreibung | | -------------------------------------------------------------- | ---------------------------------------- | | [DisableAction](sdk-php/module.md) | Deaktiviert die Standardaktion | | [EnableAction](sdk-php/module.md) | Aktiviert die Standardaktion | | [GetValue](sdk-php/module.md) | Liefert den Wert einer Variable | | [SetValue](sdk-php/module.md) | Setzt den Wert einer Variable | | [MaintainAction](sdk-php/module.md) | Ruft DisableAction oder EnableAction auf | | [MaintainVariable](sdk-php/module.md) | Konfiguriert eine Statusvariable | | [RegisterVariableBoolean](sdk-php/module.md) | Erstellt eine Boolean Statusvariable | | [RegisterVariableFloat](sdk-php/module.md) | Erstellt eine Float Statusvariable | | [RegisterVariableInteger](sdk-php/module.md) | Erstellt eine Integer Statusvariable | | [RegisterVariableString](sdk-php/module.md) | Erstellt eine String Statusvariable | | [RequestAction](sdk-php/module.md) | Setzt den Wert einer Statusvariable | | [UnregisterVariable](sdk-php/module.md) | Löscht eine Statusvariable | __Beispiel__ ```php public function Create() { //Never delete this line! parent::Create(); //Variables $this->RegisterVariableString("TextData", "TextData", ""); IPS_SetHidden($this->GetIDForIdent("TextData"), true); $this->RegisterVariableString("SimulationView", "Simulationsvorschau", "~HTMLBox"); $this->RegisterVariableInteger("SimulationCounter", "Simulationszähler" , ""); $this->RegisterVariableFloat("Faktor", "Zoom Faktor Wandanzeige", "Faktor.Anzeige"); $this->RegisterVariableBoolean("Active", "Simulation aktiv", "~Switch"); $this->EnableAction("Active"); } ``` ## HTML-SDK Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/html-sdk/ _Benötigt Symcon >= 7.1_ ### Beschreibung Das HTML-SDK ermöglicht es PHP-Modulen eine individuelle [Objektdarstellung](../../components/object-presentation.md) zu nutzen. Diese Darstellung ermöglicht dank HTML volle Flexibilität. Durch Nachrichten zwischen der HTML-Darstellung und dem Modul kann die Darstellung zur Laufzeit aktualisiert werden oder das Modul über Interaktion durch den Benutzer informieren. ### HTML als Darstellung nutzen Soll das HTML-SDK verwendet werden, so muss die Darstellung mit der Funktion [SetVisualizationType](sdk-php/module.md) aktiviert werden. Soll dann die Kachel in der Visualisierung dargestellt werden, wird die Funktion [GetVisualizationTile](sdk-php/module.md) verwendet um den HTML-Inhalt zurückzugeben. ### Übersetzung Analog zu [Konfigurationsformularen](sdk-php/configuration-forms.md) werden auch die Texte der HTML-Elemente der Darstellung basierend auf der Sprache des Benutzers [lokalisiert](sdk-php.md). ### Icons Die [Symcon Icons](../../components/icons.md) können innerhalb der HTML Darstellung verwendet werden, indem die icons.js als Skript eingebunden wird: ```php ``` Wenn das Skript eingebunden ist, können Icons entsprechend der [Dokumentation von Font Awesome](https://docs.fontawesome.com/web/add-icons/how-to) angezeigt werden. Es sind alle regulär in Symcon verwendbaren Icons nutzbar, also Classic Icons mit dem Stil Light per CSS Klasse fa-light sowie Brands über die Klasse fa-brands. Die Symcon-spezifischen Icons können mit der Klasse fa-kit genutzt werden. ### Nachrichten Die Funktion [GetVisualizationTile](sdk-php/module.md) wird initial einmalig aufgerufen. Soll die Darstellung zur Laufzeit angepasst werden, so muss dies über Nachrichten geschehen. Alternativ ermöglichen Nachrichten einen Kanal von der Darstellung zum Modul um Variablen zu schalten oder andere Interaktion durchzuführen. > **Hinweis:** Es ist zwar möglich eine vergleichbare Kommunikation auch über eine [HTML-Box](../../components/object-presentation.md) zu realisieren. Dies ist allerdings zum einen recht aufwendig und birgt zum anderen das Risiko Sicherheitslücken zu erstellen, welche ausgenutzt werden könnten. Die Kommunikation via HTML-SDK ist im Gegenzug in beide Richtungen mit dem Passwort der Visualisierung abgesichert. #### Modul zu Darstellung Soll eine Nachricht vom Modul zur Darstellung geschickt werden, so muss im Modul die Funktion [UpdateVisualizationValue](sdk-php/module.md) verwendet werden. Um den Inhalt dieser Nachricht in der Darstellung zu empfangen und zu verarbeiten, muss via JavaScript die Funktion [handleMessage](sdk-php.md) implementiert werden. Diese erhält als Eingabe genau den Inhalt, der mit UpdateVisualizationTile abgeschickt wurde. Das Format dieser Daten ist absolut frei und sollte passend zum Modul gewählt werden. #### Darstellung zu Modul Die Darstellung kann via JavaScript die Funktion [requestAction](sdk-php.md) verwenden. Diese Funktion führt im Gegenzug auf Seite des Moduls die PHP-Funktion [RequestAction](sdk-php/module.md) aus, wodurch das Modul auf die Nachricht reagieren kann. ### Spezielle Funktionen in JavaScript Das HTML-SDK bietet eine Reihe von Funktionen, welche innerhalb der Darstellung via JavaScript verwendet werden können. | Funktion | Beschreibung | | --------------------------------------------------- | -------------------------------------------------------------------------- | | [handleMessage](sdk-php.md) | Diese Funktion muss definiert werden um Nachrichten vom Modul zu empfangen | | [requestAction](sdk-php.md) | Diese Funktion schickt eine Nachricht ans Modul | | [translate](sdk-php.md) | Übersetzt Text basierend auf der Lokalisierung | | [translateHTML](sdk-php.md) | Übersetzt den Text von HTML-Elementen basierend auf der Lokalisierung | ### Webinar und Beispiele Bei der Veröffentlichung wurde die Funktionalität des HTML-SDK im Rahmen eines Webinars auf [YouTube](https://www.youtube.com/live/-dIHZRYbqpA?si=7QozwcUIwyK8l4zB) vorgestellt. In unserem Test-Repository können auch einige Beispielimplementation eingesehen und ausprobiert werden: | Beispiel | Beschreibung | | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | | [Entenzähler](https://github.com/symcon/SymconTest/tree/master/HTMLVisuTestDuckCounters) | Ein kleiner Zähler mit ausführlichen Kommentaren | | [Wärmepumpe](https://github.com/symcon/SymconTest/tree/master/HTMLVisuTestHeatingPump) | Ein komplexes und umfangreiches Beispiel zur Darstellung einer Wärmepumpe | ## handleMessage Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/html-sdk/handlemessage/ `void handleMessage(mixed Daten)` _Benötigt Symcon >= 7.1_ Diese Funktion muss definiert werden um Nachrichten vom Modul zu empfangen **Parameter** - `Daten` (mixed): beliebige Daten **Rückgabewert** (void): Keine Rückgabe beliebige Daten **Beispiel** ```text function handleMessage(data) { // In diesem Beispiel beinhaltet data einfach einen Text, welcher möglicherweise übersetzt und angezeigt werden soll document.getElementById('info').textContent = translate(data); } ``` ## openObject Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/html-sdk/openobject/ `void openObject(int ObjektID)` _Benötigt Symcon >= 8.2_ **Parameter** - `ObjektID` (int): Die ID des Objekts, welches geöffnet werden soll. **Rückgabewert** (void): Keine Rückgabe Die ID des Objekts, welches geöffnet werden soll. **Beispiel** ```text // Öffnet das Objekt mit der ID 12345 openObject(12345); ``` ## requestAction Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/html-sdk/requestaction/ `void requestAction(string Ident, mixed Wert)` _Benötigt Symcon >= 7.1_ Diese Funktion schickt eine Nachricht ans Modul **Parameter** - `Ident` (string): Ein Ident - `Wert` (mixed): Ein Wert **Rückgabewert** (void): Keine Rückgabe Ein Wert **Beispiel** ```text // Schalte Zähler auf 5 requestAction('Counter', 5); ``` ## translate Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/html-sdk/translate/ `string translate(string Original)` _Benötigt Symcon >= 7.1_ Übersetzt Text basierend auf der Lokalisierung **Parameter** - `Original` (string): Der zu übersetzende englische Originaltext **Rückgabewert** (string): Der übersetzte Text Der zu übersetzende englische Originaltext **Beispiel** ```text // Gebe den übersetzten Text in der Konsole aus console.log(translate('Hallo Welt')); ``` ## translateHTML Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/html-sdk/translatehtml/ `void translateHTML(object Knoten)` _Benötigt Symcon >= 7.1_ Übersetzt den Text von HTML-Elementen basierend auf der Lokalisierung **Parameter** - `Knoten` (object): Ein HTML-Element **Rückgabewert** (void): Keine Rückgabe Ein HTML-Element **Beispiel** ```text // Übersetze Inhalt des Textblockes 'info' translateHTML(document.getElementById('info')); ``` ## Konstanten Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/konstanten/ _Benötigt Symcon >= 5.1_ ### Konstanten | Define | Beschreibung | | ----------------------------------------------------------------- | --------------------------------------------- | | EVENTCONDITIONCOMPARISON | Vergleichskonditionen für bedingte Ereignisse | | EVENTCYCLICDATETYPE | Datumstyp bei zyklischem Ereignis | | EVENTCYCLICTIMETYPE | Zeittyp des Ereignisses | | EVENTTRIGGERTYPE | Auslösetyp bei ausgelösten Ereignis | | EVENTTYPE | Typ des Ereignisses | | MEDIATYPE | Typ der Mediainstanz | | MODULETYPE | Typ des Moduls | | OBJECTTYPE | Typ des Objekts | | SCRIPTTYPE | Typ des Skripts | | VARIABLETYPE | Typ der Variable | #### EventConditionComparison Vergleichskonditionen für bedingte Ereignisse | Konstante | Wert | Beschreibung | | --------------------------------------- | ---- | ------------- | | EVENTCONDITIONCOMPARISON_EQUAL | 0 | Gleich | | EVENTCONDITIONCOMPARISON_NOTEQUAL | 1 | Ungleich | | EVENTCONDITIONCOMPARISON_GREATER | 2 | Größer als | | EVENTCONDITIONCOMPARISON_GREATEROREQUAL | 3 | GrößerGleich | | EVENTCONDITIONCOMPARISON_SMALLER | 4 | Kleiner als | | EVENTCONDITIONCOMPARISON_SMALLEROREQUAL | 5 | KleinerGleich | #### EventCyclicDateType Datumstyp bei zyklischem Ereignis | Konstante | Wert | Beschreibung | | ------------------------- | ---- | -------------- | | EVENTCYCLICDATETYPE_NONE | 0 | Kein Datumstyp | | EVENTCYCLICDATETYPE_ONCE | 1 | Einmalig | | EVENTCYCLICDATETYPE_DAY | 2 | Täglich | | EVENTCYCLICDATETYPE_WEEK | 3 | Wöchentlich | | EVENTCYCLICDATETYPE_MONTH | 4 | Monatlich | | EVENTCYCLICDATETYPE_YEAR | 5 | Jährlich | #### EventCyclicTimeType Zeittyp des Ereignisses | Konstante | Wert | Beschreibung | | -------------------------- | ---- | ------------ | | EVENTCYCLICTIMETYPE_ONCE | 0 | Einmalig | | EVENTCYCLICTIMETYPE_SECOND | 1 | Sekündlich | | EVENTCYCLICTIMETYPE_MINUTE | 2 | Minütlich | | EVENTCYCLICTIMETYPE_HOUR | 3 | Stündlich | #### EventTriggerType Auslösetyp bei ausgelösten Ereignis | Konstante | Wert | Beschreibung | | ------------------------------ | ---- | ---------------------------- | | EVENTTRIGGERTYPE_ONUPDATE | 0 | Bei Variablenaktualisierung | | EVENTTRIGGERTYPE_ONCHANGE | 1 | Bei Variablenänderung | | EVENTTRIGGERTYPE_ONLIMITEXCEED | 2 | Bei Grenzwertüberschreitung | | EVENTTRIGGERTYPE_ONLIMITDROP | 3 | Bei Grenzwertunterschreitung | | EVENTTRIGGERTYPE_ONVALUE | 4 | Bei bestimmten Wert | #### EventType Typ des Ereignisses | Konstante | Wert | Beschreibung | | ------------------ | ---- | -------------------- | | EVENTTYPE_TRIGGER | 0 | Ausgelöstes Ereignis | | EVENTTYPE_CYCLIC | 1 | Zyklisches Ereignis | | EVENTTYPE_SCHEDULE | 2 | Wochenplan Ereignis | #### MediaType Typ der Mediainstanz | Konstante | Wert | Beschreibung | | ------------------ | ---- | ------------ | | MEDIATYPE_IPSVIEW | 0 | IPSView | | MEDIATYPE_IMAGE | 1 | Bild | | MEDIATYPE_SOUND | 2 | Ton | | MEDIATYPE_STREAM | 3 | Stream | | MEDIATYPE_CHART | 4 | Chart | | MEDIATYPE_DOCUMENT | 5 | Dokument | #### ModuleType Typ des Moduls | Konstante | Wert | Beschreibung | | ------------------------ | ---- | ---------------- | | MODULETYPE_CORE | 0 | Kern | | MODULETYPE_IO | 1 | I/O | | MODULETYPE_SPLITTER | 2 | Splitter | | MODULETYPE_DEVICE | 3 | Geräte | | MODULETYPE_CONFIGURATOR | 4 | Konfigurator | | MODULETYPE_DISCOVERY | 5 | Erkennungsdienst | | MODULETYPE_VISUALIZATION | 6 | Visualisierung | #### ObjectType Typ des Objekts | Konstante | Wert | Beschreibung | | ------------------- | ---- | ------------ | | OBJECTTYPE_CATEGORY | 0 | Kategorie | | OBJECTTYPE_INSTANCE | 1 | Instanz | | OBJECTTYPE_VARIABLE | 2 | Variablen | | OBJECTTYPE_SCRIPT | 3 | Skript | | OBJECTTYPE_EVENT | 4 | Ereignis | | OBJECTTYPE_MEDIA | 5 | Media | | OBJECTTYPE_LINK | 6 | Link | #### ScriptType Typ des Skripts | Konstante | Wert | Beschreibung | | ---------------------- | ---- | ------------ | | SCRIPTTYPE_PHP | 0 | PHP-Skript | | SCRIPTTYPE_FLOW | 1 | Ablaufplan | | SCRIPTTYPE_IPSWORKFLOW | 2 | IPSWorkflow | #### VariableType Typ der Variable | Konstante | Wert | Beschreibung | | -------------------- | ---- | ------------ | | VARIABLETYPE_BOOLEAN | 0 | Boolean | | VARIABLETYPE_INTEGER | 1 | Integer | | VARIABLETYPE_FLOAT | 2 | Float | | VARIABLETYPE_STRING | 3 | String | #### Darstellungen | GUID | Konstante | Name | | -------------------------------------- | ---------------------------------------- | ---------------------------------------------------- | | {6B9CAEEC-5958-C223-30F7-BD36569FC57A} | VARIABLE_PRESENTATION_SLIDER | [Schieberegler](../../components/object-presentation.md) | | {4153A8D4-5C33-C65F-C1F3-7B61AAF99B1C} | VARIABLE_PRESENTATION_LEGACY | [Legacy-Profil](../../components/object-presentation.md) | | {3319437D-7CDE-699D-750A-3C6A3841FA75} | VARIABLE_PRESENTATION_VALUE_PRESENTATION | [Wertanzeige](../../components/object-presentation.md) | | {6F477326-1683-A2FD-D2E7-477F366ECB62} | VARIABLE_PRESENTATION_VALUE_INPUT | [Werteingabe](../../components/object-presentation.md) | | {9DE1D610-5106-97FB-714D-1AADEDF8377A} | VARIABLE_PRESENTATION_WEB_CONTENT | [Webinhalt](../../components/object-presentation.md) | | {05CC3CC2-A0B2-5837-A4A7-A07EA0B9DDFB} | VARIABLE_PRESENTATION_COLOR | [Farbe](../../components/object-presentation.md) | | {497C4845-27FA-6E4F-AE37-5D951D3BDBF9} | VARIABLE_PRESENTATION_DATE_TIME | [Datum/Uhrzeit](../../components/object-presentation.md) | | {60AE6B26-B3E2-BDB1-A3A1-BE232940664B} | VARIABLE_PRESENTATION_SWITCH | [Schalter](../../components/object-presentation.md) | | {6075FC22-69AF-B110-3749-C24138883082} | VARIABLE_PRESENTATION_SHUTTER | [Rollladen](../../components/object-presentation.md) | | {52D9E126-D7D2-2CBB-5E62-4CF7BA7C5D82} | VARIABLE_PRESENTATION_ENUMERATION | [Aufzählung](../../components/object-presentation.md) | | {08A6AF76-394E-D354-48D5-BFC690488E4E} | VARIABLE_PRESENTATION_DURATION | [Dauer](../../components/object-presentation.md) | #### Vorlagen | GUID | Konstante | Name | | -------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------ | | {B4C70F3E-6613-DA1A-7279-5DEE8DEB1B24} | VARIABLE_TEMPLATE_DATE | [Datum](../../components/object-presentation.md) | | {362DA268-56A2-E771-5E53-17E38B5D82E6} | VARIABLE_TEMPLATE_TIME | [Uhrzeit](../../components/object-presentation.md) | | {BB0E9933-0403-BD3A-D1C9-255646934B00} | VARIABLE_TEMPLATE_DATE_TIME | [Datum/Uhrzeit](../../components/object-presentation.md) | | {868B087E-A38D-2155-EBE0-157AFBBF9E8C} | VARIABLE_TEMPLATE_SLIDER_ROOM_TEMPERATURE | [Raumtemperatur](../../components/object-presentation.md) | | {66062309-21A9-26C0-213F-775C52E1473B} | VARIABLE_TEMPLATE_SLIDER_COLOR_TEMPERATURE | [Farbtemperature](../../components/object-presentation.md) | | {BC799412-0C66-551F-CAEC-7566F5D52BD9} | VARIABLE_TEMPLATE_SLIDER_ENERGY | [Energie](../../components/object-presentation.md) | | {8EC19DF0-89FB-A77E-ED7D-047A949CF292} | VARIABLE_TEMPLATE_SLIDER_POWER | [Leistung](../../components/object-presentation.md) | | {3BE75DE9-7D84-C082-2E77-9ED3AEE04D63} | VARIABLE_TEMPLATE_SHUTTER_LAMELLA_RIGHT | [Lamelle rechts](../../components/object-presentation.md) | | {22A0DF9C-C200-154A-641B-3A3CB096DB6D} | VARIABLE_TEMPLATE_SHUTTER_LAMELLA_LEFT | [Lamelle links](../../components/object-presentation.md) | | {90AF8F8F-183F-BBFD-E078-35FAB6DCFE4F} | VARIABLE_TEMPLATE_VALUE_PRESENTATION_ROOM_TEMPERATURE | [Raumtemperatur](../../components/object-presentation.md) | | {2FED3D39-073D-6037-901B-2586A1AB5569} | VARIABLE_TEMPLATE_VALUE_PRESENTATION_POWER | [Leistung](../../components/object-presentation.md) | | {C899FCFA-063E-897E-9DA4-28ADD278EED5} | VARIABLE_TEMPLATE_VALUE_PRESENTATION_ENERGY | [Energie](../../components/object-presentation.md) | | {7BD38CF5-07F2-5B5B-8F7F-15398B823BFC} | VARIABLE_TEMPLATE_VALUE_PRESENTATION_BATTERY | [Batterie](../../components/object-presentation.md) | | {C90EF36A-165E-D0B0-032C-F468F483D42B} | VARIABLE_TEMPLATE_VALUE_PRESENTATION_BATTERY_COLOR | [Batterie (Farbe)](../../components/object-presentation.md) | | {0C711895-2F8E-DBFE-1700-84173491D229} | VARIABLE_TEMPLATE_COLOR_RAINBOW | [Regenbogen](../../components/object-presentation.md) | | {A7467E68-5C39-5BD9-C0C8-BCE6004FEEAA} | VARIABLE_TEMPLATE_COLOR_FOREST | [Wald](../../components/object-presentation.md) | #### InstanceStatus Der Status einer Instanz | Konstante | Wert | Beschreibung | | ------------- | ---- | ---------------------------- | | IS_CREATING | 101 | Instanz wird erstellt | | IS_ACTIVE | 102 | Instanz ist aktiv | | IS_DELETING | 103 | Instanz wird gelöscht | | IS_INACTIVE | 104 | Instanz ist inaktiv | | IS_NOTCREATED | 105 | Instanz wurde nicht erstellt | | IS_STANDBY | 106 | Instanz ist im Standby | #### Visualisierungstypen ab 9.1 | Konstante | Wert | Beschreibung | | ------------------------------------------- | ---- | ----------------------------------------------------------------------------- | | INSTANCE_VISUALIZATION_TYPE_NONE | 0 | Die Instanz nutzt keine eigene Visualisierung | | INSTANCE_VISUALIZATION_TYPE_HTML | 1 | Die Instanz nutzt eine HTML Visualisierung | | INSTANCE_VISUALIZATION_TYPE_HTML_FULLSCREEN | 2 | Die Instanz nutzt eine HTML Visualisierung bei normaler und geöffneter Kachel | ## Lokalisierungen Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/lokalisierungen/ _Benötigt Symcon >= 4.1_ Die JSON-Datei "locale.json" beinhaltet die Übersetzungen für "label" und "caption" der Konfigurationsseite. Hier sind auch abstufende Sprachenkürzel möglich. Zum Beispiel können auch "de_DE" oder "de_AT" genutzt werden. ### Beispiele __Grundaufbau der JSON Datei__ Die Sprachenkürzel geben an in welche Sprache übersetzt werden soll ```php { "translations": { "de": { "Zu übersetzendes Wort 1": "Übersetzung ins Deutsche - Wort 1", "Zu übersetzendes Wort 2": "Übersetzung ins Deutsche - Wort 2" }, "de_DE": { "Zu übersetzendes Wort 1": "Übersetzung ins Deutsche - Wort 1", "Zu übersetzendes Wort 2": "Übersetzung ins Deutsche - Wort 2" }, "de_CH": { "Zu übersetzendes Wort 1": "Übersetzung ins Schwiizerdütsch - Wort 1", "Zu übersetzendes Wort 2": "Übersetzung ins Schwiizerdütsch - Wort 2" } } } ```
__Vollständiges Beispiel anhand eines SMS Moduls (siehe Beispiel [Konfigurationsformulare](sdk-php/configuration-forms.md) )__ ```php { "translations": { "de": { "Username": "Benutzername", "Password": "Passwort", "Sender": "Absender", "Type": "Typ", "Combi-SMS": "Kombi-SMS", "Number": "Nummer", "Message": "Nachricht", "Send Message": "Sende Nachricht", "Read Balance": "Frage Guthaben ab", "Login information valid": "Logindaten sind gültig", "Authentication failed": "Authentifizierung ist fehlgeschlagen", "No credits left": "Kein Guthaben vorhanden" } } } ``` ## Nachrichten Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/nachrichten/ _Benötigt Symcon >= 4.1_ ### Beschreibung Alle Nachrichten haben eine eigene ID, welche die Art der Nachricht beschreibt. Dies ist eine fünfstellige Zahl und setzt sich wiefolgt zusammen: Basis + Kategorie + Typ = Gesamtwert > **Hinweis:** Ab Version 5.0 stehen die Werte automatisch als Konstante zur Verfügung ### Übersicht aller NachrichtIDs ### Nachrichtenbasis Nachrichten von IP-Symcon haben die Wertebasis 10000, solche von Modulinstanzen (noch undokumentiert) die Wertebasis 20000. | Define | Wert | Beschreibung | | ------------- | ----- | --------------------- | | IPS_BASE | 10000 | Wertebasis für Kernel | | IPS_MODULBASE | 20000 | Wertebasis für Module | ### Nachrichtenkategorien | Define | Wert | Beschreibung | | ------------------------------------------------------------------------------ | ---- | ------------------- | | [IPS_BASE](sdk-php.md) | 0 | Service Nachrichten | | [IPS_KERNELMESSAGE](sdk-php.md) | 100 | Kernel Manager | | [IPS_LOGMESSAGE](sdk-php.md) | 200 | Meldungen Manager | | [IPS_MODULEMESSAGE](sdk-php.md) | 300 | Modul Manager | | [IPS_OBJECTMESSAGE](sdk-php.md) | 400 | Objekt Manager | | [IPS_INSTANCEMESSAGE](sdk-php.md) | 500 | Instanz Manager | | [IPS_SEARCHMESSAGE](sdk-php.md) | 510 | Such Manager | | [IPS_VARIABLEMESSAGE](sdk-php.md) | 600 | Variablen Manager | | [IPS_SCRIPTMESSAGE](sdk-php.md) | 700 | Script Manager | | [IPS_EVENTMESSAGE](sdk-php.md) | 800 | Event Manager | | [IPS_MEDIAMESSAGE](sdk-php.md) | 900 | Medien Manager | | [IPS_LINKMESSAGE](sdk-php.md) | 1000 | Link Manager | | [IPS_FLOWMESSAGE](sdk-php.md) | 1100 | Flow Manager | | [IPS_ENGINEMESSAGE](sdk-php.md) | 1200 | Script Engine | | [IPS_PROFILEMESSAGE](sdk-php.md) | 1300 | Profile Pool | | [IPS_TIMERMESSAGE](sdk-php.md) | 1400 | Timer Pool | | [IPS_ACTIONMESSAGE](sdk-php.md) | 1500 | Action Pool | | [IPS_LICENSENMESSAGE](sdk-php.md) | 1600 | License Pool | ### Nachrichtentypen #### IPS_BASE Wertebasis 0 | Define | Wert | Gesamtwert | Beschreibung | | --------------------------- | ---- | ---------- | ----------------------------------------------------- | | IPS_KERNELSTARTED (ab 4.2) | 1 | 10001 | Wird nach KR_READY gesendet und synchron abgearbeitet | | IPS_KERNELSHUTDOWN (ab 4.2) | 2 | 10002 | Wird vor KR_UNINIT gesendet und synchron abgearbeitet | #### IPS_KERNELMESSAGE Wertebasis 100 | Define | Wert | Gesamtwert | Beschreibung | | ----------- | ---- | ---------- | ------------------------------------------------------------------------------- | | KR_CREATE | 1 | 10101 | Kernel wurde erstellt | | KR_INIT | 2 | 10102 | Kernel Komponenten werden initialisiert, Module geladen und Settings eingelesen | | KR_READY | 3 | 10103 | Kernel ist bereit und läuft | | KR_UNINIT | 4 | 10104 | "Shutdown"-Befehl erhalten, finalisiere alles geladene | | KR_SHUTDOWN | 5 | 10105 | Finalisierung abgeschlossen, entferne Kernel | #### IPS_LOGMESSAGE Wertebasis 200 | Define | Wert | Gesamtwert | Beschreibung | | ---------- | ---- | ---------- | ----------------------- | | KL_MESSAGE | 1 | 10201 | Normale Nachricht | | KL_SUCCESS | 2 | 10202 | Erfolg | | KL_NOTIFY | 3 | 10203 | Änderungsbenachrichtung | | KL_WARNING | 4 | 10204 | Warnung | | KL_ERROR | 5 | 10205 | Fehlermeldung | | KL_DEBUG | 6 | 10206 | Debug Information | | KL_CUSTOM | 7 | 10207 | Sonstige Nachrichten | #### IPS_MODULEMESSAGE Wertebasis 300 | Define | Wert | Gesamtwert | Beschreibung | | --------- | ---- | ---------- | -------------- | | ML_LOAD | 1 | 10301 | Modul geladen | | ML_UNLOAD | 2 | 10302 | Modul entladen | #### IPS_OBJECTMESSAGE Wertebasis 400 | Define | Wert | Gesamtwert | Beschreibung | | ----------------- | ---- | ---------- | --------------------------------------- | | OM_REGISTER | 1 | 10401 | Objekt erstellt | | OM_UNREGISTER | 2 | 10402 | Objekt entfernt | | OM_CHANGEPARENT | 3 | 10403 | Übergeordnetes Objekt hat sich geändert | | OM_CHANGENAME | 4 | 10404 | Name hat sich geändert | | OM_CHANGEINFO | 5 | 10405 | Beschreibung hat sich geändert | | OM_CHANGETYPE | 6 | 10406 | Typ hat sich geändert | | OM_CHANGESUMMARY | 7 | 10407 | Kurzinfo hat sich geändert | | OM_CHANGEPOSITION | 8 | 10408 | Position hat sich geändert | | OM_CHANGEREADONLY | 9 | 10409 | "Nur-Lesen"-Status hat sich geändert | | OM_CHANGEHIDDEN | 10 | 10410 | Sichtbarkeit hat sich geändert | | OM_CHANGEICON | 11 | 10411 | Icon hat sich geändert | | OM_CHILDADDED | 12 | 10412 | Untergeordnetes Objekt hinzugefügt | | OM_CHILDREMOVED | 13 | 10413 | Untergeordnetes Objekt entfernt | | OM_CHANGEIDENT | 14 | 10414 | Ident hat sich geändert | | OM_CHANGEDISABLED | 15 | 10415 | Bedienbarkeit hat sich geändert | | OM_CHANGELOCKED | 16 | 10416 | Sperre hat sich geändert | #### IPS_INSTANCEMESSAGE Wertebasis 500 | Define | Wert | Gesamtwert | Beschreibung | | ------------------ | ---- | ---------- | ------------------------------------- | | IM_CREATE | 1 | 10501 | Instanz erstellt | | IM_DELETE | 2 | 10502 | Instanz entfernt | | IM_CONNECT | 3 | 10503 | Instanzinterface verfügbar | | IM_DISCONNECT | 4 | 10504 | Instanzinterface nicht mehr verfügbar | | IM_CHANGESTATUS | 5 | 10505 | Status hat sich geändert | | IM_CHANGESETTINGS | 6 | 10506 | Einstellungen haben sich geändert | | IM_CHANGEATTRIBUTE | 7 | 10507 | Attribut hat sich geändert | | IM_ADDATTRIBUTE | 8 | 10508 | Attribut wurde hinzugefügt | | IM_REMOVEATTRIBUTE | 9 | 10509 | Attribut wurde entfernt | #### IPS_SEARCHMESSAGE Wertebasis 510 | Define | Wert | Gesamtwert | Beschreibung | | --------------- | ---- | ---------- | ------------------------- | | IM_SEARCHSTART | 1 | 10511 | Suche wurde gestartet | | IM_SEARCHSTOP | 2 | 10512 | Suche wurde gestoppt | | IM_SEARCHUPDATE | 3 | 10513 | Suche hat neue Ergebnisse | #### IPS_FORMMESSAGE Wertebasis 520 | Define | Value | Total value | Description | | ------------------ | ----- | ----------- | ------------------------------ | | IM_FORMFIELDCREATE | 1 | 10521 | Formularfeld erstellt | | IM_FORMFIELDDELETE | 2 | 10522 | Formularfeld entfernt | | IM_FORMFIELDUPDATE | 3 | 10523 | Formularfeld hat sich geändert | | IM_FORMRELOAD | 4 | 10524 | Lade Formularfeld erneut | #### IPS_VARIABLEMESSAGE Wertebasis 600 | Define | Wert | Gesamtwert | Beschreibung | | ---------------------- | ---- | ---------- | ------------------------------------ | | VM_CREATE | 1 | 10601 | Variable wurde erstellt | | VM_DELETE | 2 | 10602 | Variable wurde entfernt | | VM_UPDATE | 3 | 10603 | Variable wurde aktualisiert | | VM_CHANGEPROFILENAME | 4 | 10604 | Variablenprofilname wurde geändert | | VM_CHANGEPROFILEACTION | 5 | 10605 | Variablenprofilaktion wurde geändert | | VM_CHANGEDLOCKED | 6 | 10606 | Sperre wurde geändert | #### IPS_SCRIPTMESSAGE Wertebasis 700 | Define | Wert | Gesamtwert | Beschreibung | | ------------- | ---- | ---------- | ------------------------------------- | | SM_CREATE | 1 | 10701 | Skript wurde erstellt | | SM_DELETE | 2 | 10702 | Skript wurde entfernt | | SM_CHANGEFILE | 3 | 10703 | Skript wurde Datei angehangen | | SM_BROKEN | 4 | 10704 | Skript Fehlerstatus hat sich geändert | | SM_UPDATE | 5 | 10704 | Skript wurde aktualisiert | #### IPS_EVENTMESSAGE Wertebasis 800 | Define | Wert | Gesamtwert | Beschreibung | | ---------------------------------- | ---- | ---------- | --------------------------------------------------------------- | | EM_CREATE | 1 | 10801 | Ereignis wurde erstellt | | EM_DELETE | 2 | 10802 | Ereignis wurde entfernt | | EM_UPDATE | 3 | 10803 | Ereignis wurde aktualisiert | | EM_CHANGEACTIVE | 4 | 10804 | Ereignisaktivierung hat sich geändert | | EM_CHANGELIMIT | 5 | 10805 | Ereignisaufruflimit hat sich geändert | | EM_CHANGESCRIPT | 6 | 10806 | Ereignisskriptinhalt hat sich geändert | | EM_CHANGETRIGGER | 7 | 10807 | Ereignisauslöser hat sich geändert | | EM_CHANGETRIGGERVALUE | 8 | 10808 | Ereignisgrenzwert hat sich geändert | | EM_CHANGETRIGGEREXECUTION | 9 | 10809 | Ereignisgrenzwertauslösung hat sich geändert | | EM_CHANGECYCLIC | 10 | 10810 | zyklisches Ereignis hat sich geändert | | EM_CHANGECYCLICDATEFROM | 11 | 10811 | Startdatum hat sich geändert | | EM_CHANGECYCLICDATETO | 12 | 10812 | Enddatum hat sich geändert | | EM_CHANGECYCLICTIMEFROM | 13 | 10813 | Startzeit hat sich geändert | | EM_CHANGECYCLICTIMETO | 14 | 10814 | Endzeit hat sich geändert | | EM_ADDSCHEDULEACTION | 15 | 10815 | Eintrag in der Aktionstabelle des Wochenplans wurde hinzugefügt | | EM_REMOVESCHEDULEACTION | 16 | 10816 | Eintrag in der Aktionstabelle des Wochenplans wurde entfernt | | EM_CHANGESCHEDULEACTION | 17 | 10817 | Eintrag in der Aktionstabelle des Wochenplans hat sich geändert | | EM_ADDSCHEDULEGROUP | 18 | 10818 | Gruppierung der Wochenplantage wurde hinzugefügt | | EM_REMOVESCHEDULEGROUP | 19 | 10819 | Gruppierung der Wochenplantage wurde entfernt | | EM_CHANGESCHEDULEGROUP | 20 | 10820 | Gruppierung der Wochenplantage hat sich geändert | | EM_ADDSCHEDULEGROUPPOINT | 21 | 10821 | Schaltpunkt einer Gruppierung wurde hinzugefügt | | EM_REMOVESCHEDULEGROUPPOINT | 22 | 10822 | Schaltpunkt einer Gruppierung wurde entfernt | | EM_CHANGESCHEDULEGROUPPOINT | 23 | 10823 | Schaltpunkt einer Gruppierung hat sich geändert | | EM_ADDCONDITION | 24 | 10824 | Bedingung wurde hinzugefügt | | EM_REMOVECONDITION | 25 | 10825 | Bedingung wurde entfernt | | EM_CHANGECONDITION | 26 | 10826 | Bedingung hat sich geändert | | EM_ADDCONDITIONVARIABLERULE | 27 | 10827 | Variablenregel der Bedingung wurde hinzugefügt | | EM_REMOVECONDITIONVARIABLERULE | 28 | 10828 | Variablenregel der Bedingung wurde entfernt | | EM_CHANGECONDITIONVARIABLERULE | 29 | 10829 | Variablenregel der Bedingung hat sich geändert | | EM_ADDCONDITIONDATERULE | 30 | 10830 | Datumsregel der Bedingung wurde hinzugefügt | | EM_REMOVECONDITIONDATERULE | 31 | 10831 | Datumsregel der Bedingung wurde entfernt | | EM_CHANGECONDITIONDATERULE | 32 | 10832 | Datumsregel der Bedingung hat sich geändert | | EM_ADDCONDITIONTIMERULE | 33 | 10833 | Zeitregel der Bedingung wurde hinzugefügt | | EM_REMOVECONDITIONTIMERULE | 34 | 10834 | Zeitregel der Bedingung wurde entfernt | | EM_CHANGECONDITIONTIMERULE | 35 | 10835 | Zeitregel der Bedingung hat sich geändert | | EM_ADDCONDITIONDAYOFTHEWEEKRULE | 36 | 10836 | Wochentagsregel der Bedingung wurde hinzugefügt | | EM_REMOVECONDITIONDAYOFTHEWEEKRULE | 37 | 10837 | Wochentagsregel der Bedingung wurde entfernt | | EM_CHANGECONDITIONDAYOFTHEWEEKRULE | 38 | 10838 | Wochentagsregel der Bedingung hat sich geändert | #### IPS_MEDIAMESSAGE Wertebasis 900 | Define | Wert | Gesamtwert | Beschreibung | | --------------- | ---- | ---------- | ------------------------------------------------- | | MM_CREATE | 1 | 10901 | Medienobjekt wurde erstellt | | MM_DELETE | 2 | 10902 | Medienobjekt wurde entfernt | | MM_CHANGEFILE | 3 | 10903 | Datei des Medienobjekts wurde geändert | | MM_AVAILABLE | 4 | 10904 | Verfügbarkeit des Medienobjekts hat sich geändert | | MM_UPDATE | 5 | 10905 | Medienobjekt wurde aktualisiert | | MM_CHANGECACHED | 6 | 10906 | Cacheoption vom Medienobjekt hat sich geändert | #### IPS_LINKMESSAGE Wertebasis 1000 | Define | Wert | Gesamtwert | Beschreibung | | --------------- | ---- | ---------- | -------------------------------- | | LM_CREATE | 1 | 11001 | Link wurde erstellt | | LM_DELETE | 2 | 11002 | Link wurde entfernt | | LM_CHANGETARGET | 3 | 11003 | Ziel des Links hat sich geändert | #### IPS_FLOWMESSAGE Wertebasis 1100 | Define | Wert | Gesamtwert | Beschreibung | | --------------- | ---- | ---------- | --------------------------------------------------------- | | FM_CONNECT | 1 | 11101 | Instanz wurde verbunden | | FM_DISCONNECT | 2 | 11102 | Instanz wurde getrennt | | FM_CHILDADDED | 3 | 11103 | Untergeordnete Instanz wurde mit dieser Instanz verbunden | | FM_CHILDREMOVED | 4 | 11104 | Untergeordnete Instanz wurde von dieser Instanz getrennt | #### IPS_ENGINEMESSAGE Wertebasis 1200 | Define | Wert | Gesamtwert | Beschreibung | | ------------- | ---- | ---------- | ----------------------------------------------------------------------------- | | SE_UPDATE | 1 | 11201 | Scriptengine wurde neu geladen | | SE_EXECUTE | 2 | 11202 | Script wurde ausgeführt | | SE_RUNNING | 3 | 11203 | Script wird ausgeführt | | SE_FLOWSCRIPT | 4 | 11204 | Bei Ablaufplan Status (entweder alle Schritte abgeschlossen oder abgebrochen) | #### IPS_PROFILEMESSAGE Wertebasis 1300 | Define | Wert | Gesamtwert | Beschreibung | | --------------------- | ---- | ---------- | ------------------------------------------- | | PM_CREATE | 1 | 11301 | Profil wurde erstellt | | PM_DELETE | 2 | 11302 | Profil wurde entfernt | | PM_CHANGETEXT | 3 | 11303 | Profilprefix/Profilsuffix hat sich geändert | | PM_CHANGEVALUES | 4 | 11304 | Profilwerte haben sich geändert | | PM_CHANGEDIGITS | 5 | 11305 | Profilnachkommastellen haben sich geändert | | PM_CHANGEICON | 6 | 11306 | Profilicon hat sich geändert | | PM_ASSOCIATIONADDED | 7 | 11307 | Profilassoziation wurde hinzugefügt | | PM_ASSOCIATIONREMOVED | 8 | 11308 | Profilassoziation wurde entfernt | | PM_ASSOCIATIONCHANGED | 9 | 11309 | Profilassoziation hat sich geändert | #### IPS_TIMERMESSAGE Wertebasis 1400 | Define | Wert | Gesamtwert | Beschreibung | | ----------------- | ---- | ---------- | -------------------------------- | | TM_REGISTER | 1 | 11401 | Timer wurde erstellt | | TM_UNREGISTER | 2 | 11402 | Timer wurde entfernt | | TM_CHANGEINTERVAL | 3 | 11403 | Timer Interval hat sich geändert | #### IPS_ACTIONMESSAGE Wertebasis 1500 | Define | Wert | Gesamtwert | Beschreibung | | ------------------ | ---- | ---------- | -------------------------------- | | AM_FORMFIELDCREATE | 1 | 11501 | Aktuell ungenutzt | | AM_FORMFIELDDELETE | 2 | 11502 | Aktuell ungenutzt | | AM_FORMFIELDUPDATE | 3 | 11503 | Form-Element benötigt ein Update | | AM_FORMRELOAD | 4 | 11504 | Konfigurationsformular neuladen | #### IPS_LICENSEMESSAGE Wertebasis 1600 | Define | Wert | Gesamtwert | Beschreibung | | --------------------- | ---- | ---------- | ------------------------------- | | LP_UPDATELICENSE | 1 | 11601 | Lizenz wurde geändert | | LP_UPDATESUBSCRIPTION | 2 | 11602 | Subskription wurde aktualisiert | ### Nachrichtenparameter Werte von verschiedenen Nachrichtenparametern #### Search Handling | Define | Wert | Gesamtwert | Beschreibung | | -------------- | ---- | ---------- | ------------------------------------------------------------------- | | IF_UNKNOWN | 0 | 0 | Unbekannter Wert | | IF_NEW | 1 | 1 | Gerät ist erstellt aber nicht konfiguriert | | IF_OLD | 2 | 2 | Gerät ist konfiguriert und sollte eine InstanzID haben | | IF_CURRENT | 3 | 3 | Gerät ist konfiguriert und die InstanzID gehört dem suchenden Gerät | | IF_UNSUPPORTED | 4 | 4 | Gerät wird vom Modul nicht unterstützt | #### Status Codes | Define | Wert | Gesamtwert | Beschreibung | | ------------- | ---- | ---------- | ----------------------------- | | IS_SBASE | 100 | 100 | Wertebasis für Status Codes | | IS_CREATING | 1 | 101 | Instanz wird erstellt | | IS_ACTIVE | 2 | 102 | Instanz ist aktiv | | IS_DELETING | 3 | 103 | Instanz wird gelöscht | | IS_INACTIVE | 4 | 104 | Instanz ist inaktiv | | IS_NOTCREATED | 5 | 105 | Instanz wurde nicht erstelltv | #### Error Codes | Define | Wert | Gesamtwert | Beschreibung | | -------- | ---- | ---------- | ---------------------- | | IS_EBASE | 200 | 200 | Allgemeiner Fehlerfall | ## Referenzen Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/referenzen/ _Benötigt Symcon >= 5.1_ ### Beschreibung Referenzen zeigen an, welche Objekte einen selbst zur fehlerfreien Funktionsweise benötigen. So wird zum Beispiel bei einer Referenzsuche auf eine Variable ein ausgelöstes Ereignis aufgeführt, welches bei Variablenänderung auslöst. Ohne die Variable kann das Ereignis nicht ordentlich funktionieren. Abgerufen werden die Referenzen standardmässig über das [Kontextmenü](../../concepts.md) im Objektbaum. In der dann angezeigten Liste kann dann zu den Objekten gesprungen werden. ![Referenzen im Objektbaum](https://www.symcon.de/media/pages/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/referenzen/70e23befe3-1790424938/sdkphp-referenzen.png) ### Referenzen verwalten Im Modul können Referenzen hinzufügt und entfernt werden. | Funktion | Beschreibung | | ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | | [GetReferenceList](sdk-php/module.md) | Diese Funktion liefert ein Array mit allen Referenzen. | | [RegisterReference](sdk-php/module.md) | Diese Funktion registriert mithilfe der ZielobjektID eine Referenz, welches dann bei einer Referenzsuche gefunden wird. | | [UnregisterReference](sdk-php/module.md) | Diese Funktion entfernt eine Referenz für das Modul. | ## Store Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/store/ Ab der Version 5.1 gibt es in IP-Symcon einen Module Store, in welchem entwickelte Module angeboten werden können. Die Grundlage hierfür ist eine Bibliothek, welche komfortabel gefunden und installiert werden kann. > **Hinweis:** Allgemeine Informationen zum Module Store kann man hier finden: [Module Store](../../components/management-console.md) Für jede Bibliothek können bis zu drei verschiedene Kanäle angeboten werden: Stable, Beta und Testing * __Stable__ ist der Kanal für die stabile Produktivversion der Bibliothek. Veröffentlichungen auf diesem Kanal werden durch das Symcon-Team geprüft. * __Beta__ ist der offene Testkanal. Jeder Benutzer hat hierauf Zugriff und kann die Beta-Version installieren. * __Testing__ beschreibt einen internen Testkanal. Hierzu müssen Benutzer explizit eingeladen werden, damit diese Zugriff auf den Kanal haben. Ist man nicht eingeladen, so erhält man keinen Einblick in diese Version. ## Einreichen Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/store/einreichen/ ### Beschreibung Soll eine entwickelte Bibliothek im Module Store angeboten werden, so muss dies über den Entwicklerbereich auf der [Accountseite](https://account.symcon.de) eingereicht werden. ### Entwicklerbereich Der Entwicklerbereich ist auf der [Accountseite](https://account.symcon.de) unter "Entwicklerbereich" zu erreichen. ![Entwicklerbereich](https://www.symcon.de/media/pages/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/store/einreichen/461ebe294a-1790424938/store-submit-developer-area.png) Hier werden alle bisherigen Einreichungen aufgelistet. Es werden die Downloads des Moduls sowie der Zustand der einzelnen Kanäle dargestellt. Über den Button "Bearbeiten" kann ein Modul angepasst werden. Über den Button "Modul hinzufügen" können neue Module für eine Einreichung vorbereitet werden. Mit dem Button "Prüfe auf aktuellen Stand" wird automatisch geprüft welche Module aktuell auf dem aktuellen Stand des Hauptbranches des dazugehörigen Repositories sind. Diese Funktion wird nur für Repositories auf GitHub unterstützt. Bei einer größeren Anzahl von Modulen werden entsprechend viele Anfragen an die GitHub-API gemacht, welche ohne Verknüpfung mit einem GitHub-Benutzerkonto schnell aufgebraucht werden können. Wird das Konto des persönlichen Bereichs mit [GitHub verbunden](https://www.symcon.de/./#Mit_GitHub_verbinden) wird dieses Limit erheblich erhöht. Falls dem eigenen Konto Zugriff auf andere Konten gewährt wurde, können durch die Auswahl "Konto" die Einreichungen dieser Konten geprüft und bearbeitet werden. ### Modul hinzufügen Nach einem Klick auf "Modul hinzufügen" erscheint ein Dialog, in welchem eine Bundle ID und ein initialer Kanal ausgewählt wird. ![Modul hinzufügen](https://www.symcon.de/media/pages/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/store/einreichen/73ee0da9bf-1790424938/store-submit-new-bundle.png) Die Bundle ID ist eine eindeutige ID, welche auch bei neuen Versionen gleich bleibt, und aus Kleinbuchstaben und Punkten besteht. Es wird empfohlen die umgekehrte Domänennotation zu verwenden, z.B. de.symcon.alexa. Der initiale Kanal ist der Kanal für die erste Einreichung. Später können problemlos weitere Kanäle hinzugefügt werden. ### Modul einreichen Unter "Modul bearbeiten" kann man den aktuellen Status nach Kanälen prüfen und die nächste Einreichung vorbereiten. ![Neue Vorlage](https://www.symcon.de/media/pages/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/store/einreichen/d994099f5f-1790424938/store-submit-new-template.png) Unter GIT-URL wird die Adresse des Git Repository eingetragen, unter welcher die aktuelle Bibliothek zu finden ist. Um private Repositories zu verwenden, muss das Konto des persönlichen Bereichs mit einem [GitHub-Benutzerkonto verbunden](https://www.symcon.de/./#Mit_GitHub_verbinden) werden, welches Zugriff auf das private Repository hat. > **Hinweis:** Aktuell werden private Repositories nur bei GitHub unterstützt. Nach der URL wird der Commit ausgewählt, welcher veröffentlicht werden soll. Hierzu kann man auf das Zahnrad in der Zeile "GIT-Commit" klicken, den gewünschten Commit anklicken und per "Auswählen" bestätigen. Der Dialog bietet die Commits nach Branches aufgeteilt an. Wird der gewünschte Commit nicht angezeigt, können per "Mehr laden" mehr Commits eines Branches geladen werden. Alternativ kann die ID des Commits auch manuell eingegeben werden. Ist das Repository nicht bei GitHub ist der Dialog eingeschränkt und es kann lediglich ein Branch ausgewählt werden. Es wird automatisch der neueste Commit auf diesem Branch ausgewählt. ![Commit auswählen](https://www.symcon.de/media/pages/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/store/einreichen/38d16fa31d-1790424938/store-submit-select-commit.png) Eine Lokalisierung stellt Namen und Beschreibungen des Moduls in einer Sprache bereit. Es können mehrere Lokalisierungen für mehrere Sprachen hinzugefügt werden, mindestens eine ist allerdings erforderlich. Das Modul muss in allen lokalisierten Sprachen nutzbar sein. Wurde ein Modul einmal mit einer Lokalisierung veröffentlicht, so muss diese Sprache auch in zukünftigen Veröffentlichungen angeboten werden. Durch einen Klick auf "Lokalisierung hinzufügen" öffnet sich ein Dialog in welchem die Sprache der neuen Lokalisierung ausgewählt werden kann. ![Sprache auswählen](https://www.symcon.de/media/pages/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/store/einreichen/77bbadafd8-1790424938/store-submit-select-language.png) Nachdem die Auswahl mit "OK" bestätigt wurde, erscheint eine neue leere Lokalisierung der ausgewählten Sprache. Mit einem Klick auf den Pfeil rechts kann eine Lokalisierung ausgeklappt werden. ![Neue Lokalisierung](https://www.symcon.de/media/pages/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/store/einreichen/e85b68991f-1790424938/store-submit-new-localization.png) Folgende Felder müssen für eine Lokalisierung ausgefüllt werden: | Feld | Beschreibung | | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | | Name | Der angezeigte Name des Moduls | | Beschreibung | Eine Beschreibung des Moduls | | Versionsinformation | Informationen was zu dieser Version neu ist | | Link zur Dokumentation | Ein Link zur Erklärung des Moduls. Dies kann beispielsweise eine Readme im Repository oder auch ein erklärender Beitrag im Forum sein | Durch einen Klick auf das X neben der Sprache kann eine Lokalisierung wieder entfernt werden. Abschließend werden passende Kategorien für die Einreichung ausgewählt. Über "Kategorie hinzufügen" erscheint ein Dialog in welchem eine neue Kategorie ausgewählt werden kann und mit "Auswählen" bestätigt wird. ![Kategorie auswählen](https://www.symcon.de/media/pages/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/store/einreichen/0f29b5118a-1790424938/store-submit-category-selection.png) Kategorien können durch einen Klick auf das dazugehörige X wieder entfernt werden. Für eine Einreichung ist mindestens eine Kategorie erforderlich, es dürfen aber auch mehr Kategorien sein. Unter "Einreichung" können noch weitere Einstellungen vorgenommen werden. | Einstellung | Beschreibung | | ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Aktualisierung beinhaltet keine funktionalen Änderungen | Diese Einstellung kann aktiviert werden, wenn die aktuelle Einreichung keine für Benutzer relevanten programmatischen Änderungen beinhaltet und beispielsweise nur der Stil aktualisiert wurde. Die neue Version wird Benutzern nicht angeboten. Dies kann sinnvoll sein um nicht-funktionale Änderungen einzureichen, damit das Modul wieder auf aktuellem Stand erkannt wird | | Schließe Beta- und Testing-Kanal nach erfolgreichem Review | Ist diese Einstellung aktiviert, werden nach erfolgreicher Veröffentlichung alle niedrigeren Kanäle geschlossen. Geschlossene Kanäle sind nicht mehr im Module Store verfügbar. Benutzer, die nun auf einem geschlossenen Kanal sind, werden für Aktualisierungen auf den nächsthöheren verfügbaren Kanal verwiesen. Existieren aktuell keine Veröffentlichung auf einem niedrigeren Branch, wird diese Einstellung nicht angezeigt | Abschließend bietet die aktuelle Vorlage drei Buttons. Durch "Verwerfen" wird die Vorlage wieder gelöscht. Existiert von dem Modul nur die Vorlage, so wird damit das gesamte Bundle gelöscht. "Speichern" speichert den aktuellen Zustand der Vorlage. Hierfür müssen nicht alle Elemente ausgefüllt sein. Ein Modul ohne Lokalisierungen und Kategorien kann also gespeichert werden, aber nicht eingereicht. Per "Einreichen" reicht man das Modul zur Bereitstellung im Module Store ein. Auf den Kanälen Testing und Beta wird das Modul direkt im Module Store angeboten. Bei einer Einreichung auf Stable durchläuft das Modul vor der Veröffentlichung einen Reviewprozess durch das Symcon-Team. Wird das Modul angenommen, wird es im Module Store veröffentlicht. Wird es abgelehnt, wird man im Entwicklerbereich und per E-Mail benachrichtigt, warum es zur Ablehnung kam. ### Review Bei dem Review eines Moduls wird auf verschiedene Punkte auf Basis unser [Best Practices](https://gist.github.com/paresy/236bfbfcb26e6936eaae919b3cfdfc4f) geprüft. Dies sind inbesondere folgende Punkte: 1. Greift das Modul auf lokale Dateien zu und könnte diese auslesen und manipulieren? * Es ist in Ausnahmefällen genehmigt auf lokale Dateien zuzugreifen, insbesondere innerhalb des IP-Symcon-Ordners. Hier erfolgt allerdings eine genauere Prüfung um Missbrauch zu verhindern. 2. Ist für jede Lokalisierung des Modules auch eine entsprechende Übersetzung vorhanden? 3. Lassen sich die Instanzen des Moduls fehlerfrei erstellen, auch wenn möglicherweise nicht alle Anforderungen erfüllt sind? * Ein Modul muss unter allen Umständen als Instanz erstellbar sein. Das Modul muss also selbstständig prüfen ob die Anforderungen erfüllt sind. Sind die Anforderungen nicht erfüllt, so soll dies geeignet in der Instanzkonfiguration dargestellt werden. 4. Läuft eine eventuelle Kommunikation über Splitter/IO wie vorgesehen über den Datenfluss via [SendDataToChildren](sdk-php/module.md)/[SendDataToParent](sdk-php/module.md)/[ReceiveData](sdk-php/module.md)/[ForwardData](sdk-php/module.md)? 5. Greift ein Modul nur auf eigene oder ihm zugewiesene Objekte zu? * Eigene Objekte liegen unterhalb der Instanz. * Per SelectVariable und ähnlichen Elementen können einem Modul weitere Objekte zugewiesen werden, welche im erwarteten Rahmen verwendet werden dürfen. * Externe Objekte, welche dem Modul nicht zugewiesen wurden, dürfen nicht manipuliert werden. 6. Neue Objekte dürfen außerhalb der Instanz nur erstellt werden, wenn dies explizit vom Benutzer bestätigt wurde. Ein konformes Beispiel hierfür ist die Verwendung des Konfigurationselements "Configurator". * Dies verbietet auch die Erstellung von Ereignissen um interne Funktionen zu schalten. Hierfür sind [RegisterTimer](sdk-php/module.md) bzw. [MessageSink](sdk-php/module.md) und die dazugehörigen Funktionen zu verwenden. 7. Abweichungen sind mit Absprache möglich. Dies sollte bei Einreichung allerdings an geeigneter Stelle erörtert werden, beispielsweise per E-Mail oder als Kommentar an der betroffenen Stelle im Code. 8. Codequalität oder Fehlerfreiheit wird im Rahmen des Reviews nicht überprüft. 9. "IPSymcon", "IPS" oder vergleichbares darf nicht Teil eines in einer Lokalisierung gewählten Namens sein. 10. Module, die als Bedingung mehr als die aktuelle Stable-Version erfordern, also beispielsweise nur mit der aktuellen Beta funktionieren, dürfen nicht auf dem Stable-Kanal eingereicht werden. 11. Einige Objekteigenschaften befinden sich auch bei moduleigenen Objekten in der Hoheit des Benutzers. Diese dürfen initial vorgegeben werden, aber ohne explizite Bestätigung des Benutzers nicht weiter manipuliert werden. Diese Eigenschaften sind: * Der Name * Alle visuellen Einstellungen: Objekt anzeigen, Objekt aktiv und Icon * Die Beschreibung * Die Position * Alle ereignisspezifischen Eigenschaften * Benutzerdefiniertes Profil, benutzerdefinierte Aktion und Logging von Variablen dürfen nie ohne explizite Bestätigung gesetzt werden, auch nicht initial! Aktion oder Profil können selbstverständlich über Standardaktion bzw. -profil definiert werden. 12. PHP-Dateien dürfen nicht den kurzen PHP-Tag (<?) verwenden und sollten stattdessen den langen PHP-Tag (<?php) verwenden. 13. Nach der initialen Erstellung einer Instanz liegt die Hoheit über die Eigenschaften beim Benutzer. * Wenn das Modul hier etwas ändern möchte, so können andere Werte über die Dynamikfunktion [UpdateFormField](sdk-php/module.md) vorgegeben werden und dann vom Benutzer bestätigt werden. * Somit sollten die Funktionen [IPS_SetProperty](../../functions/management-instances.md) und [IPS_ApplyChanges](../../functions/management-instances.md) nie verwendet werden. * Wird bei einer [List](sdk-php/configuration-forms.md) oder einem [Tree](sdk-php/configuration-forms.md) der Parameter loadValuesFromConfiguration auf false gesetzt, so muss die Eigenschaft dennoch beim Laden im Sinne des Benutzers gefüllt werden. Der Parameter soll es lediglich ermöglichen beispielsweise die Reihenfolge anzupassen oder neue Werte mittig hinzuzufügen. 14. Eine Einreichung benötigt einen sprechenden Namen, eine passende Beschreibung und Versionsinformation sowie eine Dokumentation, welche die Konfiguration und Verwendung des Moduls erklärt. 15. Sind Konfiguratoren mit einem Splitter oder I/O verbunden, so dürfen sie nur Geräte verwalten, welche auch zu diesem Splitter bzw. I/O verbunden sind * Instanzen, welche mit dem gleichen Splitter oder I/O wie der Konfigurator verbunden sind, sollen im Konfigurator aufgelistet werden, egal ob diese physikalisch noch existieren oder nicht * Instanzen, welche mit einem anderen Splitter oder I/O verbunden sind, dürfen nicht in einem Konfigurator mit Splitter oder I/O aufgelistet werden 16. Bietet ein Modul eine Discovery-Instanz an, so muss diese ohne Konfiguration funktionieren 17. Da Logging problemlos via $this->LogMessage realisiert werden kann und diese Nachrichten korrekt mit der sendenden Instanz verknüpft sind, darf IPS_LogMessage nicht mehr zum Logging verwendet werden ### Modul bearbeiten Existiert unter "Modul bearbeiten" auf einem Kanal keine aktuelle Vorlage, so kann durch einen Klick auf "Neue Version vorbereiten" eine neue Vorlage erstellt werden. Im Dialog kann ausgewählt werden, ob man eine komplett neue Vorlage erstellt oder eine aktuelle Veröffentlichung als Vorlage verwenden möchte. ![Neue Vorlage erstellen](https://www.symcon.de/media/pages/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/store/einreichen/e84eb470e8-1790424938/store-submit-create-new-template.png) Alternativ ist bei Veröffentlichungen eine Option diese auf einen höheren Kanal zu ziehen vorhanden. Wurde eine Einreichung abgelehnt, so kann diese auch als neue Vorlage verwendet werden um erkannte Mängel auszugleichen ohne alles erneut zu konfigurieren. ![Abgelehnte Einreichung als neue Vorlage](https://www.symcon.de/media/pages/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/store/einreichen/a254c38955-1790424938/store-submit-from-declined.png) Soll ein Modul, das sich aktuell im Review befindet, zurückgezogen werden, so kann dies durch einen Klick auf "Zurückziehen" getan werden. Befindet sich ein Modul im Module Store, so kann es nicht mehr zurückgezogen werden. ### Mit GitHub verbinden Das Konto des persönlichen Bereichs kann mit GitHub verknüpft werden. Dies ermöglicht zum einen die Verwendung von privaten Repositories sowie eine deutlich höhere Menge an Abfragen an die GitHub-API. Diese können insbesondere relevant werden, wenn die veröffentlichten Module auf aktuellen Stand geprüft werden sollen. Die Verknüpfung kann in den [Einstellungen des persönlichen Bereichs](https://account.symcon.de/konto/einstellungen/) durchgeführt werden. Dazu muss im Bereich "(Entwickler) GitHub OAuth Verbindung" auf "Verbinden" geklickt werden. ![Mit GitHub verbinden](https://www.symcon.de/media/pages/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/store/einreichen/ccee2016ae-1790424938/store-github-connect.png) Sofern im Browser aktuell kein GitHub-Benutzer angemeldet ist, geschieht dies im nächsten Schritt. Hierzu müssen E-Mail-Adresse und Passwort des GitHub-Benutzerkontos eingegeben werden. Ist bereits ein Benutzer angemeldet, wird dieser Schritt automatisch übersprungen. ![Bei GitHub anmelden](https://www.symcon.de/media/pages/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/store/einreichen/2df7e0ae9c-1790424938/store-github-login.png) Abschließend muss der Zugriff durch Symcon autorisiert werden. Dies geschieht durch einen Klick auf "Authorize symcon". ![GitHub autorisieren](https://www.symcon.de/media/pages/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/store/einreichen/c277f0e106-1790424938/store-github-authorize.png) Nun ist das Konto des persönlichen Bereichs mit dem GitHub-Benutzerkonto verknüpft. Um die Verbindung im Nachhinein wieder zu lösen, kann dies via Klick auf "Trennen" getan werden. ## Struktur Quelle: https://www.symcon.de/de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/struktur/ ### Beschreibung Die vorausgesetzte Struktur ist für eine richtige Funktionsweise innerhalb von IP-Symcon nötig. Nur wenn die Struktur eingehalten wird, funktioniert das Einbinden über [Module Control](../../modules/module-control.md). * Die "library.json" ist das Kernstück einer jeden Modulentwicklung. * Die "module.php" und "module.json" bilden zusammen das eigentliche Modul. * Für die Einrichtung der Konfigurationsseite kann die form.json genutzt werden. * Für mögliche Übersetzungen dient die locale.json. * Der Modulordnername (hier: Modul1, Modul2) sollte den gleichen Namen haben, wie der Klassenname in der module.php. Ordner, welche keine module.json beinhalten, werden als fehlerhaft markiert. Ausnahme bilden die Ordner: * libs/ (ab Version 4.2) * docs/ (ab Version 4.2) * imgs/ (ab Version 4.2) * tests/ (ab Version 4.4) * actions/ (ab Version 6.0) > **Hinweis:** Punkt-Ordner (z.B. .github, .style) werden ebenfalls ignoriert und sind nicht für die korrekte Funktionsweise des Modul nötig. Diese sind zum Beispiel wichtig, für die korrekte Funktionsweise des Repositories. Diese Ordner werden nicht als Modul eingebunden und bieten die Möglichkeit externe Libraries, Dokumente, Bilder und Tests zur Verfügung zu stellen. ### Verzeichnisstruktur ```php Bibliothek | - Modul1 | | | - module.php | | | - module.json | | | - form.json (optional) | | | - locale.json (optional) | - Modul2 | | | - module.php | | | - module.json | | | - form.json (optional) | | | - locale.json (optional) | - actions (optional) | | | - Definitionen von Aktionen | - libs (optional) | | | - beliebige Libraries | - docs (optional) | | | - beliebige Dokumente | - imgs (optional) | | | - beliebgie Mediendateien | - tests (optional) | | | - beliebige Testdateien | - library.json | - README.txt (optional) ```