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

如何通过Google Apps Script访问IoT Core设备及多设备适配问题

问题解决方案

一、解决多设备场景下的「设备未找到」问题

问题根源

你的脚本硬编码了PROJECT_ID(对应SMD API中的enterprise ID),但每个Nest用户的设备都隶属于自己独有的enterprise ID,而非开发者的项目ID。其他用户使用脚本时,用你的PROJECT_ID拼接设备name进行匹配,自然找不到他们自己的设备。

修复方案

修改设备匹配逻辑,无需依赖硬编码的PROJECT_ID,直接通过设备ID后缀匹配:

// 替换原查找逻辑
const device = devices.find(d => d.name.endsWith('/' + THERMOSTAT));

用户设备的name格式为enterprises/{用户自己的enterprise_id}/devices/{设备ID},使用endsWith可忽略前面的enterprise ID部分,只匹配设备ID后缀,确保能找到用户自己的设备。

同时优化用户体验,自动列出可选设备避免手动输入错误:

// 在获取devices后添加
if (devices.length > 0) {
  console.log("可用设备列表:");
  devices.forEach(d => {
    const deviceId = d.name.split('/').pop();
    console.log(`名称:${d.displayName},ID:${deviceId}`);
  });
}

二、访问Google Cloud Console中的Dummy设备

必要条件与操作步骤

  1. 绑定正确的Cloud项目:确保脚本的OAuth配置关联到你创建dummy设备的Google Cloud项目,这样获取的access token才有访问权限。
  2. 使用正确的项目ID:dummy设备的enterprise ID就是你的Cloud项目ID,调用API时需用该ID拼接端点:
    const PROJECT_ID = "你的Google Cloud项目ID"; // 填入创建dummy设备的项目ID
    const endpoint = '/enterprises/' + PROJECT_ID + '/devices';
    
  3. 配置权限:
    • 自己使用时,确保你的Google账号在该Cloud项目中拥有Smart Device Management Viewer或更高权限角色;
    • 分享给其他用户时,需在Cloud Console中给该用户添加对应角色,同时脚本的OAuth范围要包含https://www.googleapis.com/auth/sdm.service。
  4. 匹配dummy设备:可使用完整name拼接(此时PROJECT_ID正确)或endsWith匹配设备ID:
    // 假设dummy设备ID为"DUMMY_ID"
    const device = devices.find(d => d.name === 'enterprises/' + PROJECT_ID + '/devices/DUMMY_ID');
    

优化后的changetemp函数示例

function changetemp() {
  // 运行makerequesttest后复制设备ID填入
  const THERMOSTAT = '';
  const smartService = getSmartService();
  const access_token = smartService.getAccessToken();
  const url = 'https://smartdevicemanagement.googleapis.com/v1';
  // 若脚本已关联正确项目,可动态获取项目ID
  const endpoint = '/enterprises/' + smartService.getProjectId() + '/devices';
  const headers = {
      'Authorization': 'Bearer ' + access_token,
      'Content-Type': 'application/json'
  }
  const params = {
    'headers': headers,
    'method': 'get',
    'muteHttpExceptions': true
  }

  try {
      const response = UrlFetchApp.fetch(url + endpoint, params);
      const responseCode = response.getResponseCode();
      const responseBody = JSON.parse(response.getContentText());
      
      console.log("响应状态码: " + responseCode);
      console.log(responseBody);

      const devices = responseBody['devices'];
      if (!devices) {
        console.log("未找到任何设备");
        return;
      }

      // 列出所有可用设备
      console.log("可用设备列表:");
      devices.forEach(d => {
        const deviceId = d.name.split('/').pop();
        console.log(`名称:${d.displayName},ID:${deviceId}`);
      });

      // 匹配目标设备
      const device = devices.find(d => d.name.endsWith('/' + THERMOSTAT));
      if (!device) {
        console.log(`未找到ID为${THERMOSTAT}的设备,请检查设备ID是否正确`);
        return;
      }

      // 后续温度控制逻辑
      console.log(`找到目标设备:${device.displayName}`);
  } catch(e) {
    console.log("请求出错:" + e);
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:01:10