Ejemplo n.º 1
0
Archivo: cube.py Proyecto: ercpe/pymax
	def test_read_unknown_response(self):
		c = Cube('127.0.0.1', 62910)
		c._socket = StaticResponseSocket([
			bytearray('X:', encoding='utf-8'),
		])
		c.read()
		self.assertEqual(len(c.received_messages), 0)
Ejemplo n.º 2
0
 def test_read_unknown_response(self):
     c = Cube('127.0.0.1', 62910)
     c._socket = StaticResponseSocket([
         bytearray('X:', encoding='utf-8'),
     ])
     c.read()
     self.assertEqual(len(c.received_messages), 0)
Ejemplo n.º 3
0
Archivo: cube.py Proyecto: ercpe/pymax
	def _mocked_cube(self):
		# conn = Mock()
		# conn.get_message = Mock(return_value=SetResponse(bytearray("00,0,31", encoding='utf-8')))
		c = Cube()
		c._socket = Mock(socket.socket)
		c.send_message = Mock()
		c.get_message = Mock(return_value=SetResponse(bytearray("00,0,31", encoding='utf-8')))
		return c
Ejemplo n.º 4
0
Archivo: cube.py Proyecto: ercpe/pymax
	def test_rooms(self):
		c = Cube()
		c.get_message = Mock(return_value=MResponse([MResponseBytes]))
		self.assertEqual(c.rooms, [
			Room(room_id=1, name='Wohnzimmer', rf_address='122B65', devices=[
				Device(rf_address='122B65', serial='MEQ1472997', name='Heizung'),
			])
		])
Ejemplo n.º 5
0
 def test_read(self):
     c = Cube('127.0.0.1', 62910)
     c._socket = StaticResponseSocket([
         bytearray('H:', encoding='utf-8') + HelloResponseBytes,
         bytearray('M:', encoding='utf-8') + MResponseBytes
     ])
     c.read()
     self.assertEqual(len(c.received_messages), 2)
Ejemplo n.º 6
0
Archivo: cube.py Proyecto: ercpe/pymax
	def test_read(self):
		c = Cube('127.0.0.1', 62910)
		c._socket = StaticResponseSocket([
			bytearray('H:', encoding='utf-8') + HelloResponseBytes,
			bytearray('M:', encoding='utf-8') + MResponseBytes
		])
		c.read()
		self.assertEqual(len(c.received_messages), 2)
Ejemplo n.º 7
0
Archivo: cube.py Proyecto: ercpe/pymax
	def test_context_manager_connect_and_disconnect(self):
		c = Cube((None, None))
		c.connect = Mock()
		c.disconnect = Mock()

		with c:
			self.assertTrue(c.connect.called)

		self.assertTrue(c.disconnect.called)
Ejemplo n.º 8
0
 def _mocked_cube(self):
     # conn = Mock()
     # conn.get_message = Mock(return_value=SetResponse(bytearray("00,0,31", encoding='utf-8')))
     c = Cube()
     c._socket = Mock(socket.socket)
     c.send_message = Mock()
     c.get_message = Mock(
         return_value=SetResponse(bytearray("00,0,31", encoding='utf-8')))
     return c
Ejemplo n.º 9
0
    def test_context_manager_connect_and_disconnect(self):
        c = Cube((None, None))
        c.connect = Mock()
        c.disconnect = Mock()

        with c:
            self.assertTrue(c.connect.called)

        self.assertTrue(c.disconnect.called)
Ejemplo n.º 10
0
Archivo: cube.py Proyecto: ercpe/pymax
	def test_get_ntp_servers_no_response(self):
		c = Cube((None, None))
		c._socket = Mock(socket.socket)
		c._socket.recv = Mock(return_value=bytearray("F:ntp.homematic.com,ntp.homematic.com", encoding='utf-8'))
		c.send_message = Mock()
		self.assertIsNone(c._ntp_servers)
		c.ntp_servers
		c.send_message.assert_called_with(FMessage())
		self.assertIsNone(c.ntp_servers)
Ejemplo n.º 11
0
Archivo: cube.py Proyecto: ercpe/pymax
	def test_disconnect(self):
		fake_socket = Mock(socket.socket)
		fake_socket.recv = Mock(return_value=bytearray())
		fake_socket.close = Mock(return_value=None)

		c = Cube('127.0.0.1', 62910)
		c._socket = fake_socket
		c.disconnect()
		self.assertTrue(fake_socket.close.called)
		self.assertIsNone(c._socket)
Ejemplo n.º 12
0
Archivo: cube.py Proyecto: ercpe/pymax
	def test_get_ntp_servers(self):
		c = Cube((None, None))
		c._socket = Mock(socket.socket)
		c._socket.recv = Mock(return_value=bytearray())
		c.send_message = Mock()
		self.assertIsNone(c._ntp_servers)
		c.ntp_servers
		c.send_message.assert_called_with(FMessage())
		c.handle_message(FResponse(bytearray("ntp.homematic.com,ntp.homematic.com", encoding='utf-8')))
		self.assertEqual(c._ntp_servers, [u'ntp.homematic.com', u'ntp.homematic.com'])
Ejemplo n.º 13
0
    def test_disconnect(self):
        fake_socket = Mock(socket.socket)
        fake_socket.recv = Mock(return_value=bytearray())
        fake_socket.close = Mock(return_value=None)

        c = Cube('127.0.0.1', 62910)
        c._socket = fake_socket
        c.disconnect()
        self.assertTrue(fake_socket.close.called)
        self.assertIsNone(c._socket)
Ejemplo n.º 14
0
 def test_get_ntp_servers_no_response(self):
     c = Cube((None, None))
     c._socket = Mock(socket.socket)
     c._socket.recv = Mock(return_value=bytearray(
         "F:ntp.homematic.com,ntp.homematic.com", encoding='utf-8'))
     c.send_message = Mock()
     self.assertIsNone(c._ntp_servers)
     c.ntp_servers
     c.send_message.assert_called_with(FMessage())
     self.assertIsNone(c.ntp_servers)
Ejemplo n.º 15
0
 def test_context_manager_disconnect_on_exception(self):
     try:
         c = Cube((None, None))
         c.connect = Mock()
         c.disconnect = Mock()
         with c as cube:
             raise Exception("just a test")
     except Exception as ex:
         self.assertTrue(c.connect.called)
         self.assertTrue(c.disconnect.called)
         self.assertEqual(ex.args, ("just a test", ))
Ejemplo n.º 16
0
Archivo: cube.py Proyecto: ercpe/pymax
	def test_context_manager_disconnect_on_exception(self):
		try:
			c = Cube((None, None))
			c.connect = Mock()
			c.disconnect = Mock()
			with c as cube:
				raise Exception("just a test")
		except Exception as ex:
			self.assertTrue(c.connect.called)
			self.assertTrue(c.disconnect.called)
			self.assertEqual(ex.args, ("just a test", ))
Ejemplo n.º 17
0
 def test_rooms(self):
     c = Cube()
     c.get_message = Mock(return_value=MResponse([MResponseBytes]))
     self.assertEqual(c.rooms, [
         Room(room_id=1,
              name='Wohnzimmer',
              rf_address='122B65',
              devices=[
                  Device(rf_address='122B65',
                         serial='MEQ1472997',
                         name='Heizung'),
              ])
     ])
Ejemplo n.º 18
0
    def test_get_message(self):
        c = Cube('127.0.0.1', 62910)
        self.assertFalse(c.get_message(F_RESPONSE))

        c = Cube('127.0.0.1', 62910)
        c.parse_message(F_RESPONSE, b"ntp.homematic.com,ntp.homematic.com")
        msg = FResponse(b"ntp.homematic.com,ntp.homematic.com")
        self.assertEqual(c.get_message(F_RESPONSE), msg)
Ejemplo n.º 19
0
    def test_constructor(self):
        c = Cube('1.2.3.4')
        self.assertEqual(c.addr_port, ('1.2.3.4', 62910))

        c = Cube('1.2.3.4', 4567)
        self.assertEqual(c.addr_port, ('1.2.3.4', 4567))

        c = Cube(address='1.2.3.4')
        self.assertEqual(c.addr_port, ('1.2.3.4', 62910))

        c = Cube(address='1.2.3.4', port=9876)
        self.assertEqual(c.addr_port, ('1.2.3.4', 9876))

        c = Cube(
            DiscoveryNetworkConfigurationResponse(
                DiscoveryNetworkConfigResponseBytes))
        self.assertEqual(c.addr_port, ('10.10.10.153', 62910))
Ejemplo n.º 20
0
Archivo: cube.py Proyecto: ercpe/pymax
	def test_parse_message(self):

		for message_type, message_bytes, message_class in [
			(HELLO_RESPONSE, HelloResponseBytes, HelloResponse),
			(M_RESPONSE, MResponseBytes, MResponse),
			(CONFIGURATION_RESPONSE, CubeConfigurationBytes, ConfigurationResponse),
			(L_RESPONSE, bytearray(b"CxIrZfcSGWQ8AOsA"), LResponse),
			(F_RESPONSE, bytearray(b"ntp.homematic.com,ntp.homematic.com"), FResponse),
			(SET_RESPONSE, bytearray(b"00,0,31"), SetResponse),
		]:
			#conn = Connection((None, None), message_handler=lambda x: x)
			conn = Cube((None, None))

			conn.parse_message(message_type, message_bytes)

			self.assertEqual(len(conn.received_messages), 1)
			self.assertTrue(message_type in conn.received_messages.keys(), "Message of type %s not found in .received_messages" % message_type)
			self.assertIsInstance(conn.received_messages[message_type], message_class)
Ejemplo n.º 21
0
Archivo: cube.py Proyecto: ercpe/pymax
	def test_get_message(self):
		c = Cube('127.0.0.1', 62910)
		self.assertFalse(c.get_message(F_RESPONSE))

		c = Cube('127.0.0.1', 62910)
		c.parse_message(F_RESPONSE, b"ntp.homematic.com,ntp.homematic.com")
		msg = FResponse(b"ntp.homematic.com,ntp.homematic.com")
		self.assertEqual(c.get_message(F_RESPONSE), msg)
Ejemplo n.º 22
0
    def test_parse_message(self):

        for message_type, message_bytes, message_class in [
            (HELLO_RESPONSE, HelloResponseBytes, HelloResponse),
            (M_RESPONSE, MResponseBytes, MResponse),
            (CONFIGURATION_RESPONSE, CubeConfigurationBytes,
             ConfigurationResponse),
            (L_RESPONSE, bytearray(b"CxIrZfcSGWQ8AOsA"), LResponse),
            (F_RESPONSE, bytearray(b"ntp.homematic.com,ntp.homematic.com"),
             FResponse),
            (SET_RESPONSE, bytearray(b"00,0,31"), SetResponse),
        ]:
            #conn = Connection((None, None), message_handler=lambda x: x)
            conn = Cube((None, None))

            conn.parse_message(message_type, message_bytes)

            self.assertEqual(len(conn.received_messages), 1)
            self.assertTrue(
                message_type in conn.received_messages.keys(),
                "Message of type %s not found in .received_messages" %
                message_type)
            self.assertIsInstance(conn.received_messages[message_type],
                                  message_class)
Ejemplo n.º 23
0
def update_room(settings, room_id, temperature):
    logger.info('changing temperature of room %s to %s', room_id, temperature)

    cube_wait1()

    cube = Cube('evn-cube')
    cube.connect()

    rf_address = database.get_room_rf_address(room_id)

    cube.set_mode_manual(room_id, rf_address, temperature)

    cube.disconnect()

    cube_wait2()

    logger.info('changing temperature of room %s to %s done', room_id,
                temperature)
Ejemplo n.º 24
0
 def test_get_ntp_servers(self):
     c = Cube((None, None))
     c._socket = Mock(socket.socket)
     c._socket.recv = Mock(return_value=bytearray())
     c.send_message = Mock()
     self.assertIsNone(c._ntp_servers)
     c.ntp_servers
     c.send_message.assert_called_with(FMessage())
     c.handle_message(
         FResponse(
             bytearray("ntp.homematic.com,ntp.homematic.com",
                       encoding='utf-8')))
     self.assertEqual(c._ntp_servers,
                      [u'ntp.homematic.com', u'ntp.homematic.com'])
Ejemplo n.º 25
0
def update_cube(settings):
    cube_wait1()

    # TODO configurable hostname/ip address
    cube = Cube('evn-cube')
    cube.connect()

    cube_rooms = cube.rooms
    for cube_room in cube_rooms:
        database.save_or_update_room(cube_room)

    problems = []
    for cube_device in cube.devices:
        database.save_or_update_device(cube_device)

        submit_temperature(settings, cube_device)

        problems.extend(check_for_problems(cube_device, cube_rooms))

    cube.disconnect()

    cube_wait2()

    return problems
Ejemplo n.º 26
0
def _get_cube():
    cube_address = os.environ.get('cube_address', None)
    cube_port = os.environ.get('cube_port', 62910) or 62910
    return Cube(address=cube_address, port=cube_port)
Ejemplo n.º 27
0
        if not serial:
            response = Discovery().discover()
            if response:
                serial = response.serial
            else:
                print("No cubes found.")
                sys.exit(1)

        try:
            net_cfg_response = Discovery().discover(
                cube_serial=serial,
                discovery_type=Discovery.DISCOVERY_TYPE_NETWORK_CONFIG)
            print("Discovered cube: %s" % net_cfg_response)
            host = net_cfg_response.ip_address
        except socket.timeout as st:
            print("Could not find cube '%s': %s" % (serial, st))
            sys.exit(1)

    with Cube(host) as cube:
        print("")
        print(cube.info)

        print("")
        print("Rooms:")
        for room in cube.rooms:
            print("  %s (ID: %s, RF address: %s):" %
                  (room.name, room.room_id, room.rf_address))
            for device in room.devices:
                print("  - %s, serial: %s, RF address: %s" %
                      (device.name, device.serial, device.rf_address))
Ejemplo n.º 28
0
Archivo: cube.py Proyecto: ercpe/pymax
	def test_double_connect(self):
		c = Cube('127.0.0.1', 62910)
		c._socket = Mock(socket.socket)
		self.assertRaises(CubeConnectionException, c.connect)
Ejemplo n.º 29
0
    def test_handle_message(self):
        c = Cube(None, None)

        msg = HelloResponse(HelloResponseBytes)
        c.handle_message(msg)
        self.assertEqual(c.info, msg)

        msg = FResponse(b"ntp.homematic.com,ntp.homematic.com")
        c.handle_message(msg)
        self.assertEqual(c._ntp_servers,
                         ['ntp.homematic.com', 'ntp.homematic.com'])

        msg = MResponse(MResponseBytes)
        c.handle_message(msg)
        self.assertEqual(c.devices, [
            Device(rf_address='122B65',
                   serial='MEQ1472997',
                   name='Heizung',
                   room_id=1,
                   device_type=2),
        ])

        c = Cube(None, None)
        c._devices = DeviceList([
            Device(rf_address='122B65',
                   serial='MEQ1472997',
                   name='Heizung',
                   room_id=2,
                   device_type=2),
        ])
        msg = MResponse(MResponseBytes)
        c.handle_message(msg)
        self.assertEqual(c.devices, [
            Device(rf_address='122B65',
                   serial='MEQ1472997',
                   name='Heizung',
                   room_id=1,
                   device_type=2),
        ])

        msg = ConfigurationResponse(ThermostatConfigurationBytes)
        c.handle_message(msg)
        self.assertEqual(c.devices, [
            Device(rf_address='122B65',
                   serial='MEQ1472997',
                   name='Heizung',
                   room_id=1,
                   configuration=msg,
                   device_type=2),
        ])

        c = Cube(None, None)
        c._devices = DeviceList([
            Device(rf_address='122B65',
                   serial='MEQ1472997',
                   name='Heizung',
                   room_id=1),
        ])
        lresp = LResponse("BhIrZfcSGWQ8AOsA")
        c.handle_message(lresp)
        self.assertEqual(c.devices, [
            Device(rf_address='122B65',
                   serial='MEQ1472997',
                   name='Heizung',
                   room_id=1,
                   settings=lresp.responses[0]),
        ])
        msg = ConfigurationResponse(ThermostatConfigurationBytes)
        c.handle_message(msg)
        self.assertEqual(c.devices, [
            Device(rf_address='122B65',
                   serial='MEQ1472997',
                   name='Heizung',
                   room_id=1,
                   configuration=msg,
                   settings=lresp.responses[0]),
        ])
        # Test doesn't work, somehow the extended LResponse is wrong...
        lrespext = LResponse("CxIrZfcSGWQ8AOsF")
        c.handle_message(lrespext)
Ejemplo n.º 30
0
Archivo: cube.py Proyecto: ercpe/pymax
	def test_read_after_connect(self):
		c = Cube('127.0.0.1', 62910)
		c.read = Mock()
		c._create_socket = Mock(return_value=Mock(socket.socket))
		c.connect()
		self.assertTrue(c.read.called)
Ejemplo n.º 31
0
Archivo: cube.py Proyecto: ercpe/pymax
	def test_handle_message(self):
		c = Cube(None, None)

		msg = HelloResponse(HelloResponseBytes)
		c.handle_message(msg)
		self.assertEqual(c.info, msg)

		msg = FResponse(b"ntp.homematic.com,ntp.homematic.com")
		c.handle_message(msg)
		self.assertEqual(c._ntp_servers, ['ntp.homematic.com', 'ntp.homematic.com'])

		msg = MResponse(MResponseBytes)
		c.handle_message(msg)
		self.assertEqual(c.devices, [
			Device(rf_address='122B65', serial='MEQ1472997', name='Heizung', room_id=1, device_type=2),
		])

		c = Cube(None, None)
		c._devices = DeviceList([
			Device(rf_address='122B65', serial='MEQ1472997', name='Heizung', room_id=2, device_type=2),
		])
		msg = MResponse(MResponseBytes)
		c.handle_message(msg)
		self.assertEqual(c.devices, [
			Device(rf_address='122B65', serial='MEQ1472997', name='Heizung', room_id=1, device_type=2),
		])

		msg = ConfigurationResponse(ThermostatConfigurationBytes)
		c.handle_message(msg)
		self.assertEqual(c.devices, [
			Device(rf_address='122B65', serial='MEQ1472997', name='Heizung', room_id=1, configuration=msg, device_type=2),
		])

		c = Cube(None, None)
		c._devices = DeviceList([
			Device(rf_address='122B65', serial='MEQ1472997', name='Heizung', room_id=1),
		])
		lresp = LResponse("BhIrZfcSGWQ8AOsA")
		c.handle_message(lresp)
		self.assertEqual(c.devices, [
			Device(rf_address='122B65', serial='MEQ1472997', name='Heizung', room_id=1, settings=lresp),
		])
		msg = ConfigurationResponse(ThermostatConfigurationBytes)
		c.handle_message(msg)
		self.assertEqual(c.devices, [
			Device(rf_address='122B65', serial='MEQ1472997', name='Heizung', room_id=1, configuration=msg, settings=lresp),
		])
Ejemplo n.º 32
0
def execute(func):
    with Cube(sys.argv[1]) as cube:
        return func(cube)
Ejemplo n.º 33
0
 def test_disconnect_not_connected(self):
     c = Cube('127.0.0.1', 62910)
     c.disconnect()
Ejemplo n.º 34
0
Archivo: cube.py Proyecto: ercpe/pymax
	def test_disconnect_not_connected(self):
		c = Cube('127.0.0.1', 62910)
		c.disconnect()
Ejemplo n.º 35
0
 def test_not_connected_read(self):
     c = Cube('127.0.0.1', 62910)
     self.assertRaises(CubeConnectionException, c.read)
Ejemplo n.º 36
0
 def test_read_after_connect(self):
     c = Cube('127.0.0.1', 62910)
     c.read = Mock()
     c._create_socket = Mock(return_value=Mock(socket.socket))
     c.connect()
     self.assertTrue(c.read.called)
Ejemplo n.º 37
0
 def test_double_connect(self):
     c = Cube('127.0.0.1', 62910)
     c._socket = Mock(socket.socket)
     self.assertRaises(CubeConnectionException, c.connect)