Make Brother uptime sensor disabled by default (#43478)

This commit is contained in:
Maciej Bieniek 2020-11-22 22:42:16 +01:00 committed by GitHub
parent 20db980695
commit 885e393df9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 76 additions and 14 deletions

View file

@ -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},
} }

View file

@ -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]

View file

@ -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

View file

@ -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)