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

  • 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 Online
    icebearI Online
    icebear
    schrieb am zuletzt editiert von
    #1

    Hallo, ich habe folgendes Script welches die PV-Vorhersage von Solarprognose für die nächsten 4 Tage abholt.

    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.Solar.';
    const idLeistung = path + 'Leistung.';
    const idEnergie  = path + 'Energie.';
     
    schedule('4 8,10,12,14,16 * * *', function() {
    
        httpGet(url, function (error, response) {
            if(error) log(error, 'error');
            else {
                let obj = JSON.parse(response.data);
                if(obj.status) log('Fehler: ' + obj.status, 'warn');
                else {
                    let data = obj.data;
                    for(let entry in data) {
                        let time = formatDate(parseInt(entry), 'MM-DD.hh:mm');
                        if(existsState(idLeistung + time)) setState(idLeistung + time, data[entry][0], true);
                        else createState(idLeistung + time, data[entry][0], {
                            type: 'number', 
                            role: 'value', 
                            name: 'Solarleistung ' + formatDate(parseInt(entry), 'DD.MM. hh:mm'),
                            read: true,
                            write: false,
                            unit: 'kW'
                        });
                        if(existsState(idEnergie + time)) setState(idEnergie + time, data[entry][1], true);
                        else createState(idEnergie + time, data[entry][1], {
                            type: 'number', 
                            role: 'value', 
                            name: 'Solarenergie ' + formatDate(parseInt(entry), 'DD.MM. hh:mm'),
                            read: true,
                            write: false,
                            unit: 'kWh'
                        });
                    }
                }
            }
        });
    });
    

    Das funktioniert soweit auch super, allerdings wird für jeden Tag ein neuer Ordner unter 'Energie' und 'Leistung' angelegt, und die in der Vergangenheit werden nicht automatisch gelöscht.
    Dies führt dazu das ich am Ende des Monats die Ordner immer von Hand löschen muß, damit das nicht unendlich viele werden.

    Ordnerstruktur:

    solarprognose.png

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

    Weiterhin wäre es Super wenn einer eine Idee hätte wie man aus der Struktur für 'Heute' und 'Morgen' den höchsten Ertrag und die Uhrzeit ermitteln kann (gern auch als Blockly)

    1 Antwort Letzte Antwort
    0
    • arteckA Offline
      arteckA Offline
      arteck
      Developer Most Active
      schrieb am zuletzt editiert von
      #2

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

      zigbee hab ich, zwave auch, nuc's genauso und HA auch

      icebearI 1 Antwort Letzte Antwort
      0
      • arteckA arteck

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

        icebearI Online
        icebearI Online
        icebear
        schrieb am zuletzt editiert von icebear
        #3

        @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 Antwort Letzte Antwort
        0
        • arteckA Offline
          arteckA Offline
          arteck
          Developer Most Active
          schrieb am zuletzt editiert von arteck
          #4

          @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

          zigbee hab ich, zwave auch, nuc's genauso und HA auch

          icebearI Meister MopperM 3 Antworten 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 Online
            icebearI Online
            icebear
            schrieb am zuletzt editiert von
            #5

            @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 1 Antwort Letzte Antwort
            0
            • 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 Nicht stören
              HomoranH Nicht stören
              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 Online
                icebearI Online
                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 Nicht stören
                  HomoranH Nicht stören
                  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 Online
                      icebearI Online
                      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 Online
                            icebearI Online
                            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 Abwesend
                              Meister MopperM Abwesend
                              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 Online
                                  icebearI Online
                                  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 Online
                                      icebearI Online
                                      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

                                      854

                                      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