digitalSTROM Developer Day 2011: digitalSTROM-Server-Apps

5,361
-1

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
5,361
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

digitalSTROM Developer Day 2011: digitalSTROM-Server-Apps

  1. 1. „Auto off“ Script – Code Explained Zürich, 27.01.2011, Sergey Bostandzhyan
  2. 2. „Auto off“ Script – Code ExplainedÜbersicht● Zielsetzung● Verfügbare Schnittstellen / API● Aufbau● Code
  3. 3. „Auto off“ Script – Code ExplainedZielsetzungAutomatisches Abschalten von Licht ineinem Raum nach „X“ Minuten.● nur für Szene 1● Raum konfigurierbar● Timeout konfigurierbarBeispiel: Treppenhausbeleuchtung
  4. 4. „Auto off“ Script – Code ExplainedVerfü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. 5. „Auto off“ Script – Code ExplainedVerfügbare Schnittstellen - JSON APIJSON 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. 6. „Auto off“ Script – Code explainedVerfügbare Schnittstellen - JSON APIJSON 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. 7. „Auto off“ Script – Code ExplainedVerfügbare Schnittstellen – JS ScriptingJS 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. 8. „Auto off“ Script – Code ExplainedVerfügbare Schnittstellen – JS ScriptingJS 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. 9. „Auto off“ Script – Code ExplainedAufbau JS Scripting API JSON APIEvents empfangen Events auslösen Property Tree digitalSTROM Server
  10. 10. „Auto off“ Script – Code ExplainedAufbau – Web Interface
  11. 11. „Auto off“ Script – Code ExplainedAufbau – Web InterfaceRäume auflisten Timeout konfigurieren Konfiguration anzeigen
  12. 12. „Auto off“ Script – Code ExplainedAufbau – Web InterfaceRäume auflistenRequest 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. 13. „Auto off“ Script – Code ExplainedAufbau – Web InterfaceKonfiguration anzeigenRequest an den dSS:/json/property/query?query=/scripts/auto-off/*(ZoneID,offDelay)Antwort:{"ok":true,"result":{"auto-off":[{"ZoneID":4,"offDelay":1}]}}
  14. 14. „Auto off“ Script – Code ExplainedAufbau – Web InterfaceTimeout KonfigurierenRequest an den dSS:/json/event/raise?name=auto-off_set&parameter=ZoneID%3D4%3BoffDelay%3D1Parameter dekodiert: ZoneID=4;offDelay=1Event wird ausgelöst und von unseremJS Script im dSS empfangen.
  15. 15. „Auto off“ Script – Code ExplainedAufbau – dSS JS ScriptHört auf Events und kümmert sich um:● Laden der Konfiguration● Speichern der Konfiguration● Reagieren auf Szenenaufrufe● Auto off
  16. 16. „Auto off“ Script – Code ExplainedAufbau – 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. 17. „Auto off“ Script – Code ExplainedAufbau – dSS JS ScriptKonfiguration speichernfunction 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. 18. „Auto off“ Script – Code ExplainedAufbau – dSS JS ScriptKonfiguration speichernfunction setTrigger(parameters){ ...}
  19. 19. „Auto off“ Script – Code ExplainedAufbau – dSS JS ScriptReagieren auf Szenenaufrufefunction 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. 20. „Auto off“ Script – Code ExplainedAufbau – dSS JS ScriptReagieren auf Szenenaufrufefunction 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. 21. „Auto off“ Script – Code ExplainedAufbau – dSS JS ScriptReagieren auf Szenenaufrufefunction 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. 22. „Auto off“ Script – Code ExplainedAufbau – dSS JS ScriptReagieren auf Szenenaufrufefunction processSceneCall(parameters){ ... // our delay is in minutes, timeout parameter has to be in ms setTimeout(offDelay * 60 * 1000, function() { executeTrigger(zoneID); });} // processSceneCall
  23. 23. „Auto off“ Script – Code ExplainedAufbau – dSS JS ScriptAuto offfunction 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. 24. „Auto off“ Script – Code ExplainedAufbau – dSS JS ScriptAuto offfunction 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. 25. „Auto off“ Script – Code ExplainedAufbau – dSS JS ScriptdSS 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. 26. „Auto off“ Script – Code ExplainedAufbau – dSS JS ScriptdSS 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. 27. „Auto off“ Script – Code ExplainedZusammenfassungScript:● reagiert auf Events● lädt und speichert die Konfiguration● schaltet das Licht ausWeb UI:● fragt den dSS nach verfügbaren Räumen● fragt die Konfiguration ab● setzt den Auto off Timeout pro Raum
  28. 28. Fragen?http://developer.digitalstrom.org/

×