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.6k

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

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


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      413

                      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