Skip to content

Commit f1381b7

Browse files
committed
Add some more sensors #6
1 parent c962a00 commit f1381b7

File tree

6 files changed

+85
-13
lines changed

6 files changed

+85
-13
lines changed

custom_components/speedport/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
"""The Speedport integration."""
2+
import asyncio
3+
24
from homeassistant.config_entries import ConfigEntry
35
from homeassistant.const import Platform
46
from homeassistant.core import HomeAssistant
@@ -29,6 +31,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
2931
).create()
3032
hass.data[DOMAIN][entry.entry_id] = speedport
3133
hass.data[DOMAIN]["coordinators"] = {}
34+
await asyncio.gather(*[speedport.update_status(), speedport.update_ip_data()])
3235

3336
entry.async_on_unload(entry.add_update_listener(update_listener))
3437

custom_components/speedport/binary_sensor.py

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
from dataclasses import dataclass
23

34
from homeassistant.components.binary_sensor import (
45
BinarySensorDeviceClass,
@@ -15,16 +16,51 @@
1516

1617
_LOGGER = logging.getLogger(__name__)
1718

18-
BINARY_SENSORS: tuple[BinarySensorEntityDescription, ...] = (
19-
BinarySensorEntityDescription(
19+
20+
@dataclass
21+
class SpeedportBinarySensorEntityDescription(BinarySensorEntityDescription):
22+
condition_key: str = ""
23+
value: str = ""
24+
25+
26+
BINARY_SENSORS: tuple[SpeedportBinarySensorEntityDescription, ...] = (
27+
SpeedportBinarySensorEntityDescription(
2028
key="onlinestatus",
2129
name="Connection",
2230
device_class=BinarySensorDeviceClass.CONNECTIVITY,
31+
value="online",
2332
),
24-
BinarySensorEntityDescription(
33+
SpeedportBinarySensorEntityDescription(
2534
key="dsl_link_status",
2635
name="DSL-Connection",
2736
device_class=BinarySensorDeviceClass.PLUG,
37+
value="online",
38+
),
39+
SpeedportBinarySensorEntityDescription(
40+
key="dualstack",
41+
name="Dual Stack",
42+
value="1",
43+
),
44+
SpeedportBinarySensorEntityDescription(
45+
key="dsl_tunnel",
46+
name="DSL Tunnel",
47+
device_class=BinarySensorDeviceClass.CONNECTIVITY,
48+
condition_key="use_lte",
49+
value="1",
50+
),
51+
SpeedportBinarySensorEntityDescription(
52+
key="lte_tunnel",
53+
name="LTE Tunnel",
54+
device_class=BinarySensorDeviceClass.CONNECTIVITY,
55+
condition_key="use_lte",
56+
value="1",
57+
),
58+
SpeedportBinarySensorEntityDescription(
59+
key="hybrid_tunnel",
60+
name="Hybrid Tunnel",
61+
device_class=BinarySensorDeviceClass.CONNECTIVITY,
62+
condition_key="use_lte",
63+
value="1",
2864
),
2965
)
3066

@@ -38,18 +74,23 @@ async def async_setup_entry(
3874
entities = [
3975
SpeedportBinarySensor(hass, speedport, description)
4076
for description in BINARY_SENSORS
77+
if not description.condition_key
78+
or speedport.get(description.condition_key) == "1"
4179
]
4280

4381
async_add_entities(entities)
4482

4583

4684
class SpeedportBinarySensor(SpeedportEntity, BinarySensorEntity):
47-
entity_description: BinarySensorEntityDescription
85+
entity_description: SpeedportBinarySensorEntityDescription
4886

4987
@property
5088
def is_on(self) -> bool | None:
5189
"""Return true if the binary sensor is on."""
52-
return self._speedport.get(self.entity_description.key) == "online"
90+
return (
91+
self._speedport.get(self.entity_description.key)
92+
== self.entity_description.value
93+
)
5394

5495
def available(self) -> bool:
5596
if self._speedport.get(self.entity_description.key) is None:

custom_components/speedport/manifest.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"iot_class": "local_polling",
1313
"issue_tracker": "https://github.com/Andre0512/speedport/issues",
1414
"requirements": [
15-
"speedport-api==0.5.5"
15+
"speedport-api==0.5.6"
1616
],
17-
"version": "0.3.2"
17+
"version": "0.3.3"
1818
}

custom_components/speedport/sensor.py

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
)
1010
from homeassistant.config_entries import ConfigEntry
1111
from homeassistant.const import (
12-
EntityCategory,
1312
UnitOfDataRate,
13+
SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
1414
)
1515
from homeassistant.core import HomeAssistant
1616
from homeassistant.helpers.entity_platform import AddEntitiesCallback
@@ -66,6 +66,34 @@
6666
device_class=SensorDeviceClass.DATA_RATE,
6767
icon="mdi:download",
6868
),
69+
SensorEntityDescription(
70+
key="router_state",
71+
name="Router State",
72+
icon="mdi:router-wireless",
73+
),
74+
SensorEntityDescription(
75+
key="dsl_pop",
76+
name="DSL-PoP",
77+
icon="mdi:map-marker-radius",
78+
),
79+
SensorEntityDescription(
80+
key="ex5g_signal_5g",
81+
name="5G Signal",
82+
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
83+
icon="mdi:signal",
84+
),
85+
SensorEntityDescription(
86+
key="ex5g_freq_5g", name="5G Frequency", icon="mdi:signal-5g"
87+
),
88+
SensorEntityDescription(
89+
key="ex5g_signal_lte",
90+
name="LTE Signal",
91+
native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
92+
icon="mdi:signal",
93+
),
94+
SensorEntityDescription(
95+
key="ex5g_freq_lte", name="LTE Frequency", icon="mdi:signal-4g"
96+
),
6997
)
7098

7199

@@ -76,7 +104,9 @@ async def async_setup_entry(
76104
speedport: Speedport = hass.data[DOMAIN][entry.entry_id]
77105

78106
entities = [
79-
SpeedportBinarySensor(hass, speedport, description) for description in SENSORS
107+
SpeedportBinarySensor(hass, speedport, description)
108+
for description in SENSORS
109+
if speedport.get(description.key) is not None
80110
]
81111

82112
async_add_entities(entities)
@@ -91,7 +121,7 @@ def native_value(self) -> StateType:
91121
if (data := self._speedport.get(self.entity_description.key)) is None:
92122
return None
93123
if self.entity_description.device_class == SensorDeviceClass.TIMESTAMP:
94-
date = datetime.strptime(data, "%Y-%m-%d %H:%M:%S")
124+
date = datetime.strptime(data, "%Y-%m-%d %H:%M:%S").replace(second=0)
95125
return pytz.timezone("Europe/Berlin").localize(date)
96126
return data
97127

custom_components/speedport/switch.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from __future__ import annotations
22

3-
import asyncio
43
import logging
54
from typing import Any
65

@@ -23,7 +22,6 @@ async def async_setup_entry(
2322
"""Set up entry."""
2423

2524
speedport: Speedport = hass.data[DOMAIN][entry.entry_id]
26-
await asyncio.gather(*[speedport.update_status(), speedport.update_ip_data()])
2725
async_add_entities(
2826
[
2927
SpeedportWifiSwitch(hass, speedport),

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
speedport-api==0.5.5
1+
speedport-api==0.5.6
22
homeassistant~=2023.10
33
pytz~=2023.3

0 commit comments

Comments
 (0)