mirror of
https://github.com/home-assistant/core.git
synced 2025-12-07 08:28:05 +00:00
Add packet loss sensor to Ping integration (#158081)
This commit is contained in:
@@ -64,10 +64,11 @@ class PingDataICMPLib(PingData):
|
||||
return
|
||||
|
||||
_LOGGER.debug(
|
||||
"async_ping returned: reachable=%s sent=%i received=%s",
|
||||
"async_ping returned: reachable=%s sent=%i received=%s loss=%s",
|
||||
data.is_alive,
|
||||
data.packets_sent,
|
||||
data.packets_received,
|
||||
data.packet_loss * 100,
|
||||
)
|
||||
|
||||
self.is_alive = data.is_alive
|
||||
@@ -80,6 +81,7 @@ class PingDataICMPLib(PingData):
|
||||
"max": data.max_rtt,
|
||||
"avg": data.avg_rtt,
|
||||
"jitter": data.jitter,
|
||||
"loss": data.packet_loss * 100,
|
||||
}
|
||||
|
||||
|
||||
|
||||
9
homeassistant/components/ping/icons.json
Normal file
9
homeassistant/components/ping/icons.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"entity": {
|
||||
"sensor": {
|
||||
"loss": {
|
||||
"default": "mdi:alert-circle-outline"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@ from homeassistant.components.sensor import (
|
||||
SensorStateClass,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import EntityCategory, UnitOfTime
|
||||
from homeassistant.const import PERCENTAGE, EntityCategory, UnitOfTime
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
||||
|
||||
@@ -82,6 +82,16 @@ SENSORS: tuple[PingSensorEntityDescription, ...] = (
|
||||
value_fn=lambda result: result.data.get("jitter"),
|
||||
has_fn=lambda result: "jitter" in result.data,
|
||||
),
|
||||
PingSensorEntityDescription(
|
||||
key="loss",
|
||||
translation_key="loss",
|
||||
native_unit_of_measurement=PERCENTAGE,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
entity_registry_enabled_default=False,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
value_fn=lambda result: result.data.get("loss"),
|
||||
has_fn=lambda result: "loss" in result.data,
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -22,6 +22,9 @@
|
||||
"jitter": {
|
||||
"name": "Jitter"
|
||||
},
|
||||
"loss": {
|
||||
"name": "Packet loss"
|
||||
},
|
||||
"round_trip_time_avg": {
|
||||
"name": "Round-trip time average"
|
||||
},
|
||||
|
||||
@@ -54,6 +54,57 @@
|
||||
'state': '3.5',
|
||||
})
|
||||
# ---
|
||||
# name: test_setup_and_update[packet_loss]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
}),
|
||||
'area_id': None,
|
||||
'capabilities': dict({
|
||||
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
|
||||
}),
|
||||
'config_entry_id': <ANY>,
|
||||
'config_subentry_id': <ANY>,
|
||||
'device_class': None,
|
||||
'device_id': <ANY>,
|
||||
'disabled_by': None,
|
||||
'domain': 'sensor',
|
||||
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
|
||||
'entity_id': 'sensor.10_10_10_10_packet_loss',
|
||||
'has_entity_name': True,
|
||||
'hidden_by': None,
|
||||
'icon': None,
|
||||
'id': <ANY>,
|
||||
'labels': set({
|
||||
}),
|
||||
'name': None,
|
||||
'options': dict({
|
||||
}),
|
||||
'original_device_class': None,
|
||||
'original_icon': None,
|
||||
'original_name': 'Packet loss',
|
||||
'platform': 'ping',
|
||||
'previous_unique_id': None,
|
||||
'suggested_object_id': None,
|
||||
'supported_features': 0,
|
||||
'translation_key': 'loss',
|
||||
'unit_of_measurement': '%',
|
||||
})
|
||||
# ---
|
||||
# name: test_setup_and_update[packet_loss].1
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'friendly_name': '10.10.10.10 Packet loss',
|
||||
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
|
||||
'unit_of_measurement': '%',
|
||||
}),
|
||||
'context': <ANY>,
|
||||
'entity_id': 'sensor.10_10_10_10_packet_loss',
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '0.0',
|
||||
})
|
||||
# ---
|
||||
# name: test_setup_and_update[round_trip_time_average]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
|
||||
@@ -17,6 +17,7 @@ from homeassistant.helpers import entity_registry as er
|
||||
"round_trip_time_mean_deviation", # should be None in the snapshot
|
||||
"round_trip_time_minimum",
|
||||
"jitter",
|
||||
"packet_loss",
|
||||
],
|
||||
)
|
||||
async def test_setup_and_update(
|
||||
|
||||
Reference in New Issue
Block a user