Exemplo n.º 1
0
 def setUp(self):
     self.host = '192.168.13.1'
     #        self.i = HTTP('http', self.host, username='******', password='******')
     self.i = Mock_Interface()
     self.interface = TomatoInterface(self.i,
                                      self.host,
                                      http_id='asdfaadsfasdf234')
Exemplo n.º 2
0
class HW_ThermostatInterfaceTests(TestCase):
    def setUp(self):
        self.host = '192.168.13.210'
#        self.i = HTTP('http', self.host)
        self.i = Mock_Interface()
        self.interface = HW_Thermostat(self.i, self.host)

    def test_instantiation(self):
        self.assertIsInstance(self.interface, HW_Thermostat)
        
    def test_circulate(self):
        self.interface.off(self.host)
        time.sleep(2)
        self.interface.circulate(self.host)
    
    def test_setpoint(self):
        #no prior mode, then default to heat
        self.interface.level(address=self.host, level=72)
        time.sleep(2)
        self.assertIn(('tstat', '{"t_heat": 72}'), self.i.query_write_data())
        self.i.clear_write_data()
        self.interface.cool()
        time.sleep(2)
        self.assertIn(('tstat', '{"tmode": 2, "t_cool": 72}'), self.i.query_write_data())
        
    def test_cool(self):
        self.interface.cool()
        time.sleep(2)
        self.assertIn(('tstat', '{"tmode": 2}'), self.i.query_write_data())
        
Exemplo n.º 3
0
 def setUp(self):
     self.host = '192.168.13.210'
     #        self.i = HTTP('http', self.host)
     self.i = Mock_Interface()
     #        self.interface = Nest(self.i, self.host)
     self.interface = NestThermostat(username='******',
                                     password='******')
Exemplo n.º 4
0
class TomatoInterfaceTests(TestCase):
    def setUp(self):
        self.host = '192.168.13.1'
        #        self.i = HTTP('http', self.host, username='******', password='******')
        self.i = Mock_Interface()
        self.interface = TomatoInterface(self.i,
                                         self.host,
                                         http_id='asdfaadsfasdf234')

    def test_instantiation(self):
        self.assertIsInstance(self.interface, TomatoInterface)

    def test_restriction(self):
        """
        _nextpage:restrict.asp
_service:restrict-restart
rrule1:1|-1|-1|127|192.168.13.119>192.168.13.202|||0|Roku
f_enabled:on
f_desc:Roku
f_sched_allday:on
f_sched_everyday:on
f_sched_begin:0
f_sched_end:0
f_sched_sun:on
f_sched_mon:on
f_sched_tue:on
f_sched_wed:on
f_sched_thu:on
f_sched_fri:on
f_sched_sat:on
f_type:on
f_comp_all:1
f_block_all:on
f_block_http:
_http_id:
"""
        self.interface.restriction('Roku', True)

        time.sleep(2)
        #data = self.i.query_write_data()
        #self.assertIn(("f_desc", "Roku"), data[0].items())
        self.i.clear_write_data()
Exemplo n.º 5
0
class TomatoInterfaceTests(TestCase):
    def setUp(self):
        self.host = "192.168.13.1"
        #        self.i = HTTP('http', self.host, username='******', password='******')
        self.i = Mock_Interface()
        self.interface = TomatoInterface(self.i, self.host, http_id="asdfaadsfasdf234")

    def test_instantiation(self):
        self.assertIsInstance(self.interface, TomatoInterface)

    def test_restriction(self):
        """
        _nextpage:restrict.asp
_service:restrict-restart
rrule1:1|-1|-1|127|192.168.13.119>192.168.13.202|||0|Roku
f_enabled:on
f_desc:Roku
f_sched_allday:on
f_sched_everyday:on
f_sched_begin:0
f_sched_end:0
f_sched_sun:on
f_sched_mon:on
f_sched_tue:on
f_sched_wed:on
f_sched_thu:on
f_sched_fri:on
f_sched_sat:on
f_type:on
f_comp_all:1
f_block_all:on
f_block_http:
_http_id:
"""
        self.interface.restriction("Roku", True)

        time.sleep(2)
        # data = self.i.query_write_data()
        # self.assertIn(("f_desc", "Roku"), data[0].items())
        self.i.clear_write_data()
Exemplo n.º 6
0
class HW_ThermostatInterfaceTests(TestCase):
    def setUp(self):
        self.host = '192.168.13.211'
        #        self.i = HTTP('http', self.host)
        self.i = Mock_Interface()
        self.interface = HW_Thermostat(self.i, self.host)

    def test_instantiation(self):
        self.assertIsInstance(self.interface, HW_Thermostat)

    def test_circulate(self):
        self.interface.off(self.host)
        time.sleep(2)
        #        self.interface.still(self.host)
        self.interface.circulate(self.host)
        time.sleep(2)

    def test_setpoint(self):
        #no prior mode, then default to heat
        self.interface.level(address=self.host, level=72)
        time.sleep(2)
        self.assertIn((
            'tstat',
            '{"t_heat": 72}',
        ), self.i.query_write_data())
        self.i.clear_write_data()
        self.interface.cool()
        time.sleep(2)
        self.assertIn((
            'tstat',
            '{"tmode": 2, "t_cool": 72}',
        ), self.i.query_write_data())

    def test_cool(self):
        self.interface.cool()
        time.sleep(2)
        self.assertIn((
            'tstat',
            '{"tmode": 2}',
        ), self.i.query_write_data())
Exemplo n.º 7
0
 def setUp(self):
     self.ms = Mock_Interface()
     self.insteon = InsteonPLM(self.ms)
Exemplo n.º 8
0
class InsteonInterfaceTests(TestCase):
    useMock = True

    def setUp(self):
        self.ms = Mock_Interface()
        self.insteon = InsteonPLM(self.ms)

# If we are running live, the insteon interface doesnt like to be bombarded with requests
#            time.sleep(3)
#            self.serial = Serial('/dev/ttyUSB0', 4800)
#            self.insteon = InsteonPLM(self.serial)
#            self.tcp = TCP('192.168.13.146', 9761)
#            self.insteon = InsteonPLM2(self.tcp)

        #self.insteon.start()

    def tearDown(self):
        self.insteon.shutdown()
        self.serial = None
        try:
            self.tcp.shutdown()
            self.tcp = None
        except:
            pass

    def test_instantiation(self):
        self.assertIsNotNone(self.insteon,
                             'Insteon interface could not be instantiated')

    def test_device_on(self):
        """
        Transmit>
        0000   02 62 19 05 7B 0F 11 FF    .b..{...
        <  0000   02 62 19 05 7B 0F 11 FF 06    .b..{....
        <  0000   02 50 19 05 7B 16 F9 EC 2B 11 FF    .P..{...+..
        """
#        self.ms.add_response({Conversions.hex_to_ascii('026219057B0F11FF'):
#                              Conversions.hex_to_ascii('026219057B0F11FF06') + \
#                              Conversions.hex_to_ascii('025019057B16F9EC2B11FF')})
        response = self.insteon.on('19.05.7b')
        self.assertIn(Conversions.hex_to_ascii('026219057B0F11FF'), self.ms.query_write_data())
        self.ms.put_read_data(Conversions.hex_to_ascii('026219057B0F11FF06'))
        self.ms.put_read_data(Conversions.hex_to_ascii('025019057B16F9EC2B11FF'))
        time.sleep(2)
        self.assertEqual(response, True)
        
    def test_insteon_level2(self):
        self.ms.disabled = False
        
        self.insteon.level('12.20.B0', 50)
        #todo: figure out how to really deal with this race condition
        time.sleep(3)
        self.assertIn(unhexlify('02621220b00f117f'), self.ms.query_write_data())
#        self.ms.write.assert_called_with(unhexlify('02621220b00f117f'))

    def test_insteon_receive_status(self):
        """
        [2013/09/07 15:24:51] [DEBUG] [InsteonPLM] Receive< 0000   02 50 23 D2 BE 00 00 01 CB 11 00    .P#........
        d395e51a11bb096e20f9ae84b47f8884
        
        [2013/09/07 15:24:51] [WARNING] [InsteonPLM] Unhandled packet (couldn't find any pending command to deal with it) 
        [2013/09/07 15:24:51] [WARNING] [InsteonPLM] This could be a status message from a broadcast
        [2013/09/07 15:24:51] [DEBUG] [InsteonPLM] Running status request..........
        [2013/09/07 15:24:51] [DEBUG] [InsteonPLM] Command: 23.D2.BE 19 00
        [2013/09/07 15:24:51] [DEBUG] [InsteonPLM] Queued bff1ddfd362ac6ef71555d959edbb90a
        [2013/09/07 15:24:53] [DEBUG] [InsteonPLM] Timed out for bff1ddfd362ac6ef71555d959edbb90a - Requeueing (already had 0 retries)
        [2013/09/07 15:24:53] [DEBUG] [InsteonPLM] Interesting.  timed out for bff1ddfd362ac6ef71555d959edbb90a, but there are no pending com$
        [2013/09/07 15:24:53] [DEBUG] [InsteonPLM] Removing Lock <thread.lock object at 0x1a7f030>
        [2013/09/07 15:24:53] [DEBUG] [InsteonPLM] Transmit>026223d2be0f1900
        [2013/09/07 15:24:53] [DEBUG] [InsteonPLM] Receive< 0000   02 50 23 D2 BE 22 FF 5B 41 11 01    .P#..".[A..
        4996cf7dd3a4b4722f120dc9c0fe5b17
        
        [2013/09/07 15:24:53] [WARNING] [InsteonPLM] Unhandled packet (couldn't find any pending command to deal with it)
        [2013/09/07 15:24:53] [WARNING] [InsteonPLM] This could be a status message from a broadcast
        [2013/09/07 15:24:53] [DEBUG] [InsteonPLM] Running status request..........
        [2013/09/07 15:24:53] [DEBUG] [InsteonPLM] Command: 23.D2.BE 19 00
        
        """
        global logging_default_level
        ## Default logging level
        #logging_default_level = "DEBUG"
        self._result = False
        self.insteon.onCommand(self._insteon_receive_status_callback, '23.D2.BE')
        self.ms.put_read_data(Conversions.hex_to_ascii('025023D2BE000001CB1100'))
        time.sleep(1)
        # Transmits: 026223d2be0f1900
        self.ms.put_read_data(Conversions.hex_to_ascii('025023D2BE22FF5B411101'))
        time.sleep(3)
        self.assertEqual(self._result, True)

    def _insteon_receive_status_callback(self, *args, **kwargs):
        command = kwargs.get('command', None)
        print 'command:' + command
        if command == Command.ON:
            self._result = True

    def test_insteon_status(self):
        response = self.insteon.status('44.33.22')
        self.assertEqual(response, True)
Exemplo n.º 9
0
 def setUp(self):
     self.host = "192.168.13.1"
     #        self.i = HTTP('http', self.host, username='******', password='******')
     self.i = Mock_Interface()
     self.interface = TomatoInterface(self.i, self.host, http_id="asdfaadsfasdf234")
Exemplo n.º 10
0
 def setUp(self):
     self.ms = Mock_Interface()
     self.insteon = InsteonPLM(self.ms)
Exemplo n.º 11
0
class InsteonInterfaceTests(TestCase):
    useMock = True

    def setUp(self):
        self.ms = Mock_Interface()
        self.insteon = InsteonPLM(self.ms)

# If we are running live, the insteon interface doesnt like to be bombarded with requests
#            time.sleep(3)
#            self.serial = Serial('/dev/ttyUSB0', 4800)
#            self.insteon = InsteonPLM(self.serial)
#            self.tcp = TCP('192.168.13.146', 9761)
#            self.insteon = InsteonPLM2(self.tcp)

#self.insteon.start()

    def tearDown(self):
        self.insteon.shutdown()
        self.serial = None
        try:
            self.tcp.shutdown()
            self.tcp = None
        except:
            pass

    def test_instantiation(self):
        self.assertIsNotNone(self.insteon,
                             'Insteon interface could not be instantiated')

    def test_device_on(self):
        """
        Transmit>
        0000   02 62 19 05 7B 0F 11 FF    .b..{...
        <  0000   02 62 19 05 7B 0F 11 FF 06    .b..{....
        <  0000   02 50 19 05 7B 16 F9 EC 2B 11 FF    .P..{...+..
        """
        #        self.ms.add_response({Conversions.hex_to_ascii('026219057B0F11FF'):
        #                              Conversions.hex_to_ascii('026219057B0F11FF06') + \
        #                              Conversions.hex_to_ascii('025019057B16F9EC2B11FF')})
        response = self.insteon.on('19.05.7b')
        self.assertIn(Conversions.hex_to_ascii('026219057B0F11FF'),
                      self.ms.query_write_data())
        self.ms.put_read_data(Conversions.hex_to_ascii('026219057B0F11FF06'))
        self.ms.put_read_data(
            Conversions.hex_to_ascii('025019057B16F9EC2B11FF'))
        time.sleep(2)
        self.assertEqual(response, True)

    def test_insteon_level2(self):
        self.ms.disabled = False

        self.insteon.level('12.20.B0', 50)
        #todo: figure out how to really deal with this race condition
        time.sleep(3)
        self.assertIn(unhexlify('02621220b00f117f'),
                      self.ms.query_write_data())


#        self.ms.write.assert_called_with(unhexlify('02621220b00f117f'))

    def test_insteon_receive_status(self):
        """
[2013/10/09 19:56:54] [DEBUG] [InsteonPLM] Receive< 0000   02 50 23 D2 BE 00 00 01 CB 11 00    .P#........
d395e51a11bb096e20f9ae84b47f8884

[2013/10/09 19:56:54] [WARNING] [InsteonPLM] Unhandled packet (couldn't find any pending command to deal with it)
[2013/10/09 19:56:54] [WARNING] [InsteonPLM] This could be a status message from a broadcast
[2013/10/09 19:56:54] [DEBUG] [InsteonPLM] HandleStandDirect
[2013/10/09 19:56:54] [DEBUG] [InsteonPLM] Running status request:False:True:True:..........
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Command: 23.D2.BE 19 00
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Queued bff1ddfd362ac6ef71555d959edbb90a
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Transmit>026223d2be0f1900
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] TransmitResult>8
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Receive< 0000   02 50 23 D2 BE 22 FF 5B 41 11 01    .P#..".[A..
4996cf7dd3a4b4722f120dc9c0fe5b17

[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] ValidResponseCheck: 0000   53 44 31 39                SD19

[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] ValidResponseCheck2: {'callBack': <bound method InsteonPLM._handle_StandardDirect_LightSta$
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] ValidResponseCheck3: ['SD19']
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Valid Insteon Command COde: SD11
[2013/10/09 19:56:55] [WARNING] [InsteonPLM] Unhandled packet (couldn't find any pending command to deal with it)
[2013/10/09 19:56:55] [WARNING] [InsteonPLM] This could be a status message from a broadcast
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] HandleStandDirect
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Setting status for:23.D2.BE:17:1..........
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Received Command:23.D2.BE:on
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Delegates for Command: []
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Devices for Command: []
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Received Command:23.D2.BE:on
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Delegates for Command: []
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Devices for Command: []
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Received a Modem NAK! Resending command, loop time 0.400000
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Queued bff1ddfd362ac6ef71555d959edbb90a
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Received a Modem NAK! Resending command, loop time 0.600000
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Transmit>026223d2be0f1900
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] TransmitResult>8
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Receive< 0000   02 50 23 D2 BE 11 01 01 CB 06 00    .P#........
0e3a2974df58ef76268f23a48ec650a9

        """
        global logging_default_level
        ## Default logging level
        #logging_default_level = "DEBUG"
        self._result = False
        self.insteon.onCommand(self._insteon_receive_status_callback,
                               '23.D2.BE')
        self.ms.put_read_data(
            Conversions.hex_to_ascii('025023D2BE000001CB1100'))
        time.sleep(1)
        # Transmits: 026223d2be0f1900
        self.ms.put_read_data(
            Conversions.hex_to_ascii('025023D2BE22FF5B411101'))
        time.sleep(3)
        self.assertEqual(self._result, Command.ON)

    def _insteon_receive_status_callback(self, *args, **kwargs):
        command = kwargs.get('command', None)
        print 'command:' + command
        self._result = command

    def test_insteon_status(self):
        response = self.insteon.status('44.33.22')
        self.assertEqual(response, True)

    def test_insteon_receive_status2(self):
        """
Receive Broadcast OFF command from a remote device
[2013/10/07 20:37:42] [DEBUG] [InsteonPLM] Receive< 0000   02 50 23 D2 BE 00 00 01 CB 13 00    .P#........
Message Flags = CB = 1100 1011
b1 = broadcast
b2 = group
b3 = ack
b4 = extended
b56 = hops left
b78 = max hops
[2013/10/07 20:37:40] [DEBUG] [InsteonPLM] Running status request:False:True:True:..........
[2013/10/07 20:37:40] [DEBUG] [InsteonPLM] Command: 23.D2.BE 19 00
[2013/10/07 20:37:42] [DEBUG] [InsteonPLM] Transmit>026223d2be0f1900
[2013/10/07 20:37:42] [DEBUG] [InsteonPLM] Receive< 0000   02 50 23 D2 BE 22 FF 5B 41 13 01    .P#..".[A..
1079120c278d439fdc0c998fe6af970e

[2013/10/07 20:37:42] [DEBUG] [InsteonPLM] ValidResponseCheck: 0000   53 44 31 39                SD19
[2013/10/07 20:37:42] [DEBUG] [InsteonPLM] Setting status for:23.D2.BE:19:1..........
[2013/10/07 20:37:42] [DEBUG] [InsteonPLM] Received Command:23.D2.BE:off

        """
        self._result = None
        self.insteon.onCommand(self._insteon_receive_status_callback,
                               '23.D2.BE')
        self.ms.put_read_data(
            Conversions.hex_to_ascii('025023D2BE000001CB1300'))
        time.sleep(1)
        # Transmits: 026223d2be0f1900
        self.assertEqual(self._result, Command.OFF)

    def test_door_light_delgate_caseinsensitive(self):
        d = Door(address='23.d2.bE', devices=self.insteon)
        d.close()
        self.ms.put_read_data(
            Conversions.hex_to_ascii('025023D2BE000001CB1100'))
        time.sleep(3)
        self.ms.put_read_data(
            Conversions.hex_to_ascii('025023D2BE22FF5B411101'))
        time.sleep(3)
        self.assertEqual(d.state, State.OPEN)
Exemplo n.º 12
0
    def setUp(self):
        self.host = '192.168.13.210'
#        self.i = HTTP('http', self.host)
        self.i = Mock_Interface()
        self.interface = HW_Thermostat(self.i, self.host)
Exemplo n.º 13
0
 def setUp(self):
     self.host = '192.168.13.211'
     #        self.i = HTTP('http', self.host)
     self.i = Mock_Interface()
     self.interface = HW_Thermostat(self.i, self.host)
Exemplo n.º 14
0
class InsteonInterface2Tests(TestCase):
    useMock = True

    def setUp(self):
        self.ms = Mock_Interface()
        self.insteon = InsteonPLM2(self.ms)

# If we are running live, the insteon interface doesnt like to be bombarded with requests
#            time.sleep(3)
#            self.serial = Serial('/dev/ttyUSB0', 4800)
#            self.insteon = InsteonPLM(self.serial)
#            self.tcp = TCP('192.168.13.146', 9761)
#            self.insteon = InsteonPLM2(self.tcp)

#self.insteon.start()

    def tearDown(self):
        self.insteon.shutdown()
        self.serial = None
        try:
            self.tcp.shutdown()
            self.tcp = None
        except:
            pass

    def test_instantiation(self):
        self.assertIsNotNone(self.insteon,
                             'Insteon interface could not be instantiated')

    def test_device_on(self):
        """
        Transmit>
        0000   02 62 19 05 7B 0F 11 FF    .b..{...
        <  0000   02 62 19 05 7B 0F 11 FF 06    .b..{....
        <  0000   02 50 19 05 7B 16 F9 EC 2B 11 FF    .P..{...+..
        """
        #        self.ms.add_response({Conversions.hex_to_ascii('026219057B0F11FF'):
        #                              Conversions.hex_to_ascii('026219057B0F11FF06') + \
        #                              Conversions.hex_to_ascii('025019057B16F9EC2B11FF')})
        response = self.insteon.on('19.05.7b')
        self.assertIn(Conversions.hex_to_ascii('026219057B0F11FF'),
                      self.ms.query_write_data())
        self.ms.put_read_data(Conversions.hex_to_ascii('026219057B0F11FF06'))
        self.ms.put_read_data(
            Conversions.hex_to_ascii('025019057B16F9EC2B11FF'))
        #time.sleep(2)
        #self.assertEqual(response, True)

    def test_insteon_level2(self):
        self.ms.disabled = False

        self.insteon.level('12.20.B0', 50)
        #todo: figure out how to really deal with this race condition
        time.sleep(3)
        self.assertIn(unhexlify('02621220b00f117f'),
                      self.ms.query_write_data())


#        self.ms.write.assert_called_with(unhexlify('02621220b00f117f'))

    def test_insteon_receive_status(self):
        """
        [2013/09/07 15:24:51] [DEBUG] [InsteonPLM] Receive< 0000   02 50 23 D2 BE 00 00 01 CB 11 00    .P#........
        d395e51a11bb096e20f9ae84b47f8884
        
        [2013/09/07 15:24:51] [WARNING] [InsteonPLM] Unhandled packet (couldn't find any pending command to deal with it) 
        [2013/09/07 15:24:51] [WARNING] [InsteonPLM] This could be a status message from a broadcast
        [2013/09/07 15:24:51] [DEBUG] [InsteonPLM] Running status request..........
        [2013/09/07 15:24:51] [DEBUG] [InsteonPLM] Command: 23.D2.BE 19 00
        [2013/09/07 15:24:51] [DEBUG] [InsteonPLM] Queued bff1ddfd362ac6ef71555d959edbb90a
        [2013/09/07 15:24:53] [DEBUG] [InsteonPLM] Timed out for bff1ddfd362ac6ef71555d959edbb90a - Requeueing (already had 0 retries)
        [2013/09/07 15:24:53] [DEBUG] [InsteonPLM] Interesting.  timed out for bff1ddfd362ac6ef71555d959edbb90a, but there are no pending com$
        [2013/09/07 15:24:53] [DEBUG] [InsteonPLM] Removing Lock <thread.lock object at 0x1a7f030>
        [2013/09/07 15:24:53] [DEBUG] [InsteonPLM] Transmit>026223d2be0f1900
        [2013/09/07 15:24:53] [DEBUG] [InsteonPLM] Receive< 0000   02 50 23 D2 BE 22 FF 5B 41 11 01    .P#..".[A..
        4996cf7dd3a4b4722f120dc9c0fe5b17
        
        [2013/09/07 15:24:53] [WARNING] [InsteonPLM] Unhandled packet (couldn't find any pending command to deal with it)
        [2013/09/07 15:24:53] [WARNING] [InsteonPLM] This could be a status message from a broadcast
        [2013/09/07 15:24:53] [DEBUG] [InsteonPLM] Running status request..........
        [2013/09/07 15:24:53] [DEBUG] [InsteonPLM] Command: 23.D2.BE 19 00
        
        """
        global logging_default_level
        ## Default logging level
        #logging_default_level = "DEBUG"
        self._result = False
        self.insteon.onCommand(self._insteon_receive_status_callback,
                               '23.D2.BE')
        self.ms.put_read_data(
            Conversions.hex_to_ascii('025023D2BE000001CB1100'))
        time.sleep(1)
        # Transmits: 026223d2be0f1900
        self.ms.put_read_data(
            Conversions.hex_to_ascii('025023D2BE22FF5B411101'))
        time.sleep(3)
        self.assertEqual(self._result, True)

    def _insteon_receive_status_callback(self, *args, **kwargs):
        command = kwargs.get('command', None)
        print 'command:' + command
        if command == Command.ON:
            self._result = True

    def test_insteon_status(self):
        response = self.insteon.status('44.33.22')
        self.assertEqual(response, True)
Exemplo n.º 15
0
class InsteonInterfaceTests(TestCase):
    useMock = True

    def setUp(self):
        self.ms = Mock_Interface()
        self.insteon = InsteonPLM(self.ms)

# If we are running live, the insteon interface doesnt like to be bombarded with requests
#            time.sleep(3)
#            self.serial = Serial('/dev/ttyUSB0', 4800)
#            self.insteon = InsteonPLM(self.serial)
#            self.tcp = TCP('192.168.13.146', 9761)
#            self.insteon = InsteonPLM2(self.tcp)

        #self.insteon.start()

    def tearDown(self):
        self.insteon.shutdown()
        self.serial = None
        try:
            self.tcp.shutdown()
            self.tcp = None
        except:
            pass

    def test_instantiation(self):
        self.assertIsNotNone(self.insteon,
                             'Insteon interface could not be instantiated')

    def test_device_on(self):
        """
        Transmit>
        0000   02 62 19 05 7B 0F 11 FF    .b..{...
        <  0000   02 62 19 05 7B 0F 11 FF 06    .b..{....
        <  0000   02 50 19 05 7B 16 F9 EC 2B 11 FF    .P..{...+..
        """
#        self.ms.add_response({Conversions.hex_to_ascii('026219057B0F11FF'):
#                              Conversions.hex_to_ascii('026219057B0F11FF06') + \
#                              Conversions.hex_to_ascii('025019057B16F9EC2B11FF')})
        response = self.insteon.on('19.05.7b')
        self.assertIn(Conversions.hex_to_ascii('026219057B0F11FF'), self.ms.query_write_data())
        self.ms.put_read_data(Conversions.hex_to_ascii('026219057B0F11FF06'))
        self.ms.put_read_data(Conversions.hex_to_ascii('025019057B16F9EC2B11FF'))
        time.sleep(2)
        self.assertEqual(response, True)
        
    def test_insteon_level2(self):
        self.ms.disabled = False
        
        self.insteon.level('12.20.B0', 50)
        #todo: figure out how to really deal with this race condition
        time.sleep(3)
        self.assertIn(unhexlify('02621220b00f117f'), self.ms.query_write_data())
#        self.ms.write.assert_called_with(unhexlify('02621220b00f117f'))

    def test_insteon_receive_status(self):
        """
[2013/10/09 19:56:54] [DEBUG] [InsteonPLM] Receive< 0000   02 50 23 D2 BE 00 00 01 CB 11 00    .P#........
d395e51a11bb096e20f9ae84b47f8884

[2013/10/09 19:56:54] [WARNING] [InsteonPLM] Unhandled packet (couldn't find any pending command to deal with it)
[2013/10/09 19:56:54] [WARNING] [InsteonPLM] This could be a status message from a broadcast
[2013/10/09 19:56:54] [DEBUG] [InsteonPLM] HandleStandDirect
[2013/10/09 19:56:54] [DEBUG] [InsteonPLM] Running status request:False:True:True:..........
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Command: 23.D2.BE 19 00
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Queued bff1ddfd362ac6ef71555d959edbb90a
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Transmit>026223d2be0f1900
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] TransmitResult>8
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Receive< 0000   02 50 23 D2 BE 22 FF 5B 41 11 01    .P#..".[A..
4996cf7dd3a4b4722f120dc9c0fe5b17

[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] ValidResponseCheck: 0000   53 44 31 39                SD19

[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] ValidResponseCheck2: {'callBack': <bound method InsteonPLM._handle_StandardDirect_LightSta$
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] ValidResponseCheck3: ['SD19']
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Valid Insteon Command COde: SD11
[2013/10/09 19:56:55] [WARNING] [InsteonPLM] Unhandled packet (couldn't find any pending command to deal with it)
[2013/10/09 19:56:55] [WARNING] [InsteonPLM] This could be a status message from a broadcast
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] HandleStandDirect
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Setting status for:23.D2.BE:17:1..........
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Received Command:23.D2.BE:on
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Delegates for Command: []
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Devices for Command: []
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Received Command:23.D2.BE:on
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Delegates for Command: []
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Devices for Command: []
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Received a Modem NAK! Resending command, loop time 0.400000
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Queued bff1ddfd362ac6ef71555d959edbb90a
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Received a Modem NAK! Resending command, loop time 0.600000
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Transmit>026223d2be0f1900
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] TransmitResult>8
[2013/10/09 19:56:55] [DEBUG] [InsteonPLM] Receive< 0000   02 50 23 D2 BE 11 01 01 CB 06 00    .P#........
0e3a2974df58ef76268f23a48ec650a9

        """
        global logging_default_level
        ## Default logging level
        #logging_default_level = "DEBUG"
        self._result = False
        self.insteon.onCommand(self._insteon_receive_status_callback, '23.D2.BE')
        self.ms.put_read_data(Conversions.hex_to_ascii('025023D2BE000001CB1100'))
        time.sleep(1)
        # Transmits: 026223d2be0f1900
        self.ms.put_read_data(Conversions.hex_to_ascii('025023D2BE22FF5B411101'))
        time.sleep(3)
        self.assertEqual(self._result, Command.ON)

    def _insteon_receive_status_callback(self, *args, **kwargs):
        command = kwargs.get('command', None)
        print 'command:' + command
        self._result = command

    def test_insteon_status(self):
        response = self.insteon.status('44.33.22')
        self.assertEqual(response, True)
        
    def test_insteon_receive_status2(self):
        """
Receive Broadcast OFF command from a remote device
[2013/10/07 20:37:42] [DEBUG] [InsteonPLM] Receive< 0000   02 50 23 D2 BE 00 00 01 CB 13 00    .P#........
Message Flags = CB = 1100 1011
b1 = broadcast
b2 = group
b3 = ack
b4 = extended
b56 = hops left
b78 = max hops
[2013/10/07 20:37:40] [DEBUG] [InsteonPLM] Running status request:False:True:True:..........
[2013/10/07 20:37:40] [DEBUG] [InsteonPLM] Command: 23.D2.BE 19 00
[2013/10/07 20:37:42] [DEBUG] [InsteonPLM] Transmit>026223d2be0f1900
[2013/10/07 20:37:42] [DEBUG] [InsteonPLM] Receive< 0000   02 50 23 D2 BE 22 FF 5B 41 13 01    .P#..".[A..
1079120c278d439fdc0c998fe6af970e

[2013/10/07 20:37:42] [DEBUG] [InsteonPLM] ValidResponseCheck: 0000   53 44 31 39                SD19
[2013/10/07 20:37:42] [DEBUG] [InsteonPLM] Setting status for:23.D2.BE:19:1..........
[2013/10/07 20:37:42] [DEBUG] [InsteonPLM] Received Command:23.D2.BE:off

        """
        self._result = None
        self.insteon.onCommand(self._insteon_receive_status_callback, '23.D2.BE')
        self.ms.put_read_data(Conversions.hex_to_ascii('025023D2BE000001CB1300'))
        time.sleep(1)
        # Transmits: 026223d2be0f1900
        self.assertEqual(self._result, Command.OFF)

    def test_door_light_delgate_caseinsensitive(self):
        d = Door(address='23.d2.bE', 
                 devices=self.insteon)
        d.close()
        self.ms.put_read_data(Conversions.hex_to_ascii('025023D2BE000001CB1100'))
        time.sleep(3)
        self.ms.put_read_data(Conversions.hex_to_ascii('025023D2BE22FF5B411101'))
        time.sleep(3)
        self.assertEqual(d.state, State.OPEN)