> For the complete documentation index, see [llms.txt](https://altec-atls.gitbook.io/altec-atls-api/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://altec-atls.gitbook.io/altec-atls-api/points-de-terminaison-api/recuperer-un-etat-systeme.md).

# Récupérer un état système

{% hint style="danger" %}
L'application doit être activé sur le web-serveur ainsi que les états système souhaités.

Le produit doit être connecté au serveur d'application.
{% endhint %}

Récupère les divers état d'un produit, ils doivent être configurés à partir du web-serveur du produit dans la page Programmation > Application.\
Cela concerne :

* **Entrées**
  * le nombre d'entrée dépend du nombre disponible sur le produit
    * 0: réarmée
    * 1: déclenchée

{% hint style="warning" %}
Si votre produit comporte une entrée Marche/Arrêt l'indice de l'entrée est à 0 sinon l'indice commence à 1.
{% endhint %}

* **Sorties**
  * le nombre de sortie dépend du nombre disponible sur le produit
    * 0: désactivée
    * 1: activée
* **Défauts** - numéro dépend si disponible sur le produit
  * 0: Défaut alimentation
    * 0: ok
    * 1: faible
  * 1: Défaut Tension secteur
    * 0: présente
    * 1: absente
  * 2: Défaut Batterie
    * 0: ok
    * 1: faible
  * 3: non utilisée
  * 4: Défaillance Batterie
    * 0: fin
    * 1: présente

{% hint style="warning" %}
Un état à -1 signifie que le produit n'a pas envoyé son état au serveur d'application malgré le fait qu'il est bien envoyé sa trame de configuration.
{% endhint %}

<mark style="color:blue;">`GET`</mark> `/products/{productLogin}/state`

**Path**

| Name         | Type   | Description            |
| ------------ | ------ | ---------------------- |
| productLogin | string | Identifiant du produit |

**Headers**

| Name          | Value                  |
| ------------- | ---------------------- |
| Authorization | `Bearer <accessToken>` |

**Request**

{% tabs %}
{% tab title="curl" %}

```bash
curl -X GET https://ovh-backend.altec-ts.fr/api/v1/products/<your_product_login>/state \
-H "Authorization: Bearer your_access_token"
```

{% endtab %}

{% tab title="js" %}

```javascript
const productLogin = '<your_product_login>';
const url = `https://ovh-backend.altec-ts.fr/api/v1/products/${productLogin}/state`;
const headers = {
  'Authorization': 'Bearer your_access_token'
};

fetch(url, {
  method: 'GET',
  headers
})
  .then(response => {
    if (!response.ok) {
      // Lire la réponse JSON en cas d'erreur
      return response.json().then(errData => {
        console.log("status:", response.status);
        console.log("message:", errData.error || "An error has occurred");
        throw new Error(errData.error || "An error has occurred");
      });
    }
    // Lire la réponse JSON en cas de succès
    return response.json();
  })
  .then(jsonData => {
    console.log('Réponse JSON :', jsonData);
  })
  .catch(error => {
    if (error.name === 'AbortError') {
      console.log("message: No response received from server");
    } else {
      console.log('error.message:', error.message);
    }
  });

```

{% endtab %}

{% tab title="node" %}

```javascript
const axios = require("axios");

// Définir les en-têtes
const productLogin = '<your_product_login>';
const url = `https://ovh-backend.altec-ts.fr/api/v1/products/${productLogin}/state`;
const headers = {
  'Authorization': 'Bearer your_access_token'
};

// Effectuer la requête GET
axios.get(url, { headers })
  .then(response => {
    console.log('Réponse JSON :', response.data);
  })
  .catch(error => {
    if (error.response) {
      // Server responded with a status code outside the 2xx range
      console.log("status:", error.response.status);
      console.log("message:", error.response.data.error || "An error has occurred");
    } else if (error.request) {
      // Request was made but no response received
      console.log("message: No response received from server");
    } else {
      // Something happened in setting up the request
      console.log('error.message:', error.message);
    }
  });
```

{% endtab %}

{% tab title="python" %}

```python
import requests
import json  # Ajout nécessaire

# URL de l'API
product_login = "<your_product_login>"
url = f"https://ovh-backend.altec-ts.fr/api/v1/products/{product_login}/state"

# En-têtes de la requête
headers = {
    "Authorization": "Bearer your_access_token"
}

# Effectuer la requête GET
response = requests.get(url, headers=headers)

# Afficher la réponse
if response.status_code == 200:
    try:
        print("Réponse JSON :", json.dumps(response.json(), indent=2))
    except ValueError:
        print("La réponse n'est pas au format JSON :", response.text)
else:
    print(f"Erreur {response.status_code} :", response.text)

```

{% endtab %}

{% tab title="php" %}

```php
<?php
// URL de l'API
$productLogin = "<your_product_login>";
$url = "https://ovh-backend.altec-ts.fr/api/v1/products/{$productLogin}/state";

// Initialisation de cURL
$ch = curl_init($url);

// Configuration des options cURL
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer your_access_token"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Exécution de la requête
$response = curl_exec($ch);

// Vérification des erreurs
if (curl_errno($ch)) {
    echo "Erreur cURL : " . curl_error($ch) . "\n";
} else {
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if ($httpCode == 200) {
        $decoded = json_decode($response, true);
        if (json_last_error() === JSON_ERROR_NONE) {
            echo "Réponse JSON :\n";
            echo json_encode($decoded, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n";
        } else {
            echo "Réponse non-JSON : " . $response . "\n";
        }
    } else {
        echo "Erreur HTTP {$httpCode} : " . $response . "\n";
    }
}

// Fermeture de la session cURL
curl_close($ch);
?>
```

{% endtab %}
{% endtabs %}

**Response**

{% tabs %}
{% tab title="200" %}
En supposant qu'une entrée, une sortie, et un défaut sur la partie application du web-serveur du produit est activée, le serveur renvoie un json sous le format suivant :

```json
{
    "entrees": {
        <numero_entree>: <-1|0|1>
    },
    "sorties": {
        <numero_sortie>: <-1|0|1>
    },
    "defauts": {
        <numero_defaut>: <-1|0|1>
    }
}
```

{% endtab %}

{% tab title="401" %}
Le token d'accès est invalide ou a expiré. Une requête de [/auth/refresh](/altec-atls-api/authentification/token-dactualisation.md) est à réaliser afin de récupérer un nouveau jeton d'accès.

```json
{
    "error": "bad-token"
}
```

{% endtab %}

{% tab title="403" %}
La Clé Client n'est pas autorisée à consulter ce produit. Une requête [/products](/altec-atls-api/points-de-terminaison-api/ajouter-un-produit.md) est à réaliser pour résoudre l'erreur.

```json
{
    "error": "user-not-allowed"
}
```

{% endtab %}

{% tab title="404" %}
Le productLogin n'existe pas dans notre base de donnée.

```json
{
    "error": "product-not-found"
}
```

{% endtab %}

{% tab title="500" %}
Une erreur inattendue s'est produite sur le serveur.

```json
{
    "error": "unknown"
}
```

{% endtab %}
{% endtabs %}
