Scènes: Chercher dans les scènes via API

[31/01/2025] Ce post a été sorti d’une discussion d’une demande de fonctionnalité

Le plus simple de nos jours pour ce genre de tâches, c’est d’écrire un petit script avec ChatGPT, même si ça te fait du code crado on s’en fout pour ce genre de tâches one-shot :smiley:

L’API est simple:

Ce qui t’intéresse:

Exemple d’une scène (j’ai pris un exemple chez moi :stuck_out_tongue: )

{
    "id": "e352584c-1aaf-4cc7-a9a2-5caa6293419c",
    "name": "Allumage automatique toilettes journée",
    "description": "Allumage via capteur entre 8h et 20h",
    "icon": "loader",
    "active": true,
    "selector": "allumage-automatique-toilettes",
    "actions": [
        [
            {
                "type": "condition.check-time",
                "after": "08:00",
                "before": "20:00"
            }
        ],
        [
            {
                "type": "device.set-value",
                "device_feature": "zigbee2mqtt-ampoule-toilettes-light-brightness-brightness",
                "value": "215"
            }
        ],
        []
    ],
    "triggers": [
        {
            "type": "device.new-state",
            "device_feature": "zigbee2mqtt-capteur-mouvement-toilettes-motion-sensor-binary-occupancy",
            "value": 1,
            "operator": "=",
            "threshold_only": true
        }
    ],
    "last_executed": null,
    "created_at": "2024-03-30T07:36:29.090Z",
    "updated_at": "2024-07-05T07:08:47.591Z",
    "tags": [
        {
            "name": "Toilettes"
        }
    ]
}

Je suis certain que si tu copie colle ce message dans ChatGPT, tu as un script fonctionnel :joy:

1 « J'aime »

Exemple:

La réponse de ChatGPT (j’ai relu rapidement, il manque juste l’authentification mais sinon c’est bon):

Voici un script en Node.js qui utilise axios pour interagir avec l’API, récupère la liste des scènes, et cherche celles qui utilisent une device_feature spécifique, en l’occurrence « capteur_humidite ». Si cette device_feature est trouvée dans les actions ou les déclencheurs de la scène, le script affiche le selector de cette scène dans les logs.

Pour exécuter ce script, assurez-vous d’avoir axios installé en exécutant npm install axios.

Voici le code :

const axios = require('axios');

// URL de base de l'API
const API_BASE_URL = 'http://votre-api.com/api/v1/scene';

// Fonction pour récupérer toutes les scènes
async function fetchScenes() {
    try {
        const response = await axios.get(`${API_BASE_URL}`);
        return response.data;
    } catch (error) {
        console.error('Erreur lors de la récupération des scènes:', error);
        return [];
    }
}

// Fonction pour récupérer une scène complète par son sélecteur
async function fetchSceneBySelector(selector) {
    try {
        const response = await axios.get(`${API_BASE_URL}/${selector}`);
        return response.data;
    } catch (error) {
        console.error(`Erreur lors de la récupération de la scène ${selector}:`, error);
        return null;
    }
}

// Fonction principale pour trouver les scènes qui utilisent "capteur_humidite"
async function findScenesWithHumiditySensor() {
    const scenes = await fetchScenes();

    for (const scene of scenes) {
        const sceneData = await fetchSceneBySelector(scene.selector);

        if (sceneData) {
            const hasHumiditySensor = sceneData.actions.some(actionGroup =>
                actionGroup.some(action => action.device_feature === 'capteur_humidite')
            ) || sceneData.triggers.some(trigger =>
                trigger.device_feature === 'capteur_humidite'
            );

            if (hasHumiditySensor) {
                console.log(`Scène avec "capteur_humidite" trouvée: ${scene.selector}`);
            }
        }
    }
}

// Exécution du script
findScenesWithHumiditySensor();

Instructions pour lancer le script :

Assurez-vous d’avoir Node.js et axios installés dans votre projet. Si nécessaire, installez axios avec :

npm install axios

Remplacez ‹ http://votre-api.com/api/v1/scene › par l’URL de votre API.

Exécutez le script en lançant la commande suivante dans le terminal :

node votre-script.js

Le script va afficher le selector de chaque scène qui contient un device_feature avec la valeur « capteur_humidite ».

1 « J'aime »