Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Solarwetter

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.0k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Solarwetter

Scheduled Pinned Locked Moved Skripten / Logik
18 Posts 7 Posters 3.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    Marcolotti
    wrote on last edited by
    #9

    Ich habe mich jetzt auch mal am Scripten versucht und eine Prognose für den Tagesertrag erstellt. Vielleicht braucht es ja mal jemand.

    /* Prognose des Tagesertrages
    Auf diese Anfrage hin: http://forum.iobroker.net/viewtopic.php?f=32&t=2584#p22850
    
    erstellt: 01.04.2016 von Marcolotti */
    
    var p = 2.5; // Gesamtleistung der Anlage in kWP <- Anpassen an die eigene Anlage
    
    createState('SolarWetter.PrognoseClearSky', 0, {
        name: 'Prognose PV-Anlage klar',
        desc: 'Tagesertrag bei klarem Himmel',
        type: 'number',
        unit: 'kWh'
    });
    createState('SolarWetter.PrognoseSkyMin', 0, {
        name: 'Prognose PV-Anlage min',
        desc: 'Tagesertrag minimum',
        type: 'number',
        unit: 'kWh'
    });
    createState('SolarWetter.PrognoseSkyMax', 0, {
        name: 'Prognose PV-Anlage max',
        desc: 'Tagesertrag Maximum',
        type: 'number',
        unit: 'kWh'
    });
    
    schedule("*/60 * * * *",  function () { // alle 60 Minuten
    var rmin = getState("SolarWetter.realSky_min").val;
    var rmax = getState("SolarWetter.realSky_max").val;
    var c = getState("SolarWetter.clearSky").val;
    
    var emin = p * rmin;
    var emax = p * rmax;
    var eclear = p * c;
    
        setState('SolarWetter.PrognoseSkyMax', emax);
        setState('SolarWetter.PrognoseSkyMin', emin);
        setState('SolarWetter.PrognoseClearSky', eclear);
    }); // end of schedule
    
    

    Bei mir funktioniert es.

    CCU2-CuxD&Cul868MHz, 44xHM Geräte, 20xMAX Fenstersensoren.Acer Revo mit IoBroker, Tablet Captiva 9,7 SFHD. SMA SB2.5,STP7000TL20,SMA Energy Meter, Echo, Harmony, JeeLink868, Arduino 433MHz, MaxtoxCUL868,MilightEasyLED,Hue

    1 Reply Last reply
    0
    • ruhr70R Offline
      ruhr70R Offline
      ruhr70
      wrote on last edited by
      #10

      @pix:

      Sollte noch jemand anderes das Skript verwenden, schlage ich andere Uhrzeiten vor (zB. 07:23 - 07:25h oder so). Auf keinen Fall, sowas wie alle 10Minuten einstellen. Da kann es sein, das der Betreiber des Dienstes die Webseite einstellt. `

      Wie immer freue ich mich die Beispiele von pix zu lesen :-) Man lernt doch immer was dazu.

      Vielleicht macht es Sinn bei den zeitlichen Abfragen der Webseite eine Random Zeit ins Skript einzubauen und immer ein paar individuelle Minuten zu addieren. Kann man ja auch so realisieren, dass der individuelle Offset beim ersten Scriptstart ermittelt wird und in einem Datenpunkt geschrieben wird.Dann ist der Zeitpunkt der Abfrage für jeden Nutzer identisch, untereinander aber unterschiedlich.

      function rand(min, max) {
      	return Math.floor(Math.random() * (max - min + 1)) + min;
      }
      
      var offset = rand(0,10); // ermittelt einen zufälligen Offset von 0-10 (z.B. Minuten)
      
      

      Adapter: Fritzbox, Unify Circuit
      Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

      1 Reply Last reply
      0
      • P Offline
        P Offline
        pix
        wrote on last edited by
        #11

        Hallo,

        ich glaube die Abfrage der Webseite ist eigentlich ja kein Problem. Die Daten werden dort ja auch nur einmal täglich aktualisiert.

        Bei der Abfrage des Datums habe ich heute nach Mitternacht wieder einen Fehler festgestellt. Der HTML Code der Seite ändert sich Täglich rund um das Datum. Das macht es schwierig, das Datum zu parsen. Ich würde die beiden Funktionen lieber wieder aus dem Skript herausnehmen.

        Gruß

        Pix

        ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

        1 Reply Last reply
        0
        • P Offline
          P Offline
          pix
          wrote on last edited by
          #12

          Jetzt konnte ichs doch nicht lassen. Das Skript sucht jetzt nach ".2016" und springt dann für die Start- und Endposition fünf Positionen vor bzw. nach hinten. Die Jahreszahl ist die aktuelle Jahreszahl (also nächstes Jahr 2017 8-) ). Das kann dann an Neujahr/Silvester ein Problem geben, wenn das Skript nach 2017 sucht und die Daten von 2016 sind (oder umgekehrt), aber das ist wohl verschmerzbar. Wenn es sein muss, kann man die zwei Tage im Skript noch ausklammern.

          OT: Hat eben 20Minuten gedauert, bis ich diese Antwort schreiben konnte. Der Forum-Server hat sich wohl schon schlafen gelegt…

          Gruß,

          Pix

          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

          1 Reply Last reply
          0
          • P Offline
            P Offline
            pix
            wrote on last edited by
            #13

            Hallo,

            habe das Skript nochmal verbessert. Die Verzögerung zwischen den 4 Aufrufen den Quellwebseite wurde entfernt. Ebenso gibt es nur noch einen Aufruf der Webseite. Das freut den Anbieter.

            Neues Skript http://forum.iobroker.net/viewtopic.php?f=32&t=2584&p=22868#p22868 eingepflegt.

            Gruß

            Pix

            ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

            1 Reply Last reply
            0
            • M Offline
              M Offline
              Matzes
              wrote on last edited by
              #14

              Hi,

              vielen Dank für die tolle Arbeit von euch beiden.

              Ich hatte folgende Probleme mit dem Skript von Pix:

              • Das Datum wurde immer mit TT.05.2016 ausgegeben, ich habe im Skript das Datumsformat von TT.MM.JJJJ auf DD.TT.JJJJ angepasst. Nun funktioniert de Ausgabe bei mir korrekt.

              • Die Ausgabe des Maximumwertes wurde nicht zurückgeschrieben. Habe die Zeile "setState(idRealSkyMax, realsky_max); // Wert in Objekt schreiben" an der entsprechenden Stelle eingefügt

              Zusätzlich habe ich das Berechnungsskript von Marcolotti in das Skript integriert und für diese 3 Werte noch die Logausgabe eingebaut.

              /* Solar-Wetter.com Werte abfragen
              Auf diese Anfrage hin: http://forum.iobroker.net/viewtopic.php?f=32&t=2584#p22850
              
              Abfrage erstellt: 31.03.2016 von pix
              15.04.2016 Code optimiert, 
                         Zeitverzögerung zwischen dem Einlesen der Werte entfernt,
                         Quell-Webseite wird nur noch einmal aufrufen
              
              Prognose erstellt: 01.04.2016 von Marcolotti
              
              Skripte zusammengeführt: 01.05.2016 von MatzeS
              - Anpassung Datumsformat von TT auf DD
              - Anpassung findeWertRealskyMaximum das dieser Wert auch zurückgeschrieben wird
              - Integration der Berechnungsprognose inkl. Logging
              
              */
              
              var logging = true;
              var link = 'http://www.vorhersage-plz-bereich.solar-wetter.com/html/777.html';
              var p = 5.32; // Gesamtleistung der Anlage in kWP <- Anpassen an die eigene Anlage
              
              // ab hier nix mehr ändern, solange die Webseite die Daten nicht ändert
              
              createState('SolarWetter.PrognoseClearSky', 0, {
                  name: 'Prognose PV-Anlage klar',
                  desc: 'Tagesertrag bei klarem Himmel',
                  type: 'number',
                  unit: 'kWh'
              });
              createState('SolarWetter.PrognoseSkyMin', 0, {
                  name: 'Prognose PV-Anlage min',
                  desc: 'Tagesertrag minimum',
                  type: 'number',
                  unit: 'kWh'
              });
              createState('SolarWetter.PrognoseSkyMax', 0, {
                  name: 'Prognose PV-Anlage max',
                  desc: 'Tagesertrag Maximum',
                  type: 'number',
                  unit: 'kWh'
              });
              createState('SolarWetter.clearSky', 0, {
                  name: 'Solar-Wetter.com clear Sky',
                  desc: 'Solarleistung bei klarem Himmel',
                  type: 'number',
                  unit: 'kWh/kWp'
              });
              createState('SolarWetter.realSky_min', 0, {
                  name: 'Solar-Wetter.com real Sky Minimum',
                  desc: 'minimale Solarleistung bei jetzigem Himmel',
                  type: 'number',
                  unit: 'kWh/kWp'
              });
              createState('SolarWetter.realSky_max', 0, {
                  name: 'Solar-Wetter.com real Sky Maximum',
                  desc: 'maximale Solarleistung bei jetzigem Himmel',
                  type: 'number',
                  unit: 'kWh/kWp'
              });
              createState('SolarWetter.Datum', 0, {
                  name: 'Solar-Wetter.com Datum der letzten Aktualisierung',
                  desc: 'letzte Aktualisierung der Webseite',
                  type: 'string'
              });
              
              var idClearSky =   'SolarWetter.clearSky',
                  idRealSkyMin = 'SolarWetter.realSky_min',
                  idRealSkyMax = 'SolarWetter.realSky_max',
                  idDatum =      'SolarWetter.Datum';
              
              var request = require('request');
              
              function erstes_erstesAuftauchen(body,text1,text2) {
                  var start = body.indexOf(text1) + text1.length;
                  var ende = body.indexOf(text2);
                  if (logging) log('Startposition: ' + start);
                  if (logging) log('Endposition: ' + ende);
                  var zwischenspeicher;
                  if (((start != -1) && (ende != -1)) && (start<ende)) {/fehler/abfangen/zwischenspeicher="body.slice(start,ende);" if/(logging)/log(zwischenspeicher);/var/zwischenspeicher_array="zwischenspeicher.split(',');" teilen/vorm/komma/zwischenspeicher_array_vorn="zwischenspeicher_array[0].slice(zwischenspeicher_array[0].length-1,zwischenspeicher_array[0].length);" eine/stelle/log(zwischenspeicher_array_vorn);/zwischenspeicher_array_hinten="zwischenspeicher_array[1].slice(0,2);" zwei/stellen/nach/dem/log(zwischenspeicher_array_hinten);/return(parsefloat(zwischenspeicher_array_vorn/+/'.'/zwischenspeicher_array_hinten));/}/else/;/log(zwischenspeicher,/'error');/return(0);/function/erstes_letztesauftauchen(body,text1,text2)/start="body.indexOf(text1)" text1.length;/ende="body.lastIndexOf(text2);" letztes/auftauchen/log('startposition:/'/start);/log('endposition:/ende);/zwischenspeicher;/(((start/!="-1)" &&/(ende/(start<ende))/loesedatum/(body,text1)/-/5;/xx.xx.xxxx/((start/datum_array="zwischenspeicher.split('.');" xdatum="new" date();/log(datum_array[0]);log(datum_array[1]);log(datum_array[2]);/xdatum.setdate(datum_array[0]);/xdatum.setmonth(datum_array[1]-1);/xdatum.setfullyear(datum_array[2]);/log(xdatum);/return(formatdate(xdatum,/"dd.mm.jjjj"));/return(null);/findewertclearsky/(body)/text1="<td height=17 class=xl1525883 style='height:12.75pt'>clear sky:</td>" ,/erstes/text2="<td class=xl2425883>kWh/kWp</td>" clearsky="erstes_erstesAuftauchen(body,text1,text2);" log('clearsky:/clearsky);/setstate(idclearsky,/wert/in/objekt/schreiben/findewertrealskyminimum/realsky_min="erstes_erstesAuftauchen(body,text1,text2);" log('realskyminimum:/realsky_min);/setstate(idrealskymin,/findewertrealskymaximum/realsky_max="erstes_letztesAuftauchen(body,text1,text2);" log('realskymaximum:/realsky_max);/setstate(idrealskymax,/findedatum/jetzt="new" jahr="jetzt.getFullYear();" aktuelles/ermitteln/+'</td="">';                                 // erstes Auftauchen vom aktuellen Jahr finden
                  var datum = loeseDatum(body,text1);
                  if (logging) log('Datum: ' + datum);
                  setState(idDatum, datum);                                       // Wert in Objekt schreiben
              }
              
              function Berechnung (body) {
                  var rmin = getState("SolarWetter.realSky_min").val;
                  var rmax = getState("SolarWetter.realSky_max").val;
                  var c = getState("SolarWetter.clearSky").val;
              
                  var emin = Math.round(p * rmin * 100) / 100;
                  var emax = Math.round(p * rmax * 100) / 100;
                  var eclear = Math.round(p * c * 100) / 100;
              
                  setState('SolarWetter.PrognoseSkyMax', emax);
                  if (logging) log('PrognoseSkyMax: ' + emax);
                  setState('SolarWetter.PrognoseSkyMin', emin);
                  if (logging) log('PrognoseSkyMin: ' + emin);
                  setState('SolarWetter.PrognoseClearSky', eclear);
                  if (logging) log('PrognoseClearSky: ' + eclear);
              }
              
              function leseWebseite () {
                  try {
                      request(link, function (error, response, body) {
                          if (!error && response.statusCode == 200) {              // kein Fehler, Inhalt in body
                              findeWertClearsky(body);
                              findeWertRealskyMinimum(body);
                              findeWertRealskyMaximum(body);
                              findeDatum(body);
                              Berechnung(body);
                          } else log(error,'error');                               // Error beim Einlesen
                      });
                  } catch (e) {
                      log('Fehler (try) leseWebseite: ' + e, 'error');
                  }   
              }
              
              // bei Skriptstart
              leseWebseite();
              
              // Schedule
              schedule("59 4 * * *", leseWebseite);</ende))>
              
              1 Reply Last reply
              0
              • ruhr70R Offline
                ruhr70R Offline
                ruhr70
                wrote on last edited by
                #15

                @Matzes:

                • Das Datum wurde immer mit TT.05.2016 ausgegeben, ich habe im Skript das Datumsformat von TT.MM.JJJJ auf DD.TT.JJJJ angepasst. Nun funktioniert de Ausgabe bei mir korrekt. `

                Das TT nicht funktioniert, scheint ein Fehler im Javascript-Adapter zu sein.

                Das ging mal. Bei mir kommt derzeit auch ein TT für den Tag bei einigen Skripten.

                Laut Beschreibung sollte es aber funktionieren:

                https://github.com/iobroker/ioBroker.ja … md#example

                Adapter: Fritzbox, Unify Circuit
                Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                1 Reply Last reply
                0
                • HomoranH Do not disturb
                  HomoranH Do not disturb
                  Homoran
                  Global Moderator Administrators
                  wrote on last edited by
                  #16

                  Soll ich den Thread nicht lieber nach Skripte verschieben?

                  Hat ja mit nore-red nichts mehr zu tun.

                  Gruß

                  Rainer

                  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 Reply Last reply
                  0
                  • P Offline
                    P Offline
                    pix
                    wrote on last edited by
                    #17

                    Hallo,

                    @Homoran:

                    Soll ich den Thread nicht lieber nach Skripte verschieben?

                    Hat ja mit nore-red nichts mehr zu tun.

                    Gruß

                    Rainer `
                    Ja, scheint mir auch so.

                    @ruhr70:

                    @Matzes:

                    • Das Datum wurde immer mit TT.05.2016 ausgegeben, ich habe im Skript das Datumsformat von TT.MM.JJJJ auf DD.TT.JJJJ angepasst. Nun funktioniert de Ausgabe bei mir korrekt. `

                    Das TT nicht funktioniert, scheint ein Fehler im Javascript-Adapter zu sein.

                    Das ging mal. Bei mir kommt derzeit auch ein TT für den Tag bei einigen Skripten.

                    Laut Beschreibung sollte es aber funktionieren:

                    https://github.com/iobroker/ioBroker.ja … md#example `
                    Ich habe mal einen Workaround für formatDate eingebaut. Sind nur weinige Zeilen, die getauscht werden müssen:

                    Bitte Funktion loeseDatum durch diese hier ersetzen

                    function loeseDatum (body,text1) {
                        var start = body.indexOf(text1) - 5;
                        var ende = body.indexOf(text1) + 5;                                         // xx.xx.xxxx
                        if (logging) log('Startposition: ' + start);
                        if (logging) log('Endposition: ' + ende);
                        var zwischenspeicher;
                        if ((start != -1) && (ende != -1)) {                                        // Fehler abfangen
                            zwischenspeicher = body.slice(start,ende);
                            var datum_array = zwischenspeicher.split('.');
                            var xDatum = new Date();
                            if (logging) log(datum_array[0]);
                            if (logging) log(datum_array[1]);
                            if (logging) log(datum_array[2]);
                            xDatum.setDate(datum_array[0]);
                            xDatum.setMonth(datum_array[1]-1);
                            xDatum.setFullYear(datum_array[2]);
                            if (logging) log(xDatum);
                            //return(formatDate(xDatum, "TT.MM.JJJJ"));
                            var xDatum_workaround = (xDatum.getDate() <10 ? '0' + xDatum.getDate() : xDatum.getDate() ) + '.' + (xDatum.getMonth() <10 ? '0' + xDatum.getMonth() : xDatum.getMonth()) + '.' + xDatum.getFullYear(); 
                            return(xDatum_workaround);
                    
                        } else {
                            zwischenspeicher = 'Fehler beim Ausschneiden';
                            log(zwischenspeicher, 'error');
                            return(null);
                        }
                    }
                    

                    Das Datum kommt dann definitiv als String raus. Ist aber ok, denke ich.

                    Gruß,

                    Pix

                    ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                    1 Reply Last reply
                    0
                    • P Offline
                      P Offline
                      pix
                      wrote on last edited by
                      #18

                      Hab das Skript zum einem Adapter weitergebaut.

                      Viel Spaß: http://forum.iobroker.net/viewtopic.php … 844#p25693

                      Gruß

                      Pix

                      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      377

                      Online

                      32.6k

                      Users

                      82.3k

                      Topics

                      1.3m

                      Posts
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Home
                      • Recent
                      • Tags
                      • Unread 0
                      • Categories
                      • Unreplied
                      • Popular
                      • GitHub
                      • Docu
                      • Hilfe