useSendCommand.ts 1.88 KB
import { ControlComponentValue } from './control.config';
import { getDeviceProfile } from '/@/api/alarm/position';
import { getDeviceRelation, sendCommandOneway } from '/@/api/dataBoard';
import { DeviceTypeEnum } from '/@/api/device/model/deviceModel';
import { getModelServices } from '/@/api/device/modelOfMatter';
import { useMessage } from '/@/hooks/web/useMessage';
import { isString } from '/@/utils/is';

const { createMessage } = useMessage();
export function useSendCommand() {
  const sendCommand = async (record: ControlComponentValue, value: any) => {
    if (!record) return;
    const { deviceProfileId, attribute, deviceType } = record;
    let { deviceId } = record;
    if (!deviceId) return;
    try {
      const list = await getDeviceProfile();
      const deviceProfile = list.find((item) => item.id === deviceProfileId);
      if (!deviceProfile) return;
      let params: string | Recordable = {
        [attribute!]: Number(value),
      };
      if (deviceProfile.transportType === 'TCP') {
        const serviceList = await getModelServices({ deviceProfileId: deviceProfileId! });
        const record = serviceList.find((item) => item.identifier === attribute);
        const sendCommand = record?.functionJson.inputData?.at(0)?.serviceCommand || '';
        params = isString(sendCommand) ? sendCommand : JSON.stringify(sendCommand);
      }
      if (deviceType === DeviceTypeEnum.SENSOR) {
        deviceId = await getDeviceRelation({
          deviceId,
          isSlave: deviceType === DeviceTypeEnum.SENSOR,
        });
      }
      await sendCommandOneway({
        deviceId,
        value: {
          params: params,
          persistent: true,
          additionalInfo: {
            cmdType: 'API',
          },
          method: 'methodThingskit',
        },
      });
      createMessage.success('命令下发成功');
    } catch (error) {}
  };
  return {
    sendCommand,
  };
}