Szenen: Szenen über API durchsuchen

[31/01/2025] Dieser Beitrag wurde aus einer Diskussion über eine Funktionsanfrage herausgelöst

Heutzutage ist das Einfachste für solche Aufgaben, ein kleines Skript mit ChatGPT zu schreiben, auch wenn es dann schmutzigen Code gibt, ist das für solche Einmalaufgaben egal :smiley:

Die API ist einfach:

Was dich interessiert:

Beispiel einer Szene (ich habe ein Beispiel von mir genommen :stuck_out_tongue: )

{
    "id": "e352584c-1aaf-4cc7-a9a2-5caa6293419c",
    "name": "Automatische Beleuchtung Toilette Tageszeit",
    "description": "Einschalten via Sensor zwischen 8 Uhr und 20 Uhr",
    "icon": "loader",
    "active": true,
    "selector": "automatische-beleuchtung-toilette",
    "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": "Toilette"
        }
    ]
}

Ich bin sicher, wenn du diese Nachricht in ChatGPT kopierst und einfügst, hast du ein funktionierendes Skript :joy:

Beispiel:

Die Antwort von ChatGPT (ich habe es schnell überflogen, es fehlt nur die Authentifizierung, aber ansonsten ist es gut):

Hier ist ein Node.js-Skript, das axios verwendet, um mit der API zu interagieren, die Liste der Szenen abzurufen und nach denen zu suchen, die ein bestimmtes device_feature verwenden, in diesem Fall « capteur_humidite ». Wenn dieses device_feature in den Aktionen oder Auslösern der Szene gefunden wird, zeigt das Skript den Selector dieser Szene in den Logs an.

Um dieses Skript auszuführen, stellen Sie sicher, dass axios installiert ist, indem Sie npm install axios ausführen.

Hier ist der Code:

const axios = require('axios');

// Basis-URL der API
const API_BASE_URL = 'http://votre-api.com/api/v1/scene';

// Funktion zum Abrufen aller Szenen
async function fetchScenes() {
    try {
        const response = await axios.get(`${API_BASE_URL}`);
        return response.data;
    } catch (error) {
        console.error('Fehler beim Abrufen der Szenen:', error);
        return [];
    }
}

// Funktion zum Abrufen einer vollständigen Szene anhand ihres Selectors
async function fetchSceneBySelector(selector) {
    try {
        const response = await axios.get(`${API_BASE_URL}/${selector}`);
        return response.data;
    } catch (error) {
        console.error(`Fehler beim Abrufen der Szene ${selector}:`, error);
        return null;
    }
}

// Hauptfunktion zum Finden von Szenen, die "capteur_humidite" verwenden
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(`Szene mit "capteur_humidite" gefunden: ${scene.selector}`);
            }
        }
    }
}

// Ausführung des Skripts
findScenesWithHumiditySensor();

Anweisungen zum Ausführen des Skripts:

Stellen Sie sicher, dass Node.js und axios in Ihrem Projekt installiert sind. Falls erforderlich, installieren Sie axios mit:

npm install axios

Ersetzen Sie ‹ http://votre-api.com/api/v1/scene › durch die URL Ihrer API.

Führen Sie das Skript aus, indem Sie den folgenden Befehl im Terminal ausführen:

node Ihr-Skript.js

Das Skript zeigt den Selector jeder Szene an, die ein device_feature mit dem Wert « capteur_humidite » enthält.