mirror of
https://github.com/Electric-Special/ha-core.git
synced 2026-03-21 03:03:17 +01:00
Tidy up various Huawei LTE sensor values for display (#159728)
This commit is contained in:
@@ -6,6 +6,7 @@ from bisect import bisect
|
||||
from collections.abc import Callable, Sequence
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime, timedelta
|
||||
import ipaddress
|
||||
import logging
|
||||
import re
|
||||
|
||||
@@ -85,6 +86,17 @@ def format_last_reset_elapsed_seconds(value: str | None) -> datetime | None:
|
||||
return last_reset
|
||||
|
||||
|
||||
def format_ipv6(value: StateType) -> tuple[StateType, str | None]:
|
||||
"""Format an IPv6 address for tidy display.
|
||||
|
||||
Raw values from the device may contain uppercase and redundant segments.
|
||||
"""
|
||||
try:
|
||||
return str(ipaddress.IPv6Address(str(value))), None
|
||||
except ValueError:
|
||||
return value, None
|
||||
|
||||
|
||||
def signal_icon(limits: Sequence[int], value: StateType) -> str:
|
||||
"""Get signal icon."""
|
||||
return (
|
||||
@@ -139,6 +151,7 @@ SENSOR_META: dict[str, HuaweiSensorGroup] = {
|
||||
key="uptime",
|
||||
translation_key="uptime",
|
||||
native_unit_of_measurement=UnitOfTime.SECONDS,
|
||||
suggested_display_precision=0,
|
||||
device_class=SensorDeviceClass.DURATION,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
@@ -151,6 +164,7 @@ SENSOR_META: dict[str, HuaweiSensorGroup] = {
|
||||
"WanIPv6Address": HuaweiSensorEntityDescription(
|
||||
key="WanIPv6Address",
|
||||
translation_key="wan_ipv6_address",
|
||||
format_fn=format_ipv6,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
},
|
||||
@@ -200,11 +214,13 @@ SENSOR_META: dict[str, HuaweiSensorGroup] = {
|
||||
translation_key="downlink_bandwidth",
|
||||
# https://en.wikipedia.org/wiki/LTE_frequency_bands, arbitrary
|
||||
icon_fn=lambda x: bandwidth_icon((8, 15), x),
|
||||
suggested_display_precision=0,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
"dlfrequency": HuaweiSensorEntityDescription(
|
||||
key="dlfrequency",
|
||||
translation_key="downlink_frequency",
|
||||
suggested_display_precision=0,
|
||||
device_class=SensorDeviceClass.FREQUENCY,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
@@ -317,6 +333,7 @@ SENSOR_META: dict[str, HuaweiSensorGroup] = {
|
||||
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
|
||||
# https://wiki.teltonika-networks.com/view/RSRP_and_RSRQ
|
||||
icon_fn=lambda x: signal_icon((-100, -90, -80), x),
|
||||
suggested_display_precision=0,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
entity_registry_enabled_default=True,
|
||||
@@ -337,6 +354,7 @@ SENSOR_META: dict[str, HuaweiSensorGroup] = {
|
||||
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
|
||||
# https://wiki.teltonika-networks.com/view/SINR
|
||||
icon_fn=lambda x: signal_icon((0, 13, 20), x),
|
||||
suggested_display_precision=0,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
entity_registry_enabled_default=True,
|
||||
@@ -360,6 +378,7 @@ SENSOR_META: dict[str, HuaweiSensorGroup] = {
|
||||
translation_key="nrulbandwidth",
|
||||
# https://en.wikipedia.org/wiki/5G_NR_frequency_bands, arbitrary
|
||||
icon_fn=lambda x: bandwidth_icon((33, 66), x),
|
||||
suggested_display_precision=0,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
"nrulmcs": HuaweiSensorEntityDescription(
|
||||
@@ -402,6 +421,7 @@ SENSOR_META: dict[str, HuaweiSensorGroup] = {
|
||||
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
|
||||
# https://wiki.teltonika-networks.com/view/RSRP_and_RSRQ
|
||||
icon_fn=lambda x: signal_icon((-100, -90, -80), x),
|
||||
suggested_display_precision=0,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
entity_registry_enabled_default=True,
|
||||
@@ -422,6 +442,7 @@ SENSOR_META: dict[str, HuaweiSensorGroup] = {
|
||||
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
|
||||
# https://wiki.teltonika-networks.com/view/RSSI
|
||||
icon_fn=lambda x: signal_icon((-95, -85, -75), x),
|
||||
suggested_display_precision=0,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
entity_registry_enabled_default=True,
|
||||
@@ -443,6 +464,7 @@ SENSOR_META: dict[str, HuaweiSensorGroup] = {
|
||||
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
|
||||
# https://wiki.teltonika-networks.com/view/SINR
|
||||
icon_fn=lambda x: signal_icon((0, 13, 20), x),
|
||||
suggested_display_precision=0,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
entity_registry_enabled_default=True,
|
||||
@@ -486,17 +508,20 @@ SENSOR_META: dict[str, HuaweiSensorGroup] = {
|
||||
translation_key="uplink_bandwidth",
|
||||
# https://en.wikipedia.org/wiki/LTE_frequency_bands, arbitrary
|
||||
icon_fn=lambda x: bandwidth_icon((8, 15), x),
|
||||
suggested_display_precision=0,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
"ulfrequency": HuaweiSensorEntityDescription(
|
||||
key="ulfrequency",
|
||||
translation_key="uplink_frequency",
|
||||
suggested_display_precision=0,
|
||||
device_class=SensorDeviceClass.FREQUENCY,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
"wdlfreq": HuaweiSensorEntityDescription(
|
||||
key="wdlfreq",
|
||||
translation_key="wdlfreq",
|
||||
suggested_display_precision=0,
|
||||
device_class=SensorDeviceClass.FREQUENCY,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
@@ -583,6 +608,7 @@ SENSOR_META: dict[str, HuaweiSensorGroup] = {
|
||||
"PrimaryIPv6Dns": HuaweiSensorEntityDescription(
|
||||
key="PrimaryIPv6Dns",
|
||||
translation_key="primary_ipv6_dns_server",
|
||||
format_fn=format_ipv6,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
"SecondaryDns": HuaweiSensorEntityDescription(
|
||||
@@ -593,6 +619,7 @@ SENSOR_META: dict[str, HuaweiSensorGroup] = {
|
||||
"SecondaryIPv6Dns": HuaweiSensorEntityDescription(
|
||||
key="SecondaryIPv6Dns",
|
||||
translation_key="secondary_ipv6_dns_server",
|
||||
format_fn=format_ipv6,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
},
|
||||
@@ -604,6 +631,7 @@ SENSOR_META: dict[str, HuaweiSensorGroup] = {
|
||||
key="CurrentConnectTime",
|
||||
translation_key="current_connection_duration",
|
||||
native_unit_of_measurement=UnitOfTime.SECONDS,
|
||||
suggested_display_precision=0,
|
||||
device_class=SensorDeviceClass.DURATION,
|
||||
),
|
||||
"CurrentDownload": HuaweiSensorEntityDescription(
|
||||
@@ -652,6 +680,7 @@ SENSOR_META: dict[str, HuaweiSensorGroup] = {
|
||||
key="TotalConnectTime",
|
||||
translation_key="total_connected_duration",
|
||||
native_unit_of_measurement=UnitOfTime.SECONDS,
|
||||
suggested_display_precision=0,
|
||||
device_class=SensorDeviceClass.DURATION,
|
||||
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user