You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用Google Local Home SDK向BrightSign播放器发送UDP十六进制指令?

使用Google Local Home SDK向BrightSign播放器发送HEX格式UDP指令

可行性确认

完全可以实现。Google Local Home SDK的核心能力之一就是支持与本地设备通过UDP/TCP协议通信,不管设备是不是标准智能设备,只要它能在本地网络监听指定UDP端口(这里是5000)并接收HEX指令,就能通过SDK完成控制。

核心实现思路

  1. 在Google Actions Console中创建自定义设备类型(因为BrightSign不是标准智能设备)
  2. 编写Local Home SDK驱动代码,实现UDP指令的发送逻辑
  3. 将驱动关联到你的Action,完成部署和本地测试

TypeScript简化实现示例

适合新手的基础版本,包含指令发送和简单设备发现逻辑:

import { DeviceManager, UdpSocket } from '@google/local-home-sdk';

// 处理指令执行(比如语音触发的"播放"命令)
export const onExecute = async (handler: any) => {
  const deviceManager = handler.deviceManager as DeviceManager;
  const targetDevices = handler.devices;

  for (const device of targetDevices) {
    // 从设备信息中获取本地IP(需在发现阶段存储)
    const deviceIp = device.localIpAddress;
    const udpPort = 5000; // BrightSign默认UDP端口

    // 替换为你需要发送的HEX指令字符串
    const targetHexCmd = "01020304";
    // 把HEX字符串转成UDP发送需要的Uint8Array
    const cmdBuffer = hexToUint8Array(targetHexCmd);

    try {
      // 创建UDP套接字并发送指令
      const socket = new UdpSocket();
      await socket.send(cmdBuffer, udpPort, deviceIp);
      socket.close();

      // 告知Google指令执行成功
      await deviceManager.sendCommandResults([{
        ids: [device.id],
        status: "SUCCESS",
        states: { on: true } // 对应指令的状态,可按需调整
      }]);
    } catch (err) {
      console.error("UDP指令发送失败:", err);
      await deviceManager.sendCommandResults([{
        ids: [device.id],
        status: "ERROR",
        errorCode: "DEVICE_UNREACHABLE"
      }]);
    }
  }
};

// 辅助工具:HEX字符串转Uint8Array
function hexToUint8Array(hexStr: string): Uint8Array {
  const arr = new Uint8Array(hexStr.length / 2);
  for (let i = 0; i < hexStr.length; i += 2) {
    arr[i / 2] = parseInt(hexStr.substring(i, i + 2), 16);
  }
  return arr;
}

// 设备发现逻辑(简化版,手动指定IP,实际可通过UDP广播实现)
export const onIdentify = async (handler: any) => {
  const deviceManager = handler.deviceManager as DeviceManager;
  // 替换为你的BrightSign播放器实际本地IP
  const foundDevices = [{
    id: "brightsign-player-001",
    deviceType: "action.devices.types.MEDIA_PLAYER", // 选合适的设备类型
    localIpAddress: "192.168.1.105"
  }];
  await deviceManager.sendIdentifyResults(foundDevices);
};

JavaScript简化实现示例

如果更习惯用JavaScript,对应版本代码:

// 处理指令执行
exports.onExecute = async (handler) => {
  const deviceManager = handler.deviceManager;
  const targetDevices = handler.devices;

  for (const device of targetDevices) {
    const deviceIp = device.localIpAddress;
    const udpPort = 5000;

    // 替换为实际要发送的HEX指令
    const targetHexCmd = "01020304";
    const cmdBuffer = hexToUint8Array(targetHexCmd);

    try {
      const socket = new handler.sdk.UdpSocket();
      await socket.send(cmdBuffer, udpPort, deviceIp);
      socket.close();

      await deviceManager.sendCommandResults([{
        ids: [device.id],
        status: "SUCCESS",
        states: { on: true }
      }]);
    } catch (err) {
      console.error("UDP指令发送失败:", err);
      await deviceManager.sendCommandResults([{
        ids: [device.id],
        status: "ERROR",
        errorCode: "DEVICE_UNREACHABLE"
      }]);
    }
  }
};

// HEX转Uint8Array工具函数
function hexToUint8Array(hexStr) {
  const arr = new Uint8Array(hexStr.length / 2);
  for (let i = 0; i < hexStr.length; i += 2) {
    arr[i / 2] = parseInt(hexStr.substring(i, i + 2), 16);
  }
  return arr;
}

// 设备发现逻辑
exports.onIdentify = async (handler) => {
  const deviceManager = handler.deviceManager;
  const foundDevices = [{
    id: "brightsign-player-001",
    deviceType: "action.devices.types.MEDIA_PLAYER",
    localIpAddress: "192.168.1.105"
  }];
  await deviceManager.sendIdentifyResults(foundDevices);
};

关键注意点

  • 确保BrightSign播放器和Nest Hub在同一本地局域网内
  • 必须把示例中的targetHexCmd替换为你的BrightSign实际需要的HEX指令
  • 设备发现阶段如果要自动识别,可通过UDP广播实现(比如发送特定查询包,监听BrightSign的响应)
  • 在Actions Console中配置设备traits时,要和你的语音指令对应(比如用OnOff trait对应"打开/关闭"指令)

内容的提问来源于stack exchange,提问作者RichieRich1891

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 03:50:17