Requête

POST /demande-acces

{
  "card_id": "<no carte acces>|null"::string,
  "zone_id": "<id zone>"::string,
  "room_id": "<id pièce>|null"::string,
  "door_id": "<id porte>|null"::string,
  "date_heure": "<ISO-8601>"::string
}
  • La carte peut être null si c’est un accès sans carte ou que le capteur signalant l’accès ne fournit pas cette information
  • La zone sera toujours présente
  • La pièce peut être omise (null) si l’accès demandé est pour la zone complète et non pas une pièce spécifique
  • La porte concernée peut également être donnée (ou null sinon)

Réponse

  • 200 OK si on ne veut pas bloquer l’accès
  • 403 Forbidden si on veut bloquer l’accès
  • 400 Bad Request si la requête n’a pas le bon format ou n’est pas cohérente (e.g. zone inconnue)

Définition de l’API d’événement

Voir ces pages pour les détails des événements et des actions

Requête

POST /evenement-securite

{
  "nom": "<nom événement>"::string,
  "heure": "<ISO-8601>"::string,
  "zone": "<id zone>"::string,
  "parametres": [
    {"parametre": "<nom paramètre>"::string, "valeur": "<valeur>"::string},
    {"parametre": "<nom paramètre>"::string, "valeur": "<valeur>"::string},
  ]::array(object({parametre, valeur})
}

<nom événement> et <nom paramètre> correspondent aux valeurs énumérées ci-haut.

Réponse

200 OK

{
  "actions": [
    {
      "nom": "<nom action>"::string,
      "parametres": [
        { "parametre": "<nom paramètre>"::string, "valeur": "<valeur>"::string},
        { "parametre": "<nom paramètre>"::string, "valeur": "<valeur>"::string},
      ]
    }
  ]
}

<nom action> et <nom paramètre> correspondent aux valeurs définies dans cette liste

Exceptions

  • HTTP 400 : Si la requête n’a pas le bon format
  • HTTP 400 : Si la requête n’est pas cohérente (e.g. il manque un paramètre requis pour un événement précis)
  • HTTP 500 : Toute autre erreur
{
  "message": "<message d'erreur>"::string
}

Définition de l’API de réinitialisation

Requête

POST /reinitialiser

Contenu vide

Réponse

200 OK

Contenu vide

Note éditoriale

Nous ne prétendons pas que le design de ces actions est parfait. Comme dans la “vraie vie”, il faut composer avec des Apis ou spécifications qui ne sont pas toujours idéales. 😉

Définition de l’API d’état d’urgence

Cette route permet de récupérer l’état de toutes les zones et les portes d’un bâtiment, en lui passant l’identifiant du bâtiment.

Requête (V1)

À utiliser avec les fonctionnalités 1 et 1.5

GET /v1/emergencies/0/buildings-state/{building-id}

Réponse

200 OK

{
  "id": "{building-id}"::string,
  "agents": {
    "demandés": 1::int,
  },
  "zones": [
    {
      "id": "zone1"::string,
      "etat_incendie": "AUCUN" | "PROBABLE" | "CONFIRMÉ"::enum,
      "présence_de_fumée": true::bool,
      "ventilation_vitesse_distribution": 80::int,
      "ventilation_vitesse_retour": 45::int,
    },
    {
      "id": "zone2"::string,
      "etat_incendie": "AUCUN" | "PROBABLE" | "CONFIRMÉ"::enum,
      "présence_de_fumée": false::bool,
      "ventilation": "ouverte" | "fermée"::enum
    }
  ],
  "portes": [
    {
      "id": "door1"::string,
      "fermée": true::bool,
      "verrouillée": true::bool
    },
    {
      "id": "door2"::string,
      "fermée": true::bool,
      "verrouillée": false::bool
    }
  ]
}

Requête (V2)

À utiliser avec les fonctionnalités 2 et +

NOTE: Vous pouvez remplacer la v1 par la v2 (pas nécessaire de supporter les deux versions en parallèle).

GET /v2/emergencies/0/buildings-state/{building-id}

Réponse

200 OK

{
  "id": "{building-id}"::string,
  "agents": {
    "demandés": 1::int,
  },
  "zones": [
    {
      "id": "zone1"::string,
      "etat_incendie": "AUCUN" | "PROBABLE" | "CONFIRMÉ"::enum,
      "présence_de_fumée": true::bool,
      "ventilation_vitesse_distribution": 80::int,
      "ventilation_vitesse_retour": 45::int,
      "occupation_actuelle": 12::int,
      "occupants_identifiés": ["idul1", "idul2", "idul3"]::array(string),
      "acces_consecutifs_par_personne": {
        "idul1": 3::int,
        "idul3": 1::int
      }
    },
    {
      "id": "zone2"::string,
      "etat_incendie": "AUCUN" | "PROBABLE" | "CONFIRMÉ"::enum,
      "présence_de_fumée": false::bool,
      "ventilation": "ouverte" | "fermée"::enum,
      "occupation_actuelle": 12::int,
      "occupants_identifiés": ["idul1", "idul2", "idul3"]::array(string),
      "acces_consecutifs_par_personne": {
        "idul1": 3::int,
        "idul3": 1::int
      }
    }
  ],
  "portes": [
    {
      "id": "door1"::string,
      "fermée": true::bool,
      "verrouillée": true::bool
    },
    {
      "id": "door2"::string,
      "fermée": true::bool,
      "verrouillée": false::bool
    }
  ]
}

Exceptions

  • HTTP 404 : bâtiment inexistant (building-id n’existe pas)

Précisions

  • L’identifiant de l’urgence (/0) sera toujours 0 pour l’instant. Dans le futur, on pourrait vouloir regrouper tous les événements d’une même urgence, mais ne tentez pas de le faire dans le cadre du projet, ce ne sera pas demandé.
  • Une zone doit avoir la ventilation appropriée selon son type, donc soit ventilationVitesseDistribution et ventilationVitesseRetour, soit ventilation.
  • Pour etat_incendie, si un feu est probable ou confirmé dans une AUTRE zone du même building, la zone elle-même reste tout de même dans l’étant “AUCUN” puisque cette zone-ci n’est pas en feu.
  • Les champs ventilation_vitesse_distribution, ventilation_vitesse_retour et ventilation dépendent du type de ventilation du building. Ce sera soit un ou l’autre. Vous pouvez retourner les autres champs avec une valeur null, ou ne pas les retourner du tout.