"""The nut component.""" from __future__ import annotations from typing import Final from homeassistant.components.sensor import ( DEVICE_CLASS_BATTERY, DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_POWER, DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_VOLTAGE, STATE_CLASS_MEASUREMENT, SensorEntityDescription, ) from homeassistant.const import ( ELECTRIC_CURRENT_AMPERE, ELECTRIC_POTENTIAL_VOLT, FREQUENCY_HERTZ, PERCENTAGE, POWER_VOLT_AMPERE, POWER_WATT, TEMP_CELSIUS, TIME_SECONDS, ) DOMAIN = "nut" PLATFORMS = ["sensor"] UNDO_UPDATE_LISTENER = "undo_update_listener" DEFAULT_NAME = "NUT UPS" DEFAULT_HOST = "localhost" DEFAULT_PORT = 3493 KEY_STATUS = "ups.status" KEY_STATUS_DISPLAY = "ups.status.display" COORDINATOR = "coordinator" DEFAULT_SCAN_INTERVAL = 60 PYNUT_DATA = "data" PYNUT_UNIQUE_ID = "unique_id" PYNUT_MANUFACTURER = "manufacturer" PYNUT_MODEL = "model" PYNUT_FIRMWARE = "firmware" PYNUT_NAME = "name" SENSOR_TYPES: Final[dict[str, SensorEntityDescription]] = { "ups.status.display": SensorEntityDescription( key="ups.status.display", name="Status", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "ups.status": SensorEntityDescription( key="ups.status", name="Status Data", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "ups.alarm": SensorEntityDescription( key="ups.alarm", name="Alarms", unit_of_measurement=None, icon="mdi:alarm", device_class=None, state_class=None, ), "ups.temperature": SensorEntityDescription( key="ups.temperature", name="UPS Temperature", unit_of_measurement=TEMP_CELSIUS, icon=None, device_class=DEVICE_CLASS_TEMPERATURE, state_class=STATE_CLASS_MEASUREMENT, ), "ups.load": SensorEntityDescription( key="ups.load", name="Load", unit_of_measurement=PERCENTAGE, icon="mdi:gauge", device_class=None, state_class=STATE_CLASS_MEASUREMENT, ), "ups.load.high": SensorEntityDescription( key="ups.load.high", name="Overload Setting", unit_of_measurement=PERCENTAGE, icon="mdi:gauge", device_class=None, state_class=None, ), "ups.id": SensorEntityDescription( key="ups.id", name="System identifier", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "ups.delay.start": SensorEntityDescription( key="ups.delay.start", name="Load Restart Delay", unit_of_measurement=TIME_SECONDS, icon="mdi:timer-outline", device_class=None, state_class=None, ), "ups.delay.reboot": SensorEntityDescription( key="ups.delay.reboot", name="UPS Reboot Delay", unit_of_measurement=TIME_SECONDS, icon="mdi:timer-outline", device_class=None, state_class=None, ), "ups.delay.shutdown": SensorEntityDescription( key="ups.delay.shutdown", name="UPS Shutdown Delay", unit_of_measurement=TIME_SECONDS, icon="mdi:timer-outline", device_class=None, state_class=None, ), "ups.timer.start": SensorEntityDescription( key="ups.timer.start", name="Load Start Timer", unit_of_measurement=TIME_SECONDS, icon="mdi:timer-outline", device_class=None, state_class=None, ), "ups.timer.reboot": SensorEntityDescription( key="ups.timer.reboot", name="Load Reboot Timer", unit_of_measurement=TIME_SECONDS, icon="mdi:timer-outline", device_class=None, state_class=None, ), "ups.timer.shutdown": SensorEntityDescription( key="ups.timer.shutdown", name="Load Shutdown Timer", unit_of_measurement=TIME_SECONDS, icon="mdi:timer-outline", device_class=None, state_class=None, ), "ups.test.interval": SensorEntityDescription( key="ups.test.interval", name="Self-Test Interval", unit_of_measurement=TIME_SECONDS, icon="mdi:timer-outline", device_class=None, state_class=None, ), "ups.test.result": SensorEntityDescription( key="ups.test.result", name="Self-Test Result", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "ups.test.date": SensorEntityDescription( key="ups.test.date", name="Self-Test Date", unit_of_measurement=None, icon="mdi:calendar", device_class=None, state_class=None, ), "ups.display.language": SensorEntityDescription( key="ups.display.language", name="Language", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "ups.contacts": SensorEntityDescription( key="ups.contacts", name="External Contacts", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "ups.efficiency": SensorEntityDescription( key="ups.efficiency", name="Efficiency", unit_of_measurement=PERCENTAGE, icon="mdi:gauge", device_class=None, state_class=STATE_CLASS_MEASUREMENT, ), "ups.power": SensorEntityDescription( key="ups.power", name="Current Apparent Power", unit_of_measurement=POWER_VOLT_AMPERE, icon="mdi:flash", device_class=None, state_class=STATE_CLASS_MEASUREMENT, ), "ups.power.nominal": SensorEntityDescription( key="ups.power.nominal", name="Nominal Power", unit_of_measurement=POWER_VOLT_AMPERE, icon="mdi:flash", device_class=None, state_class=None, ), "ups.realpower": SensorEntityDescription( key="ups.realpower", name="Current Real Power", unit_of_measurement=POWER_WATT, icon=None, device_class=DEVICE_CLASS_POWER, state_class=STATE_CLASS_MEASUREMENT, ), "ups.realpower.nominal": SensorEntityDescription( key="ups.realpower.nominal", name="Nominal Real Power", unit_of_measurement=POWER_WATT, icon=None, device_class=DEVICE_CLASS_POWER, state_class=None, ), "ups.beeper.status": SensorEntityDescription( key="ups.beeper.status", name="Beeper Status", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "ups.type": SensorEntityDescription( key="ups.type", name="UPS Type", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "ups.watchdog.status": SensorEntityDescription( key="ups.watchdog.status", name="Watchdog Status", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "ups.start.auto": SensorEntityDescription( key="ups.start.auto", name="Start on AC", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "ups.start.battery": SensorEntityDescription( key="ups.start.battery", name="Start on Battery", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "ups.start.reboot": SensorEntityDescription( key="ups.start.reboot", name="Reboot on Battery", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "ups.shutdown": SensorEntityDescription( key="ups.shutdown", name="Shutdown Ability", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "battery.charge": SensorEntityDescription( key="battery.charge", name="Battery Charge", unit_of_measurement=PERCENTAGE, icon=None, device_class=DEVICE_CLASS_BATTERY, state_class=STATE_CLASS_MEASUREMENT, ), "battery.charge.low": SensorEntityDescription( key="battery.charge.low", name="Low Battery Setpoint", unit_of_measurement=PERCENTAGE, icon="mdi:gauge", device_class=None, state_class=None, ), "battery.charge.restart": SensorEntityDescription( key="battery.charge.restart", name="Minimum Battery to Start", unit_of_measurement=PERCENTAGE, icon="mdi:gauge", device_class=None, state_class=None, ), "battery.charge.warning": SensorEntityDescription( key="battery.charge.warning", name="Warning Battery Setpoint", unit_of_measurement=PERCENTAGE, icon="mdi:gauge", device_class=None, state_class=None, ), "battery.charger.status": SensorEntityDescription( key="battery.charger.status", name="Charging Status", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "battery.voltage": SensorEntityDescription( key="battery.voltage", name="Battery Voltage", unit_of_measurement=ELECTRIC_POTENTIAL_VOLT, icon=None, device_class=DEVICE_CLASS_VOLTAGE, state_class=STATE_CLASS_MEASUREMENT, ), "battery.voltage.nominal": SensorEntityDescription( key="battery.voltage.nominal", name="Nominal Battery Voltage", unit_of_measurement=ELECTRIC_POTENTIAL_VOLT, icon=None, device_class=DEVICE_CLASS_VOLTAGE, state_class=None, ), "battery.voltage.low": SensorEntityDescription( key="battery.voltage.low", name="Low Battery Voltage", unit_of_measurement=ELECTRIC_POTENTIAL_VOLT, icon=None, device_class=DEVICE_CLASS_VOLTAGE, state_class=None, ), "battery.voltage.high": SensorEntityDescription( key="battery.voltage.high", name="High Battery Voltage", unit_of_measurement=ELECTRIC_POTENTIAL_VOLT, icon=None, device_class=DEVICE_CLASS_VOLTAGE, state_class=None, ), "battery.capacity": SensorEntityDescription( key="battery.capacity", name="Battery Capacity", unit_of_measurement="Ah", icon="mdi:flash", device_class=None, state_class=None, ), "battery.current": SensorEntityDescription( key="battery.current", name="Battery Current", unit_of_measurement=ELECTRIC_CURRENT_AMPERE, icon="mdi:flash", device_class=None, state_class=STATE_CLASS_MEASUREMENT, ), "battery.current.total": SensorEntityDescription( key="battery.current.total", name="Total Battery Current", unit_of_measurement=ELECTRIC_CURRENT_AMPERE, icon="mdi:flash", device_class=None, state_class=None, ), "battery.temperature": SensorEntityDescription( key="battery.temperature", name="Battery Temperature", unit_of_measurement=TEMP_CELSIUS, icon=None, device_class=DEVICE_CLASS_TEMPERATURE, state_class=STATE_CLASS_MEASUREMENT, ), "battery.runtime": SensorEntityDescription( key="battery.runtime", name="Battery Runtime", unit_of_measurement=TIME_SECONDS, icon="mdi:timer-outline", device_class=None, state_class=None, ), "battery.runtime.low": SensorEntityDescription( key="battery.runtime.low", name="Low Battery Runtime", unit_of_measurement=TIME_SECONDS, icon="mdi:timer-outline", device_class=None, state_class=None, ), "battery.runtime.restart": SensorEntityDescription( key="battery.runtime.restart", name="Minimum Battery Runtime to Start", unit_of_measurement=TIME_SECONDS, icon="mdi:timer-outline", device_class=None, state_class=None, ), "battery.alarm.threshold": SensorEntityDescription( key="battery.alarm.threshold", name="Battery Alarm Threshold", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "battery.date": SensorEntityDescription( key="battery.date", name="Battery Date", unit_of_measurement=None, icon="mdi:calendar", device_class=None, state_class=None, ), "battery.mfr.date": SensorEntityDescription( key="battery.mfr.date", name="Battery Manuf. Date", unit_of_measurement=None, icon="mdi:calendar", device_class=None, state_class=None, ), "battery.packs": SensorEntityDescription( key="battery.packs", name="Number of Batteries", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "battery.packs.bad": SensorEntityDescription( key="battery.packs.bad", name="Number of Bad Batteries", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "battery.type": SensorEntityDescription( key="battery.type", name="Battery Chemistry", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "input.sensitivity": SensorEntityDescription( key="input.sensitivity", name="Input Power Sensitivity", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "input.transfer.low": SensorEntityDescription( key="input.transfer.low", name="Low Voltage Transfer", unit_of_measurement=ELECTRIC_POTENTIAL_VOLT, icon=None, device_class=DEVICE_CLASS_VOLTAGE, state_class=None, ), "input.transfer.high": SensorEntityDescription( key="input.transfer.high", name="High Voltage Transfer", unit_of_measurement=ELECTRIC_POTENTIAL_VOLT, icon=None, device_class=DEVICE_CLASS_VOLTAGE, state_class=None, ), "input.transfer.reason": SensorEntityDescription( key="input.transfer.reason", name="Voltage Transfer Reason", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "input.voltage": SensorEntityDescription( key="input.voltage", name="Input Voltage", unit_of_measurement=ELECTRIC_POTENTIAL_VOLT, icon=None, device_class=DEVICE_CLASS_VOLTAGE, state_class=STATE_CLASS_MEASUREMENT, ), "input.voltage.nominal": SensorEntityDescription( key="input.voltage.nominal", name="Nominal Input Voltage", unit_of_measurement=ELECTRIC_POTENTIAL_VOLT, icon=None, device_class=DEVICE_CLASS_VOLTAGE, state_class=None, ), "input.frequency": SensorEntityDescription( key="input.frequency", name="Input Line Frequency", unit_of_measurement=FREQUENCY_HERTZ, icon="mdi:flash", device_class=None, state_class=STATE_CLASS_MEASUREMENT, ), "input.frequency.nominal": SensorEntityDescription( key="input.frequency.nominal", name="Nominal Input Line Frequency", unit_of_measurement=FREQUENCY_HERTZ, icon="mdi:flash", device_class=None, state_class=None, ), "input.frequency.status": SensorEntityDescription( key="input.frequency.status", name="Input Frequency Status", unit_of_measurement=None, icon="mdi:information-outline", device_class=None, state_class=None, ), "output.current": SensorEntityDescription( key="output.current", name="Output Current", unit_of_measurement=ELECTRIC_CURRENT_AMPERE, icon="mdi:flash", device_class=None, state_class=STATE_CLASS_MEASUREMENT, ), "output.current.nominal": SensorEntityDescription( key="output.current.nominal", name="Nominal Output Current", unit_of_measurement=ELECTRIC_CURRENT_AMPERE, icon="mdi:flash", device_class=None, state_class=None, ), "output.voltage": SensorEntityDescription( key="output.voltage", name="Output Voltage", unit_of_measurement=ELECTRIC_POTENTIAL_VOLT, icon=None, device_class=DEVICE_CLASS_VOLTAGE, state_class=STATE_CLASS_MEASUREMENT, ), "output.voltage.nominal": SensorEntityDescription( key="output.voltage.nominal", name="Nominal Output Voltage", unit_of_measurement=ELECTRIC_POTENTIAL_VOLT, icon=None, device_class=DEVICE_CLASS_VOLTAGE, state_class=None, ), "output.frequency": SensorEntityDescription( key="output.frequency", name="Output Frequency", unit_of_measurement=FREQUENCY_HERTZ, icon="mdi:flash", device_class=None, state_class=STATE_CLASS_MEASUREMENT, ), "output.frequency.nominal": SensorEntityDescription( key="output.frequency.nominal", name="Nominal Output Frequency", unit_of_measurement=FREQUENCY_HERTZ, icon="mdi:flash", device_class=None, state_class=None, ), "ambient.humidity": SensorEntityDescription( key="ambient.humidity", name="Ambient Humidity", unit_of_measurement=PERCENTAGE, icon=None, device_class=DEVICE_CLASS_HUMIDITY, state_class=STATE_CLASS_MEASUREMENT, ), "ambient.temperature": SensorEntityDescription( key="ambient.temperature", name="Ambient Temperature", unit_of_measurement=TEMP_CELSIUS, icon=None, device_class=DEVICE_CLASS_TEMPERATURE, state_class=STATE_CLASS_MEASUREMENT, ), } STATE_TYPES = { "OL": "Online", "OB": "On Battery", "LB": "Low Battery", "HB": "High Battery", "RB": "Battery Needs Replaced", "CHRG": "Battery Charging", "DISCHRG": "Battery Discharging", "BYPASS": "Bypass Active", "CAL": "Runtime Calibration", "OFF": "Offline", "OVER": "Overloaded", "TRIM": "Trimming Voltage", "BOOST": "Boosting Voltage", "FSD": "Forced Shutdown", "ALARM": "Alarm", }