Skip to content
Snippets Groups Projects
Commit 2f5ec620 authored by jkerdreu's avatar jkerdreu
Browse files

Grrrr Python has Hashmap you know ..

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/trunk@2020 b32b6428-25c9-4566-ad07-03861ab6144f
parent 9ad49f75
Branches
No related tags found
No related merge requests found
from xaal.lib import Engine,tools,config
from xaal.lib import Engine,tools,Device
from . import netatmo
import platform
RATE = 300 # update every 5 min
PACKAGE_NAME = "xaal.netatmo"
......@@ -23,17 +23,21 @@ class GW:
self.load_modules_config()
# GW
base_addr = self.cfg['gateway']['base_addr']
na=netatmo.NAModule(base_addr,group=None)
gw=na.build_dev("gateway.basic",base_addr)
gw = Device("gateway.basic")
gw.address = self.cfg['config']['addr']
gw.vendor_id = "NETATMO"
gw.product_id = "Netatmo Weather Station"
gw.info = "%s@%s" % (PACKAGE_NAME,platform.node())
gw.url = "https://dev.netatmo.com/"
gw.version = 0.2
self.eng.add_device(gw)
# embedded
emb = gw.new_attribute('embedded',[]).value
for mod in self.modules :
for dev in mod.sensors:
self.eng.add_device(dev)
emb.append(dev.address)
for gw in mod.sensors:
self.eng.add_device(gw)
emb.append(gw.address)
# run the timer
self.eng.add_timer(self.readweatherstation,RATE)
......@@ -52,14 +56,13 @@ class GW:
elif value["type"]=="NAModule4": #additional indoor
sensors_type=["thermometer","hygrometer","co2meter","radiometer","batterymeter"]
elif value["type"]=="NAModule2": # additon wind gauge
sensors_type=["windmeter","radiometer","batterymeter"]
sensors_type=["windgauge","radiometer","batterymeter"]
elif value["type"]=="NAModule3": # addition rain gauge
sensors_type=["rainmeter","radiometer","batterymeter"]
else:
print("invalid modules!!!")
logger.warn("invalid modules!!!")
module=netatmo.NAModule(addr,group)
module.macId=_id
module=netatmo.NAModule(addr,group,_id,value['type'])
module.new_sensors(sensors_type)
self.modules.append(module)
......
......@@ -49,21 +49,20 @@ class API:
class NAModule(object): # NWS: netatmo weather station
def __init__(self,base_addr,group,macId=None):
def __init__(self,base_addr,group,macId=None,na_type=None):
self.sensors=[]
self.base_addr=base_addr
self.group=group
self.macId=macId
self.na_type = na_type
def build_dev(self,dtype,addr):
dev = Device(dtype)
dev.devtype = dtype
dev.address = addr
dev.vendor_id = "NETATMO"
dev.product_id = "NetatmoWeatherStation"
dev.info = "xaal.netatmo@%s" % platform.node()
dev.url = "https://dev.netatmo.com/"
dev.version = 0.1
dev.product_id = "Netatmo:%s" % self.na_type
dev.info = "mac:%s" % self.macId
return dev
def new_sensor(self,sensor_type,sensor_attr,senor_addr,sensor_group):
......@@ -85,7 +84,7 @@ class NAModule(object): # NWS: netatmo weather station
def new_sensors(self,sensors_type_list):
for i in range (len(sensors_type_list)) :
sensor_type=sensors_type_list[i]
sensor_attr=self.__get_sensor_attr(sensor_type)
sensor_attr=self.get_sensor_attr(sensor_type)
sensor_addr= '%s%02x' % (self.base_addr[:-2],i+1)
sensor=self.new_sensor(sensor_type,sensor_attr,sensor_addr,self.group)
self.sensors.append(sensor)
......@@ -95,7 +94,7 @@ class NAModule(object): # NWS: netatmo weather station
for sensor_attr,attr_value in attr_value_dic.items():
self.update_sensor(sensor,sensor_attr,attr_value)
def __get_sensor_attr(self,sensor_type):
def get_sensor_attr(self,sensor_type):
if sensor_type=="thermometer" :
return ["temperature"]
elif sensor_type=="hygrometer" :
......@@ -106,7 +105,7 @@ class NAModule(object): # NWS: netatmo weather station
return ["co2"]
elif sensor_type=="soundmeter" :
return ["sound"]
elif sensor_type=="windmeter" :
elif sensor_type=="windgauge" :
return ["windstrength","windangle","guststrength","gustangle"]
elif sensor_type=="rainmeter" :
return ["rain"]
......@@ -126,55 +125,43 @@ class ConfigParser: # netatmo weather station config
def update(self):
if 'config' not in self.cfg:
logger.error("invalid config file !!!")
if ('gateway' not in self.cfg)or('base_addr' not in self.cfg['gateway'])or(not tools.is_valid_addr(self.cfg['gateway']["base_addr"])):
self.cfg['gateway']={}
self.cfg['gateway']['base_addr']=tools.get_random_uuid()[:-2]+'00'
logger.error("invalid config file !!!")
if 'addr' not in self.cfg['config']:
self.cfg['config']['addr'] = tools.get_random_uuid()
if 'devices' not in self.cfg:
self.cfg['devices']={}
self.__update_devices()
self.update_devices()
self.cfg.write()
def __update_devices(self):
modules=self.__get_modules()
for i in range(len(modules)):
if modules[i][0] not in self.cfg['devices'] :
self.cfg['devices'][modules[i][0]]={}
self.cfg['devices'][modules[i][0]]['group_addr'] =tools.get_random_uuid()
self.cfg['devices'][modules[i][0]]['base_addr'] =tools.get_random_uuid()[:-2] + '00'
self.cfg['devices'][modules[i][0]]['type'] =modules[i][1]
self.cfg['devices'][modules[i][0]].inline_comments['type']=self.__get_comments(modules[i][1])
def update_devices(self):
modules= self.get_modules()
for k in modules.keys():
if k not in self.cfg['devices'] :
self.cfg['devices'][k]={}
self.cfg['devices'][k]['group_addr'] =tools.get_random_uuid()
self.cfg['devices'][k]['base_addr'] =tools.get_random_uuid()[:-2] + '00'
self.cfg['devices'][k]['type'] =modules[k]
self.cfg['devices'][k].inline_comments['type']=self.get_comments(modules[k])
# check if all devices valid
list_macId=[]
for m in modules :
list_macId.append(m[0])
for k in self.cfg['devices'] :
if k not in list_macId :
if k not in modules.keys() :
self.cfg['devices'][k]['type']='NoneType'
self.cfg['devices'][k].inline_comments['type']=self.__get_comments('NoneType')
self.cfg['devices'][k].inline_comments['type']=self.get_comments('NoneType')
self.cfg['devices'].inline_comments[k]='This device is removed !!!'
def __get_modules(self): # get list of all modules,[MAC addr,'NetatmoType']
data=API(self.cfg).get_data()
main_module=data['devices'][0]
m_type= main_module['type']
m_macId= main_module['_id']
modules=[[m_macId,m_type]]
m=main_module['modules']
for k in range(0,len(m)):
m_type=m[k]['type']
m_macId=m[k]['_id']
modules=modules+[[m_macId,m_type]]
return modules
def __get_comments(self,netatmo_type):
def get_modules(self):
data = data=API(self.cfg).get_data()
# NAMain is the first devices
main_module = data['devices'][0]
result = {main_module['_id'] : main_module['type']}
# other are embedded in modules
modules = main_module['modules']
for k in range(0,len(modules)):
result.update({modules[k]['_id']:modules[k]['type']})
return result
def get_comments(self,netatmo_type):
if netatmo_type=='NAMain':
return 'mainIndoor'
elif netatmo_type=='NAModule1':
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment