mirror of
https://github.com/home-assistant/core.git
synced 2026-05-19 23:35:20 +02:00
Add battery charging binary sensor to Bang & Olufsen (#160527)
Co-authored-by: Josef Zweck <josef@zweck.dev>
This commit is contained in:
@@ -72,7 +72,10 @@ TEST_NAME_4 = f"{TEST_MODEL_A5}-{TEST_SERIAL_NUMBER_4}"
|
||||
TEST_JID_4 = f"{TEST_TYPE_NUMBER}.{TEST_ITEM_NUMBER}.{TEST_SERIAL_NUMBER_4}@products.bang-olufsen.com"
|
||||
TEST_MEDIA_PLAYER_ENTITY_ID_4 = f"media_player.beosound_a5_{TEST_SERIAL_NUMBER_4}"
|
||||
TEST_HOST_4 = "192.168.0.4"
|
||||
TEST_BATTERY_A5_SENSOR_ENTITY_ID = f"sensor.beosound_a5_{TEST_SERIAL_NUMBER_4}_battery"
|
||||
TEST_BATTERY_SENSOR_ENTITY_ID = f"sensor.beosound_a5_{TEST_SERIAL_NUMBER_4}_battery"
|
||||
TEST_BATTERY_CHARGING_BINARY_SENSOR_ENTITY_ID = (
|
||||
f"binary_sensor.beosound_a5_{TEST_SERIAL_NUMBER_4}_charging"
|
||||
)
|
||||
|
||||
# Beoremote One
|
||||
TEST_REMOTE_SERIAL = "55555555"
|
||||
|
||||
@@ -131,6 +131,14 @@
|
||||
'entity_id': 'sensor.beosound_a5_44444444_battery',
|
||||
'state': '5',
|
||||
}),
|
||||
'charging': dict({
|
||||
'attributes': dict({
|
||||
'device_class': 'battery_charging',
|
||||
'friendly_name': 'Living room Balance Charging',
|
||||
}),
|
||||
'entity_id': 'binary_sensor.beosound_a5_44444444_charging',
|
||||
'state': 'off',
|
||||
}),
|
||||
'config_entry': dict({
|
||||
'data': dict({
|
||||
'host': '192.168.0.4',
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# serializer version: 1
|
||||
# name: test_button_event_creation_a5
|
||||
list([
|
||||
'binary_sensor.beosound_a5_44444444_charging',
|
||||
'event.beosound_a5_44444444_bluetooth',
|
||||
'event.beosound_a5_44444444_next',
|
||||
'event.beosound_a5_44444444_play_pause',
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
"""Test the bang_olufsen binary sensor entities."""
|
||||
|
||||
from unittest.mock import AsyncMock
|
||||
|
||||
from mozart_api.models import BatteryState
|
||||
|
||||
from homeassistant.const import STATE_OFF, STATE_ON
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_registry import EntityRegistry
|
||||
|
||||
from .conftest import mock_websocket_connection
|
||||
from .const import TEST_BATTERY, TEST_BATTERY_CHARGING_BINARY_SENSOR_ENTITY_ID
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
|
||||
async def test_battery_charging(
|
||||
hass: HomeAssistant,
|
||||
entity_registry: EntityRegistry,
|
||||
mock_mozart_client: AsyncMock,
|
||||
mock_config_entry_a5: MockConfigEntry,
|
||||
) -> None:
|
||||
"""Test the battery charging time entity."""
|
||||
# Ensure battery entities are created
|
||||
mock_mozart_client.get_battery_state.return_value = TEST_BATTERY
|
||||
|
||||
# Load entry
|
||||
mock_config_entry_a5.add_to_hass(hass)
|
||||
await hass.config_entries.async_setup(mock_config_entry_a5.entry_id)
|
||||
await mock_websocket_connection(hass, mock_mozart_client)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
# Initial state is False
|
||||
assert (states := hass.states.get(TEST_BATTERY_CHARGING_BINARY_SENSOR_ENTITY_ID))
|
||||
assert states.state == STATE_OFF
|
||||
|
||||
# Check binary sensor reacts as expected to WebSocket events
|
||||
battery_callback = mock_mozart_client.get_battery_notifications.call_args[0][0]
|
||||
|
||||
battery_callback(BatteryState(is_charging=True))
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert (states := hass.states.get(TEST_BATTERY_CHARGING_BINARY_SENSOR_ENTITY_ID))
|
||||
assert states.state == STATE_ON
|
||||
@@ -56,7 +56,6 @@ async def test_async_get_config_entry_diagnostics(
|
||||
|
||||
async def test_async_get_config_entry_diagnostics_with_battery(
|
||||
hass: HomeAssistant,
|
||||
entity_registry: EntityRegistry,
|
||||
hass_client: ClientSessionGenerator,
|
||||
mock_config_entry_a5: MockConfigEntry,
|
||||
mock_mozart_client: AsyncMock,
|
||||
|
||||
@@ -12,7 +12,7 @@ from homeassistant.core import HomeAssistant
|
||||
from .conftest import mock_websocket_connection
|
||||
from .const import (
|
||||
TEST_BATTERY,
|
||||
TEST_BATTERY_A5_SENSOR_ENTITY_ID,
|
||||
TEST_BATTERY_SENSOR_ENTITY_ID,
|
||||
TEST_REMOTE_BATTERY_LEVEL_SENSOR_ENTITY_ID,
|
||||
TEST_REMOTE_SERIAL,
|
||||
)
|
||||
@@ -34,13 +34,13 @@ async def test_battery_level(
|
||||
await hass.config_entries.async_setup(mock_config_entry_a5.entry_id)
|
||||
# Deliberately avoid triggering a battery notification
|
||||
|
||||
assert (states := hass.states.get(TEST_BATTERY_A5_SENSOR_ENTITY_ID))
|
||||
assert (states := hass.states.get(TEST_BATTERY_SENSOR_ENTITY_ID))
|
||||
assert states.state is STATE_UNKNOWN
|
||||
|
||||
# Check sensor reacts as expected to WebSocket events
|
||||
await mock_websocket_connection(hass, mock_mozart_client)
|
||||
|
||||
assert (states := hass.states.get(TEST_BATTERY_A5_SENSOR_ENTITY_ID))
|
||||
assert (states := hass.states.get(TEST_BATTERY_SENSOR_ENTITY_ID))
|
||||
assert states.state == str(TEST_BATTERY.battery_level)
|
||||
|
||||
|
||||
|
||||
@@ -11,7 +11,8 @@ from homeassistant.components.bang_olufsen.const import (
|
||||
)
|
||||
|
||||
from .const import (
|
||||
TEST_BATTERY_A5_SENSOR_ENTITY_ID,
|
||||
TEST_BATTERY_CHARGING_BINARY_SENSOR_ENTITY_ID,
|
||||
TEST_BATTERY_SENSOR_ENTITY_ID,
|
||||
TEST_MEDIA_PLAYER_ENTITY_ID,
|
||||
TEST_MEDIA_PLAYER_ENTITY_ID_2,
|
||||
TEST_MEDIA_PLAYER_ENTITY_ID_3,
|
||||
@@ -52,7 +53,8 @@ def get_a5_entity_ids() -> list[str]:
|
||||
"""Return a list of entity_ids that a Beosound A5 provides."""
|
||||
buttons = [
|
||||
TEST_MEDIA_PLAYER_ENTITY_ID_4,
|
||||
TEST_BATTERY_A5_SENSOR_ENTITY_ID,
|
||||
TEST_BATTERY_SENSOR_ENTITY_ID,
|
||||
TEST_BATTERY_CHARGING_BINARY_SENSOR_ENTITY_ID,
|
||||
*_get_button_entity_ids("beosound_a5_44444444"),
|
||||
]
|
||||
buttons.remove("event.beosound_a5_44444444_microphone")
|
||||
|
||||
Reference in New Issue
Block a user