Migrate attributes to separate sensors in Brother integration (#79932)

Migrate attributes to sensors
This commit is contained in:
Maciej Bieniek 2022-10-09 12:48:01 +00:00 committed by GitHub
parent 6eb2c96d32
commit 8176400cfd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 200 additions and 57 deletions

View File

@ -5,7 +5,6 @@ from collections.abc import Callable
from dataclasses import dataclass from dataclasses import dataclass
from datetime import datetime from datetime import datetime
import logging import logging
from typing import Any
from brother import BrotherSensors from brother import BrotherSensors
@ -41,7 +40,6 @@ class BrotherSensorRequiredKeysMixin:
"""Class for Brother entity required keys.""" """Class for Brother entity required keys."""
value: Callable[[BrotherSensors], StateType | datetime] value: Callable[[BrotherSensors], StateType | datetime]
extra_state_attrs: Callable[[BrotherSensors], dict[str, Any]]
@dataclass @dataclass
@ -58,7 +56,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
name="Status", name="Status",
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.status, value=lambda data: data.status,
extra_state_attrs=lambda _: {},
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="page_counter", key="page_counter",
@ -68,7 +65,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.page_counter, value=lambda data: data.page_counter,
extra_state_attrs=lambda _: {},
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="bw_counter", key="bw_counter",
@ -78,7 +74,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.bw_counter, value=lambda data: data.bw_counter,
extra_state_attrs=lambda _: {},
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="color_counter", key="color_counter",
@ -88,7 +83,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.color_counter, value=lambda data: data.color_counter,
extra_state_attrs=lambda _: {},
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="duplex_unit_pages_counter", key="duplex_unit_pages_counter",
@ -98,7 +92,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.duplex_unit_pages_counter, value=lambda data: data.duplex_unit_pages_counter,
extra_state_attrs=lambda _: {},
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="drum_remaining_life", key="drum_remaining_life",
@ -108,10 +101,24 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.drum_remaining_life, value=lambda data: data.drum_remaining_life,
extra_state_attrs=lambda data: { ),
ATTR_REMAINING_PAGES: data.drum_remaining_pages, BrotherSensorEntityDescription(
ATTR_COUNTER: data.drum_counter, key="drum_remaining_pages",
}, icon="mdi:chart-donut",
name="Drum remaining pages",
native_unit_of_measurement=UNIT_PAGES,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.drum_remaining_pages,
),
BrotherSensorEntityDescription(
key="drum_counter",
icon="mdi:chart-donut",
name="Drum counter",
native_unit_of_measurement=UNIT_PAGES,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.drum_counter,
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="black_drum_remaining_life", key="black_drum_remaining_life",
@ -121,10 +128,24 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.black_drum_remaining_life, value=lambda data: data.black_drum_remaining_life,
extra_state_attrs=lambda data: { ),
ATTR_REMAINING_PAGES: data.black_drum_remaining_pages, BrotherSensorEntityDescription(
ATTR_COUNTER: data.black_drum_counter, key="black_drum_remaining_pages",
}, icon="mdi:chart-donut",
name="Black drum remaining pages",
native_unit_of_measurement=UNIT_PAGES,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.black_drum_remaining_pages,
),
BrotherSensorEntityDescription(
key="black_drum_counter",
icon="mdi:chart-donut",
name="Black drum counter",
native_unit_of_measurement=UNIT_PAGES,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.black_drum_counter,
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="cyan_drum_remaining_life", key="cyan_drum_remaining_life",
@ -134,10 +155,24 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.cyan_drum_remaining_life, value=lambda data: data.cyan_drum_remaining_life,
extra_state_attrs=lambda data: { ),
ATTR_REMAINING_PAGES: data.cyan_drum_remaining_pages, BrotherSensorEntityDescription(
ATTR_COUNTER: data.cyan_drum_counter, key="cyan_drum_remaining_pages",
}, icon="mdi:chart-donut",
name="Cyan drum remaining pages",
native_unit_of_measurement=UNIT_PAGES,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.cyan_drum_remaining_pages,
),
BrotherSensorEntityDescription(
key="cyan_drum_counter",
icon="mdi:chart-donut",
name="Cyan drum counter",
native_unit_of_measurement=UNIT_PAGES,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.cyan_drum_counter,
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="magenta_drum_remaining_life", key="magenta_drum_remaining_life",
@ -147,10 +182,24 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.magenta_drum_remaining_life, value=lambda data: data.magenta_drum_remaining_life,
extra_state_attrs=lambda data: { ),
ATTR_REMAINING_PAGES: data.magenta_drum_remaining_pages, BrotherSensorEntityDescription(
ATTR_COUNTER: data.magenta_drum_counter, key="magenta_drum_remaining_pages",
}, icon="mdi:chart-donut",
name="Magenta drum remaining pages",
native_unit_of_measurement=UNIT_PAGES,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.magenta_drum_remaining_pages,
),
BrotherSensorEntityDescription(
key="magenta_drum_counter",
icon="mdi:chart-donut",
name="Magenta drum counter",
native_unit_of_measurement=UNIT_PAGES,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.magenta_drum_counter,
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="yellow_drum_remaining_life", key="yellow_drum_remaining_life",
@ -160,10 +209,24 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.yellow_drum_remaining_life, value=lambda data: data.yellow_drum_remaining_life,
extra_state_attrs=lambda data: { ),
ATTR_REMAINING_PAGES: data.yellow_drum_remaining_pages, BrotherSensorEntityDescription(
ATTR_COUNTER: data.yellow_drum_counter, key="yellow_drum_remaining_pages",
}, icon="mdi:chart-donut",
name="Yellow drum remaining pages",
native_unit_of_measurement=UNIT_PAGES,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.yellow_drum_remaining_pages,
),
BrotherSensorEntityDescription(
key="yellow_drum_counter",
icon="mdi:chart-donut",
name="Yellow drum counter",
native_unit_of_measurement=UNIT_PAGES,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.yellow_drum_counter,
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="belt_unit_remaining_life", key="belt_unit_remaining_life",
@ -173,7 +236,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.belt_unit_remaining_life, value=lambda data: data.belt_unit_remaining_life,
extra_state_attrs=lambda _: {},
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="fuser_remaining_life", key="fuser_remaining_life",
@ -183,7 +245,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.fuser_remaining_life, value=lambda data: data.fuser_remaining_life,
extra_state_attrs=lambda _: {},
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="laser_remaining_life", key="laser_remaining_life",
@ -193,7 +254,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.laser_remaining_life, value=lambda data: data.laser_remaining_life,
extra_state_attrs=lambda _: {},
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="pf_kit_1_remaining_life", key="pf_kit_1_remaining_life",
@ -203,7 +263,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.pf_kit_1_remaining_life, value=lambda data: data.pf_kit_1_remaining_life,
extra_state_attrs=lambda _: {},
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="pf_kit_mp_remaining_life", key="pf_kit_mp_remaining_life",
@ -213,7 +272,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.pf_kit_mp_remaining_life, value=lambda data: data.pf_kit_mp_remaining_life,
extra_state_attrs=lambda _: {},
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="black_toner_remaining", key="black_toner_remaining",
@ -223,7 +281,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.black_toner_remaining, value=lambda data: data.black_toner_remaining,
extra_state_attrs=lambda _: {},
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="cyan_toner_remaining", key="cyan_toner_remaining",
@ -233,7 +290,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.cyan_toner_remaining, value=lambda data: data.cyan_toner_remaining,
extra_state_attrs=lambda _: {},
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="magenta_toner_remaining", key="magenta_toner_remaining",
@ -243,7 +299,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.magenta_toner_remaining, value=lambda data: data.magenta_toner_remaining,
extra_state_attrs=lambda _: {},
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="yellow_toner_remaining", key="yellow_toner_remaining",
@ -253,7 +308,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.yellow_toner_remaining, value=lambda data: data.yellow_toner_remaining,
extra_state_attrs=lambda _: {},
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="black_ink_remaining", key="black_ink_remaining",
@ -263,7 +317,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.black_ink_remaining, value=lambda data: data.black_ink_remaining,
extra_state_attrs=lambda _: {},
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="cyan_ink_remaining", key="cyan_ink_remaining",
@ -273,7 +326,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.cyan_ink_remaining, value=lambda data: data.cyan_ink_remaining,
extra_state_attrs=lambda _: {},
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="magenta_ink_remaining", key="magenta_ink_remaining",
@ -283,7 +335,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.magenta_ink_remaining, value=lambda data: data.magenta_ink_remaining,
extra_state_attrs=lambda _: {},
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="yellow_ink_remaining", key="yellow_ink_remaining",
@ -293,7 +344,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.yellow_ink_remaining, value=lambda data: data.yellow_ink_remaining,
extra_state_attrs=lambda _: {},
), ),
BrotherSensorEntityDescription( BrotherSensorEntityDescription(
key="uptime", key="uptime",
@ -302,7 +352,6 @@ SENSOR_TYPES: tuple[BrotherSensorEntityDescription, ...] = (
device_class=SensorDeviceClass.TIMESTAMP, device_class=SensorDeviceClass.TIMESTAMP,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value=lambda data: data.uptime, value=lambda data: data.uptime,
extra_state_attrs=lambda _: {},
), ),
) )
@ -361,9 +410,6 @@ class BrotherPrinterSensor(CoordinatorEntity, SensorEntity):
"""Initialize.""" """Initialize."""
super().__init__(coordinator) super().__init__(coordinator)
self._attr_device_info = device_info self._attr_device_info = device_info
self._attr_extra_state_attributes = description.extra_state_attrs(
coordinator.data
)
self._attr_native_value = description.value(coordinator.data) self._attr_native_value = description.value(coordinator.data)
self._attr_unique_id = f"{coordinator.data.serial.lower()}_{description.key}" self._attr_unique_id = f"{coordinator.data.serial.lower()}_{description.key}"
self.entity_description = description self.entity_description = description
@ -372,7 +418,4 @@ class BrotherPrinterSensor(CoordinatorEntity, SensorEntity):
def _handle_coordinator_update(self) -> None: def _handle_coordinator_update(self) -> None:
"""Handle updated data from the coordinator.""" """Handle updated data from the coordinator."""
self._attr_native_value = self.entity_description.value(self.coordinator.data) self._attr_native_value = self.entity_description.value(self.coordinator.data)
self._attr_extra_state_attributes = self.entity_description.extra_state_attrs(
self.coordinator.data
)
self.async_write_ha_state() self.async_write_ha_state()

View File

@ -113,8 +113,6 @@ async def test_sensors(hass: HomeAssistant) -> None:
state = hass.states.get("sensor.hl_l2340dw_drum_remaining_life") state = hass.states.get("sensor.hl_l2340dw_drum_remaining_life")
assert state assert state
assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut" assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut"
assert state.attributes.get(ATTR_REMAINING_PAGES) == 11014
assert state.attributes.get(ATTR_COUNTER) == 986
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE
assert state.state == "92" assert state.state == "92"
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
@ -123,11 +121,31 @@ async def test_sensors(hass: HomeAssistant) -> None:
assert entry assert entry
assert entry.unique_id == "0123456789_drum_remaining_life" assert entry.unique_id == "0123456789_drum_remaining_life"
state = hass.states.get("sensor.hl_l2340dw_drum_remaining_pages")
assert state
assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UNIT_PAGES
assert state.state == "11014"
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.hl_l2340dw_drum_remaining_pages")
assert entry
assert entry.unique_id == "0123456789_drum_remaining_pages"
state = hass.states.get("sensor.hl_l2340dw_drum_counter")
assert state
assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UNIT_PAGES
assert state.state == "986"
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.hl_l2340dw_drum_counter")
assert entry
assert entry.unique_id == "0123456789_drum_counter"
state = hass.states.get("sensor.hl_l2340dw_black_drum_remaining_life") state = hass.states.get("sensor.hl_l2340dw_black_drum_remaining_life")
assert state assert state
assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut" assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut"
assert state.attributes.get(ATTR_REMAINING_PAGES) == 16389
assert state.attributes.get(ATTR_COUNTER) == 1611
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE
assert state.state == "92" assert state.state == "92"
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
@ -136,11 +154,31 @@ async def test_sensors(hass: HomeAssistant) -> None:
assert entry assert entry
assert entry.unique_id == "0123456789_black_drum_remaining_life" assert entry.unique_id == "0123456789_black_drum_remaining_life"
state = hass.states.get("sensor.hl_l2340dw_black_drum_remaining_pages")
assert state
assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UNIT_PAGES
assert state.state == "16389"
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.hl_l2340dw_black_drum_remaining_pages")
assert entry
assert entry.unique_id == "0123456789_black_drum_remaining_pages"
state = hass.states.get("sensor.hl_l2340dw_black_drum_counter")
assert state
assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UNIT_PAGES
assert state.state == "1611"
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.hl_l2340dw_black_drum_counter")
assert entry
assert entry.unique_id == "0123456789_black_drum_counter"
state = hass.states.get("sensor.hl_l2340dw_cyan_drum_remaining_life") state = hass.states.get("sensor.hl_l2340dw_cyan_drum_remaining_life")
assert state assert state
assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut" assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut"
assert state.attributes.get(ATTR_REMAINING_PAGES) == 16389
assert state.attributes.get(ATTR_COUNTER) == 1611
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE
assert state.state == "92" assert state.state == "92"
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
@ -149,11 +187,31 @@ async def test_sensors(hass: HomeAssistant) -> None:
assert entry assert entry
assert entry.unique_id == "0123456789_cyan_drum_remaining_life" assert entry.unique_id == "0123456789_cyan_drum_remaining_life"
state = hass.states.get("sensor.hl_l2340dw_cyan_drum_remaining_pages")
assert state
assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UNIT_PAGES
assert state.state == "16389"
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.hl_l2340dw_cyan_drum_remaining_pages")
assert entry
assert entry.unique_id == "0123456789_cyan_drum_remaining_pages"
state = hass.states.get("sensor.hl_l2340dw_cyan_drum_counter")
assert state
assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UNIT_PAGES
assert state.state == "1611"
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.hl_l2340dw_cyan_drum_counter")
assert entry
assert entry.unique_id == "0123456789_cyan_drum_counter"
state = hass.states.get("sensor.hl_l2340dw_magenta_drum_remaining_life") state = hass.states.get("sensor.hl_l2340dw_magenta_drum_remaining_life")
assert state assert state
assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut" assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut"
assert state.attributes.get(ATTR_REMAINING_PAGES) == 16389
assert state.attributes.get(ATTR_COUNTER) == 1611
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE
assert state.state == "92" assert state.state == "92"
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
@ -162,11 +220,31 @@ async def test_sensors(hass: HomeAssistant) -> None:
assert entry assert entry
assert entry.unique_id == "0123456789_magenta_drum_remaining_life" assert entry.unique_id == "0123456789_magenta_drum_remaining_life"
state = hass.states.get("sensor.hl_l2340dw_magenta_drum_remaining_pages")
assert state
assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UNIT_PAGES
assert state.state == "16389"
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.hl_l2340dw_magenta_drum_remaining_pages")
assert entry
assert entry.unique_id == "0123456789_magenta_drum_remaining_pages"
state = hass.states.get("sensor.hl_l2340dw_magenta_drum_counter")
assert state
assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UNIT_PAGES
assert state.state == "1611"
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.hl_l2340dw_magenta_drum_counter")
assert entry
assert entry.unique_id == "0123456789_magenta_drum_counter"
state = hass.states.get("sensor.hl_l2340dw_yellow_drum_remaining_life") state = hass.states.get("sensor.hl_l2340dw_yellow_drum_remaining_life")
assert state assert state
assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut" assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut"
assert state.attributes.get(ATTR_REMAINING_PAGES) == 16389
assert state.attributes.get(ATTR_COUNTER) == 1611
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE
assert state.state == "92" assert state.state == "92"
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
@ -175,6 +253,28 @@ async def test_sensors(hass: HomeAssistant) -> None:
assert entry assert entry
assert entry.unique_id == "0123456789_yellow_drum_remaining_life" assert entry.unique_id == "0123456789_yellow_drum_remaining_life"
state = hass.states.get("sensor.hl_l2340dw_yellow_drum_remaining_pages")
assert state
assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UNIT_PAGES
assert state.state == "16389"
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.hl_l2340dw_yellow_drum_remaining_pages")
assert entry
assert entry.unique_id == "0123456789_yellow_drum_remaining_pages"
state = hass.states.get("sensor.hl_l2340dw_yellow_drum_counter")
assert state
assert state.attributes.get(ATTR_ICON) == "mdi:chart-donut"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UNIT_PAGES
assert state.state == "1611"
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
entry = registry.async_get("sensor.hl_l2340dw_yellow_drum_counter")
assert entry
assert entry.unique_id == "0123456789_yellow_drum_counter"
state = hass.states.get("sensor.hl_l2340dw_fuser_remaining_life") state = hass.states.get("sensor.hl_l2340dw_fuser_remaining_life")
assert state assert state
assert state.attributes.get(ATTR_ICON) == "mdi:water-outline" assert state.attributes.get(ATTR_ICON) == "mdi:water-outline"