Page 1 of 2
SmartAlarmAbility 中告警推送能力无法正常使用
Posted: 2025年 Feb 14日 12:35
by silverlight
- Tuya MiniApp IDE 版本信息:0.8.2
- @ray-js/ray, @ray-js/panel-sdk的版本(如使用ray开发)在package.json查看~
"@ray-js/panel-sdk": "1.10.0",
"@ray-js/ray": "1.5.27",
目前自定义报警推送,可以生成报警推送且能获取到报警的列表,但无法修改,删除,启用或禁用自定义的告警规则
Code: Select all
import { devices } from '@/devices';
const alarmAbility = devices.thsensor.model.abilities.alarm;
const ClearAlarmLimits = async (item) => {
console.log('清除的id: ', item,typeof item)
try{
const result = await alarmAbility.deleteCustomAlarm({ bindId: item});
console.log('清楚自定义报警: ', result);
}catch(error){
console.error('清除报警失败', error);
}
};
const enableAlarmLimits = async (item) => {
console.log('启动的id: ', item,typeof item);
try{
const result = await alarmAbility.setCustomAlarmStatus({ bindId: item,enable:false });
console.log('关闭自定义报警: ', result);
}catch(error){
console.error('启用报警失败', error);
}
};
const getAlarmLimits = async () => {
try{
const result = await alarmAbility.getCustomAlarmList();
console.log('获取到的自定义报警列表:', result);
}catch(error){
console.error('启用报警失败', error);
}
};
报错为
Code: Select all
启用报警失败 {"errorCode": 30001, "errorMsg": "atop request error", "innerError": {"errorMsg": "PARAMS_ILLEGAL_OR_DATA_ILLEGAL", "errorCode": "PARAMS_ILLEGAL_OR_DATA_ILLEGAL"}}
其中我的device模块为
Code: Select all
import { SmartDeviceSchema } from '@typings/sdm';
import { SmartDeviceModel, SmartGroupModel, SmartAlarmAbility } from '@ray-js/panel-sdk';
import { createDpKit } from '@ray-js/panel-sdk/lib/sdm/interceptors/dp-kit';
import { getLaunchOptionsSync } from '@ray-js/ray';
import { protocols } from '@/devices/protocols';
export const dpKit = createDpKit<SmartDeviceSchema>({ protocols });
const isGroupDevice = !!getLaunchOptionsSync()?.query?.groupId;
console.log('=========isGroupDevice:', isGroupDevice);
const groupInterceptors = {
...dpKit.interceptors,
response: {
onDpDataChange: [
// 定义与组设备相兼容的拦截器
],
},
};
const deviceInterceptors = {
...dpKit.interceptors,
response: {
onDpDataChange: [
// 定义与单设备相兼容的拦截器
],
},
};
const options = {
interceptors: isGroupDevice ? groupInterceptors : deviceInterceptors,
abilities: [new SmartAlarmAbility()],
};
export const devices = {
common: isGroupDevice
? new SmartGroupModel<SmartDeviceSchema, { alarm: SmartAlarmAbility }>(options)
: new SmartDeviceModel<SmartDeviceSchema, { alarm: SmartAlarmAbility }>(options),
thsensor: new SmartDeviceModel<SmartDeviceSchema, { alarm: SmartAlarmAbility }>(options),
};
// 添加打印日志以查看 devices 的初始化情况
console.log('Devices:', devices);
console.log('Common Device Abilities:', devices.common.model.abilities);
console.log('Thsensor Device Abilities:', devices.thsensor.model.abilities);
Re: SmartAlarmAbility 中告警推送能力无法正常使用
Posted: 2025年 Feb 14日 15:02
by silverlight
以及,文档说addCustomAlarm除了新增报警规则之外还可以修改。但是实际测试在对某dp点(如110)设置了报警规则后,无法再通过进行更新报警的上下限
Code: Select all
const handleSetAlarmLimits = async () => {
// 检查输入是否为有效数字
const tempLower = parseFloat(tempLowerLimit);
const tempUpper = parseFloat(tempUpperLimit);
const humLower = parseFloat(humidityLowerLimit);
const humUpper = parseFloat(humidityUpperLimit);
// if (!isNaN(tempLower) && !isNaN(tempUpper) && !isNaN(humLower) && !isNaN(humUpper)) {
if (!isNaN(tempLower) && !isNaN(tempUpper) ) {
console.warn('实例化',alarmAbility);
if (alarmAbility) {
try {
await alarmAbility.addCustomAlarm({
devId: myid, // 确保传递当前设备的 ID
// name: 'Temperature and Humidity Alarm',
name: 'Temperature Alarm',
condition: [
[110, '<=', tempLower],
[111, '>=', tempUpper],
],
// 设备 ID 及其他参数根据实际情况配置
});
console.log('报警上下限设置成功');
} catch (error) {
console.error('设置报警上下限失败', error);
}
} else {
console.error('报警能力不可用');
}
} else {
console.error('请输入有效的数字');
}
};
Re: SmartAlarmAbility 中告警推送能力无法正常使用
Posted: 2025年 Feb 14日 15:04
by silverlight
目前存在的问题
1:setCustomAlarmStatus 和deleteCustomAlarm 这两个能力无法正常使用
2:addCustomAlarm只能对未设置过规则的dp点进行新增报警规则,无法进行修改
Re: SmartAlarmAbility 中告警推送能力无法正常使用
Posted: 2025年 Feb 14日 15:20
by lshinylee
Re: SmartAlarmAbility 中告警推送能力无法正常使用
Posted: 2025年 Feb 14日 16:17
by xiaoqi
Re: SmartAlarmAbility 中告警推送能力无法正常使用
Posted: 2025年 Feb 14日 16:20
by xiaoqi
看一下是不是因为没有调init方法导致的 可以查看官网底部的示例子
https://developer.tuya.com/cn/miniapp/d ... ustomAlarm
import { SmartAlarmAbility } from '@ray-js/panel-sdk';
const Alarm = new SmartAlarmAbility();
await Alarm.init();
const result = await Alarm.addCustomAlarm({
condition: [
[1, '<', 30],
[1, '>=', 85],
],
});
console.log('=== result: ', result);
Re: SmartAlarmAbility 中告警推送能力无法正常使用
Posted: 2025年 Feb 14日 17:05
by silverlight
xiaoqi 2025年 Feb 14日 16:20
看一下是不是因为没有调init方法导致的 可以查看官网底部的示例子
https://developer.tuya.com/cn/miniapp/d ... ustomAlarm
import { SmartAlarmAbility } from '@ray-js/panel-sdk';
const Alarm = new SmartAlarmAbility();
await Alarm.init();
const result = await Alarm.addCustomAlarm({
condition: [
[1, '<', 30],
[1, '>=', 85],
],
});
console.log('=== result: ', result);
依然不可用,出现同样的报错
Code: Select all
const handleSetAlarmLimits = async () => {
// 检查输入是否为有效数字
const tempLower = parseFloat(tempLowerLimit);
const tempUpper = parseFloat(tempUpperLimit);
const humLower = parseFloat(humidityLowerLimit);
const humUpper = parseFloat(humidityUpperLimit);
const Alarm = new SmartAlarmAbility();
await Alarm.init();
// if (!isNaN(tempLower) && !isNaN(tempUpper) && !isNaN(humLower) && !isNaN(humUpper)) {
if (!isNaN(tempLower) && !isNaN(tempUpper) ) {
console.warn('实例化',alarmAbility);
if (Alarm) {
try {
await Alarm.addCustomAlarm({
devId: myid, // 确保传递当前设备的 ID
// name: 'Temperature and Humidity Alarm',
name: 'Temperature Alarm',
condition: [
[110, '<=', tempLower],
[111, '>=', tempUpper],
],
// 设备 ID 及其他参数根据实际情况配置
});
console.log('报警上下限设置成功');
} catch (error) {
console.error('设置报警上下限失败', error);
}
} else {
console.error('报警能力不可用');
}
} else {
console.error('请输入有效的数字');
}
};
Re: SmartAlarmAbility 中告警推送能力无法正常使用
Posted: 2025年 Feb 14日 17:08
by silverlight
xiaoqi 2025年 Feb 14日 16:20
看一下是不是因为没有调init方法导致的 可以查看官网底部的示例子
https://developer.tuya.com/cn/miniapp/d ... ustomAlarm
import { SmartAlarmAbility } from '@ray-js/panel-sdk';
const Alarm = new SmartAlarmAbility();
await Alarm.init();
const result = await Alarm.addCustomAlarm({
condition: [
[1, '<', 30],
[1, '>=', 85],
],
});
console.log('=== result: ', result);
而我查看到device.common是在\src\composeLayout.tsx中进行了实例化,我仿照其中的方法,对我的thsensor实现了实例化,可以创建生成自定义告警推送,通过getCustomAlarmList可以正确返回信息。
下方为composeLayout模块的修改
Code: Select all
import React, { Component } from 'react';
import { Provider } from 'react-redux';
import { getSystemInfoSync } from '@ray-js/ray';
import { devices, dpKit } from './devices';
import { updateThemeType } from './redux/modules/themeSlice';
import { initializeSystemInfo } from './redux/modules/systemInfoSlice';
import store from './redux';
import './styles/index.less';
interface Props {
devInfo: DevInfo;
// eslint-disable-next-line react/require-default-props
extraInfo?: Record<string, any>;
}
interface State {
devInfo: DevInfo;
}
const composeLayout = (SubComp: React.ComponentType<any>) => {
const { dispatch } = store;
return class PanelComponent extends Component<Props, State> {
async onLaunch(object: any) {
console.log('=== App onLaunch', object);
devices.common.init();
devices.common.onInitialized(device => dpKit.init(device));
devices.thsensor.init();
devices.thsensor.onInitialized(device => dpKit.init(device));
const systemInfo = getSystemInfoSync();
const { theme } = systemInfo;
dispatch(initializeSystemInfo(systemInfo));
dispatch(updateThemeType(theme));
}
render() {
const { extraInfo } = this.props;
return (
<Provider store={store}>
{/* @ts-ignore */}
<SubComp extraInfo={extraInfo} {...this.props} />
</Provider>
);
}
};
};
export default composeLayout;
Re: SmartAlarmAbility 中告警推送能力无法正常使用
Posted: 2025年 Feb 14日 17:16
by silverlight
xiaoqi 2025年 Feb 14日 16:17
第一次设置报警规则的时候 有报错提醒吗
第一次设置没有报错,并能通过getCustomAlarmList查询到创建的报警规则
Re: SmartAlarmAbility 中告警推送能力无法正常使用
Posted: 2025年 Feb 14日 17:20
by xiaoqi
这是一个bug 应该如果你没有初始化的话需要报错提醒的 这个我们后续会修复