diff --git a/homeassistant/components/onewire/const.py b/homeassistant/components/onewire/const.py index b908d49f975..285b2c51be5 100644 --- a/homeassistant/components/onewire/const.py +++ b/homeassistant/components/onewire/const.py @@ -28,6 +28,7 @@ DEVICE_SUPPORT_OWSERVER = { "26": (), "28": (), "29": (), + "30": (), "3A": (), "3B": (), "42": (), diff --git a/homeassistant/components/onewire/sensor.py b/homeassistant/components/onewire/sensor.py index 758752b4183..cac3630d473 100644 --- a/homeassistant/components/onewire/sensor.py +++ b/homeassistant/components/onewire/sensor.py @@ -54,6 +54,8 @@ from .onewirehub import OneWireHub class OneWireSensorEntityDescription(OneWireEntityDescription, SensorEntityDescription): """Class describing OneWire sensor entities.""" + override_key: str | None = None + SIMPLE_TEMPERATURE_SENSOR_DESCRIPTION = OneWireSensorEntityDescription( key="temperature", @@ -184,6 +186,37 @@ DEVICE_SENSORS: dict[str, tuple[OneWireSensorEntityDescription, ...]] = { ), ), "28": (SIMPLE_TEMPERATURE_SENSOR_DESCRIPTION,), + "30": ( + SIMPLE_TEMPERATURE_SENSOR_DESCRIPTION, + OneWireSensorEntityDescription( + key="typeX/temperature", + device_class=SensorDeviceClass.TEMPERATURE, + entity_registry_enabled_default=False, + name="Thermocouple temperature", + native_unit_of_measurement=TEMP_CELSIUS, + read_mode=READ_MODE_FLOAT, + override_key="typeK/temperature", + state_class=SensorStateClass.MEASUREMENT, + ), + OneWireSensorEntityDescription( + key="volt", + device_class=SensorDeviceClass.VOLTAGE, + entity_registry_enabled_default=False, + name="Voltage", + native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT, + read_mode=READ_MODE_FLOAT, + state_class=SensorStateClass.MEASUREMENT, + ), + OneWireSensorEntityDescription( + key="vis", + device_class=SensorDeviceClass.VOLTAGE, + entity_registry_enabled_default=False, + name="vis", + native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT, + read_mode=READ_MODE_FLOAT, + state_class=SensorStateClass.MEASUREMENT, + ), + ), "3B": (SIMPLE_TEMPERATURE_SENSOR_DESCRIPTION,), "42": (SIMPLE_TEMPERATURE_SENSOR_DESCRIPTION,), "1D": tuple( @@ -368,7 +401,8 @@ def get_entities( description.native_unit_of_measurement = PERCENTAGE description.name = f"Wetness {s_id}" device_file = os.path.join( - os.path.split(device.path)[0], description.key + os.path.split(device.path)[0], + description.override_key or description.key, ) name = f"{device_id} {description.name}" entities.append( diff --git a/tests/components/onewire/const.py b/tests/components/onewire/const.py index e255e234f54..8d3a8270752 100644 --- a/tests/components/onewire/const.py +++ b/tests/components/onewire/const.py @@ -618,6 +618,59 @@ MOCK_OWPROXY_DEVICES = { }, ], }, + "30.111111111111": { + ATTR_INJECT_READS: [ + b"DS2760", # read device type + ], + ATTR_DEVICE_INFO: { + ATTR_IDENTIFIERS: {(DOMAIN, "30.111111111111")}, + ATTR_MANUFACTURER: MANUFACTURER_MAXIM, + ATTR_MODEL: "DS2760", + ATTR_NAME: "30.111111111111", + }, + Platform.SENSOR: [ + { + ATTR_DEVICE_CLASS: SensorDeviceClass.TEMPERATURE, + ATTR_ENTITY_ID: "sensor.30_111111111111_temperature", + ATTR_INJECT_READS: b" 26.984", + ATTR_STATE: "27.0", + ATTR_STATE_CLASS: SensorStateClass.MEASUREMENT, + ATTR_UNIQUE_ID: "/30.111111111111/temperature", + ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS, + }, + { + ATTR_DEFAULT_DISABLED: True, + ATTR_DEVICE_CLASS: SensorDeviceClass.TEMPERATURE, + ATTR_DEVICE_FILE: "/30.111111111111/typeK/temperature", + ATTR_ENTITY_ID: "sensor.30_111111111111_thermocouple_temperature", + ATTR_INJECT_READS: b" 173.7563", + ATTR_STATE: "173.8", + ATTR_STATE_CLASS: SensorStateClass.MEASUREMENT, + ATTR_UNIQUE_ID: "/30.111111111111/typeX/temperature", + ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS, + }, + { + ATTR_DEFAULT_DISABLED: True, + ATTR_DEVICE_CLASS: SensorDeviceClass.VOLTAGE, + ATTR_ENTITY_ID: "sensor.30_111111111111_voltage", + ATTR_INJECT_READS: b" 2.97", + ATTR_STATE: "3.0", + ATTR_STATE_CLASS: SensorStateClass.MEASUREMENT, + ATTR_UNIQUE_ID: "/30.111111111111/volt", + ATTR_UNIT_OF_MEASUREMENT: ELECTRIC_POTENTIAL_VOLT, + }, + { + ATTR_DEFAULT_DISABLED: True, + ATTR_DEVICE_CLASS: SensorDeviceClass.VOLTAGE, + ATTR_ENTITY_ID: "sensor.30_111111111111_vis", + ATTR_INJECT_READS: b" 0.12", + ATTR_STATE: "0.1", + ATTR_STATE_CLASS: SensorStateClass.MEASUREMENT, + ATTR_UNIQUE_ID: "/30.111111111111/vis", + ATTR_UNIT_OF_MEASUREMENT: ELECTRIC_POTENTIAL_VOLT, + }, + ], + }, "3A.111111111111": { ATTR_INJECT_READS: [ b"DS2413", # read device type