Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Scriptoptimierung Solarprognose

    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

    Scriptoptimierung Solarprognose

    This topic has been deleted. Only users with topic management privileges can see it.
    • arteck
      arteck Developer Most Active last edited by 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

      icebear Meister Mopper 3 Replies Last reply Reply Quote 0
      • icebear
        icebear @arteck last edited by

        @arteck said in Scriptoptimierung Solarprognose:

        kommst du damit besser klar

        Ersteinmal vielen Dank für deine Hilfe, soweit klappt das schonmal und er hat die JSON in die DP abgelegt.

        Jetzt muß ich mal schauen wie ich die mit Blockly so verarbeite das er mir die höchsten Werte und die Uhrzeit in ein DP schreibt.

        Homoran 1 Reply Last reply Reply Quote 0
        • Homoran
          Homoran Global Moderator Administrators @icebear last edited by

          @icebear sagte in Scriptoptimierung Solarprognose:

          er hat die JSON in die DP abgelegt.

          wie sieht denn das JSON aus?

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

            @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

            Homoran paul53 2 Replies Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators @icebear last edited by

              @icebear Screenshot_20241130-170940_Firefox.jpg

              1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @icebear last edited by paul53

                @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

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

                  @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]]]
                  
                  arteck 1 Reply Last reply Reply Quote 0
                  • arteck
                    arteck Developer Most Active @icebear last edited by 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

                    paul53 1 Reply Last reply Reply Quote 1
                    • paul53
                      paul53 @arteck last edited by

                      @arteck sagte: die ausgabe geändert

                      Damit vereinfacht sich auch das Blockly zur Ermittlung des Leistungsmaximums.

                      Blockly_temp.JPG

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

                        @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 Reply Last reply Reply Quote 0
                        • Meister Mopper
                          Meister Mopper @arteck last edited by

                          @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

                          arteck 1 Reply Last reply Reply Quote 0
                          • arteck
                            arteck Developer Most Active @Meister Mopper last edited by 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

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

                              @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 Reply Last reply Reply Quote 0
                              • arteck
                                arteck Developer Most Active last edited by

                                @icebear poste mal den JSON aus dem Hauptordner

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

                                  @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 Reply Last reply Reply Quote 0
                                  • First post
                                    Last post

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  416
                                  Online

                                  31.8k
                                  Users

                                  80.0k
                                  Topics

                                  1.3m
                                  Posts

                                  5
                                  18
                                  596
                                  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