JMRI: Servlet Json
Le Servlet Json JMRI fournit l'accès web à des listes et des valeurs pour de nombreuses entités JMRI définies, dans le format moderne JSON. Il fournit aussi une interface WebSocket pour faire changer les statuts de ces entités, et écouter les changements externes.
La fonction HTTP GET du servlet répond au modéle URL suivant:- /json/cars
- /json/cars/<ID>
- /json/sensors
- /json/sensors/<name>
- les demandes de liste dans le formulaire:
{"type":"list","list":"trains"}qui sont passées à JsonLister pour gestion. - status individuelle des éléments requis dans le
formulaire
{"type":"turnout","data":{"name":"LT14"}}qui sont transmises aux gestionnaires spécifiques. Ces demandes initieront les "auditeurs" qui enverront réponses mises à jour à chaque changement d'état de l'élément.- l'état d'un élément peut être réglé par l'ajout d'un nœud d'état
au nœud données dans une requête HTTP POST:
{"type":"turnout","data":{"name":"LT14","state":4}} - Des types différents peuvent être créés si la requête est une requête HTTP PU.Notez que tous les types supportent ceci
- l'état d'un élément peut être réglé par l'ajout d'un nœud d'état
au nœud données dans une requête HTTP POST:
- une pulsation dans le formulaire
*ou{"type":"ping"}. La*Pulsation n'obtient pas de réponse, tandis que la pulsation JSON provoque une{"type":"pong"}réponse. - un signoff dans le formulaire:
{"type":"goodbye"}pour lequel une réponse identique est envoyée avant que la connexion ne se ferme.
Exemple de commandes et réponses:
| commande | réponse | notes |
|---|---|---|
{"type":"sensor","data":{"name":"IS2"}}
|
{"type":"sensor","data":{"name":"IS2","state":4}}
|
demande l'état actuel du capteur IS2 |
{"type":"sensor","data":{"name":"IS2","state":4}}
|
{"type":"sensor","data":{"name":"IS2","state":4}}
|
Définit le capteur IS2 à InActif (4) |
{"type":"turnout","data":{"name":"IT99","state":0}}
|
{"type":"turnout","data":{"name":"IT99","state":4}}
|
Envoyer l'état=0 est aussi traité comme une requête pour le statut actuel |
{"type":"power","data":{}}
|
{"type":"power","data":{"state":2}}
|
L'alimentation ne nécessite pas de nom |
{"type":"ping"}
|
{"type":"pong"}
|
ping Requête et Réponse |
{"type":"list","list":"panels"}
|
{"type":"list","list":[{"name":"Panel/Panel",
"URL":"/panel/Panel/Panel?format=json","userName":"Panel","type":"Panel"},
{"name":"Layout/Waccamaw%20Coast%20Line",
"URL":"/panel/Layout/Waccamaw%20Coast%20Line?format=json", "userName":"Waccamaw Coast
Line","type":"Layout"}]}
|
requière une liste de panneaux, répond avec un ensemble des détails de deux panneaux |