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
No related branches found
No related tags found
No related merge requests found
import platform import platform
import time import time
import atexit
import sys
import pyowm import pyowm
from pyowm.exceptions import OWMError from pyowm.exceptions import OWMError
...@@ -10,6 +12,7 @@ PACKAGE_NAME = "xaal.owm" ...@@ -10,6 +12,7 @@ PACKAGE_NAME = "xaal.owm"
logger = tools.get_logger(PACKAGE_NAME,'DEBUG') logger = tools.get_logger(PACKAGE_NAME,'DEBUG')
RATE = 300 # update every 5 min RATE = 300 # update every 5 min
API_KEY = '3a5989bac31472cd41d69e92838bd454'
def setup_dev(dev): def setup_dev(dev):
dev.vendor_id = "IHSEV" dev.vendor_id = "IHSEV"
...@@ -22,21 +25,34 @@ def setup_dev(dev): ...@@ -22,21 +25,34 @@ def setup_dev(dev):
class GW: class GW:
def __init__(self,engine): def __init__(self,engine):
self.eng = 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() self.setup()
def setup(self): def get_config_addr(self,key):
""" create devices, register ..""" """ return a new xaal address and flag an update"""
cfg = self.cfg['config'] 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 # devices
self.devs = [] self.devs = []
self.devs.append(devices.thermometer(cfg['temperature'])) self.devs.append(devices.thermometer(self.get_config_addr('temperature')))
self.devs.append(devices.hygrometer(cfg['humidity'])) self.devs.append(devices.hygrometer(self.get_config_addr('humidity')))
self.devs.append(devices.barometer(cfg['pressure'])) self.devs.append(devices.barometer(self.get_config_addr('pressure')))
self.devs.append(devices.windgauge(cfg['wind'])) self.devs.append(devices.windgauge(self.get_config_addr('wind')))
# gw # gw
gw = devices.gateway(cfg['addr']) gw = devices.gateway(self.get_config_addr('addr'))
gw.attributes['embedded'] = [dev.address for dev in self.devs] gw.attributes['embedded'] = [dev.address for dev in self.devs]
for dev in (self.devs + [gw,]): for dev in (self.devs + [gw,]):
...@@ -45,7 +61,16 @@ class GW: ...@@ -45,7 +61,16 @@ class GW:
self.eng.add_devices(self.devs + [gw,]) self.eng.add_devices(self.devs + [gw,])
# OWM stuff # OWM stuff
self.eng.add_timer(self.update,RATE) 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): def update(self):
try: try:
...@@ -54,8 +79,7 @@ class GW: ...@@ -54,8 +79,7 @@ class GW:
logger.warn(e) logger.warn(e)
def _update(self): def _update(self):
place = self.cfg['config']['place'] weather = self.owm.weather_at_place(self.place).get_weather()
weather = self.owm.weather_at_place(place).get_weather()
self.devs[0].attributes['temperature'] = round(weather.get_temperature(unit='celsius').get('temp',None),1) 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[1].attributes['humidity'] = weather.get_humidity()
self.devs[2].attributes['pressure'] = weather.get_pressure().get('press',None) self.devs[2].attributes['pressure'] = weather.get_pressure().get('press',None)
...@@ -64,6 +88,14 @@ class GW: ...@@ -64,6 +88,14 @@ class GW:
self.devs[3].attributes['windStrength'] = wind self.devs[3].attributes['windStrength'] = wind
self.devs[3].attributes['windAngle'] = weather.get_wind().get('deg',None) 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): def init(engine):
gw = GW(engine) gw = GW(engine)
return gw return gw
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment