# 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>

actuellement, le servlet supporte wagons, machines, lumières, emplacements, mémoiress, métadata, panneau, alimentation, chemins de fer, rapports, liste, itinéraires, capteurs, Têtes signal, Mâts signal, convois, et aiguillages. Lafonction WebSocket de ce servlet actuellement gère les chaînes JSON sous quatre formes différentes:

- 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
- 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.

La fonction WebSocket du Servlet peut être vue. en accédant à l' url /JSON/, où une console JSON est fourni pour le test.
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