HomeAssistant 一键导出「实体ID + 名称 + 状态」全流程

IT技术 · 10-25 · 336 人浏览

HomeAssistant 一键导出「实体ID + 名称 + 状态」全流程

适用于 任何版本无需插件无需令牌(也提供令牌兜底方案)


1. 打开开发者工具

  1. 在浏览器中进入 HomeAssistant → 左侧菜单 「开发者工具」「状态」(States)。
  2. 先让列表加载完整
    • 滚动到最底部,确保所有行都已渲染。

2. 进入浏览器控制台

  • Windows / LinuxF12 → 切到 Console / kong'zhi't 标签。
  • macOSCmd + Option + IConsole

3. 粘贴执行「万能抓取脚本」

> 兼容 http / https新版 / 旧版 HA 界面无 copy() 函数 的浏览器。

把下面整段代码一次性粘进 Console,回车即可:

(async () => {
  /* ========== 通用抓取函数 ========== */
  function grabTable() {
    const rows = Array.from(document.querySelectorAll('tbody tr'));
    if (!rows.length) return [];
    return rows.map(tr => {
      const t = Array.from(tr.querySelectorAll('td,th'), td => td.innerText.trim());
      return {id: t[0], name: t[1], state: t[2]};
    });
  }

  /* ========== ① 优先从页面抓 ========== */
  let data = grabTable();
  if (data.length) return output(data);

  /* ========== ② 兜底:REST API 全量 ========== */
  const token = prompt('页面未抓到表格,请输入「长期访问令牌」:');
  if (!token) return;
  const res = await fetch('/api/states', {headers: {Authorization: `Bearer ${token}`}});
  const json = await res.json();
  data = json.map(s => ({
      id:   s.entity_id,
      name: s.attributes.friendly_name || '',
      state: s.state
  }));
  output(data);``````

  /* ========== 统一输出:弹窗全选复制 ========== */
  function output(arr) {
    const tsv = ['entity_id\tname\tstate']
                .concat(arr.map(r => `${r.id}\t${r.name}\t${r.state}`))
                .join('\n');
    const w = window.open('', '', 'width=700,height=500,scrollbars=1');
    w.document.write('<pre>' + tsv + '</pre>');
    w.document.close();
    w.focus();
    console.log(`✅ 已生成 ${arr.length} 条记录,请在新窗口 Ctrl+A → Ctrl+C`);
  }
})();

4. 复制到新窗口

  • 脚本执行后会 自动弹出小窗口,里面是 Tab 分隔 的纯文本。
  • Ctrl + A → Ctrl + C 全部复制。

5. 粘进 Excel 并分列

步骤 操作
5.1 不要直接 Ctrl+V!Excel → 数据从文本/CSV 获取 → 粘贴剪贴板内容(或先存为 .txt)。
5.2 预览窗口 分隔符 只勾选 Tab加载
5.3 得到标准三列:entity_idnamestate

> 若已直接粘进一列,可事后 数据 → 分列 → 选 Tab 同样切成三列。

6. 完成 & 后续

  • 现在可随意 筛选、排序、透视表
  • 想自动化?把脚本存为浏览器书签,一键导出,随时复用。

7. 脚本更新记录与进阶用法

版本 更新内容
v1.0 初始版本,支持页面表格抓取与 API 兜底
v1.1 新增弹窗复制法,兼容 http 及无 copy() 环境
v1.2 自动识别 HA 2023.4+ 影子 DOM,减少 API 调用

7.1 一键书签(Bookmarklet)

把下面代码保存为浏览器书签,以后在任何 HA「状态」页面点一下书签即可导出:

javascript:(async()=>{async function grabTable(){const rows=Array.from(document.querySelectorAll('tbody tr'));if(!rows.length)return[];return rows.map(tr=>{const t=Array.from(tr.querySelectorAll('td,th'),td=>td.innerText.trim());return{id:t[0],name:t[1],state:t[2]}})}let data=grabTable();if(!data.length){const t=prompt('页面未抓到表格,请输入长期访问令牌:');if(!t)return;const r=await fetch('/api/states',{headers:{Authorization:`Bearer ${t}`}});const j=await r.json();data=j.map(s=>({id:s.entity_id,name:s.attributes.friendly_name||'',state:s.state}))}const tsv=['entity_id\tname\tstate'].concat(data.map(r=>`${r.id}\t${r.name}\t${r.state}`)).join('\n');const w=window.open('','','width=700,height=500,scrollbars=1');w.document.write('<pre>'+tsv+'</pre>');w.document.close();w.focus();console.log(`✅ 已生成${data.length}条记录,请在新窗口Ctrl+A→Ctrl+C`)})();
取消回复
  1. 华纳圣淘沙公司开户新手教程

    零基础学会(183-8890-9465薇-STS5099)
    华纳圣淘沙公司开户

    华纳圣淘沙公司开户保姆级教程(183-8890-9465薇-STS5099)

    一步步教你开通华纳圣淘沙公司账户(183-8890-9465薇-STS5099)

    华纳圣淘沙公司开户分步图解

    首次开户必看:(183-8890-9465薇-STS5099)
    华纳圣淘沙全攻略

    华纳圣淘沙公司开户实操手册(183-8890-9465薇-STS5099)
    华纳圣淘沙开户流程视频教程

    手把手教学:(183-8890-9465薇-STS5099)
    华纳圣淘沙公司开户

    华纳圣淘沙公司开户完全指南(183-8890-9465薇-STS5099)

  2. 果博东方客服开户联系方式【182-8836-2750—】?薇- cxs20250806】
    果博东方公司客服电话联系方式【182-8836-2750—】?薇- cxs20250806】
    果博东方开户流程【182-8836-2750—】?薇- cxs20250806】
    果博东方客服怎么联系【182-8836-2750—】?薇- cxs20250806】

  3. 果博东方客服开户联系方式【182-8836-2750—】?薇- cxs20250806】
    果博东方公司客服电话联系方式【182-8836-2750—】?薇- cxs20250806】
    果博东方开户流程【182-8836-2750—】?薇- cxs20250806】
    果博东方客服怎么联系【182-8836-2750—】?薇- cxs20250806】

  4. 果博东方客服开户联系方式【182-8836-2750—】?薇- cxs20250806】
    果博东方公司客服电话联系方式【182-8836-2750—】?薇- cxs20250806】
    果博东方开户流程【182-8836-2750—】?薇- cxs20250806】
    果博东方客服怎么联系【182-8836-2750—】?薇- cxs20250806】

Theme Jasmine