From a83d38a5fefb17db7375b49ea6fdfd6adeaa7798 Mon Sep 17 00:00:00 2001 From: skynet01 Date: Wed, 2 Oct 2024 12:04:14 -0700 Subject: [PATCH] Add turn on and off function to lg_soundbar (#127022) * Update media_player.py Added support to toggle soundbars on and off * Update homeassistant/components/lg_soundbar/media_player.py Co-authored-by: Joost Lekkerkerker * Fix complexity --------- Co-authored-by: Joost Lekkerkerker --- .../components/lg_soundbar/media_player.py | 43 +++++++++++++++---- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/lg_soundbar/media_player.py b/homeassistant/components/lg_soundbar/media_player.py index 61baed1198b..cebe1d33728 100644 --- a/homeassistant/components/lg_soundbar/media_player.py +++ b/homeassistant/components/lg_soundbar/media_player.py @@ -2,6 +2,8 @@ from __future__ import annotations +from typing import Any + import temescal from homeassistant.components.media_player import ( @@ -43,6 +45,8 @@ class LGDevice(MediaPlayerEntity): _attr_supported_features = ( MediaPlayerEntityFeature.VOLUME_SET | MediaPlayerEntityFeature.VOLUME_MUTE + | MediaPlayerEntityFeature.TURN_ON + | MediaPlayerEntityFeature.TURN_OFF | MediaPlayerEntityFeature.SELECT_SOURCE | MediaPlayerEntityFeature.SELECT_SOUND_MODE ) @@ -93,14 +97,7 @@ class LGDevice(MediaPlayerEntity): """Handle responses from the speakers.""" data = response.get("data") or {} if response["msg"] == "EQ_VIEW_INFO": - if "i_bass" in data: - self._bass = data["i_bass"] - if "i_treble" in data: - self._treble = data["i_treble"] - if "ai_eq_list" in data: - self._equalisers = data["ai_eq_list"] - if "i_curr_eq" in data: - self._equaliser = data["i_curr_eq"] + self._update_equalisers(data) elif response["msg"] == "SPK_LIST_VIEW_INFO": if "i_vol" in data: self._volume = data["i_vol"] @@ -112,6 +109,11 @@ class LGDevice(MediaPlayerEntity): self._mute = data["b_mute"] if "i_curr_func" in data: self._function = data["i_curr_func"] + if "b_powerstatus" in data: + if data["b_powerstatus"]: + self._attr_state = MediaPlayerState.ON + else: + self._attr_state = MediaPlayerState.OFF elif response["msg"] == "FUNC_VIEW_INFO": if "i_curr_func" in data: self._function = data["i_curr_func"] @@ -137,6 +139,17 @@ class LGDevice(MediaPlayerEntity): self.schedule_update_ha_state() + def _update_equalisers(self, data: dict[str, Any]) -> None: + """Update the equalisers.""" + if "i_bass" in data: + self._bass = data["i_bass"] + if "i_treble" in data: + self._treble = data["i_treble"] + if "ai_eq_list" in data: + self._equalisers = data["ai_eq_list"] + if "i_curr_eq" in data: + self._equaliser = data["i_curr_eq"] + def update(self) -> None: """Trigger updates from the device.""" self._device.get_eq() @@ -204,3 +217,17 @@ class LGDevice(MediaPlayerEntity): def select_sound_mode(self, sound_mode: str) -> None: """Set Sound Mode for Receiver..""" self._device.set_eq(temescal.equalisers.index(sound_mode)) + + def turn_on(self) -> None: + """Turn the media player on.""" + self._set_power(True) + + def turn_off(self) -> None: + """Turn the media player off.""" + self._set_power(False) + + def _set_power(self, status: bool) -> None: + """Set the media player state.""" + self._device.send_packet( + {"cmd": "set", "data": {"b_powerkey": status}, "msg": "SPK_LIST_VIEW_INFO"} + )