diff --git a/front/src/components/boxs/device-in-room/device-features/SensorDeviceFeature.jsx b/front/src/components/boxs/device-in-room/device-features/SensorDeviceFeature.jsx index 2c145862f8..142deaf958 100644 --- a/front/src/components/boxs/device-in-room/device-features/SensorDeviceFeature.jsx +++ b/front/src/components/boxs/device-in-room/device-features/SensorDeviceFeature.jsx @@ -9,6 +9,7 @@ const SensorDeviceType = ({ children, ...props }) => ( {props.deviceFeature.category === 'humidity-sensor' && } {props.deviceFeature.category === 'light-sensor' && } {props.deviceFeature.category === 'battery-sensor' && } + {props.deviceFeature.category === 'switch' && props.deviceFeature.type === 'power' && } {OPEN_CLOSE_SENSORS.indexOf(props.deviceFeature.category) !== -1 && } {props.deviceFeature.category === null && } diff --git a/server/services/sonoff/lib/handleMqttMessage.js b/server/services/sonoff/lib/handleMqttMessage.js index b279f07684..4eca8d5a7d 100644 --- a/server/services/sonoff/lib/handleMqttMessage.js +++ b/server/services/sonoff/lib/handleMqttMessage.js @@ -1,5 +1,5 @@ const logger = require('../../../utils/logger'); -const { EVENTS, DEVICE_FEATURE_TYPES } = require('../../../utils/constants'); +const { EVENTS, DEVICE_FEATURE_CATEGORIES, DEVICE_FEATURE_TYPES } = require('../../../utils/constants'); const models = require('../models'); /** @@ -19,7 +19,9 @@ function handleMqttMessage(topic, message) { // Power status case 'POWER': { event = { - device_feature_external_id: `sonoff:${deviceExternalId}:${DEVICE_FEATURE_TYPES.SWITCH.BINARY}`, + device_feature_external_id: `sonoff:${deviceExternalId}:${DEVICE_FEATURE_CATEGORIES.SWITCH}:${ + DEVICE_FEATURE_TYPES.SWITCH.BINARY + }`, state: message === 'ON' ? 1 : 0, }; break; @@ -29,7 +31,9 @@ function handleMqttMessage(topic, message) { const sensorMsg = JSON.parse(message); event = { - device_feature_external_id: `sonoff:${deviceExternalId}:${DEVICE_FEATURE_TYPES.SWITCH.POWER}`, + device_feature_external_id: `sonoff:${deviceExternalId}:${DEVICE_FEATURE_CATEGORIES.SWITCH}:${ + DEVICE_FEATURE_TYPES.SWITCH.POWER + }`, state: sensorMsg.ENERGY.Current, }; break; @@ -53,7 +57,9 @@ function handleMqttMessage(topic, message) { }; event = { - device_feature_external_id: `sonoff:${deviceExternalId}:${DEVICE_FEATURE_TYPES.SWITCH.BINARY}`, + device_feature_external_id: `sonoff:${deviceExternalId}:${DEVICE_FEATURE_CATEGORIES.SWITCH}:${ + DEVICE_FEATURE_TYPES.SWITCH.BINARY + }`, state: statusValue, }; } else { @@ -69,7 +75,9 @@ function handleMqttMessage(topic, message) { const stateValue = stateMsg.POWER; event = { - device_feature_external_id: `sonoff:${deviceExternalId}:${DEVICE_FEATURE_TYPES.SWITCH.BINARY}`, + device_feature_external_id: `sonoff:${deviceExternalId}:${DEVICE_FEATURE_CATEGORIES.SWITCH}:${ + DEVICE_FEATURE_TYPES.SWITCH.BINARY + }`, state: stateValue === 'ON' ? 1 : 0, }; break; diff --git a/server/test/services/sonoff/lib/handleMqttMessage.test.js b/server/test/services/sonoff/lib/handleMqttMessage.test.js index ba2b1e8cf8..73b30d4cda 100644 --- a/server/test/services/sonoff/lib/handleMqttMessage.test.js +++ b/server/test/services/sonoff/lib/handleMqttMessage.test.js @@ -30,7 +30,7 @@ describe('Mqtt handle message', () => { sonoffHandler.handleMqttMessage('stat/my_device/POWER', 'ON'); const expectedEvent = { - device_feature_external_id: `sonoff:my_device:binary`, + device_feature_external_id: `sonoff:my_device:switch:binary`, state: 1, }; @@ -42,7 +42,7 @@ describe('Mqtt handle message', () => { sonoffHandler.handleMqttMessage('stat/my_device/POWER', 'OFF'); const expectedEvent = { - device_feature_external_id: `sonoff:my_device:binary`, + device_feature_external_id: `sonoff:my_device:switch:binary`, state: 0, }; @@ -54,7 +54,7 @@ describe('Mqtt handle message', () => { sonoffHandler.handleMqttMessage('tele/my_device/SENSOR', '{ "ENERGY": { "Current": 125 }}'); const expectedEvent = { - device_feature_external_id: `sonoff:my_device:power`, + device_feature_external_id: `sonoff:my_device:switch:power`, state: 125, }; @@ -76,7 +76,7 @@ describe('Mqtt handle message', () => { ); const expectedEvent = { - device_feature_external_id: `sonoff:my_device:binary`, + device_feature_external_id: `sonoff:my_device:switch:binary`, state: 1, }; @@ -88,7 +88,7 @@ describe('Mqtt handle message', () => { sonoffHandler.handleMqttMessage('stat/my_device/STATE', '{ "POWER": "ON"}'); const expectedEvent = { - device_feature_external_id: `sonoff:my_device:binary`, + device_feature_external_id: `sonoff:my_device:switch:binary`, state: 1, }; @@ -100,7 +100,7 @@ describe('Mqtt handle message', () => { sonoffHandler.handleMqttMessage('stat/my_device/STATE', '{ "POWER": "OFF"}'); const expectedEvent = { - device_feature_external_id: `sonoff:my_device:binary`, + device_feature_external_id: `sonoff:my_device:switch:binary`, state: 0, }; @@ -112,7 +112,7 @@ describe('Mqtt handle message', () => { sonoffHandler.handleMqttMessage('stat/my_device/RESULT', '{ "POWER": "ON"}'); const expectedEvent = { - device_feature_external_id: `sonoff:my_device:binary`, + device_feature_external_id: `sonoff:my_device:switch:binary`, state: 1, }; @@ -124,7 +124,7 @@ describe('Mqtt handle message', () => { sonoffHandler.handleMqttMessage('stat/my_device/RESULT', '{ "POWER": "OFF"}'); const expectedEvent = { - device_feature_external_id: `sonoff:my_device:binary`, + device_feature_external_id: `sonoff:my_device:switch:binary`, state: 0, };