Compare commits

...

5 Commits

Author SHA1 Message Date
samuelspagl 3cd85adb1a Update Changelog, fix bug 2024-02-08 16:30:17 +01:00
samuelspagl c61b2ba3f2 Merge branch 'feature/add-volume-sensor' of https://github.com/samuelspagl/ha_samsung_soundbar into feature/add-volume-sensor 2024-01-15 14:28:39 +01:00
samuelspagl d4b3d10525 Fix export of additional information 2024-01-15 14:27:26 +01:00
Samuel Spagl b5794f3c1b
Fix scaling on sensor
Previously the sensor was displaying the scaled amount applied to the slider / number (between 0 and 1). Now it is displaying the raw value.
2024-01-02 21:18:34 +01:00
samuelspagl cf80dfdb07 add sensor entity for the volume of the soundbar 2023-12-14 20:37:58 +01:00
6 changed files with 86 additions and 22 deletions

1
.gitignore vendored
View File

@ -2,6 +2,7 @@
__pycache__/
*.py[cod]
*$py.class
.DS_store
# C extensions
*.so

View File

@ -0,0 +1,18 @@
# Changelog
## [0.2.0] Add volume sensor - 2024-02-08
### Added
- add new sensor entity for the volume
### Fix
- remove `extra_state_attributes` from `media_player` instance:
The property caused some unwanted side-effects on some systems.
## [0.1.0] 🎉 First Version
### Added
- first version, gonna extend this Changelog sometime :D

View File

@ -6,19 +6,14 @@ from homeassistant.helpers.aiohttp_client import async_get_clientsession
from pysmartthings import SmartThings
from .api_extension.SoundbarDevice import SoundbarDevice
from .const import (
CONF_ENTRY_API_KEY,
CONF_ENTRY_DEVICE_ID,
CONF_ENTRY_DEVICE_NAME,
CONF_ENTRY_MAX_VOLUME,
SUPPORTED_DOMAINS,
DOMAIN,
)
from .const import (CONF_ENTRY_API_KEY, CONF_ENTRY_DEVICE_ID,
CONF_ENTRY_DEVICE_NAME, CONF_ENTRY_MAX_VOLUME, DOMAIN,
SUPPORTED_DOMAINS)
from .models import DeviceConfig, SoundbarConfig
_LOGGER = logging.getLogger(__name__)
PLATFORMS = ["media_player", "switch", "image", "number", "select"]
PLATFORMS = ["media_player", "switch", "image", "number", "select", "sensor"]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
@ -47,15 +42,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
)
session = async_get_clientsession(hass)
soundbar_device = SoundbarDevice(
smart_things_device,
session,
entry.data.get(CONF_ENTRY_MAX_VOLUME),
entry.data.get(CONF_ENTRY_DEVICE_NAME),
)
smart_things_device,
session,
entry.data.get(CONF_ENTRY_MAX_VOLUME),
entry.data.get(CONF_ENTRY_DEVICE_NAME),
)
await soundbar_device.update()
domain_config.devices[entry.data.get(CONF_ENTRY_DEVICE_ID)] = DeviceConfig(
entry.data,
soundbar_device
entry.data, soundbar_device
)
_LOGGER.info(f"[{DOMAIN}] after initializing Soundbar device")

View File

@ -8,5 +8,5 @@
"iot_class": "cloud_polling",
"issue_tracker": "https://github.com/samuelspagl/ha_samsung_soundbar/issues",
"requirements": ["pysmartthings"],
"version": "0.1.0"
"version": "0.2.0"
}

View File

@ -1,5 +1,5 @@
import logging
from typing import Mapping, Any
from typing import Any, Mapping
from homeassistant.components.media_player import (
DEVICE_CLASS_SPEAKER,
@ -20,7 +20,6 @@ from homeassistant.components.media_player.const import (
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.entity import DeviceInfo, generate_entity_id
from .models import DeviceConfig
from .api_extension.SoundbarDevice import SoundbarDevice
from .const import (
CONF_ENTRY_API_KEY,
@ -29,6 +28,7 @@ from .const import (
CONF_ENTRY_MAX_VOLUME,
DOMAIN,
)
from .models import DeviceConfig
_LOGGER = logging.getLogger(__name__)
@ -191,6 +191,8 @@ class SmartThingsSoundbarMediaPlayer(MediaPlayerEntity):
async def async_media_stop(self):
await self.device.media_stop()
@property
def extra_state_attributes(self) -> Mapping[str, Any] | None:
return self.device.retrieve_data
# This property can be uncommented for some extra_attributes
# Still enabling this can cause side-effects.
# @property
# def extra_state_attributes(self) -> Mapping[str, Any] | None:
# return {"device_information": self.device.retrieve_data}

View File

@ -0,0 +1,49 @@
import logging
from homeassistant.components.sensor import SensorEntity, SensorDeviceClass, SensorStateClass
from .models import DeviceConfig
from .api_extension.SoundbarDevice import SoundbarDevice
from .const import CONF_ENTRY_DEVICE_ID, DOMAIN
from homeassistant.helpers.entity import DeviceInfo
_LOGGER = logging.getLogger(__name__)
async def async_setup_entry(hass, config_entry, async_add_entities):
domain_data = hass.data[DOMAIN]
entities = []
for key in domain_data.devices:
device_config: DeviceConfig = domain_data.devices[key]
device = device_config.device
if device.device_id == config_entry.data.get(CONF_ENTRY_DEVICE_ID):
entities.append(
VolumeSensor(device, "volume_level")
)
async_add_entities(entities)
return True
class VolumeSensor(SensorEntity):
def __init__(self, device: SoundbarDevice, append_unique_id: str):
self.entity_id = f"sensor.{device.device_name}_{append_unique_id}"
self.__device = device
self._attr_unique_id = f"{device.device_id}_sw_{append_unique_id}"
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, self.__device.device_id)},
name=self.__device.device_name,
manufacturer=self.__device.manufacturer,
model=self.__device.model,
sw_version=self.__device.firmware_version,
)
self.__append_unique_id = append_unique_id
_attr_device_class = SensorDeviceClass.VOLUME
def update(self) -> None:
"""Fetch new state data for the sensor.
This is the only method that should fetch new data for Home Assistant.
"""
self._attr_native_value = self.__device.device.status.volume