def test_initial_from_device(self): d1 = StateDevice() self.assertEqual(d1.state, State.UNKNOWN) d1.on() self.assertEqual(d1.state, State.ON) d2 = StateDevice(devices=d1) self.assertEqual(d2.state, State.ON)
def test_state_ignore_range(self): (s_h, s_m, s_s) = datetime.now().timetuple()[3:6] e_h = s_h e_m = s_m e_s = s_s + 2 s = StateDevice() s2 = StateDevice(devices=s, ignore={ Attribute.SOURCE: s, Attribute.START: '{h}:{m}:{s}'.format( h=s_h, m=s_m, s=s_s, ), Attribute.END: '{h}:{m}:{s}'.format( h=e_h, m=e_m, s=e_s, ), }, ) self.assertEqual(s2.state, State.UNKNOWN) s.on() self.assertEqual(s2.state, State.UNKNOWN) time.sleep(3) s.on() self.assertEqual(s2.state, State.ON)
def test_binding_default(self): d1 = StateDevice() d1.off() d2 = StateDevice(d1) self.assertEqual(d2.state, State.OFF) d1.on() self.assertEqual(d2.state, State.ON)
def test_last_command(self): s1 = StateDevice() s1.on() self.assertEqual(s1.state, State.ON) s1.off() self.assertEqual(s1.state, State.OFF) self.assertEqual(s1.last_command, Command.OFF)
def test_override_default_maps(self): d = StateDevice(mapped={ Attribute.COMMAND: Command.ON, Attribute.MAPPED: Command.OFF, }) d.on() self.assertEqual(d.state, State.OFF)
def test_trigger_time_range(self): (s_h, s_m, s_s) = datetime.now().timetuple()[3:6] e_h = s_h e_m = s_m e_s = s_s + 2 s = StateDevice() s2 = StateDevice(devices=s, trigger={ Attribute.COMMAND: Command.ON, Attribute.MAPPED: Command.OFF, Attribute.SECS: 1, Attribute.START: '{h}:{m}:{s}'.format( h=s_h, m=s_m, s=s_s, ), Attribute.END: '{h}:{m}:{s}'.format( h=e_h, m=e_m, s=e_s, ), }, ) self.assertEqual(s2.state, State.UNKNOWN) s.on() self.assertEqual(s2.state, State.ON) time.sleep(3) self.assertEqual(s2.state, State.OFF) ## time.sleep(2) s.on() time.sleep(3) self.assertEqual(s2.state, State.ON)
def test_time_off(self): now = datetime.now() hours, mins, secs = now.timetuple()[3:6] secs = (secs + 2) % 60 mins += (secs + 2) / 60 trigger_time1 = '{h}:{m}:{s}'.format( h=hours, m=mins, s=secs, ) print 'Trigger Time' + trigger_time1 secs = (secs + 2) % 60 mins += (secs + 2) / 60 trigger_time2 = '{h}:{m}:{s}'.format( h=hours, m=mins, s=secs, ) print 'Trigger Time' + trigger_time2 device = StateDevice( time={ Attribute.COMMAND: Command.OFF, Attribute.TIME: (trigger_time1, trigger_time2), }) self.assertEqual(device.state, State.UNKNOWN) time.sleep(3) print datetime.now() self.assertEqual(device.state, State.OFF) device.on() time.sleep(3) print datetime.now() print device._times self.assertEqual(device.state, State.OFF)
def test_loop_prevention(self): s1 = StateDevice() s2 = StateDevice() s1.devices(s2) s2.devices(s1) s1.on() pass
def test_trigger_out_range_gc(self): (s_h, s_m, s_s) = datetime.now().timetuple()[3:6] e_h = s_h e_m = s_m e_s = s_s + 2 d1 = StateDevice() d2 = Light( devices=d1, trigger={ Attribute.COMMAND: Command.ON, Attribute.MAPPED: Command.OFF, Attribute.SECS: 2, Attribute.START: '{h}:{m}:{s}'.format( h=s_h, m=s_m, s=s_s, ), Attribute.END: '{h}:{m}:{s}'.format( h=e_h, m=e_m, s=e_s, ), } ) time.sleep(3) self.assertEqual(d2.state, State.UNKNOWN) d1.on() self.assertEqual(d2.state, State.ON) time.sleep(3) self.assertEqual(d2.state, State.ON)
def test_trigger_out_range_gc(self): (s_h, s_m, s_s) = datetime.now().timetuple()[3:6] e_h = s_h e_m = s_m e_s = s_s + 2 d1 = StateDevice() d2 = Light(devices=d1, trigger={ Attribute.COMMAND: Command.ON, Attribute.MAPPED: Command.OFF, Attribute.SECS: 2, Attribute.START: '{h}:{m}:{s}'.format( h=s_h, m=s_m, s=s_s, ), Attribute.END: '{h}:{m}:{s}'.format( h=e_h, m=e_m, s=e_s, ), }) time.sleep(3) self.assertEqual(d2.state, State.UNKNOWN) d1.on() self.assertEqual(d2.state, State.ON) time.sleep(3) self.assertEqual(d2.state, State.ON)
def run(self): if self._ssl_path: self.ws = WebSocketServer( (self._address, self._port), Resource( { "/api/bridge": PytoWebSocketApp, "/api/device*": self.api_app, "/api/voice": self.api_app, "/": self.http_file_app, } ), pre_start_hook=auth_hook, keyfile=self._ssl_path + "/server.key", certfile=self._ssl_path + "/server.crt", ) else: self.ws = WebSocketServer( (self._address, self._port), Resource( { "/api/bridge": PytoWebSocketApp, "/api/device*": self.api_app, "/api/voice": self.api_app, "/": self.http_file_app, } ), pre_start_hook=auth_hook, ) print "Serving WebSocket Connection on", self._address, "port", self._port, "..." StateDevice.onStateChangedGlobal(self.broadcast_state) self.ws.serve_forever()
def run(self): if self._ssl_path: self.ws = WebSocketServer((self._address, self._port), Resource({ '/api/bridge': PytoWebSocketApp, '/api/device*': self.api_app, '/api/voice': self.api_app, '/': self.http_file_app }), pre_start_hook=auth_hook, keyfile=self._ssl_path + '/server.key', certfile=self._ssl_path + '/server.crt') else: self.ws = WebSocketServer((self._address, self._port), Resource({ '/api/bridge': PytoWebSocketApp, '/api/device*': self.api_app, '/api/voice': self.api_app, '/': self.http_file_app }), pre_start_hook=auth_hook) print "Serving WebSocket Connection on", self._address, "port", self._port, "..." StateDevice.onStateChangedGlobal(self.broadcast_state) self.ws.serve_forever()
def test_device_on(self): d=StateDevice(name='device_test_1') d.off() self.assertEqual(d.state, State.OFF) response = self.api.get_response(method='POST', path="device/" + str(d.type_id), data=['command=on']) self.assertEqual(d.state, State.ON) self.assertTrue('"name": "device_test_1"' in response)
def test_time_off(self): now = datetime.now() hours, mins, secs = now.timetuple()[3:6] secs = (secs + 2) % 60 mins += (secs + 2) / 60 trigger_time1 = '{h}:{m}:{s}'.format( h=hours, m=mins, s=secs, ) print 'Trigger Time' + trigger_time1 secs = (secs + 2) % 60 mins += (secs + 2) / 60 trigger_time2 = '{h}:{m}:{s}'.format( h=hours, m=mins, s=secs, ) print 'Trigger Time' + trigger_time2 device = StateDevice( time={ Attribute.COMMAND: Command.OFF, Attribute.TIME: (trigger_time1, trigger_time2), } ) self.assertEqual(device.state, State.UNKNOWN) time.sleep(3) print datetime.now() self.assertEqual(device.state, State.OFF) device.on() time.sleep(3) print datetime.now() print device._times self.assertEqual(device.state, State.OFF)
def test_initial_from_device(self): d1 = StateDevice( ) self.assertEqual(d1.state, State.UNKNOWN) d1.on() self.assertEqual(d1.state, State.ON) d2 = StateDevice(devices=d1) self.assertEqual(d2.state, State.ON)
def test_override_default_maps(self): d = StateDevice( mapped={ Attribute.COMMAND: Command.ON, Attribute.MAPPED: Command.OFF, } ) d.on() self.assertEqual(d.state, State.OFF)
def test_bind_devices_initial_state(self): s1 = StateDevice() self.assertEqual(s1.state, State.UNKNOWN) s1.on() self.assertEqual(s1.state, State.ON) s2 = StateDevice(s1) self.assertEqual(s2.state, State.ON) s3 = StateDevice(s1, initial_state=State.OFF) self.assertEqual(s3.state, State.OFF)
def test_ignore_device(self): s1 = StateDevice() s2 = StateDevice(devices=s1, ignore={ Attribute.SOURCE: s1 } ) self.assertEqual(s2.state, State.UNKNOWN) s1.on() self.assertEqual(s2.state, State.UNKNOWN)
def test_delay_zero_secs(self): d1 = StateDevice() d2 = StateDevice() d3 = StateDevice( devices=(d1, d2), delay=({ Attribute.COMMAND: Command.OFF, Attribute.SECS: 2 }, { Attribute.COMMAND: Command.OFF, Attribute.SECS: 0, Attribute.SOURCE: d2, } ), initial=State.ON, ) self.assertEqual(d3.state, State.ON) d1.off() self.assertEqual(d3.state, State.ON) time.sleep(3) self.assertEqual(d3.state, State.OFF) d3.on() self.assertEqual(d3.state, State.ON) d2.off() self.assertEqual(d3.state, State.OFF)
def test_map_delay(self): d = StateDevice(mapped={ Attribute.COMMAND: Command.ON, Attribute.MAPPED: Command.OFF, Attribute.SECS: 2, }, ) self.assertEqual(d.state, State.UNKNOWN) d.on() self.assertEqual(d.state, State.UNKNOWN) time.sleep(3) self.assertEqual(d.state, Command.OFF)
def test_idle(self): s1 = StateDevice() s2 = StateDevice(devices=s1, idle_off=2 ) s1.on() self.assertEqual(s2.state, State.ON) time.sleep(3) self.assertEqual(s2.state, State.OFF) s1.on() self.assertEqual(s2.state, State.ON)
def test_trigger(self): s1 = StateDevice( trigger={ Attribute.COMMAND: Command.ON, Attribute.MAPPED: Command.OFF, Attribute.SECS: 2 }) s1.on() self.assertEqual(s1.state, State.ON) time.sleep(3) self.assertEqual(s1.state, State.OFF)
def test_ignore_multi_command(self): s1 = StateDevice() s2 = StateDevice(devices=s1, ignore={ Attribute.COMMAND: (Command.ON, Command.OFF,) }, ) self.assertEqual(s2.state, State.UNKNOWN) s1.on() self.assertEqual(s2.state, State.UNKNOWN) s1.off() self.assertEqual(s2.state, State.UNKNOWN)
def test_trigger(self): s1 = StateDevice( trigger={ 'command': Command.ON, 'mapped': Command.OFF, 'secs': 2 } ) s1.on(); self.assertEqual(s1.state, State.ON) time.sleep(3) self.assertEqual(s1.state, State.OFF)
def test_trigger(self): s1 = StateDevice( trigger={ Attribute.COMMAND: Command.ON, Attribute.MAPPED: Command.OFF, Attribute.SECS: 2 } ) s1.on(); self.assertEqual(s1.state, State.ON) time.sleep(3) self.assertEqual(s1.state, State.OFF)
def test_map_delay(self): d = StateDevice( mapped={ Attribute.COMMAND: Command.ON, Attribute.MAPPED: Command.OFF, Attribute.SECS: 2, }, ) self.assertEqual(d.state, State.UNKNOWN) d.on() self.assertEqual(d.state, State.UNKNOWN) time.sleep(3) self.assertEqual(d.state, Command.OFF)
def test_idle_timer(self): s1 = StateDevice() s2 = StateDevice(devices=s1, idle={ 'command': State.OFF, 'secs': 2, } ) s1.on() self.assertEqual(s2.state, State.ON) time.sleep(3) self.assertEqual(s2.state, State.OFF) s1.on() self.assertEqual(s2.state, State.ON)
def test_delay_single(self): d1 = StateDevice( delay={'command': Command.OFF, 'secs': 2, } ) self.assertEqual(d1.state, State.UNKNOWN) d1.on() self.assertEqual(d1.state, State.ON) d1.off() self.assertEqual(d1.state, State.ON) time.sleep(3) # time.sleep(20000) self.assertEqual(d1.state, State.OFF)
def test_delay_single(self): d1 = StateDevice( delay={Attribute.COMMAND: Command.OFF, Attribute.SECS: 2, } ) self.assertEqual(d1.state, State.UNKNOWN) d1.on() self.assertEqual(d1.state, State.ON) d1.off() self.assertEqual(d1.state, State.ON) time.sleep(3) # time.sleep(20000) self.assertEqual(d1.state, State.OFF)
def test_idle_timer(self): s1 = StateDevice() s2 = StateDevice(devices=s1, idle={ Attribute.MAPPED: State.OFF, Attribute.SECS: 2, } ) s1.on() self.assertEqual(s2.state, State.ON) time.sleep(3) self.assertEqual(s2.state, State.OFF) s1.on() self.assertEqual(s2.state, State.ON)
def test_previous_state_twice_command(self): s1 = StateDevice() s2 = StateDevice(devices=s1) s1.off() self.assertEqual(s1.state, State.OFF) s1.on() self.assertEqual(s1.state, State.ON) s1.on() self.assertEqual(s1.state, State.ON) s1.previous() self.assertEqual(s1.state, State.OFF)
def test_controlled_devices_no_delay_default(self): i = Mock() d1 = StateDevice() d2 = InterfaceDevice( devices=(i, d1), delay={ Attribute.COMMAND: Command.OFF, Attribute.SECS: 3 }, initial=State.ON, ) d1.off() self.assertEqual(d2.state, State.ON) d2.command(command=Command.OFF, source=i) self.assertEqual(d2.state, State.OFF)
def test_controlled_devices_no_delay_default(self): i = Mock() d1 = StateDevice() d2 = InterfaceDevice( devices=(i,d1), delay={ Attribute.COMMAND: Command.OFF, Attribute.SECS: 3 }, initial=State.ON, ) d1.off() self.assertEqual(d2.state, State.ON) d2.command(command=Command.OFF, source=i) self.assertEqual(d2.state, State.OFF)
def test_state_remove_device(self): s1 = StateDevice() s2 = StateDevice(devices=s1) s1.on() self.assertEqual(s2.state, State.ON) s2.off() self.assertEqual(s2.state, State.OFF) r=s2.remove_device(s1) self.assertTrue(r) self.assertEqual(s2.state, State.OFF) s1.on() self.assertEqual(s2.state, State.OFF) # remove again and not error r = s2.remove_device(s1) self.assertFalse(r)
def test_time_cron_off(self): now = datetime.now() hours, mins, secs = now.timetuple()[3:6] secs = (secs + 2) % 60 mins += (secs + 2) / 60 ctime = (secs, mins, hours) s = StateDevice(time={ Attribute.COMMAND: Command.OFF, Attribute.TIME: ctime, }) s.on() self.assertEqual(s.state, Command.ON) time.sleep(3) self.assertEqual(s.state, Command.OFF)
def test_map_sources(self): d1 = StateDevice() d2 = StateDevice() d3 = StateDevice() d4 = StateDevice(devices=(d1, d2, d3), mapped={ Attribute.COMMAND: Command.ON, Attribute.SOURCE: (d1, d2), Attribute.MAPPED: Command.OFF, }) self.assertEqual(d4.state, State.UNKNOWN) d3.on() self.assertEqual(d4.state, State.ON) d2.on() self.assertEqual(d4.state, State.OFF)
def test_toggle_state(self): s1 = StateDevice() s1.on() self.assertEqual(s1.state, State.ON) s1.toggle() self.assertEqual(s1.state, State.OFF) s1.toggle() self.assertEqual(s1.state, State.ON)
def test_previous_state_command(self): s1 = StateDevice() s1.on() self.assertEqual(s1.state, State.ON) s1.off() self.assertEqual(s1.state, State.OFF) s1.previous() self.assertEqual(s1.state, State.ON)
def test_delay(self): d1 = StateDevice() d2 = StateDevice(devices=d1, delay={Attribute.COMMAND: Command.OFF, Attribute.MAPPED: (Command.LEVEL, 80), Attribute.SOURCE: d1, Attribute.SECS: 2, }) self.assertEqual(d2.state, State.UNKNOWN) d1.on() self.assertEqual(d2.state, State.ON) d1.off() self.assertEqual(d2.state, State.ON) time.sleep(3) # time.sleep(2000) self.assertEqual(d2.state, (State.LEVEL, 80))
def test_delay(self): d1 = StateDevice() d2 = StateDevice(devices=d1, delay={'command': Command.OFF, 'mapped': (Command.LEVEL, 80), 'source': d1, 'secs': 2, }) self.assertEqual(d2.state, State.UNKNOWN) d1.on() self.assertEqual(d2.state, State.ON) d1.off() self.assertEqual(d2.state, State.ON) time.sleep(3) # time.sleep(2000) self.assertEqual(d2.state, (State.LEVEL, 80))
def test_ignore_multiples_state(self): s1 = StateDevice() s2 = StateDevice( devices=s1, ignore={Attribute.COMMAND: (Command.ON, Command.OFF)}, ) self.assertEqual(s2.state, State.UNKNOWN) s1.on() self.assertEqual(s2.state, State.UNKNOWN) s1.off() self.assertEqual(s2.state, State.UNKNOWN) s1.on() self.assertEqual(s2.state, State.UNKNOWN)
def test_time_cron_off(self): now = datetime.now() hours, mins, secs = now.timetuple()[3:6] secs = (secs + 2) % 60 mins += (secs + 2) / 60 ctime = (secs, mins, hours) s = StateDevice( time={ Attribute.COMMAND: Command.OFF, Attribute.TIME: ctime, } ) s.on() self.assertEqual(s.state, Command.ON) time.sleep(3) self.assertEqual(s.state, Command.OFF)
def test_onStateChangedGlobal(self): s1 = StateDevice() custom = Mock() s1.on() StateDevice.test_onStateChangedGlobal(custom.method) s1.off() custom.method.assert_called_with(State.OFF, source=None, prev=State.ON, device=s1)
def test_onStateChanged(self): s1 = StateDevice() custom = Mock() s1.on() s1.onStateChanged(custom.method) s1.off() custom.method.assert_called_with(State.OFF, source=None, prev=State.ON)
def test_state_ignore_range(self): (s_h, s_m, s_s) = datetime.now().timetuple()[3:6] e_h = s_h e_m = s_m e_s = s_s + 2 s = StateDevice() s2 = StateDevice( devices=s, ignore={ Attribute.SOURCE: s, Attribute.START: '{h}:{m}:{s}'.format( h=s_h, m=s_m, s=s_s, ), Attribute.END: '{h}:{m}:{s}'.format( h=e_h, m=e_m, s=e_s, ), }, ) self.assertEqual(s2.state, State.UNKNOWN) s.on() self.assertEqual(s2.state, State.UNKNOWN) time.sleep(3) s.on() self.assertEqual(s2.state, State.ON)
def test_trigger_time_range(self): (s_h, s_m, s_s) = datetime.now().timetuple()[3:6] e_h = s_h e_m = s_m e_s = s_s + 2 s = StateDevice() s2 = StateDevice( devices=s, trigger={ Attribute.COMMAND: Command.ON, Attribute.MAPPED: Command.OFF, Attribute.SECS: 1, Attribute.START: '{h}:{m}:{s}'.format( h=s_h, m=s_m, s=s_s, ), Attribute.END: '{h}:{m}:{s}'.format( h=e_h, m=e_m, s=e_s, ), }, ) self.assertEqual(s2.state, State.UNKNOWN) s.on() self.assertEqual(s2.state, State.ON) time.sleep(3) self.assertEqual(s2.state, State.OFF) ## time.sleep(2) s.on() time.sleep(3) self.assertEqual(s2.state, State.ON)
def test_map(self): d1 = StateDevice() d2 = StateDevice() d3 = StateDevice(devices=(d1, d2), mapped={ Attribute.COMMAND: Command.ON, Attribute.MAPPED: Command.OFF, Attribute.SOURCE: d2 }) self.assertEqual(d3.state, State.UNKNOWN) d1.on() self.assertEqual(d3.state, State.ON) d2.on() self.assertEqual(d3.state, State.OFF)
def test_get_instances(self): mint = Mock() mint.read.return_value = '' before = get_instances() int = HAInterface(mint, name='Int1') dev = StateDevice(name='Dev1') a = get_instances() self.assertIsNotNone(a) self.assertEqual(len(a), len(before))
def test_initial(self): interface = Mock() p = PropertyMock(side_effect=ValueError) type(interface).state = p device = InterfaceDevice(address='asdf', devices=interface, initial=State.ON) interface.on.assert_called_with('asdf') # interface.initial.assert_called_with('asdf') device1 = StateDevice() device1.on() interface2 = Mock() type(interface2).state = p device = InterfaceDevice(address='asdf', devices=interface2, initial=State.ON) interface2.on.assert_called_with('asdf')
def test_idle_timer_then_trigger(self): s1 = StateDevice() s2 = StateDevice(devices=s1, trigger={ Attribute.COMMAND: State.ON, Attribute.MAPPED: State.OFF, Attribute.SECS: 4, }, idle={ Attribute.MAPPED: State.UNKNOWN, Attribute.SECS: 2, }) s1.on() self.assertEqual(s2.state, State.ON) time.sleep(3) self.assertEqual(s2.state, State.UNKNOWN) time.sleep(5) self.assertEqual(s2.state, State.OFF)
def test_ignore_state(self): s1 = StateDevice() s2 = StateDevice( devices=s1, ignore={ Attribute.COMMAND: Command.ON, Attribute.SOURCE: s1, }, ) s1.on() self.assertEqual(s2.state, State.UNKNOWN) s1.off() self.assertEqual(s2.state, State.OFF) s1.on() self.assertEqual(s2.state, State.OFF)
def test_time_range_invalid(self): try: s1 = StateDevice( ignore={ Attribute.COMMAND: Command.ON, Attribute.START: '10:56 am', Attribute.END: '11.02 am', }) self.assertTrue(False) except AssertionError, ex: raise ex
def test_get_instances_detail(self): #l = len(get_instances()) mint = Mock() mint.read.return_value = '' int = HAInterface(mint, name='Int1') dev = StateDevice(name='Dev1') a = get_instances_detail() self.assertIsNotNone(a) # self.assertEqual(len(a), l+2) self.assertEqual(a[dev.type_id]['name'], 'Dev1') self.assertEqual(a[dev.type_id]['type_name'], 'StateDevice')
def test_delay_priority(self): d1 = StateDevice() d2 = StateDevice() d3 = StateDevice( devices=(d1, d2), delay=( { Attribute.COMMAND: Command.OFF, Attribute.SOURCE: d1, Attribute.SECS: 4, }, { Attribute.COMMAND: Command.OFF, Attribute.SECS: 2 }, ), initial=State.ON, ) self.assertEqual(d3.state, State.ON) d1.off() self.assertEqual(d3.state, State.ON) time.sleep(2) self.assertEqual(d3.state, State.ON) time.sleep(2) self.assertEqual(d3.state, State.OFF)
def test_delay_cancel_on_other_state(self): d1 = StateDevice() d2 = StateDevice( devices=d1, initial=State.OFF, delay={ Attribute.COMMAND: Command.OFF, Attribute.SECS: 2, }, ) self.assertEqual(d2.state, State.UNKNOWN) d1.on() self.assertEqual(d2.state, State.ON) d1.off() self.assertEqual(d2.state, State.ON) d1.on() self.assertEqual(d2.state, State.ON) time.sleep(3) self.assertEqual(d2.state, State.ON)
def test_idle_timer(self): s1 = StateDevice() s2 = StateDevice(devices=s1, idle={ Attribute.MAPPED: State.OFF, Attribute.SECS: 2, }) s1.on() self.assertEqual(s2.state, State.ON) time.sleep(3) self.assertEqual(s2.state, State.OFF) s1.on() self.assertEqual(s2.state, State.ON)