mirror of
https://github.com/SpudGunMan/meshing-around.git
synced 2026-05-04 12:32:15 +02:00
71 lines
3.0 KiB
Python
71 lines
3.0 KiB
Python
# helper functions to get HF band conditions, DRAP X-ray flux, and sunrise/sunset times
|
|
# some code from https://github.com/Murturtle/MeshLink
|
|
# K7MHI Kelly Keeton 2024
|
|
|
|
import requests # pip install requests
|
|
import xml.dom.minidom
|
|
from datetime import timedelta
|
|
from dateutil import tz # pip install python-dateutil
|
|
from suntime import Sun, SunTimeException # pip install suntime
|
|
from datetime import datetime
|
|
|
|
LATITUDE = 48.50
|
|
LONGITUDE = -123.0
|
|
|
|
def hf_band_conditions():
|
|
hf_cond = ""
|
|
band_cond = requests.get("https://www.hamqsl.com/solarxml.php", timeout=5)
|
|
if(band_cond.ok):
|
|
solarxml = xml.dom.minidom.parseString(band_cond.text)
|
|
for i in solarxml.getElementsByTagName("band"):
|
|
hf_cond += i.getAttribute("time")[0]+i.getAttribute("name") +"="+str(i.childNodes[0].data)+"\n"
|
|
else:
|
|
hf_cond += "error fetching"
|
|
hf_cond = hf_cond[:-1] # remove the last newline
|
|
return hf_cond
|
|
|
|
def solar_conditions():
|
|
solar_cond = ""
|
|
# get the solar conditions from the xml at "https://www.hamqsl.com/solarxml.php"
|
|
solar_cond = requests.get("https://www.hamqsl.com/solarxml.php", timeout=5)
|
|
if(solar_cond.ok):
|
|
solar_xml = xml.dom.minidom.parseString(solar_cond.text)
|
|
for i in solar_xml.getElementsByTagName("solardata"):
|
|
solar_a_index = i.getElementsByTagName("aindex")[0].childNodes[0].data
|
|
solar_k_index = i.getElementsByTagName("kindex")[0].childNodes[0].data
|
|
solar_xray = i.getElementsByTagName("xray")[0].childNodes[0].data
|
|
solar_flux = i.getElementsByTagName("solarflux")[0].childNodes[0].data
|
|
sunspots = i.getElementsByTagName("sunspots")[0].childNodes[0].data
|
|
signalnoise = i.getElementsByTagName("signalnoise")[0].childNodes[0].data
|
|
solar_cond = "A-Index: " + solar_a_index + "\nK-Index: " + solar_k_index + "\nSunspots: " + sunspots + "\nX-Ray Flux: " + solar_xray + "\nSolar Flux: " + solar_flux + "\nSignal Noise: " + signalnoise
|
|
else:
|
|
solar_cond += "error fetching"
|
|
return solar_cond
|
|
|
|
def drap_xray_conditions():
|
|
drap_cond = ""
|
|
drap_cond = requests.get("https://services.swpc.noaa.gov/text/drap_global_frequencies.txt", timeout=5)
|
|
if(drap_cond.ok):
|
|
drap_list = drap_cond.text.split('\n')
|
|
x_filter = '# X-RAY Message :'
|
|
for line in drap_list:
|
|
if x_filter in line:
|
|
xray_flux = line.split(": ")[1]
|
|
else:
|
|
xray_flux += "error fetching"
|
|
return xray_flux
|
|
|
|
def get_sunrise_sunset(lat=0, lon=0):
|
|
if lat != 0 and lon != 0:
|
|
sun = Sun(lat, lon)
|
|
else:
|
|
sun = Sun(LATITUDE, LONGITUDE)
|
|
|
|
to_zone = tz.tzlocal()
|
|
today_sr = sun.get_sunrise_time(datetime.now())
|
|
today_ss = sun.get_sunset_time(datetime.now())
|
|
if today_ss < today_sr: # if sunset is before sunrise, then it's tomorrow
|
|
today_ss = today_ss + timedelta(1)
|
|
todaysun = [today_sr.astimezone(to_zone).strftime('%a %d %I:%M'), today_ss.astimezone(to_zone).strftime('%a %d %I:%M')]
|
|
return todaysun
|