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

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

    HomoranH Offline
    HomoranH Offline
    Homoran
    Global Moderator Administrators
    schrieb am zuletzt editiert von
    #6

    @icebear sagte in Scriptoptimierung Solarprognose:

    er hat die JSON in die DP abgelegt.

    wie sieht denn das JSON aus?

    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 Offline
      icebearI Offline
      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 Offline
        HomoranH Offline
        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 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

                            376

                            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