mirror of
https://github.com/Hypfer/Valetudo.git
synced 2025-10-26 11:27:27 +00:00
feat(mqtt): Add missing deviceClass + stateClass attributes, update enums and fix units for HA
This commit is contained in:
parent
bb2df9825e
commit
921dd13b82
@ -3,10 +3,12 @@ const CapabilityMqttHandle = require("./CapabilityMqttHandle");
|
||||
const Commands = require("../common/Commands");
|
||||
const ComponentType = require("../homeassistant/ComponentType");
|
||||
const DataType = require("../homie/DataType");
|
||||
const DeviceClass = require("../homeassistant/DeviceClass");
|
||||
const EntityCategory = require("../homeassistant/EntityCategory");
|
||||
const HassAnchor = require("../homeassistant/HassAnchor");
|
||||
const InLineHassComponent = require("../homeassistant/components/InLineHassComponent");
|
||||
const PropertyMqttHandle = require("../handles/PropertyMqttHandle");
|
||||
const StateClass = require("../homeassistant/StateClass");
|
||||
const Unit = require("../common/Unit");
|
||||
const ValetudoConsumable = require("../../entities/core/ValetudoConsumable");
|
||||
|
||||
@ -124,7 +126,9 @@ class ConsumableMonitoringCapabilityMqttHandle extends CapabilityMqttHandle {
|
||||
),
|
||||
unit_of_measurement: unit === ValetudoConsumable.UNITS.PERCENT ? Unit.PERCENT : Unit.MINUTES,
|
||||
icon: "mdi:progress-wrench",
|
||||
entity_category: EntityCategory.DIAGNOSTIC
|
||||
entity_category: EntityCategory.DIAGNOSTIC,
|
||||
state_class: StateClass.MEASUREMENT,
|
||||
device_class: unit === ValetudoConsumable.UNITS.MINUTES ? DeviceClass.DURATION : undefined
|
||||
},
|
||||
topics: {
|
||||
"": this.controller.hassAnchorProvider.getAnchor(
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
const CapabilityMqttHandle = require("./CapabilityMqttHandle");
|
||||
const ComponentType = require("../homeassistant/ComponentType");
|
||||
const DataType = require("../homie/DataType");
|
||||
const DeviceClass = require("../homeassistant/DeviceClass");
|
||||
const EntityCategory = require("../homeassistant/EntityCategory");
|
||||
const HassAnchor = require("../homeassistant/HassAnchor");
|
||||
const InLineHassComponent = require("../homeassistant/components/InLineHassComponent");
|
||||
const Logger = require("../../Logger");
|
||||
const PropertyMqttHandle = require("../handles/PropertyMqttHandle");
|
||||
const StateClass = require("../homeassistant/StateClass");
|
||||
const Unit = require("../common/Unit");
|
||||
const ValetudoDataPoint = require("../../entities/core/ValetudoDataPoint");
|
||||
|
||||
@ -56,7 +58,9 @@ class CurrentStatisticsCapabilityMqttHandle extends CapabilityMqttHandle {
|
||||
state_topic: prop.getBaseTopic(),
|
||||
icon: "mdi:equalizer",
|
||||
entity_category: EntityCategory.DIAGNOSTIC,
|
||||
unit_of_measurement: Unit.SECONDS
|
||||
unit_of_measurement: Unit.SECONDS,
|
||||
device_class: DeviceClass.DURATION,
|
||||
state_class: StateClass.MEASUREMENT
|
||||
}
|
||||
})
|
||||
);
|
||||
@ -92,7 +96,9 @@ class CurrentStatisticsCapabilityMqttHandle extends CapabilityMqttHandle {
|
||||
state_topic: prop.getBaseTopic(),
|
||||
icon: "mdi:equalizer",
|
||||
entity_category: EntityCategory.DIAGNOSTIC,
|
||||
unit_of_measurement: Unit.SQUARE_CENTIMETER
|
||||
unit_of_measurement: Unit.SQUARE_CENTIMETER,
|
||||
device_class: DeviceClass.AREA,
|
||||
state_class: StateClass.MEASUREMENT
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
const CapabilityMqttHandle = require("./CapabilityMqttHandle");
|
||||
const ComponentType = require("../homeassistant/ComponentType");
|
||||
const DataType = require("../homie/DataType");
|
||||
const DeviceClass = require("../homeassistant/DeviceClass");
|
||||
const EntityCategory = require("../homeassistant/EntityCategory");
|
||||
const HassAnchor = require("../homeassistant/HassAnchor");
|
||||
const InLineHassComponent = require("../homeassistant/components/InLineHassComponent");
|
||||
const Logger = require("../../Logger");
|
||||
const PropertyMqttHandle = require("../handles/PropertyMqttHandle");
|
||||
const StateClass = require("../homeassistant/StateClass");
|
||||
const Unit = require("../common/Unit");
|
||||
const ValetudoDataPoint = require("../../entities/core/ValetudoDataPoint");
|
||||
|
||||
@ -56,7 +58,9 @@ class TotalStatisticsCapabilityMqttHandle extends CapabilityMqttHandle {
|
||||
state_topic: prop.getBaseTopic(),
|
||||
icon: "mdi:equalizer",
|
||||
entity_category: EntityCategory.DIAGNOSTIC,
|
||||
unit_of_measurement: Unit.SECONDS
|
||||
unit_of_measurement: Unit.SECONDS,
|
||||
device_class: DeviceClass.DURATION,
|
||||
state_class: StateClass.TOTAL_INCREASING
|
||||
}
|
||||
})
|
||||
);
|
||||
@ -92,7 +96,9 @@ class TotalStatisticsCapabilityMqttHandle extends CapabilityMqttHandle {
|
||||
state_topic: prop.getBaseTopic(),
|
||||
icon: "mdi:equalizer",
|
||||
entity_category: EntityCategory.DIAGNOSTIC,
|
||||
unit_of_measurement: Unit.SQUARE_CENTIMETER
|
||||
unit_of_measurement: Unit.SQUARE_CENTIMETER,
|
||||
device_class: DeviceClass.AREA,
|
||||
state_class: StateClass.TOTAL_INCREASING
|
||||
}
|
||||
})
|
||||
);
|
||||
@ -126,7 +132,8 @@ class TotalStatisticsCapabilityMqttHandle extends CapabilityMqttHandle {
|
||||
autoconf: {
|
||||
state_topic: prop.getBaseTopic(),
|
||||
icon: "mdi:equalizer",
|
||||
entity_category: EntityCategory.DIAGNOSTIC
|
||||
entity_category: EntityCategory.DIAGNOSTIC,
|
||||
state_class: StateClass.TOTAL_INCREASING
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
@ -6,6 +6,7 @@ const EntityCategory = require("../homeassistant/EntityCategory");
|
||||
const HassAnchor = require("../homeassistant/HassAnchor");
|
||||
const InLineHassComponent = require("../homeassistant/components/InLineHassComponent");
|
||||
const PropertyMqttHandle = require("../handles/PropertyMqttHandle");
|
||||
const StateClass = require("../homeassistant/StateClass");
|
||||
const Unit = require("../common/Unit");
|
||||
|
||||
class WifiConfigurationCapabilityMqttHandle extends CapabilityMqttHandle {
|
||||
@ -98,7 +99,8 @@ class WifiConfigurationCapabilityMqttHandle extends CapabilityMqttHandle {
|
||||
),
|
||||
json_attributes_template: "{{ value_json.attributes | to_json }}",
|
||||
entity_category: EntityCategory.DIAGNOSTIC,
|
||||
device_class: DeviceClass.SIGNAL_STRENGTH
|
||||
device_class: DeviceClass.SIGNAL_STRENGTH,
|
||||
state_class: StateClass.MEASUREMENT
|
||||
},
|
||||
topics: {
|
||||
"": {
|
||||
|
||||
@ -22,9 +22,10 @@ const Unit = Object.freeze({
|
||||
PASCAL: "Pa",
|
||||
PSI: "psi",
|
||||
AMOUNT: "#",
|
||||
// Not part of the specification, but useful
|
||||
SECONDS: "seconds",
|
||||
MINUTES: "minutes",
|
||||
|
||||
// Not part of the homie specification
|
||||
SECONDS: "s",
|
||||
MINUTES: "min",
|
||||
SQUARE_CENTIMETER: "cm²",
|
||||
SQUARE_METER: "m²",
|
||||
CUBE_METER: "m³",
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Retrieved from https://www.home-assistant.io/docs/mqtt/discovery/ on 2021-04-05.
|
||||
* Retrieved from https://www.home-assistant.io/docs/mqtt/discovery/ on 2025-09-15.
|
||||
*
|
||||
* @enum {string}
|
||||
*/
|
||||
@ -8,20 +8,30 @@ const ComponentType = Object.freeze({
|
||||
BINARY_SENSOR: "binary_sensor",
|
||||
BUTTON: "button",
|
||||
CAMERA: "camera",
|
||||
CLIMATE: "climate",
|
||||
COVER: "cover",
|
||||
DEVICE_TRACKER: "device_tracker",
|
||||
DEVICE_TRIGGER: "device_trigger",
|
||||
EVENT: "event",
|
||||
FAN: "fan",
|
||||
HVAC: "climate",
|
||||
HUMIDIFIER: "humidifier",
|
||||
IMAGE: "image",
|
||||
LAWN_MOWER: "lawn_mower",
|
||||
LIGHT: "light",
|
||||
LOCK: "lock",
|
||||
NOTIFY: "notify",
|
||||
NUMBER: "number",
|
||||
SCENE: "scene",
|
||||
SELECT: "select",
|
||||
SENSOR: "sensor",
|
||||
SIREN: "siren",
|
||||
SWITCH: "switch",
|
||||
TAG_SCANNER: "tag",
|
||||
TEXT: "text",
|
||||
UPDATE: "update",
|
||||
VACUUM: "vacuum",
|
||||
VALVE: "valve",
|
||||
WATER_HEATER: "water_heater",
|
||||
});
|
||||
|
||||
module.exports = ComponentType;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Retrieved from https://github.com/home-assistant/core/blob/8b1cfbc46cc79e676f75dfa4da097a2e47375b6f/homeassistant/components/sensor/const.py#L64-L416 on 2023-10-25.
|
||||
* Retrieved from https://github.com/home-assistant/core/blob/4c22264b13bf4f7428ab9e911d58725dee512c78/homeassistant/components/sensor/const.py on 2025-09-15.
|
||||
*
|
||||
* See also https://developers.home-assistant.io/docs/core/entity/#generic-properties
|
||||
*
|
||||
@ -9,18 +9,24 @@ const DeviceClass = Object.freeze({
|
||||
DATE: "date",
|
||||
ENUM: "enum",
|
||||
TIMESTAMP: "timestamp",
|
||||
|
||||
ABSOLUTE_HUMIDITY: "absolute_humidity",
|
||||
APPARENT_POWER: "apparent_power",
|
||||
AQI: "aqi",
|
||||
AREA: "area",
|
||||
ATMOSPHERIC_PRESSURE: "atmospheric_pressure",
|
||||
BATTERY: "battery",
|
||||
BLOOD_GLUCOSE_CONCENTRATION: "blood_glucose_concentration",
|
||||
CO: "carbon_monoxide",
|
||||
CO2: "carbon_dioxide",
|
||||
CONDUCTIVITY: "conductivity",
|
||||
CURRENT: "current",
|
||||
DATA_RATE: "data_rate",
|
||||
DATA_SIZE: "data_size",
|
||||
DISTANCE: "distance",
|
||||
DURATION: "duration",
|
||||
ENERGY: "energy",
|
||||
ENERGY_DISTANCE: "energy_distance",
|
||||
ENERGY_STORAGE: "energy_storage",
|
||||
FREQUENCY: "frequency",
|
||||
GAS: "gas",
|
||||
@ -37,11 +43,12 @@ const DeviceClass = Object.freeze({
|
||||
PM1: "pm1",
|
||||
PM10: "pm10",
|
||||
PM25: "pm25",
|
||||
POWER_FACTOR: "power_factor",
|
||||
POWER: "power",
|
||||
POWER_FACTOR: "power_factor",
|
||||
PRECIPITATION: "precipitation",
|
||||
PRECIPITATION_INTENSITY: "precipitation_intensity",
|
||||
PRESSURE: "pressure",
|
||||
REACTIVE_ENERGY: "reactive_energy",
|
||||
REACTIVE_POWER: "reactive_power",
|
||||
SIGNAL_STRENGTH: "signal_strength",
|
||||
SOUND_PRESSURE: "sound_pressure",
|
||||
@ -52,9 +59,11 @@ const DeviceClass = Object.freeze({
|
||||
VOLATILE_ORGANIC_COMPOUNDS_PARTS: "volatile_organic_compounds_parts",
|
||||
VOLTAGE: "voltage",
|
||||
VOLUME: "volume",
|
||||
VOLUME_FLOW_RATE: "volume_flow_rate",
|
||||
VOLUME_STORAGE: "volume_storage",
|
||||
WATER: "water",
|
||||
WEIGHT: "weight",
|
||||
WIND_DIRECTION: "wind_direction",
|
||||
WIND_SPEED: "wind_speed"
|
||||
});
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Retrieved from https://github.com/home-assistant/core/blob/7abf79d1f991d58051fea0afe56e714ce60d7fdb/homeassistant/const.py#L715-L717 on 2021-11-06.
|
||||
* Retrieved from https://github.com/home-assistant/core/blob/c5fc1de3df3db1250e1e21d727bb5849408964a7/homeassistant/const.py#L1074-L1087 on 2025-09-15.
|
||||
*
|
||||
* See also https://developers.home-assistant.io/docs/core/entity/#generic-properties
|
||||
*
|
||||
@ -7,8 +7,7 @@
|
||||
*/
|
||||
const EntityCategory = Object.freeze({
|
||||
CONFIG: "config",
|
||||
DIAGNOSTIC: "diagnostic",
|
||||
SYSTEM: "system"
|
||||
DIAGNOSTIC: "diagnostic"
|
||||
});
|
||||
|
||||
module.exports = EntityCategory;
|
||||
|
||||
13
backend/lib/mqtt/homeassistant/StateClass.js
Normal file
13
backend/lib/mqtt/homeassistant/StateClass.js
Normal file
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Retrieved from https://github.com/home-assistant/core/blob/c5fc1de3df3db1250e1e21d727bb5849408964a7/homeassistant/components/sensor/const.py#L509-L526 on 2025-09-15.
|
||||
*
|
||||
* @enum {string}
|
||||
*/
|
||||
const StateClass = Object.freeze({
|
||||
MEASUREMENT: "measurement",
|
||||
MEASUREMENT_ANGLE: "measurement_angle",
|
||||
TOTAL: "total",
|
||||
TOTAL_INCREASING: "total_increasing",
|
||||
});
|
||||
|
||||
module.exports = StateClass;
|
||||
@ -6,6 +6,7 @@ const InLineHassComponent = require("../homeassistant/components/InLineHassCompo
|
||||
const PropertyMqttHandle = require("../handles/PropertyMqttHandle");
|
||||
const RobotStateNodeMqttHandle = require("../handles/RobotStateNodeMqttHandle");
|
||||
const stateAttrs = require("../../entities/state/attributes");
|
||||
const StateClass = require("../homeassistant/StateClass");
|
||||
const Unit = require("../common/Unit");
|
||||
|
||||
class BatteryStateMqttHandle extends RobotStateNodeMqttHandle {
|
||||
@ -51,7 +52,8 @@ class BatteryStateMqttHandle extends RobotStateNodeMqttHandle {
|
||||
icon: "mdi:battery",
|
||||
entity_category: EntityCategory.DIAGNOSTIC,
|
||||
unit_of_measurement: Unit.PERCENT,
|
||||
device_class: DeviceClass.BATTERY
|
||||
device_class: DeviceClass.BATTERY,
|
||||
state_class: StateClass.MEASUREMENT
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user