Optimized state handling of Panasonic Viera TVs (#42913)
This commit is contained in:
parent
890eaf840c
commit
d99118f6ba
1 changed files with 19 additions and 17 deletions
|
@ -66,7 +66,6 @@ async def async_setup(hass, config):
|
||||||
|
|
||||||
async def async_setup_entry(hass, config_entry):
|
async def async_setup_entry(hass, config_entry):
|
||||||
"""Set up Panasonic Viera from a config entry."""
|
"""Set up Panasonic Viera from a config entry."""
|
||||||
|
|
||||||
panasonic_viera_data = hass.data.setdefault(DOMAIN, {})
|
panasonic_viera_data = hass.data.setdefault(DOMAIN, {})
|
||||||
|
|
||||||
config = config_entry.data
|
config = config_entry.data
|
||||||
|
@ -162,7 +161,6 @@ class Remote:
|
||||||
|
|
||||||
async def async_create_remote_control(self, during_setup=False):
|
async def async_create_remote_control(self, during_setup=False):
|
||||||
"""Create remote control."""
|
"""Create remote control."""
|
||||||
control_existed = self._control is not None
|
|
||||||
try:
|
try:
|
||||||
params = {}
|
params = {}
|
||||||
if self._app_id and self._encryption_key:
|
if self._app_id and self._encryption_key:
|
||||||
|
@ -173,17 +171,14 @@ class Remote:
|
||||||
partial(RemoteControl, self._host, self._port, **params)
|
partial(RemoteControl, self._host, self._port, **params)
|
||||||
)
|
)
|
||||||
|
|
||||||
self.state = STATE_ON
|
if during_setup:
|
||||||
self.available = True
|
await self.async_update()
|
||||||
except (TimeoutError, URLError, SOAPError, OSError) as err:
|
except (TimeoutError, URLError, SOAPError, OSError) as err:
|
||||||
if control_existed or during_setup:
|
|
||||||
_LOGGER.debug("Could not establish remote connection: %s", err)
|
_LOGGER.debug("Could not establish remote connection: %s", err)
|
||||||
|
|
||||||
self._control = None
|
self._control = None
|
||||||
self.state = STATE_OFF
|
self.state = STATE_OFF
|
||||||
self.available = self._on_action is not None
|
self.available = self._on_action is not None
|
||||||
except Exception as err: # pylint: disable=broad-except
|
except Exception as err: # pylint: disable=broad-except
|
||||||
if control_existed or during_setup:
|
|
||||||
_LOGGER.exception("An unknown error occurred: %s", err)
|
_LOGGER.exception("An unknown error occurred: %s", err)
|
||||||
self._control = None
|
self._control = None
|
||||||
self.state = STATE_OFF
|
self.state = STATE_OFF
|
||||||
|
@ -215,16 +210,15 @@ class Remote:
|
||||||
"""Turn on the TV."""
|
"""Turn on the TV."""
|
||||||
if self._on_action is not None:
|
if self._on_action is not None:
|
||||||
await self._on_action.async_run(context=context)
|
await self._on_action.async_run(context=context)
|
||||||
self.state = STATE_ON
|
await self.async_update()
|
||||||
elif self.state != STATE_ON:
|
elif self.state != STATE_ON:
|
||||||
await self.async_send_key(Keys.power)
|
await self.async_send_key(Keys.power)
|
||||||
self.state = STATE_ON
|
await self.async_update()
|
||||||
|
|
||||||
async def async_turn_off(self):
|
async def async_turn_off(self):
|
||||||
"""Turn off the TV."""
|
"""Turn off the TV."""
|
||||||
if self.state != STATE_OFF:
|
if self.state != STATE_OFF:
|
||||||
await self.async_send_key(Keys.power)
|
await self.async_send_key(Keys.power)
|
||||||
self.state = STATE_OFF
|
|
||||||
await self.async_update()
|
await self.async_update()
|
||||||
|
|
||||||
async def async_set_mute(self, enable):
|
async def async_set_mute(self, enable):
|
||||||
|
@ -252,12 +246,20 @@ class Remote:
|
||||||
async def _handle_errors(self, func, *args):
|
async def _handle_errors(self, func, *args):
|
||||||
"""Handle errors from func, set available and reconnect if needed."""
|
"""Handle errors from func, set available and reconnect if needed."""
|
||||||
try:
|
try:
|
||||||
return await self._hass.async_add_executor_job(func, *args)
|
result = await self._hass.async_add_executor_job(func, *args)
|
||||||
|
self.state = STATE_ON
|
||||||
|
self.available = True
|
||||||
|
return result
|
||||||
except EncryptionRequired:
|
except EncryptionRequired:
|
||||||
_LOGGER.error(
|
_LOGGER.error(
|
||||||
"The connection couldn't be encrypted. Please reconfigure your TV"
|
"The connection couldn't be encrypted. Please reconfigure your TV"
|
||||||
)
|
)
|
||||||
except (TimeoutError, URLError, SOAPError, OSError):
|
self.available = False
|
||||||
|
except (SOAPError):
|
||||||
|
self.state = STATE_OFF
|
||||||
|
self.available = True
|
||||||
|
await self.async_create_remote_control()
|
||||||
|
except (TimeoutError, URLError, OSError):
|
||||||
self.state = STATE_OFF
|
self.state = STATE_OFF
|
||||||
self.available = self._on_action is not None
|
self.available = self._on_action is not None
|
||||||
await self.async_create_remote_control()
|
await self.async_create_remote_control()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue