- 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); } };
其中我的device模块为Code: Select all
启用报警失败 {"errorCode": 30001, "errorMsg": "atop request error", "innerError": {"errorMsg": "PARAMS_ILLEGAL_OR_DATA_ILLEGAL", "errorCode": "PARAMS_ILLEGAL_OR_DATA_ILLEGAL"}}
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);
- @ray-js/ray, @ray-js/panel-sdk的版本(如使用ray开发)在package.json查看~
SmartAlarmAbility 中告警推送能力无法正常使用
-
- Posts: 138
SmartAlarmAbility 中告警推送能力无法正常使用
Tags:
-
- Posts: 138
Re: SmartAlarmAbility 中告警推送能力无法正常使用
以及,文档说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('请输入有效的数字');
}
};
-
- Posts: 138
Re: SmartAlarmAbility 中告警推送能力无法正常使用
目前存在的问题
1:setCustomAlarmStatus 和deleteCustomAlarm 这两个能力无法正常使用
2:addCustomAlarm只能对未设置过规则的dp点进行新增报警规则,无法进行修改
Re: SmartAlarmAbility 中告警推送能力无法正常使用
第一次设置报警规则的时候 有报错提醒吗
Re: SmartAlarmAbility 中告警推送能力无法正常使用
看一下是不是因为没有调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);
-
- Posts: 138
Re: SmartAlarmAbility 中告警推送能力无法正常使用
xiaoqi 2025年 Feb 14日 16:20看一下是不是因为没有调init方法导致的 可以查看官网底部的示例子
https://developer.tuya.com/cn/miniapp/d ... ustomAlarmimport { 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('请输入有效的数字');
}
};
-
- Posts: 138
Re: SmartAlarmAbility 中告警推送能力无法正常使用
xiaoqi 2025年 Feb 14日 16:20看一下是不是因为没有调init方法导致的 可以查看官网底部的示例子
https://developer.tuya.com/cn/miniapp/d ... ustomAlarmimport { 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;
-
- Posts: 138
Re: SmartAlarmAbility 中告警推送能力无法正常使用
第一次设置没有报错,并能通过getCustomAlarmList查询到创建的报警规则
Re: SmartAlarmAbility 中告警推送能力无法正常使用
这是一个bug 应该如果你没有初始化的话需要报错提醒的 这个我们后续会修复