47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
#!/usr/bin/env python
|
|
|
|
import pytz
|
|
import sys
|
|
import time
|
|
|
|
from datetime import datetime as dt
|
|
from threading import Thread
|
|
|
|
from aman.com.DwdCrawler import DwdCrawler
|
|
import aman.config.Weather
|
|
|
|
class Weather(Thread):
|
|
def __init__(self, config : aman.config.Weather.Weather):
|
|
Thread.__init__(self)
|
|
|
|
self.NextUpdate = dt.utcfromtimestamp(int(time.time()))
|
|
self.LastUpdateTried = None
|
|
self.StopThread = False
|
|
self.Provider = None
|
|
|
|
if 'DWD' == config.Provider.upper():
|
|
self.Provider = DwdCrawler()
|
|
elif 'NONE' != config.Provider.upper():
|
|
sys.stderr.write('Invalid or unknown weather-provider defined')
|
|
sys.exit(-1)
|
|
|
|
self.setDaemon(True)
|
|
self.start()
|
|
|
|
def currentClock():
|
|
clock = dt.utcfromtimestamp(int(time.time())).replace(tzinfo = pytz.UTC)
|
|
return clock
|
|
|
|
def run(self):
|
|
while False == self.StopThread and None != self.Provider:
|
|
now = Weather.currentClock()
|
|
|
|
# check if an update is required
|
|
if None != self.Provider.UpdateTime and self.Provider.UpdateTime > now:
|
|
time.sleep(1)
|
|
continue
|
|
|
|
if None == self.LastUpdateTried or self.LastUpdateTried <= now:
|
|
if True == self.Provider.receiveWindData():
|
|
self.NextUpdate = self.Provider.UpdateTime
|
|
print('Received new wind data') |