Correct Modbus platform cover restore state (#50421)

* Correct cover restore state.

* Change mock usage.

* Add states to convert.
This commit is contained in:
jan iversen 2021-05-16 08:40:19 +02:00 committed by GitHub
parent 1e11bfae05
commit 224cc779c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 59 additions and 1 deletions

View File

@ -12,6 +12,12 @@ from homeassistant.const import (
CONF_NAME, CONF_NAME,
CONF_SCAN_INTERVAL, CONF_SCAN_INTERVAL,
CONF_SLAVE, CONF_SLAVE,
STATE_CLOSED,
STATE_CLOSING,
STATE_OPEN,
STATE_OPENING,
STATE_UNAVAILABLE,
STATE_UNKNOWN,
) )
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.event import async_track_time_interval from homeassistant.helpers.event import async_track_time_interval
@ -105,7 +111,15 @@ class ModbusCover(CoverEntity, RestoreEntity):
"""Handle entity which will be added.""" """Handle entity which will be added."""
state = await self.async_get_last_state() state = await self.async_get_last_state()
if state: if state:
self._value = state.state convert = {
STATE_CLOSED: self._state_closed,
STATE_CLOSING: self._state_closing,
STATE_OPENING: self._state_opening,
STATE_OPEN: self._state_open,
STATE_UNAVAILABLE: None,
STATE_UNKNOWN: None,
}
self._value = convert[state.state]
async_track_time_interval(self.hass, self.async_update, self._scan_interval) async_track_time_interval(self.hass, self.async_update, self._scan_interval)

View File

@ -8,6 +8,11 @@ from homeassistant.components.modbus.const import (
CALL_TYPE_COIL, CALL_TYPE_COIL,
CALL_TYPE_REGISTER_HOLDING, CALL_TYPE_REGISTER_HOLDING,
CONF_REGISTER, CONF_REGISTER,
CONF_STATE_CLOSED,
CONF_STATE_CLOSING,
CONF_STATE_OPEN,
CONF_STATE_OPENING,
CONF_STATUS_REGISTER,
CONF_STATUS_REGISTER_TYPE, CONF_STATUS_REGISTER_TYPE,
) )
from homeassistant.const import ( from homeassistant.const import (
@ -16,11 +21,16 @@ from homeassistant.const import (
CONF_SCAN_INTERVAL, CONF_SCAN_INTERVAL,
CONF_SLAVE, CONF_SLAVE,
STATE_CLOSED, STATE_CLOSED,
STATE_CLOSING,
STATE_OPEN, STATE_OPEN,
STATE_OPENING,
) )
from homeassistant.core import State
from .conftest import ReadResult, base_config_test, base_test, prepare_service_update from .conftest import ReadResult, base_config_test, base_test, prepare_service_update
from tests.common import mock_restore_cache
@pytest.mark.parametrize( @pytest.mark.parametrize(
"do_options", "do_options",
@ -202,3 +212,37 @@ async def test_service_cover_update(hass, mock_pymodbus):
"homeassistant", "update_entity", {"entity_id": entity_id}, blocking=True "homeassistant", "update_entity", {"entity_id": entity_id}, blocking=True
) )
assert hass.states.get(entity_id).state == STATE_OPEN assert hass.states.get(entity_id).state == STATE_OPEN
@pytest.mark.parametrize(
"state", [STATE_CLOSED, STATE_CLOSING, STATE_OPENING, STATE_OPEN]
)
async def test_restore_state_cover(hass, state):
"""Run test for cover restore state."""
entity_id = "cover.test"
cover_name = "test"
config = {
CONF_NAME: cover_name,
CALL_TYPE_COIL: 1234,
CONF_STATE_OPEN: 1,
CONF_STATE_CLOSED: 0,
CONF_STATE_OPENING: 2,
CONF_STATE_CLOSING: 3,
CONF_STATUS_REGISTER: 1234,
CONF_STATUS_REGISTER_TYPE: CALL_TYPE_REGISTER_HOLDING,
}
mock_restore_cache(
hass,
(State(f"{entity_id}", state),),
)
await base_config_test(
hass,
config,
cover_name,
COVER_DOMAIN,
CONF_COVERS,
None,
method_discovery=True,
)
assert hass.states.get(entity_id).state == state