Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Solarwetter

    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

    Solarwetter

    This topic has been deleted. Only users with topic management privileges can see it.
    • derAuge
      derAuge last edited by

      SUPER Arbeit !!

      habe es direkt getestet

      LOG:

      ! javascript-0 2016-03-31 16:36:58 info script.js.Solar-Wetter_com_Werte_abfragen: RealSkyMaximum: 1.81
      ! javascript-0 2016-03-31 16:36:58 info script.js.Solar-Wetter_com_Werte_abfragen: 81
      ! javascript-0 2016-03-31 16:36:58 info script.js.Solar-Wetter_com_Werte_abfragen: 1
      ! javascript-0 2016-03-31 16:36:58 info
      ! javascript-0 2016-03-31 16:36:58 info 1,81
      ! javascript-0 2016-03-31 16:36:58 info script.js.Solar-Wetter_com_Werte_abfragen:
      ! javascript-0 2016-03-31 16:36:58 info script.js.Solar-Wetter_com_Werte_abfragen: Endposition: 18000
      ! javascript-0 2016-03-31 16:36:58 info script.js.Solar-Wetter_com_Werte_abfragen: Startposition: 17926
      ! javascript-0 2016-03-31 16:36:55 info script.js.Solar-Wetter_com_Werte_abfragen: RealSkyMinimum: 0.71
      ! javascript-0 2016-03-31 16:36:55 info script.js.Solar-Wetter_com_Werte_abfragen: 71
      ! javascript-0 2016-03-31 16:36:55 info script.js.Solar-Wetter_com_Werte_abfragen: 0
      ! javascript-0 2016-03-31 16:36:55 info
      ! javascript-0 2016-03-31 16:36:55 info 0,71
      ! javascript-0 2016-03-31 16:36:55 info script.js.Solar-Wetter_com_Werte_abfragen:
      ! javascript-0 2016-03-31 16:36:55 info script.js.Solar-Wetter_com_Werte_abfragen: Endposition: 17900
      ! javascript-0 2016-03-31 16:36:55 info script.js.Solar-Wetter_com_Werte_abfragen: Startposition: 17826
      ! javascript-0 2016-03-31 16:36:52 info script.js.Solar-Wetter_com_Werte_abfragen: ClearSky: 5.48
      ! javascript-0 2016-03-31 16:36:52 info script.js.Solar-Wetter_com_Werte_abfragen: 48
      ! javascript-0 2016-03-31 16:36:52 info script.js.Solar-Wetter_com_Werte_abfragen: 5
      ! javascript-0 2016-03-31 16:36:52 info
      ! javascript-0 2016-03-31 16:36:52 info 5,48
      ! javascript-0 2016-03-31 16:36:52 info script.js.Solar-Wetter_com_Werte_abfragen:
      ! javascript-0 2016-03-31 16:36:52 info script.js.Solar-Wetter_com_Werte_abfragen: Endposition: 17622
      ! javascript-0 2016-03-31 16:36:52 info script.js.Solar-Wetter_com_Werte_abfragen: Startposition: 17548
      ! javascript-0 2016-03-31 16:36:52 info script.js.Solar-Wetter_com_Werte_abfragen: registered 0 subscriptions and 1 schedule
      ! javascript-0 2016-03-31 16:36:52 info Start javascript script.js.Solar-Wetter_com_Werte_abfragen

      Was hälst du davon, das Datum von der Webseite auch noch abzufragen. Dann weiß man ob es neuere Daten gibt

      Gruß

      Jürgen

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Hallo Jürgen,@derAuge:

        SUPER Arbeit !!

        …

        Was hälst du davon, das Datum von der Webseite auch noch abzufragen. Dann weiß man ob es neuere Daten gibt ` danke für das Lob und die Anregung :lol: Habe das http://forum.iobroker.net/viewtopic.php?f=32&t=2584&p=22868#p22868 aktualisiert. Das Datum wird nun mit ausgelesen und als Datum-Objekt gespeichtert (nur TT.MM.YYYY - Uhrzeit ist die aktuelle Uhrzeit).

        Gruß,

        Pix

        1 Reply Last reply Reply Quote 0
        • derAuge
          derAuge last edited by

          fein

          ein kleiner schönheitsfehler ist drin (TT)

          17:46:38.919	[info]	javascript.0 script.js.Solar-Wetter_com_Werte_abfragen: Datum: TT.03.2016
          
          

          In Datum Array: 31,03,2016 passt es noch

          Gruß

          Jürgen

          1 Reply Last reply Reply Quote 0
          • P
            pix last edited by

            Hallo Jürgen,

            bei mir geht's. Hast du den aktuellen Javascript Adapter? Kann sein, dass der Befehl formatDate bei dir noch nicht geht (Vermutung).

            Bin aber eben, beim Testen, auf ein neues Problem gestossen. Zumindest beim Datum ändert sich der String, durch den ich das Datum finde. Da muss ich mir was neues einfallen lassen. Ich könnte nach ".2016" suchen lassen, aber dann muss man das Skript jedes Jahr anpassen bzw. es gibt um den Jahreswechsel Probleme.

            Mal sehen, was sich sonst noch jeden Tag an der seite ändert. Ist ja alles noch alpha 🙂 😉

            Gruß,

            Pix

            1 Reply Last reply Reply Quote 0
            • M
              Marcolotti last edited by

              Hallo,

              vielen vielen Dank, Pix. Du hast das wieder einmal super gemacht. 😄 Läuft.

              Gruß Marco

              1 Reply Last reply Reply Quote 0
              • M
                Marcolotti last edited by

                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.

                1 Reply Last reply Reply Quote 0
                • ruhr70
                  ruhr70 last edited by

                  @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)
                  
                  
                  1 Reply Last reply Reply Quote 0
                  • P
                    pix last edited by

                    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

                    1 Reply Last reply Reply Quote 0
                    • P
                      pix last edited by

                      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

                      1 Reply Last reply Reply Quote 0
                      • P
                        pix last edited by

                        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

                        1 Reply Last reply Reply Quote 0
                        • M
                          Matzes last edited by

                          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 Reply Quote 0
                          • ruhr70
                            ruhr70 last edited by

                            @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

                            1 Reply Last reply Reply Quote 0
                            • Homoran
                              Homoran Global Moderator Administrators last edited by

                              Soll ich den Thread nicht lieber nach Skripte verschieben?

                              Hat ja mit nore-red nichts mehr zu tun.

                              Gruß

                              Rainer

                              1 Reply Last reply Reply Quote 0
                              • P
                                pix last edited by

                                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

                                1 Reply Last reply Reply Quote 0
                                • P
                                  pix last edited by

                                  Hab das Skript zum einem Adapter weitergebaut.

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

                                  Gruß

                                  Pix

                                  1 Reply Last reply Reply Quote 0
                                  • First post
                                    Last post

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  950
                                  Online

                                  31.9k
                                  Users

                                  80.1k
                                  Topics

                                  1.3m
                                  Posts

                                  7
                                  18
                                  3416
                                  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