Skip to content
Closed
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions custom_components/tplink_router/manifest.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{
"domain": "tplink_router",
"name": "TP-Link Router",
"codeowners": ["@AlexandrErohin"],
"codeowners": ["@AlexandrErohin","@teixeluis"],
"config_flow": true,
"documentation": "https://github.com/AlexandrErohin/home-assistant-tplink-router",
"documentation": "https://github.com/teixeluis/home-assistant-tplink-router",
"iot_class": "local_polling",
"issue_tracker": "https://github.com/AlexandrErohin/home-assistant-tplink-router/issues",
"issue_tracker": "https://github.com/teixeluis/home-assistant-tplink-router/issues",
"requirements": ["tplinkrouterc6u==5.9.3"],
"version": "2.9.0"
"version": "2.10.0"
}
113 changes: 94 additions & 19 deletions custom_components/tplink_router/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,19 @@
SensorEntity,
SensorEntityDescription,
)
from homeassistant.const import PERCENTAGE
from homeassistant.const import PERCENTAGE, SIGNAL_STRENGTH_DECIBELS_MILLIWATT, UnitOfDataRate
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback
from .const import DOMAIN
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .coordinator import TPLinkRouterCoordinator
from tplinkrouterc6u import Status, IPv4Status

from tplinkrouterc6u import Status

@dataclass
class TPLinkRouterSensorRequiredKeysMixin:
value: Callable[[Status], Any]


@dataclass
class TPLinkRouterIpv4SensorRequiredKeysMixin:
value: Callable[[IPv4Status], Any]


@dataclass
class TPLinkRouterSensorEntityDescription(
SensorEntityDescription, TPLinkRouterSensorRequiredKeysMixin
Expand All @@ -35,15 +28,6 @@ class TPLinkRouterSensorEntityDescription(
sensor_type: str = "status"


@dataclass
class TPLinkRouterIpv4SensorEntityDescription(
SensorEntityDescription, TPLinkRouterIpv4SensorRequiredKeysMixin
):
"""A class that describes Ipv4Sensor entities."""

sensor_type: str = "ipv4_status"


SENSOR_TYPES: tuple[TPLinkRouterSensorEntityDescription, ...] = (
TPLinkRouterSensorEntityDescription(
key="guest_wifi_clients_total",
Expand Down Expand Up @@ -104,9 +88,100 @@ class TPLinkRouterIpv4SensorEntityDescription(
icon="mdi:wan",
value=lambda status: status.conn_type,
),
TPLinkRouterSensorEntityDescription(
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't forget about compatibility for all routers. Most routers do not have LTE. Only some routers has. So for the most routers these sensors would be Unavailable. It is better to add these sensors separately for LTE routers

key="lte_enabled",
name="LTE Enabled",
icon="mdi:sim-outline",
value=lambda status: status.enable,
),
TPLinkRouterSensorEntityDescription(
key="lte_connect_status",
name="LTE Connection Status",
icon="mdi:sim-outline",
value=lambda status: status.connect_status,
),
TPLinkRouterSensorEntityDescription(
key="lte_network_type",
name="LTE Network Type",
icon="mdi:sim-outline",
value=lambda status: status.network_type,
),
TPLinkRouterSensorEntityDescription(
key="sim_status",
name="LTE SIM Status",
icon="mdi:sim-outline",
value=lambda status: status.sim_status,
),
TPLinkRouterSensorEntityDescription(
key="lte_total_statistics",
name="LTE Total Statistics",
icon="mdi:sim-outline",
state_class=SensorStateClass.TOTAL,
value=lambda status: status.total_statistics,
),
TPLinkRouterSensorEntityDescription(
key="lte_cur_rx_speed",
name="LTE Current RX Speed",
icon="mdi:sim-outline",
state_class=SensorStateClass.MEASUREMENT,
native_unit_of_measurement=UnitOfDataRate.BYTES_PER_SECOND,
value=lambda status: status.cur_rx_speed,
),
TPLinkRouterSensorEntityDescription(
key="lte_cur_tx_speed",
name="LTE Current TX Speed",
icon="mdi:sim-outline",
state_class=SensorStateClass.MEASUREMENT,
native_unit_of_measurement=UnitOfDataRate.BYTES_PER_SECOND,
value=lambda status: status.cur_tx_speed,
),
TPLinkRouterSensorEntityDescription(
key="sms_unread_count",
name="Unread SMS",
icon="mdi:sim-outline",
state_class=SensorStateClass.TOTAL,
value=lambda status: status.sms_unread_count,
),
TPLinkRouterSensorEntityDescription(
key="lte_sig_level",
name="LTE Signal Level",
icon="mdi:sim-outline",
state_class=SensorStateClass.MEASUREMENT,
native_unit_of_measurement=PERCENTAGE,
value=lambda status: status.sig_level,
),
TPLinkRouterSensorEntityDescription(
key="lte_rsrp",
name="LTE RSRP",
icon="mdi:sim-outline",
state_class=SensorStateClass.MEASUREMENT,
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
value=lambda status: status.rsrp,
),
TPLinkRouterSensorEntityDescription(
key="lte_rsrq",
name="LTE RSRQ",
icon="mdi:sim-outline",
state_class=SensorStateClass.MEASUREMENT,
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
value=lambda status: status.rsrq,
),
TPLinkRouterSensorEntityDescription(
key="lte_snr",
name="LTE SNR",
icon="mdi:sim-outline",
state_class=SensorStateClass.MEASUREMENT,
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
value=lambda status: status.snr,
),
TPLinkRouterSensorEntityDescription(
key="lte_isp_name",
name="LTE ISP Name",
icon="mdi:sim-outline",
value=lambda status: status.isp_name,
),
)


async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None:
Expand Down