async def test_thermostat_set_preset_comfort(hass, cube: MaxCube, thermostat: MaxThermostat): """Set preset mode to comfort.""" await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_PRESET_MODE, { ATTR_ENTITY_ID: ENTITY_ID, ATTR_PRESET_MODE: PRESET_COMFORT }, blocking=True, ) cube.set_temperature_mode.assert_called_once_with( thermostat, thermostat.comfort_temperature, MAX_DEVICE_MODE_MANUAL) thermostat.mode = MAX_DEVICE_MODE_MANUAL thermostat.target_temperature = thermostat.comfort_temperature async_fire_time_changed(hass, utcnow() + timedelta(minutes=5)) await hass.async_block_till_done() state = hass.states.get(ENTITY_ID) assert state.state == HVAC_MODE_HEAT assert state.attributes.get( ATTR_TEMPERATURE) == thermostat.comfort_temperature assert state.attributes.get(ATTR_PRESET_MODE) == PRESET_COMFORT
async def test_thermostat_set_hvac_mode_off(hass, cube: MaxCube, thermostat: MaxThermostat): """Turn off thermostat.""" await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_HVAC_MODE, { ATTR_ENTITY_ID: ENTITY_ID, ATTR_HVAC_MODE: HVAC_MODE_OFF }, blocking=True, ) cube.set_temperature_mode.assert_called_once_with(thermostat, OFF_TEMPERATURE, MAX_DEVICE_MODE_MANUAL) thermostat.mode = MAX_DEVICE_MODE_MANUAL thermostat.target_temperature = OFF_TEMPERATURE thermostat.valve_position = 0 async_fire_time_changed(hass, utcnow() + timedelta(minutes=5)) await hass.async_block_till_done() state = hass.states.get(ENTITY_ID) assert state.state == HVAC_MODE_OFF assert state.attributes.get(ATTR_TEMPERATURE) is None assert state.attributes.get(ATTR_HVAC_ACTION) == CURRENT_HVAC_OFF assert state.attributes.get(VALVE_POSITION) == 0 wall_state = hass.states.get(WALL_ENTITY_ID) assert wall_state.attributes.get(ATTR_HVAC_ACTION) == CURRENT_HVAC_OFF
def parse_m_message(self, message): logger.debug('Parsing m_message: ' + message) data = bytearray(base64.b64decode(message[2:].split(',')[2])) num_rooms = data[2] pos = 3 for _ in range(0, num_rooms): room_id = struct.unpack('bb', data[pos:pos + 2])[0] name_length = struct.unpack('bb', data[pos:pos + 2])[1] pos += 1 + 1 name = data[pos:pos + name_length].decode('utf-8') pos += name_length device_rf_address = self.parse_rf_address(data[pos:pos + 3]) pos += 3 room = MaxRoom() room.id = room_id room.name = name self.rooms.append(room) num_devices = data[pos] pos += 1 for device_idx in range(0, num_devices): device_type = data[pos] device_rf_address = self.parse_rf_address(data[pos + 1:pos + 1 + 3]) device_serial = data[pos + 4:pos + 14].decode('utf-8') device_name_length = data[pos + 14] device_name = data[pos + 15:pos + 15 + device_name_length].decode('utf-8') room_id = data[pos + 15 + device_name_length] device = self.device_by_rf(device_rf_address) if not device: if device_type == MAX_THERMOSTAT or device_type == MAX_THERMOSTAT_PLUS: device = MaxThermostat() if device_type == MAX_WINDOW_SHUTTER: device = MaxWindowShutter() if device_type == MAX_WALL_THERMOSTAT: device = MaxWallThermostat() if device: self.devices.append(device) if device: device.type = device_type device.rf_address = device_rf_address device.room_id = room_id device.name = device_name device.serial = device_serial pos += 1 + 3 + 10 + device_name_length + 2
def parse_m_message(self, message): logger.debug('Parsing m_message: ' + message) data = bytearray(base64.b64decode(message[2:].split(',')[2])) num_rooms = data[2] pos = 3 for _ in range(0, num_rooms): room_id = struct.unpack('bb', data[pos:pos + 2])[0] name_length = struct.unpack('bb', data[pos:pos + 2])[1] pos += 1 + 1 name = data[pos:pos + name_length].decode('utf-8') pos += name_length device_rf_address = ''.join("%X" % x for x in data[pos: pos + 3]) pos += 3 num_devices = data[pos] pos += 1 for device_idx in range(0, num_devices): device_type = data[pos] device_rf_address = ''.join("%X" % x for x in data[pos + 1: pos + 1 + 3]) device_name_length = data[pos + 14] device_name = data[pos + 15:pos + 15 + device_name_length].decode('utf-8') room_id = data[pos + 15 + device_name_length] device = self.device_by_rf(device_rf_address) if not device: if device_type == MAX_THERMOSTAT or device_type == MAX_THERMOSTAT_PLUS: device = MaxThermostat() if device: self.devices.append(device) if device: device.type = device_type device.rf_address = device_rf_address device.room_id = room_id device.name = device_name pos += 1 + 3 + 10 + device_name_length + 2
def parse_m_message(self, message): logger.debug('Parsing m_message: ' + message) data = bytearray(base64.b64decode(message[2:].split(',')[2])) num_rooms = data[2] pos = 3 for _ in range(0, num_rooms): room_id = struct.unpack('bb', data[pos:pos + 2])[0] name_length = struct.unpack('bb', data[pos:pos + 2])[1] pos += 1 + 1 name = data[pos:pos + name_length].decode('utf-8') pos += name_length device_rf_address = ''.join("%X" % x for x in data[pos:pos + 3]) pos += 3 room = MaxRoom() room.id = room_id room.name = name room.rf_address = device_rf_address self.rooms.append(room) num_devices = data[pos] pos += 1 for device_idx in range(0, num_devices): device_type = data[pos] device_rf_address = ''.join("%X" % x for x in data[pos + 1:pos + 1 + 3]) device_name_length = data[pos + 14] device_name = data[pos + 15:pos + 15 + device_name_length].decode('utf-8') room_id = data[pos + 15 + device_name_length] device = self.device_by_rf(device_rf_address) if not device: if device_type == MAX_THERMOSTAT or device_type == MAX_THERMOSTAT_PLUS: device = MaxThermostat() if device: self.devices.append(device) if device: device.cube = self device.type = device_type device.type_name = MAX_DEVICES[device_type] device.rf_address = device_rf_address device.room_id = room_id device.name = device_name pos += 1 + 3 + 10 + device_name_length + 2
async def test_thermostat_set_temperature(hass, cube: MaxCube, thermostat: MaxThermostat): """Set hvac mode to heat.""" await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_TEMPERATURE, { ATTR_ENTITY_ID: ENTITY_ID, ATTR_TEMPERATURE: 10.0 }, blocking=True, ) cube.set_temperature_mode.assert_called_once_with(thermostat, 10.0, None) thermostat.target_temperature = 10.0 thermostat.valve_position = 0 async_fire_time_changed(hass, utcnow() + timedelta(minutes=5)) await hass.async_block_till_done() state = hass.states.get(ENTITY_ID) assert state.state == HVAC_MODE_AUTO assert state.attributes.get(ATTR_TEMPERATURE) == 10.0 assert state.attributes.get(ATTR_HVAC_ACTION) == CURRENT_HVAC_IDLE
async def test_thermostat_set_hvac_mode_heat(hass, cube: MaxCube, thermostat: MaxThermostat): """Set hvac mode to heat.""" await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_HVAC_MODE, { ATTR_ENTITY_ID: ENTITY_ID, ATTR_HVAC_MODE: HVAC_MODE_HEAT }, blocking=True, ) cube.set_temperature_mode.assert_called_once_with(thermostat, 20.5, MAX_DEVICE_MODE_MANUAL) thermostat.mode = MAX_DEVICE_MODE_MANUAL async_fire_time_changed(hass, utcnow() + timedelta(minutes=5)) await hass.async_block_till_done() await hass.async_block_till_done() state = hass.states.get(ENTITY_ID) assert state.state == HVAC_MODE_HEAT
def testGetCurrentTemperatureReturnsNoneIfUninitialized(self): t = MaxThermostat() self.assertIsNone(t.get_current_temp_in_auto_mode())