diff --git a/src/energenie/Devices.py b/src/energenie/Devices.py index f0c76b5..6836eb4 100644 --- a/src/energenie/Devices.py +++ b/src/energenie/Devices.py @@ -378,6 +378,18 @@ self.capabilities.receive = True self.capabilities.switch = True + def incoming_message(self, payload): + ####HERE#### + for rec in payload["recs"]: + paramid = rec["paramid"] + if paramid in [OpenThings.PARAM_SWITCH_STATE, OpenThings.PARAM_VOLTAGE]: #TODO store in cache in init + # TODO consider making this table driven and allowing our base class to fill our readings in for us + # then just define the mapping table in __init__ (i.e. paramid->Readings field name) + value = rec["value"] + if paramid == OpenThings.PARAM_SWITCH_STATE: + self.readings.switch = ((value == True) or (value != 0)) + print("#### Switch state updated") + def get_readings(self): # -> readings:pydict """A way to get all readings as a single consistent set""" return self.readings @@ -423,22 +435,32 @@ def get_voltage(self): # -> voltage:float """Last stored state of voltage reading, None if unknown""" + if self.readings.voltage == None: + raise RuntimeError("No voltage reading received yet") return self.readings.voltage def get_frequency(self): # -> frequency:float """Last stored state of frequency reading, None if unknown""" + if self.readings.frequency == None: + raise RuntimeError("No frequency reading received yet") return self.readings.frequency def get_apparent_power(self): # ->power:float """Last stored state of apparent power reading, None if unknown""" + if self.readings.apparent_power == None: + raise RuntimeError("No apparent power reading received yet") return self.readings.apparent_power def get_reactive_power(self): # -> power:float """Last stored state of reactive power reading, None if unknown""" + if self.readings.reactive_power == None: + raise RuntimeError("No reactive power reading received yet") return self.readings.reactive_power def get_real_power(self): #-> power:float """Last stored state of real power reading, None if unknown""" + if self.readings.real_power == None: + raise RuntimeError("No real power reading received yet") return self.readings.real_power diff --git a/src/energenie/Registry.py b/src/energenie/Registry.py index 001c6ed..e619568 100644 --- a/src/energenie/Registry.py +++ b/src/energenie/Registry.py @@ -315,13 +315,13 @@ """Test receiving a dummy message on a MiHome adaptor plus""" # seed the registry - registry.add(Devices.ENER002(device_id=(0xC8C8C, 1)), "fan") + registry.add(Devices.MIHO005(device_id=0x68b), "tv") # test the auto create mechanism import sys registry.auto_create(sys.modules[__name__]) - fan.turn_on() + tv.turn_on() #TODO: synthesise receiving a report message #push it down the receive pipeline @@ -333,18 +333,20 @@ # ->ENER005.incoming_message() # #it should update voltage, power etc + ## poor mans incoming synthetic message + tv.incoming_message({"recs":[{"paramid": OpenThings.PARAM_SWITCH_STATE, "value":1}]}) - #TODO: get readings from device - ##voltage = fan.get_voltage() - ##frequency = fan.get_frequency() - ##power = fan.get_real_power() - ##switch = fan.is_on() + # get readings from device + ##voltage = tv.get_voltage() + ##frequency = tv.get_frequency() + ##power = tv.get_real_power() + switch = tv.is_on() ##print("voltage %f" % voltage) ##print("frequency %f" % frequency) ##print("power %f" % power) - ##print("switch %s" % switch) + print("switch %s" % switch) if __name__ == "__main__": @@ -352,9 +354,9 @@ OpenThings.init(Devices.CRYPT_PID) - test_with_registry_tx() + ##test_with_registry_tx() - ##test_with_registry_rx() + test_with_registry_rx() # END