Add DS2450 to onewire integration (#136882)

* add DS2450 to onewire integration

* added tests for DS2450 in const.py

* Update homeassistant/components/onewire/sensor.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* spelling change voltage -> Voltage

* use translation key

* tests run after en.json edited

* Update homeassistant/components/onewire/strings.json

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* naming convention adapted

* Update homeassistant/components/onewire/sensor.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* adatpt owfs namings to HA namings. volt -> voltage

* Apply suggestions from code review

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
This commit is contained in:
moritzthecat 2025-01-30 17:33:41 +01:00 committed by GitHub
parent ec53b08e09
commit eca93f1f4e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 505 additions and 0 deletions

View File

@ -10,6 +10,7 @@ DOMAIN = "onewire"
DEVICE_KEYS_0_3 = range(4)
DEVICE_KEYS_0_7 = range(8)
DEVICE_KEYS_A_B = ("A", "B")
DEVICE_KEYS_A_D = ("A", "B", "C", "D")
DEVICE_SUPPORT = {
"05": (),
@ -17,6 +18,7 @@ DEVICE_SUPPORT = {
"12": (),
"1D": (),
"1F": (),
"20": (),
"22": (),
"26": (),
"28": (),

View File

@ -33,6 +33,7 @@ from homeassistant.helpers.typing import StateType
from .const import (
DEVICE_KEYS_0_3,
DEVICE_KEYS_A_B,
DEVICE_KEYS_A_D,
OPTION_ENTRY_DEVICE_OPTIONS,
OPTION_ENTRY_SENSOR_PRECISION,
PRECISION_MAPPING_FAMILY_28,
@ -108,6 +109,33 @@ DEVICE_SENSORS: dict[str, tuple[OneWireSensorEntityDescription, ...]] = {
state_class=SensorStateClass.MEASUREMENT,
),
),
"20": tuple(
[
OneWireSensorEntityDescription(
key=f"latestvolt.{device_key}",
device_class=SensorDeviceClass.VOLTAGE,
entity_registry_enabled_default=False,
native_unit_of_measurement=UnitOfElectricPotential.VOLT,
read_mode=READ_MODE_FLOAT,
state_class=SensorStateClass.MEASUREMENT,
translation_key="latest_voltage_id",
translation_placeholders={"id": str(device_key)},
)
for device_key in DEVICE_KEYS_A_D
]
+ [
OneWireSensorEntityDescription(
key=f"volt.{device_key}",
device_class=SensorDeviceClass.VOLTAGE,
native_unit_of_measurement=UnitOfElectricPotential.VOLT,
read_mode=READ_MODE_FLOAT,
state_class=SensorStateClass.MEASUREMENT,
translation_key="voltage_id",
translation_placeholders={"id": str(device_key)},
)
for device_key in DEVICE_KEYS_A_D
]
),
"22": (SIMPLE_TEMPERATURE_SENSOR_DESCRIPTION,),
"26": (
SIMPLE_TEMPERATURE_SENSOR_DESCRIPTION,

View File

@ -74,12 +74,18 @@
"humidity_raw": {
"name": "Raw humidity"
},
"latest_voltage_id": {
"name": "Latest voltage {id}"
},
"moisture_id": {
"name": "Moisture {id}"
},
"thermocouple_temperature_k": {
"name": "Thermocouple K temperature"
},
"voltage_id": {
"name": "Voltage {id}"
},
"voltage_vad": {
"name": "VAD voltage"
},

View File

@ -65,6 +65,19 @@ MOCK_OWPROXY_DEVICES = {
},
},
},
"20.111111111111": {
ATTR_INJECT_READS: {
"/type": [b"DS2450"],
"/volt.A": [b" 1.1"],
"/volt.B": [b" 2.2"],
"/volt.C": [b" 3.3"],
"/volt.D": [b" 4.4"],
"/latestvolt.A": [b" 1.11"],
"/latestvolt.B": [b" 2.22"],
"/latestvolt.C": [b" 3.33"],
"/latestvolt.D": [b" 4.44"],
}
},
"22.111111111111": {
ATTR_INJECT_READS: {
"/type": [b"DS1822"],

View File

@ -159,6 +159,38 @@
'via_device_id': None,
})
# ---
# name: test_registry[20.111111111111-entry]
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'configuration_url': None,
'connections': set({
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'onewire',
'20.111111111111',
),
}),
'is_new': False,
'labels': set({
}),
'manufacturer': 'Maxim Integrated',
'model': 'DS2450',
'model_id': 'DS2450',
'name': '20.111111111111',
'name_by_user': None,
'primary_config_entry': <ANY>,
'serial_number': '111111111111',
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
})
# ---
# name: test_registry[22.111111111111-entry]
DeviceRegistryEntrySnapshot({
'area_id': None,

View File

@ -260,6 +260,430 @@
'state': '248125',
})
# ---
# name: test_sensors[sensor.20_111111111111_latest_voltage_a-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.20_111111111111_latest_voltage_a',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.VOLTAGE: 'voltage'>,
'original_icon': None,
'original_name': 'Latest voltage A',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'latest_voltage_id',
'unique_id': '/20.111111111111/latestvolt.A',
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
})
# ---
# name: test_sensors[sensor.20_111111111111_latest_voltage_a-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'voltage',
'device_file': '/20.111111111111/latestvolt.A',
'friendly_name': '20.111111111111 Latest voltage A',
'raw_value': 1.11,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}),
'context': <ANY>,
'entity_id': 'sensor.20_111111111111_latest_voltage_a',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '1.11',
})
# ---
# name: test_sensors[sensor.20_111111111111_latest_voltage_b-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.20_111111111111_latest_voltage_b',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.VOLTAGE: 'voltage'>,
'original_icon': None,
'original_name': 'Latest voltage B',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'latest_voltage_id',
'unique_id': '/20.111111111111/latestvolt.B',
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
})
# ---
# name: test_sensors[sensor.20_111111111111_latest_voltage_b-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'voltage',
'device_file': '/20.111111111111/latestvolt.B',
'friendly_name': '20.111111111111 Latest voltage B',
'raw_value': 2.22,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}),
'context': <ANY>,
'entity_id': 'sensor.20_111111111111_latest_voltage_b',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '2.22',
})
# ---
# name: test_sensors[sensor.20_111111111111_latest_voltage_c-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.20_111111111111_latest_voltage_c',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.VOLTAGE: 'voltage'>,
'original_icon': None,
'original_name': 'Latest voltage C',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'latest_voltage_id',
'unique_id': '/20.111111111111/latestvolt.C',
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
})
# ---
# name: test_sensors[sensor.20_111111111111_latest_voltage_c-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'voltage',
'device_file': '/20.111111111111/latestvolt.C',
'friendly_name': '20.111111111111 Latest voltage C',
'raw_value': 3.33,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}),
'context': <ANY>,
'entity_id': 'sensor.20_111111111111_latest_voltage_c',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '3.33',
})
# ---
# name: test_sensors[sensor.20_111111111111_latest_voltage_d-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.20_111111111111_latest_voltage_d',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.VOLTAGE: 'voltage'>,
'original_icon': None,
'original_name': 'Latest voltage D',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'latest_voltage_id',
'unique_id': '/20.111111111111/latestvolt.D',
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
})
# ---
# name: test_sensors[sensor.20_111111111111_latest_voltage_d-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'voltage',
'device_file': '/20.111111111111/latestvolt.D',
'friendly_name': '20.111111111111 Latest voltage D',
'raw_value': 4.44,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}),
'context': <ANY>,
'entity_id': 'sensor.20_111111111111_latest_voltage_d',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '4.44',
})
# ---
# name: test_sensors[sensor.20_111111111111_voltage_a-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.20_111111111111_voltage_a',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.VOLTAGE: 'voltage'>,
'original_icon': None,
'original_name': 'Voltage A',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'voltage_id',
'unique_id': '/20.111111111111/volt.A',
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
})
# ---
# name: test_sensors[sensor.20_111111111111_voltage_a-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'voltage',
'device_file': '/20.111111111111/volt.A',
'friendly_name': '20.111111111111 Voltage A',
'raw_value': 1.1,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}),
'context': <ANY>,
'entity_id': 'sensor.20_111111111111_voltage_a',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '1.1',
})
# ---
# name: test_sensors[sensor.20_111111111111_voltage_b-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.20_111111111111_voltage_b',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.VOLTAGE: 'voltage'>,
'original_icon': None,
'original_name': 'Voltage B',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'voltage_id',
'unique_id': '/20.111111111111/volt.B',
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
})
# ---
# name: test_sensors[sensor.20_111111111111_voltage_b-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'voltage',
'device_file': '/20.111111111111/volt.B',
'friendly_name': '20.111111111111 Voltage B',
'raw_value': 2.2,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}),
'context': <ANY>,
'entity_id': 'sensor.20_111111111111_voltage_b',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '2.2',
})
# ---
# name: test_sensors[sensor.20_111111111111_voltage_c-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.20_111111111111_voltage_c',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.VOLTAGE: 'voltage'>,
'original_icon': None,
'original_name': 'Voltage C',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'voltage_id',
'unique_id': '/20.111111111111/volt.C',
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
})
# ---
# name: test_sensors[sensor.20_111111111111_voltage_c-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'voltage',
'device_file': '/20.111111111111/volt.C',
'friendly_name': '20.111111111111 Voltage C',
'raw_value': 3.3,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}),
'context': <ANY>,
'entity_id': 'sensor.20_111111111111_voltage_c',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '3.3',
})
# ---
# name: test_sensors[sensor.20_111111111111_voltage_d-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.20_111111111111_voltage_d',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.VOLTAGE: 'voltage'>,
'original_icon': None,
'original_name': 'Voltage D',
'platform': 'onewire',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'voltage_id',
'unique_id': '/20.111111111111/volt.D',
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
})
# ---
# name: test_sensors[sensor.20_111111111111_voltage_d-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'voltage',
'device_file': '/20.111111111111/volt.D',
'friendly_name': '20.111111111111 Voltage D',
'raw_value': 4.4,
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}),
'context': <ANY>,
'entity_id': 'sensor.20_111111111111_voltage_d',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '4.4',
})
# ---
# name: test_sensors[sensor.22_111111111111_temperature-entry]
EntityRegistryEntrySnapshot({
'aliases': set({