diff --git a/src/data/logbook.ts b/src/data/logbook.ts index 712680ae90..1762ffdd04 100644 --- a/src/data/logbook.ts +++ b/src/data/logbook.ts @@ -218,114 +218,32 @@ export const localizeStateMessage = ( const isOff = state === BINARY_STATE_OFF; const device_class = stateObj.attributes.device_class; - switch (device_class) { - case "battery": - if (isOn) { - return localize(`${LOGBOOK_LOCALIZE_PATH}.was_low`); - } - if (isOff) { - return localize(`${LOGBOOK_LOCALIZE_PATH}.was_normal`); - } - break; - - case "connectivity": - if (isOn) { - return localize(`${LOGBOOK_LOCALIZE_PATH}.was_connected`); - } - if (isOff) { - return localize(`${LOGBOOK_LOCALIZE_PATH}.was_disconnected`); - } - break; - - case "door": - case "garage_door": - case "opening": - case "window": - if (isOn) { - return localize(`${LOGBOOK_LOCALIZE_PATH}.was_opened`); - } - if (isOff) { - return localize(`${LOGBOOK_LOCALIZE_PATH}.was_closed`); - } - break; - - case "lock": - if (isOn) { - return localize(`${LOGBOOK_LOCALIZE_PATH}.was_unlocked`); - } - if (isOff) { - return localize(`${LOGBOOK_LOCALIZE_PATH}.was_locked`); - } - break; - - case "plug": - if (isOn) { - return localize(`${LOGBOOK_LOCALIZE_PATH}.was_plugged_in`); - } - if (isOff) { - return localize(`${LOGBOOK_LOCALIZE_PATH}.was_unplugged`); - } - break; - - case "presence": - if (isOn) { - return localize(`${LOGBOOK_LOCALIZE_PATH}.was_at_home`); - } - if (isOff) { - return localize(`${LOGBOOK_LOCALIZE_PATH}.was_away`); - } - break; - - case "safety": - if (isOn) { - return localize(`${LOGBOOK_LOCALIZE_PATH}.was_unsafe`); - } - if (isOff) { - return localize(`${LOGBOOK_LOCALIZE_PATH}.was_safe`); - } - break; - - case "cold": - case "gas": - case "heat": - case "moisture": - case "motion": - case "occupancy": - case "power": - case "problem": - case "smoke": - case "sound": - case "vibration": - if (isOn) { - return localize(`${LOGBOOK_LOCALIZE_PATH}.detected_device_class`, { + if (device_class && (isOn || isOff)) { + return ( + localize( + `${LOGBOOK_LOCALIZE_PATH}.${isOn ? "detected_device_classes" : "cleared_device_classes"}.${device_class}`, + { device_class: autoCaseNoun( localize( `component.binary_sensor.entity_component.${device_class}.name` - ), + ) || device_class, hass.language ), - }); - } - if (isOff) { - return localize(`${LOGBOOK_LOCALIZE_PATH}.cleared_device_class`, { + } + ) || + // If there's no key for a specific device class, fallback to generic string + localize( + `${LOGBOOK_LOCALIZE_PATH}.${isOn ? "detected_device_class" : "cleared_device_class"}`, + { device_class: autoCaseNoun( localize( `component.binary_sensor.entity_component.${device_class}.name` - ), + ) || device_class, hass.language ), - }); - } - break; - - case "tamper": - if (isOn) { - return localize(`${LOGBOOK_LOCALIZE_PATH}.detected_tampering`); - } - if (isOff) { - return localize(`${LOGBOOK_LOCALIZE_PATH}.cleared_tampering`); - } - break; + } + ) + ); } break; diff --git a/src/translations/en.json b/src/translations/en.json index 09c4d2b1a8..381a70779a 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -486,7 +486,67 @@ "cleared_tampering": "cleared tampering", "detected_event": "{event_type} event detected", "detected_event_no_type": "detected an event", - "detected_unknown_event": "detected an unknown event" + "detected_unknown_event": "detected an unknown event", + "detected_device_classes": { + "battery": "[%key:ui::components::logbook::messages::was_low%]", + "battery_charging": "started charging", + "carbon_monoxide": "[%key:ui::components::logbook::messages::detected_device_class%]", + "cold": "[%key:ui::components::logbook::messages::detected_device_class%]", + "connectivity": "[%key:ui::components::logbook::messages::was_connected%]", + "door": "[%key:ui::components::logbook::messages::was_opened%]", + "garage_door": "[%key:ui::components::logbook::messages::was_opened%]", + "gas": "[%key:ui::components::logbook::messages::detected_device_class%]", + "heat": "[%key:ui::components::logbook::messages::detected_device_class%]", + "light": "[%key:ui::components::logbook::messages::detected_device_class%]", + "lock": "[%key:ui::components::logbook::messages::was_unlocked%]", + "moisture": "[%key:ui::components::logbook::messages::detected_device_class%]", + "motion": "[%key:ui::components::logbook::messages::detected_device_class%]", + "moving": "[%key:ui::components::logbook::messages::detected_device_class%]", + "occupancy": "[%key:ui::components::logbook::messages::detected_device_class%]", + "opening": "[%key:ui::components::logbook::messages::was_opened%]", + "plug": "[%key:ui::components::logbook::messages::was_plugged_in%]", + "power": "[%key:ui::components::logbook::messages::detected_device_class%]", + "presence": "[%key:ui::components::logbook::messages::was_at_home%]", + "problem": "[%key:ui::components::logbook::messages::detected_device_class%]", + "running": "[%key:ui::components::logbook::messages::detected_device_class%]", + "safety": "[%key:ui::components::logbook::messages::was_unsafe%]", + "smoke": "[%key:ui::components::logbook::messages::detected_device_class%]", + "sound": "[%key:ui::components::logbook::messages::detected_device_class%]", + "tamper": "[%key:ui::components::logbook::messages::detected_tampering%]", + "update": "[%key:ui::components::logbook::messages::detected_device_class%]", + "vibration": "[%key:ui::components::logbook::messages::detected_device_class%]", + "window": "[%key:ui::components::logbook::messages::was_opened%]" + }, + "cleared_device_classes": { + "battery": "[%key:ui::components::logbook::messages::was_normal%]", + "battery_charging": "stopped charging", + "carbon_monoxide": "[%key:ui::components::logbook::messages::cleared_device_class%]", + "cold": "[%key:ui::components::logbook::messages::cleared_device_class%]", + "connectivity": "[%key:ui::components::logbook::messages::was_disconnected%]", + "door": "[%key:ui::components::logbook::messages::was_closed%]", + "garage_door": "[%key:ui::components::logbook::messages::was_closed%]", + "gas": "[%key:ui::components::logbook::messages::cleared_device_class%]", + "heat": "[%key:ui::components::logbook::messages::cleared_device_class%]", + "light": "[%key:ui::components::logbook::messages::cleared_device_class%]", + "lock": "[%key:ui::components::logbook::messages::was_locked%]", + "moisture": "[%key:ui::components::logbook::messages::cleared_device_class%]", + "motion": "[%key:ui::components::logbook::messages::cleared_device_class%]", + "moving": "[%key:ui::components::logbook::messages::cleared_device_class%]", + "occupancy": "[%key:ui::components::logbook::messages::cleared_device_class%]", + "opening": "[%key:ui::components::logbook::messages::was_closed%]", + "plug": "[%key:ui::components::logbook::messages::was_unplugged%]", + "power": "[%key:ui::components::logbook::messages::cleared_device_class%]", + "presence": "[%key:ui::components::logbook::messages::was_away%]", + "problem": "[%key:ui::components::logbook::messages::cleared_device_class%]", + "running": "[%key:ui::components::logbook::messages::cleared_device_class%]", + "safety": "[%key:ui::components::logbook::messages::was_safe%]", + "smoke": "[%key:ui::components::logbook::messages::cleared_device_class%]", + "sound": "[%key:ui::components::logbook::messages::cleared_device_class%]", + "tamper": "[%key:ui::components::logbook::messages::cleared_tampering%]", + "update": "[%key:ui::components::logbook::messages::cleared_device_class%]", + "vibration": "[%key:ui::components::logbook::messages::cleared_device_class%]", + "window": "[%key:ui::components::logbook::messages::was_closed%]" + } } }, "entity": {