diff --git a/homeassistant/components/knx/icons.json b/homeassistant/components/knx/icons.json index e13a41ba3c2f..09a6c5b89772 100644 --- a/homeassistant/components/knx/icons.json +++ b/homeassistant/components/knx/icons.json @@ -21,6 +21,9 @@ "telegram_count": { "default": "mdi:plus-network" }, + "telegrams_data_secure_undecodable": { + "default": "mdi:lock-alert" + }, "telegrams_incoming": { "default": "mdi:upload-network" }, diff --git a/homeassistant/components/knx/sensor.py b/homeassistant/components/knx/sensor.py index 2a3732e7fcdb..480f7d68db2e 100644 --- a/homeassistant/components/knx/sensor.py +++ b/homeassistant/components/knx/sensor.py @@ -108,6 +108,12 @@ SYSTEM_ENTITY_DESCRIPTIONS = ( + knx.xknx.connection_manager.cemi_count_incoming + knx.xknx.connection_manager.cemi_count_incoming_error, ), + KNXSystemEntityDescription( + key="telegrams_data_secure_undecodable", + entity_registry_enabled_default=False, + state_class=SensorStateClass.TOTAL_INCREASING, + value_fn=lambda knx: knx.xknx.connection_manager.undecoded_data_secure, + ), ) diff --git a/homeassistant/components/knx/strings.json b/homeassistant/components/knx/strings.json index 6c61a737570f..3d5e88420a7c 100644 --- a/homeassistant/components/knx/strings.json +++ b/homeassistant/components/knx/strings.json @@ -639,6 +639,10 @@ "name": "Telegrams", "unit_of_measurement": "telegrams" }, + "telegrams_data_secure_undecodable": { + "name": "Undecodable Data Secure telegrams", + "unit_of_measurement": "[%key:component::knx::entity::sensor::telegrams_incoming_error::unit_of_measurement%]" + }, "telegrams_incoming": { "name": "Incoming telegrams", "unit_of_measurement": "[%key:component::knx::entity::sensor::telegram_count::unit_of_measurement%]" diff --git a/tests/components/knx/test_interface_device.py b/tests/components/knx/test_interface_device.py index 4de366c69f03..0d804deb333e 100644 --- a/tests/components/knx/test_interface_device.py +++ b/tests/components/knx/test_interface_device.py @@ -36,6 +36,7 @@ async def test_diagnostic_entities( "sensor.knx_interface_outgoing_telegrams", "sensor.knx_interface_outgoing_telegram_errors", "sensor.knx_interface_telegrams", + "sensor.knx_interface_undecodable_data_secure_telegrams", ): entity = entity_registry.async_get(entity_id) assert entity.entity_category is EntityCategory.DIAGNOSTIC @@ -43,6 +44,7 @@ async def test_diagnostic_entities( for entity_id in ( "sensor.knx_interface_incoming_telegrams", "sensor.knx_interface_outgoing_telegrams", + "sensor.knx_interface_undecodable_data_secure_telegrams", ): entity = entity_registry.async_get(entity_id) assert entity.disabled is True @@ -57,7 +59,7 @@ async def test_diagnostic_entities( async_fire_time_changed(hass) await hass.async_block_till_done() - assert len(events) == 3 # 5 polled sensors - 2 disabled + assert len(events) == 3 # 6 polled sensors - 3 disabled events.clear() for entity_id, test_state in ( @@ -74,7 +76,7 @@ async def test_diagnostic_entities( state=XknxConnectionState.DISCONNECTED ) await hass.async_block_till_done() - assert len(events) == 4 # 3 not always_available + 3 force_update - 2 disabled + assert len(events) == 4 events.clear() knx.xknx.current_address = IndividualAddress("1.1.1")