DCDI Spezifikation
Änderungsprotokoll
Datum | Version | Autor | Beschreibung | Status[1] |
24.07.15 | 0.0 | MKN | Erstellung | F |
02.10.15 | 0.1 | MKN | Notifications und Parameterabfrage enthalten Seriennummer des Gerätes | F |
17.02.16 | 0.2 | MKN | Rückfallebene für Verbindungsabbruch eingearbeitet | F |
14.03.16 | 0.3 | MKN | – Option restartMobileDeviceOnFallback hinzugefügt – Request sendImagePart teilspezifiziert | F |
11.04.16 | 0.4 | MKN | Request sendImagePart komplett spezifiziert | F |
28.04.16 | 0.5 | MKN | Request setSystemTime spezifiziert | F |
12.07.16 | 0.6 | MKN | – Alle Meldungen enthalten den Gerätenamen – Der Gerätename ist als änderbarer Parameter ausgeführt – statistische Werte können zurückgesetzt werden – Meldung state enthält den statistischen Wert Betriebszeit in Minuten – Meldung state enthält den statistischen Wert Betriebszeit in Minuten – Option deleteRealtimeImageOnFallback hinzugefügt | F |
26.08.16 | 0.7 | MKN | – Die Meldung 'state' enthält zusätzlich den Wert der Systemspannung (sysVoltage) | F |
21.08.18 | 0.8 | MKN | – Die Meldung 'state' enthält zusätzlich den Zustand aller EPD-Controller (epdcState) – Requests sendImage und sendImagePart können Text-To-Speech Inhalte enthalten | F |
11.10.17 | 1.0 | MKN | – Request showImage spezifiziert – Optionen deleteRealtimeTtsOnFallback und deleteRealtimeVhciTtsOnFallback hinzugefügt – Request version spezifiziert | F |
20.12.17 | 1.1 | MKN | – Keep-Alive-Funktionalität auf Protokollebene hinzugefügt | F |
09.05.19 | 1.2 | MKN | – Antwort auf Request version enthält nun die Version der Kern-Anwenung und Firmware-Version des Hilfscontrollers | F |
12.11.19 | 1.3 | MKN | – Request RetrieveFrameBufferContent hinzugefügt – Fehler-Codes erweitert – Request restartSystem hinzugefügt – Request getMobileState hinzugefügt – Request configureDevice hinzugefügt – Request getNetworkState hinzugefügt – Request getFileList hinzugefügt – Die Meldung 'state' enthält zusätzlich die Angabe über die relative Menge freien Arbeitsspeichers (freeRam) – Die Meldung 'state' enthält zusätzlich die Angabe über die relative CPU-Auslastung (cpuLoad) – Optionen vhcmImg und ttsOnce zu sendImage hinzugefügt | F |
06.12.19 | 1.4 | MKN | – Status-Telegramm enthält key7KeystrokeCount und vhcmActivationCount – Option removeOnFallck zu sendImage hinzugefügt | F |
12.02.20 | 1.5 | MKN | – Request configureDevice enthält Abschnitt zum Einstellen der Audio-Ausgabelautstärke | F |
10.07.20 | 1.6 | MKN | – Request sendImagePart enthält Flag clearOverlay | F |
17.07.20 | 1.7 | MKN | – Das Flag clearOverlay im Request sendImagePart funktioniert nun invers | F |
24.09.20 | 1.8 | MKN | – Rückgabewert 11 für Requests sendImage, showImage und sendImagePart eingeführt – Status-Telegramm enthält key9KeystrokeCount, key10KeystrokeCount, powerFailModeActive und illuminationActive – Telegramm sendImage um Option removeTtsOnFallback erweitert | F |
21.10.20 | 1.9 | MKN | – Telegramm sendImage um Option systemImage erweitert | F |
23.10.20 | 1.10 | MKN | – Requests removeImage und imagePresent um Option systemImage erweitert | F |
17.11.20 | 1.11 | MKN | – Request version enthält Eintrag base | F |
01.12.20 | 1.12 | MKN | – Request sendImagePart überarbeitet, Zugriff auf System-Bilder möglich, Flag doNotShow hinzugefügt | F |
28.01.21 | 1.13 | MKN | – Request configureDevice erweitert – Request getFile hinzugefügt – Response zu getFileList enthält nun auch sysImages und Pürfsummen (optional) | F |
13.08.21 | 1.14 | MKN | – Request configureDevice erweitert – Status-Telegramm enthält rssi – Notification change hinzugefügt | F |
14.08.21 | 1.15 | MKN | – Request getDeviceInfo hinzugefügt | F |
23.11.21 | 1.16 | MKN | – Response zu getFileList enthält nun auch Pürfsummen zu Fonts (optional) | B |
27.01.22 | 1.17 | MKN | – state-Telegramm kann mit einem request angefordert werden – Request configureDevice erweitert | F |
22.02.22 | 1.18 | MKN | – Alle Requests können mit Hilfe des Flags identify in der Antwort die Seriennummer und den Gerätenamen anfordern | F |
05.04.22 | 1.19 | MKN | – Meldung über fehlerhafte Bildupdates, wenn Übertragungs-CRC zu EPD-Controller fehlerhaft | F |
07.11.22 | 1.20 | MKN | – Request configureDevice erweitert – Request getDeviceInfo erweitert | B |
[1]Status: V=vorgelegt, F=freigegeben, sonst in Bearbeitung (B)
Allgemeines
Die Protokoll-Inhalte werden über TCP/IP übermittelt. Das deZign stellt diese TCP/IP-Verbindung als Client zu einem parametriertem Server her.
Der Protokollinhalt wird im JSON-Format kodiert. Die Reihenfolge der Elemente eines JSON-Objektes kann variieren.
Globale Definitionen
Innerhalb von Antworttelegrammen und Meldungen können Rückgabewerte zum Einsatz (errorCode) kommen. Alle auftretenden Rückgabewerte sind in der nachfolgenden Enumeration aufgeführt.
0 | o.k., no error occured / kein Fehler aufgetreten |
1 | json parse error |
2 | error saving file / Datei Speichern fehlgeschlagen |
3 | file not present / Datei nicht vorhanden |
4 | error removing file / Datei löschen fehlgeschlagen |
5 | error reading parameter description / Lesen der Parameterbeschreibung fehlgeschlagen |
6 | error value out of bounds / Wert außerhalb des zulässignen Bereichs |
7 | image update failed / Bild-Update fehlgeschlagen |
8 | setting time failed / Uhrzeit setzen fehlgeschlagen |
9 | unsupported / nicht unterstützt |
10 | processing error / Verarbeitungsfehler |
11 | showing not possible because power fail mode active |
In jedem JSON-Telegramm, welches übertragen wird, sind die Werte 'action' und 'type' enthalten.
'action' spezifiziert hierbei textuell, wozu das Telegramm dient und 'type' gibt an, ob es sich um eine Anfrage ('request'), eine Antwort ('response') oder um eine Mitteilung ('notification') handelt.
Enthält eine Anfrage den optionalen Wert 'id' (Zeichenkette), so wird dieser in der Antwort auf die Anfrage ebenfalls eingebettet. Auf diese Weise ist es möglich Antworten von Geräten bestimmten Anfragen zuzuordnen.
Telegramme
Abfrage der Protokoll-Version
Mit der nachfolgend beschriebenen Anfrage an das Gerät kann ermittelt werden, welche Protokoll-Version das Gerät unterstützt (ab Version 1.0 möglich).
{ "action" : "version", # required "type" : "request", # required "id" : "yourId" # optional }
Das Antworttelegramm hat folgenden Aufbau:
{ "action" : "version", "type" : "response", "id" : "yourId", "version" : "1.3", "core" : "2.20.5.1853 - REL 70.1853", "aux" : "1.8.9", "base" : "Rev4", "errorCode" : 0 }
Mögliche Rückgabewerte für die Anfrage 'version' sind:
0 | o.k. |
1 | Fehler beim parsen des Json-Requests aufgetreten |
Senden von Bildinformationen
Bilder können als komplettes Bild gesendet werden, oder als Teilinhalt für ein existierendes Bild.
Komplette Bilder senden
Darzustellende Bilder können Bilder vom Typ JPEG oder PNG sein.
Der Request für das Senden von Bildinformationen hat den nachfolgenden Aufbau.
{ "action" : "sendImage", # required "type" : "request", # required "name" : "info_1.png", # required "id" : "yourId", # optional "method" : "base64", # required "content" : "89504e470d0a1a0a...", # required "tts" : "Das ist eine Textdurchsage", # optional "ttsOnce" : "Dieser Text wird nur ein Mal ausgegeben.", # optional "key" : true, # optional "removeOnFallback" : true, # optional "removeTtsOnFallback" : true, # optional "vhcmImg" : "info_1_blind.png", # optional "systemImage" : true, # optional "doNotShow" : true # optional "identify" : false # optional }
Der Wert 'name' gibt an, unter welchem Namen der Bilddateiinhalt im Arbeitsverzeichnis des deZign abgespeichert wird. Pfadangaben im Namen sind nicht zulässig. Wenn 'name' gleich dem Wert für 'realtimeImage' ist, so wird das Bild sofort angezeigt.
Der Wert 'method' weist auf die Methode hin, mit welcher der Bildinhalt kodiert wurde. Aktuell ist hier nur der Wert 'base64' zulässig.
Der Wert 'content' enthält den Inhalt der Bilddatei kodiert im base64-Format.
Als Wertevorrat für die Base64-Kodierung dienen die folgenden Zeichen, wobei 'A' 0x00 und '/' 0x40 entspricht:
- ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
Der Eintrag 'tts' ist optional. Enthält der Wert für 'tts' eine Zeichenkette, so wird dem übermittelten Bild diese Zeichenkette für akustische Ausgaben zugewiesen (bestehende Zuweisungen werden aufgehoben). Ist die Zeichenkette leer, so wird eine bestehende Zuweisung nur aufgehoben. Wenn der Eintrag 'tts' nicht im Request enthalten ist, bleibt eine bestehende Zuweisung unverändert.
Der Eintrag 'ttsOnce' ist optional. Enthält der Wert für 'ttsOnce' eine Zeichenkette, so wird diese Zeichenkette mit Hilfe von Text-To-Speech einmalig akustisch ausgegeben.
Der Eintrag 'key' ist optional. Wird der Wert 'key' angegeben, so wird das Bild für die Nutzung mit Tasten freigegeben oder gesperrt. Wird 'key' nicht angegeben, ändert sich nichts an der Tastennutzungszuordnung.
Der Eintrag 'removeOnFallback' ist optional. Wird der Wert 'removeOnFallback' angegeben, so wird das Bild bei Eintritt eines DCDI-Verbindungsabbruches gelöscht. Wird 'removeOnFallback' nicht angegeben, ändert sich nichts an der Bildkonfiguration.
Der Eintrag 'removeTtsOnFallback' ist optional und default true. Wird der Wert 'removeTtsOnFallback' angegeben, so wird die TTS-Zeichenkette für das Bild bei Eintritt eines DCDI-Verbindungsabbruches gelöscht. Wird 'removeTtsOnFallback' nicht angegeben, ändert sich nichts an der Bildkonfiguration.
Der Eintrag 'vhcmImg' ist optional. Wird der Wert 'vhcmImg' angegeben, so wird dem übermittelten Bild das unter 'vhcmImg' angegebene Bild als Sehbehindertenbild zugewiesen. Wird eine leere Zeichenkette übergeben, dann wird eine bestehende Zuweisung aufgehoben.
Der Eintrag 'systemImage' ist optional. Wird der Wert 'systemImage' angegeben, so wird die Datei im Unterordner “Images” des Arbeitsverzeichnises abgelegt.
Der Eintrag 'doNotShow' ist optional und default false. Ist der Wert für 'doNotShow' true, wird kein Bildwechsel durchgeführt, auch wenn es sich um ein Echtzeitbild handelt.
Das Antworttelegramm hat folgenden Aufbau:
{ "action" : "sendImage", "type" : "response", "id" : "yourId", "errorCode" : 0 }
Mögliche Rückgabewerte für 'sendImage' sind:
0 | o.k., Bild wurde übertragen und gespeichert |
1 | Fehler beim parsen des Json-Requests aufgetreten |
2 | Fehler beim speichern der Datei aufgetreten |
3 | keine Daten angegeben |
9 | Methode nicht unterstützt |
11 | Bild kann nicht angezeigt werde, da PowerFailMode aktiv ist |
Teilinhalte für existierende Bilder senden
Auch Teilinhalte können als Bilder vom Typ JPEG oder PNG übermittelt werden.
Der Request für das Senden von Teilbildinformationen hat den nachfolgenden Aufbau.
{ "action" : "sendImagePart", # required "type" : "request", # required "name" : "part1.png", # required "refName" : "info_1.png", # required "id" : "yourId", # optional "posX" : 100, # required "posY" : 200, # required "method" : "base64", # optional "content" : "89504e470d0a1a0a...", # optional "tts" : "Das ist eine Textdurchsage", # optional "ttsOnce" : "Dieser Text wird nur ein Mal ausgegeben", # optional "clearOverlay" : false, # optional "doNotShow" : true # optional "identify" : false # optional }
Der Request hat grundsätzlich den gleichen Aufbau wie der Request für das Senden kompletter Bildinformationen. Zusätzlich zu den Werten aus dem Telegramm für das Senden kompletter Bilder gibt es die Felder 'refName', 'posX' und 'posY'.
'refName' gibt dabei an, in welches vorhandene Bild der übermittelte Bildinhalt eingefügt werden soll.
Das Referenzbild muss vorhanden sein.
Die Abbildung links verdeutlicht die Positionierung des Teilbildinhaltes. 'posX' gibt den Abstand des Teilbildinhaltes in Pixeln (positive Werte) von der linken Seite des Referenzbildes an, 'poxY' den Abstand in Pixeln (positive Werte) von der oberen Seite des Referenzbildes. Der Teilinhalt für das Referenzbild ist nur ein Overlay im Framebuffer des Gerätes. Die Repräsentation des Referenzbildes als Datei bleibt unverändert. Somit liefert auch die Abfrage der Prüfsumme des Referenzbildes immer den gleichen Inhalt und nach einem Neustart des Gerätes wird das Referenzbild mit seinem ursprünglichen Inhalt geladen. |
---|
Der Eintrag 'tts' ist optional. Enthält der Wert für 'tts' eine Zeichenkette, so wird dem referenzierten Bild diese Zeichenkette für akustische Ausgaben zugewiesen (bestehende Zuweisungen werden aufgehoben). Ist die Zeichenkette leer, so wird eine bestehende Zuweisung nur aufgehoben. Wenn der Eintrag 'tts' nicht im Request enthalten ist, bleibt eine bestehende Zuweisung unverändert.
Der Eintrag 'ttsOnce' ist optional. Enthält der Wert für 'ttsOnce' eine Zeichenkette, so wird diese Zeichenkette mit Hilfe von Text-To-Speech einmalig akustisch ausgegeben.
Der Eintrag 'clearOverlay' ist optional und default true. Ist der Wert für 'clearOverlay' true, werden alle vorher durchgeführten Änderungen am Referenzbild gelöscht und es wird nur mit dem Referenzbild gearbeitet.
Die Einträge 'content' und 'method' sind optional. Wenn diese Einträge nicht gesetzt sind, wird der mit 'name' angegebene Inhalt im Verzeichnis der System-Bilder gesucht.
Der Eintrag 'doNotShow' ist optional und default false. Ist der Wert für 'doNotShow' true, wird kein Bildwechsel durchgeführt, auch wenn es sich um partielle Daten für ein Echtzeitbild handelt.
Das Antworttelegramm hat folgenden Aufbau:
{ "action" : "sendImagePart", "type" : "response", "id" : "yourId", "errorCode" : 0 }
Mögliche Rückgabewerte für 'sendImagePart' sind:
0 | o.k., Einfügen erfolgreich |
1 | Fehler beim parsen des Json-Requests aufgetreten |
3 | Referenzbild nicht vorhanden oder System-Bild nicht vorhanden |
11 | Bild kann nicht angezeigt werde, da PowerFailMode aktiv ist |
Bilder anzeigen
Der Request für das Anziegen vorhandener Bildinformationen hat den nachfolgenden Aufbau.
{ "action" : "showImage", # required "type" : "request", # required "name" : "info_1.png", # required "id" : "yourId", # optional "tts" : "Das ist eine Textdurchsage" # optional "identify" : false # optional }
Der Wert 'name' gibt an, welches der vorhandenen auf dem Display angezeigt werden soll. Pfadangaben im Namen sind nicht zulässig.
Der Eintrag 'tts' ist optional. Enthält der Wert für 'tts' eine Zeichenkette, so wird dem anzuzeigenden Bild diese Zeichenkette für akustische Ausgaben zugewiesen (bestehende Zuweisungen werden aufgehoben). Ist die Zeichenkette leer, so wird eine bestehende Zuweisung nur aufgehoben. Wenn der Eintrag 'tts' nicht im Request enthalten ist, bleibt eine bestehende Zuweisung unverändert.
Das Antworttelegramm hat folgenden Aufbau:
{ "action" : "showImage", "type" : "response", "id" : "yourId", "errorCode" : 0 }
Mögliche Rückgabewerte für 'sendImage' sind:
0 | o.k., Anzeigen des Bild wurde angewiesen |
1 | Fehler beim parsen des Json-Requests aufgetreten |
2 | Fehler beim speichern der Datei aufgetreten |
11 | Bild kann nicht angezeigt werde, da PowerFailMode aktiv ist |
Prüfen, ob eine Datei vorhanden ist
Die nachfolgende Anfrage ermöglicht es zu prüfen, ob eine Datei bereits vorhanden ist.
{ "action" : "imagePresent", # required "type" : "request", # required "name" : "info_1.png", # required "id" : "yourId", # optional "systemImage" : false, # optional "identify" : false # optional }
Wenn 'systemImage' gesetzt ist, wird im Unterverzeichnis Images des Arbeitsverzeichnisses nach der Datei gesucht.
Wenn die Datei im Arbeitsverzeichnis des deZigns vorhanden ist, könnte die Antwort folgendermaßen aufgebaut sein:
{ "action" : "imagePresent", "type" : "response", "id" : "yourId", "errorCode" : 0, "checksum" : "da39a3ee5e6b4b0d3255bfef95601890afd80709" }
Der Wert 'checksum' enthält eine Zeichenkette der 20 Byte langen SHA1-Prüfsumme des Dateiinhaltes im hexadezimal-kodierten Format. Das heißt, wenn die Datei vorhanden ist, enthält dieses Feld immer eine 40 Zeichen lange Zeichenkette. Die Beispielantwort enthält die SHA1-Prüfsumme für 0 geprüfte Zeichen.
Mit der nachfolgenden Antwort ist zu rechnen, wenn die Datei nicht vorhanden ist. In diesem Fall bleibt der Wert 'checksum' leer.
{ "action" : "imagePresent", "type" : "response", "id" : "yourId", "errorCode" : 3, "checksum" : "" }
Mögliche Rückgabewerte für 'imagePresent' sind:
0 | o.k., Bild ist vorhanden |
1 | Fehler beim parsen des Json-Requests aufgetreten |
3 | Datei nicht vorhanden |
Datei vom Gerät downloaden
Die nachfolgende Anfrage ermöglicht es den Inhalt einer Datei vom Gerät herunterzuladen.
{ "action" : "getFile", # required "type" : "request", # required "name" : "info_1.png", # required "id" : "yourId", # optional "systemImage" : false # optional "identify" : false # optional }
Wenn 'systemImage' gesetzt ist, wird im Unterverzeichnis Images des Arbeitsverzeichnisses nach der Datei gesucht.
Wenn die Datei erfolgreich geladen wurde, könnte die Antwort folgendermaßen aufgebaut sein:
{ "action" : "getFile", "type" : "response", "id" : "yourId", "method" : "base64", "content" : "89504e470d0a1a0a...", "errorCode" : 0 }
Der Wert 'content' enthält den base64-kodierten Inhalt der Datei.
Mit der nachfolgenden Antwort ist zu rechnen, wenn die Datei nicht vorhanden ist. In diesem Fall bleibt der Wert 'content' leer.
{ "action" : "getFile", "type" : "response", "id" : "yourId", "method" : "base64", "content" : "", "errorCode" : 3 }
Mögliche Rückgabewerte für 'getFile' sind:
0 | o.k., Bild ist vorhanden |
1 | Fehler beim parsen des Json-Requests aufgetreten |
3 | Datei nicht vorhanden |
10 | Fehler beim Laden des Dateiinhaltes |
Löschen einer Datei
Mit der nachfolgenden Anfrage kann eine Datei gelöscht werden.
{ "action" : "removeImage", # required "type" : "request", # required "name" : "info_1.png", # required "id" : "yourId", # optional "systemImage" : false # optional "identify" : false # optional }
Platzhalter (z.B. *) im Feld 'name' sind nicht erlaubt.
Wenn 'systemImage' gesetzt ist, wird im Unterverzeichnis Images des Arbeitsverzeichnisses nach der Datei gesucht.
Die Antwort auf 'removeImage':
{ "action" : "removeImage", "type" : "response", "id" : "yourId", "errorCode" : 0 }
Mögliche Rückgabewerte für 'removeImage' sind:
0 | o.k., Bild ist vorhanden |
1 | Fehler beim parsen des Json-Requests aufgetreten |
3 | Datei nicht vorhanden |
4 | Fehler beim Löschen der Datei |
Zurücksetzen der statistischen Werte
Das Gerät erfasst
Mit der nachfolgenden Anfrage können statistische Werte zurückgesetzt werden.
{ "action" : "resetStatistic", # required "type" : "request", # required "id" : "yourId" # optional }
Die Antwort auf 'resetStatistic':
{ "action" : "resetStatistic", "type" : "response", "id" : "yourId", "errorCode" : 0 }
Mögliche Rückgabewerte für 'resetStatistic' sind:
0 | o.k., Zurücksetzen erfolgreich |
1 | Fehler beim parsen des Json-Requests aufgetreten |
Rückfallebene
Sollte es während des Betriebs zu einem Verbindungsabbruch kommen, ist es möglich das Gerät ein bestimmtes Bild als Rückfallebene anzeigen zu lassen ('noConnectionFallbackImage', siehe Abschnitt 'einstellbare Parameter abfragen' und 'Parameter ändern'). Wenn der Parameter 'noConnectionFallbackTime' auf einen gültigen Wert gesetzt ist, wird im System ein Countdown geführt, der bei Empfang eines beliebigen Bildes zurückgesetzt wird und nach Ablauf des Countdowns das parametrierte Echtzeitbild löscht und die Anzeige des Bildes 'noConnectionFallbackImage' initiiert.
Einstellbare Parameter abfragen
Die Anfrage für detaillierte Informationen ist wie nachfolgend aufgebaut.
{ "action" : "parameterDescription", # required "type" : "request", # required "id" : "yourId" # optional "identify" : false # optional }
Die Antwort auf 'parameterDescription':
{ "action" : "parameterDescription", "type" : "response", "id" : "yourId", "errorCode" : 0, "availableParameter" : [ { "name" : "defaultImage", "type" : "string", "default" : "info1.png", "currentValue" : "info1.png", "invalidValue" : "", "editable" : true }, { "name" : "realtimeImage", "type" : "string", "default" : "info2.png", "currentValue" : "info2.png", "invalidValue" : "", "editable" : true }, { "name" : "defaultImageFallbackTime", "type" : "unsigned int", "default" : 30, "unit" : "seconds", "minValue" : 0, "maxValue" : 360, "currentValue" : 10, "invalidValue" : 0, "editable" : true }, { "name" : "realTimeStrikesPassengerInput", "type" : "boolean", "default" : false, "currentValue" : false, "editable" : true }, { "name" : "sendNotificationOnImgChange", "type" : "boolean", "default" : true, "currentValue" : true, "editable" : true }, { "name" : "sendNotificationStatus", "type" : "unsigned int", "default" : 30, "unit" : "seconds", "minValue" : 0, "maxValue" : 31536000, "currentValue" : 30, "invalidValue" : 0, "editable" : true }, { "name" : "serial", "type" : "unsigned int", "currentValue" : 123456, "editable" : false }, { "name" : "noConnectionFallbackImage", "type" : "string", "default" : "ncFallback.png", "currentValue" : "ncFallback.png", "editable" : true }, { "name" : "noConnectionFallbackTime", "type" : "unsigned int", "default" : 180, "unit" : "seconds", "minValue" : 0, "maxValue" : 1200, "currentValue" : 180, "invalidValue" : 0, "editable" : true }, { "name" : "restartMobileDeviceOnFallback", "type" : "boolean", "default" : false, "currentValue" : false, "editable" : true }, { "name" : "deviceName", "type" : "string", "currentValue" : "testDevice", "editable" : true }, { "name" : "deleteRealtimeImageOnFallback", "type" : "boolean", "default" : true, "currentValue" : true, "editable" : true }, { "name" : "deleteRealtimeTtsOnFallback", "type" : "boolean", "default" : true, "currentValue" : true, "editable" : true }, { "name" : "deleteRealtimeVhciTtsOnFallback", "type" : "boolean", "default" : true, "currentValue" : true, "editable" : true } ] }
Mögliche Rückgabewerte für 'parameterDescription' sind:
0 | o.k. |
1 | Fehler beim parsen des Json-Requests aufgetreten |
5 | Fehler beim Lesen der Parameterbeschreibung |
'defaultImage' beinhaltet den Namen des Rückfallbildes in das gewechselt wird, wenn die Zeit 'defaultImageFallbackTime' nach einer Fahrgasteinagbe (z.B. nach betätigen eines Tasters) abgelaufen ist. 'realtimeImage' gibt an, welcher Bildbezeichner für Echtzeitinformationen vorgesehen ist.
Wenn 'realtimeImage' angegeben ist und 'realTimeStrikesPassengerInput' auf true gesetzt wurde, dann überschreiben neu ankommende Echtzeitdaten die Fahrgasteingabe, d.h. es findet unmittelbar ein Bildwechsel statt, auch wenn nach der letzten Fahrgasteingabe die Zeit 'defaultImageFallbackTime' noch nicht abgelaufen ist.
'sendNotificationOnImgChange' gibt an, ob nach einem Bildwechselversuch eine Mitteilung an den Server gesendet warden soll.
'sendNotificationStatus' gibt an, ob und in welchem Zeitabstand Statusinformationen an den Server gesendet werden sollen.
Das Setzen des Parameters 'restartMobileDeviceOnFallback' bewirkt, dass beim Wechsel in die Rückfallebene nach Ablauf der Zeit 'noConnectionFallbackTime' auch das Mobilfunkmodem neugestartet wird, sofern ein solches vorhanden und aktiv ist.
Das Setzen des Parameters 'deleteRealtimeImageOnFallback' bewirkt, dass beim Wechsel in die Rückfallebene nach Ablauf der Zeit 'noConnectionFallbackTime' auch das Echtzeitbild gelöscht wird, sofern ein dieses vorhanden. Das Setzen der Parameter 'deleteRealtimeTtsOnFallback' und 'deleteRealtimeVhciTtsOnFallback' bewirkt, dass beim Wechsel in die Rückfallebene ein eventuell vorhandener TTS-Eintrag für das Echtzeitbild bzw. für das Sehbehindertenbild, welches dem Echtzeitbild zugewiesen sein könnte, gelöscht wird. Dadurch wird der Gefahr entgegengewirkt, dass dem Fahrgast eventuell falsche Echtzeitinformationen dargestellt oder aktustisch ausgegeben werden.
Wenn nur die eingestellten Werte der Parameter abgefragt werden sollen, kann die folgende Anfrage verwendet werden.
{ "action" : "parameter", "type" : "request", "id" : "yourId", # optional "identify" : false # optional }
Die Antwort auf 'parameter':
{ "action" : "parameter", "type" : "response", "id" : "yourId", "errorCode" : 0, "availableParameter" : [ { "name" : "defaultImage", "currentValue" : "info1.png" }, { "name" : "realtimeImage", "currentValue" : "info2.png" }, { "name" : "defaultImageFallbackTime", "currentValue" : 10 }, { "name" : "realTimeStrikesPassengerInput", "currentValue" : false }, { "name" : "sendNotificationOnImgChange", "currentValue" : true }, { "name" : "sendNotificationStatus", "currentValue" : 30 }, { "name" : "serial", "currentValue" : 123456 }, { "name" : "noConnectionFallbackImage", "currentValue" : "ncFallback.png" }, { "name" : "noConnectionFallbackTime", "currentValue" : 180 }, { "name" : "restartMobileDeviceOnFallback", "currentValue" : false, }, { "name" : "deviceName", "currentValue" : "testDevice" }, { "name" : "deleteRealtimeImageOnFallback", "currentValue" : true }, { "name" : "deleteRealtimeTtsOnFallback", "currentValue" : true }, { "name" : "deleteRealtimeVhciTtsOnFallback", "currentValue" : true } ] }
Mögliche Rückgabewerte für 'parameterDescription' sind:
0 | o.k. |
1 | Fehler beim parsen des Json-Requests aufgetreten |
Parameter ändern
Die Anfrage zum Ändern von Parametern ist wie nachfolgend aufgebaut.
{ "action" : "changeParameter", # required "type" : "request", # required "id" : "yourId", # optional "name": "sendNotificationStatus", # required "value" : 0 # required "identify" : false # optional }
Der Wert 'value' muss einen Wert entsprechend der Parameterbeschreibung enthalten.
Die Antwort für 'changeParameter':
{ "action" : "changeParameter", "type" : "response", "id" : "yourId", "errorCode" : 0 }
Mögliche Rückgabewerte für 'changeParameter' sind:
0 | o.k. |
1 | Fehler beim parsen des Json-Requests aufgetreten |
6 | Wert liegt außerhalb des gültigen Wertebereiches |
Uhrzeit des Gerätes setzen
Die Anfrage zum Setzen der Systemuhrzeit ist wie nachfolgend aufgebaut.
{ "action" : "setSystemTime", # required "type" : "request", # optional "id" : "yourId", # optional "format" : "localtime", # required "year": 2016, # required "month": 04, # required "day": 25, # required "hour": 11, # required "minute": 55, # required "second": 0 # required "identify" : false # optional }
Der Beispiel-Request setzt die lokale Uhrzeit des Gerätes auf 11:55 Uhr und 0 Sekunden und das Datum auf den 25. April 2016. Für den Wert 'format' ist aktuell ausschließlich 'localtime' zulässig.
Die Antwort für 'setSystemTime':
{ "action" : "setSystemTime", "type" : "response", "id" : "yourId", "errorCode" : 0 }
Mögliche Rückgabewerte für 'setSystemTime' sind:
0 | o.k. |
1 | Fehler beim parsen des Json-Requests aufgetreten |
8 | Fehler beim Setzen der Uhrzeit |
9 | das angegebene Format wird nicht unterstützt |
Framebuffer-Inhalt auslesen
Mit Hilfe des Telegramms 'retrieveFrameBufferContent' kann der Soll-Bildinhalt des Gerätes zurückgeselsen werden. Der Framebuffer-Inhalt kann nur als PNG abgerufen werden. Die Angabe von mimeType ist optional und für zukünftige Zwecke reserviert (default ist 'image/png').
{ "action" : "retrieveFramebufferContent", # required "type" : "request", # required "id" : "yourId", # optional "mimeType" : "image/png" # optional "identify" : false # optional }
Die Antwort für 'retrieveFrameBufferContent':
{ "action" : "retrieveFramebufferContent", "type" : "response", "id" : "yourId", "mimeType" : "image/png", "method" : "base64", "content" : "89504e470d0a1a0a...", "errorCode" : 0 }
Mögliche Rückgabewerte für 'retrieveFrameBufferContent' sind:
0 | o.k. |
1 | Fehler beim parsen des Json-Requests aufgetreten |
9 | das angegebene Format wird nicht unterstützt (mimeType) |
10 | Verarbeitungsfehler beim erzeugen des Abbildes |
System neustarten
Mit Hilfe des Telegramms 'restartSystem' können Systemteile oder das ganze System neu gestartet werden.
Nachfolgende ein beispielhafter Aufbau des 'restartSystem'-Telegramms:
{ "action" : "restartSystem", # required "type" : "request", # required "id" : "yourId", # optional "mode" : "powerDown", # optional "delay" : 5, # optional "offTime" : 60 # optional "identify" : false # optional }
Beschreibung der zusätzlichen Elemente:
mode | String, optional, default: 'app', mögliche Werte:
| ||||||||
delay | Integer, optional, default: 0, min: 0, max: 20 Delay gibt die Verzögerung bis zum Ereignis in Sekunden an. Wenn delay 0 ist, dann wird das Ereignis unimttelbar ausgelöst. In diesem Fall wird u.U. kein Antworttelegramm zurückgesendet. | ||||||||
offTime | Integer, optional, default: 60, min: 5, max: 300 offTime gibt die Abschaltdauer für den powerDown-Mode in Sekunden an. |
Die Antwort für 'restartSystem':
{ "action" : "restartSystem", "type" : "response", "id" : "yourId", "errorCode" : 0 }
Mögliche Rückgabewerte für 'restartSystem' sind:
0 | o.k. |
1 | Fehler beim parsen des Json-Requests aufgetreten |
9 | Mode nicht unterstützt |
Mobilfunkzustand abfragen
Mit Hilfe des Telegramms 'getMobileState' kann der Zustand des Mobilfunksystems abgerufen werden.
Nachfolgende der Aufbau des 'getMobileState'-Telegramms:
{ "action" : "getMobileState", # required "type" : "request", # required "id" : "yourId", # optional "deviceInfo" : true, # optional "simInfo" : true # optional "identify" : false # optional }
Beschreibung der zusätzlichen Elemente:
deviceInfo | Boolean, optional, default: false, wenn true, dann enthält die Antwort Informationen zum Gerät |
simInfo | Boolean, optional, default: false, wenn true, dann enthält die Antwort Informationen zur SIM-Karte |
Die Antwort für 'getMobileState':
{ "action" : "getMobileState", "type" : "response", "id" : "yourId", "device" : { "manufacturer" : "telit", "product" : "he-910-d", "imei" : "351579055236531" }, "sim" : { "number" : "+467190002733887", "ccid" : "89460800202007608239", "imsi" : "240080000760823", "PIN" : "1111" }, "operation" : { "lac" : "35221", "cid" : "212354", "rssi" : -91, "ranType" : "UTRAN" }, "errorCode" : 0 }
Mögliche Rückgabewerte für 'getMobileState' sind:
0 | o.k. |
1 | Fehler beim parsen des Json-Requests aufgetreten |
Gerätespezifische Einstellungen vornehmen
Mit Hilfe des Telegramms 'configureDevice' können gerätespezifische Einstellungen vorgenommen werden.
Nachfolgende ein beispielhafter Aufbau des 'configureDevice'-Telegramms:
{ "action" : "configureDevice", # required "type" : "request", # required "id" : "yourId", # optional "mobile" : { # optional "pingCheck" : { # optional "server" : "8.8.8.8", # required "interval" : 15, # optional "errTrials" : 4 # optional "pauseIfTraffic" : false # optional }, # optional "sim" : { # optional "PIN" : "1111" # required }, }, "general" : { # optional "name" : "device" , # optional "globalPosition" : { # optional "latitude" : 51.01, # required "longitude" : 13.78 # required }, }, "audio" : { # optional "volume" : 80 # optional }, "illumination" : { # optional "pwmRatio" : 50 # optional }, "heating" : { # optional "updateTime" : 43200, # required "minUpdateTemp" : -20, # required "balanceTime" : 3, # required "updateTemp" : 5, # required "temper" : true # required }, "powerSupply" : { # optional "hwType" : 3 # optional }, "powerFail" : { # optional "active" : true, # required "sleepIfLowPower" : false, # required "lowVolt" : 11.8, # required "fallbackImages" : [ # required "lowVolt_all.png", "lowVolt_frame1.png" ] }, "sleepmode" : { # optional "active" : true, # required "timeslots" : [ # required { "name" : "time slot 1 – high noon", # required "start" : 43200, # required "stop" : 46800, # required "dab" : false, # optional "mobile" : true # optional } ], "fallbackActive" : true, # required "fallbackImages" : [ # required "lowVolt_all.png", "lowVolt_frame1.png" ] }, "dcdi" : { # optional "defaultImage" : "defaultImage.png", # optional "realtimeImage" : "realtimeImage.png", # optional "defaultImageFallbackTime" : 15, # optional "realTimeStrikesPassengerInput" : false, # optional "sendNotificationOnImgChange" : true, # optional "sendNotificationStatus" : 30, # optional "noConnectionFallbackImage" : "fallbackImage.png", # optional "noConnectionFallbackTime" : 180, # optional "restartMobileDeviceOnFallback" : false, # optional "deleteRealtimeImageOnFallback" : true, # optional "deleteRealtimeTtsOnFallback" : true, # optional "deleteRealtimeVhciTtsOnFallback" : true # optional } }
Beschreibung der zusätzlichen Elemente:
Im Object mobile kann die Verbindungsprüfung mit pingcheck eingestellt werden. mobile.pingCheck.server wird aller mobile.pingCheck.interval Sekunden angepingt. Wenn das Anpingen mobile.pingCheck.errTrials Versuche hintereinander fehlschlagen, wird die Verbindung neu gestartet.
Mit mobile.sim.PIN kann die Pin der SIM-Karte eingestellt werden.
Mit dem Objet general kann der Gerätename und die Geräte-Position eingestellt werden.
Die Einstellung audio.volume verändert die Lautstärke der Audio-Ausgabe.
Die Einstellung illumination.pwmRatio legt das Tast-Verhältnis der PWM für die Beleuchung fest.
Mit dem Objekt heating kann die Heizung parametriert werden. heating.updateTime ist der tägliche Update-Zeitpunkt (in Sekunden seit Tagesanbruch, nur relevant für Planungen). Unter einer Temperatur von heating.minUpdateTemp in °C wird nicht geheizt. Liegen die Geräte-Temperaturen unter diesem Wert, sind keine Bildwechsel möglich. heating.balanceTime ist die Ausgleichszeit zum homogenisieren der Temperatur des Display zwischen Erreichen der Temperatur updateTemp und dem Bildupdate.
Ist temper true, so wird die Dislay-Temperatur durch regelmäßiges Heizen innerhalb Temperaturgerenzen updateTemp + 1 °C und updateTemp + 4 °C gehalten.
Der Optionale Wert powerSupply.hwType kann zum Ändern der eingestellten Art der Spannungsversorgung verwendet werden. In der nachfolgenden Tabelle sind zulässige Werte aufgeführt.
hwType - Wert | Bedeutung |
0 | 12V-Akku-Betrieb |
1 | 230V-Betrieb |
2 | 12V-Netzteil-Betrieb |
Das Objekt powerFail dient zum setzen der PowerFail-Einstellungen. Der Bool-Wert active aktiviert den PowerFail-Mode.
lowVolt gibt den Spannungswert an, bei dessen Unterschreitung für mehr als 30 Sekunden der PowerFail-Mode aktiviert wird.
Ist sleepIfLowPower gesetzt, so wird nach dem Anzeigen der PowerFail-Bilder der Sleep-Mode aktiviert (und bleibt solange erhalten, bis die System-Spannung den Wert lowVolt + 1,5V überschreitet).
Das String-Array fallbackimages sollte die Bilder auflisten, auf die bei Aktivierung des PowerFail-Modes auf den jeweiligen Displays gewechselt werden soll.
Die Option gibt an, ob das Unterspannungssignal des Power-Backup-Moduls berücksichtigt werden soll (nur sinnvoll im 230V-Betrieb, sowie bei Betrieb mit externem 12V-Netzteil).
Im Objekt sleepmode kann mit sleepmode.active festgeleget werden, ob das Gerät zum Sparen von Energie schlafen soll. Das Array sleepmode.timeslots enthält dabei Wachzeitfenster, die einen Namen und start- sowie stop-Zeitpunkte (in Sekunden seit Tagesanbruch) enthalten müssen. Optional kann mit dab oder mobile festgelegt werden, ob der DAB-Empfang bzw. Der Mobilfunkbetrieb aktiv sein soll. fallbackActive und fallbackImages definieren Aktionen für das Display / die Displays analog zu powerFail jedoch für den geplanten Wechsel in den SleepMode.
Die Option sendNotificationOnConfigChanged aktiviert das Senden von Meldungen für den Fall, dass sich die Geräte-Einstellungen und/oder die Einstellungen der vorhandenen Bilder ändern.
Die Option sendNotificationOnRtImgChange aktiviert das Senden von Meldungen für den Fall, dass Echtzeit-Bildupdates über DCDI getriggert wurden.
Erläuterungen zum Object dcdi sind im Abschnitt 'Einstellbare Parameter abfragen' aufgeführt.
Die Antwort für 'configureDevice':
{ "action" : "configureDevice", "type" : "response", "id" : "yourId", "errorCode" : 0 }
Mögliche Rückgabewerte für 'configureDevice' sind:
0 | o.k. |
1 | Fehler beim parsen des Json-Requests aufgetreten |
Netzwerkzustand abfragen
Mit Hilfe des Telegramms 'getNetworkState' kann der Zustand der Netzwerkschnittstellen abgerufen werden.
Nachfolgende der Aufbau des 'getNetworkState'-Telegramms:
{ "action" : "getNetworkState", # required "type" : "request", # required "id" : "yourId" # optional "identify" : false # optional }
Eine beispielhafte Antwort für 'getNetworkState':
{ "action" : "getNetworkState", "type" : "response", "id" : "yourId", "networkInterfaces" : [ { "name" : "eth0", "address" : "192.168.0.2", "mac" : "a0:f6:fd:4c:80:10", "netmask" : "255.255.255.0", "broadcast" : "192.168.80.255", "p-t-p" : "" }, { "name" : "ppp0", "address" : "10.102.101.218", "mac" : "", "netmask" : "255.255.255.255", "broadcast" : "", "p-t-p" : "10.102.101.218" } ], "errorCode" : 0 }
Mögliche Rückgabewerte für 'getNetworkState' sind:
0 | o.k. |
1 | Fehler beim parsen des Json-Requests aufgetreten |
Dateiliste abfragen
Mit Hilfe des Telegramms 'getFileList' kann eine Liste vorhandener Dateien abgefragt werden.
Nachfolgende der Aufbau des 'getFileList'-Telegramms:
{ "action" : "getFileList", # required "type" : "request", # required "id" : "yourId", # optional "listFonts" : true, # optional "listLogs" : true, # optional "checksum" : true # optional "identify" : false # optional }
Beschreibung der zusätzlichen Elemente:
listFonts | Boolean, optional, default: true, wenn true, dann enthält die Antwort eine Liste der Fonts |
listLogs | Boolean, optional, default: true, wenn true, dann enthält die Antwort eine Liste der Log-Dateien |
checksum | Boolean, optional, default: false, wenn true, dann enthält jeder Dateieintrag in images und sysImages den -String-Wert checksum mit der SHA1-Prüfsumme der Datei. |
Die Antwort für 'getFileList':
{ "action" : "getFileList", "type" : "response", "id" : "yourId", "fonts" : [ { "name" : "ARIAL.TTF", "size" : 778552, "checksum" : "da39a3ee5e6b4b0d3255bfef95601890afd80709" }, { "name" : "ARIALBD.TTF", "size" : 749004, "checksum" : "da39a3ee5e6b4b0d3255bfef95601890afd80709" } ], "images" : [ { "name" : "tux.png", "size" : 123456, "vhcmImg" : "tux_for_visual_handicapped.png", "ttsText" : "talk to me", "key" : true, "removeOnFallback" : true, "removeTtsOnFallback" : true, "checksum" : "da39a3ee5e6b4b0d3255bfef95601890afd80709" }, { "name" : "tux_for_visual_handicapped.png", "size" : 123456, "vhcmImg" : "", "ttsText" : "talk to me again", "key" : true, "removeOnFallback" : true, "removeTtsOnFallback" : true, "checksum" : "da39a3ee5e6b4b0d3255bfef95601890afd80709" } ], "sysImages" : [ { "name" : "someStaticContent.png", "size" : 123456, "checksum" : "da39a3ee5e6b4b0d3255bfef95601890afd80709" } ], "errorCode" : 0 }
Mögliche Rückgabewerte für 'getFileList' sind:
0 | o.k. |
1 | Fehler beim parsen des Json-Requests aufgetreten |
Geräte-Informationen abfragen
Mit Hilfe des Telegramms 'getDeviceInfo' können Geräte-Informationen abgerufen werden.
Nachfolgende der Aufbau des 'getDeviceInfo'-Telegramms:
{ "action" : "getDeviceInfo", # required "type" : "request", # required "id" : "yourId" # optional "identify" : false # optional }
Eine beispielhafte Antwort für 'getDeviceInfo':
{ "action" : "getDeviceInfo", "type" : "response", "id" : "yourId", "storage" : [ { "devName" : "mmcblk0", "vendor" : "Micron", "name" : "MMC04", "serial" : "1117166758", "size" : "3.93 GB" }, { "devName" : "mmcblk1", "vendor" : "SanDisk", "name" : "SA08G", "serial" : "257605795", "size" : "7.95 GB" } ], "powerSupply" : { "hwType" : 0, "detected230V" : false }, "errorCode" : 0 }
Mögliche Rückgabewerte für 'getDeviceInfo' sind:
0 | o.k. |
1 | Fehler beim parsen des Json-Requests aufgetreten |
Zulässige Werte für powerSupply.hwType sind im Abschnitt 'gerätespezifische Einstellungen vornehmen' aufgeführt.
Meldungen
Meldungen werden ereignisgesteuert und unaufgefordert vom deZign an den Server gesandt (z.B. nach einem Bildupdate-Versuch). Alle Meldungen enthalten den Wert 'serial', der zur Geräteidentifizierung dient.
Bildwechsel durchgeführt
Die Meldung über einen durchgeführten Bildwechsel wird nur versandt, wenn der Parameter 'sendNotificationOnImgChange' auf true gesetzt ist. Die Meldung hat den nachfolgenden Aufbau.
{ "action" : "imageUpdate", "type" : "notification", "serial" : 123456, "name" : "info_1.png", "deviceName" : "testDevice", "errorCode" : 0 }
Der Wert 'name' enthält den Namen des Bildes, welches angezeigt wird.
Mögliche Werte für 'errorCode' in der Meldung 'imageUpdate' sind:
0 | ok |
7 | Bildupdate fehlgeschlagen |
Änderungen sind eingetreten
Die Meldung über eingetretene Änderungen wird nur versandt, wenn der Parameter 'sendNotificationOnConfigChanged' auf true gesetzt ist. Die Meldung hat den nachfolgenden Aufbau.
{ "action" : "change", "type" : "notification", "serial" : 123456, "deviceName" : "testDevice", "subject" : "config", "errorCode" : 0 }
Der Wert 'subject' kann 'config' oder 'images' einnehmen und verweist daruf, was sich auf dem Gerät geändert hat.
Mögliche Werte für 'errorCode' in der Meldung 'change' sind:
0 | ok |
Status-Informationen
Die Status-Meldung wird gesendet, wenn für den Parameter 'sendNotificationStatus' ein Wert größer als 0 eingestellt wurde.
Die Status-Meldung hat den nachfolgenden Aufbau:
{ "action" : "state", "type" : "notification", "serial" : 123456, "deviceName" : "testDevice", "state" : { "temp1" : { "value" : -5, "unit" : "degree" }, "temp2" : { "value" : -3, "unit" : "degree" }, "tempCase" : { "value" : -1, "unit" : "degree" }, "humidity" : { "value" : 20, "unit" : "percent" }, "dewPoint" : { "value" : -12, "unit" : "degree" }, "heating" : { "value" : 0 }, "energy" : { "value" : 0.01, "unit" : "kWh" }, "operatingTime" : { "value" : 1440, "unit" : "minutes" }, "key0KeystrokeCount" : { "value" : 100 }, "key7KeystrokeCount" : { "value" : 100 }, "key9KeystrokeCount" : { "value" : 100 }, "key10KeystrokeCount" : { "value" : 404 }, "vhcmActivationCount" : { "value" : 30 }, "sysVoltage" : { "value" : 12000, "unit" : "mV" }, "freeRam" : { "value" : 40, "unit" : "%" }, "cpuLoad" : { "value" : 30, "unit" : "%" }, "epdcState" : true, "powerFailModeActive" : false, "illuminationActive" : false, "mobile" : { "rssi" : { "value" : -63, "unit" : "dbm" } } }, "errorCode" : 0 # vorhanden, wenn Antwort auf Request }
temp1 und temp2 geben die Temperaturen des Displays 1 bzw. 2 an. tempCase gibt die Temperatur im Inneren des Gehäuses an. Alle Temperaturwerte werden in Grad Celsius angegeben.
humidity gibt die relative Luftfeuchtigkeit in Prozent im Gerät an. dewPoint gibt die theoretische Taupunkttemperatur in Grad Celsius im Gerät an. heating gibt an, ob die Heizung im Moment aktiv ist. energy gibt die aufgenommene Energie in kWh an. operatingTime gibt die Betriebszeit in Minuten an. key0keystrokeCount gibt die Anzahl der Betätigungen der Taste 0 an.
sysVoltage gibt die Systemspannung an.
epdcState gibt den Gesamt-Status aller EPD-Controller an (true: Bildupdates funktionieren, false: es treten Probleme bei Bildupdates auf).
Keep-Alive
Die Keep-Alive-Funktionalität ermöglicht es, zügig eine Verbindungsunterbrechung zwischen Server und Client zu detektieren.
Der Client sendet unmittelbar nach seinem connect eine Keep-Alive-Anfrage zum Server. Bekommt der Client eine Antwort, so aktiviert der Client seine Keep-Alive-Funktionalität. Auch der Server muss für diesen Client Keep-Alive-Funktionalität aktivieren.
Die Zykluszeit für Keep-Alive-Requests liegt bei einer Minute. Der Client erwartet innerhalb der halben Zykluszeit nach dem Absenden der Anfrage eine Antwort. Der Server erwartet innerhalb der 1,5-fachen Zykluszeit nach der letzten eingetroffenen Anfrage eine neue Anfrage.
Entfallen Antworten binnen einer gewissen Reaktionszeit (doppelte Zykluszeit), so wird die Verbindung auf Client-Seite abgebaut und erneut aufgebaut (auf Server-Seite nur Schließen der Verbindung).
Eine Keep-Alive-Anfrage ist wie nachfolgend aufgebaut.
{ "action" : "keepAlive", "type" : "request", "id" : 1, "serial" : 123456 }
Die Antwort auf die vorangegangene 'keepAlive'-Anfrage muss für den Wert 'id' den gleichen Zahlenwert wie in der Anfrage enthalten, damit der Client sicherstellen kann, welche Anfrage beantwortet wurde. Der Wert für 'id' wird mit jdeder Anfrage inkrementiert, so dass auch der Server erfassen kann, ob alle Anfragen vom Client empfangen wurden. Der Wertebereich für 'id' umfasst ganzahlige Zahlen zwischen 1 und 100, wobei die Zahlen 1 und 100 zum Wertebereich zählen. Nach dem Wert 100 wird erneut bei 1 begonnen.
Der Client erwartet Antworten auf Keep-Alive-Anfragen in folgender Form:
{ "action" : "keepAlive", "type" : "response", "id" : 1 }