diff --git a/src/energenie/Devices.py b/src/energenie/Devices.py index 6836eb4..9999641 100644 --- a/src/energenie/Devices.py +++ b/src/energenie/Devices.py @@ -369,6 +369,7 @@ switch = None voltage = None frequency = None + current = None apparent_power = None reactive_power = None real_power = None @@ -382,13 +383,29 @@ ####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") + #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)) + elif paramid == OpenThings.PARAM_VOLTAGE: + self.readings.voltage = value + elif paramid == OpenThings.PARAM_CURRENT: + self.readings.current = value + elif paramid == OpenThings.PARAM_REAL_POWER: + self.readings.real_power = value + elif paramid == OpenThings.PARAM_APPARENT_POWER: + self.readings.apparent_power = value + elif paramid == OpenThings.PARAM_REACTIVE_POWER: + self.readings.reactive_power = value + elif paramid == OpenThings.PARAM_FREQUENCY: + self.readings.frequency = value + else: + try: + param_name = OpenThings.param_info[paramid]['n'] # name + except: + param_name = "UNKNOWN_%s" % str(hex(paramid)) + print("unwanted paramid: %s" % param_name) def get_readings(self): # -> readings:pydict """A way to get all readings as a single consistent set""" diff --git a/src/energenie/Registry.py b/src/energenie/Registry.py index e619568..7a6f2eb 100644 --- a/src/energenie/Registry.py +++ b/src/energenie/Registry.py @@ -323,29 +323,102 @@ tv.turn_on() - #TODO: synthesise receiving a report message + #synthesise receiving a report message #push it down the receive pipeline #radio.receive() # ->OpenThingsAirInterface.incoming # ->OpenThings.decrypt # ->OpenThings.decode # ->OpenThingsAirInterface->route - # ->ENER005.incoming_message() + # ->MIHO005.incoming_message() # #it should update voltage, power etc ## poor mans incoming synthetic message - tv.incoming_message({"recs":[{"paramid": OpenThings.PARAM_SWITCH_STATE, "value":1}]}) + + MIHO005_REPORT = { + "header": { + "mfrid": Devices.MFRID_ENERGENIE, + "productid": Devices.PRODUCTID_MIHO005, + "encryptPIP": Devices.CRYPT_PIP, + "sensorid": 0 # FILL IN + }, + "recs": [ + { + "wr": False, + "paramid": OpenThings.PARAM_SWITCH_STATE, + "typeid": OpenThings.Value.UINT, + "length": 1, + "value": 0 # FILL IN + }, + { + "wr": False, + "paramid": OpenThings.PARAM_VOLTAGE, + "typeid": OpenThings.Value.UINT, + "length": 1, + "value": 0 # FILL IN + }, + { + "wr": False, + "paramid": OpenThings.PARAM_CURRENT, + "typeid": OpenThings.Value.UINT, + "length": 1, + "value": 0 # FILL IN + }, + { + "wr": False, + "paramid": OpenThings.PARAM_FREQUENCY, + "typeid": OpenThings.Value.UINT, + "length": 1, + "value": 0 # FILL IN + }, + { + "wr": False, + "paramid": OpenThings.PARAM_REAL_POWER, + "typeid": OpenThings.Value.UINT, + "length": 1, + "value": 0 # FILL IN + }, + { + "wr": False, + "paramid": OpenThings.PARAM_REACTIVE_POWER, + "typeid": OpenThings.Value.UINT, + "length": 1, + "value": 0 # FILL IN + }, + { + "wr": False, + "paramid": OpenThings.PARAM_APPARENT_POWER, + "typeid": OpenThings.Value.UINT, + "length": 1, + "value": 0 # FILL IN + }, + + ] + } + + report = Devices.create_message(MIHO005_REPORT) + report = OpenThings.alterMessage( + report, + recs_0_value=240, # voltage + recs_1_value=2, # current + recs_2_value=50, # frequency + recs_3_value=100, # real power + recs_4_value=0, # reactive power + recs_5_value=100, # apparent power + ) + tv.incoming_message(report) + # get readings from device - ##voltage = tv.get_voltage() - ##frequency = tv.get_frequency() - ##power = tv.get_real_power() + 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("voltage %f" % voltage) + print("frequency %f" % frequency) + print("real power %f" % power) print("switch %s" % switch)