2222#
2323
2424#
25- # TODO: Support for sensors
25+ # TODO: Support for motion and contact sensors
2626#
2727
2828import binascii
@@ -228,14 +228,13 @@ def __init__(self, conn, addr, type_id, type_id_assumed):
228228 self .__deleted = False
229229 self .__type_id = type_id
230230 self .__idx = 0
231+ self .__raw_values = ()
231232
232233 device_info = conn .device_types ()[type_id_assumed ]
233234 self .__devicesubtype = device_info ['subtype' ]
234235 self .__devicetype = device_info ['type' ]
235- if type_id == type_id_assumed :
236- self .__devicename = device_info ['name' ]
237- else :
238- self .__devicename = UNKNOWN_DEVICENAME
236+ self .__devicename = (device_info ['name' ] if type_id == type_id_assumed
237+ else UNKNOWN_DEVICENAME )
239238
240239 if self .__devicesubtype in (DeviceSubType .CONTACT_SENSOR ,
241240 DeviceSubType .MOTION_SENSOR ,
@@ -366,6 +365,13 @@ def rgb(self):
366365 """
367366 return self .__red , self .__green , self .__blue
368367
368+ def raw_values (self ):
369+ """
370+ :return: tuple containing raw values as obtained from gateway:
371+ (onoff, lum, temp, red, green, blue, alpha)
372+ """
373+ return self .__raw_values
374+
369375 def type_id (self ):
370376 """
371377 :return: original device type id as returned by gateway
@@ -420,7 +426,7 @@ def mark_deleted(self):
420426 self .__deleted = True
421427
422428 def update_status (self , reachable , last_seen , onoff , lum , temp , red , green ,
423- blue , name , groups , version , idx ):
429+ blue , alpha , name , groups , version , idx ):
424430 """ update internal representation
425431 does not send out a command to the light source!
426432
@@ -432,6 +438,7 @@ def update_status(self, reachable, last_seen, onoff, lum, temp, red, green,
432438 :param red: amount of red
433439 :param green: amount of green
434440 :param blue: amount of blue
441+ :param alpha: alpha value (not used)
435442 :param name: name of the light
436443 :param groups: list of associated group indices
437444 :param version: firmware version
@@ -444,6 +451,7 @@ def update_status(self, reachable, last_seen, onoff, lum, temp, red, green,
444451 self .__groups = groups
445452 self .__version = version
446453 self .__idx = idx
454+ self .__raw_values = (onoff , lum , temp , red , green , blue , alpha )
447455
448456 if 'on' in self .__supported_features :
449457 self .__onoff = bool (onoff )
@@ -1528,7 +1536,7 @@ def update_all_light_status(self, throttling_interval=None):
15281536 return {}
15291537
15301538 (type_id , version , reachable , groups , onoff , lum , temp , red ,
1531- green , blue ) = struct .unpack ('<B4sBH2BH3Bx ' , stat )
1539+ green , blue , alpha ) = struct .unpack ('<B4sBH2BH4B ' , stat )
15321540 name = name .decode ('utf-8' ).replace ('\0 ' , '' )
15331541 groups = [16 - j for j , val
15341542 in enumerate (format (groups , '016b' )) if val == '1' ]
@@ -1564,13 +1572,15 @@ def update_all_light_status(self, throttling_interval=None):
15641572 self .__logger .debug ('red: %d' , red )
15651573 self .__logger .debug ('green: %d' , green )
15661574 self .__logger .debug ('blue: %d' , blue )
1575+ self .__logger .debug ('alpha: %d' , alpha )
15671576 self .__logger .debug ('type id: %d' , type_id )
15681577 self .__logger .debug ('groups: %s' , groups )
15691578 self .__logger .debug ('version: %s' , version )
15701579 self .__logger .debug ('idx: %s' , i )
15711580
15721581 light .update_status (reachable , last_seen , onoff , lum , temp ,
1573- red , green , blue , name , groups , version , i )
1582+ red , green , blue , alpha , name , groups ,
1583+ version , i )
15741584 new_lights [addr ] = light
15751585
15761586 for addr in self .__lights :
0 commit comments