mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 21:57:51 +00:00
Mark Tasmota status sensors as diagnostic sensors (#57958)
* Mark Tasmota status sensors as diagnostic sensors * Disable IP and firmware version sensors by default
This commit is contained in:
parent
1a978662ec
commit
2bae113748
@ -32,6 +32,7 @@ from homeassistant.const import (
|
|||||||
ELECTRIC_CURRENT_AMPERE,
|
ELECTRIC_CURRENT_AMPERE,
|
||||||
ELECTRIC_POTENTIAL_VOLT,
|
ELECTRIC_POTENTIAL_VOLT,
|
||||||
ENERGY_KILO_WATT_HOUR,
|
ENERGY_KILO_WATT_HOUR,
|
||||||
|
ENTITY_CATEGORY_DIAGNOSTIC,
|
||||||
FREQUENCY_HERTZ,
|
FREQUENCY_HERTZ,
|
||||||
LENGTH_CENTIMETERS,
|
LENGTH_CENTIMETERS,
|
||||||
LIGHT_LUX,
|
LIGHT_LUX,
|
||||||
@ -229,11 +230,23 @@ class TasmotaSensor(TasmotaAvailability, TasmotaDiscoveryUpdate, SensorEntity):
|
|||||||
)
|
)
|
||||||
return class_or_icon.get(STATE_CLASS)
|
return class_or_icon.get(STATE_CLASS)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def entity_category(self) -> str | None:
|
||||||
|
"""Return the category of the entity, if any."""
|
||||||
|
if self._tasmota_entity.quantity in status_sensor.SENSORS:
|
||||||
|
return ENTITY_CATEGORY_DIAGNOSTIC
|
||||||
|
return None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def entity_registry_enabled_default(self) -> bool:
|
def entity_registry_enabled_default(self) -> bool:
|
||||||
"""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."""
|
||||||
# Hide status sensors to not overwhelm users
|
# Hide fast changing status sensors
|
||||||
if self._tasmota_entity.quantity in status_sensor.SENSORS:
|
if self._tasmota_entity.quantity in (
|
||||||
|
hc.SENSOR_STATUS_IP,
|
||||||
|
hc.SENSOR_STATUS_RSSI,
|
||||||
|
hc.SENSOR_STATUS_SIGNAL,
|
||||||
|
hc.SENSOR_STATUS_VERSION,
|
||||||
|
):
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -148,6 +148,12 @@ async def test_controlling_state_via_mqtt(hass, mqtt_mock, setup_tasmota):
|
|||||||
assert state.state == "unavailable"
|
assert state.state == "unavailable"
|
||||||
assert not state.attributes.get(ATTR_ASSUMED_STATE)
|
assert not state.attributes.get(ATTR_ASSUMED_STATE)
|
||||||
|
|
||||||
|
entity_reg = er.async_get(hass)
|
||||||
|
entry = entity_reg.async_get("sensor.tasmota_dht11_temperature")
|
||||||
|
assert entry.disabled is False
|
||||||
|
assert entry.disabled_by is None
|
||||||
|
assert entry.entity_category is None
|
||||||
|
|
||||||
async_fire_mqtt_message(hass, "tasmota_49A3BC/tele/LWT", "Online")
|
async_fire_mqtt_message(hass, "tasmota_49A3BC/tele/LWT", "Online")
|
||||||
state = hass.states.get("sensor.tasmota_dht11_temperature")
|
state = hass.states.get("sensor.tasmota_dht11_temperature")
|
||||||
assert state.state == STATE_UNKNOWN
|
assert state.state == STATE_UNKNOWN
|
||||||
@ -769,6 +775,45 @@ async def test_indexed_sensor_attributes(hass, mqtt_mock, setup_tasmota):
|
|||||||
assert state.attributes.get("unit_of_measurement") == "ppm"
|
assert state.attributes.get("unit_of_measurement") == "ppm"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("status_sensor_disabled", [False])
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"sensor_name, disabled, disabled_by",
|
||||||
|
[
|
||||||
|
("tasmota_firmware_version", True, er.DISABLED_INTEGRATION),
|
||||||
|
("tasmota_ip", True, er.DISABLED_INTEGRATION),
|
||||||
|
("tasmota_last_restart_time", False, None),
|
||||||
|
("tasmota_mqtt_connect_count", False, None),
|
||||||
|
("tasmota_rssi", True, er.DISABLED_INTEGRATION),
|
||||||
|
("tasmota_signal", True, er.DISABLED_INTEGRATION),
|
||||||
|
("tasmota_ssid", False, None),
|
||||||
|
("tasmota_wifi_connect_count", False, None),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
async def test_diagnostic_sensors(
|
||||||
|
hass, mqtt_mock, setup_tasmota, sensor_name, disabled, disabled_by
|
||||||
|
):
|
||||||
|
"""Test properties of diagnostic sensors."""
|
||||||
|
entity_reg = er.async_get(hass)
|
||||||
|
|
||||||
|
config = copy.deepcopy(DEFAULT_CONFIG)
|
||||||
|
mac = config["mac"]
|
||||||
|
|
||||||
|
async_fire_mqtt_message(
|
||||||
|
hass,
|
||||||
|
f"{DEFAULT_PREFIX}/{mac}/config",
|
||||||
|
json.dumps(config),
|
||||||
|
)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
state = hass.states.get(f"sensor.{sensor_name}")
|
||||||
|
assert bool(state) != disabled
|
||||||
|
entry = entity_reg.async_get(f"sensor.{sensor_name}")
|
||||||
|
assert entry.disabled == disabled
|
||||||
|
assert entry.disabled_by == disabled_by
|
||||||
|
assert entry.entity_category == "diagnostic"
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("status_sensor_disabled", [False])
|
@pytest.mark.parametrize("status_sensor_disabled", [False])
|
||||||
async def test_enable_status_sensor(hass, mqtt_mock, setup_tasmota):
|
async def test_enable_status_sensor(hass, mqtt_mock, setup_tasmota):
|
||||||
"""Test enabling status sensor."""
|
"""Test enabling status sensor."""
|
||||||
@ -791,7 +836,7 @@ async def test_enable_status_sensor(hass, mqtt_mock, setup_tasmota):
|
|||||||
assert entry.disabled
|
assert entry.disabled
|
||||||
assert entry.disabled_by == er.DISABLED_INTEGRATION
|
assert entry.disabled_by == er.DISABLED_INTEGRATION
|
||||||
|
|
||||||
# Enable the status sensor
|
# Enable the signal level status sensor
|
||||||
updated_entry = entity_reg.async_update_entity(
|
updated_entry = entity_reg.async_update_entity(
|
||||||
"sensor.tasmota_signal", disabled_by=None
|
"sensor.tasmota_signal", disabled_by=None
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user