Skip to content
Snippets Groups Projects
Commit 9a12bc83 authored by jkerdreu's avatar jkerdreu
Browse files

Initial binding test


git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/trunk@1975 b32b6428-25c9-4566-ad07-03861ab6144f
parent e154c69d
No related branches found
No related tags found
No related merge requests found
......@@ -5,6 +5,16 @@ import dpts
logger = logging.getLogger(__name__)
def bool_(attribute,dpt,data):
val = dpts.decode[dpt](data)
attribute.value = bool(val)
def round_(attribute,dpt,data):
val = dpts.decode[dpt](data)
attribute.value = round(val)
class KNXDev:
def __init__(self,gw,addr,w_addr,r_addr,dpt):
self.gateway= gw
......@@ -12,24 +22,36 @@ class KNXDev:
self.w_addr = w_addr
self.r_addr = r_addr or w_addr
self.dpt = dpt
self.attribute_binding = {}
self.setup(addr)
def setup(self,addr):
logger.warn("Please define setup() in this device %s" % addr)
def write_bind(self,data):
def bind_write(self,data):
func = partial(self.gateway.knx.write,self.w_addr,data,self.dpt)
return func
def bind_attribute(self,group_addr,attribute,func=None):
ptr = partial(func,attribute,self.dpt,data=None)
self.attribute_binding.update({group_addr: ptr})
def parse(self,cemi):
if cemi.group_addr in self.attribute_binding:
func = self.attribute_binding[cemi.group_addr]
func(data=cemi.data)
class PowerRelay(KNXDev):
def setup(self,addr):
dev = devices.powerrelay(self.addr)
dev.add_method('on', self.write_bind(0x1))
dev.add_method('off', self.write_bind(0x0))
dev.add_method('on', self.bind_write(0x1))
dev.add_method('off', self.bind_write(0x0))
self.bind_attribute(self.r_addr,dev.get_attribute("power"),bool_)
self.device = dev
def parse(self,cemi):
data = dpts.decode[self.dpt](cemi.data)
if data!=None:
self.device.attributes['power'] = data
class PowerMeter(KNXDev):
def setup(self,addr):
dev = devices.powermeter(self.addr)
self.bind_attribute(self.r_addr,dev.get_attribute('power'),round_)
self.device = dev
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment