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

    • [erledigt] 15. 05. Wartungsarbeiten am ioBroker Forum

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Scriptoptimierung Solarprognose

    This topic has been deleted. Only users with topic management privileges can see it.
    • arteck
      arteck Developer Most Active last edited by

      @icebear sagte in Scriptoptimierung Solarprognose:

      Leider weiß ich nicht mehr wer der Ersteller des Script ist, sonst hätte ich mich direkt an den gewandt. Vielleicht kann ja hier einer eine Anpassung vornehmen, das die Ordner in der Vergangenheit automatisch gelöscht werden. (Also alles was älter als heute ist.)

      na ja eigentlich ist das was da gemacht wird mumpitz... eine historie legt man über entsprechendes adapter (influx oder history oder oder)
      und nicht über Datenpunkte....

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

        @arteck said in Scriptoptimierung Solarprognose:

        na ja eigentlich ist das was da gemacht wird mumpitz... eine historie legt man über entsprechendes adapter (influx oder history oder oder)
        und nicht über Datenpunkte....

        Da bin ich ja ganz bei dir, nur leider fehlt mir die Kenntnis, um das anzupassen. Mich interessieren eigentlich nur die Ordner, die die Werte für 'Heute' und die nächsten drei Tage enthalten.

        1 Reply Last reply Reply Quote 0
        • 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

                                      558
                                      Online

                                      31.6k
                                      Users

                                      79.5k
                                      Topics

                                      1.3m
                                      Posts

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