Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Problem: Abruf von Strompreisen mit JS und Axios

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Problem: Abruf von Strompreisen mit JS und Axios

    This topic has been deleted. Only users with topic management privileges can see it.
    • fuzzy1955
      fuzzy1955 last edited by fuzzy1955

      Hallo, Spezialisten!

      Vorweg danke, dass ihr mir schon viel geholfen habt!

      Mein aktuelles Problem ist die Abfrage von Börsenstrompreisen mit Javascript und Axios. Ein ähnliches Script zur Abfrage von Wetterdaten funktioniert bei mir bestens.

      const axios = require('axios');
      const apiUrl = "https://api.openweathermap.org/data/3.0/onecall";
      const apiParams = {
      lat: 48.34743,
      lon: 14.71785,
      appid: "2f47e79aff3a76e63912638247d765f3",
      units: "metric"
      };
      const basePath = "javascript.0.variables.OpenWeatherMap.";

      fetchWeatherData();

      let dtHeute = new Date(Date.now()),
      intStundeAktuell = dtHeute.getHours(),
      tagZahl = dtHeute.getDay(),
      strWochentag = ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag' ],
      strDatumZeit = formatDate(new Date(dtHeute), ', DD.MM.YYYY');

      strDatumZeit = strWochentag[tagZahl] + strDatumZeit;

      async function fetchWeatherData() {
      try {
      const response = await axios.get(apiUrl, { params: apiParams });
      const weatherData = response.data;

          //console.log("Wetterdaten: " + JSON.stringify(response.data));
      
          setState('alias.0.Wetter.WetterDatumZeit', new Date(Date.now()), false);
          setState('alias.0.Wetter.WetterDatumZeitEU', strDatumZeit, false);
      
          createAndSetState(`${basePath}current.temp`, weatherData.current.temp, "number", "°C");
          createAndSetState(`${basePath}current.humidity`, weatherData.current.humidity, "number", "%");
          createAndSetState(`${basePath}current.weather`, weatherData.current.weather[0].description, "string");
          createAndSetState(`${basePath}current.wind_speed`, weatherData.current.wind_speed, "number", "m/s");
          createAndSetState(`${basePath}current.wind_gust`, weatherData.current.wind_gust || 0, "number", "m/s");
      
          const isRaining = weatherData.current.weather[0].description.toLowerCase().includes("rain");
          createAndSetState(`${basePath}current.raining`, isRaining, "boolean");
      
      } catch (e) {
      
          console.error("Fehler beim Abrufen der Wetterdaten: " + e.message);
      }
      

      }

      function createAndSetState(id, value, type, unit = "") {
      if (!existsState(id)) {
      createState(id, value, {
      type: type,
      unit: unit,
      read: true,
      write: false
      });
      }
      setState(id, value, true);
      }

      if (intStundeAktuell >= 6 && intStundeAktuell < 22) {
      setInterval(function() {fetchWeatherData();}, 360000);
      }

      Aber die Strompreise wollen nicht. Das Script:

      const axios = require('axios');
      const apiUrl = "https://apis.smartenergy.at/market/v1/price";
      const basePath = "alias.0.PV-Anlage."; 
      
      let dtHeute = new Date(Date.now());
      let intStundeAktuell = dtHeute.getHours();
      
      async function fetchPowerData() {
          try {
              const response = await axios.get(apiUrl);
              const powerData = response.data;
              
              createAndSetState(`${basePath}StrompreisJetztDatum`, powerData.date, "string", "");
              createAndSetState(`${basePath}StrompreisJetzt`, powerData.value, "number", "ct/kWh");
              console.log("Der Strompreis wurde aktualisiert auf: " + powerData.value + " ct / kWh");
              //console.log("Strompreisdaten: " + JSON.stringify(response.data));
      
          } catch (e) {
              console.error("Fehler beim Abrufen des Strompreises: " + e.message);
          }
      }
      
      function createAndSetState(id, value, type, unit = "") {
          if (!existsState(id)) {
              createState(id, value, {
                  type: type,
                  unit: unit,
                  read: true,
                  write: false
              });
          }
          setState(id, value, true);
      }
      
      //-------- exec --------------------------------------
      
      setInterval(function() {fetchPowerData();}, 10000);
      
      

      Die Meldung lautet:

      Der Strompreis wurde aktualisiert auf: undefined ct / kWh
      

      Was mache ich da falsch? Hat jemand eine Idee dazu? Vorweg danke!

      [EDIT]

      Die Quelldaten:


      {"tariff":"EPEXSPOTAT","unit":"ct/kWh","interval":15,"data":[{"date":"2025-07-14T00:00:00+02:00","value":13.478},{"date":"2025-07-14T00:15:00+02:00","value":13.478},{"date":"2025-07-14T00:30:00+02:00","value":13.478},{"date":"2025-07-14T00:45:00+02:00","value":13.478},{"date":"2025-07-14T01:00:00+02:00","value":12.061},{"date":"2025-07-14T01:15:00+02:00","value":12.061},{"date":"2025-07-14T01:30:00+02:00","value":12.061},{"date":"2025-07-14T01:45:00+02:00","value":12.061},{"date":"2025-07-14T02:00:00+02:00","value":11.281},{"date":"2025-07-14T02:15:00+02:00","value":11.281},{"date":"2025-07-14T02:30:00+02:00","value":11.281},{"date":"2025-07-14T02:45:00+02:00","value":11.281},{"date":"2025-07-14T03:00:00+02:00","value":10.782},{"date":"2025-07-14T03:15:00+02:00","value":10.782},{"date":"2025-07-14T03:30:00+02:00","value":10.782},{"date":"2025-07-14T03:45:00+02:00","value":10.782},{"date":"2025-07-14T04:00:00+02:00","value":11.042},{"date":"2025-07-14T04:15:00+02:00","value":11.042},{"date":"2025-07-14T04:30:00+02:00","value":11.042},{"date":"2025-07-14T04:45:00+02:00","value":11.042},{"date":"2025-07-14T05:00:00+02:00","value":12.416},{"date":"2025-07-14T05:15:00+02:00","value":12.416},{"date":"2025-07-14T05:30:00+02:00","value":12.416},{"date":"2025-07-14T05:45:00+02:00","value":12.416},{"date":"2025-07-14T06:00:00+02:00","value":13.556},{"date":"2025-07-14T06:15:00+02:00","value":13.556},{"date":"2025-07-14T06:30:00+02:00","value":13.556},{"date":"2025-07-14T06:45:00+02:00","value":13.556},{"date":"2025-07-14T07:00:00+02:00","value":13.64},{"date":"2025-07-14T07:15:00+02:00","value":13.64},{"date":"2025-07-14T07:30:00+02:00","value":13.64},{"date":"2025-07-14T07:45:00+02:00","value":13.64},{"date":"2025-07-14T08:00:00+02:00","value":11.965},{"date":"2025-07-14T08:15:00+02:00","value":11.965},{"date":"2025-07-14T08:30:00+02:00","value":11.965},{"date":"2025-07-14T08:45:00+02:00","value":11.965},{"date":"2025-07-14T09:00:00+02:00","value":10.032},{"date":"2025-07-14T09:15:00+02:00","value":10.032},{"date":"2025-07-14T09:30:00+02:00","value":10.032},{"date":"2025-07-14T09:45:00+02:00","value":10.032},{"date":"2025-07-14T10:00:00+02:00","value":9.083},{"date":"2025-07-14T10:15:00+02:00","value":9.083},{"date":"2025-07-14T10:30:00+02:00","value":9.083},{"date":"2025-07-14T10:45:00+02:00","value":9.083},{"date":"2025-07-14T11:00:00+02:00","value":8.887},{"date":"2025-07-14T11:15:00+02:00","value":8.887},{"date":"2025-07-14T11:30:00+02:00","value":8.887},{"date":"2025-07-14T11:45:00+02:00","value":8.887},{"date":"2025-07-14T12:00:00+02:00","value":8.804},{"date":"2025-07-14T12:15:00+02:00","value":8.804},{"date":"2025-07-14T12:30:00+02:00","value":8.804},{"date":"2025-07-14T12:45:00+02:00","value":8.804},{"date":"2025-07-14T13:00:00+02:00","value":7.946},{"date":"2025-07-14T13:15:00+02:00","value":7.946},{"date":"2025-07-14T13:30:00+02:00","value":7.946},{"date":"2025-07-14T13:45:00+02:00","value":7.946},{"date":"2025-07-14T14:00:00+02:00","value":7.111},{"date":"2025-07-14T14:15:00+02:00","value":7.111},{"date":"2025-07-14T14:30:00+02:00","value":7.111},{"date":"2025-07-14T14:45:00+02:00","value":7.111},{"date":"2025-07-14T15:00:00+02:00","value":9.595},{"date":"2025-07-14T15:15:00+02:00","value":9.595},{"date":"2025-07-14T15:30:00+02:00","value":9.595},{"date":"2025-07-14T15:45:00+02:00","value":9.595},{"date":"2025-07-14T16:00:00+02:00","value":10.202},{"date":"2025-07-14T16:15:00+02:00","value":10.202},{"date":"2025-07-14T16:30:00+02:00","value":10.202},{"date":"2025-07-14T16:45:00+02:00","value":10.202},{"date":"2025-07-14T17:00:00+02:00","value":13.201},{"date":"2025-07-14T17:15:00+02:00","value":13.201},{"date":"2025-07-14T17:30:00+02:00","value":13.201},{"date":"2025-07-14T17:45:00+02:00","value":13.201},{"date":"2025-07-14T18:00:00+02:00","value":12.295},{"date":"2025-07-14T18:15:00+02:00","value":12.295},{"date":"2025-07-14T18:30:00+02:00","value":12.295},{"date":"2025-07-14T18:45:00+02:00","value":12.295},{"date":"2025-07-14T19:00:00+02:00","value":15.955},{"date":"2025-07-14T19:15:00+02:00","value":15.955},{"date":"2025-07-14T19:30:00+02:00","value":15.955},{"date":"2025-07-14T19:45:00+02:00","value":15.955},{"date":"2025-07-14T20:00:00+02:00","value":15.949},{"date":"2025-07-14T20:15:00+02:00","value":15.949},{"date":"2025-07-14T20:30:00+02:00","value":15.949},{"date":"2025-07-14T20:45:00+02:00","value":15.949},{"date":"2025-07-14T21:00:00+02:00","value":16.488},{"date":"2025-07-14T21:15:00+02:00","value":16.488},{"date":"2025-07-14T21:30:00+02:00","value":16.488},{"date":"2025-07-14T21:45:00+02:00","value":16.488},{"date":"2025-07-14T22:00:00+02:00","value":15.138},{"date":"2025-07-14T22:15:00+02:00","value":15.138},{"date":"2025-07-14T22:30:00+02:00","value":15.138},{"date":"2025-07-14T22:45:00+02:00","value":15.138},{"date":"2025-07-14T23:00:00+02:00","value":13.552},{"date":"2025-07-14T23:15:00+02:00","value":13.552},{"date":"2025-07-14T23:30:00+02:00","value":13.552},{"date":"2025-07-14T23:45:00+02:00","value":13.552}]}

      Versionen:
      IOB: v7.6.17
      JS: v8.9.2
      Node.js: v20.19.3
      NPM: 10.8.2

      1 Reply Last reply Reply Quote 0
      • JohGre
        JohGre last edited by

        Hi,
        warum nimmst du nicht den aWattar-Adapter, hat die gleichen Preise wie Smart Energy.
        Bin selber auch bei SmartEnery und nutze die Daten vom aWattar-Adapter.

        fuzzy1955 1 Reply Last reply Reply Quote 0
        • fuzzy1955
          fuzzy1955 @JohGre last edited by

          @johgre sagte in Problem: Abruf von Strompreisen mit JS und Axios:

          aWattar

          Danke für den Hinweis. Den Adapter hab ich schon probiert. Er zeigt bei mir keine Datenpunkte an:
          Clipboard01.jpg

          1 Reply Last reply Reply Quote 0
          • JohGre
            JohGre last edited by

            Instanz ist angelegt?
            URL: https://api.awattar.at/v1/marketdata eingetragen. Sonst kann man eh nicht viel konfigurieren

            fuzzy1955 1 Reply Last reply Reply Quote 0
            • arteck
              arteck Developer Most Active last edited by

              @fuzzy1955 schau doch mal was du im response bekommst

              console.warn(JSON.stringify(response));
              

              in die zeile 12

              fuzzy1955 1 Reply Last reply Reply Quote 0
              • fuzzy1955
                fuzzy1955 @JohGre last edited by

                @johgre sagte in Problem: Abruf von Strompreisen mit JS und Axios:

                URL: https://api.awattar.at/v1/marketdata eingetragen

                Ja, habe ich gemacht.
                Clipboard02.jpg

                1 Reply Last reply Reply Quote 0
                • JohGre
                  JohGre last edited by

                  aa2b0d7d-d6b6-41c1-980d-aa841bf55e49-image.png
                  Der aWattar Adapter holt nur einmal am Tag die Daten, bei mir um 14:55 Uhr. Was hast du da konfiguriert

                  fuzzy1955 1 Reply Last reply Reply Quote 0
                  • fuzzy1955
                    fuzzy1955 @arteck last edited by

                    @arteck sagte in Problem: Abruf von Strompreisen mit JS und Axios:

                    in die zeile 12

                    Fehler beim Abrufen des Strompreises: Converting circular structure to JSON
                        --> starting at object with constructor 'ClientRequest'
                        |     property 'res' -> object with constructor 'IncomingMessage'
                        --- property 'req' closes the circle
                    
                    arteck 1 Reply Last reply Reply Quote 0
                    • arteck
                      arteck Developer Most Active @fuzzy1955 last edited by

                      @fuzzy1955 sagte in Problem: Abruf von Strompreisen mit JS und Axios:

                      Converting circular structure to JSON

                      da hst du es ja..

                      fuzzy1955 1 Reply Last reply Reply Quote 0
                      • fuzzy1955
                        fuzzy1955 @arteck last edited by

                        @arteck sagte in Problem: Abruf von Strompreisen mit JS und Axios:

                        da hst du es ja..

                        Ja, aber ich weiß dazu keine Lösung. Kannst du mir weiterhelfen?

                        1 Reply Last reply Reply Quote 0
                        • fuzzy1955
                          fuzzy1955 @JohGre last edited by

                          @johgre sagte in Problem: Abruf von Strompreisen mit JS und Axios:

                          Der aWattar Adapter holt nur einmal am Tag die Daten, bei mir um 14:55 Uhr.

                          Aah... jetzt fällt es mir wieder ein. Ich fand es zu mühsam, die Daten aus 24 Stundenverzeichnissen rauszuklauben. Darum bin ich auf die Version mit JS gekommen.

                          1 Reply Last reply Reply Quote 0
                          • arteck
                            arteck Developer Most Active last edited by

                            @fuzzy1955 sagte in Problem: Abruf von Strompreisen mit JS und Axios:

                            @arteck sagte in Problem: Abruf von Strompreisen mit JS und Axios:

                            da hst du es ja..

                            Ja, aber ich weiß dazu keine Lösung. Kannst du mir weiterhelfen?

                            ja wird aber nach 12 uhr

                            fuzzy1955 1 Reply Last reply Reply Quote 0
                            • JohGre
                              JohGre last edited by

                              Habe mal ChatGPT bemüht.

                              async function fetchPowerData() {
                                  try {
                                      const response = await axios.get(apiUrl);
                                      const powerData = response.data;
                                      
                                      console.log("Strompreisdaten: " + JSON.stringify(powerData.data));
                                      const dataArray = powerData.data;
                                          dataArray.forEach(entry => {
                                              const isoDate = entry.date;
                                              const value = entry.value;
                                              const date = new Date(isoDate);
                                              const localTime = date.toLocaleString();
                              
                                              console.log(`Original: ${isoDate} => Lokal: ${localTime} | Wert: ${value}`);
                              
                                          });
                               
                                  } catch (e) {
                                      console.error("Fehler beim Abrufen des Strompreises: " + e.message);
                                  }
                              }
                              

                              Das iteriert jetzt durch das ResponseArray und schreibt alle Werte mal raus.

                              fuzzy1955 2 Replies Last reply Reply Quote 2
                              • fuzzy1955
                                fuzzy1955 @arteck last edited by

                                @arteck sagte in Problem: Abruf von Strompreisen mit JS und Axios:

                                ja wird aber nach 12 uhr

                                Danke, bei mir wird es eher 20 Uhr.

                                1 Reply Last reply Reply Quote 0
                                • fuzzy1955
                                  fuzzy1955 @JohGre last edited by

                                  @johgre sagte in Problem: Abruf von Strompreisen mit JS und Axios:

                                  Das iteriert jetzt durch das ResponseArray und schreibt alle Werte mal raus

                                  Aaah .... danke! Das hilft mir sehr weiter!

                                  1 Reply Last reply Reply Quote 0
                                  • fuzzy1955
                                    fuzzy1955 @JohGre last edited by

                                    @johgre sagte in [gelöst] Problem: Abruf von Strompreisen mit JS und Axios:

                                    Das iteriert jetzt durch das ResponseArray und schreibt alle Werte mal raus.

                                    Danke nochmals! Das ResponseArray läuft super! Genau das brauchte ich 😊

                                    1 Reply Last reply Reply Quote 0
                                    • First post
                                      Last post

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    669
                                    Online

                                    31.9k
                                    Users

                                    80.1k
                                    Topics

                                    1.3m
                                    Posts

                                    3
                                    16
                                    54
                                    Loading More Posts
                                    • Oldest to Newest
                                    • Newest to Oldest
                                    • Most Votes
                                    Reply
                                    • Reply as topic
                                    Log in to reply
                                    Community
                                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                    The ioBroker Community 2014-2023
                                    logo