SixML - JSON Formatierung

Die Darstellung von appicals Nachrichten in JSON ist für einige CommTransceiver nötig, die auf Webprotokollen wie HTTP oder Websockets beruhen. Diese können prinzipiell ebenfalls binäre Daten übertragen, allerdings verliert man dann die Vorteile, die JSON bei Verfügbarkeit entsprechender Bibliotheken bietet. Darüberhinaus erlaubt JSON die Definition zusätzlicher Requests, die für Browseroberflächen o.ä. erhebliche Komfortgewinne versprechen, z.B. den Abruf aller Geräte für einen bestimmten Ort.

JSON Binär

Bei dieser Darstellungsart wird die binäre Nachricht als BinHex enkodiert und ohne weitere Schritte direkt übertragen. Vorteile sind die geringe Nachrichtengröße und die Eindeutigkeit aller Werte. Nachteile sind die Nichtlesbarkeit für menschliche Nutzer und der relativ hohe Parsingaufwand.


{
  ...,
  "appicals" : "02011F4C011900000000000000000000"
}

	
JSON Tupel

Bei dieser Formatierung werden alle Tupel als individuelle JSON-Objekte übertragen. Vorteile sind die gute Lesbarkeit, nachteilig ist die schwierige Rückumwandlung in die binäre Form, z.B. in Gateways.

Alle Konstanten werden in ihren entsprechenden englischen Namen geändert. Alle Tupel bekommen ebenfalls ihren englischen Klarnamen. Textwerte werden direkt übernommen, numerische Werte ebenso. Boolesche Werte sind entweder "true" oder "false". Byte arrays werden als BinHex enkodiert.


{
  ...,
  "appicals" : {
      "MessageControlRequest": "GetServiceValue",
      "DeviceID": 1001,
      "ServiceID": 2
  }
}

{
  ...,
  "appicals" : {
      "MessageControlResponse": { 
        "class" : "GetServiceValue",
        "result" : "Ok"
      }
      "DeviceID": 1001,
      "ServiceID": 2
      "ValueContainer": {
          "Binary": "0096",
          "UserFriendly": "1,5 °C",
          "Float": 1.5
      }
    }         
  }
}


	
JSON DataModel

Bei dieser Formatierung arbeitet man direkt auf dem appicals Datenmodell, es werden also keine vordefinierten Requests verwendet. Dies erlaubt komplexe Anfragen, die für die meisten Geräte deutlich zu aufwendig im Parsing sind. Für Proxy-Server oder Logger-Server bieten sie jedoch erhebliche Vorteile.

Jede Anfrage besteht aus PATH und INCLUDE. Wie für die JSON Tupel Darstellung werden alle Werte soweit möglich als menschenlesbar übertragen.


{
  ...,
  "appicals" : {
      "Method": "GET",
      "PATH": "/DeviceList/1001/ServiceList/2/ValueContainer",
      "INCLUDE": {
          "ValueContainer" : "Binary, UserFriendly, Boolean, Float"
    }         
  }
}

{
  ...,
  "appicals" : {
      "ValueContainer": {
          "Binary": "0096",
          "UserFriendly": "1,5 °C",
          "Float": "1.5"
      }
    }         
  }
}


	

{
  ...,
  "appicals" : {
      "Method": "GET",
      "PATH": "/DeviceList/1001",
      "INCLUDE": {
          "DeviceContainer" : "DeviceID, DeviceName, DeviceLocation, ServiceContainer",
          "ServiceContainer" : "ServiceType, ValueContainer",
          "ValueContainer" : "UserFriendly"
    }         
  }
}