# Registry_Test.py 21/05/2016 D.J.Whale
#
# Test harness for the Registry
#TODO: need a way to separate device creation from device restoration
#and the app needs to know what mode it is in.
#creation is probably just a test feature, as a user would either
#install the device, configure it, or learn it.
import unittest
from Registry import *
class TestRegistry(unittest.TestCase):
def setUp(self):
# seed the registry
registry.add(Devices.MIHO005(device_id=0x68b), "tv")
registry.add(Devices.ENER002(device_id=(0xC8C8C, 1)), "fan")
# test the auto create mechanism
#import sys
#registry.auto_create(sys.modules[__name__])
registry.auto_create(self)
def test_capabilities(self):
print("tv switch:%s" % self.tv.has_switch())
print("tv send:%s" % self.tv.can_send())
print("tv receive:%s" % self.tv.can_receive())
print("fan switch:%s" % self.fan.has_switch())
print("fan send:%s" % self.fan.can_send())
print("fan receive:%s" % self.fan.can_receive())
def text_tx(self):
"""Test the transmit pipeline"""
tv.turn_on()
tv.turn_off()
fan.turn_on()
fan.turn_off()
def test_fsk_rx(self):
"""Test the receive pipeline for FSK MiHome adaptor"""
#synthesise receiving a report message
#push it down the receive pipeline
#radio.receive()
# ->OpenThingsAirInterface.incoming
# ->OpenThings.decrypt
# ->OpenThings.decode
# ->OpenThingsAirInterface->route
# ->MIHO005.incoming_message()
#
#it should update voltage, power etc
## poor mans incoming synthetic message
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
)
self.tv.incoming_message(report)
# get readings from device
voltage = self.tv.get_voltage()
frequency = self.tv.get_frequency()
power = self.tv.get_real_power()
switch = self.tv.is_on()
print("voltage %f" % voltage)
print("frequency %f" % frequency)
print("real power %f" % power)
print("switch %s" % switch)
if __name__ == "__main__":
import OpenThings
OpenThings.init(Devices.CRYPT_PID)
unittest.main()
# END