Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Ostrom Api auslesen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.2k

Ostrom Api auslesen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
3 Beiträge 2 Kommentatoren 307 Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • J Offline
    J Offline
    jpakusch
    schrieb am zuletzt editiert von jpakusch
    #1

    Hallo,

    da ich nirgends was passendes gefunden habe bin ich gerade dabei, mir ein Skript zum Auslesen der Verbrauchsdaten von meinem dynamischen Tarif meines Stromanbieters Ostrom abzufragen. Das ganze ist noch eine sehr frühe Version und ich arbeite noch dran, vermutlich werde ich das skript hier auch noch aktualisieren.

    Was aktuell geht:

    • Monatliche Verbräche abfragen des aktuellen Jahres
    • Tägliche Verbrauchsdaten des aktuellen Monats

    nur eine kleiner Schritt den ich noch gehen möchte: Stündliche Verbrauchsdaten des aktuellen Tages (bzw des gestrigen, der heutige geht noch nicht)

    Bin gespannt ob das hier noch jemanden interessiert, kann dann auch gern bei der Einrichtung helfen, auch wenn es mein erstes Skript mit Javaskript ist (ja ich hatte Hilfe von CHatGPT um mir ein Grundgerüst hinzustellen), verwende sonst eher Blockly oder außerhalb von iobroker Python.
    Bin auch gespannt auf Verbesserungsvorschläge

    const axios = require('axios');
    
    const clientId = getState('javascript.0.ostrom.client_id').val;
    const clientSecret = getState('javascript.0.ostrom.client_secret').val;
    const contractNumber = getState('javascript.0.ostrom.contract_number').val;
    
    async function getToken() {
        try {
            const authHeader = 'Basic ' + Buffer.from(`${clientId}:${clientSecret}`).toString('base64');
            const response = await axios.post(
                'https://auth.production.ostrom-api.io/oauth2/token',
                'grant_type=client_credentials',
                {
                    headers: {
                        'Authorization': authHeader,
                        'Content-Type': 'application/x-www-form-urlencoded',
                        'Accept': 'application/json'
                    }
                }
            );
    
            return response.data.access_token;
        } catch (err) {
            console.error('❌ Fehler bei getToken: ' + 
                          (err.response ? err.response.status + ' ' + JSON.stringify(err.response.data) : err.message));
            return null;
        }
    }
    
    async function getConsumption(token) {
        try {
            const response = await axios.get(`https://api.ostrom.de/contracts/${contractNumber}/consumption`, {
                headers: { Authorization: `Bearer ${token}` }
            });
            return response.data;
        } catch (err) {
            console.error('❌ Fehler bei getConsumption:');
            return [];
        }
    }
    async function updateConsumption_monthly() {
        try {
            const token = await getToken();
            if (!token) {
                console.error('❌ Zugriffstoken konnte nicht abgerufen werden');
                return;
            }
    
            const contractId = contractNumber
            const startDate = new Date(Date.UTC(new Date().getFullYear(), 0, 1)).toISOString();
            const endDate = new Date(Date.UTC(new Date().getFullYear(), new Date().getMonth() + 1, 0)).toISOString();
    
            const response = await axios.get(
                `https://production.ostrom-api.io/contracts/${contractId}/energy-consumption`,
                {
                    headers: {
                        Authorization: `Bearer ${token}`,
                        Accept: 'application/json'
                    },
                    params: {
                        startDate,
                        endDate,
                        resolution: 'MONTH'
                    }
                }
            );
    
            const consumptionData = response.data.data;
    
            if (!consumptionData || consumptionData.length === 0) {
                console.warn('⚠️ Keine Verbrauchsdaten verfügbar');
                return;
            }
    
            for (const item of consumptionData) {
                const date = new Date(item.date);
                const year = date.getFullYear();
                const month = (date.getMonth() + 1).toString().padStart(2, '0');
                const key = `javascript.0.ostrom.consumption_monthly.${year}_${month}`;
                const value = item.kWh || 0;
    
                await createStateAsync(key, value, { type: 'number', read: true, write: false });
                await setStateAsync(key, value, true);
            }
    
            console.log('✅ monthly Verbrauchsdaten erfolgreich aktualisiert');
    
        } catch (err) {
            console.error('❌ Fehler bei updateConsumption:' +(err.response ? err.response.status + ' ' + JSON.stringify(err.response.data) : err.message));
        }
    }
    
    async function updateConsumption_daily() {
        try {
            const token = await getToken();
            if (!token) {
                console.error('❌ Zugriffstoken konnte nicht abgerufen werden');
                return;
            }
    
            const contractId = contractNumber
            const jetzt = new Date();
            //const startDate = new Date(Date.UTC(jetzt.getUTCFullYear(), jetzt.getUTCMonth(), jetzt.getUTCDate()));
            //const endDate =   new Date(Date.UTC(jetzt.getUTCFullYear(), jetzt.getUTCMonth(), jetzt.getUTCDate()+1));
            const startDate = new Date(Date.UTC(new Date().getFullYear(), new Date().getMonth(), 1)).toISOString();
            const endDate =   new Date(Date.UTC(new Date().getFullYear(), new Date().getMonth(), jetzt.getUTCDate())).toISOString();
    
            const response = await axios.get(
                `https://production.ostrom-api.io/contracts/${contractId}/energy-consumption`,
                {
                    headers: {
                        Authorization: `Bearer ${token}`,
                        Accept: 'application/json'
                    },
                    params: {
                        startDate,
                        endDate,
                        resolution: 'DAY'
                    }
                }
            );
    
            const consumptionData = response.data.data;
    
            if (!consumptionData || consumptionData.length === 0) {
                console.warn('⚠️ Keine Verbrauchsdaten verfügbar');
                return;
            }
    
            for (const item of consumptionData) {
                const date = new Date(item.date);
                const year = date.getFullYear();
                const month = (date.getMonth() + 1).toString().padStart(2, '0');
                const day = date.getDate().toString().padStart(2, '0');
                const key = `javascript.0.ostrom.consumption_daily.${year}.${month}.${day}`;
                const value = item.kWh || 0;
    
                await createStateAsync(key, value, { type: 'number', read: true, write: false });
                await setStateAsync(key, value, true);
            }
    
            console.log('✅ daily Verbrauchsdaten erfolgreich aktualisiert');
    
        } catch (err) {
            console.error('❌ Fehler bei updateConsumption:' +(err.response ? err.response.status + ' ' + JSON.stringify(err.response.data) : err.message));
        }
    }
    
    // Hilfsfunktion für async createState
    function createStateAsync(id, value, options) {
        return new Promise(resolve => {
            if (!existsState(id)) {
                createState(id, value, options, () => resolve());
            } else {
                resolve();
            }
        });
    }
    
    updateConsumption_monthly();
    updateConsumption_daily();
    
    // Manueller Trigger
    on({ id: 'javascript.0.ostrom.update', val: true, ack: false }, async () => {
        await updateConsumption_monthly();
        await updateConsumption_daily();
        // Reset Trigger
        setState('javascript.0.ostrom.update', false, true);
    });
    //Monthly täglich updaten
    setInterval(updateConsumption_monthly, 24 * 60 * 60 * 1000);
    setInterval(updateConsumption_daily, 24 * 60 * 60 * 1000);
    
    1 Antwort Letzte Antwort
    0
    • J Offline
      J Offline
      jpakusch
      schrieb am zuletzt editiert von
      #2

      Screenshot 2025-08-20 123708.png

      Skyx3S 1 Antwort Letzte Antwort
      0
      • J jpakusch

        Screenshot 2025-08-20 123708.png

        Skyx3S Offline
        Skyx3S Offline
        Skyx3
        schrieb am zuletzt editiert von
        #3

        @jpakusch
        Super Danke, habe es getestet und es funktioniert. Das Thema Preise wäre noch spannend.

        1 Antwort Letzte Antwort
        0
        Antworten
        • In einem neuen Thema antworten
        Anmelden zum Antworten
        • Älteste zuerst
        • Neuste zuerst
        • Meiste Stimmen


        Support us

        ioBroker
        Community Adapters
        Donate

        482

        Online

        32.4k

        Benutzer

        81.4k

        Themen

        1.3m

        Beiträge
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
        ioBroker Community 2014-2025
        logo
        • Anmelden

        • Du hast noch kein Konto? Registrieren

        • Anmelden oder registrieren, um zu suchen
        • Erster Beitrag
          Letzter Beitrag
        0
        • Home
        • Aktuell
        • Tags
        • Ungelesen 0
        • Kategorien
        • Unreplied
        • Beliebt
        • GitHub
        • Docu
        • Hilfe