dakall Posted March 18 Posted March 18 Does anyone know of an easy way to compute the time of day for Solar Noon? (midpoint between sunrise and sunset) I know there are variables for sunrise and sunset, but I can't average them together successfully. Or is there a node server that does that? I use the Timedata NS which has lots of info, but not solar noon.
peterathans Posted March 18 Posted March 18 Funny, I have been thinking about this lately too - we're doing a kitchen remodel that will include new Smartwings shades. The windows are on the west wall and I'd like to lower the shades after we get direct sunlight (shortly after the sun is directly overhead). I'm interested in any solutions that come up!
dakall Posted March 18 Author Posted March 18 1 hour ago, peterathans said: Funny, I have been thinking about this lately too - we're doing a kitchen remodel that will include new Smartwings shades. The windows are on the west wall and I'd like to lower the shades after we get direct sunlight (shortly after the sun is directly overhead). I'm interested in any solutions that come up! That's exactly what I'm trying to do. Open up the east side shades, wait an hour and close the west side shades. I currently have the program run at 11:45 am, but I have to change to 12:45 pm when DST kicks in.
auger66 Posted March 18 Posted March 18 (edited) You may get some ideas from this post. I use part of this program someone posted a long time ago to calculate day and month. I think using something like this would make it relatively easy to calculate solar noon in seconds. Edited March 18 by auger66
Ross Posted March 19 Posted March 19 (edited) @dakall "I know there are variables for sunrise and sunset, but I can't average them together successfully." Can I assume that averaging sunrise and sunset times will be good enough to determine solar noon? This seems reasonable to me, but I don't know if I'm missing something astronomy-wise. If it is good enough, then can I assume the issue is getting the EISY/ISY to calculate the correct math? As an aside, solar noon only varies by half an hour during the year. It's 15 minutes off in early February and early November. It is not centered on noon; however, unless you happen to be on the exact longitude for your time zone (e.g., 90W for Central time). You need to add/subtract 4 minutes for each degree of longitude you're west/east of your standard longitude (75 ET, 90 CT, 105 MT, 120 PT in the US) to get your local "standard" noon. Edited March 19 by Ross
Northwoods Ranger Posted March 19 Posted March 19 (edited) Just throwing this out there for consideration… Instead of using a specific time of day that varies by season, if the goal is to drop or raise window shades, how about doing that with respect to how much light is being exposed to the area you want to cover with the shades? This prevents dropping the shades on a cloudy/rainy day and doesn’t require any complicated calculations regarding Solar Noon. The downside is that you would need a WirelessTags nodeserver and the requisite sensors in place where you want to measure light. I use this method for turning lights off and on in the family room at specified times during the day. Measure the amount of light in LUX reported by the wireless tag and take appropriate action based on that value. In the evening, it doesn’t take much before you get a feel for what LUX value is too low and its time to turn on the lights. Additionally, in the morning, I turn the lights on at a fixed time and then run a program to monitor LUX values. Once bright enough, turn the lights off. I suspect the same could be used for lowering or raising window shades… Edited March 19 by Northwoods Ranger
peterathans Posted March 19 Posted March 19 3 hours ago, Ross said: Can I assume that averaging sunrise and sunset times will be good enough to determine solar noon? I think it's more complicated that that, mostly due to time changes (Daylight Savings Time). I suppose if we had a flag available that reports whether we're in DST or not, we could adjust the rise & set average by an hour?
Ross Posted March 19 Posted March 19 @peterathans I'm trying to think how DST matters. Currently (now DST), sunrise is 7am and sunset is 7pm. The average is 1pm which is solar noon. Two weeks ago (standard time), sunrise was 6am and sunset was 6pm. The average was 12pm which was solar noon. As long as the DST time change occurs at night (2am), I think the average calculation works. But please prove me wrong - you wouldn't be the first! Ross 1
auger66 Posted March 20 Posted March 20 IoX can provide sunrise and sunset every day, and the next day, to a variable. In my location today, sunrise = 26727. Sunset = 70316. 70316 - 26727 = 45589 45589 / 2 = 21794.5 26727 + 21794.5 = 48521.5 48521.5 is solar noon today at my location. Doesn't that give you exactly solar noon in seconds every day? Including DST? I'm I missing something? You would need to make the state variable = to an integer variable at the end so you could do something with it in a program.
dakall Posted March 20 Author Posted March 20 1 hour ago, auger66 said: IoX can provide sunrise and sunset every day, and the next day, to a variable. In my location today, sunrise = 26727. Sunset = 70316. 70316 - 26727 = 45589 45589 / 2 = 21794.5 26727 + 21794.5 = 48521.5 48521.5 is solar noon today at my location. Doesn't that give you exactly solar noon in seconds every day? Including DST? I'm I missing something? You would need to make the state variable = to an integer variable at the end so you could do something with it in a program. How are you getting those sunrise/sunset numbers? Are you converting the times somehow?
dakall Posted March 20 Author Posted March 20 4 hours ago, Ross said: @peterathans I'm trying to think how DST matters. Currently (now DST), sunrise is 7am and sunset is 7pm. The average is 1pm which is solar noon. Two weeks ago (standard time), sunrise was 6am and sunset was 6pm. The average was 12pm which was solar noon. As long as the DST time change occurs at night (2am), I think the average calculation works. But please prove me wrong - you wouldn't be the first! Ross Regardless of DST, solar noon is 6 hours after sunrise in your examples. DST does not increase the times between sunrise and sunset. We as humans just offset our clocks from those times.
Ross Posted March 20 Posted March 20 @dakall Agreed. They happen to be 6 hours after sunrise now because we are near the equinox (which took place on 3/19 at 8:06 PDT). And, I rounded. But the average of sunrise/sunset should work for any day of the year.
peterathans Posted March 20 Posted March 20 15 hours ago, Ross said: Currently (now DST), sunrise is 7am and sunset is 7pm. The average is 1pm which is solar noon. Two weeks ago (standard time), sunrise was 6am and sunset was 6pm. The average was 12pm which was solar noon. I think I agree - the shifted clock reading affects both the sunrise and sunset times, and so is "baked into" the averaging calculation. 1
TJF1960 Posted March 20 Posted March 20 Hello @dakall, if you are looking simply for a trigger for programs based on solar noon have a look at io_guy's Nodelink plug in. His "Additional ISY Data" plug in offers Zenith, Azimuth and Elevation figures based on your lat/long., The downside is that its not available on PG3. It will run on a raspberry pi or windows. If you are familiar with FreeBSD you can get it to run on eISY. And, sadly it is no longer supported. With that said, once installed it does work well currently. I also second @Northwoods Ranger comment about using Lux maybe in addition to solar noon. Here is the link to Nodelink on this forum:
wrj0 Posted March 20 Posted March 20 On 3/18/2024 at 12:20 PM, dakall said: Does anyone know of an easy way to compute the time of day for Solar Noon? (midpoint between sunrise and sunset) @dakall Here's one possible solution. Create Integer variables: $iSunrise, $iSunset, $iSolarNoon, $iSolarNoon.Hr, and $iSolarNoon.min (for last one, set precision to 2) Solar Noon Calc - [ID 00AB][Parent 0039][Not Enabled] If - No Conditions - (To add one, press 'Schedule' or 'Condition') Then $iSunset = [Sunset Today (seconds)] $iSunrise = [Sunrise Today (seconds)] $iSolarNoon = $iSunset $iSolarNoon -= $iSunrise $iSolarNoon /= 2 $iSolarNoon += [Sunrise Today (seconds)] $iSolarNoon.Hr = $iSolarNoon $iSolarNoon.Hr /= 3600 $iSolarNoon.Min = $iSolarNoon.Hr $iSolarNoon.Min *= 3600 $iSolarNoon.Min -= $iSolarNoon $iSolarNoon.Min *= -1 $iSolarNoon.Min /= 60 Else - No Actions - (To add one, press 'Action') #Disabled Run manually Since SolarNoon.Hr is an integer, the line $iSolarNoon.hr /= 3600 returns the integer Hour portion of the SolarNoon time. Then that time is multiplied by 3600 to get that value in seconds that is subtracted from $iSolarNoon (in seconds), and then negated to provide a positive number. Finally, divide that value by 60 to get the SolarNoon.Min value (here a 2 decimal number). To use the values to actually do anything, likely State variables for current Hour and Minute would need to be created and updated programmatically, and those State variables tested against the $iSolarNoon.Hr and $iSolarNoon.Min values. 2
auger66 Posted March 20 Posted March 20 (edited) 18 hours ago, dakall said: How are you getting those sunrise/sunset numbers? Are you converting the times somehow? Straight out of eisy as a system variable in seconds. No conversion. 18 hours ago, dakall said: Regardless of DST, solar noon is 6 hours after sunrise in your examples. DST does not increase the times between sunrise and sunset. We as humans just offset our clocks from those times. Not quite six hours, but it's close. I thought you wanted to know what time solar noon is every day, including DST? 1 hour ago, wrj0 said: @dakall Here's one possible solution. Create Integer variables: $iSunrise, $iSunset, $iSolarNoon, $iSolarNoon.Hr, and $iSolarNoon.min (for last one, set precision to 2) Solar Noon Calc - [ID 00AB][Parent 0039][Not Enabled] If - No Conditions - (To add one, press 'Schedule' or 'Condition') Then $iSunset = [Sunset Today (seconds)] $iSunrise = [Sunrise Today (seconds)] $iSolarNoon = $iSunset $iSolarNoon -= $iSunrise $iSolarNoon /= 2 $iSolarNoon += [Sunrise Today (seconds)] $iSolarNoon.Hr = $iSolarNoon $iSolarNoon.Hr /= 3600 $iSolarNoon.Min = $iSolarNoon.Hr $iSolarNoon.Min *= 3600 $iSolarNoon.Min -= $iSolarNoon $iSolarNoon.Min *= -1 $iSolarNoon.Min /= 60 Else - No Actions - (To add one, press 'Action') #Disabled Run manually Since SolarNoon.Hr is an integer, the line $iSolarNoon.hr /= 3600 returns the integer Hour portion of the SolarNoon time. Then that time is multiplied by 3600 to get that value in seconds that is subtracted from $iSolarNoon (in seconds), and then negated to provide a positive number. Finally, divide that value by 60 to get the SolarNoon.Min value (here a 2 decimal number). To use the values to actually do anything, likely State variables for current Hour and Minute would need to be created and updated programmatically, and those State variables tested against the $iSolarNoon.Hr and $iSolarNoon.Min values. This is the way. Works very similarly to the month/day program I posted earlier, and uses the same eisy system info in my example. Should be very reliable, too, since all the information originates and stays in the eisy, i.e., no nodes. Edited March 20 by auger66
Recommended Posts