Add entity name and translations to Netgear LTE (#106599)

This commit is contained in:
Robert Hillis 2023-12-29 05:07:56 -05:00 committed by GitHub
parent 149fdfb802
commit 27bdbc6600
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 95 additions and 24 deletions

View File

@ -16,13 +16,16 @@ from .entity import LTEEntity
BINARY_SENSORS: tuple[BinarySensorEntityDescription, ...] = (
BinarySensorEntityDescription(
key="roaming",
translation_key="roaming",
),
BinarySensorEntityDescription(
key="wire_connected",
translation_key="wire_connected",
device_class=BinarySensorDeviceClass.CONNECTIVITY,
),
BinarySensorEntityDescription(
key="mobile_connected",
translation_key="mobile_connected",
device_class=BinarySensorDeviceClass.CONNECTIVITY,
),
)

View File

@ -13,6 +13,7 @@ from .const import DISPATCHER_NETGEAR_LTE, DOMAIN, MANUFACTURER
class LTEEntity(Entity):
"""Base LTE entity."""
_attr_has_entity_name = True
_attr_should_poll = False
def __init__(
@ -24,7 +25,6 @@ class LTEEntity(Entity):
"""Initialize a Netgear LTE entity."""
self.entity_description = description
self.modem_data = modem_data
self._attr_name = f"Netgear LTE {description.key}"
self._attr_unique_id = f"{description.key}_{modem_data.data.serial_number}"
self._attr_device_info = DeviceInfo(
configuration_url=f"http://{config_entry.data[CONF_HOST]}",

View File

@ -34,39 +34,53 @@ class NetgearLTESensorEntityDescription(SensorEntityDescription):
SENSORS: tuple[NetgearLTESensorEntityDescription, ...] = (
NetgearLTESensorEntityDescription(
key="sms",
translation_key="sms",
native_unit_of_measurement="unread",
value_fn=lambda modem_data: sum(1 for x in modem_data.data.sms if x.unread),
),
NetgearLTESensorEntityDescription(
key="sms_total",
translation_key="sms_total",
native_unit_of_measurement="messages",
value_fn=lambda modem_data: len(modem_data.data.sms),
),
NetgearLTESensorEntityDescription(
key="usage",
translation_key="usage",
device_class=SensorDeviceClass.DATA_SIZE,
native_unit_of_measurement=UnitOfInformation.MEBIBYTES,
value_fn=lambda modem_data: round(modem_data.data.usage / 1024**2, 1),
),
NetgearLTESensorEntityDescription(
key="radio_quality",
translation_key="radio_quality",
native_unit_of_measurement=PERCENTAGE,
),
NetgearLTESensorEntityDescription(
key="rx_level",
translation_key="rx_level",
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
),
NetgearLTESensorEntityDescription(
key="tx_level",
translation_key="tx_level",
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
),
NetgearLTESensorEntityDescription(key="upstream"),
NetgearLTESensorEntityDescription(key="connection_text"),
NetgearLTESensorEntityDescription(key="connection_type"),
NetgearLTESensorEntityDescription(key="current_ps_service_type"),
NetgearLTESensorEntityDescription(key="register_network_display"),
NetgearLTESensorEntityDescription(key="current_band"),
NetgearLTESensorEntityDescription(key="cell_id"),
NetgearLTESensorEntityDescription(key="upstream", translation_key="upstream"),
NetgearLTESensorEntityDescription(
key="connection_text", translation_key="connection_text"
),
NetgearLTESensorEntityDescription(
key="connection_type", translation_key="connection_type"
),
NetgearLTESensorEntityDescription(
key="current_ps_service_type", translation_key="service_type"
),
NetgearLTESensorEntityDescription(
key="register_network_display", translation_key="register_network_display"
),
NetgearLTESensorEntityDescription(key="current_band", translation_key="band"),
NetgearLTESensorEntityDescription(key="cell_id", translation_key="cell_id"),
)

View File

@ -80,5 +80,59 @@
}
}
}
},
"entity": {
"binary_sensor": {
"mobile_connected": {
"name": "Mobile connected"
},
"roaming": {
"name": "Roaming"
},
"wire_connected": {
"name": "Wire connected"
}
},
"sensor": {
"band": {
"name": "Current band"
},
"cell_id": {
"name": "Cell ID"
},
"connection_text": {
"name": "Connection text"
},
"connection_type": {
"name": "Connection type"
},
"radio_quality": {
"name": "Radio quality"
},
"register_network_display": {
"name": "Register network display"
},
"rx_level": {
"name": "Rx level"
},
"service_type": {
"name": "Service type"
},
"sms": {
"name": "SMS"
},
"sms_total": {
"name": "SMS total"
},
"tx_level": {
"name": "Tx level"
},
"upstream": {
"name": "Upstream"
},
"usage": {
"name": "Usage"
}
}
}
}

View File

@ -9,11 +9,11 @@ from homeassistant.core import HomeAssistant
@pytest.mark.usefixtures("setup_integration", "entity_registry_enabled_by_default")
async def test_binary_sensors(hass: HomeAssistant) -> None:
"""Test for successfully setting up the Netgear LTE binary sensor platform."""
state = hass.states.get("binary_sensor.netgear_lte_mobile_connected")
state = hass.states.get("binary_sensor.netgear_lm1200_mobile_connected")
assert state.state == STATE_ON
assert state.attributes[ATTR_DEVICE_CLASS] == BinarySensorDeviceClass.CONNECTIVITY
state = hass.states.get("binary_sensor.netgear_lte_wire_connected")
state = hass.states.get("binary_sensor.netgear_lm1200_wire_connected")
assert state.state == STATE_OFF
assert state.attributes[ATTR_DEVICE_CLASS] == BinarySensorDeviceClass.CONNECTIVITY
state = hass.states.get("binary_sensor.netgear_lte_roaming")
state = hass.states.get("binary_sensor.netgear_lm1200_roaming")
assert state.state == STATE_OFF

View File

@ -15,42 +15,42 @@ from homeassistant.core import HomeAssistant
@pytest.mark.usefixtures("setup_integration", "entity_registry_enabled_by_default")
async def test_sensors(hass: HomeAssistant) -> None:
"""Test for successfully setting up the Netgear LTE sensor platform."""
state = hass.states.get("sensor.netgear_lte_cell_id")
state = hass.states.get("sensor.netgear_lm1200_cell_id")
assert state.state == "12345678"
state = hass.states.get("sensor.netgear_lte_connection_text")
state = hass.states.get("sensor.netgear_lm1200_connection_text")
assert state.state == "4G"
state = hass.states.get("sensor.netgear_lte_connection_type")
state = hass.states.get("sensor.netgear_lm1200_connection_type")
assert state.state == "IPv4AndIPv6"
state = hass.states.get("sensor.netgear_lte_current_band")
state = hass.states.get("sensor.netgear_lm1200_current_band")
assert state.state == "LTE B4"
state = hass.states.get("sensor.netgear_lte_current_ps_service_type")
state = hass.states.get("sensor.netgear_lm1200_service_type")
assert state.state == "LTE"
state = hass.states.get("sensor.netgear_lte_radio_quality")
state = hass.states.get("sensor.netgear_lm1200_radio_quality")
assert state.state == "52"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE
state = hass.states.get("sensor.netgear_lte_register_network_display")
state = hass.states.get("sensor.netgear_lm1200_register_network_display")
assert state.state == "T-Mobile"
state = hass.states.get("sensor.netgear_lte_rx_level")
state = hass.states.get("sensor.netgear_lm1200_rx_level")
assert state.state == "-113"
assert (
state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)
== SIGNAL_STRENGTH_DECIBELS_MILLIWATT
)
state = hass.states.get("sensor.netgear_lte_sms")
state = hass.states.get("sensor.netgear_lm1200_sms")
assert state.state == "1"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == "unread"
state = hass.states.get("sensor.netgear_lte_sms_total")
state = hass.states.get("sensor.netgear_lm1200_sms_total")
assert state.state == "1"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == "messages"
state = hass.states.get("sensor.netgear_lte_tx_level")
state = hass.states.get("sensor.netgear_lm1200_tx_level")
assert state.state == "4"
assert (
state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)
== SIGNAL_STRENGTH_DECIBELS_MILLIWATT
)
state = hass.states.get("sensor.netgear_lte_upstream")
state = hass.states.get("sensor.netgear_lm1200_upstream")
assert state.state == "LTE"
state = hass.states.get("sensor.netgear_lte_usage")
state = hass.states.get("sensor.netgear_lm1200_usage")
assert state.state == "40.5"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfInformation.MEBIBYTES
assert state.attributes[ATTR_DEVICE_CLASS] == SensorDeviceClass.DATA_SIZE