Scripting mit p44Script

Diese Seite gibt eine Übersicht über die Programmiersprache p44script, die in den P44-Produkten zur Konfiguration und Erweiterung der Funktionalität zum Einsatz kommt. Es geht dabei vor allem die Konzepte in und um p44script herum.

Für eine detaillierte Beschreibung der Syntax und der Funktionen, die in p44script zur Verfügung stehen, dient gibt es die p44script-Kurzreferenz, welche übrigens auch offline in jedem P44-Gerät verfügbar ist (s. Link rechts unten bei Script-Eingabefeldern).

Wo können p44script-Skripte eingesetzt werden?


Die Programmiersprache p44script ist eine sogenannt "embedded" (eingebettete) Scriptsprache, die an verschiedensten Orten der Umgebung, in der sie eingebettet ist, über Scripts Funktionalität hinzufügen kann. Grundsätzlich ist p44script in beliebige C++-Projekte einbaubar, wenn die p44utils-Bibliothek verwendet wird.

In diesem Abschnitt sollen aber die verschiedenen Orte für die Anwendung von p44script innerhalb eines P44-DSB oder P44-LC-Geräts aufgezeigt werden.

Scriptkontexte

Weil die Scripte an verschiedenen Orten im System laufen können, gibt es auch verschiedene sogenannte Scriptkontexte. Ein Scriptkontext umfasst:

Neben diesen verschiedenen Kontexten gibt es auch noch den globalen Kontext. Dieser beinhaltet alle mit glob definierten globalen Variablen aus allen anderen Kontexten, ebenso alle mit function oder global function definierten Funktionen.

Der Maincontext - das "Hauptprogramm"

Es nur einen einzigen Maincontext pro Anwendung (P44-DSB- oder P44-LC-Gerät).

Im Maincontext laufen die folgenden Scripte:

Das mainscript
Das mainscript wird beim Aufstarten/Neustarten des P44-xx-Geräts (oder nach restartapp()) gestartet, und läuft ab dann parallel mit der sonstigen Funktion des Geräts. Es kann deshalb sowohl dazu verwendet werden, nur kurz beim Start einige Aktionen auszuführen, kann aber auch ein dauernd laufendes "Hauptprogramm" beinhalten.
Auf P44-Geräten ist er in der Weboberfläche unter p44script.html zu finden - d.h. wenn die normale Weboberfläche beispielsweise http://192.168.42.73 lautet, lässt sich das Mainscript unter http://192.168.42.73/p44script.html aufrufen.
Der REPL
der REPL (Read-Execute-Print-Loop) dient zum zeilenweisen Eingeben und Ausprobieren von p44script-Befehlen.
Auf P44-Geräten ist er in der Weboberfläche unter repl.html zu finden - Mehr Informationen dazu siehe hier.

Der Evaluatorcontext - Evaluatoren

Evaluatoren sind Benutzerdefinierte Geräte, die einen oder mehrere Sensor- oder Digitaleingänge überwachen und auswerten ("evaluieren"), und daraus ein Resultat berechnen, welches im Fall von P44-DSB an den digitalSTROM-Server (dSS) weitergeleitet wird. Damit sind Sensor-Auswertungen möglich, welche mit der App "Benutzerdefinierte Zustände" im dSS u.U. nicht oder nur schwierig umzusetzen sind. Ebenso können abgeleitete Sensorwerte mit einem Evaluator gebildet werden - z.B. die Gesamtleistung einer 3-Phasen Strommessung oder der Durchschnitt mehrerer Temperatursensoren.

Im Evaluatorcontext laufen die folgenden Scripte/Auswertungen:

Die Conditions
Das sind die Ausdrücke, die einen Evaluator auslösen (triggern).
Bei Evaluatoren mit Ja/Nein-Ausgangssignal oder bei Action-Evaluatoren gibt es je eine Bedingung fürs Einschalten und fürs Ausschalten. Beide werden im Evaluatorcontext ausgewertet. Es sind aber keine vollständigen Scripte, sondern nur Ausdrücke deren Resultat als true (!=0) oder false (==0) ausgewertet werden. Sie können keine Funktionen enthalten, deren Ausführung u.U. längere Zeit dauert wie delay() oder httprequest().
Bei Sensor-Evaluatoren, deren Ausgang ein Sensorwert ist, gibt es nur einen Ausdruck, dessen Resultat als Ausgangswerts des Sensors verwendet wird.
Die Action
Bei Action-Evaluatoren wird nicht ein Signal- oder Sensorwert beeinflusst, sondern das Actionscript ausgeführt. Dieses läuft auch im Evaluatorkontext, wie die Auslösebedigungen. Es ist deshalb möglich, in einer Auslösebedingung auf eine Variable Bezug zu nehmen, die im Actionscript verändert wird (damit das funktioniert, werden die Auslösebedingungen immer nach dem Ausführen des Actionscript nochmals ausgewertet, damit so eine "Rückkopplung" auch tatsächlich erkannt wird).

Rückkopplungen sind heikel

Obwohl es bei manchen Aufgabenstellungen nützlich sein kann, sind Rückkoppelungen (Actionscript verändert Werte die in der Auslösebedingung vorkommen) heikel - bei (Denk-)fehlern kann es schnell dazu kommen, dass ein Evaluator sich quasi dauernd selber auslöst und so die Performance des Geräts beeinträchtigt.

Der Devicecontext - Scripting in einzelnen Devices

Jedes in einer P44-DSB oder P44-LC in der Geräteliste sichtbare Gerät (=Device) hat einen eigenen Devicecontext. Hier laufen Scripte, die im Wesentlichen dieses eine Gerät und seine Ein- und Ausgänge betreffen, und deshalb auch direkten Zugriff auf diese haben (s. output, sensor(), input() Scriptfunktionen).

Im Devicecontext laufen die folgenden Scripte:

Die Szenenscripte
Szenenscripte sind einer bestimmten Szene in einem bestimmten Device mit Ausgang zugeordnet, und werden immer dann ausgeführt, wenn die entsprechende Szene aufgerufen wird. Szenenskripte ermöglichen Übergangs- und auch dauerhafte Effekte (z.B. ein langsamer fortlaufender Farbwechsel).
Ein Szenenscript läuft im Devicecontext, aber immer nur eines. Wenn ein Szenenscript noch läuft, während schon wieder eine andere Szene aufgerufen wird, wird es abgebrochen - und, wenn vorhanden, das Szenenskript der neu aufgerufenen Szene gestartet.
Szenenscripte können in den Speziellen Szeneneinstellungen via P44-DSB oder P44-LC Webinterface erstellt werden.

Der Implementationskontext eines Scripted Device

Separat vom Devicecontext

Der Implementationskontext eines scripted device ist komplett getrennt vom normalen Devicecontext. Nur Scripted Devices, also kundenspezifische, in p44script programmierte Geräte, haben einen Implementationskontext, und stellt die Ebene dar, die bei anderen Geräten (DALI, EnOcean, hue etc.) bereits fest in der Firmware vorhanden ist. Auf der Ebene darüber, dem Devicecontext, ist es völlig unerheblich, ob das Gerät eine fest eingebaute Implementation oder eine in p44script hat, weshalb die zwei Kontexte auch getrennt bleiben müssen.

Im Implementationskontext laufen die folgenden Scripte:

Das Implementationsscript
Jedes scripted device hat sein eigenes Implementationsscript, das über den Bleistift-Button oder den "Edit Implementation script..."-Button im Info-Dialog des Geräts erreichbar ist.

Der Scriptcontext eines Triggers (nur bei P44-LC-xx)

Im Standalone-Controller P44-LC, also der Version des Produkts das ohne digitalSTROM-Anbindung selbstständig funktioniert, gibt es zusätzlich zu den Devices die Triggers. Diese beinhalten eine Auslösebedingung und ein Aktionsscript, das beim Eintreffen der Bedingung ausgeführt (getriggert) wird. Die Auslösebedingung und das Aktionsscript laufen in einem eigenen, privaten Kontext des Triggers, dem Triggerkontext.

Text in Bearbeitung

Dieser Text ist noch in Arbeit, mehr Informationen folgen demnächst.