NEWS
Script Sonnenstand und Einstrahlung
-
Damit meiner Einer auch mal etwas an die Community zurückgeben kann:
Ich habe das Sonnenstand-Script aus dem Forum mit einem Python Programm von meinem vorherigen Solar-Pi gebastel verheiratet.
Herausgekommen ist eine Möglichkeit, die theoretische Leistung einer PV-Anlage abzuschätzen und zu loggen. Damit das etwas wissenschaftlich ausschaut, hab ich das mit allerlei Formelzeugs aus dem Internet vollgepackt.
Machen tue ich das so:
// calculates the sun position, path and power throughout the day // based on from http://www.stjarnhimlen.se/comp/tutorial.html // most var-names are identical to above tutorial // combined with Sonnenstand-Script: paul53, pix; 06.07.2015 nach ioBroker Forum http://forum.iobroker.net/viewtopic.php?f=21&t=975&sid=6f0ba055de5f82eed6809424f49ca93b#p7635 // Angepasst ykuendig 12.02.17; stringify im log, ack = true bei setState und Diverses var suncalc = require('suncalc'), result = getObject("system.adapter.javascript.0"), lat = result.native.latitude, long = result.native.longitude; var modtilt = 38; //Dachneigung in Grad (Solar panel's tilt angle) var modazi = 200; //Ausrichtung des Hauses in Grad zB SSW (Solar panel's azimut) var modsufrace = 56.0; //Paneloberfläche in m2 (Solar panel's surface in sq. meters) var modeff = 0.183; //Annäherung an Panel-Wirkungsgrad zB 18 Prozent (modules efficiency correction) // Hier kann an einem klaren Tag etwas geschraubt werden ;-) var altitude; // Calculated Elevation var azimuth; // Calculated Azimuth createState('javascript.0.Solar.Sonnenstand.Elevation', 0, {unit: '°'}); createState('javascript.0.Solar.Sonnenstand.Azimut', 0, {unit: '°'}); createState('javascript.0.Solar.Sonnenstand.PanelPossible', 0, {unit: 'W'}); // ganz am Ende die setStates anpassen nicht vergessen! // Do not change below, until You know what You are doing! // ******************************************************** Math.degrees = function(radians) {return radians * 180 / Math.PI;}; Math.radians = function(degrees) {return degrees * Math.PI / 180;}; function Sonnenstand_berechnen () { var now = new Date(); var sunpos = suncalc.getPosition(now, lat, long); log("Script Sonnenstand; latitude : " + result.native.latitude + " / longitude: " + result.native.longitude,'debug'); log("Script Sonnenstand; sunpos: " + JSON.stringify(sunpos),'debug'); altitude = Math.degrees(sunpos.altitude); azimuth = Math.degrees(sunpos.azimuth) + 180; // The intensity of the direct component of sunlight throughout each day can be determined as // a function of air mass. based on: http://pveducation.org/pvcdrom/properties-of-sunlight/air-mass#formula var airmass = 1/Math.cos((90-altitude)*4*Math.asin(1)/360); // Sincident is the intensity on a plane perpendicular to the sun's rays in units of kW/m2 and AM is the air mass. // The value of 1.353 kW/m2 is the solar constant and the number 0.7 arises from the fact that about 70% of the radiation incident on the atmosphere is transmitted // to the Earth. The extra power term of 0.678 is an empirical fit to the observed data and takes into account the non-uniformities in the atmospheric layers. // ykuendig: use different values because of pv instead thermal panels var Sincident = (1.367*Math.pow(0.78,Math.pow(airmass,0.6))); var fraction = Math.cos(altitude*4*Math.asin(1)/360)*Math.sin(modtilt*4*Math.asin(1)/360)*Math.cos(azimuth*4*Math.asin(1)/360-modazi*4*Math.asin(1)/360)+Math.sin(altitude*4*Math.asin(1)/360)*Math.cos(modtilt*4*Math.asin(1)/360); // W/m² light intensity on the module * module's surface var SmoduleInt = Sincident * fraction * modsufrace * 1000; if(SmoduleInt<0) { SmoduleInt = 0; } // Module Effective in relation of the efficiency of the used panel var SmoduleEff = SmoduleInt * modeff; if( altitude < 0 ) { SmoduleInt = 0; SmoduleEff = 0; altitude = 0; } log("Script Sonnenstand; Erfolgreich gelaufen, Werte akzeptiert", "info"); log("Script Sonnenstand; airmass: " + airmass,"debug"); log("Script Sonnenstand; azimuth: " + azimuth,"debug"); log("Script Sonnenstand; altitude: " + altitude,"debug"); log("Script Sonnenstand; SmoduleInt: " + SmoduleInt,"debug"); log("Script Sonnenstand; SmoduleEff: " + SmoduleEff,"debug"); // Change ID to the created States setState("javascript.0.Solar.Sonnenstand.Elevation",altitude.toFixed(1), true); setState("javascript.0.Solar.Sonnenstand.Azimut",azimuth.toFixed(), true); setState("javascript.0.Solar.Sonnenstand.PanelPossible", SmoduleEff.toFixed(), true); } // -> Zyklisch schedule("*/1 * * * *", Sonnenstand_berechnen); Sonnenstand_berechnen(); // bei Scriptstart
Aussehen kann das zum Beispiel so:
Dafür muss aber Sonnenstand und Leistung mit einem der History-Adapter regelmässig gespeichert werden. -
Cool :-))
Fragen:
var modtilt = 38; //Solar panel's tilt angle
Dachneigung bzw Neigung der panels, korrekt?!
var modazi = 200; //Solar panel's azimut
Ausrichtung in Grad … also Äquivalenz zu "SW" und so, korrekt?!
var modsufrace = 56.0; //Solar panel's surface in sq. meters
Auch klar.
var modeff = 0.183; //modules efficiency correction
Wo hast Du das her?
Ansonsten: Macht es ggf Sinn noch aus dem Weatherunderground-Adapter werte wie Sonneneinstrahlung oder "bewölkt"/nicht bewölkt mit reinzunehmen um die erwartung von der aktuellen Wetterlage besser abhängig zu machen?
-
Du hast das schon gut verstanden. Habe aber trotzdem noch ein paar Übersetzungen ins obige Script nachgetragen.
-Wo hast Du das her?- Das stand auf der Verpackung meiner Module, hiess dort Wirkungsgrad. – Aber, im Ernst. das muss an einem 'guten', klaren Tag etwas zurechtgesturzt werden. Das Original rechnete die solare 'Leistung' auf eine Fläche und war für eine thermische Nutzung konzipiert. Ich habe das für PV nur 'gestohlen'. Die Anzeige hilft mir, zu sehen wo ich etwa stehe. Ich mach damit keine wissenschaftliche Auswertung, oder verklage gar den lieben Gott wegen zu viel Nebel. :mrgreen:
-
Sollte man den Wirkungsgrad so anpassen, dass die orangene Kurve auf der gelben sitzt. Damit hätte man den reellen Wirkungsgrad bestimmt.
Ich habe lediglich eine Solaranlage zur Warmwassererzeugung. Ich arbeite daran den E-Bus meiner Heizungsanlage an ioBroker anzuschließen. Dann werde ich versuchen die Energiegewinnung auszuwerten.
Aber es sieht echt gut aus, was du da gemacht hast. Hut ab!
-
Wie ich geschrieben habe. JA- aber an einem 'guten', klaren Tag. Das Bild im Beispiel oben zeigt die Werte von gestern. Es war bei uns sonning, aber auch ein klein wenig dunstig. Die Anlage konnte nicht am Maximum laufen. Ich habe diesen Werte letztes Jahr in ein, zwei kleinen Schritten angepasst. Angefangen von 19% (0.19) bis nun (0.183). Damals lief das aber mit Python und pushte die Werte an emoncms.
Bei einer thermischen Nutzung hast systembedingt einen viel höheren Wirkungsgrad. Dann musst zB (0.75) oder gar mehr eintragen.
Wie gesagt die rechnerische Basis (die Formeln) kommen ursprünglich aus der thermischen Nutzung, was aber auch egal ist. Sonne bleibt Sonne.
-
Die Frage ist echt ob man weatherunderground ehmen kann um es nicht zu verbessern. Bei deren Messstationen gibt es z.B. einen Datenpunkt namens Solar Radiation wo bei Karlsruhe aktuell 370W/m2 steht … Vllt echt ne Idee Dinge wie Nebel, Wolken oder so direkt einzukalkulieren, oder !?
-
Habe nun mal noch Werte vom Solarwetter Adapter zum testen reingenommen.
WeatherUnderground installiert noch… Da habe ich noch keine Erfahrung.
-
Bei Weatherunderground musst du ggf bissl stationen suchen bis Du eine hast die Solar-Radiation liefert. Die meisten der "kleinen privaten Stationen" haben das nicht. Ich hab daher zwei Adapter laufen. Einmal die nächste sinnvolle private für temperaturen und so und einmal die "offizielle Karlsruhe" wo dann mehr Daten da sind.
Solarwetter Adapter … oh den gibts ja auch
-
Welche Karlsruhe genau? Muss mal prüfen ob man das auf der Homepage vorabklären kann. Hab keine Lust, alle mit dem Adapter durchzuprüfen.
-
Location: Karlsruhe%2C+Germany
Station: IBADEN-W33
Dort unter "current.solarradiation" … aktuell natürlich 0
Werden scheinbar alle 30 Minuten aktualisiert -
Habe mittlerweile auch welche in der Region gefunden. (Karlsruhe ist ja doch ein paar Stündchen hin).
Habe aber heraus gefunden, das der GROSSE radiation-sensor bei mir auf dem Dach schneller und präziser die aktuelle lokale Sonne anzeigt! :twisted: :lol: :twisted:
Aber das mit dem Solarwetter-Adapter könnte wegen den forecast Daten was werden…
-
Am Ende kommen ja aber von allen nur W/m2 oder ?! Das heisst jeder kann sich eine sinnvolle Quelle suchen und dort nutzen, oder ?! Das wäre cool
-
Ja, klar; aber Du hast meine Ironie überlesen, denke ich.
Ich habe einen GROSSEN 'radiation–sensor' auf dem Dach ---> sprich meine Solaranlage. Die zeigt sinngemäss EXAKT an ob und wie starkt die Sonne scheint -> also radiation.current an. Und das ganz GENAU für meine Location!!
-
Aaaaaahhhhhhh :-))
SO ein externer Wert ist natürlich cool um den exakten Wirkungsgrad rauszubekommen bzw die Erwartungskurve trotz Nebel o.ä. korrekter zu haben
-
Ich wollte jetzt mal versuchen die auf Wetterunderground veröffentlichte Solarradiation zur Berechnung der möglichen PV-Leistung zu verwenden - habe nämlich bis jetzt noch keine PV-Anlage. Da ich eine WU-Station in der näheren Umgebung habe die die Solardaten anbietet müssten die Daten ja relativ zuverlässig sein.
Nun bin ich mir nicht ganz sicher, ob ich in deinem Script einfach anstelle der um den Airmass-Wert korrigierten 1.367kW/m³ den WU-Wert verwenden kann, also konkret diese Zeile:
var Sincident = (1.367*Math.pow(0.78,Math.pow(airmass,0.6)));
durch folgende ersetzen:
var Sincident = (getState("weatherunderground.0.current.solarradiation").val/1000);
Ich erhalte damit Werte die schon ungefähr plausibel sein könnten, mir allerdings tendenziell etwas niedrig erscheinen. Kannst du das vielleicht mal vergleichen?
-
Dann müsste ich ja rechnen :lol:
Aber ich hätte da vielleicht was für dich. Muss es bloss schnell zusammenkopieren.
Ich habe die Tage mit dem Solarwetter-Adapter getestet. Damit habe ich zusätzlich zur möglichen, die zu erwartenden min in max Werte mit geschrieben. Damit könntest vielleicht auch was anfangen.
Aber Vorschlag zur Güte; ich hau das mal als weitere Linie mit rein. und dann wissen wir morgen oder so mehr. – ist allerdings dunkles Wetter angesagt die nächsten Tage --
-
+1 … meine Anlage ist auch bestellt und ich bereite mich gerade darauf vor ;-)))
-
Ist das hier etwas für euch?
und:
Gruß
Rainer
-
Nur, wenns vom broker kommt - Du weisst was ich meine?!
-