SlideShare una empresa de Scribd logo
1 de 28
„Auto off“ Script – Code Explained
  Zürich, 27.01.2011, Sergey Bostandzhyan
„Auto off“ Script – Code Explained


Übersicht


●   Zielsetzung
●   Verfügbare Schnittstellen / API
●   Aufbau
●   Code
„Auto off“ Script – Code Explained


Zielsetzung

Automatisches Abschalten von Licht in
einem Raum nach „X“ Minuten.

●   nur für Szene 1
●   Raum konfigurierbar
●   Timeout konfigurierbar

Beispiel: Treppenhausbeleuchtung
„Auto off“ Script – Code Explained


Verfügbare Schnittstellen / API


●   digitalSTROM Server JSON API über HTTPS
●   digitalSTROM Server JS Scripting API

        JS Scripting API                         JSON API


     SpiderMonkey JS Engine                      Webserver


                           digitalSTROM Server
„Auto off“ Script – Code Explained


Verfügbare Schnittstellen - JSON API
JSON API Dokumentation:
http://developer.digitalstrom.org/download/dss/0.9/doc/dss-0.9.0/


●   Informationen über Räume und Geräte
●   Konfiguration
●   Steuerung
●   Events auslösen
●   Zugang zum Property Tree
●   ...
„Auto off“ Script – Code explained


Verfügbare Schnittstellen - JSON API
JSON API Dokumentation:
http://developer.digitalstrom.org/download/dss/0.9/doc/dss-0.9.0/


●   Informationen über Räume und Geräte
●   Konfiguration
●   Steuerung
●   Events auslösen
●   Zugang zum Property Tree
●   ...
„Auto off“ Script – Code Explained


Verfügbare Schnittstellen – JS Scripting
JS Scripting Dokumentation:
http://developer.digitalstrom.org/redmine/projects/dss/wiki/Scripting_inside_the_dSS



●   Informationen über Räume und Geräte
●   Steuerung
●   Events auslösen
●   auf Events reagieren
●   Zugang zum Property Tree
●   TCP Socket Zugriff
●   ...
„Auto off“ Script – Code Explained


Verfügbare Schnittstellen – JS Scripting
JS Scripting Dokumentation:
http://developer.digitalstrom.org/redmine/projects/dss/wiki/Scripting_inside_the_dSS



●   Informationen über Räume und Geräte
●   Steuerung
●   Events auslösen
●   auf Events reagieren
●   Zugang zum Property Tree
●   TCP Socket Zugriff
●   ...
„Auto off“ Script – Code Explained


Aufbau




      JS Scripting API                         JSON API


Events empfangen                                Events auslösen


                            Property Tree


                         digitalSTROM Server
„Auto off“ Script – Code Explained


Aufbau – Web Interface
„Auto off“ Script – Code Explained


Aufbau – Web Interface




Räume auflisten
                     Timeout konfigurieren
      Konfiguration anzeigen
„Auto off“ Script – Code Explained


Aufbau – Web Interface
Räume auflisten
Request an den dSS:
/json/property/query?
query=/apartment/zones/*(ZoneID,name
)/devices/*(present)

Antwort:
{"ok":true,"result":{"zones":[
{"ZoneID":4,"name":"Treppenhaus","devices":
[{"present":true}]}]}}
„Auto off“ Script – Code Explained


Aufbau – Web Interface
Konfiguration anzeigen
Request an den dSS:
/json/property/query?query=/scripts/auto-
off/*(ZoneID,offDelay)

Antwort:
{"ok":true,"result":
{"auto-off":
[{"ZoneID":4,"offDelay":1}]}}
„Auto off“ Script – Code Explained


Aufbau – Web Interface
Timeout Konfigurieren
Request an den dSS:
/json/event/raise?name=auto-off_set&parameter=ZoneID
%3D4%3BoffDelay%3D1

Parameter dekodiert: ZoneID=4;offDelay=1

Event wird ausgelöst und von unserem
JS Script im dSS empfangen.
„Auto off“ Script – Code Explained


Aufbau – dSS JS Script
Hört auf Events und kümmert sich um:

●   Laden der Konfiguration

●   Speichern der Konfiguration

●   Reagieren auf Szenenaufrufe

●   Auto off
„Auto off“ Script – Code Explained


Aufbau – dSS JS Script
„Main“
var l = new Logger("auto-off");

if (raisedEvent.name === 'running')
{
    Property.load();
}
else if (raisedEvent.name === 'auto-off_set')
{
    setTrigger(raisedEvent.parameter);
}
else if (raisedEvent.name === 'callScene')
{
    processSceneCall(raisedEvent.parameter);
}
„Auto off“ Script – Code Explained


Aufbau – dSS JS Script
Konfiguration speichern
function setTrigger(parameters)
{
    var zoneID = parseInt(parameters.ZoneID, 10);
    var offDelay = parseInt(parameters.offDelay, 10);

    l.logln("Setting trigger: " + zoneID + " delay: " + offDelay);

    Property.setProperty(zoneID + '/' + 'ZoneID', zoneID);
    Property.setFlag(zoneID + '/' + 'ZoneID', 'ARCHIVE', true);
    Property.setProperty(zoneID + '/' + 'offDelay', offDelay);
    Property.setFlag(zoneID + '/' + 'offDelay', 'ARCHIVE', true);
    Property.setFlag(zoneID.toString(), 'ARCHIVE', true);
    Property.store();
}
„Auto off“ Script – Code Explained


Aufbau – dSS JS Script
Konfiguration speichern
function setTrigger(parameters)
{
    ...




}
„Auto off“ Script – Code Explained


Aufbau – dSS JS Script
Reagieren auf Szenenaufrufe
function processSceneCall(parameters)
{
    var sceneID = raisedEvent.parameter.sceneID;
    var zoneID = raisedEvent.source.zoneID;
    l.logln("Processing call scene event for zone " + zoneID +
            " scene " + sceneID);

   // ignore scenes that we do not care about
   if (sceneID != Scene.User1)
   {
       l.logln("Ignoring scene " + sceneID);
       return;
   }

   ...
„Auto off“ Script – Code Explained


Aufbau – dSS JS Script
Reagieren auf Szenenaufrufe
function processSceneCall(parameters)
{
    ...

   // check if auto-off is configured for this zone
   var zoneNode = Property.getNode(zoneID);
   if (zoneNode === null)
   {
       l.logln("Nothing configured, returning");
       return;
   }

   ...
„Auto off“ Script – Code Explained


Aufbau – dSS JS Script
Reagieren auf Szenenaufrufe
function processSceneCall(parameters)
{
    ...

   // get delay setting
   var offDelay = delayNode.getValue();

   // an off delay of zero means - auto off is disabled
   if (offDelay < 1)
   {
       l.logln("Auto-off for zone " + zoneID + " is disabled");
       return;
   }

   ...
„Auto off“ Script – Code Explained


Aufbau – dSS JS Script
Reagieren auf Szenenaufrufe
function processSceneCall(parameters)
{
    ...

   // our delay is in minutes, timeout parameter has to be in ms
   setTimeout(offDelay * 60 * 1000,
              function() { executeTrigger(zoneID); });

} // processSceneCall
„Auto off“ Script – Code Explained


Aufbau – dSS JS Script
Auto off
function executeTrigger(zoneID)
{
    l.logln("Executing tigger for zone " + zoneID);

   // our idea is to turn off the light only if scene 1 was
   // called, if the user switches to a different scene we will
   // not turn off anything
   var lastCalledScene =
       Property.getProperty('/apartment/zones/zone' + zoneID +
                            '/groups/group1/lastCalledScene');


       ...
„Auto off“ Script – Code Explained


Aufbau – dSS JS Script
Auto off
function executeTrigger(zoneID)
{
    ...
    // only take action if we are still in scene 1
    if (lastCalledScene == Scene.User1)
    {
        // select all light devices from the desired zone
        // by creating a set, then call scene 0 (off)
        var set = getDevices().byZone(zoneID).byGroup('yellow');
        set.callScene(Scene.Off);
    }
} // executeTrigger
„Auto off“ Script – Code Explained


Aufbau – dSS JS Script
dSS Konfiguration

<?xml version="1.0"?>
<subscriptions version="1">
  <subscription event-name="running" handler-name="javascript">
    <parameter>
      <parameter name="filename1">/path/to/auto-off.js</parameter>
      <parameter name="script_id">auto-off</parameter>
    </parameter>
  </subscription>

 ...
„Auto off“ Script – Code Explained


Aufbau – dSS JS Script
dSS Konfiguration
   ...
  <subscription event-name="auto-off_set" handler-
name="javascript">
    <parameter>
      <parameter name="filename1">/path/to/auto-off.js</parameter>
      <parameter name="script_id">auto-off</parameter>
    </parameter>
  </subscription>
  <subscription event-name="callScene" handler-name="javascript">
    <parameter>
      <parameter name="filename1">/path/to/auto-off.js</parameter>
      <parameter name="script_id">auto-off</parameter>
    </parameter>
  </subscription>
</subscriptions>
„Auto off“ Script – Code Explained


Zusammenfassung
Script:
● reagiert auf Events

● lädt und speichert die Konfiguration

● schaltet das Licht aus




Web UI:
● fragt den dSS nach verfügbaren Räumen

● fragt die Konfiguration ab

● setzt den Auto off Timeout pro Raum
Fragen?
http://developer.digitalstrom.org/

Más contenido relacionado

La actualidad más candente

Cloud Provisioning mit Juju
Cloud Provisioning mit JujuCloud Provisioning mit Juju
Cloud Provisioning mit JujuFrank Müller
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenMayflower GmbH
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeFrank Müller
 
Spaß an der Nebenläufigkeit
Spaß an der NebenläufigkeitSpaß an der Nebenläufigkeit
Spaß an der NebenläufigkeitFrank Müller
 
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...NETWAYS
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17remigius-stalder
 
SNMP Applied - Sicheres Monitoring mit SNMP
SNMP Applied - Sicheres Monitoring mit SNMPSNMP Applied - Sicheres Monitoring mit SNMP
SNMP Applied - Sicheres Monitoring mit SNMPGerrit Beine
 
Sicheres Anwendungs-Monitoring mit SNMP
Sicheres Anwendungs-Monitoring mit SNMPSicheres Anwendungs-Monitoring mit SNMP
Sicheres Anwendungs-Monitoring mit SNMPGerrit Beine
 
PowerShell Sicherheit in 6 Schritten produktiv absichern
PowerShell Sicherheit in 6 Schritten produktiv absichernPowerShell Sicherheit in 6 Schritten produktiv absichern
PowerShell Sicherheit in 6 Schritten produktiv absichernAttila Krick
 
Powerful mostly unknown Javascript-Features
Powerful mostly unknown Javascript-FeaturesPowerful mostly unknown Javascript-Features
Powerful mostly unknown Javascript-FeaturesSascha Hameister
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsQAware GmbH
 
Introduction to BlazeDS
Introduction to BlazeDSIntroduction to BlazeDS
Introduction to BlazeDSawerft
 
OSGi Release 4.2 - Was ist neu?
OSGi Release 4.2 - Was ist neu?OSGi Release 4.2 - Was ist neu?
OSGi Release 4.2 - Was ist neu?Roman Roelofsen
 
Socket Programmierung mit IPv6
Socket Programmierung mit IPv6Socket Programmierung mit IPv6
Socket Programmierung mit IPv6Christian Kauhaus
 

La actualidad más candente (20)

JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 
Cloud Provisioning mit Juju
Cloud Provisioning mit JujuCloud Provisioning mit Juju
Cloud Provisioning mit Juju
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js Grundlagen
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
 
Spaß an der Nebenläufigkeit
Spaß an der NebenläufigkeitSpaß an der Nebenläufigkeit
Spaß an der Nebenläufigkeit
 
Testing tools
Testing toolsTesting tools
Testing tools
 
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17
 
SNMP Applied - Sicheres Monitoring mit SNMP
SNMP Applied - Sicheres Monitoring mit SNMPSNMP Applied - Sicheres Monitoring mit SNMP
SNMP Applied - Sicheres Monitoring mit SNMP
 
Sicheres Anwendungs-Monitoring mit SNMP
Sicheres Anwendungs-Monitoring mit SNMPSicheres Anwendungs-Monitoring mit SNMP
Sicheres Anwendungs-Monitoring mit SNMP
 
PowerShell Sicherheit in 6 Schritten produktiv absichern
PowerShell Sicherheit in 6 Schritten produktiv absichernPowerShell Sicherheit in 6 Schritten produktiv absichern
PowerShell Sicherheit in 6 Schritten produktiv absichern
 
Ldap sqlnet
Ldap sqlnetLdap sqlnet
Ldap sqlnet
 
Powerful mostly unknown Javascript-Features
Powerful mostly unknown Javascript-FeaturesPowerful mostly unknown Javascript-Features
Powerful mostly unknown Javascript-Features
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Introduction to BlazeDS
Introduction to BlazeDSIntroduction to BlazeDS
Introduction to BlazeDS
 
Einführung in Docker
Einführung in DockerEinführung in Docker
Einführung in Docker
 
01 sqlplus
01 sqlplus01 sqlplus
01 sqlplus
 
OSGi Release 4.2 - Was ist neu?
OSGi Release 4.2 - Was ist neu?OSGi Release 4.2 - Was ist neu?
OSGi Release 4.2 - Was ist neu?
 
P6oo
P6ooP6oo
P6oo
 
Socket Programmierung mit IPv6
Socket Programmierung mit IPv6Socket Programmierung mit IPv6
Socket Programmierung mit IPv6
 

Destacado

Necto 16 training 7 geo-analytics
Necto 16 training 7   geo-analyticsNecto 16 training 7   geo-analytics
Necto 16 training 7 geo-analyticsPanorama Software
 
Predictive Analytics in Practice
Predictive Analytics in PracticePredictive Analytics in Practice
Predictive Analytics in PracticeHobsons
 
Necto 16 training 2 - creating a workboard
Necto 16 training 2 -  creating a workboardNecto 16 training 2 -  creating a workboard
Necto 16 training 2 - creating a workboardPanorama Software
 
15 - Panorama Necto 14 formulas, exceptions - visualization & data discovery...
15  - Panorama Necto 14 formulas, exceptions - visualization & data discovery...15  - Panorama Necto 14 formulas, exceptions - visualization & data discovery...
15 - Panorama Necto 14 formulas, exceptions - visualization & data discovery...Panorama Software
 
Deep Dive on Vox's User Engagement - User Engagement Teardown
Deep Dive on Vox's User Engagement - User Engagement TeardownDeep Dive on Vox's User Engagement - User Engagement Teardown
Deep Dive on Vox's User Engagement - User Engagement TeardownIterable
 
4G LTE Network – an update from Huawei
4G LTE Network – an update from Huawei4G LTE Network – an update from Huawei
4G LTE Network – an update from HuaweiGen-i
 
Metaprogramas
MetaprogramasMetaprogramas
Metaprogramasmexicopnl
 

Destacado (14)

LINKEDIN CONTENT MARKETING Source: LinkedIn
LINKEDIN CONTENT MARKETING Source: LinkedInLINKEDIN CONTENT MARKETING Source: LinkedIn
LINKEDIN CONTENT MARKETING Source: LinkedIn
 
Necto 16 training 7 geo-analytics
Necto 16 training 7   geo-analyticsNecto 16 training 7   geo-analytics
Necto 16 training 7 geo-analytics
 
Predictive Analytics in Practice
Predictive Analytics in PracticePredictive Analytics in Practice
Predictive Analytics in Practice
 
ConstructiveControlRobotsAbridged
ConstructiveControlRobotsAbridgedConstructiveControlRobotsAbridged
ConstructiveControlRobotsAbridged
 
Necto 16 training 2 - creating a workboard
Necto 16 training 2 -  creating a workboardNecto 16 training 2 -  creating a workboard
Necto 16 training 2 - creating a workboard
 
Pnl
PnlPnl
Pnl
 
Cuento3
Cuento3Cuento3
Cuento3
 
15 - Panorama Necto 14 formulas, exceptions - visualization & data discovery...
15  - Panorama Necto 14 formulas, exceptions - visualization & data discovery...15  - Panorama Necto 14 formulas, exceptions - visualization & data discovery...
15 - Panorama Necto 14 formulas, exceptions - visualization & data discovery...
 
Deep Dive on Vox's User Engagement - User Engagement Teardown
Deep Dive on Vox's User Engagement - User Engagement TeardownDeep Dive on Vox's User Engagement - User Engagement Teardown
Deep Dive on Vox's User Engagement - User Engagement Teardown
 
Stress management.
Stress management.Stress management.
Stress management.
 
Google Protocol Buffers
Google Protocol BuffersGoogle Protocol Buffers
Google Protocol Buffers
 
4G LTE Network – an update from Huawei
4G LTE Network – an update from Huawei4G LTE Network – an update from Huawei
4G LTE Network – an update from Huawei
 
Metaprogramas
MetaprogramasMetaprogramas
Metaprogramas
 
Gaur city
Gaur cityGaur city
Gaur city
 

Similar a digitalSTROM Developer Day 2011: digitalSTROM-Server-Apps

DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?Marc Müller
 
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Marc Müller
 
JPA the Versant Way
JPA the Versant WayJPA the Versant Way
JPA the Versant Wayjubecker
 
Dojo Und Notes
Dojo Und NotesDojo Und Notes
Dojo Und Notesdominion
 
Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Dirk Ginader
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenAndré Goliath
 
System Center Configuration Manager with Azure, Intune and Application Manage...
System Center Configuration Manager with Azure, Intune and Application Manage...System Center Configuration Manager with Azure, Intune and Application Manage...
System Center Configuration Manager with Azure, Intune and Application Manage...Digicomp Academy AG
 
Open icf (open identity connector framework) @ forgerock deutsch
Open icf (open identity connector framework) @ forgerock   deutschOpen icf (open identity connector framework) @ forgerock   deutsch
Open icf (open identity connector framework) @ forgerock deutschHanns Nolan
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit RustJens Siebert
 
Symfony live 2013 presentation
Symfony live 2013 presentationSymfony live 2013 presentation
Symfony live 2013 presentationKifah Abbad
 
Lightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPALightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPAmh0708
 
XML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashXML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashStephan Schmidt
 
Von 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im WebVon 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im WebSebastian Springer
 
Connecting Android - Externe Hardware mit dem grünen Roboter verbinden
Connecting Android - Externe Hardware mit dem grünen Roboter verbindenConnecting Android - Externe Hardware mit dem grünen Roboter verbinden
Connecting Android - Externe Hardware mit dem grünen Roboter verbindeninovex GmbH
 
Connecting Android - Externe Hardware mit dem grünen Roboter verbinden
Connecting Android - Externe Hardware mit dem grünen Roboter verbindenConnecting Android - Externe Hardware mit dem grünen Roboter verbinden
Connecting Android - Externe Hardware mit dem grünen Roboter verbindeninovex GmbH
 
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScriptManfred Steyer
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsJosef Adersberger
 
The pain of choice - Important libs for C# developers
The pain of choice - Important libs for C# developersThe pain of choice - Important libs for C# developers
The pain of choice - Important libs for C# developersFDeitelhoff
 

Similar a digitalSTROM Developer Day 2011: digitalSTROM-Server-Apps (20)

DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
 
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
 
JPA the Versant Way
JPA the Versant WayJPA the Versant Way
JPA the Versant Way
 
Dojo Und Notes
Dojo Und NotesDojo Und Notes
Dojo Und Notes
 
Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 Wochen
 
System Center Configuration Manager with Azure, Intune and Application Manage...
System Center Configuration Manager with Azure, Intune and Application Manage...System Center Configuration Manager with Azure, Intune and Application Manage...
System Center Configuration Manager with Azure, Intune and Application Manage...
 
Open icf (open identity connector framework) @ forgerock deutsch
Open icf (open identity connector framework) @ forgerock   deutschOpen icf (open identity connector framework) @ forgerock   deutsch
Open icf (open identity connector framework) @ forgerock deutsch
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit Rust
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Symfony live 2013 presentation
Symfony live 2013 presentationSymfony live 2013 presentation
Symfony live 2013 presentation
 
Lightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPALightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPA
 
XML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashXML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit Flash
 
Von 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im WebVon 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im Web
 
Connecting Android - Externe Hardware mit dem grünen Roboter verbinden
Connecting Android - Externe Hardware mit dem grünen Roboter verbindenConnecting Android - Externe Hardware mit dem grünen Roboter verbinden
Connecting Android - Externe Hardware mit dem grünen Roboter verbinden
 
Connecting Android - Externe Hardware mit dem grünen Roboter verbinden
Connecting Android - Externe Hardware mit dem grünen Roboter verbindenConnecting Android - Externe Hardware mit dem grünen Roboter verbinden
Connecting Android - Externe Hardware mit dem grünen Roboter verbinden
 
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Renderscript in Android 3.x
Renderscript in Android 3.xRenderscript in Android 3.x
Renderscript in Android 3.x
 
The pain of choice - Important libs for C# developers
The pain of choice - Important libs for C# developersThe pain of choice - Important libs for C# developers
The pain of choice - Important libs for C# developers
 

Más de digitalSTROM.org

digitalSTROM Developer Day 2011: Wie digitalSTROM auf das iPhone kommt II
digitalSTROM Developer Day 2011: Wie digitalSTROM auf das iPhone kommt IIdigitalSTROM Developer Day 2011: Wie digitalSTROM auf das iPhone kommt II
digitalSTROM Developer Day 2011: Wie digitalSTROM auf das iPhone kommt IIdigitalSTROM.org
 
digitalSTROM Developer Day 2011: Wie digitalSTROM auf das iPhone kommt I
digitalSTROM Developer Day 2011: Wie digitalSTROM auf das iPhone kommt IdigitalSTROM Developer Day 2011: Wie digitalSTROM auf das iPhone kommt I
digitalSTROM Developer Day 2011: Wie digitalSTROM auf das iPhone kommt IdigitalSTROM.org
 
digitalSTROM Developer Day 2011: digitalSTROM-Server-Apps
digitalSTROM Developer Day 2011: digitalSTROM-Server-AppsdigitalSTROM Developer Day 2011: digitalSTROM-Server-Apps
digitalSTROM Developer Day 2011: digitalSTROM-Server-AppsdigitalSTROM.org
 
digitalSTROM Developer Day 2011: Wie Heimelektronik und digitalSTROM zusammen...
digitalSTROM Developer Day 2011: Wie Heimelektronik und digitalSTROM zusammen...digitalSTROM Developer Day 2011: Wie Heimelektronik und digitalSTROM zusammen...
digitalSTROM Developer Day 2011: Wie Heimelektronik und digitalSTROM zusammen...digitalSTROM.org
 
digitalSTROM Developer Day 2011: Jump Start in die digitalSTROM-Server Entwic...
digitalSTROM Developer Day 2011: Jump Start in die digitalSTROM-Server Entwic...digitalSTROM Developer Day 2011: Jump Start in die digitalSTROM-Server Entwic...
digitalSTROM Developer Day 2011: Jump Start in die digitalSTROM-Server Entwic...digitalSTROM.org
 
digitalSTROM Developer Day 2011: Neue Möglichkeiten mit dem digitalSTROM-Server
digitalSTROM Developer Day 2011: Neue Möglichkeiten mit dem digitalSTROM-ServerdigitalSTROM Developer Day 2011: Neue Möglichkeiten mit dem digitalSTROM-Server
digitalSTROM Developer Day 2011: Neue Möglichkeiten mit dem digitalSTROM-ServerdigitalSTROM.org
 
digitalSTROM Developer Day 2011: Referat Ludger Hovestadt
digitalSTROM Developer Day 2011: Referat Ludger HovestadtdigitalSTROM Developer Day 2011: Referat Ludger Hovestadt
digitalSTROM Developer Day 2011: Referat Ludger HovestadtdigitalSTROM.org
 
digitalSTROM Interaction Design Concepts
digitalSTROM Interaction Design ConceptsdigitalSTROM Interaction Design Concepts
digitalSTROM Interaction Design ConceptsdigitalSTROM.org
 
digitalSTROM Server Development
digitalSTROM Server DevelopmentdigitalSTROM Server Development
digitalSTROM Server DevelopmentdigitalSTROM.org
 
Contributing to dSS development
Contributing to dSS developmentContributing to dSS development
Contributing to dSS developmentdigitalSTROM.org
 

Más de digitalSTROM.org (12)

digitalSTROM Developer Day 2011: Wie digitalSTROM auf das iPhone kommt II
digitalSTROM Developer Day 2011: Wie digitalSTROM auf das iPhone kommt IIdigitalSTROM Developer Day 2011: Wie digitalSTROM auf das iPhone kommt II
digitalSTROM Developer Day 2011: Wie digitalSTROM auf das iPhone kommt II
 
digitalSTROM Developer Day 2011: Wie digitalSTROM auf das iPhone kommt I
digitalSTROM Developer Day 2011: Wie digitalSTROM auf das iPhone kommt IdigitalSTROM Developer Day 2011: Wie digitalSTROM auf das iPhone kommt I
digitalSTROM Developer Day 2011: Wie digitalSTROM auf das iPhone kommt I
 
digitalSTROM Developer Day 2011: digitalSTROM-Server-Apps
digitalSTROM Developer Day 2011: digitalSTROM-Server-AppsdigitalSTROM Developer Day 2011: digitalSTROM-Server-Apps
digitalSTROM Developer Day 2011: digitalSTROM-Server-Apps
 
digitalSTROM Developer Day 2011: Wie Heimelektronik und digitalSTROM zusammen...
digitalSTROM Developer Day 2011: Wie Heimelektronik und digitalSTROM zusammen...digitalSTROM Developer Day 2011: Wie Heimelektronik und digitalSTROM zusammen...
digitalSTROM Developer Day 2011: Wie Heimelektronik und digitalSTROM zusammen...
 
digitalSTROM Developer Day 2011: Jump Start in die digitalSTROM-Server Entwic...
digitalSTROM Developer Day 2011: Jump Start in die digitalSTROM-Server Entwic...digitalSTROM Developer Day 2011: Jump Start in die digitalSTROM-Server Entwic...
digitalSTROM Developer Day 2011: Jump Start in die digitalSTROM-Server Entwic...
 
digitalSTROM Developer Day 2011: Neue Möglichkeiten mit dem digitalSTROM-Server
digitalSTROM Developer Day 2011: Neue Möglichkeiten mit dem digitalSTROM-ServerdigitalSTROM Developer Day 2011: Neue Möglichkeiten mit dem digitalSTROM-Server
digitalSTROM Developer Day 2011: Neue Möglichkeiten mit dem digitalSTROM-Server
 
digitalSTROM Developer Day 2011: Referat Ludger Hovestadt
digitalSTROM Developer Day 2011: Referat Ludger HovestadtdigitalSTROM Developer Day 2011: Referat Ludger Hovestadt
digitalSTROM Developer Day 2011: Referat Ludger Hovestadt
 
digitalSTROM Interaction Design Concepts
digitalSTROM Interaction Design ConceptsdigitalSTROM Interaction Design Concepts
digitalSTROM Interaction Design Concepts
 
digitalSTROM Server Development
digitalSTROM Server DevelopmentdigitalSTROM Server Development
digitalSTROM Server Development
 
UPnP and digitalSTROM
UPnP and digitalSTROMUPnP and digitalSTROM
UPnP and digitalSTROM
 
dSS API by example
dSS API by exampledSS API by example
dSS API by example
 
Contributing to dSS development
Contributing to dSS developmentContributing to dSS development
Contributing to dSS development
 

digitalSTROM Developer Day 2011: digitalSTROM-Server-Apps

  • 1. „Auto off“ Script – Code Explained Zürich, 27.01.2011, Sergey Bostandzhyan
  • 2. „Auto off“ Script – Code Explained Übersicht ● Zielsetzung ● Verfügbare Schnittstellen / API ● Aufbau ● Code
  • 3. „Auto off“ Script – Code Explained Zielsetzung Automatisches Abschalten von Licht in einem Raum nach „X“ Minuten. ● nur für Szene 1 ● Raum konfigurierbar ● Timeout konfigurierbar Beispiel: Treppenhausbeleuchtung
  • 4. „Auto off“ Script – Code Explained Verfügbare Schnittstellen / API ● digitalSTROM Server JSON API über HTTPS ● digitalSTROM Server JS Scripting API JS Scripting API JSON API SpiderMonkey JS Engine Webserver digitalSTROM Server
  • 5. „Auto off“ Script – Code Explained Verfügbare Schnittstellen - JSON API JSON API Dokumentation: http://developer.digitalstrom.org/download/dss/0.9/doc/dss-0.9.0/ ● Informationen über Räume und Geräte ● Konfiguration ● Steuerung ● Events auslösen ● Zugang zum Property Tree ● ...
  • 6. „Auto off“ Script – Code explained Verfügbare Schnittstellen - JSON API JSON API Dokumentation: http://developer.digitalstrom.org/download/dss/0.9/doc/dss-0.9.0/ ● Informationen über Räume und Geräte ● Konfiguration ● Steuerung ● Events auslösen ● Zugang zum Property Tree ● ...
  • 7. „Auto off“ Script – Code Explained Verfügbare Schnittstellen – JS Scripting JS Scripting Dokumentation: http://developer.digitalstrom.org/redmine/projects/dss/wiki/Scripting_inside_the_dSS ● Informationen über Räume und Geräte ● Steuerung ● Events auslösen ● auf Events reagieren ● Zugang zum Property Tree ● TCP Socket Zugriff ● ...
  • 8. „Auto off“ Script – Code Explained Verfügbare Schnittstellen – JS Scripting JS Scripting Dokumentation: http://developer.digitalstrom.org/redmine/projects/dss/wiki/Scripting_inside_the_dSS ● Informationen über Räume und Geräte ● Steuerung ● Events auslösen ● auf Events reagieren ● Zugang zum Property Tree ● TCP Socket Zugriff ● ...
  • 9. „Auto off“ Script – Code Explained Aufbau JS Scripting API JSON API Events empfangen Events auslösen Property Tree digitalSTROM Server
  • 10. „Auto off“ Script – Code Explained Aufbau – Web Interface
  • 11. „Auto off“ Script – Code Explained Aufbau – Web Interface Räume auflisten Timeout konfigurieren Konfiguration anzeigen
  • 12. „Auto off“ Script – Code Explained Aufbau – Web Interface Räume auflisten Request an den dSS: /json/property/query? query=/apartment/zones/*(ZoneID,name )/devices/*(present) Antwort: {"ok":true,"result":{"zones":[ {"ZoneID":4,"name":"Treppenhaus","devices": [{"present":true}]}]}}
  • 13. „Auto off“ Script – Code Explained Aufbau – Web Interface Konfiguration anzeigen Request an den dSS: /json/property/query?query=/scripts/auto- off/*(ZoneID,offDelay) Antwort: {"ok":true,"result": {"auto-off": [{"ZoneID":4,"offDelay":1}]}}
  • 14. „Auto off“ Script – Code Explained Aufbau – Web Interface Timeout Konfigurieren Request an den dSS: /json/event/raise?name=auto-off_set&parameter=ZoneID %3D4%3BoffDelay%3D1 Parameter dekodiert: ZoneID=4;offDelay=1 Event wird ausgelöst und von unserem JS Script im dSS empfangen.
  • 15. „Auto off“ Script – Code Explained Aufbau – dSS JS Script Hört auf Events und kümmert sich um: ● Laden der Konfiguration ● Speichern der Konfiguration ● Reagieren auf Szenenaufrufe ● Auto off
  • 16. „Auto off“ Script – Code Explained Aufbau – dSS JS Script „Main“ var l = new Logger("auto-off"); if (raisedEvent.name === 'running') { Property.load(); } else if (raisedEvent.name === 'auto-off_set') { setTrigger(raisedEvent.parameter); } else if (raisedEvent.name === 'callScene') { processSceneCall(raisedEvent.parameter); }
  • 17. „Auto off“ Script – Code Explained Aufbau – dSS JS Script Konfiguration speichern function setTrigger(parameters) { var zoneID = parseInt(parameters.ZoneID, 10); var offDelay = parseInt(parameters.offDelay, 10); l.logln("Setting trigger: " + zoneID + " delay: " + offDelay); Property.setProperty(zoneID + '/' + 'ZoneID', zoneID); Property.setFlag(zoneID + '/' + 'ZoneID', 'ARCHIVE', true); Property.setProperty(zoneID + '/' + 'offDelay', offDelay); Property.setFlag(zoneID + '/' + 'offDelay', 'ARCHIVE', true); Property.setFlag(zoneID.toString(), 'ARCHIVE', true); Property.store(); }
  • 18. „Auto off“ Script – Code Explained Aufbau – dSS JS Script Konfiguration speichern function setTrigger(parameters) { ... }
  • 19. „Auto off“ Script – Code Explained Aufbau – dSS JS Script Reagieren auf Szenenaufrufe function processSceneCall(parameters) { var sceneID = raisedEvent.parameter.sceneID; var zoneID = raisedEvent.source.zoneID; l.logln("Processing call scene event for zone " + zoneID + " scene " + sceneID); // ignore scenes that we do not care about if (sceneID != Scene.User1) { l.logln("Ignoring scene " + sceneID); return; } ...
  • 20. „Auto off“ Script – Code Explained Aufbau – dSS JS Script Reagieren auf Szenenaufrufe function processSceneCall(parameters) { ... // check if auto-off is configured for this zone var zoneNode = Property.getNode(zoneID); if (zoneNode === null) { l.logln("Nothing configured, returning"); return; } ...
  • 21. „Auto off“ Script – Code Explained Aufbau – dSS JS Script Reagieren auf Szenenaufrufe function processSceneCall(parameters) { ... // get delay setting var offDelay = delayNode.getValue(); // an off delay of zero means - auto off is disabled if (offDelay < 1) { l.logln("Auto-off for zone " + zoneID + " is disabled"); return; } ...
  • 22. „Auto off“ Script – Code Explained Aufbau – dSS JS Script Reagieren auf Szenenaufrufe function processSceneCall(parameters) { ... // our delay is in minutes, timeout parameter has to be in ms setTimeout(offDelay * 60 * 1000, function() { executeTrigger(zoneID); }); } // processSceneCall
  • 23. „Auto off“ Script – Code Explained Aufbau – dSS JS Script Auto off function executeTrigger(zoneID) { l.logln("Executing tigger for zone " + zoneID); // our idea is to turn off the light only if scene 1 was // called, if the user switches to a different scene we will // not turn off anything var lastCalledScene = Property.getProperty('/apartment/zones/zone' + zoneID + '/groups/group1/lastCalledScene'); ...
  • 24. „Auto off“ Script – Code Explained Aufbau – dSS JS Script Auto off function executeTrigger(zoneID) { ... // only take action if we are still in scene 1 if (lastCalledScene == Scene.User1) { // select all light devices from the desired zone // by creating a set, then call scene 0 (off) var set = getDevices().byZone(zoneID).byGroup('yellow'); set.callScene(Scene.Off); } } // executeTrigger
  • 25. „Auto off“ Script – Code Explained Aufbau – dSS JS Script dSS Konfiguration <?xml version="1.0"?> <subscriptions version="1"> <subscription event-name="running" handler-name="javascript"> <parameter> <parameter name="filename1">/path/to/auto-off.js</parameter> <parameter name="script_id">auto-off</parameter> </parameter> </subscription> ...
  • 26. „Auto off“ Script – Code Explained Aufbau – dSS JS Script dSS Konfiguration ... <subscription event-name="auto-off_set" handler- name="javascript"> <parameter> <parameter name="filename1">/path/to/auto-off.js</parameter> <parameter name="script_id">auto-off</parameter> </parameter> </subscription> <subscription event-name="callScene" handler-name="javascript"> <parameter> <parameter name="filename1">/path/to/auto-off.js</parameter> <parameter name="script_id">auto-off</parameter> </parameter> </subscription> </subscriptions>
  • 27. „Auto off“ Script – Code Explained Zusammenfassung Script: ● reagiert auf Events ● lädt und speichert die Konfiguration ● schaltet das Licht aus Web UI: ● fragt den dSS nach verfügbaren Räumen ● fragt die Konfiguration ab ● setzt den Auto off Timeout pro Raum