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.
    • 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

                                    775
                                    Online

                                    31.8k
                                    Users

                                    80.0k
                                    Topics

                                    1.3m
                                    Posts

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