Make Brother uptime sensor disabled by default (#43478)
This commit is contained in:
parent
20db980695
commit
885e393df9
4 changed files with 76 additions and 14 deletions
|
@ -18,6 +18,7 @@ ATTR_DRUM_COUNTER = "drum_counter"
|
||||||
ATTR_DRUM_REMAINING_LIFE = "drum_remaining_life"
|
ATTR_DRUM_REMAINING_LIFE = "drum_remaining_life"
|
||||||
ATTR_DRUM_REMAINING_PAGES = "drum_remaining_pages"
|
ATTR_DRUM_REMAINING_PAGES = "drum_remaining_pages"
|
||||||
ATTR_DUPLEX_COUNTER = "duplex_unit_pages_counter"
|
ATTR_DUPLEX_COUNTER = "duplex_unit_pages_counter"
|
||||||
|
ATTR_ENABLED = "enabled"
|
||||||
ATTR_FUSER_REMAINING_LIFE = "fuser_remaining_life"
|
ATTR_FUSER_REMAINING_LIFE = "fuser_remaining_life"
|
||||||
ATTR_ICON = "icon"
|
ATTR_ICON = "icon"
|
||||||
ATTR_LABEL = "label"
|
ATTR_LABEL = "label"
|
||||||
|
@ -51,71 +52,85 @@ SENSOR_TYPES = {
|
||||||
ATTR_ICON: "mdi:printer",
|
ATTR_ICON: "mdi:printer",
|
||||||
ATTR_LABEL: ATTR_STATUS.title(),
|
ATTR_LABEL: ATTR_STATUS.title(),
|
||||||
ATTR_UNIT: None,
|
ATTR_UNIT: None,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_PAGE_COUNTER: {
|
ATTR_PAGE_COUNTER: {
|
||||||
ATTR_ICON: "mdi:file-document-outline",
|
ATTR_ICON: "mdi:file-document-outline",
|
||||||
ATTR_LABEL: ATTR_PAGE_COUNTER.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_PAGE_COUNTER.replace("_", " ").title(),
|
||||||
ATTR_UNIT: UNIT_PAGES,
|
ATTR_UNIT: UNIT_PAGES,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_BW_COUNTER: {
|
ATTR_BW_COUNTER: {
|
||||||
ATTR_ICON: "mdi:file-document-outline",
|
ATTR_ICON: "mdi:file-document-outline",
|
||||||
ATTR_LABEL: ATTR_BW_COUNTER.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_BW_COUNTER.replace("_", " ").title(),
|
||||||
ATTR_UNIT: UNIT_PAGES,
|
ATTR_UNIT: UNIT_PAGES,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_COLOR_COUNTER: {
|
ATTR_COLOR_COUNTER: {
|
||||||
ATTR_ICON: "mdi:file-document-outline",
|
ATTR_ICON: "mdi:file-document-outline",
|
||||||
ATTR_LABEL: ATTR_COLOR_COUNTER.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_COLOR_COUNTER.replace("_", " ").title(),
|
||||||
ATTR_UNIT: UNIT_PAGES,
|
ATTR_UNIT: UNIT_PAGES,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_DUPLEX_COUNTER: {
|
ATTR_DUPLEX_COUNTER: {
|
||||||
ATTR_ICON: "mdi:file-document-outline",
|
ATTR_ICON: "mdi:file-document-outline",
|
||||||
ATTR_LABEL: ATTR_DUPLEX_COUNTER.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_DUPLEX_COUNTER.replace("_", " ").title(),
|
||||||
ATTR_UNIT: UNIT_PAGES,
|
ATTR_UNIT: UNIT_PAGES,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_DRUM_REMAINING_LIFE: {
|
ATTR_DRUM_REMAINING_LIFE: {
|
||||||
ATTR_ICON: "mdi:chart-donut",
|
ATTR_ICON: "mdi:chart-donut",
|
||||||
ATTR_LABEL: ATTR_DRUM_REMAINING_LIFE.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_DRUM_REMAINING_LIFE.replace("_", " ").title(),
|
||||||
ATTR_UNIT: PERCENTAGE,
|
ATTR_UNIT: PERCENTAGE,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_BLACK_DRUM_REMAINING_LIFE: {
|
ATTR_BLACK_DRUM_REMAINING_LIFE: {
|
||||||
ATTR_ICON: "mdi:chart-donut",
|
ATTR_ICON: "mdi:chart-donut",
|
||||||
ATTR_LABEL: ATTR_BLACK_DRUM_REMAINING_LIFE.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_BLACK_DRUM_REMAINING_LIFE.replace("_", " ").title(),
|
||||||
ATTR_UNIT: PERCENTAGE,
|
ATTR_UNIT: PERCENTAGE,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_CYAN_DRUM_REMAINING_LIFE: {
|
ATTR_CYAN_DRUM_REMAINING_LIFE: {
|
||||||
ATTR_ICON: "mdi:chart-donut",
|
ATTR_ICON: "mdi:chart-donut",
|
||||||
ATTR_LABEL: ATTR_CYAN_DRUM_REMAINING_LIFE.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_CYAN_DRUM_REMAINING_LIFE.replace("_", " ").title(),
|
||||||
ATTR_UNIT: PERCENTAGE,
|
ATTR_UNIT: PERCENTAGE,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_MAGENTA_DRUM_REMAINING_LIFE: {
|
ATTR_MAGENTA_DRUM_REMAINING_LIFE: {
|
||||||
ATTR_ICON: "mdi:chart-donut",
|
ATTR_ICON: "mdi:chart-donut",
|
||||||
ATTR_LABEL: ATTR_MAGENTA_DRUM_REMAINING_LIFE.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_MAGENTA_DRUM_REMAINING_LIFE.replace("_", " ").title(),
|
||||||
ATTR_UNIT: PERCENTAGE,
|
ATTR_UNIT: PERCENTAGE,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_YELLOW_DRUM_REMAINING_LIFE: {
|
ATTR_YELLOW_DRUM_REMAINING_LIFE: {
|
||||||
ATTR_ICON: "mdi:chart-donut",
|
ATTR_ICON: "mdi:chart-donut",
|
||||||
ATTR_LABEL: ATTR_YELLOW_DRUM_REMAINING_LIFE.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_YELLOW_DRUM_REMAINING_LIFE.replace("_", " ").title(),
|
||||||
ATTR_UNIT: PERCENTAGE,
|
ATTR_UNIT: PERCENTAGE,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_BELT_UNIT_REMAINING_LIFE: {
|
ATTR_BELT_UNIT_REMAINING_LIFE: {
|
||||||
ATTR_ICON: "mdi:current-ac",
|
ATTR_ICON: "mdi:current-ac",
|
||||||
ATTR_LABEL: ATTR_BELT_UNIT_REMAINING_LIFE.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_BELT_UNIT_REMAINING_LIFE.replace("_", " ").title(),
|
||||||
ATTR_UNIT: PERCENTAGE,
|
ATTR_UNIT: PERCENTAGE,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_FUSER_REMAINING_LIFE: {
|
ATTR_FUSER_REMAINING_LIFE: {
|
||||||
ATTR_ICON: "mdi:water-outline",
|
ATTR_ICON: "mdi:water-outline",
|
||||||
ATTR_LABEL: ATTR_FUSER_REMAINING_LIFE.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_FUSER_REMAINING_LIFE.replace("_", " ").title(),
|
||||||
ATTR_UNIT: PERCENTAGE,
|
ATTR_UNIT: PERCENTAGE,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_LASER_REMAINING_LIFE: {
|
ATTR_LASER_REMAINING_LIFE: {
|
||||||
ATTR_ICON: "mdi:spotlight-beam",
|
ATTR_ICON: "mdi:spotlight-beam",
|
||||||
ATTR_LABEL: ATTR_LASER_REMAINING_LIFE.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_LASER_REMAINING_LIFE.replace("_", " ").title(),
|
||||||
ATTR_UNIT: PERCENTAGE,
|
ATTR_UNIT: PERCENTAGE,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_PF_KIT_1_REMAINING_LIFE: {
|
ATTR_PF_KIT_1_REMAINING_LIFE: {
|
||||||
ATTR_ICON: "mdi:printer-3d",
|
ATTR_ICON: "mdi:printer-3d",
|
||||||
ATTR_LABEL: ATTR_PF_KIT_1_REMAINING_LIFE.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_PF_KIT_1_REMAINING_LIFE.replace("_", " ").title(),
|
||||||
ATTR_UNIT: PERCENTAGE,
|
ATTR_UNIT: PERCENTAGE,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_PF_KIT_MP_REMAINING_LIFE: {
|
ATTR_PF_KIT_MP_REMAINING_LIFE: {
|
||||||
ATTR_ICON: "mdi:printer-3d",
|
ATTR_ICON: "mdi:printer-3d",
|
||||||
|
@ -126,41 +141,54 @@ SENSOR_TYPES = {
|
||||||
ATTR_ICON: "mdi:printer-3d-nozzle",
|
ATTR_ICON: "mdi:printer-3d-nozzle",
|
||||||
ATTR_LABEL: ATTR_BLACK_TONER_REMAINING.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_BLACK_TONER_REMAINING.replace("_", " ").title(),
|
||||||
ATTR_UNIT: PERCENTAGE,
|
ATTR_UNIT: PERCENTAGE,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_CYAN_TONER_REMAINING: {
|
ATTR_CYAN_TONER_REMAINING: {
|
||||||
ATTR_ICON: "mdi:printer-3d-nozzle",
|
ATTR_ICON: "mdi:printer-3d-nozzle",
|
||||||
ATTR_LABEL: ATTR_CYAN_TONER_REMAINING.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_CYAN_TONER_REMAINING.replace("_", " ").title(),
|
||||||
ATTR_UNIT: PERCENTAGE,
|
ATTR_UNIT: PERCENTAGE,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_MAGENTA_TONER_REMAINING: {
|
ATTR_MAGENTA_TONER_REMAINING: {
|
||||||
ATTR_ICON: "mdi:printer-3d-nozzle",
|
ATTR_ICON: "mdi:printer-3d-nozzle",
|
||||||
ATTR_LABEL: ATTR_MAGENTA_TONER_REMAINING.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_MAGENTA_TONER_REMAINING.replace("_", " ").title(),
|
||||||
ATTR_UNIT: PERCENTAGE,
|
ATTR_UNIT: PERCENTAGE,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_YELLOW_TONER_REMAINING: {
|
ATTR_YELLOW_TONER_REMAINING: {
|
||||||
ATTR_ICON: "mdi:printer-3d-nozzle",
|
ATTR_ICON: "mdi:printer-3d-nozzle",
|
||||||
ATTR_LABEL: ATTR_YELLOW_TONER_REMAINING.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_YELLOW_TONER_REMAINING.replace("_", " ").title(),
|
||||||
ATTR_UNIT: PERCENTAGE,
|
ATTR_UNIT: PERCENTAGE,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_BLACK_INK_REMAINING: {
|
ATTR_BLACK_INK_REMAINING: {
|
||||||
ATTR_ICON: "mdi:printer-3d-nozzle",
|
ATTR_ICON: "mdi:printer-3d-nozzle",
|
||||||
ATTR_LABEL: ATTR_BLACK_INK_REMAINING.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_BLACK_INK_REMAINING.replace("_", " ").title(),
|
||||||
ATTR_UNIT: PERCENTAGE,
|
ATTR_UNIT: PERCENTAGE,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_CYAN_INK_REMAINING: {
|
ATTR_CYAN_INK_REMAINING: {
|
||||||
ATTR_ICON: "mdi:printer-3d-nozzle",
|
ATTR_ICON: "mdi:printer-3d-nozzle",
|
||||||
ATTR_LABEL: ATTR_CYAN_INK_REMAINING.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_CYAN_INK_REMAINING.replace("_", " ").title(),
|
||||||
ATTR_UNIT: PERCENTAGE,
|
ATTR_UNIT: PERCENTAGE,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_MAGENTA_INK_REMAINING: {
|
ATTR_MAGENTA_INK_REMAINING: {
|
||||||
ATTR_ICON: "mdi:printer-3d-nozzle",
|
ATTR_ICON: "mdi:printer-3d-nozzle",
|
||||||
ATTR_LABEL: ATTR_MAGENTA_INK_REMAINING.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_MAGENTA_INK_REMAINING.replace("_", " ").title(),
|
||||||
ATTR_UNIT: PERCENTAGE,
|
ATTR_UNIT: PERCENTAGE,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
},
|
},
|
||||||
ATTR_YELLOW_INK_REMAINING: {
|
ATTR_YELLOW_INK_REMAINING: {
|
||||||
ATTR_ICON: "mdi:printer-3d-nozzle",
|
ATTR_ICON: "mdi:printer-3d-nozzle",
|
||||||
ATTR_LABEL: ATTR_YELLOW_INK_REMAINING.replace("_", " ").title(),
|
ATTR_LABEL: ATTR_YELLOW_INK_REMAINING.replace("_", " ").title(),
|
||||||
ATTR_UNIT: PERCENTAGE,
|
ATTR_UNIT: PERCENTAGE,
|
||||||
|
ATTR_ENABLED: True,
|
||||||
|
},
|
||||||
|
ATTR_UPTIME: {
|
||||||
|
ATTR_ICON: None,
|
||||||
|
ATTR_LABEL: ATTR_UPTIME.title(),
|
||||||
|
ATTR_UNIT: None,
|
||||||
|
ATTR_ENABLED: False,
|
||||||
},
|
},
|
||||||
ATTR_UPTIME: {ATTR_ICON: None, ATTR_LABEL: ATTR_UPTIME.title(), ATTR_UNIT: None},
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ from .const import (
|
||||||
ATTR_DRUM_COUNTER,
|
ATTR_DRUM_COUNTER,
|
||||||
ATTR_DRUM_REMAINING_LIFE,
|
ATTR_DRUM_REMAINING_LIFE,
|
||||||
ATTR_DRUM_REMAINING_PAGES,
|
ATTR_DRUM_REMAINING_PAGES,
|
||||||
|
ATTR_ENABLED,
|
||||||
ATTR_ICON,
|
ATTR_ICON,
|
||||||
ATTR_LABEL,
|
ATTR_LABEL,
|
||||||
ATTR_MAGENTA_DRUM_COUNTER,
|
ATTR_MAGENTA_DRUM_COUNTER,
|
||||||
|
@ -139,4 +140,4 @@ class BrotherPrinterSensor(CoordinatorEntity):
|
||||||
@property
|
@property
|
||||||
def entity_registry_enabled_default(self):
|
def entity_registry_enabled_default(self):
|
||||||
"""Return if the entity should be enabled when first added to the entity registry."""
|
"""Return if the entity should be enabled when first added to the entity registry."""
|
||||||
return True
|
return SENSOR_TYPES[self.kind][ATTR_ENABLED]
|
||||||
|
|
|
@ -8,7 +8,7 @@ from tests.async_mock import patch
|
||||||
from tests.common import MockConfigEntry, load_fixture
|
from tests.common import MockConfigEntry, load_fixture
|
||||||
|
|
||||||
|
|
||||||
async def init_integration(hass) -> MockConfigEntry:
|
async def init_integration(hass, skip_setup=False) -> MockConfigEntry:
|
||||||
"""Set up the Brother integration in Home Assistant."""
|
"""Set up the Brother integration in Home Assistant."""
|
||||||
entry = MockConfigEntry(
|
entry = MockConfigEntry(
|
||||||
domain=DOMAIN,
|
domain=DOMAIN,
|
||||||
|
@ -16,12 +16,15 @@ async def init_integration(hass) -> MockConfigEntry:
|
||||||
unique_id="0123456789",
|
unique_id="0123456789",
|
||||||
data={CONF_HOST: "localhost", CONF_TYPE: "laser"},
|
data={CONF_HOST: "localhost", CONF_TYPE: "laser"},
|
||||||
)
|
)
|
||||||
with patch(
|
|
||||||
"brother.Brother._get_data",
|
entry.add_to_hass(hass)
|
||||||
return_value=json.loads(load_fixture("brother_printer_data.json")),
|
|
||||||
):
|
if not skip_setup:
|
||||||
entry.add_to_hass(hass)
|
with patch(
|
||||||
await hass.config_entries.async_setup(entry.entry_id)
|
"brother.Brother._get_data",
|
||||||
await hass.async_block_till_done()
|
return_value=json.loads(load_fixture("brother_printer_data.json")),
|
||||||
|
):
|
||||||
|
await hass.config_entries.async_setup(entry.entry_id)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
return entry
|
return entry
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from homeassistant.components.brother.const import UNIT_PAGES
|
from homeassistant.components.brother.const import DOMAIN, UNIT_PAGES
|
||||||
|
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_DEVICE_CLASS,
|
ATTR_DEVICE_CLASS,
|
||||||
ATTR_ENTITY_ID,
|
ATTR_ENTITY_ID,
|
||||||
|
@ -25,13 +26,27 @@ ATTR_COUNTER = "counter"
|
||||||
|
|
||||||
async def test_sensors(hass):
|
async def test_sensors(hass):
|
||||||
"""Test states of the sensors."""
|
"""Test states of the sensors."""
|
||||||
|
entry = await init_integration(hass, skip_setup=True)
|
||||||
|
|
||||||
|
registry = await hass.helpers.entity_registry.async_get_registry()
|
||||||
|
|
||||||
|
# Pre-create registry entries for disabled by default sensors
|
||||||
|
registry.async_get_or_create(
|
||||||
|
SENSOR_DOMAIN,
|
||||||
|
DOMAIN,
|
||||||
|
"0123456789_uptime",
|
||||||
|
suggested_object_id="hl_l2340dw_uptime",
|
||||||
|
disabled_by=None,
|
||||||
|
)
|
||||||
test_time = datetime(2019, 11, 11, 9, 10, 32, tzinfo=UTC)
|
test_time = datetime(2019, 11, 11, 9, 10, 32, tzinfo=UTC)
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.brother.sensor.utcnow", return_value=test_time
|
"homeassistant.components.brother.sensor.utcnow", return_value=test_time
|
||||||
|
), patch(
|
||||||
|
"brother.Brother._get_data",
|
||||||
|
return_value=json.loads(load_fixture("brother_printer_data.json")),
|
||||||
):
|
):
|
||||||
await init_integration(hass)
|
await hass.config_entries.async_setup(entry.entry_id)
|
||||||
|
await hass.async_block_till_done()
|
||||||
registry = await hass.helpers.entity_registry.async_get_registry()
|
|
||||||
|
|
||||||
state = hass.states.get("sensor.hl_l2340dw_status")
|
state = hass.states.get("sensor.hl_l2340dw_status")
|
||||||
assert state
|
assert state
|
||||||
|
@ -224,6 +239,21 @@ async def test_sensors(hass):
|
||||||
assert entry.unique_id == "0123456789_uptime"
|
assert entry.unique_id == "0123456789_uptime"
|
||||||
|
|
||||||
|
|
||||||
|
async def test_disabled_by_default_sensors(hass):
|
||||||
|
"""Test the disabled by default Brother sensors."""
|
||||||
|
await init_integration(hass)
|
||||||
|
|
||||||
|
registry = await hass.helpers.entity_registry.async_get_registry()
|
||||||
|
state = hass.states.get("sensor.hl_l2340dw_uptime")
|
||||||
|
assert state is None
|
||||||
|
|
||||||
|
entry = registry.async_get("sensor.hl_l2340dw_uptime")
|
||||||
|
assert entry
|
||||||
|
assert entry.unique_id == "0123456789_uptime"
|
||||||
|
assert entry.disabled
|
||||||
|
assert entry.disabled_by == "integration"
|
||||||
|
|
||||||
|
|
||||||
async def test_availability(hass):
|
async def test_availability(hass):
|
||||||
"""Ensure that we mark the entities unavailable correctly when device is offline."""
|
"""Ensure that we mark the entities unavailable correctly when device is offline."""
|
||||||
await init_integration(hass)
|
await init_integration(hass)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue