Weather.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/usr/bin/env python
  2. import datetime
  3. import pytz
  4. import sys
  5. import time
  6. from datetime import datetime as dt
  7. from threading import Thread
  8. from aman.com.DwdCrawler import DwdCrawler
  9. import aman.config.Weather
  10. class Weather(Thread):
  11. def __init__(self):
  12. Thread.__init__(self)
  13. self.nextUpdate = None
  14. self.lastUpdateTried = None
  15. self.stopThread = False
  16. self.provider = None
  17. def acquire(self, config : aman.config.Weather.Weather):
  18. self.nextUpdate = dt.utcfromtimestamp(int(time.time()))
  19. self.lastUpdateTried = None
  20. self.stopThread = False
  21. self.provider = None
  22. if 'DWD' == config.Provider.upper():
  23. self.provider = DwdCrawler()
  24. else:
  25. sys.stderr.write('Invalid or unknown weather-provider defined')
  26. sys.exit(-1)
  27. self.start()
  28. def release(self):
  29. self.stopThread = True
  30. self.join()
  31. def currentClock():
  32. clock = dt.utcfromtimestamp(int(time.time()))
  33. clock = datetime.datetime(
  34. year = clock.year,
  35. month = clock.month,
  36. day = clock.day,
  37. hour = clock.hour,
  38. minute = clock.minute,
  39. second = clock.second,
  40. tzinfo = pytz.UTC
  41. )
  42. return clock
  43. def run(self):
  44. while False == self.stopThread and None != self.provider:
  45. now = Weather.currentClock()
  46. # check if an update is required
  47. if None != self.provider.updateTime and self.provider.updateTime > now:
  48. time.sleep(1)
  49. continue
  50. if None == self.lastUpdateTried or self.lastUpdateTried <= now:
  51. if True == self.provider.receiveWindData():
  52. self.nextUpdate = self.provider.updateTime