From df64958fb330bed72db998f5236bfb348d90778a Mon Sep 17 00:00:00 2001 From: Pierre-Gilles Leymarie <7365207+Pierre-Gilles@users.noreply.github.com> Date: Sat, 4 Apr 2026 15:44:22 +0200 Subject: [PATCH 01/10] Add Matter Vacuum Cleaner --- .../boxs/device-in-room/DeviceRow.jsx | 4 +- .../VacuumCleanerDockDeviceFeature.jsx | 45 ++++ .../sensor-value/SensorDeviceFeature.jsx | 4 +- .../VacuumCleanerStateDeviceValue.jsx | 25 ++ front/src/config/i18n/de.json | 22 +- front/src/config/i18n/en.json | 22 +- front/src/config/i18n/fr.json | 22 +- front/src/utils/consts.js | 6 + .../matter/lib/matter.listenToStateChange.js | 74 ++++++ server/services/matter/lib/matter.setValue.js | 54 ++++- .../matter/utils/convertToGladysDevice.js | 64 +++++ .../matter/utils/vacuumCleanerStateMapping.js | 129 +++++++++++ .../matter/lib/convertToGladysDevice.test.js | 166 ++++++++++++- .../matter/lib/listenToStateChange.test.js | 72 ++++++ .../matter/lib/matter.setValue.test.js | 219 ++++++++++++++++++ .../utils/vacuumCleanerStateMapping.test.js | 102 ++++++++ server/utils/constants.js | 25 ++ 17 files changed, 1048 insertions(+), 7 deletions(-) create mode 100644 front/src/components/boxs/device-in-room/device-features/VacuumCleanerDockDeviceFeature.jsx create mode 100644 front/src/components/boxs/device-in-room/device-features/sensor-value/VacuumCleanerStateDeviceValue.jsx create mode 100644 server/services/matter/utils/vacuumCleanerStateMapping.js create mode 100644 server/test/services/matter/utils/vacuumCleanerStateMapping.test.js diff --git a/front/src/components/boxs/device-in-room/DeviceRow.jsx b/front/src/components/boxs/device-in-room/DeviceRow.jsx index 7f631e4e1c..75303c641f 100644 --- a/front/src/components/boxs/device-in-room/DeviceRow.jsx +++ b/front/src/components/boxs/device-in-room/DeviceRow.jsx @@ -15,6 +15,7 @@ import AirConditioningModeDeviceFeature from './device-features/AirConditioningM import PilotWireModeDeviceFeature from './device-features/PilotWireModeDeviceFeature'; import LMHVolumeDeviceFeature from './device-features/LMHVolumeDeviceFeature'; import PushDeviceFeature from './device-features/PushDeviceFeature'; +import VacuumCleanerDockDeviceFeature from './device-features/VacuumCleanerDockDeviceFeature'; const ROW_TYPE_BY_FEATURE_TYPE = { [DEVICE_FEATURE_TYPES.LIGHT.BINARY]: BinaryDeviceFeature, @@ -44,7 +45,8 @@ const ROW_TYPE_BY_FEATURE_TYPE = { [DEVICE_FEATURE_TYPES.ELECTRICAL_VEHICLE_CLIMATE.CLIMATE_ON]: BinaryDeviceFeature, [DEVICE_FEATURE_TYPES.ELECTRICAL_VEHICLE_CLIMATE.TARGET_TEMPERATURE]: SetpointDeviceFeature, [DEVICE_FEATURE_TYPES.ELECTRICAL_VEHICLE_COMMAND.ALARM]: BinaryDeviceFeature, - [DEVICE_FEATURE_TYPES.ELECTRICAL_VEHICLE_COMMAND.LOCK]: BinaryDeviceFeature + [DEVICE_FEATURE_TYPES.ELECTRICAL_VEHICLE_COMMAND.LOCK]: BinaryDeviceFeature, + [DEVICE_FEATURE_TYPES.VACUUM_CLEANER.DOCK]: VacuumCleanerDockDeviceFeature }; const DeviceRow = ({ children, ...props }) => { diff --git a/front/src/components/boxs/device-in-room/device-features/VacuumCleanerDockDeviceFeature.jsx b/front/src/components/boxs/device-in-room/device-features/VacuumCleanerDockDeviceFeature.jsx new file mode 100644 index 0000000000..9b7a795bd5 --- /dev/null +++ b/front/src/components/boxs/device-in-room/device-features/VacuumCleanerDockDeviceFeature.jsx @@ -0,0 +1,45 @@ +import { Component } from 'preact'; +import cx from 'classnames'; +import { Text } from 'preact-i18n'; +import style from './style.css'; + +class VacuumCleanerDockDeviceFeature extends Component { + constructor(props) { + super(props); + this.state = { + loading: false + }; + } + + dock = async () => { + await this.setState({ loading: true }); + this.props.updateValue(this.props.deviceFeature, 1); + setTimeout(() => { + this.setState({ loading: false }); + }, 350); + }; + + render(props, { loading }) { + return ( +