12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #!/usr/bin/env python
- import datetime
- 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()
- else:
- sys.stderr.write('Invalid or unknown weather-provider defined')
- sys.exit(-1)
- self.start()
- def stop(self):
- self.stopThread = True
- def currentClock():
- clock = dt.utcfromtimestamp(int(time.time()))
- clock = datetime.datetime(
- year = clock.year,
- month = clock.month,
- day = clock.day,
- hour = clock.hour,
- minute = clock.minute,
- second = clock.second,
- 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
- # calculate the theoretical next try for an update
- if None != self.lastUpdateTried:
- earliestUpdate = self.lastUpdateTried + datetime.timedelta(minutes=2)
- if None == self.lastUpdateTried or self.lastUpdateTried <= now:
- if True == self.provider.receiveWindData():
- self.nextUpdate = self.provider.updateTime
|