Experimentieren mit der external device API

Achtung - Unkorrigierte maschinelle Übersetzung

Diese deutsche Version des folgenden Texts ist momentan zu 100% maschinenübersetzt. Bei Unklarheiten bitte in der englischen Version (die in diesem Fall das von Hand geschriebene Original ist) nachschauen.

Mit der externen Geräte-API kann einfach experimentiert werden, indem eine Verbindung über Telnet hergestellt wird, dann eine init-Nachricht eingefügt wird und anschließend einige E/A simuliert werden.

Bitte beachten - benötigt Beta-Version oder Userlevel=1

Da die externe Geräte-API von jedem aus dem LAN verwendet werden kann, ist die API in Produktionsgeräten des P44-XX nicht aktiviert. Die API ist in der Beta-Test-Firmware (verfügbar auf Anfrage) aktiviert und kann bei Bedarf über den Remote-Support auch auf Produktionsgeräten aktiviert werden.

Die folgenden Abschnitte zeigen dies für verschiedene Gerätetypen. Bitte beachten Sie auch den Beispielcode in verschiedenen Sprachen, der im Ordner external_devices_samples des vdcd-Projekts enthalten ist.

Lichttastensimulation

Stellen Sie eine Verbindung zur Geräte-API mit telnet her:

telnet localhost 8999

Kopieren Sie nun eine einfache init Nachricht, die einen Lichttaster definiert, und fügen Sie diese ein (eine Zeile!!):

{'message':'init','protocol':'simple','uniqueid':'experiment42','buttons':[{'buttontype':1,'group':1,'element':0}]}

Der vdcd antwortet mit:

OK

Nun hat die vdcd ein Lichttastengerät angelegt. Wenn es sich um die vdcd eines P44-DSB handelt, können Sie das Gerät in der Weboberfläche des P44-DSB sehen, und wenn die vdcd an ein Digital Strom-System angeschlossen ist, erscheint ein neues Tastergerät im dSS. Standardmäßig befindet es sich im Standardraum für die vdc "Externe Geräte", Sie können es aber auch in einen bestehenden Raum mit Digital Strom-Lichtgeräten ziehen.

Nun können Sie Lichter schalten, indem Sie einen Tasterklick (250ms aktiv) simulieren mit

B0=250

Zum Dimmen kann der Taster gedrückt gehalten werden...

B0=1

...und später losgelassen werden

B0=0

Lichtdimmer-Simulation

Verbinden Sie sich mit der Geräte-API mit telnet:

telnet localhost 8999

Kopieren Sie nun eine einfache init-Nachricht, die einen Dimmerausgang definiert, und fügen Sie sie ein (eine Zeile!!):

{'message':'init','protocol':'simple','uniqueid':'experiment42b','output':'light'}

Der vdcd antwortet mit:

OK

Nun hat der vdcd ein Lichtdimmer-Gerät angelegt. Wenn dies die vdcd eines P44-DSB ist, sehen Sie das Gerät in der Weboberfläche des P44-DSB, und wenn die vdcd an ein Digital Strom-System angeschlossen ist, erscheint ein neues Lichtgerät im dSS

Nun können Sie in dem Raum, in dem sich das Lichtgerät befindet, Szenen aufrufen (oder über den Taster in der Weboberfläche des P44-DSB direkt die Helligkeit verändern). Sie werden sehen, dass die Kanalwertänderungen von der API des externen Geräts gemeldet werden:

C0=3.120000
C0=8.190000
C0=14.040000
C0=21.840000
C0=30.810000
C0=40.950000
C0=56.160000
C0=63.960000
C0=69.810000
C0=78.000000
C0=79.950000
C0=78.000000
C0=65.130000
C0=53.040000
C0=42.120000
C0=33.150000
C0=26.910000
C0=40.950000
C0=53.040000
C0=58.110000
C0=63.180000

Simulation des Temperatursensors

Verbinden Sie sich mit der Geräte-API mit telnet:

telnet localhost 8999

Kopieren Sie nun eine einfache init Nachricht, die einen Temperatursensor definiert, und fügen Sie diese ein (eine Zeile!!):

{'message':'init','protocol':'simple','group':3,'uniqueid':'experiment42c','sensors':[{'sensortype':1,'usage':1,'group':48,'min':0,'max':40,'resolution':0.1}]}

Der vdcd antwortet mit:

OK

Nun hat die vdcd ein Temperatursensorgerät angelegt.

Nun können Sie Temperaturänderungen simulieren mit

S0=22.5

z.B. um eine Raumtemperatur von 22,5 Grad Celsius zu melden.

Ein Lichtdimmer und ein Taster teilen sich eine API-Verbindung

Verbinden Sie sich mit der Geräte-API mit telnet:

telnet localhost 8999

Kopieren Sie nun zwei init-Nachrichten, die in ein JSON-Array verpackt sind und das Dimmer- und das Taster-Gerät definieren, und fügen Sie sie ein (eine Zeile!!):

[{'message':'init', 'tag':'DIMMER', 'protocol':'simple', 'group':3, 'uniqueid':'experiment42d', 'output':'light'}, {'message':'init', 'tag':'BUTTON', 'uniqueid':'experiment42e', 'buttons':[{'buttontype':1, 'group':1, 'element':0}]} ]

Der vdcd antwortet mit:

OK

Simulieren Sie nun einen Tastenklick (250ms aktiv) mit

BUTTON:B0=250

Da sich Dimmer und Taster zunächst im gleichen Raum befinden, wird der Taster (standardmäßig) als Raumtaster das Licht einschalten, Sie sehen also

DIMMER:C0=100.000000

Ein einzelnes Gerät (einfacher Wasserkocher) mit einigen Aktionen, einem Zustand, einigen Ereignissen und einer Eigenschaft

Verbinden Sie sich mit der Geräte-API mit telnet:

telnet localhost 8999

Kopieren Sie nun zwei init-Nachrichten, die in ein JSON-Array verpackt sind, und fügen Sie sie ein (eine Zeile!!), um das einfache Wasserkocher-Einzelgerät zu definieren:

{ 'message':'init', 'iconname':'kettle', 'modelname':'kettle', 'protocol':'json', 'uniqueid':'my-kettle', 'name':'virtual kettle', 'output':'action', 'noconfirmaction':true, 'actions': {'stop':{'description':'stop heating'}, 'heat':{'description':'heat water','params': {'temperature': {'type':'numeric','siunit':'celsius','min':20,'max':100,'resolution':1,'default':100} } } }, 'states': { 'operation':{ 'type':'enumeration', 'values':['!ready','heating','detached'] } }, 'events': { 'started':null, 'stopped':null, 'aborted':null, 'removed':null }, 'properties':{ 'currentTemperature':{ 'readonly':true,'type':'numeric', 'siunit':'celsius', 'min':0, 'max':120, 'resolution':1 },'mode':{ 'type':'enumeration', 'values':['!normal','boost'] } }, 'autoaddstandardactions':true, 'standardactions':{ 'std.warmup':{ 'action':'heat', 'params':{ 'temperature':60 } } } }

Der vdcd antwortet mit:

{ "message":"status","status":"ok"}

Simulieren Sie nun Zustandsänderungen mit

{ "message": "pushNotification", "statechange":{ "operation": "heating" }, "events":["started"] }

{ "message": "pushNotification", "statechange":{ "operation": "detached" }, "events":["aborted", "removed"] }

Oder eine Temperaturänderung mit

{ "message": "updateProperty", "property": "currentTemperature", "value":42, "push":true }

Wenn eine Aktion auf dem Gerät aufgerufen wird, sehen Sie etwas wie:

{"message":"invokeAction","action":"heat","params":{"temperature":42.420000}}

Wenn eine Eigenschaft im Gerät geändert wird:

{"message": "setProperty", "property": "mode", "value": "boost"}

Tastengerät mit drei Konfigurationen, zwischen denen umgeschaltet werden kann

Dies ist für ein Gerät mit zwei Tasten, die entweder als eine Zwei-Wege-Taste (Wippe) oder als zwei separate Einzeltasten verwendet werden können.

Verbinden Sie sich mit der Geräte-API mit telnet:

telnet localhost 8999

Kopieren Sie nun eine init-Nachricht, die die Taste in der Zwei-Wege-Konfiguration definiert, und fügen Sie sie ein (eine Zeile!!):

{'message':'init','protocol':'json','group':1,'uniqueid':'multiConfigSample','buttons':[{'buttontype':2,'hardwarename':'down','element':1}, {'buttontype':2,'hardwarename':'up','element':2}],'currentConfigId': 'twoWay','configurations':[{'id':'twoWay','description':'Zwei-Wege-Wipptaste'},{'id':'oneWay','description':'separate Tasten'},{'id':'twoWayInverse','description':'Zwei-Wege-Wipptaste, Richtung invertiert'}]}

Der vdcd antwortet mit:

{"message":"status","status":"ok"}

Nun hat die vdcd einen Zwei-Wege-Taster erstellt und bietet drei Konfigurationen an: "twoWay" (derzeit aktiv), "twoWayInverse" und "oneWay".

Wenn der Benutzer nun die Konfiguration auf "oneWay" ändert, erhält das Gerät die folgende Meldung:

{"message": "setConfiguration", "id": "oneWay"}

Nun muss die Geräteimplementierung das aktuelle Gerät trennen und zwei Geräte mit derselben uniqueid, aber unterschiedlichem subdeviceindex, die die neue Einwegkonfiguration repräsentieren, neu verbinden:

{'message':'bye'}
[{'message':'init','tag':'A','protocol':'json','group':1,'uniqueid':'multiConfigSample','subdeviceindex':0,'buttons':[{'buttontype':1,'hardwarename':'single','element':0}],'currentConfigId':'oneWay','configurations': [{'id':'twoWay','description':'Zwei-Wege-Wipptaste'},{'id':'oneWay','description':'separate Tasten'},{'id':'twoWayInverse','description':'Zwei-Wege-Wipptaste, Richtung invers'}]},{'message': 'init','tag':'B','protocol':'json','group':1,'uniqueid':'multiConfigSample','subdeviceindex':1,'buttons':[{'buttontype':1,'hardwarename':'single','element':0}],'currentConfigId':'oneWay','configurations': [{'id':'twoWay','description':'Zwei-Wege-Wipptaste'},{'id':'oneWay','description':'separate Tasten'},{'id':'twoWayInverse','description':'Zwei-Wege-Wipptaste, Richtung invers'}]}]

Ähnlich verhält es sich, wenn der sure die Konfiguration wieder auf "twoWay" oder "twoWayInverse" ändert, müssen beide Einzeltasten getrennt werden und eine Init-Nachricht für eine Zwei-Wege-Taste gesendet werden.

Beachten Sie, dass dies auch beim Umschalten zwischen "twoWay" oder "twoWayInverse" der Fall ist - obwohl sich die Anzahl der virtuellen Geräte nicht ändert, tut dies die Konfiguration (Tastenmodi, ids, Namen), so dass das Gerät abgetrennt und neu verbunden werden muss.

Zwei Tastengeräte, die kombiniert werden können (auf dSS/vdSM-Ebene), um als eine einzige Zwei-Wege-Taste zu fungieren

Verbinden Sie sich mit der Geräte-API mit telnet:

telnet localhost 8999

Kopieren Sie nun das folgende Array mit zwei_init_-Meldungen und fügen Sie es ein (eine Zeile!!), um zwei Tasten zu definieren, deren subdeviceindex und combinables auf 2 gesetzt sind:

[{"message": "init", "protocol": "simple", "tag": "up", "uniqueid": "p44_dummy_button_23465", "subdeviceindex":0, "buttons":[{"buttontype":0, "combinables":2, "hardwarename": "up", "element": 0}]},{"message":"init","protocol":"simple","tag":"down","uniqueid":"p44_dummy_button_23465","subdeviceindex":1,"buttons":[{"buttontype":0,"combinables":2,"hardwarename":"down","element":0}]}]

Der vdcd antwortet mit:

OK

Nun hat die vdcd zwei Tastengeräte mit aufeinanderfolgenden Subdevice-Indizes (letztes Byte der dSUID) 0 und 1 erstellt.

Von der Seite der externen Geräte-API funktionieren diese wie jede andere Taste, siehe anderes Beispiel.

Für den dSS-Konfigurator bedeutet jedoch der combinables==2, dass diese beiden Tasten gepaart werden können, um im dSS als eine einzige Zwei-Wege-Taste zu erscheinen.