Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Scriptoptimierung Solarprognose

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    1.6k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    664

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    1.2k

Scriptoptimierung Solarprognose

Geplant Angeheftet Gesperrt Verschoben JavaScript
18 Beiträge 5 Kommentatoren 1.5k Aufrufe 5 Beobachtet
  • Ä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.
  • icebearI Offline
    icebearI Offline
    icebear
    schrieb am zuletzt editiert von
    #7

    @homoran said in Scriptoptimierung Solarprognose:

    wie sieht denn das JSON aus?

    [["06:00",[0,0]],["07:00",[1.077,1.077]],["08:00",[2.167,3.244]],["09:00",[3.308,6.552]],["10:00",[4.04,10.592]],["11:00",[4.29,14.882]],["12:00",[3.934,18.816]],["13:00",[2.361,21.177]],["14:00",[1.77,22.947]],["15:00",[0,22.947]]]
    

    Also Uhrzeit dann Leistung und Energie.

    Also müsste ich ein Blockly haben was mir dann aus der JSON zwei Werte in DP schreibt, hier von heute:

    DP Uhrzeit 12:00
    DP Leistung 3.934

    HomoranH paul53P 2 Antworten Letzte Antwort
    0
    • icebearI icebear

      @homoran said in Scriptoptimierung Solarprognose:

      wie sieht denn das JSON aus?

      [["06:00",[0,0]],["07:00",[1.077,1.077]],["08:00",[2.167,3.244]],["09:00",[3.308,6.552]],["10:00",[4.04,10.592]],["11:00",[4.29,14.882]],["12:00",[3.934,18.816]],["13:00",[2.361,21.177]],["14:00",[1.77,22.947]],["15:00",[0,22.947]]]
      

      Also Uhrzeit dann Leistung und Energie.

      Also müsste ich ein Blockly haben was mir dann aus der JSON zwei Werte in DP schreibt, hier von heute:

      DP Uhrzeit 12:00
      DP Leistung 3.934

      HomoranH Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von
      #8

      @icebear Screenshot_20241130-170940_Firefox.jpg

      kein Support per PN! - Fragen im Forum stellen -
      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
      Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      1 Antwort Letzte Antwort
      0
      • icebearI icebear

        @homoran said in Scriptoptimierung Solarprognose:

        wie sieht denn das JSON aus?

        [["06:00",[0,0]],["07:00",[1.077,1.077]],["08:00",[2.167,3.244]],["09:00",[3.308,6.552]],["10:00",[4.04,10.592]],["11:00",[4.29,14.882]],["12:00",[3.934,18.816]],["13:00",[2.361,21.177]],["14:00",[1.77,22.947]],["15:00",[0,22.947]]]
        

        Also Uhrzeit dann Leistung und Energie.

        Also müsste ich ein Blockly haben was mir dann aus der JSON zwei Werte in DP schreibt, hier von heute:

        DP Uhrzeit 12:00
        DP Leistung 3.934

        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von paul53
        #9

        @icebear sagte: DP Uhrzeit 12:00
        DP Leistung 3.934

        Das Leistungs-Maximum ist um 11:00 Uhr.

        Blockly_temp.JPG

        EDIT: Da die Datenpunkte offenbar vom Typ "array" sind, muss man die Wandlung weglassen, da es der Javascript-Adapter macht.

        Blockly_temp.JPG

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB

        1 Antwort Letzte Antwort
        0
        • arteckA arteck

          @icebear

          kommst du damit besser klar

          const url = 'http://www.solarprognose.de/web/solarprediction/api/v1?_format=json&access-token=xxxxxxxxxxxxxxxxxxxxxx&item=location&id=xxxx&type=hourly';
          const path = '0_userdata.0.Solar2';
          
          schedule('4 8,10,12,14,16 * * *', function() {
               abfrage();
          });
          
          function abfrage() {
              httpGet(url, function (error, response) {
                  if (error) {
                      log(error, 'error');
                  }
                  else {
                      let obj = JSON.parse(response.data);
                      dpCreate('', obj.data, 'string');
                      dpFill(obj);
                  }
              });
          }
          
          function dpFill(obj) {
              if (obj.status) { 
                  log('Fehler: ' + obj.status, 'warn');
              } else {
                  let data = obj.data;
                  
                  const outArray = formatAndSplitData(data);
          
                  dpCreate('.heute', outArray.heute);   
                  dpCreate('.morgen', outArray.morgen); 
                  dpCreate('.uebermorgen', outArray.uebermorgen); 
          
              }
          }
          
          
          function formatAndSplitData(data) {
              const SECONDS_IN_A_DAY = 86400;
              const MS_IN_A_SECOND = 1000;
          
              const now = new Date();
              const todayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime();
              const tomorrowStart = todayStart + SECONDS_IN_A_DAY * MS_IN_A_SECOND;
              const dayAfterTomorrowStart = tomorrowStart + SECONDS_IN_A_DAY * MS_IN_A_SECOND;
          
              const result = {
                  heute: [],
                  morgen: [],
                  uebermorgen: []
              };
          
              for (const [timestamp, values] of Object.entries(data)) {
                  const ts = Number(timestamp) * MS_IN_A_SECOND; // Convert timestamp to milliseconds
                  const date = new Date(ts);
                  const formattedTime = date.toLocaleTimeString("de-DE", { hour: "2-digit", minute: "2-digit" }); // Format as "hh:mm"
          
                  const entry = [formattedTime, ...values];
          
                  if (ts >= todayStart && ts < tomorrowStart) {
                      result.heute.push(entry);
                  } else if (ts >= tomorrowStart && ts < dayAfterTomorrowStart) {
                      result.morgen.push(entry);
                  } else if (ts >= dayAfterTomorrowStart) {
                      result.uebermorgen.push(entry);
                  }
              }
          
              return result;
          }
          
          function dpCreate(text, data, typ) {
              createState(path + text + '.Json', [], false, {
                  name: 'json' + text,
                  type: typ == "string" ? typ : 'array', 
                  role: 'json', 
                  read: true,
                  write: false
              });
          
              setTimeout(function () { 
                  setState(path + text + '.Json', data, true);
              }, 600);
          }
          

          der genereirt nur arrays für heute morgen und übermorgen
          3b2bfd57-0058-41a0-97ff-65c0f3252361-grafik.png

          die kannst du dann im blockly weiterverarbeiten

          icebearI Offline
          icebearI Offline
          icebear
          schrieb am zuletzt editiert von
          #10

          @arteck said in Scriptoptimierung Solarprognose:

          kommst du damit besser klar

          Soweit funktioniert das Script, allerdings ist mir aufgefallen, das anscheinend in das JSON 'Z-Zeiten' eingetragen werden.
          Da, wenn man mal reinschaut die Zeiten mit den höchsten Erträgen um zwei Stunden nach vorne verschoben sind.

          Ich denke nicht das um 11:00L Uhr der höchste Ertrag zu erwarten ist.

          [["06:00",[0,0]],["07:00",[0.435,0.435]],["08:00",[1.472,1.907]],["09:00",[2.19,4.097]],["10:00",[2.819,6.916]],["11:00",[3.486,10.402]],["12:00",[3.202,13.604]],["13:00",[2.175,15.779]],["14:00",[0.953,16.732]],["15:00",[0,16.732]]]
          
          arteckA 1 Antwort Letzte Antwort
          0
          • icebearI icebear

            @arteck said in Scriptoptimierung Solarprognose:

            kommst du damit besser klar

            Soweit funktioniert das Script, allerdings ist mir aufgefallen, das anscheinend in das JSON 'Z-Zeiten' eingetragen werden.
            Da, wenn man mal reinschaut die Zeiten mit den höchsten Erträgen um zwei Stunden nach vorne verschoben sind.

            Ich denke nicht das um 11:00L Uhr der höchste Ertrag zu erwarten ist.

            [["06:00",[0,0]],["07:00",[0.435,0.435]],["08:00",[1.472,1.907]],["09:00",[2.19,4.097]],["10:00",[2.819,6.916]],["11:00",[3.486,10.402]],["12:00",[3.202,13.604]],["13:00",[2.175,15.779]],["14:00",[0.953,16.732]],["15:00",[0,16.732]]]
            
            arteckA Offline
            arteckA Offline
            arteck
            Developer Most Active
            schrieb am zuletzt editiert von arteck
            #11

            @icebear jetzt wo du es sagst... ziehmal das script nochmal

            ich hab aber auch die ausgabe geändert .. so kann man es direkt im JSON Table widget nutzen

            [["07:00",0,0],["08:00",0.291,0.291],["09:00",1.333,1.624],["10:00",2.62,4.244],["11:00",3.213,7.457],["12:00",3.677,11.134],["13:00",3.686,14.82],["14:00",3.247,18.067],["15:00",1.353,19.42],["16:00",0,19.42]]
            

            4ccdfd9b-fe5f-4c47-ac27-3cfcc0b42af9-grafik.png

            zigbee hab ich, zwave auch, nuc's genauso und HA auch

            paul53P 1 Antwort Letzte Antwort
            1
            • arteckA arteck

              @icebear jetzt wo du es sagst... ziehmal das script nochmal

              ich hab aber auch die ausgabe geändert .. so kann man es direkt im JSON Table widget nutzen

              [["07:00",0,0],["08:00",0.291,0.291],["09:00",1.333,1.624],["10:00",2.62,4.244],["11:00",3.213,7.457],["12:00",3.677,11.134],["13:00",3.686,14.82],["14:00",3.247,18.067],["15:00",1.353,19.42],["16:00",0,19.42]]
              

              4ccdfd9b-fe5f-4c47-ac27-3cfcc0b42af9-grafik.png

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #12

              @arteck sagte: die ausgabe geändert

              Damit vereinfacht sich auch das Blockly zur Ermittlung des Leistungsmaximums.

              Blockly_temp.JPG

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB

              1 Antwort Letzte Antwort
              0
              • icebearI Offline
                icebearI Offline
                icebear
                schrieb am zuletzt editiert von
                #13

                @arteck
                @paul53

                Super vielen Dank für eure Hilfe, soweit ich jetzt getestet hab funktioniert das ganze jetzt so wie ich mir das vorgestellt hab.

                Also nochmal vielen Dank!!!!

                1 Antwort Letzte Antwort
                0
                • arteckA arteck

                  @icebear

                  kommst du damit besser klar

                  const url = 'http://www.solarprognose.de/web/solarprediction/api/v1?_format=json&access-token=xxxxxxxxxxxxxxxxxxxxxx&item=location&id=xxxx&type=hourly';
                  const path = '0_userdata.0.Solar2';
                  
                  schedule('4 8,10,12,14,16 * * *', function() {
                       abfrage();
                  });
                  
                  function abfrage() {
                      httpGet(url, function (error, response) {
                          if (error) {
                              log(error, 'error');
                          }
                          else {
                              let obj = JSON.parse(response.data);
                              dpCreate('', obj.data, 'string');
                              dpFill(obj);
                          }
                      });
                  }
                  
                  function dpFill(obj) {
                      if (obj.status) { 
                          log('Fehler: ' + obj.status, 'warn');
                      } else {
                          let data = obj.data;
                          
                          const outArray = formatAndSplitData(data);
                  
                          dpCreate('.heute', outArray.heute);   
                          dpCreate('.morgen', outArray.morgen); 
                          dpCreate('.uebermorgen', outArray.uebermorgen); 
                  
                      }
                  }
                  
                  
                  function formatAndSplitData(data) {
                      const SECONDS_IN_A_DAY = 86400;
                      const MS_IN_A_SECOND = 1000;
                  
                      const now = new Date();
                      const todayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime();
                      const tomorrowStart = todayStart + SECONDS_IN_A_DAY * MS_IN_A_SECOND;
                      const dayAfterTomorrowStart = tomorrowStart + SECONDS_IN_A_DAY * MS_IN_A_SECOND;
                  
                      const result = {
                          heute: [],
                          morgen: [],
                          uebermorgen: []
                      };
                  
                      for (const [timestamp, values] of Object.entries(data)) {
                          const ts = Number(timestamp) * MS_IN_A_SECOND; // Convert timestamp to milliseconds
                          const date = new Date(ts);
                          const formattedTime = date.toLocaleTimeString("de-DE", { hour: "2-digit", minute: "2-digit" }); // Format as "hh:mm"
                  
                          const entry = [formattedTime, ...values];
                  
                          if (ts >= todayStart && ts < tomorrowStart) {
                              result.heute.push(entry);
                          } else if (ts >= tomorrowStart && ts < dayAfterTomorrowStart) {
                              result.morgen.push(entry);
                          } else if (ts >= dayAfterTomorrowStart) {
                              result.uebermorgen.push(entry);
                          }
                      }
                  
                      return result;
                  }
                  
                  function dpCreate(text, data, typ) {
                      createState(path + text + '.Json', [], false, {
                          name: 'json' + text,
                          type: typ == "string" ? typ : 'array', 
                          role: 'json', 
                          read: true,
                          write: false
                      });
                  
                      setTimeout(function () { 
                          setState(path + text + '.Json', data, true);
                      }, 600);
                  }
                  

                  der genereirt nur arrays für heute morgen und übermorgen
                  3b2bfd57-0058-41a0-97ff-65c0f3252361-grafik.png

                  die kannst du dann im blockly weiterverarbeiten

                  Meister MopperM Offline
                  Meister MopperM Offline
                  Meister Mopper
                  Most Active
                  schrieb am zuletzt editiert von
                  #14

                  @arteck sagte in Scriptoptimierung Solarprognose:

                  kommst du damit besser klar

                  Ich habe das Skript mal hier implementiert, bekomme aber für uebermorgen keine Ergebnisse, obwohl ich heute bei solarprognose.de die Prognose von 2 auf 3 Tage erhöht habe.

                  f92496a6-a19d-409f-9e10-12d5a78c69ea-grafik.png

                  Hast Du eine Idee, woran das liegen könnte, und was hast Du da eingetragen?

                  752b8346-7d67-4e43-8217-b670907f2732-grafik.png

                  Proxmox und HA - dank KI/AI endlich "blocklyfrei"

                  arteckA 1 Antwort Letzte Antwort
                  0
                  • Meister MopperM Meister Mopper

                    @arteck sagte in Scriptoptimierung Solarprognose:

                    kommst du damit besser klar

                    Ich habe das Skript mal hier implementiert, bekomme aber für uebermorgen keine Ergebnisse, obwohl ich heute bei solarprognose.de die Prognose von 2 auf 3 Tage erhöht habe.

                    f92496a6-a19d-409f-9e10-12d5a78c69ea-grafik.png

                    Hast Du eine Idee, woran das liegen könnte, und was hast Du da eingetragen?

                    752b8346-7d67-4e43-8217-b670907f2732-grafik.png

                    arteckA Offline
                    arteckA Offline
                    arteck
                    Developer Most Active
                    schrieb am zuletzt editiert von arteck
                    #15

                    @meister-mopper ich weiss nicht wann die die Daten für welchen Tag zur verfügung stellen..

                    1bccc4e2-f126-48b8-b6a5-cefbce1d1143-grafik.png

                    zigbee hab ich, zwave auch, nuc's genauso und HA auch

                    icebearI 1 Antwort Letzte Antwort
                    0
                    • arteckA arteck

                      @meister-mopper ich weiss nicht wann die die Daten für welchen Tag zur verfügung stellen..

                      1bccc4e2-f126-48b8-b6a5-cefbce1d1143-grafik.png

                      icebearI Offline
                      icebearI Offline
                      icebear
                      schrieb am zuletzt editiert von
                      #16

                      @arteck

                      Ich glaub du mußt auch nochmal nach dem Script schauen, weil ich bei 'übermorgen' drei Tage im JSON drin stehen hab.

                      [["08:00",0,0],["09:00",0.237,0.237],["10:00",2.297,2.534],["11:00",2.928,5.462],["12:00",1.611,7.073],["13:00",1.399,8.472],["14:00",2.316,10.788],["15:00",0.543,11.331],["16:00",0,11.331],["07:00",0,0],["08:00",0.004,0.004],["09:00",0.157,0.161],["10:00",0.443,0.604],["11:00",0.641,1.245],["12:00",0.731,1.976],["13:00",0.726,2.702],["14:00",0.65,3.352],["15:00",0.429,3.781],["16:00",0,3.781],["08:00",0,0],["09:00",0.144,0.144],["10:00",0.443,0.587],["11:00",0.614,1.201],["12:00",0.702,1.903],["13:00",0.699,2.602],["14:00",0.59,3.192],["15:00",0.396,3.588],["16:00",0,3.588]]
                      

                      Ist mir erst gar nicht aufgefallen.

                      1 Antwort Letzte Antwort
                      0
                      • arteckA Offline
                        arteckA Offline
                        arteck
                        Developer Most Active
                        schrieb am zuletzt editiert von
                        #17

                        @icebear poste mal den JSON aus dem Hauptordner

                        zigbee hab ich, zwave auch, nuc's genauso und HA auch

                        icebearI 1 Antwort Letzte Antwort
                        0
                        • arteckA arteck

                          @icebear poste mal den JSON aus dem Hauptordner

                          icebearI Offline
                          icebearI Offline
                          icebear
                          schrieb am zuletzt editiert von
                          #18

                          @arteck said in Scriptoptimierung Solarprognose:

                          poste mal den JSON aus dem Hauptordner

                          {"1733468400":[0,0],"1733472000":[0.144,0.144],"1733475600":[0.443,0.587],"1733479200":[0.668,1.255],"1733482800":[0.702,1.957],"1733486400":[0.753,2.71],"1733490000":[0.63,3.34],"1733493600":[0.56,3.9],"1733497200":[0,3.9],"1733551200":[0,0],"1733554800":[0.144,0.144],"1733558400":[0.21,0.354],"1733562000":[0.443,0.797],"1733565600":[0.614,1.411],"1733569200":[1.962,3.373],"1733572800":[1.775,5.148],"1733576400":[0.951,6.099],"1733580000":[1.068,7.167],"1733583600":[0,7.167],"1733637600":[0,0],"1733641200":[0.048,0.048],"1733644800":[0.157,0.205],"1733648400":[0.506,0.711],"1733652000":[3.037,3.748],"1733655600":[3.281,7.029],"1733659200":[2.798,9.827],"1733662800":[2.275,12.102],"1733666400":[1.092,13.194],"1733670000":[0,13.194],"1733727600":[0,0],"1733731200":[0.144,0.144],"1733734800":[0.443,0.587],"1733738400":[0.641,1.228],"1733742000":[0.761,1.989],"1733745600":[0.78,2.769],"1733749200":[0.65,3.419],"1733752800":[0.421,3.84],"1733756400":[0,3.84],"1733814000":[0,0],"1733817600":[0.144,0.144],"1733821200":[0.443,0.587],"1733824800":[0.614,1.201],"1733828400":[0.702,1.903],"1733832000":[0.699,2.602],"1733835600":[0.59,3.192],"1733839200":[0.396,3.588],"1733842800":[0,3.588]}
                          
                          1 Antwort Letzte Antwort
                          0

                          Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                          Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                          Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                          Registrieren Anmelden
                          Antworten
                          • In einem neuen Thema antworten
                          Anmelden zum Antworten
                          • Älteste zuerst
                          • Neuste zuerst
                          • Meiste Stimmen


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          342

                          Online

                          32.9k

                          Benutzer

                          82.9k

                          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