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 1 Reply 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
                                  • First post
                                    Last post

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  824
                                  Online

                                  31.9k
                                  Users

                                  80.1k
                                  Topics

                                  1.3m
                                  Posts

                                  3
                                  15
                                  43
                                  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