Es gibt ein eine Test und eine Produktion Cloud.
Ist zum testen und der Regestrierungs Schlüssel ist länger gültig.
Unsere neusten Entwicklungen werden zuerst auf dieser Cloud getestet bevor sie auf die Produktion Cloud aufgeschaltet werden.
test.myibricks.info
Ist für den Produktiven Einsatz für die Endkunden und der Regestrierungs Schlüssel ist nur ein Tag gültig. myibricks.com
Der ADeCS service ist auf folgender URL erreichbar
test.myibricks.info/adecsservice/communicate/
myibricks.com/adecsservice/communicate/
Die Geräte Kommunikation erfolgt über eine verschlüsselte WebSocket (wss) Verbindung. Über die WebSocket Verbindung wird mittels JSON Kommuniziert.
Verschlüsselung: TLS 1.2 https://de.wikipedia.org/wiki/Transport_Layer_Security
WebSocket: https://de.wikipedia.org/wiki/WebSocket
JSON: https://www.json.org/
Codierung: UTF8 https://de.wikipedia.org/wiki/UTF-8
Der Geräte Hersteller stellt die erste Verbindung mit der Cloud her und somit wird das jeweilige Gerät registriert und in der “DeviceBase” aufgenommen. Mit dem Hersteller Regestrierungs Schlüssel wird wird ein Zugangsschlüssel (accesskey) gelöst, der bestätigt werden muss, danach wird der Kommunikationschlüssel (communicationkey) und die Gültigkeits Dauer (expirationinminutes) des Kommunikationschlüssel gesendet.
<manufacturerId> | Kennung des Herstellers (von iBricks vorgegeben) | ||
<productId> | Kennung des Produkts (von iBricks vorgegeben) | ||
<deviceId> | Eindeutige Adresse des Geräts (Normalerweise MAC Adersse) |
wss send --> {"command":"registerdevice","manufacturerid":"<manufacturerId>","productid":"<productId>","deviceid":"<deviceId>","registeringkey":"<Registeringkey>"}
wss receive <-- {"accesskey":"<newAccessKeyFromCloud>"}
wss send --> {"command":"accesskeyconfirm","manufacturerid":"<manufacturerId>","productid":"<productId>","deviceid":"<deviceId>","accesskey":"<newAccessKeyFromCloud>"}
wss receive <-- {"communicationkey":"<Communicationkey>","expirationinminutes":"<expirationinminutes>"}
Der Zugangsschlüssel ist immer nur einmalig gültig und wird zum erneuern des Kommunikationschlüssel benötigt. (Bei jedem neustart des Gerätes oder wenn die Gültigkeits Dauer abgelaufen ist)
wss send --> {"command":"renewaccesskey","manufacturerid":"<manufacturerId>","productid":"<productId>","deviceid":"<deviceId>","accesskey":"<oldAccessKey>"}
wss receive <-- {"accesskey":"<newAccessKeyFromCloud>"}
wss send --> {"command":"accesskeyconfirm","manufacturerid":"<manufacturerId>","productid":"<productId>","deviceid":"<deviceId>","accesskey":"<newAccessKeyFromCloud>"}
wss receive <-- {"communicationkey":"<Communicationkey>","expirationinminutes":"<expirationinminutes>"}
Der Endkunde verbindet sein Gerät mit dem Internet und gibt im Gerät seine Cloud Benutzer Name (username) und Beschreibeung (desc) ein. Das Gerät wird automatisch auf der Visu im Map gemäss Beschreibeung angelegt.
wss send --> {"command":"pairdevice","manufacturerid":"<manufacturerId>","productid":"<productId>","deviceid":"<deviceId>","communicationkey":"<Communicationkey>","username":"<Username>","desc":"<Desc>"}
KISSnet Telegramm Das KISSnet ist ein Protokoll das durch iBricks Entwickelt wurde und vorallem gedacht ist um mit microcontroller zu Kommunizieren.
wss send --> {"manufacturerid":"<manufacturerId>","productid":"<productId>","deviceid":"<deviceId>","communicationkey":"<Communicationkey>","kiss":"<KISSnet Telegramm>"}
JSON Anstelle des KISSnet Protokolles können die Daten verschachtelt auch im JSON Format gesendet werden
wss send --> {"manufacturerid":"<manufacturerId>","productid":"<productId>","deviceid":"<deviceId>","communicationkey":"<Communicationkey>","data":{"zoneid":"<ZoneId>","command":"<Command>"}}
Html Webseite mit JavaScript die mit der Test Cloud Kommuniziert ohne Anmeldeverfahren
<!DOCTYPE html> <meta charset="utf-8" /> <title>WebSocket Test</title> <script language="javascript" type="text/javascript"> var wsUri = "wss://test.myibricks.info/adecsservice/communicate/"; var output; var _sendInterval; function init() { output = document.getElementById("output"); testWebSocket(); } function testWebSocket() { websocket = new WebSocket(wsUri); websocket.onopen = function(evt) { onOpen(evt) }; websocket.onclose = function(evt) { onClose(evt) }; websocket.onmessage = function(evt) { onMessage(evt) }; websocket.onerror = function(evt) { onError(evt) }; } function onOpen(evt) { writeToScreen("CONNECTED"); _sendInterval = setInterval(function() {doSend('{"manufacturerid":"hersteller","productid":"geraet","deviceid":"5CCF7F0A3D29","command":"hello"}');}, 2000); } function onClose(evt) { clearInterval(_sendInterval); writeToScreen("DISCONNECTED"); } function onMessage(evt) { writeToScreen('<span style="color: blue;">RESPONSE: ' + evt.data+'</span>'); // websocket.close(); } function onError(evt) { writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data); } function doSend(message) { writeToScreen("SENT: " + message); websocket.send(message); } function writeToScreen(message) { var pre = document.createElement("p"); pre.style.wordWrap = "break-word"; pre.innerHTML = message; output.appendChild(pre); } window.addEventListener("load", init, false); </script> <h2>WebSocket Test</h2> <div id="output"></div>