diff --git a/src/combined.py b/src/combined.py index adbd9c8..10a3719 100644 --- a/src/combined.py +++ b/src/combined.py @@ -15,13 +15,13 @@ OpenThings.init(Devices.CRYPT_PID) PURPLE_ID = 0x68B # captured from a real device using Monitor.py -m = OpenThings.alterMessage( +m = OpenThings.alterMessage( ####HERE use the new Message() abstraction Devices.create_message(Devices.SWITCH), header_sensorid=PURPLE_ID, recs_0_value=1) purple_on = OpenThings.encode(m) -m = OpenThings.alterMessage( +m = OpenThings.alterMessage( ####HERE use the new Message() abstraction Devices.create_message(Devices.SWITCH), header_sensorid=PURPLE_ID, recs_0_value=0) diff --git a/src/energenie/Devices.py b/src/energenie/Devices.py index 4641f04..939570c 100644 --- a/src/energenie/Devices.py +++ b/src/energenie/Devices.py @@ -220,7 +220,7 @@ def send_join_ack(radio, mfrid, productid, sensorid): # send back a JOIN ACK, so that join light stops flashing - response = OpenThings.alterMessage(create_message(JOIN_ACK), + response = OpenThings.alterMessage(create_message(JOIN_ACK), ####HERE use the new Message() header_mfrid=mfrid, header_productid=productid, header_sensorid=sensorid) @@ -450,7 +450,6 @@ self.capabilities.switch = True def incoming_message(self, payload): - ####HERE#### for rec in payload["recs"]: paramid = rec["paramid"] #TODO: consider making this table driven and allowing our base class to fill our readings in for us @@ -483,7 +482,7 @@ def turn_on(self): #TODO: header construction should be in MiHomeDevice as it is shared - payload = OpenThings.alterMessage( + payload = OpenThings.alterMessage( ####HERE use the new Message() create_message(SWITCH), header_productid = self.product_id, header_sensorid = self.device_id, @@ -492,7 +491,7 @@ def turn_off(self): #TODO: header construction should be in MiHomeDevice as it is shared - payload = OpenThings.alterMessage( + payload = OpenThings.alterMessage( ####HERE use the new Message() create_message(SWITCH), header_productid = self.product_id, header_sensorid = self.device_id, diff --git a/src/energenie/OpenThings.py b/src/energenie/OpenThings.py index a1cb7d8..9decbdd 100644 --- a/src/energenie/OpenThings.py +++ b/src/energenie/OpenThings.py @@ -483,7 +483,7 @@ bits = Value.typebits(typeid) #trace("need bits:" + str(bits)) # NORMALISE BITS TO BYTES - ####HERE#### round up to nearest number of 8 bits + #round up to nearest number of 8 bits # if already 8, leave 1,2,3,4,5,6,7,8 = 8 0,1,2,3,4,5,6,7 (((b-1)/8)+1)*8 # 9,10,11,12,13,14,15,16=16 bits = (((bits-1)/8)+1)*8 # snap to nearest byte boundary @@ -615,32 +615,6 @@ # ] # } -##TODO: Considering changing all messages into a Class with an inner pydict -#It will make cloning, altering, reading, printing much easier - -## request = OpenThings.alterMessage( -## Devices.create_message(Devices.SWITCH), -## header_sensorid=sensorid, -## recs_0_value=switch_state) - -## request = OpenThings.alterMessage( -## Devices.create_message(Devices.SWITCH), -## header_sensorid=sensorid, -## recs_SWITCH_STATE_value=switch_state) - -##possible interface variants: -## -## SWITCH = Message({...}) -## msg = SWITCH.copyof() -## -## msg = SWITCH() -## msg["header"]["sensorid"] = 0x123 -## -## msg = SWITCH(sensorid=0x123, AIR_PRESSURE_value=123) <-- the new alterMessage -## msg.set(sensorid=0x123, AIR_PRESSURE_value=123) -## -## msg.asdict() -> # pydict (for the encoder to use) -## import copy @@ -901,50 +875,50 @@ print("%s %s %s %s = %s" % (write, paramid, paramname, paramunit, str(value))) -@deprecated -def showMessage(msg, timestamp=None): - """Show the message in a friendly format""" - - # HEADER - header = msg["header"] - mfrid = header["mfrid"] - productid = header["productid"] - sensorid = header["sensorid"] - if timestamp != None: - print("receive-time:%s" % time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp))) - print("mfrid:%s prodid:%s sensorid:%s" % (hex(mfrid), hex(productid), hex(sensorid))) - - # RECORDS - for rec in msg["recs"]: - wr = rec["wr"] - if wr == True: - write = "write" - else: - write = "read " - - try: - paramname = rec["paramname"] # This only come out from decoded messages - except: - paramname = "" - - try: - paramid = rec["paramid"] #This is only present on a input message (e.g SWITCH) - paramname = paramid_to_paramname(paramid) - paramid = str(hex(paramid)) - except: - paramid = "" - - try: - paramunit = rec["paramunit"] # This only come out from decoded messages - except: - paramunit = "" - - if "value" in rec: - value = rec["value"] - else: - value = None - - print("%s %s %s %s = %s" % (write, paramid, paramname, paramunit, str(value))) +#@deprecated +#def showMessage(msg, timestamp=None): +# """Show the message in a friendly format""" +# +# # HEADER +# header = msg["header"] +# mfrid = header["mfrid"] +# productid = header["productid"] +# sensorid = header["sensorid"] +# if timestamp != None: +# print("receive-time:%s" % time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp))) +# print("mfrid:%s prodid:%s sensorid:%s" % (hex(mfrid), hex(productid), hex(sensorid))) +# +# # RECORDS +# for rec in msg["recs"]: +# wr = rec["wr"] +# if wr == True: +# write = "write" +# else: +# write = "read " +# +# try: +# paramname = rec["paramname"] # This only come out from decoded messages +# except: +# paramname = "" +## +# try: +# paramid = rec["paramid"] #This is only present on a input message (e.g SWITCH) +# paramname = paramid_to_paramname(paramid) +# paramid = str(hex(paramid)) +## except: +# paramid = "" +# +# try: +# paramunit = rec["paramunit"] # This only come out from decoded messages +# except: +# paramunit = "" +# +# if "value" in rec: +# value = rec["value"] +# else: +# value = None +# +# print("%s %s %s %s = %s" % (write, paramid, paramname, paramunit, str(value))) # Example paths into message @@ -952,43 +926,43 @@ # recs_0_value msg["recs"][0]["value"] # recs_WATER_DETECTOR_value msg["recs"].find_param("WATER_DETECTOR")["value"] -@deprecated -def alterMessage(message, **kwargs): - """Change parameters in-place in a message template""" - - for arg in kwargs: - path = arg.split("_") - value = kwargs[arg] - m = message - - for pkey in path[:-1]: - try: - # If it is convertable to an int, it's an array index - pkey = int(pkey) - except: - # It must be a field name - pass - m = m[pkey] - ##trace("old value:%s" % m[path[-1]]) - m[path[-1]] = value - - ##trace("modified:" + str(message)) - - return message +#@deprecated +#def alterMessage(message, **kwargs): +# """Change parameters in-place in a message template""" +# +# for arg in kwargs: +# path = arg.split("_") +# value = kwargs[arg] +# m = message +# +# for pkey in path[:-1]: +# try: +# # If it is convertable to an int, it's an array index +# pkey = int(pkey) +# except: +# # It must be a field name +# pass +# m = m[pkey] +# ##trace("old value:%s" % m[path[-1]]) +# m[path[-1]] = value +# +# ##trace("modified:" + str(message)) +# +# return message -@deprecated -def getFromMessage(message, keypath): - """Get a field from a message, given an underscored keypath to the item""" - path = keypath.split("_") - - for pkey in path[:-1]: - try: - pkey = int(pkey) - except: - pass - message = message[pkey] - return message[path[-1]] +#@deprecated +#def getFromMessage(message, keypath): +# """Get a field from a message, given an underscored keypath to the item""" +# path = keypath.split("_") +# +# for pkey in path[:-1]: +# try: +# pkey = int(pkey) +# except: +# pass +# message = message[pkey] +# return message[path[-1]] # END diff --git a/src/energenie/Registry_test.py b/src/energenie/Registry_test.py index 4384e86..5ae00f1 100644 --- a/src/energenie/Registry_test.py +++ b/src/energenie/Registry_test.py @@ -60,7 +60,7 @@ report = Devices.create_message(Devices.MIHO005_REPORT) - report = OpenThings.alterMessage( + report = OpenThings.alterMessage( ####HERE report, recs_0_value=240, # voltage recs_1_value=2, # current diff --git a/src/monitor.py b/src/monitor.py index ef8bd1c..edb8351 100644 --- a/src/monitor.py +++ b/src/monitor.py @@ -40,7 +40,7 @@ warning("Can't decode payload:" + str(e)) continue - OpenThings.showMessage(decoded, timestamp=now) + OpenThings.showMessage(decoded, timestamp=now) ####HERE msg.dump() # Any device that reports will be added to the non-persistent directory Registry.update(decoded) ##trace(decoded) @@ -53,9 +53,9 @@ else: # assume only 1 rec in a join, for now if decoded["recs"][0]["paramid"] == OpenThings.PARAM_JOIN: - mfrid = OpenThings.getFromMessage(decoded, "header_mfrid") - productid = OpenThings.getFromMessage(decoded, "header_productid") - sensorid = OpenThings.getFromMessage(decoded, "header_sensorid") + mfrid = OpenThings.getFromMessage(decoded, "header_mfrid") ####HERE use the new Message() + productid = OpenThings.getFromMessage(decoded, "header_productid") ####HERE use the new Message() + sensorid = OpenThings.getFromMessage(decoded, "header_sensorid") ####HERE use the new Message() Devices.send_join_ack(radio, mfrid, productid, sensorid) diff --git a/src/switch.py b/src/switch.py index bad8944..fa9e7e5 100644 --- a/src/switch.py +++ b/src/switch.py @@ -45,7 +45,7 @@ warning("Can't decode payload:" + str(e)) return - OpenThings.showMessage(decoded, timestamp=now) + OpenThings.showMessage(decoded, timestamp=now) ##HERE msg.dump() # Any device that reports will be added to the non-persistent directory Registry.update(decoded) ##trace(decoded) @@ -57,9 +57,9 @@ else: # assume only 1 rec in a join, for now if decoded["recs"][0]["paramid"] == OpenThings.PARAM_JOIN: - mfrid = OpenThings.getFromMessage(decoded, "header_mfrid") - productid = OpenThings.getFromMessage(decoded, "header_productid") - sensorid = OpenThings.getFromMessage(decoded, "header_sensorid") + mfrid = OpenThings.getFromMessage(decoded, "header_mfrid") ####HERE use the new Message() + productid = OpenThings.getFromMessage(decoded, "header_productid") ####HERE use the new Message() + sensorid = OpenThings.getFromMessage(decoded, "header_sensorid") ####HERE use the new Message() Devices.send_join_ack(radio, mfrid, productid, sensorid) @@ -79,7 +79,7 @@ productid = header["productid"] if Devices.hasSwitch(mfrid, productid): - request = OpenThings.alterMessage(Devices.create_message(Devices.SWITCH), + request = OpenThings.alterMessage(Devices.create_message(Devices.SWITCH), ####HERE use the new Message() header_sensorid=sensorid, recs_0_value=switch_state) p = OpenThings.encode(request) @@ -99,7 +99,7 @@ # Seed the registry with a known device, to simplify tx-only testing SENSOR_ID = 0x68B # captured from a real device - device_header = OpenThings.alterMessage(Devices.create_message(Devices.REGISTERED_SENSOR), + device_header = OpenThings.alterMessage(Devices.create_message(Devices.REGISTERED_SENSOR), ####HERE use the new Message() header_mfrid = Devices.MFRID, header_productid = Devices.PRODUCTID_MIHO005, # adaptor plus header_sensorid = SENSOR_ID)