55 lines
1.6 KiB
Python
55 lines
1.6 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):
|
|
Thread.__init__(self)
|
|
|
|
self.nextUpdate = None
|
|
self.lastUpdateTried = None
|
|
self.stopThread = False
|
|
self.provider = None
|
|
|
|
def acquire(self, config : aman.config.Weather.Weather):
|
|
self.nextUpdate = dt.utcfromtimestamp(int(time.time()))
|
|
self.lastUpdateTried = None
|
|
self.stopThread = False
|
|
self.provider = None
|
|
|
|
if 'DWD' == config.Provider.upper():
|
|
self.provider = DwdCrawler()
|
|
else:
|
|
sys.stderr.write('Invalid or unknown weather-provider defined')
|
|
sys.exit(-1)
|
|
|
|
self.start()
|
|
|
|
def release(self):
|
|
self.stopThread = True
|
|
self.join()
|
|
|
|
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 |