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

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

NEWS

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

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

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

Scriptoptimierung Solarprognose

Geplant Angeheftet Gesperrt Verschoben JavaScript
18 Beiträge 5 Kommentatoren 1.1k Aufrufe 5 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.
  • icebearI Online
    icebearI Online
    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 - es gibt fast nichts, was nicht auch für andere interessant ist.

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      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: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        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 Online
          icebearI Online
          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: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              1 Antwort Letzte Antwort
              0
              • icebearI Online
                icebearI Online
                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 Abwesend
                  Meister MopperM Abwesend
                  Meister Mopper
                  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

                  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 Online
                      icebearI Online
                      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 Online
                          icebearI Online
                          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
                          Antworten
                          • In einem neuen Thema antworten
                          Anmelden zum Antworten
                          • Älteste zuerst
                          • Neuste zuerst
                          • Meiste Stimmen


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          798

                          Online

                          32.4k

                          Benutzer

                          81.5k

                          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