Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. deutsche Wettervorhersage mit DWD API-Services

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    21
    1
    831

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

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

deutsche Wettervorhersage mit DWD API-Services

Scheduled Pinned Locked Moved JavaScript
6 Posts 3 Posters 1.0k Views 5 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • jolicJ Offline
    jolicJ Offline
    jolic
    wrote on last edited by
    #1

    Hallo,

    ich habe vor einiger Zeit eine deutsche Wettervorhersage für ein CMS (MODX) mit dem DWD MOSMIX-Vorhersagedatensatz erstellt. Nun wollte ich dasselbe auch für ioBroker mit JavaScript umsetzen, bin aber noch Anfänger in JavaScript. Der MOSMIX-Vorhersagedatensatz ist ein äußerst nützliches und leistungsfähiges Werkzeug für die Wettervorhersage.

    Nun bin ich auf die DWD API-Services gestoßen, die mir einfacher erscheinen, um entsprechende Datenpunkte in ioBroker zu schreiben. Das Ergebnis (Beta-Version) habe ich auf github.com/jolichter/ioBroker_dwdWeather hochgeladen. Vielleicht kann es jemand gebrauchen oder hat Tipps zur Verbesserung des Codes. Ein aktuelles Problem besteht darin, ungenutzte Datenpunkte automatisch zu löschen.

    Ich habe eine Funktion hinzugefügt, die alle vorhandenen Datenpunkte durchläuft und überprüft, ob sie mit dem Format "dpBase" beginnen. Anschließend wird überprüft, ob der Datenpunkt in den Wetterdaten verwendet wird. Wenn nicht, wird der Datenpunkt gelöscht.

    Die Funktion habe ich am Ende des Skripts hinzugefügt (nach updateWeatherData), um sicherzustellen, dass zuerst die Wetterdaten aktualisiert und dann die ungenutzten Datenpunkte gelöscht werden:

    // Funktion zum Löschen ungenutzter Datenpunkte
    async function deleteUnusedDataPoints() {
        try {
            const existingDataPoints = await getObjectListAsync({ include_docs: true });
    
            for (const dataPoint of existingDataPoints) {
                const dataPointId = dataPoint._id;
    
                // Überprüfen, ob der Datenpunkt mit dpBase beginnt
                if (dataPointId.startsWith(dpBase)) {
                    let isUsed = false;
    
                    // Überprüfen, ob der Datenpunkt in den Wetterdaten verwendet wird
                    for (const url of urls) {
                        const response = await axios.get(url);
                        const weatherData = response.data;
                        const stationId = dataPointId.split('.')[3];
    
                        if (weatherData.hasOwnProperty(stationId)) {
                            if (dataPointId.startsWith(`${dpBase}.${stationId}`)) {
                                isUsed = true;
                                break;
                            }
                        }
                    }
    
                    // Datenpunkt löschen, wenn er nicht verwendet wird
                    if (!isUsed) {
                        await deleteStateAsync(dataPointId);
                        if (enableLogs) log('Deleting data point ' + dataPointId);
                    }
                }
            }
        } catch (error) {
            log('Fehler beim Löschen ungenutzter Datenpunkte: ' + error, 'error');
        }
    }
    
    // Funktion zum Aktualisieren der Wetterdaten aufrufen
    updateWeatherData();
    
    // Datenpunkte löschen
    deleteUnusedDataPoints();
    
    

    Leider funktioniert das nicht und beim Testen erhalte ich folgenden Error:

    script.js.common.dwdWeather: Fehler beim Löschen ungenutzter Datenpunkte: ReferenceError: getObjectListAsync is not defined
    

    Es funktioniert auch nicht mit getObjectListAsync, getStatesAsync, getAdapterObjectsAsync, getAllStatesAsync oder getStateListAsync. Hat jemand eine Idee, warum oder was ich falsch mache?

    Vielen Dank im Voraus für eure Hilfe!

    Mein System:

    • Raspberry Pi 4 - 8GB
    • Rasbbian bullseye
    • Kernel 6.1.21
    • Node.js 18.16.0
    • NPM 9.5.1
    • Admin 6.3.5
    crunchipC T 2 Replies Last reply
    0
    • jolicJ jolic

      Hallo,

      ich habe vor einiger Zeit eine deutsche Wettervorhersage für ein CMS (MODX) mit dem DWD MOSMIX-Vorhersagedatensatz erstellt. Nun wollte ich dasselbe auch für ioBroker mit JavaScript umsetzen, bin aber noch Anfänger in JavaScript. Der MOSMIX-Vorhersagedatensatz ist ein äußerst nützliches und leistungsfähiges Werkzeug für die Wettervorhersage.

      Nun bin ich auf die DWD API-Services gestoßen, die mir einfacher erscheinen, um entsprechende Datenpunkte in ioBroker zu schreiben. Das Ergebnis (Beta-Version) habe ich auf github.com/jolichter/ioBroker_dwdWeather hochgeladen. Vielleicht kann es jemand gebrauchen oder hat Tipps zur Verbesserung des Codes. Ein aktuelles Problem besteht darin, ungenutzte Datenpunkte automatisch zu löschen.

      Ich habe eine Funktion hinzugefügt, die alle vorhandenen Datenpunkte durchläuft und überprüft, ob sie mit dem Format "dpBase" beginnen. Anschließend wird überprüft, ob der Datenpunkt in den Wetterdaten verwendet wird. Wenn nicht, wird der Datenpunkt gelöscht.

      Die Funktion habe ich am Ende des Skripts hinzugefügt (nach updateWeatherData), um sicherzustellen, dass zuerst die Wetterdaten aktualisiert und dann die ungenutzten Datenpunkte gelöscht werden:

      // Funktion zum Löschen ungenutzter Datenpunkte
      async function deleteUnusedDataPoints() {
          try {
              const existingDataPoints = await getObjectListAsync({ include_docs: true });
      
              for (const dataPoint of existingDataPoints) {
                  const dataPointId = dataPoint._id;
      
                  // Überprüfen, ob der Datenpunkt mit dpBase beginnt
                  if (dataPointId.startsWith(dpBase)) {
                      let isUsed = false;
      
                      // Überprüfen, ob der Datenpunkt in den Wetterdaten verwendet wird
                      for (const url of urls) {
                          const response = await axios.get(url);
                          const weatherData = response.data;
                          const stationId = dataPointId.split('.')[3];
      
                          if (weatherData.hasOwnProperty(stationId)) {
                              if (dataPointId.startsWith(`${dpBase}.${stationId}`)) {
                                  isUsed = true;
                                  break;
                              }
                          }
                      }
      
                      // Datenpunkt löschen, wenn er nicht verwendet wird
                      if (!isUsed) {
                          await deleteStateAsync(dataPointId);
                          if (enableLogs) log('Deleting data point ' + dataPointId);
                      }
                  }
              }
          } catch (error) {
              log('Fehler beim Löschen ungenutzter Datenpunkte: ' + error, 'error');
          }
      }
      
      // Funktion zum Aktualisieren der Wetterdaten aufrufen
      updateWeatherData();
      
      // Datenpunkte löschen
      deleteUnusedDataPoints();
      
      

      Leider funktioniert das nicht und beim Testen erhalte ich folgenden Error:

      script.js.common.dwdWeather: Fehler beim Löschen ungenutzter Datenpunkte: ReferenceError: getObjectListAsync is not defined
      

      Es funktioniert auch nicht mit getObjectListAsync, getStatesAsync, getAdapterObjectsAsync, getAllStatesAsync oder getStateListAsync. Hat jemand eine Idee, warum oder was ich falsch mache?

      Vielen Dank im Voraus für eure Hilfe!

      Mein System:

      • Raspberry Pi 4 - 8GB
      • Rasbbian bullseye
      • Kernel 6.1.21
      • Node.js 18.16.0
      • NPM 9.5.1
      • Admin 6.3.5
      crunchipC Away
      crunchipC Away
      crunchip
      Forum Testing Most Active
      wrote on last edited by
      #2

      @jolic kennst du https://forum.iobroker.net/topic/30616/script-dwd-uwz-nina-warnungen-als-push-sprachnachrichten?_=1684962294772

      umgestiegen von Proxmox auf Unraid

      jolicJ 1 Reply Last reply
      0
      • crunchipC crunchip

        @jolic kennst du https://forum.iobroker.net/topic/30616/script-dwd-uwz-nina-warnungen-als-push-sprachnachrichten?_=1684962294772

        jolicJ Offline
        jolicJ Offline
        jolic
        wrote on last edited by jolic
        #3

        @crunchip Danke, kannte ich nicht, sehe im Script eine cleanUnusedObjects Funktion welche auch getObjectListAsync nutzt. Sorry Unsinn, das war wo anders und hat hiermit nichts zu tun.

        Es scheint, dass das Problem bei mir darin besteht, dass die Funktion getObjectListAsync nicht definiert ist und führt zu dem Fehler "ReferenceError: getObjectListAsync is not defined". Verstehe ich im Moment nicht... werde das später in Ruhe anschauen müssen...

        1 Reply Last reply
        0
        • jolicJ jolic

          Hallo,

          ich habe vor einiger Zeit eine deutsche Wettervorhersage für ein CMS (MODX) mit dem DWD MOSMIX-Vorhersagedatensatz erstellt. Nun wollte ich dasselbe auch für ioBroker mit JavaScript umsetzen, bin aber noch Anfänger in JavaScript. Der MOSMIX-Vorhersagedatensatz ist ein äußerst nützliches und leistungsfähiges Werkzeug für die Wettervorhersage.

          Nun bin ich auf die DWD API-Services gestoßen, die mir einfacher erscheinen, um entsprechende Datenpunkte in ioBroker zu schreiben. Das Ergebnis (Beta-Version) habe ich auf github.com/jolichter/ioBroker_dwdWeather hochgeladen. Vielleicht kann es jemand gebrauchen oder hat Tipps zur Verbesserung des Codes. Ein aktuelles Problem besteht darin, ungenutzte Datenpunkte automatisch zu löschen.

          Ich habe eine Funktion hinzugefügt, die alle vorhandenen Datenpunkte durchläuft und überprüft, ob sie mit dem Format "dpBase" beginnen. Anschließend wird überprüft, ob der Datenpunkt in den Wetterdaten verwendet wird. Wenn nicht, wird der Datenpunkt gelöscht.

          Die Funktion habe ich am Ende des Skripts hinzugefügt (nach updateWeatherData), um sicherzustellen, dass zuerst die Wetterdaten aktualisiert und dann die ungenutzten Datenpunkte gelöscht werden:

          // Funktion zum Löschen ungenutzter Datenpunkte
          async function deleteUnusedDataPoints() {
              try {
                  const existingDataPoints = await getObjectListAsync({ include_docs: true });
          
                  for (const dataPoint of existingDataPoints) {
                      const dataPointId = dataPoint._id;
          
                      // Überprüfen, ob der Datenpunkt mit dpBase beginnt
                      if (dataPointId.startsWith(dpBase)) {
                          let isUsed = false;
          
                          // Überprüfen, ob der Datenpunkt in den Wetterdaten verwendet wird
                          for (const url of urls) {
                              const response = await axios.get(url);
                              const weatherData = response.data;
                              const stationId = dataPointId.split('.')[3];
          
                              if (weatherData.hasOwnProperty(stationId)) {
                                  if (dataPointId.startsWith(`${dpBase}.${stationId}`)) {
                                      isUsed = true;
                                      break;
                                  }
                              }
                          }
          
                          // Datenpunkt löschen, wenn er nicht verwendet wird
                          if (!isUsed) {
                              await deleteStateAsync(dataPointId);
                              if (enableLogs) log('Deleting data point ' + dataPointId);
                          }
                      }
                  }
              } catch (error) {
                  log('Fehler beim Löschen ungenutzter Datenpunkte: ' + error, 'error');
              }
          }
          
          // Funktion zum Aktualisieren der Wetterdaten aufrufen
          updateWeatherData();
          
          // Datenpunkte löschen
          deleteUnusedDataPoints();
          
          

          Leider funktioniert das nicht und beim Testen erhalte ich folgenden Error:

          script.js.common.dwdWeather: Fehler beim Löschen ungenutzter Datenpunkte: ReferenceError: getObjectListAsync is not defined
          

          Es funktioniert auch nicht mit getObjectListAsync, getStatesAsync, getAdapterObjectsAsync, getAllStatesAsync oder getStateListAsync. Hat jemand eine Idee, warum oder was ich falsch mache?

          Vielen Dank im Voraus für eure Hilfe!

          Mein System:

          • Raspberry Pi 4 - 8GB
          • Rasbbian bullseye
          • Kernel 6.1.21
          • Node.js 18.16.0
          • NPM 9.5.1
          • Admin 6.3.5
          T Do not disturb
          T Do not disturb
          ticaki
          wrote on last edited by
          #4

          @jolic sagte in deutsche Wettervorhersage mit DWD API-Services:

          Es funktioniert auch nicht mit getObjectListAsync, getStatesAsync, getAdapterObjectsAsync, getAllStatesAsync oder getStateListAsync. Hat jemand eine Idee, warum oder was ich falsch mache?

          Das sind Funktionen die einem Adapter zur Verfügung stehen jedoch nicht einem Script.

          https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md
          https://github.com/ioBroker/ioBroker.javascript/blob/master/lib/javascript.d.ts

          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

          Spenden

          jolicJ 1 Reply Last reply
          0
          • T ticaki

            @jolic sagte in deutsche Wettervorhersage mit DWD API-Services:

            Es funktioniert auch nicht mit getObjectListAsync, getStatesAsync, getAdapterObjectsAsync, getAllStatesAsync oder getStateListAsync. Hat jemand eine Idee, warum oder was ich falsch mache?

            Das sind Funktionen die einem Adapter zur Verfügung stehen jedoch nicht einem Script.

            https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md
            https://github.com/ioBroker/ioBroker.javascript/blob/master/lib/javascript.d.ts

            jolicJ Offline
            jolicJ Offline
            jolic
            wrote on last edited by jolic
            #5

            @ticaki Danke für die Info. Hab das zusätzlich so geprüft:

            // Liste der zu prüfenden Funktionen
            const functionsToCheck = [
                'getObjectViewAsync',
                'getForeignObjects',
                'getForeignStates',
                'getAllStates',
                'getAllObjects',
                // Füge hier weitere Funktionen hinzu...
            ];
            
            // Prüfe jede Funktion in der Liste
            for (const functionName of functionsToCheck) {
                if (typeof this[functionName] === 'function') {
                    log(`Die Funktion ${functionName} ist verfügbar.`);
                } else {
                    log(`Die Funktion ${functionName} ist NICHT verfügbar.`);
                }
            }
            

            Ausgabe ist bei allen "NICHT verfügbar", wie deine Links bestätigen.

            Abgesehen davon habe ich aufgehört, es zu versuchen, Datenpunkte automatisch zu löschen. Während meiner Tests ist mir ein Fehler im Code passiert, durch den ich versehentlich zu viele Datenpunkte gelöscht habe (in einer Testumgebung). Aus diesem Grund ist es sicherer, sie bei Bedarf manuell zu löschen.

            Mein Code ist größtenteils fertig, jedoch gestaltet sich die Beschaffung der stündlichen Messdaten (POI) via DWD ziemlich schwierig, da nicht alle Messstationen frei verfügbar sind. Zudem sind die stündlichen Messdaten bei den verfügbaren DWD Stationen nicht immer aktuell und können bis zu 2 Stunden hinterherhinken. In Anbetracht dieser Umstände erscheint es sinnvoll, eine eigene Mini-Wetterstation zu verwenden, um aktuelle Messdaten zu erhalten.

            T 1 Reply Last reply
            0
            • jolicJ jolic

              @ticaki Danke für die Info. Hab das zusätzlich so geprüft:

              // Liste der zu prüfenden Funktionen
              const functionsToCheck = [
                  'getObjectViewAsync',
                  'getForeignObjects',
                  'getForeignStates',
                  'getAllStates',
                  'getAllObjects',
                  // Füge hier weitere Funktionen hinzu...
              ];
              
              // Prüfe jede Funktion in der Liste
              for (const functionName of functionsToCheck) {
                  if (typeof this[functionName] === 'function') {
                      log(`Die Funktion ${functionName} ist verfügbar.`);
                  } else {
                      log(`Die Funktion ${functionName} ist NICHT verfügbar.`);
                  }
              }
              

              Ausgabe ist bei allen "NICHT verfügbar", wie deine Links bestätigen.

              Abgesehen davon habe ich aufgehört, es zu versuchen, Datenpunkte automatisch zu löschen. Während meiner Tests ist mir ein Fehler im Code passiert, durch den ich versehentlich zu viele Datenpunkte gelöscht habe (in einer Testumgebung). Aus diesem Grund ist es sicherer, sie bei Bedarf manuell zu löschen.

              Mein Code ist größtenteils fertig, jedoch gestaltet sich die Beschaffung der stündlichen Messdaten (POI) via DWD ziemlich schwierig, da nicht alle Messstationen frei verfügbar sind. Zudem sind die stündlichen Messdaten bei den verfügbaren DWD Stationen nicht immer aktuell und können bis zu 2 Stunden hinterherhinken. In Anbetracht dieser Umstände erscheint es sinnvoll, eine eigene Mini-Wetterstation zu verwenden, um aktuelle Messdaten zu erhalten.

              T Do not disturb
              T Do not disturb
              ticaki
              wrote on last edited by ticaki
              #6

              @jolic sagte in deutsche Wettervorhersage mit DWD API-Services:

              In Anbetracht dieser Umstände erscheint es sinnvoll, eine eigene Mini-Wetterstation zu verwenden, um aktuelle Messdaten zu erhalten.

              Bei diesen Stationen kannst du die Daten auch teilen und bekommst dafür Daten von anderen Hobby Stationen.

              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

              Spenden

              1 Reply Last reply
              0
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              Support us

              ioBroker
              Community Adapters
              Donate

              629

              Online

              32.5k

              Users

              81.6k

              Topics

              1.3m

              Posts
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • Home
              • Recent
              • Tags
              • Unread 0
              • Categories
              • Unreplied
              • Popular
              • GitHub
              • Docu
              • Hilfe