Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Real-time solar data without any hardware sensor


Anbefalte innlegg

Hmm... nå som sola har stått opp, så tror jeg kanskje noe er galt i den nye beregningen... :(

image.png.f287bb1b9df209ca37871cad0a8c4f42.png

 

Mulig jeg har redigert for mye på lua-scriptet og tatt vekk en vesentlig del av beregningen?

Sun alt og Sun azi er i hvertfall riktig. Det samme er cloudcover/octa og pressure.

Ser også ut til at lua-scriptet henter der riktige verdiene fra HS.

 

Lenke til kommentar
Del på andre sider

2 timer siden, ZoRaC skrev:

Hmm... nå som sola har stått opp, så tror jeg kanskje noe er galt i den nye beregningen... :(

image.png.f287bb1b9df209ca37871cad0a8c4f42.png

 

Mulig jeg har redigert for mye på lua-scriptet og tatt vekk en vesentlig del av beregningen?

Sun alt og Sun azi er i hvertfall riktig. Det samme er cloudcover/octa og pressure.

Ser også ut til at lua-scriptet henter der riktige verdiene fra HS.

 

Ifølge wikipedia så er det innenfor hvis du har direkte sollys:

Illuminance (lux)     Surfaces illuminated by
0.0001     Moonless, overcast night sky (starlight)[3]
0.002     Moonless clear night sky with airglow[3]
0.05–0.3     Full moon on a clear night[4]
3.4     Dark limit of civil twilight under a clear sky[5]
20–50     Public areas with dark surroundings[6]
50     Family living room lights (Australia, 1998)[7]
80     Office building hallway/toilet lighting[8][9]
100     Very dark overcast day[3]
150     Train station platforms[10]
320–500     Office lighting[7][11][12][13]
400     Sunrise or sunset on a clear day.
1000     Overcast day;[3] typical TV studio lighting
10,000–25,000     Full daylight (not direct sun)[3]
32,000–100,000     Direct sunlight

Lenke til kommentar
Del på andre sider

25 minutter siden, Rogerbl skrev:

Ifølge wikipedia så er det innenfor hvis du har direkte sollys:

 

Ja, men jeg sjekket mai 2018 og da var jeg ikke over 10.000 lux på hele mai - nå har jeg over 50.000 lux med "halvtett" skydekke, så jeg tror det er noe galt.

Scriptet du fant var ganske omskrevet/forenklet, så selv jeg som ikke kan VB.net klarte å "oversette" det i lunsjen. Den gir også enorme verdier (83.000 lux nå), så jeg har sendte det over til VB.net-mesteren (@Moskus) i en PM, for å se om han kan finne noe feil. Tenkte jeg ikke trengte å "spamme ned" denne tråden noe mer før en endelig løsning var klar... :P

 

Med det scriptet trenger man bare å hente "cloud cover" og "pressure" fra en eller annen kilde, alt annet beregnes i det scriptet. :) 

Lenke til kommentar
Del på andre sider

Her er et python script som henter data fra Darksky og publiserer de til en MQTT broker.
La også inn en octa beregning og da får man octa, pressure og alle de andre værdata.
For de med HomeSeer benyttes mcsMqtt plugin til å få dette inn i devicer. For de andre, bruk MQTT import.
Så prøver jeg å skrive om LUA scriptet til et vb script siden vi nå har alle verdiene vi trenger inne i Hs devicer...
Kanskje 'noen' kan hjelpe til med det? ?

darksky2mqtt.py

darksky2mqtt1.cfg

Endret av Rogerbl
Lenke til kommentar
Del på andre sider

Etter å ha rettet et par bugs i går kveld, så tror jeg scriptet nå fungerer som det skal.

Det gir fortsatt en del høyere verdier enn LUA-scriptet gjorde, men jeg kan ikke se annet enn at det er riktig likevel.

 

Siden det uansett ikke virker hos noen nå, så legger jeg ut scriptet her sånn at flere kan teste og se om det "gir mening". :)

Spoiler

Sub Main(parm as object)
    ' @Author: ZoRaC @ hjemmeautomasjon.no
    ' @Changelog:
    '	v1 (2019-05-02): Initial version
    
    ' Converted from Lua to VB.net and adjusted for HomeSeer
    ' Based on: http://www.domoticz.com/forum/viewtopic.php?t=19220
    ' and https://forums.homeseer.com/forum/developer-support/scripts-plug-ins-development-and-libraries/script-plug-in-library/1286064-solar-position-script
    ' Thanks to Sébastien Joly, Neutrino, Jmleglise, xces, BakSeeDaa, Bram Vreugdenhil and Sparkman!

    ' Only input needed is "cloud cover" (usually a value from 0-1 or 0-100) and "relative pressure"
    ' Both "cloud cover" and "pressure" can be obtained from the Dark Sky API.
    ' Those values will soon be available to fetch with the weatherXML-plugin (from v3.0.1.8, see https://forums.homeseer.com/forum/weather-plug-ins/weather-discussion/weatherxml-cfguy/1302303-dark-sky-cloud-cover?p=1302383#post1302383)

    
    ' ================================================
    '		     SETTINGS START
    Dim debugging As Boolean = True ' True or False. If True it will print detailed logging in the HS-log.
    Dim altitude As Integer = 176 ' (Integer) Meters above sea level
    
    ' Read data from these devices
    Dim dvBarometer As Integer = 1697 ' (Integer) Device ref of device holding barometric pressure
    Dim dvCloudCover As Integer = 1696 ' (Integer) Device ref of device holding cloudcoverage (usually values ranging 0-1)
    ' If "cloud coverage" is in range 0-1, use 100 as multiplier. 
    ' If range is 0-100, use 1 as multiplier 
    ' If "cloud cover" is "Octa", use 12.5 as multiplier (also, you need to create two octa-devices, as the script will write the calculated octa to the "dvOcta"-device). 
    Dim cloudCoverMultiplier As Double = 100 
    
    
    ' Store data to these devices
    Dim dvSolarAzimuth As Integer = 198 ' (Integer) Virtual azimuth device ref
    Dim dvSolarAltitude As Integer = 191 ' (Integer) Virtual solar altitude device ref
    Dim dvOcta As Integer = 187 ' (Integer) Virtual Octa device ref
    Dim dvLux As Integer = 186 ' (Integer) Lux device ref
    Dim dvDirectRadiation As Integer = 188 ' (Integer) Virtual directradiation device ref
    Dim dvScatteredRadiation As Integer = 189 ' (Integer) Virtual indirect/scattered radiation device ref
    Dim dvTotalRadiation As Integer = 190 ' (Integer) Virtual total radiation device ref

    '		     SETTINGS END
    '       NO NEED TO CHANGE BELOW THIS LINE
    ' ================================================
    
    
    ' Fetch position from HS->Setup
    Dim strLat As String = hs.GetINISetting("Settings", "gLatitude", "0")
    Dim strLon As String = hs.GetINISetting("Settings", "gLongitude", "0")
    Dim latitude As Double = CDbl(Val(strLat)) 
    Dim longitude As Double = math.abs(CDbl(Val(strLon))) ' HS-bug stores longitude as a negative number... Fixing it with math.abs!
    
    
    ' CONSTANTS
    Dim arbitraryTwilightLux As Double = 6.32 ' W/m² egal 800 Lux (the theoritical value is 4.74 but I have more accurate result with 6.32...)
    Dim constantSolarRadiation As Integer = 1361 ' Solar Constant W/m²
    Dim angularSpeed As Double = 360/365.25
    
    ' Fetch values
    Dim relativePressure As Double = hs.DeviceValueEx(dvBarometer)
    Dim Cloudpercentage As Integer = hs.DeviceValueEx(dvCloudCover)*cloudCoverMultiplier
    
    Dim dtNow As DateTime = DateTime.UtcNow
    Dim year As Integer = dtNow.Year
    Dim numOfDay As Integer = dtNow.DayOfYear
    Dim nbDaysInYear As Integer = 365
    If (DateTime.isLeapYear(year)) Then
      nbDaysInYear = 366
    End If
    
    Dim declination As Double = RadiansToDegrees(math.asin(0.3978 * math.sin(DegreesToRadians(angularSpeed) *(numOfDay - (81 - 2 * math.sin((DegreesToRadians(angularSpeed) * (numOfDay - 2))))))))
    Dim timeDecimal As Double = (dtNow.Hour + dtNow.Minute / 60) ' Coordinated Universal Time  (UTC)
    Dim solarHour As Double = timeDecimal + (4 * longitude / 60 )  ' The solar Hour
    Dim hourlyAngle As Double = 15 * ( 12 - solarHour )          ' hourly Angle of the sun
    
    Dim sunAltitude As Double = RadiansToDegrees(math.asin(math.sin(DegreesToRadians(latitude))* math.sin(DegreesToRadians(declination)) + math.cos(DegreesToRadians(latitude)) * math.cos(DegreesToRadians(declination)) * math.cos(DegreesToRadians(hourlyAngle)))) ' the height of the sun in degree, compared with the horizon
    ' This gave wrong azimuth for my location, had to replace the calculation with the Function "calcAzimuth" to get it right...
    ' Dim azimuth As Integer = math.acos((math.sin(DegreesToRadians(declination)) - math.sin(DegreesToRadians(latitude)) * math.sin(DegreesToRadians(sunAltitude))) / (math.cos(DegreesToRadians(latitude)) * math.cos(DegreesToRadians(sunAltitude) ))) * 180 / math.pi ' deviation of the sun from the North, in degree
    
    Dim azimuth As Double = calcAzimuth(dtNow, latitude, longitude, debugging)
    
    Dim sinAzimuth As Double = (math.cos(DegreesToRadians(declination)) * math.sin(DegreesToRadians(hourlyAngle))) / math.cos(DegreesToRadians(sunAltitude))
    If(sinAzimuth < 0) Then 
      azimuth=360-azimuth 
    End If
    
    Dim sunstrokeDuration As Double = RadiansToDegrees(2/15 * math.acos(- math.tan(DegreesToRadians(latitude)) * math.tan(DegreesToRadians(declination)))) ' duration of sunstroke in the day . Not used in this calculation.
    Dim RadiationAtm As Double = constantSolarRadiation * (1 +0.034 * math.cos( DegreesToRadians( 360 * numOfDay / nbDaysInYear ))) ' Sun radiation  (in W/m²) in the entrance of atmosphere.
    
    ' Coefficient of mitigation M
    Dim absolutePressure As Double = relativePressure - math.round((altitude/ 8.3),1) ' hPa
    Dim sinusSunAltitude As Double = math.sin(DegreesToRadians(sunAltitude))
    Dim M0 As Double = math.sqrt(1229 + math.pow(614 * sinusSunAltitude,2)) - 614 * sinusSunAltitude
    Dim M As Double = M0 * relativePressure/absolutePressure
    
    Dim okta As Integer = Cloudpercentage/12.5
    
    Dim Kc As Double = 1-0.75*math.pow(okta/8,3.4)  ' Factor of mitigation for the cloud layer
    
    Dim directRadiation As Integer
    Dim scatteredRadiation As Integer
    Dim totalRadiation As Integer
    Dim Lux As Integer
    Dim weightedLux As Integer
    
    If (sunAltitude > 1) Then ' Below 1° of Altitude , the formulae reach their limit of precision.
    	directRadiation = RadiationAtm * math.pow(0.6,M) * sinusSunAltitude
    	scatteredRadiation = RadiationAtm * (0.271 - 0.294 * math.pow(0.6,M)) * sinusSunAltitude
    	totalRadiation = scatteredRadiation + directRadiation
    	Lux = totalRadiation / 0.0079  ' Radiation in Lux. 1 Lux = 0,0079 W/m²
	weightedLux = Lux * Kc   ' radiation of the Sun with the cloud layer
    ElseIf (sunAltitude <= 1 and sunAltitude >= -7)  Then ' apply theoretical Lux of twilight
    	directRadiation = 0
    	scatteredRadiation = 0
    	arbitraryTwilightLux=arbitraryTwilightLux-(1-sunAltitude)/8*arbitraryTwilightLux
    	totalRadiation = scatteredRadiation + directRadiation + arbitraryTwilightLux 
    	Lux = totalRadiation / 0.0079  ' Radiation in Lux. 1 Lux = 0,0079 W/m²
	weightedLux = Lux * Kc   ' radiation of the Sun with the cloud layer
   Elseif (sunAltitude < -7) Then  ' no management of nautical and astronomical twilight...
   	directRadiation = 0
   	scatteredRadiation = 0
   	totalRadiation = 0
   	Lux = 0
	weightedLux = 0  '  should be around 3,2 Lux for the nautic twilight. Nevertheless.
   End If
   
   totalRadiation=totalRadiation*Kc
   directRadiation=directRadiation*Kc
   scatteredRadiation=scatteredRadiation*Kc
   
   ' Update HS-devices
   hs.setDeviceValueByRef(dvLux, weightedLux, True)
   hs.setDeviceValueByRef(dvOcta, okta, True)
   hs.setDeviceValueByRef(dvSolarAzimuth, azimuth, True)
   hs.setDeviceValueByRef(dvSolarAltitude, sunAltitude, True)
   hs.setDeviceValueByRef(dvTotalRadiation, totalRadiation, True)
   hs.setDeviceValueByRef(dvScatteredRadiation, scatteredRadiation, True)
   hs.setDeviceValueByRef(dvDirectRadiation, directRadiation, True)
    
    
   If (debugging) Then
       hs.WriteLog("Solar", "==============  SUN  LOG ==================")
       hs.WriteLog("Solar", "Lat = " & latitude  & " Lon = " & longitude)
       hs.WriteLog("Solar", "Angular Speed = " & math.round(angularSpeed,5) & " per day")
       hs.WriteLog("Solar", "Universal Coordinated Time (UTC) "& timeDecimal & " H.dd")
       hs.WriteLog("Solar", "Altitude of the sun = " & math.round(sunAltitude,1) & "°")
       hs.WriteLog("Solar", "Angular hourly = " & math.round(hourlyAngle,1) & "°")
       hs.WriteLog("Solar", "Azimuth of the sun = " & math.round(azimuth,1) & "°")
       hs.WriteLog("Solar", "Duration of the sun stroke of the day = " & math.round(sunstrokeDuration,2) & " H.dd")
       hs.WriteLog("Solar", "Radiation max in atmosphere = " & math.round(RadiationAtm,2) & " W/m²")
       hs.WriteLog("Solar", "Local relative pressure = " & math.round(relativePressure,1) & " hPa")
       hs.WriteLog("Solar", "Absolute pressure in atmosphere = " & math.round(absolutePressure,1) & " hPa")
       hs.WriteLog("Solar", "Coefficient of mitigation M = " & math.round(M,5) & " M0 = " & math.round(M0,5))
       
       hs.WriteLog("Solar", "Okta = " & okta & " Cloud coverage = " & Cloudpercentage & "%")
       hs.WriteLog("Solar", "Kc = " & math.round(Kc,5))
       hs.WriteLog("Solar", "Direct Radiation = " & math.round(directRadiation,2) & " W/m²")
       hs.WriteLog("Solar", "Scattered Radiation = " & math.round(scatteredRadiation,2) & " W/m²")
       hs.WriteLog("Solar", "Total radiation = " & math.round(totalRadiation,2) & " W/m²")
       hs.WriteLog("Solar", "Total Radiation in lux = " & math.round(Lux,2) & " Lux")
       hs.WriteLog("Solar", "Total weighted lux  = " & math.round(weightedLux,2) & " Lux")       
       hs.WriteLog("Solar", "==============  SUN  LOG ==================")
   End If

End Sub    

' http://www.vbforums.com/showthread.php?566870-Do-you-need-to-convert-radians-to-degrees&p=3502624&viewfull=1#post3502624
' math.deg
Private Function RadiansToDegrees(ByVal radians As Double) As Double
    Return radians * 180 / Math.PI
End Function

' http://www.vbforums.com/showthread.php?566870-Do-you-need-to-convert-radians-to-degrees&p=3502624&viewfull=1#post3502624
' math.rad
Private Function DegreesToRadians(ByVal degrees As Double) As Double
    Return degrees * Math.PI / 180
End Function

' https://forums.homeseer.com/forum/developer-support/scripts-plug-ins-development-and-libraries/script-plug-in-library/1286064-solar-position-script
' From c code posted here: http://www.psa.es/sdg/sunpos.htm
' VB.NET Conversion posted here: http://www.vbforums.com/showthread.php?832645-Solar-position-calculator
' converted for HomeSeer use by Sparkman v1.0
Private Function calcAzimuth(ByVal dtNow As DateTime, ByVal latitude As Double, ByVal longitude As Double, ByVal Debug As Boolean) As Double
    Dim rad As Double = math.pi / 180
    Dim dEarthMeanRadius As Double = 6371.01
    Dim dAstronomicalUnit As Double = 149597890
    
    Dim iYear As Integer = dtNow.UtcNow.Year
    Dim iMonth As Integer = dtNow.UtcNow.Month
    Dim iDay As Integer = dtNow.UtcNow.Day
    Dim dHours As Double = dtNow.UtcNow.Hour
    Dim dMinutes As Double = dtNow.UtcNow.Minute
    Dim dSeconds As Double = dtNow.UtcNow.Second

    Dim dZenithAngle As Double
    Dim dAzimuth As Double
    Dim dElapsedJulianDays As Double
    Dim dDecimalHours As Double
    Dim dEclipticLongitude As Double
    Dim dEclipticObliquity As Double
    Dim dRightAscension As Double
    Dim dDeclination As Double
    Dim dY As Double
    Dim dX As Double
    Dim dJulianDate As Double
    Dim liAux1 As Integer
    Dim liAux2 As Integer
    Dim dMeanLongitude As Double
    Dim dMeanAnomaly As Double
    Dim dOmega As Double
    Dim dSin_EclipticLongitude As Double
    Dim dGreenwichMeanSiderealTime As Double
    Dim dLocalMeanSiderealTime As Double
    Dim dLatitudeInRadians As Double
    Dim dHourAngle As Double
    Dim dCos_Latitude As Double
    Dim dSin_Latitude As Double
    Dim dCos_HourAngle As Double
    
    If Debug Then hs.WriteLog("Solar", "==============  calcAzimuth ==================")
    
    ' Calculate difference in days between the current Julian Day and JD 2451545.0, which is noon 1 January 2000 Universal Time
    ' Calculate time of the day in UT decimal hours
    dDecimalHours = dHours + (dMinutes + dSeconds / 60.0) / 60.0
    ' Calculate current Julian Day
    liAux1 = (iMonth - 14) \ 12
    liAux2 = (1461 * (iYear + 4800 + liAux1)) \ 4 + (367 * (iMonth - 2 - 12 * liAux1)) \ 12 - (3 * ((iYear + 4900 + liAux1) \ 100)) \ 4 + iDay - 32075
    dJulianDate = CDbl(liAux2) - 0.5 + dDecimalHours / 24.0
    ' Calculate difference between current Julian Day and JD 2451545.0
    dElapsedJulianDays = dJulianDate - 2451545.0
    If Debug Then hs.writelog("Solar","Elapsed Julian Days Since 2000/01/01: " & CStr(math.round(dElapsedJulianDays,1)))
    
    ' Calculate ecliptic coordinates (ecliptic longitude and obliquity of the ecliptic in radians but without limiting the angle to be less than 2*Pi
    ' (i.e., the result may be greater than 2*Pi)
    dOmega = 2.1429 - 0.0010394594 * dElapsedJulianDays
    dMeanLongitude = 4.895063 + 0.017202791698 * dElapsedJulianDays ' Radians
    dMeanAnomaly = 6.24006 + 0.0172019699 * dElapsedJulianDays
    dEclipticLongitude = dMeanLongitude + 0.03341607 * Math.Sin(dMeanAnomaly) + 0.00034894 * Math.Sin(2 * dMeanAnomaly) - 0.0001134 - 0.0000203 * Math.Sin(dOmega)
    dEclipticObliquity = 0.4090928 - 0.000000006214 * dElapsedJulianDays + 0.0000396 * Math.Cos(dOmega)
    If Debug Then hs.writelog("Solar","Ecliptic Longitude: " & CStr(math.round(dEclipticLongitude,1)))
    If Debug Then hs.writelog("Solar","Ecliptic Obliquity: " & CStr(math.round(dEclipticObliquity,5)))
    
    ' Calculate celestial coordinates ( right ascension and declination ) in radians but without limiting the angle to be less than 2*Pi (i.e., the result may be greater than 2*Pi)
    dSin_EclipticLongitude = Math.Sin(dEclipticLongitude)
    dY = Math.Cos(dEclipticObliquity) * dSin_EclipticLongitude
    dX = Math.Cos(dEclipticLongitude)
    dRightAscension = Math.Atan2(dY, dX)
    If dRightAscension < 0.0 Then
       dRightAscension = dRightAscension + (2 * math.pi)
    End If
    dDeclination = Math.Asin(Math.Sin(dEclipticObliquity) * dSin_EclipticLongitude)
    If Debug Then hs.writelog("Solar","Declination: " & CStr(math.round(dDeclination,5)))
    
    ' Calculate local coordinates ( azimuth and zenith angle ) in degrees
    dGreenwichMeanSiderealTime = 6.6974243242 + 0.0657098283 * dElapsedJulianDays + dDecimalHours
    dLocalMeanSiderealTime = (dGreenwichMeanSiderealTime * 15 + longitude) * rad
    dHourAngle = dLocalMeanSiderealTime - dRightAscension
    If Debug Then hs.writelog("Solar","Hour Angle: " & CStr(math.round(dHourAngle,1)))
    dLatitudeInRadians = latitude * rad
    dCos_Latitude = Math.Cos(dLatitudeInRadians)
    dSin_Latitude = Math.Sin(dLatitudeInRadians)
    dCos_HourAngle = Math.Cos(dHourAngle)
    dZenithAngle = (Math.Acos(dCos_Latitude * dCos_HourAngle * Math.Cos(dDeclination) + Math.Sin(dDeclination) * dSin_Latitude))
    dY = -Math.Sin(dHourAngle)
    dX = Math.Tan(dDeclination) * dCos_Latitude - dSin_Latitude * dCos_HourAngle
    dAzimuth = Math.Atan2(dY, dX)
    If dAzimuth < 0.0 Then
       dAzimuth = dAzimuth + (2 * math.pi)
    End If
    dAzimuth = dAzimuth / rad
    
    If Debug Then hs.WriteLog("Solar", "==============  calcAzimuth ==================")
        
    Return dAzimuth
End Function

 

 

1. Sett opp devicene slik som beskrevet her:

På 7.12.2016 den 17.53, DiderikFrom skrev:

Start med å lage virtuelle devicer som under:

Screen Shot 2016-12-04 at 17.46.20.png

 

For hver av devicene, noteres "Reference ID", under "Advanced".

Og slik har jeg (f.eks. for LUX) satt opp "Status graphics" for at det skal være mulig å oppdatere via skriptet (dvs. JSON som skriptet bruker). Obs! Under Status-Control kan det gå galt, devicen oppdateres ikke dersom denne står på en spesiell måte.

Screen Shot 2016-12-07 at 17.36.42.png

Edit 2: Jeg har satt en vid value range  slik at jeg er sikker på at oppdatering ikke feiler fordi verdien ikke er tillatt for devicen. For LUX, som over, For Solar Altidue/Azimuth: -360 til 360 °, for Radiation 0-200000 (aner ikke hvilken verdi man når på en solrik sommerdag, men sannsynligvis langt under 200000 W/m2 -- det skader ikke å ha litt høy maxverdi), og Octa:0-8. For Radiation-devicene samt Solar Altitude og Azimuth, kan du vise decimaler dersom du vil, men det tror jeg er et unødvendig presisjonsnivå.

 

På 7.12.2016 den 17.53, DiderikFrom skrev:

Edit: Og slik kan det se ut i bruk på en desemberdag:

Screenshot - 12082016 - 12:28:27 PM.png

 

Jeg har brukt disse ikonene:

LUX/radiation: /images/HomeSeer/status/luminance-00.png

octa: images/HomeSeer/status/cyan.png

Sun, *: images/HomeSeer/status/yellow.png

Men det fins sikkert mye bedre ikoner der ute et sted dersom man gidder lete.

 

 

2. Registrer deg og finn API-key hos Dark Sky: https://darksky.net/dev

 

Bruk metoden i A eller B:

A (Jon00DataScraper):

Spoiler

3. Bruk denne i Jon00DataScraper:


[Grab15]

Devicemode=2
Path=https://api.darksky.net/forecast/API-KEY/71.123,11.123
Encoding=UTF-8
Pattern1=(?s)"currently".*?"cloudCover":(.*?),
Pattern2=(?s)"currently".*?"pressure":(.*?),
DeviceName1=CloudCover (DarkSky API)
DeviceValue1=[0]
DeviceText1=[0]
DeviceName2=Pressure (DarkSky API)
DeviceValue2=[100]
DeviceText2=[100]

PS! Etter at «cloud cover»-devicen har blitt opprettet, så må du inn på «status graphics» og definere at den har to desimaler!

 

4. Sett opp eventet:

image.png.e1988595be60a2420ebfc1cfa34422fc.png

 

PS: Bytt ut "parameters" med ditt "Grab-nummer".

 

5. Da bør du få data hvert 15. minutt. :)

image.png.f282ac875ce3db7e152f51f4533d3104.png

 

B (WeatherXML-plugin):

Spoiler

3.

i) Installer WeatherXML-plugin.

ii) Konfigurer lokasjon med DarkSky API.

iii) Gå på devices under WeatherXML og kryss av for "barometer" og "cloud cover".

iv) Slå av schedules i WeatherXML.

v) I scriptet må du endre "cloudCoverMultiplier" til 1.

 

4. Sett opp eventet:

image.png.3859135db44337a5a259d56d8ccee5f4.png

 

5. Da bør du få data hvert 15. minutt. :)

image.png.225d1627281e46388372441eada82187.png

 

 

Endret av ZoRaC
WeatherXML lagt til
  • Like 1
  • Thanks 2
Lenke til kommentar
Del på andre sider

Det funka fint!
Ser at Lux verdien er i samsvar med tidligere verdier, og faktisk så var den på 363 når ytterlyset slo seg på ihht dag/natt verdier.
Med WU lua scriptet brukte jeg en luxverdi på 350. Kanskje en tilfeldighet, men lover bra! ?
Måtte bare skrive det litt om da jeg ikke benytter Jon00s datascraper men python og mcsMqtt for å få inn octa og pressure fra darksky.
Bra jobba Zorac!!

Lenke til kommentar
Del på andre sider

8 timer siden, Rogerbl skrev:

Måtte bare skrive det litt om da jeg ikke benytter Jon00s datascraper men python og mcsMqtt for å få inn octa og pressure fra darksky.

 

Da var det vel nok å endre devIDene i scriptet? Eller måtte du endre noe i tillegg?

Lenke til kommentar
Del på andre sider

4 timer siden, ZoRaC skrev:

 

Da var det vel nok å endre devIDene i scriptet? Eller måtte du endre noe i tillegg?

ja og i tillegg tok jeg vekk octa beregningen og lastet den inn fra Homeseer devicen opprettet av mcsMqtt.
Takk for god jobb! ?
 

Lenke til kommentar
Del på andre sider

Har lagt inn scriptet ditt ZoRaC, samt henter octa og pressure fra DarkSky, men lux verdi og W/m2 er urealistisk høye. Tror ikke det er reelt i Norge med verdier noe særlig over 100 W/m2, men min viser lux på over 60000 og radiation total på bortimot 500 W/m2 ? er det sånn å forstå at scriptet ikke fungerer helt enda? 

Lenke til kommentar
Del på andre sider

3 minutter siden, Rufus skrev:

Har lagt inn scriptet ditt ZoRaC, samt henter octa og pressure fra DarkSky, men lux verdi og W/m2 er urealistisk høye. Tror ikke det er reelt i Norge med verdier noe særlig over 100 W/m2, men min viser lux på over 60000 og radiation total på bortimot 500 W/m2 ? er det sånn å forstå at scriptet ikke fungerer helt enda? 

 

Jeg registrerer også at verdiene er mye høyere enn i LUA-scriptet...

 

Basert på dette så tenker jeg det kanskje kan være riktig med 500 W/m2?

Sitat

Average annual solar radiation arriving at the top of the Earth's atmosphere is roughly 1361 W/m2.[25] The Sun's rays are attenuated as they pass through the atmosphere, leaving maximum normal surface irradiance at approximately 1000 W /m2 at sea level on a clear day. When 1361 W/m2 is arriving above the atmosphere (when the sun is at the zenith in a cloudless sky), direct sun is about 1050 W/m2, and global radiation on a horizontal surface at ground level is about 1120 W/m2.[26]The latter figure includes radiation scattered or reemitted by atmosphere and surroundings. The actual figure varies with the Sun's angle and atmospheric circumstances. Ignoring clouds, the daily average insolation for the Earth is approximately 6 kWh/m2 = 21.6 MJ/m2.

 

Ref: https://en.m.wikipedia.org/wiki/Solar_irradiance

 

EDIT:

Jeg tror kanskje verdiene for radiation som legges i devicene er uvektet - altså ikke korrigerer for skydekke. Lux er derimot beregnet med skydekke. Hva får du pm du tar radiation * Kc (se i loggen)?

Endret av ZoRaC
Lenke til kommentar
Del på andre sider

34 minutter siden, ZoRaC skrev:

Jeg tror kanskje verdiene for radiation som legges i devicene er uvektet - altså ikke korrigerer for skydekke. Lux er derimot beregnet med skydekke. Hva får du pm du tar radiation * Kc (se i loggen)?

Nå har det blitt noe mer overskyet :) Jeg får 295 W/m2 dersom jeg tar 0,71799(Kc) * 411 W/m2 (Radiation,total).

Det er mulig at verdiene er riktig, men jeg er usikker på hva de representerer. For meg er det kanskje mest vesentlig å kunne vite hvor mye huset potensielt kan bli oppvarmet av sola.

Og jeg kan ikke skjønne at man her i Norge på denne tiden av året kan bli tilført så mye varme som 300-400 W/m2. :)

Finnes det noen forklaring på hva de Radiation verdiene representerer? Har du noen formler for hvordan scriptet regner ut verdiene?

Jeg kan eventuelt høre med en bekjent som er forsker og som muligens kan ha litt peiling på dette temaet.

Lenke til kommentar
Del på andre sider

44 minutter siden, ZoRaC skrev:

Jeg tror kanskje verdiene for radiation som legges i devicene er uvektet - altså ikke korrigerer for skydekke. Lux er derimot beregnet med skydekke. Hva får du pm du tar radiation * Kc (se i loggen)?

Vet du forresten om verdiene blir justert for hvor langt gjennom atmosfæren strålingen må gå gjennom?

Lenke til kommentar
Del på andre sider

1 minutt siden, Rufus skrev:

Finnes det noen forklaring på hva de Radiation verdiene representerer? Har du noen formler for hvordan scriptet regner ut verdiene?

 

Tja, det er direkte sol og indirekte («scattered»)... formlene står i scriptet, men hva/hvordan de beregner aner jeg ikke - jeg bare «oversatte» formlene fra Lua-scriptet @Rogerbl delte for et par sider siden. :) 

 

3 minutter siden, Rufus skrev:

Jeg kan eventuelt høre med en bekjent som er forsker og som muligens kan ha litt peiling på dette temaet.

 

Gjør gjerne det! :) Dette er alt for komplisert fysikk/matte til at jeg skjønner nok til å vite om tallene som kommer frem er tilsynelatende riktige eller ikke... :( 

 

2 minutter siden, Rufus skrev:

Vet du forresten om verdiene blir justert for hvor langt gjennom atmosfæren strålingen må gå gjennom?

 

Ingen anelse...

Lenke til kommentar
Del på andre sider

5 minutter siden, Rufus skrev:

 har det blitt noe mer overskyet :) Jeg får 295 W/m2 dersom jeg tar 0,71799(Kc) * 411 W/m2 (Radiation,total).

Det er mulig at verdiene er riktig, men jeg er usikker på hva de representerer. For meg er det kanskje mest vesentlig å kunne vite hvor mye huset potensielt kan bli oppvarmet av sola.

Og jeg kan ikke skjønne at man her i Norge på denne tiden av året kan bli tilført så mye varme som 300-400 W/m2. :)

 

Mulig jeg skulle endret scriptet til å bruke vektede verdier for radiation også. Blir litt rart å bare gjøre det på Lux. Radiation vil jo nå bli veldig høye på overskyet (8 Octa), siden radiation ikke tar hensyn til skydekket, mens Lux gjør det. 

Lenke til kommentar
Del på andre sider

11 minutter siden, Rufus skrev:

Og jeg kan ikke skjønne at man her i Norge på denne tiden av året kan bli tilført så mye varme som 300-400 W/m2. :)

 

Fra http://www.renewable-energy-concepts.com/solarenergy/solar-basics/insolation-weather.html

 

Sitat

Average solar radiation for a location on the northern hemisphere with a latitude angle of 47° - 55°.

 

    • sunny, clear sky 
      • summer: 600 - 1000 W/m²
      • winter: 300 - 500 W/m²
    • sunny, skattered clouds or partly cloudy
      • summer: 300 - 600 W/m²
      • winter: 150 - 300 W/m²
    • cloudy, fog
      • summer: 100 - 300 W/m²
      • winter: 50 - 150 W/m²

 

Nå ligger vi litt lengre nord, men vi er vel mellom vinter og sommer nå, så 250-450 w/m2 et kanskje realistisk ved lettskyet vær?

Lenke til kommentar
Del på andre sider

Jeg leser også mange steder at man regner med at ca 30% av all stråling blir reflektert ut av atmosfæren igjen. Jeg skal se gjennom scriptet i kveld og prøve å forstå hvordan man beregner de forskjellige verdiene, og så skal jeg se til uka om jeg får tak i forsker-vennen min som sikkert kan bidra med noe nyttig informasjon.

Nøyaktigheten på verdiene kommer selvfølgelig an på hva man skal bruke verdiene til. Jeg har lyssensor ute som jeg heller bruker til f.eks lysstyring. Det fungerer utmerket uavhengig om Lux-verdi er helt korrekt eller ikke :) Eventuelle unøyaktigheter ser ut til å være likt hver gang, så resultatet blir det samme hver gang.

Det er også veldig snedig å ha en device som sier i hvilken himmelretning sola kommer fra. Det kan jeg bruke til varsling på om jeg skal kjøre ned persienner eller ikke (har ikke motordrift). :)

Samtidig kunne det vært kjekt med en device som viser mest mulig reel verdi for potensial oppvarming av huset. Det kan jo brukes i temperaturstyring f.eks.

Lenke til kommentar
Del på andre sider

6 minutter siden, ZoRaC skrev:
Sitat

Average solar radiation for a location on the northern hemisphere with a latitude angle of 47° - 55°.

 

    • sunny, clear sky 
      • summer: 600 - 1000 W/m²
      • winter: 300 - 500 W/m²
    • sunny, skattered clouds or partly cloudy
      • summer: 300 - 600 W/m²
      • winter: 150 - 300 W/m²
    • cloudy, fog
      • summer: 100 - 300 W/m²
      • winter: 50 - 150 W/m²

 

Nå ligger vi litt lengre nord, men vi er vel mellom vinter og sommer nå, så 250-450 w/m2 et kanskje realistisk ved lettskyet vær?

Kan godt være at det stemmer :) Bare syns det høres mye ut. Samtidig som at flere andre sider viser til lavere tall. Det kan kanskje ha noe med definisjoner og hvor mye av denne stråleenergien som er mulig å utnytte.

 

https://ndla.no/nb/node/8257?fag=7

image.png.57a5040400290ad71924a71605a6478c.png

Lenke til kommentar
Del på andre sider

54 minutter siden, Rogerbl skrev:

Solar azimuth gir retning hvor sola kommer fra...

Forøvrig så ser jeg at azimuth fra scriptet er ca 100 grader feil så jeg går tilbake til
det scriptet som bare regnet ut altitude og azimuth, for disse verdiene, der stemmer verdiene med RL.

Lenke til kommentar
Del på andre sider

9 minutter siden, Rogerbl skrev:

Forøvrig så ser jeg at azimuth fra scriptet er ca 100 grader feil så jeg går tilbake til
det scriptet som bare regnet ut altitude og azimuth, for disse verdiene, der stemmer verdiene med RL.

 

Hos meg stemmer azimuth og altitude med det jeg får på suncalc.org. Gjør det ikke det hos deg?

 

Jeg har jo kopiert inn det scriptet inn i «hovedscriptet» (se nederst «Function calcAzimuth»). Så begge burde gi samme verdi... :) 

Lenke til kommentar
Del på andre sider

5 minutter siden, ZoRaC skrev:

 

Hos meg stemmer azimuth og altitude med det jeg får på suncalc.org. Gjør det ikke det hos deg?

 

Jeg har jo kopiert inn det scriptet inn i «hovedscriptet» (se nederst «Function calcAzimuth»). Så begge burde gi samme verdi... :) 

Nei, fikk nesten 100 grader avvik.. pussig..

Lenke til kommentar
Del på andre sider

1 minutt siden, Rogerbl skrev:

Nei, fikk nesten 100 grader avvik.. pussig..

 

Nå er den ca 100 grader feil hos meg også! :o 

 

Fint om noen kan se over scriptet og formlene og se hva jeg kan ha gjort feil... :)  tror jeg må ha sett meg blind på det...

Lenke til kommentar
Del på andre sider

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.