Skip to content
Snippets Groups Projects
Commit 83549a73 authored by jkerdreu's avatar jkerdreu
Browse files

Factorisation in progress


git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@2588 b32b6428-25c9-4566-ad07-03861ab6144f
parent c9d44192
No related branches found
No related tags found
No related merge requests found
......@@ -58,7 +58,10 @@ class Accessory(object):
s_name = ServicesTypes.get_short(s_type)
klass = find_service_class(s_name)
logger.debug(f"Service: {s_iid} {s_name}")
serv = klass(k,self)
try:
serv = klass(k,self)
except Exception:
import pdb;pdb.set_trace()
if serv.__class__ == Service:
logger.warn(f"Unknow service: {s_name}")
if isinstance(serv,Information):
......@@ -79,6 +82,12 @@ class Accessory(object):
return dev
def get_short_type(characteristic):
tmp = characteristic.get("type",None)
if tmp:
return CharacteristicsTypes.get_short(tmp)
return None
class Service(object):
def __init__(self,service,accessory):
self.service = service
......@@ -89,20 +98,17 @@ class Service(object):
self.setup()
def get_data(self,characteristic):
c_iid = characteristic.get('iid',None)
c_type = characteristic.get('type',None)
c_type = CharacteristicsTypes.get_short(c_type)
desc = characteristic.get('description',None)
value = characteristic.get('value',None)
unit = characteristic.get('unit',None)
c_iid = characteristic.get('iid',None)
c_type = get_short_type(characteristic)
desc = characteristic.get('description',None)
value = characteristic.get('value',None)
unit = characteristic.get('unit',None)
return (c_iid,c_type,desc,value,unit)
def search(self,c_type):
#import pdb;pdb.set_trace()
for obj in self.characteristics:
cur_c_type = obj.get("type",None)
cur_c_type = CharacteristicsTypes.get_short(cur_c_type)
cur_c_type = get_short_type(obj)
if c_type == cur_c_type:
return self.get_data(obj)
return (None,None,None,None,None)
......@@ -122,9 +128,9 @@ class Service(object):
for obj in self.characteristics:
(c_iid,c_type,desc,value,unit) = self.get_data(obj)
if unit:
print(f" =>{c_iid} {c_type} {desc} : {value} {unit}")
print(f" =>{c_iid} [{c_type}] {desc} : {value} {unit}")
else:
print(f" =>{c_iid} {c_type} {desc} : {value}")
print(f" =>{c_iid} [{c_type}] {desc} : {value}")
def setup(self):
self.dump()
......@@ -140,6 +146,12 @@ class Service(object):
print(f" {self} : {data}")
def map_device(self,c_type,new_dev_func,attr_name,value_func):
(c_iid,c_type,desc,value,unit) = self.monitor(c_type)
dev = self.add_device(new_dev_func())
if value!=None:
dev.attributes[attr_name] = value_func(value)
return dev
# ===========================================================================
# Below, you will find the data mapping. We can reduce this code easily
......@@ -157,10 +169,7 @@ class Information(Service):
class Light(Service):
def setup(self):
(c_iid,c_type,desc,value,unit) = self.monitor('light-level.current')
self.dev = self.add_device(devices.luxmeter())
if value!=None:
self.dev.attributes['illuminance'] = int(value)
self.dev = self.map_device('light-level.current',devices.luxmeter,'illuminance',int_func)
def handler(self,src,data):
self.dev.attributes['illuminance'] = int(data['value'])
......@@ -168,10 +177,7 @@ class Light(Service):
class Lamp(Service):
def setup(self):
(c_iid,c_type,desc,value,unit) = self.monitor('On')
self.dev = self.add_device(devices.lamp())
if value!=None:
self.dev.attributes['light'] = bool(value)
self.dev = self.map_device('on',devices.lamp,'light',bool_func)
def handler(self,src,data):
self.dev.attributes['light'] = bool(data['value'])
......@@ -179,10 +185,7 @@ class Lamp(Service):
class Motion(Service):
def setup(self):
(c_iid,c_type,desc,value,unit) = self.monitor('motion-detected')
self.dev = self.add_device(devices.motion())
if value!=None:
self.dev.attributes['presence'] = bool(value)
self.dev = self.map_device('motion-detected',devices.motion,'presence',bool_func)
def handler(self,src,data):
self.dev.attributes['presence'] = bool(data['value'])
......@@ -190,31 +193,21 @@ class Motion(Service):
class Contact(Service):
def setup(self):
(c_iid,c_type,desc,value,unit) = self.monitor('contact-state')
self.dev = self.add_device(devices.contact())
if value!=None:
self.dev.attributes['detected'] = bool(value)
self.dev = self.map_device('contact-state',devices.contact,'detected',bool_func)
def handler(self,src,data):
self.dev.attributes['detected'] = bool(data['value'])
class Humidity(Service):
def setup(self):
#import pdb;pdb.set_trace()
(c_iid,c_type,desc,value,unit) = self.monitor('relative-humidity.current')
self.dev = self.add_device(devices.hygrometer())
if value!=None:
self.dev.attributes['humidity'] = round(value,2)
self.dev = self.map_device('relative-humidity.current',devices.hygrometer,'humidity',round_2_func)
def handler(self,src,data):
self.dev.attributes['humidity'] = round(data['value'],2)
class Temperature(Service):
def setup(self):
(c_iid,c_type,desc,value,unit) = self.monitor('temperature.current')
self.dev = self.add_device(devices.thermometer())
if value!=None:
self.dev.attributes['temperature'] = round(value,2)
self.dev = self.map_device('temperature.current',devices.thermometer,'temperature',round_2_func)
def handler(self,src,data):
self.dev.attributes['temperature'] = round(data['value'],2)
......@@ -222,10 +215,17 @@ class Temperature(Service):
class Battery(Service):
def setup(self):
(c_iid,c_type,desc,value,unit) = self.monitor('battery-level')
self.dev = self.add_device(devices.battery())
if value!=None:
self.dev.attributes['level'] = int(value)
self.dev = self.map_device('battery-level',devices.battery,'level',int_func)
def handler(self,src,data):
self.dev.attributes['level']=int(data['value'])
def int_func(value):
return int(value)
def round_2_func(value):
return round(value,2)
def bool_func(value):
return bool(value)
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment