mirror of
https://github.com/Hypfer/Valetudo.git
synced 2025-10-26 11:27:27 +00:00
feat(mqtt): Publish Dock Status to MQTT
This commit is contained in:
parent
9b98e3ebfe
commit
ee76222a41
@ -34,6 +34,10 @@ const STATUS_ATTR_TO_HANDLE_MAPPING = [
|
||||
{
|
||||
matcher: {attributeClass: stateAttrs.StatusStateAttribute.name},
|
||||
handle: stateHandles.StatusStateMqttHandle
|
||||
},
|
||||
{
|
||||
matcher: {attributeClass: stateAttrs.DockStatusStateAttribute.name},
|
||||
handle: stateHandles.DockStatusStateMqttHandle
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
66
backend/lib/mqtt/status/DockStatusStateMqttHandle.js
Normal file
66
backend/lib/mqtt/status/DockStatusStateMqttHandle.js
Normal file
@ -0,0 +1,66 @@
|
||||
const ComponentType = require("../homeassistant/ComponentType");
|
||||
const DataType = require("../homie/DataType");
|
||||
const EntityCategory = require("../homeassistant/EntityCategory");
|
||||
const InLineHassComponent = require("../homeassistant/components/InLineHassComponent");
|
||||
const PropertyMqttHandle = require("../handles/PropertyMqttHandle");
|
||||
const RobotStateNodeMqttHandle = require("../handles/RobotStateNodeMqttHandle");
|
||||
const stateAttrs = require("../../entities/state/attributes");
|
||||
|
||||
class DockStatusStateMqttHandle extends RobotStateNodeMqttHandle {
|
||||
/**
|
||||
* @param {object} options
|
||||
* @param {import("../handles/RobotMqttHandle")} options.parent
|
||||
* @param {import("../MqttController")} options.controller MqttController instance
|
||||
* @param {import("../../core/ValetudoRobot")} options.robot
|
||||
*/
|
||||
constructor(options) {
|
||||
super(Object.assign(options, {
|
||||
topicName: "DockStatusStateAttribute",
|
||||
friendlyName: "Dock state",
|
||||
type: "Status"
|
||||
}));
|
||||
|
||||
this.registerChild(new PropertyMqttHandle({
|
||||
parent: this,
|
||||
controller: this.controller,
|
||||
topicName: "status",
|
||||
friendlyName: "Status",
|
||||
datatype: DataType.ENUM,
|
||||
format: Object.values(stateAttrs.DockStatusStateAttribute.VALUE).join(","),
|
||||
getter: async () => {
|
||||
const dockStatus = this.robot.state.getFirstMatchingAttribute({
|
||||
attributeClass: stateAttrs.DockStatusStateAttribute.name
|
||||
});
|
||||
|
||||
if (dockStatus === null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return dockStatus.value;
|
||||
},
|
||||
}).also((prop) => {
|
||||
this.controller.withHass((hass => {
|
||||
prop.attachHomeAssistantComponent(
|
||||
new InLineHassComponent({
|
||||
hass: hass,
|
||||
robot: this.robot,
|
||||
name: "dock_status",
|
||||
friendlyName: "Dock Status",
|
||||
componentType: ComponentType.SENSOR,
|
||||
autoconf: {
|
||||
state_topic: prop.getBaseTopic(),
|
||||
icon: "mdi:home",
|
||||
entity_category: EntityCategory.DIAGNOSTIC
|
||||
}
|
||||
})
|
||||
);
|
||||
}));
|
||||
}));
|
||||
}
|
||||
|
||||
getInterestingStatusAttributes() {
|
||||
return [{attributeClass: stateAttrs.DockStatusStateAttribute.name}];
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = DockStatusStateMqttHandle;
|
||||
@ -1,5 +1,6 @@
|
||||
module.exports = {
|
||||
AttachmentStateMqttHandle: require("./AttachmentStateMqttHandle"),
|
||||
BatteryStateMqttHandle: require("./BatteryStateMqttHandle"),
|
||||
StatusStateMqttHandle: require("./StatusStateMqttHandle"),
|
||||
DockStatusStateMqttHandle: require("./DockStatusStateMqttHandle"),
|
||||
StatusStateMqttHandle: require("./StatusStateMqttHandle")
|
||||
};
|
||||
|
||||
@ -20,6 +20,7 @@ const path = require("path");
|
||||
const BatteryStateAttribute = require("../backend/lib/entities/state/attributes/BatteryStateAttribute");
|
||||
const AttachmentStateAttribute = require("../backend/lib/entities/state/attributes/AttachmentStateAttribute");
|
||||
const StatusStateAttribute = require("../backend/lib/entities/state/attributes/StatusStateAttribute");
|
||||
const DockStatusStateAttribute = require("../backend/lib/entities/state/attributes/DockStatusStateAttribute");
|
||||
const PresetSelectionStateAttribute = require("../backend/lib/entities/state/attributes/PresetSelectionStateAttribute");
|
||||
const Unit = require("../backend/lib/mqtt/common/Unit");
|
||||
const HomieCommonAttributes = require("../backend/lib/mqtt/homie/HomieCommonAttributes");
|
||||
@ -237,6 +238,9 @@ class FakeMqttController extends MqttController {
|
||||
value: StatusStateAttribute.VALUE.CLEANING,
|
||||
flag: StatusStateAttribute.FLAG.SEGMENT
|
||||
}),
|
||||
new DockStatusStateAttribute({
|
||||
value: DockStatusStateAttribute.VALUE.IDLE,
|
||||
}),
|
||||
new PresetSelectionStateAttribute({
|
||||
type: PresetSelectionStateAttribute.TYPE.FAN_SPEED,
|
||||
value: PresetSelectionStateAttribute.INTENSITY.MAX
|
||||
|
||||
Loading…
Reference in New Issue
Block a user