Requests von der smartVISU an SmartHomeNG

item

Mit dem item Befehl kann ein Client die Änderung eines Item Wertes anfordern.

Das Beispiel fordert an, das Item mit der id with the id wohnung.buero.schreibtischleuchte.onoff auf den Wert 0 (für Off) zu ändern:

{
"cmd":"item",
"id":"wohnung.buero.schreibtischleuchte.onoff",
"val":"0"
}

Das Plugin sendert keine Antwort zu dem item Befehl.

monitor

Mit dem monitor Befehl kann ein Client die aktuellen Werte einer Liste von Items anfordern. Die Liste der Items für die Werte angefordert werden, muss durch Kommata getrennt sein, wie es das folgende Beispiel zeigt:

{
  "cmd":"monitor",
  "items":[
    "wohnung.hauswirtschaft.deckenlicht",
    "wohnung.hauswirtschaft.waschmaschine",
    "wohnung.hauswirtschaft.waschmaschine.status",
    "wohnung.hauswirtschaft.waschmaschine.ma",
    "wohnung.hauswirtschaft.trockner",
    "wohnung.hauswirtschaft.trockner.status",
    "wohnung.hauswirtschaft.trockner.ma",
    ]
}

Das Plugin antwortet mit einer Liste von Wertepaaren, wobei jedes Wertepaar aus der Item-Id und dem zugehörigen Wert besteht.

Nach der Liste folgt noch die Angabe der Befehls-Typs, der die Antwort ausgelöst hat- Eine Antwort zu dem oben beschriebenen Request kann folgendermaßen aussehen:

{
  "items": [
    ["wohnung.hauswirtschaft.deckenlicht", false],
    ["wohnung.hauswirtschaft.waschmaschine", true],
    ["wohnung.hauswirtschaft.waschmaschine.status", 1],
    ["wohnung.hauswirtschaft.waschmaschine.ma", 37],
    ["wohnung.hauswirtschaft.trockner", true],
    ["wohnung.hauswirtschaft.trockner.status", 1],
    ["wohnung.hauswirtschaft.trockner.ma", 0]
  ],
  "cmd": "item"
}

Zusätzlich initialisiert das Plugin eine Update Routine, welche bei Änderungen von Item Werten in SmartHomeNG automatisch eine Information an den Client sendet. Zum Beispiel:

{
  "items": [
    ["wohnung.hauswirtschaft.waschmaschine.ma", 36]
  ],
  "cmd": "item"
}

ping

Mit dem ping Befehl kann ein Client prüfen, ob die Verbindung zum Plugin besteht.

{"cmd":"ping"}

Das Plugin antwortet mit:

{"cmd":"pong"}

logic

Mit dem logic Befehl kann ein Client anfordern, dass eine Logik getriggert wird oder das eine Logik enabled/disabled wird.

name ist der Name der Logik, wie er in der Konfiguration etc/logic.yaml definiert ist. Damit der Befehl durch das Plugin akzeptiert wird, muss in der Konfiguration der Logik das Attribut visu_acl für diese Logik auf True gesetzt sein.

{"cmd":"logic",  "name":"az_licht",  "val":0}

or

{"cmd":"logic",  "name":"az_licht",  "enabled":1}
{"cmd":"logic",  "name":"az_licht",  "enabled":0}

Folgende Informmation wird an die getriggerte Logik über die trigger Variable weitergegeben:

trigger[source] = <ip:port of the client (visu)>
trigger[by]     = 'Visu'
trigger[value]  = <value, as defined in the logic-command>

Das Plugin sendert keine Antwort zu dem logic Befehl.

series

Mit dem series Befehl kann ein Client eine Serie von Werten zu einem Item anfordern. Die angeforderten Werte werden dazu aus einer Datenbank gelesen, in der das database Plugin sie abgelegt hat. Daher kann der series Befehl nur Werte für Items liefern, die so konfiguriert sind, dass sie Daten im database Plugin speichern.

Der series Befehl wird von smartVISU genutzt, um Daten für das plot-Widget zu erhalten. Das folgende Beispiel fordert eine Serie von Mittelwerten der letzten 48 Stunden an. Die Serie soll 100 Werte umfassen:

{
 "cmd":"series",
 "item":"wohnung.verteilung.zaehler.wirkleistung",
 "series":"avg",
 "start":"48h",
 "end":"now",
 "count":100
}

Das Attribut series im Befehl definiert, welche Funktion genutzt wird, um die Werte für die Serie zu ermitteln. Mögliche Functionen sind min, max, avg und sum. Diese Funktionen sind im database Plugin implementiert. Falls das end Attribut weggelassen wird, wird "end":"now" durch das Plugin angenommen. Falls das count Attribut weggelassen wird, wird "count":100 durch das Plugin angenommen.

Die Antwort zu dem oben beschriebenen Request kann folgendermaßen aussehen:

{
  "series": [
      [1460636598495, 1831.97],
      [1460637648422, 1458.14],
      [1460639298307, 757.22],
      [1460641098243, 577.38],
      "... 102 values in total",
      [1460802051217, 740.61],
      [1460803884973, 637.61],
      [1460805521319, 744.41],
      [1460807229532, 718.03],
      [1460808823757, 681.25],
      [1460809294663, 681.25]
  ],
  "cmd": "series",
  "params": {
    "end": "now",
    "start": 1460809294663,
    "update": true,
    "item": "wohnung.verteilung.zaehler.wirkleistung",
    "step": 1728000.01,
    "func": "avg",
    "sid": "wohnung.verteilung.zaehler.wirkleistung|avg|48h|now"
  },
  "update": "2016-04-16T21:14:50.20.8227+02:00",
  "sid": "wohnung.verteilung.zaehler.wirkleistung|avg|48h|now"
}

Das Plugin antwortet mit einer List von Werte-Paaren. Jedes Werte-Paar besteht aus einem timestamp und dem zugehörigen Item Wert. Der Liste folgt der Befehls-Typ, der die Serie angefordert hat und die Parameter, die zur Erzeugung der Serie genutzt wurden.

Die letzten beiden Attribute definieren einen Identifier für die Serie sowie eine Zeitangabe, wann das Update durch das Plugin gesendet wurde.

Zusätzlich initialisiert das Plugin eine Update Routine, welche nach einer definierten Zeit ein Update für die Werte der Serie sendet. Zum Beispiel:

{
  "series": [
    [1460810141323, 711.25],
    [1460811024119, 711.25]
    ],
  "cmd": "series",
  "sid": "wohnung.verteilung.zaehler.wirkleistung|avg|48h|now"
}

series_cancel

Mit dem series_cancel Befehl kann ein Client die Updates einer Serie, die er vorher aboniert hat, beenden.

{
 "cmd":"series_cancel",
 "item":"wohnung.verteilung.zaehler.wirkleistung",
 "series":"avg",
 "start":"48h",
 "end":"now",
 "count":100
}

Das Plugin antwortet mit:

{
 "cmd":"series_cancel",
 "result": "..."
}

oder

{
 "cmd":"series_cancel",
 "error": "..."
}

log

Mit dem log Befehl kann ein Client die letzten Einträge eines Logs anfordern. Das folgende Beispiel fordert die letzten 5 Einträge des env.core Logs an:

{"cmd":"log","name":"env.core.log","max":"5"}

Das Plugin antwortet mit einer einer Liste von Messages, die folgendermaßen aussehen kann:

{
 "init":"y",
 "cmd":"log",
 "name":"env.core.log",
 "log":[
    {"message":"VISU: WebSocketHandler uses protocol version 4","level":"WARNING","thread":"Main","time":"2016-04-16T15:53:21.354815+02:00"},
    {"message":"Using sonos section [sonos_bo], sonos_uid = RINCON_B8E93792D35401400","level":"WARNING","thread":"myradio","time":"2016-04-16T15:52:28.980100+02:00"},
    {"message":"Mondaufgang um 15:26:50 bei Azimuth 76.9 und Monduntergang um 04:39:55 bei Azimuth 285.5","level":"WARNING","thread":"mysunmoon","time":"2016-04-16T15:52:27.678330+02:00"},
    {"message":"No broker url given, assuming current ip and default broker port: http://10.0.0.182:12900","level":"WARNING","thread":"Main","time":"2016-04-16T15:52:14.006478+02:00"},
    {"message":"mlgw: Serial number of ML Gateway is 22804066","level":"WARNING","thread":"Main","time":"2016-04-16T15:52:13.869275+02:00"}
 ]
}

log_cancel

Mit dem log_cancel Befehl kann ein Client die Updates eines Logs, welches er vorher aboniert hat, beenden. Dieser Befehl ist ab Protokoll Version 4.1 verfügbar.

{
 "cmd":"log_cancel",
 "item":"env.core.log",
}

Das Plugin antwortet mit:

{
 "cmd":"log_cancel",
 "result": "..."
}

oder

{
 "cmd":"log_cancel",
 "error": "..."
}

proto

Mit dem proto Befehl kann ein Client die Version des Websocket-Nutzdaten Protokolls angeben, mit der der CLient kommunizieren möchte:

{"cmd":"proto","ver":4}

Das Plugin antwortet mit der Protokoll Version, die es unterstützt. Zusätzlich sendet es die aktuelle Zeit (mit Zeitzone) des SmartHomeNG Systems:

{
 "cmd": "proto",
 "ver": 4,
 "time":"2016-04-14T21:23:20.248227+02:00"
}

identity

Mit dem identity Befehl kann ein Client Informationen über sich selbst an das Plugin senden. Der Befehl sollte direkt nach dem Öffnen der Verbindung gesendet werden.

Das folgende Beispiel zeigt, was ein smartVISU v2.9 Client, welcher in einem Safari Browser läuft, senden würde:

{
 "cmd": "identity",
 "sw": "smartVISU",
 "ver": "v2.9",
 "browser": "Safari",
 "bver": "14"
}

Das Plugin sendert keine Antwort zu dem identity Befehl.

list_items

Mit dem list_items Befehl kann ein Client die Liste der in SmartHomeNG definierten Items anfordern:

{"cmd":"list_items", "path":""}

Das Plugin antwortet nicht, es sei denn es ist mit querydef: True dazu konfiguriert worden.

path definiert den Subtree Level für welchen die Definitionen zurück gemeldet werden sollen. Falls path leer ist, werden die Definitionen für den Top Level des Item Trees zurück gemeldet.

Das Plugin antwortet mit einem dict, welches die Definitionen (path, name, type) enthält.

{
 "cmd": "list_items",
 "items": [
   {"path":"root.child", "name":"child", "type":"num"},
   {"path":"root.another", "name":"another child", "type":"bool"}
 ]
}

list_logics

Mit dem list_logics Befehl kann ein Client die Liste der in SmartHomeNG definierten Logiken anfordern, die durch den Client getriggert werden können:

{"cmd":"list_logics", "enabled":1}

Das Plugin antwortet nicht, es sei denn es ist mit querydef: True dazu konfiguriert worden.

enabled ist optional. Als default, antwortet das Plugin mit Informationen über alle geladenen User-Logiken. Falls "enabled":1 amgegeben wurde, werden nur die Logiken berücksichtigt, die enabled sind.

Das Plugin antwortet mit einem dict, welches die Informationen (name, description, enabled) über die Logiken enthält.

{
 "cmd": "list_logics",
 "logics": [
   {"name":"az_licht", "desc":"...", "enabled":1},
   {"name":"gz_licht", "desc":"...", "enabled":0}
 ]
}