SmartAlarmAbility 中告警推送能力无法正常使用

小程序开发相关产品技术讨论,包括面板、智能小程序、React Native、Ray跨端框架、Panel SDK、微信小程序、小程序开发工具(IDE)及其他开发技术相关等话题


silverlight
Posts: 138

  • 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);
      
Last edited by silverlight on 2025年 Feb 14日 16:01, edited 1 time in total.

Tags:
silverlight
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('请输入有效的数字'); } };
silverlight
Posts: 138

Re: SmartAlarmAbility 中告警推送能力无法正常使用

目前存在的问题
1:setCustomAlarmStatus 和deleteCustomAlarm 这两个能力无法正常使用
2:addCustomAlarm只能对未设置过规则的dp点进行新增报警规则,无法进行修改

lshinylee
Posts: 326

Re: SmartAlarmAbility 中告警推送能力无法正常使用

你好,你的反馈已收到,我们将尽快答复你。

:D :D :D

xiaoqi
Posts: 38

Re: SmartAlarmAbility 中告警推送能力无法正常使用

第一次设置报警规则的时候 有报错提醒吗

xiaoqi
Posts: 38

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);

silverlight
Posts: 138

Re: SmartAlarmAbility 中告警推送能力无法正常使用

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('请输入有效的数字');
        }
      };
Last edited by silverlight on 2025年 Feb 14日 17:16, edited 1 time in total.
silverlight
Posts: 138

Re: SmartAlarmAbility 中告警推送能力无法正常使用

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;

silverlight
Posts: 138

Re: SmartAlarmAbility 中告警推送能力无法正常使用

xiaoqi 2025年 Feb 14日 16:17

第一次设置报警规则的时候 有报错提醒吗

第一次设置没有报错,并能通过getCustomAlarmList查询到创建的报警规则

xiaoqi
Posts: 38

Re: SmartAlarmAbility 中告警推送能力无法正常使用

这是一个bug 应该如果你没有初始化的话需要报错提醒的 这个我们后续会修复

Post Reply