mirror of
https://github.com/home-assistant/core.git
synced 2025-04-24 01:08:12 +00:00
Add energy and additional sensors to oncue (#64097)
- The genset total energy can now be added to the energy dashboard
This commit is contained in:
parent
b273c37d2b
commit
8f8ea5b102
@ -3,6 +3,7 @@ from __future__ import annotations
|
||||
|
||||
from aiooncue import OncueDevice, OncueSensor
|
||||
|
||||
from homeassistant.helpers import device_registry as dr
|
||||
from homeassistant.helpers.entity import DeviceInfo, Entity, EntityDescription
|
||||
from homeassistant.helpers.update_coordinator import (
|
||||
CoordinatorEntity,
|
||||
@ -29,8 +30,10 @@ class OncueEntity(CoordinatorEntity, Entity):
|
||||
self._device_id = device_id
|
||||
self._attr_unique_id = f"{device_id}_{description.key}"
|
||||
self._attr_name = f"{device.name} {sensor.display_name}"
|
||||
mac_address_hex = hex(int(device.sensors["MacAddress"].value))[2:]
|
||||
self._attr_device_info = DeviceInfo(
|
||||
identifiers={(DOMAIN, device_id)},
|
||||
connections={(dr.CONNECTION_NETWORK_MAC, mac_address_hex)},
|
||||
name=device.name,
|
||||
hw_version=device.hardware_version,
|
||||
sw_version=device.sensors["FirmwareVersion"].display_value,
|
||||
|
@ -3,7 +3,7 @@
|
||||
"name": "Oncue by Kohler",
|
||||
"config_flow": true,
|
||||
"documentation": "https://www.home-assistant.io/integrations/oncue",
|
||||
"requirements": ["aiooncue==0.3.0"],
|
||||
"requirements": ["aiooncue==0.3.2"],
|
||||
"codeowners": ["@bdraco"],
|
||||
"iot_class": "cloud_polling"
|
||||
}
|
||||
|
@ -11,7 +11,9 @@ from homeassistant.components.sensor import (
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import (
|
||||
ELECTRIC_CURRENT_AMPERE,
|
||||
ELECTRIC_POTENTIAL_VOLT,
|
||||
ENERGY_KILO_WATT_HOUR,
|
||||
FREQUENCY_HERTZ,
|
||||
PERCENTAGE,
|
||||
POWER_WATT,
|
||||
@ -38,6 +40,11 @@ SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
|
||||
icon="mdi:speedometer",
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key="EngineTargetSpeed",
|
||||
icon="mdi:speedometer",
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key="EngineOilPressure",
|
||||
native_unit_of_measurement=PRESSURE_PSI,
|
||||
@ -113,6 +120,11 @@ SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
|
||||
icon="mdi:hours-24",
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key="EngineTotalRunTimeLoaded",
|
||||
icon="mdi:hours-24",
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
SensorEntityDescription(key="AtsContactorPosition", icon="mdi:electric-switch"),
|
||||
SensorEntityDescription(
|
||||
key="IPAddress",
|
||||
@ -124,6 +136,38 @@ SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
|
||||
icon="mdi:server-network",
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key="Source1VoltageAverageLineToLine",
|
||||
native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
|
||||
device_class=SensorDeviceClass.VOLTAGE,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key="Source2VoltageAverageLineToLine",
|
||||
native_unit_of_measurement=ELECTRIC_POTENTIAL_VOLT,
|
||||
device_class=SensorDeviceClass.VOLTAGE,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key="GensetTotalEnergy",
|
||||
native_unit_of_measurement=ENERGY_KILO_WATT_HOUR,
|
||||
device_class=SensorDeviceClass.ENERGY,
|
||||
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key="EngineTotalNumberOfStarts",
|
||||
icon="mdi:engine",
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key="GeneratorCurrentAverage",
|
||||
native_unit_of_measurement=ELECTRIC_CURRENT_AMPERE,
|
||||
device_class=SensorDeviceClass.CURRENT,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
),
|
||||
)
|
||||
|
||||
SENSOR_MAP = {description.key: description for description in SENSOR_TYPES}
|
||||
|
@ -233,7 +233,7 @@ aionotify==0.2.0
|
||||
aionotion==3.0.2
|
||||
|
||||
# homeassistant.components.oncue
|
||||
aiooncue==0.3.0
|
||||
aiooncue==0.3.2
|
||||
|
||||
# homeassistant.components.acmeda
|
||||
aiopulse==0.4.3
|
||||
|
@ -165,7 +165,7 @@ aionanoleaf==0.1.1
|
||||
aionotion==3.0.2
|
||||
|
||||
# homeassistant.components.oncue
|
||||
aiooncue==0.3.0
|
||||
aiooncue==0.3.2
|
||||
|
||||
# homeassistant.components.acmeda
|
||||
aiopulse==0.4.3
|
||||
|
@ -40,6 +40,13 @@ MOCK_ASYNC_FETCH_ALL = {
|
||||
display_value="0 R/min",
|
||||
unit="R/min",
|
||||
),
|
||||
"EngineTargetSpeed": OncueSensor(
|
||||
name="EngineTargetSpeed",
|
||||
display_name="Engine Target Speed",
|
||||
value="0",
|
||||
display_value="0 R/min",
|
||||
unit="R/min",
|
||||
),
|
||||
"EngineOilPressure": OncueSensor(
|
||||
name="EngineOilPressure",
|
||||
display_name="Engine Oil Pressure",
|
||||
@ -57,8 +64,8 @@ MOCK_ASYNC_FETCH_ALL = {
|
||||
"BatteryVoltage": OncueSensor(
|
||||
name="BatteryVoltage",
|
||||
display_name="Battery Voltage",
|
||||
value="13.5",
|
||||
display_value="13.5 V",
|
||||
value="13.4",
|
||||
display_value="13.4 V",
|
||||
unit="V",
|
||||
),
|
||||
"LubeOilTemperature": OncueSensor(
|
||||
@ -71,15 +78,15 @@ MOCK_ASYNC_FETCH_ALL = {
|
||||
"GensetControllerTemperature": OncueSensor(
|
||||
name="GensetControllerTemperature",
|
||||
display_name="Generator Controller Temperature",
|
||||
value=100.4,
|
||||
display_value="100.4 F",
|
||||
value=84.2,
|
||||
display_value="84.2 F",
|
||||
unit="F",
|
||||
),
|
||||
"EngineCompartmentTemperature": OncueSensor(
|
||||
name="EngineCompartmentTemperature",
|
||||
display_name="Engine Compartment Temperature",
|
||||
value=84.2,
|
||||
display_value="84.2 F",
|
||||
value=62.6,
|
||||
display_value="62.6 F",
|
||||
unit="F",
|
||||
),
|
||||
"GeneratorTrueTotalPower": OncueSensor(
|
||||
@ -96,6 +103,13 @@ MOCK_ASYNC_FETCH_ALL = {
|
||||
display_value="0 %",
|
||||
unit="%",
|
||||
),
|
||||
"GeneratorVoltageAB": OncueSensor(
|
||||
name="GeneratorVoltageAB",
|
||||
display_name="Generator Voltage AB",
|
||||
value="0.0",
|
||||
display_value="0.0 V",
|
||||
unit="V",
|
||||
),
|
||||
"GeneratorVoltageAverageLineToLine": OncueSensor(
|
||||
name="GeneratorVoltageAverageLineToLine",
|
||||
display_name="Generator Voltage Average Line To Line",
|
||||
@ -103,6 +117,13 @@ MOCK_ASYNC_FETCH_ALL = {
|
||||
display_value="0.0 V",
|
||||
unit="V",
|
||||
),
|
||||
"GeneratorCurrentAverage": OncueSensor(
|
||||
name="GeneratorCurrentAverage",
|
||||
display_name="Generator Current Average",
|
||||
value="0.0",
|
||||
display_value="0.0 A",
|
||||
unit="A",
|
||||
),
|
||||
"GeneratorFrequency": OncueSensor(
|
||||
name="GeneratorFrequency",
|
||||
display_name="Generator Frequency",
|
||||
@ -124,6 +145,13 @@ MOCK_ASYNC_FETCH_ALL = {
|
||||
display_value="Off",
|
||||
unit=None,
|
||||
),
|
||||
"GensetControllerSerialNumber": OncueSensor(
|
||||
name="GensetControllerSerialNumber",
|
||||
display_name="Generator Controller Serial Number",
|
||||
value="-1",
|
||||
display_value="-1",
|
||||
unit=None,
|
||||
),
|
||||
"GensetModelNumberSelect": OncueSensor(
|
||||
name="GensetModelNumberSelect",
|
||||
display_name="Genset Model Number Select",
|
||||
@ -134,15 +162,15 @@ MOCK_ASYNC_FETCH_ALL = {
|
||||
"GensetControllerClockTime": OncueSensor(
|
||||
name="GensetControllerClockTime",
|
||||
display_name="Generator Controller Clock Time",
|
||||
value="2022-01-01 17:20:52",
|
||||
display_value="2022-01-01 17:20:52",
|
||||
value="2022-01-13 18:08:13",
|
||||
display_value="2022-01-13 18:08:13",
|
||||
unit=None,
|
||||
),
|
||||
"GensetControllerTotalOperationTime": OncueSensor(
|
||||
name="GensetControllerTotalOperationTime",
|
||||
display_name="Generator Controller Total Operation Time",
|
||||
value="16482.0",
|
||||
display_value="16482.0 h",
|
||||
value="16770.8",
|
||||
display_value="16770.8 h",
|
||||
unit="h",
|
||||
),
|
||||
"EngineTotalRunTime": OncueSensor(
|
||||
@ -152,6 +180,27 @@ MOCK_ASYNC_FETCH_ALL = {
|
||||
display_value="28.1 h",
|
||||
unit="h",
|
||||
),
|
||||
"EngineTotalRunTimeLoaded": OncueSensor(
|
||||
name="EngineTotalRunTimeLoaded",
|
||||
display_name="Engine Total Run Time Loaded",
|
||||
value="5.5",
|
||||
display_value="5.5 h",
|
||||
unit="h",
|
||||
),
|
||||
"EngineTotalNumberOfStarts": OncueSensor(
|
||||
name="EngineTotalNumberOfStarts",
|
||||
display_name="Engine Total Number Of Starts",
|
||||
value="101",
|
||||
display_value="101",
|
||||
unit=None,
|
||||
),
|
||||
"GensetTotalEnergy": OncueSensor(
|
||||
name="GensetTotalEnergy",
|
||||
display_name="Genset Total Energy",
|
||||
value="1.2022309E7",
|
||||
display_value="1.2022309E7 kWh",
|
||||
unit="kWh",
|
||||
),
|
||||
"AtsContactorPosition": OncueSensor(
|
||||
name="AtsContactorPosition",
|
||||
display_name="Ats Contactor Position",
|
||||
@ -159,6 +208,27 @@ MOCK_ASYNC_FETCH_ALL = {
|
||||
display_value="Source1",
|
||||
unit=None,
|
||||
),
|
||||
"AtsSourcesAvailable": OncueSensor(
|
||||
name="AtsSourcesAvailable",
|
||||
display_name="Ats Sources Available",
|
||||
value="Source1",
|
||||
display_value="Source1",
|
||||
unit=None,
|
||||
),
|
||||
"Source1VoltageAverageLineToLine": OncueSensor(
|
||||
name="Source1VoltageAverageLineToLine",
|
||||
display_name="Source1 Voltage Average Line To Line",
|
||||
value="253.5",
|
||||
display_value="253.5 V",
|
||||
unit="V",
|
||||
),
|
||||
"Source2VoltageAverageLineToLine": OncueSensor(
|
||||
name="Source2VoltageAverageLineToLine",
|
||||
display_name="Source2 Voltage Average Line To Line",
|
||||
value="0.0",
|
||||
display_value="0.0 V",
|
||||
unit="V",
|
||||
),
|
||||
"IPAddress": OncueSensor(
|
||||
name="IPAddress",
|
||||
display_name="IP Address",
|
||||
@ -166,6 +236,13 @@ MOCK_ASYNC_FETCH_ALL = {
|
||||
display_value="1.2.3.4:1026",
|
||||
unit=None,
|
||||
),
|
||||
"MacAddress": OncueSensor(
|
||||
name="MacAddress",
|
||||
display_name="Mac Address",
|
||||
value="221157033710592",
|
||||
display_value="221157033710592",
|
||||
unit=None,
|
||||
),
|
||||
"ConnectedServerIPAddress": OncueSensor(
|
||||
name="ConnectedServerIPAddress",
|
||||
display_name="Connected Server IP Address",
|
||||
@ -180,6 +257,13 @@ MOCK_ASYNC_FETCH_ALL = {
|
||||
display_value="True",
|
||||
unit=None,
|
||||
),
|
||||
"SerialNumber": OncueSensor(
|
||||
name="SerialNumber",
|
||||
display_name="Serial Number",
|
||||
value="1073879692",
|
||||
display_value="1073879692",
|
||||
unit=None,
|
||||
),
|
||||
},
|
||||
)
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ async def test_sensors(hass: HomeAssistant) -> None:
|
||||
await hass.async_block_till_done()
|
||||
assert config_entry.state == ConfigEntryState.LOADED
|
||||
|
||||
assert len(hass.states.async_all("sensor")) == 18
|
||||
assert len(hass.states.async_all("sensor")) == 25
|
||||
assert hass.states.get("sensor.my_generator_latest_firmware").state == "2.0.6"
|
||||
|
||||
assert hass.states.get("sensor.my_generator_engine_speed").state == "0"
|
||||
@ -37,18 +37,18 @@ async def test_sensors(hass: HomeAssistant) -> None:
|
||||
hass.states.get("sensor.my_generator_engine_coolant_temperature").state == "0"
|
||||
)
|
||||
|
||||
assert hass.states.get("sensor.my_generator_battery_voltage").state == "13.5"
|
||||
assert hass.states.get("sensor.my_generator_battery_voltage").state == "13.4"
|
||||
|
||||
assert hass.states.get("sensor.my_generator_lube_oil_temperature").state == "0"
|
||||
|
||||
assert (
|
||||
hass.states.get("sensor.my_generator_generator_controller_temperature").state
|
||||
== "38.0"
|
||||
== "29.0"
|
||||
)
|
||||
|
||||
assert (
|
||||
hass.states.get("sensor.my_generator_engine_compartment_temperature").state
|
||||
== "29.0"
|
||||
== "17.0"
|
||||
)
|
||||
|
||||
assert (
|
||||
@ -77,7 +77,7 @@ async def test_sensors(hass: HomeAssistant) -> None:
|
||||
hass.states.get(
|
||||
"sensor.my_generator_generator_controller_total_operation_time"
|
||||
).state
|
||||
== "16482.0"
|
||||
== "16770.8"
|
||||
)
|
||||
|
||||
assert hass.states.get("sensor.my_generator_engine_total_run_time").state == "28.1"
|
||||
@ -92,3 +92,36 @@ async def test_sensors(hass: HomeAssistant) -> None:
|
||||
hass.states.get("sensor.my_generator_connected_server_ip_address").state
|
||||
== "40.117.195.28"
|
||||
)
|
||||
|
||||
assert hass.states.get("sensor.my_generator_engine_target_speed").state == "0"
|
||||
|
||||
assert (
|
||||
hass.states.get("sensor.my_generator_engine_total_run_time_loaded").state
|
||||
== "5.5"
|
||||
)
|
||||
|
||||
assert (
|
||||
hass.states.get(
|
||||
"sensor.my_generator_source1_voltage_average_line_to_line"
|
||||
).state
|
||||
== "253.5"
|
||||
)
|
||||
|
||||
assert (
|
||||
hass.states.get(
|
||||
"sensor.my_generator_source2_voltage_average_line_to_line"
|
||||
).state
|
||||
== "0.0"
|
||||
)
|
||||
|
||||
assert (
|
||||
hass.states.get("sensor.my_generator_genset_total_energy").state
|
||||
== "1.2022309E7"
|
||||
)
|
||||
assert (
|
||||
hass.states.get("sensor.my_generator_engine_total_number_of_starts").state
|
||||
== "101"
|
||||
)
|
||||
assert (
|
||||
hass.states.get("sensor.my_generator_generator_current_average").state == "0.0"
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user