Skip to content
Snippets Groups Projects
Commit 0d207095 authored by jkerdreu's avatar jkerdreu
Browse files

Added a lot of checks for cfg file

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/trunk@2002 b32b6428-25c9-4566-ad07-03861ab6144f
parent 95ef9e24
Branches
No related tags found
No related merge requests found
import platform
import time
import atexit
import sys
import pyowm
from pyowm.exceptions import OWMError
......@@ -10,6 +12,7 @@ PACKAGE_NAME = "xaal.owm"
logger = tools.get_logger(PACKAGE_NAME,'DEBUG')
RATE = 300 # update every 5 min
API_KEY = '3a5989bac31472cd41d69e92838bd454'
def setup_dev(dev):
dev.vendor_id = "IHSEV"
......@@ -22,21 +25,34 @@ def setup_dev(dev):
class GW:
def __init__(self,engine):
self.eng = engine
self.cfg = tools.load_cfg_or_die(PACKAGE_NAME)
atexit.register(self._exit)
cfg = tools.load_cfg(PACKAGE_NAME)
if cfg == None:
logger.info('New config file')
cfg = tools.new_cfg(PACKAGE_NAME)
cfg.write()
if not cfg.get('config',None): cfg['config'] = {}
self.cfg = cfg
self.setup()
def setup(self):
""" create devices, register .."""
def get_config_addr(self,key):
""" return a new xaal address and flag an update"""
cfg = self.cfg['config']
if cfg.get(key,None) == None:
cfg[key] = tools.get_random_uuid()
logger.info("New device addr : %s = %s" % (key,cfg[key]))
return cfg[key]
def setup(self):
""" create devices, register .."""
# devices
self.devs = []
self.devs.append(devices.thermometer(cfg['temperature']))
self.devs.append(devices.hygrometer(cfg['humidity']))
self.devs.append(devices.barometer(cfg['pressure']))
self.devs.append(devices.windgauge(cfg['wind']))
self.devs.append(devices.thermometer(self.get_config_addr('temperature')))
self.devs.append(devices.hygrometer(self.get_config_addr('humidity')))
self.devs.append(devices.barometer(self.get_config_addr('pressure')))
self.devs.append(devices.windgauge(self.get_config_addr('wind')))
# gw
gw = devices.gateway(cfg['addr'])
gw = devices.gateway(self.get_config_addr('addr'))
gw.attributes['embedded'] = [dev.address for dev in self.devs]
for dev in (self.devs + [gw,]):
......@@ -45,7 +61,16 @@ class GW:
self.eng.add_devices(self.devs + [gw,])
# OWM stuff
self.eng.add_timer(self.update,RATE)
self.owm = pyowm.OWM(cfg['api_key'])
# API Key
api_key = self.cfg['config'].get('api_key',None)
if not api_key:
self.cfg['config']['api_key'] = api_key = API_KEY
# Place
self.place = self.cfg['config'].get('place',None)
if not self.place:
self.cfg['config']['place'] = self.place = 'Brest,FR'
# We are ready
self.owm = pyowm.OWM(api_key)
def update(self):
try:
......@@ -54,8 +79,7 @@ class GW:
logger.warn(e)
def _update(self):
place = self.cfg['config']['place']
weather = self.owm.weather_at_place(place).get_weather()
weather = self.owm.weather_at_place(self.place).get_weather()
self.devs[0].attributes['temperature'] = round(weather.get_temperature(unit='celsius').get('temp',None),1)
self.devs[1].attributes['humidity'] = weather.get_humidity()
self.devs[2].attributes['pressure'] = weather.get_pressure().get('press',None)
......@@ -64,6 +88,14 @@ class GW:
self.devs[3].attributes['windStrength'] = wind
self.devs[3].attributes['windAngle'] = weather.get_wind().get('deg',None)
def _exit(self):
cfg = tools.load_cfg(PACKAGE_NAME)
if cfg != self.cfg:
logger.info('Saving configuration file')
self.cfg.write()
def init(engine):
gw = GW(engine)
return gw
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment