【免费下载链接】ha_washdataHome Assistant integration for smart-plug appliance monitoring: detects cycles, matches programs, estimates time remaining. Supports washing machines, dryers, dishwashers and more.项目地址https://gitcode.com/gh_mirrors/ha/ha_washdata点击查看免费下载WashData 是一款运行在 Home Assistant 中的家电功率监测集成它通过智能插座识别洗衣机、烘干机、洗碗机的运行程序学习功率曲线并预测剩余时间。而 WashData 全屏管理面板与后端之间的每一次交互——从查看实时状态到修剪周期、触发 ML 训练——全部由 111 条以上ha_washdata/命名空间的 WebSocket 命令驱动。本文为你完整梳理这套 WS API 的架构、消息格式、命令分组与权限模型无需通读源码也能看懂面板背后发生了什么。面板与后端如何通信三层架构一图看懂WashData 的交互链路分三层自上而下依次是面板Panel侧边栏的 WashData 全屏页面由 ha-washdata-panel.js 驱动负责渲染 UIWebSocket 层Home Assistant 原生的websocket_api组件负责消息路由与鉴权命令处理器ws_api.py 中的 114 个ws_*处理函数每个负责一条命令内部调用 manager.py 等核心模块完成业务逻辑。面板注册、静态资源与 Lovelace 卡片的路径都在 frontend.py 中完成而所有命令的统一注册入口是 async_register_commands——它在每次集成加载/重载时执行因此新增命令只需重载集成无需重启整个 Home Assistant。 每个命令都用ha_washdata/前缀标识例如ha_washdata/get_devices。前缀避免了与其他集成命令冲突也让权限控制可以在一个入口处统一生效。一次完整的请求-响应从 get_devices 开始所有请求都是 JSON 消息结构固定{ id: 1, type: ha_washdata/get_devices }响应分三种形态形态结构含义结果{ id: 1, type: result, success: true, result: { ... } }命令执行成功错误{ id: 1, type: result, success: false, message: ... }参数校验或权限失败事件推送{ type: ha_washdata/event, ... }无 id服务端主动推送如任务进度以get_devices为例它是整个面板的起点返回所有已接入设备的实时状态功耗、进度、当前程序。响应中的entry_id字段尤其重要——绝大多数命令都需要它来指定操作哪台设备{ id: 1, type: ha_washdata/get_device_cycles, entry_id: abc123, limit: 50 }get_device_cycles支持limit/offset分页按时间倒序返回周期列表。值得注意的是传输前每个周期都会自动剥离power_data、power_trace等大字段见 ws_api.py#L202-L203防止撞上 HA 的 32 KB 消息上限。111 条命令全景按功能域分组速查完整命令表已由源码自动生成见 docs/WS_API.md。这里按功能域速览最核心的几组功能域代表命令说明设备与周期get_devices、get_device_cycles、label_cycle、delete_cycle实时状态、周期分页、标注与删除设置get_options、set_options、get_settings_changelog读取/修改配置并自动记录变更日志档案Profilecreate_profile、rename_profile、delete_profile、get_profile_envelope程序的功率画像管理周期编辑trim_cycle、analyze_split、apply_split、apply_merge修剪、拆分、合并周期录制start_recording、stop_recording、process_recording手动录制模式产出最干净的参考数据建议get_suggestions、apply_suggestions、set_suggestion_lock自动调参建议的查看/应用/锁定循环控制pause_cycle、resume_cycle、terminate_cycle暂停/恢复/强制结束运行中的周期ML Labget_ml_comparison、trigger_ml_training、set_ml_review本地机器学习模型的对比与训练社区商店store_status、store_connect、store_search_devices在线共享设备档案可选功能历史导入history_import_begin、history_import_chunk、apply_history_import分块导入历史功率数据所有修改类命令如import_config、trim_cycle、apply_merge都会经过每设备写锁串行化防止并发写入破坏存储数据参数校验则由 voluptuous schema 在入口处完成非法参数在业务逻辑执行前就会被拒绝。长任务不卡面板后台任务注册表机制重操作如reprocess_history重新处理全部历史、trigger_ml_training训练模型、apply_split拆分周期不会同步等待而是立即返回一个task_id真正的计算交给 task_registry.py 管理的后台任务查询list_tasks返回所有运行中/最近完成的任务快照get_task_result按task_id取回结果订阅subscribe_tasks建立推送通道任务每完成一小块进度服务端就主动发送一条事件消息面板据此渲染进度条取消cancel_task设置取消标志任务在分块之间检查该标志后优雅退出。任务支持 9 种类型reprocess、rebuild、trim、split、merge、ml_training、pg_history、pg_sweep、pg_detail每个任务都携带total/done进度字段和估算的eta_s剩余秒数。即使 WebSocket 断开重连最近完成的 30 个任务结果依然可以从服务端重新拉取——这正是注册表存在的意义。权限与安全的四道关卡WashData 对每条命令都强制执行 RBAC基于角色的访问控制注册时由 ws_api.py#L1415-L1416 的_guard包装器统一注入没有漏网的命令none / read / edit / full 四级权限get_*查询类命令只需read级别修改类命令需要edit而wipe_history、export_config、trigger_ml_training等危险操作要求full级别管理员豁免HA 管理员始终解析为fullRBAC 默认关闭时所有已认证用户均为full大载荷剥离与降采样周期数据在传输前自动剥离大字段曲线数据降采样到 240 点以内契约校验可选设置环境变量HA_WASHDATA_WS_CONTRACT1后每条响应的字段都会对照 ws_schema.py 中的 TypedDict 定义进行校验并记录日志生产环境默认零开销关闭。权限不足的命令不会报错执行而是直接返回unauthorized/forbidden错误。面板配置与用户偏好则通过set_panel_config管理员和set_user_prefs每用户两个命令分别管理。不用改代码也能实测每一条命令由于 WashData 完全基于 HA 原生 WebSocket API你可以直接在开发者工具 → 信息服务WebSocket中手动发送命令实测无需写任何代码{ id: 7, type: ha_washdata/get_suggestions }配合get_constants返回设备类型、状态色、ML 功能开关等全局常量和get_logs返回内存环形缓冲区中最近 500 条日志就能在面板外快速定位问题。文档与类型如何保持同步生成机制揭秘这套 API 的单一事实来源是 ws_schema.pyWS_COMMANDS字典登记每条命令的请求参数WS_RESPONSE_TYPES则为每条命令定义一个响应 TypedDict。围绕它有一条完整的工具链python3 devtools/generate_ws_types.py一次性生成 docs/WS_API.md本文参考的完整命令表和 ws-types.d.ts前端 TypeScript 类型tests/test_ws_contract.py 断言ws_api.py实际注册的命令集合与WS_COMMANDS的键完全一致——新增、删除或重命名命令而忘记同步 schema测试套件会立即失败。因此文档标注的114 commands始终与代码保持同步docs/WS_API.md顶部也明确写着请勿手动编辑。源码索引按主题快速定位主题文件说明命令处理器与 RBACws_api.py7000 行所有 114 个ws_*处理函数类型契约ws_schema.py请求参数与响应 TypedDict 的唯一事实来源后台任务task_registry.py任务生命周期、进度与取消完整命令参考docs/WS_API.md自动生成的全量命令表前端类型ws-types.d.ts由 schema 生成的 TypeScript 定义面板注册frontend.py侧边栏面板与静态路径注册契约测试tests/test_ws_contract.py保证命令集与 schema 严格一致内部工程参考docs/internal/reference/08-ws-api-and-tasks.md逐命令的参数、行为与行号索引掌握以上要点后你就可以把 WashData 面板理解为114 条 WebSocket 命令的图形化外壳——无论是排查面板 bug、编写自定义 Lovelace 卡片还是扩展新的集成功能这套 WS API 都是最可靠的切入点。赞分享【免费下载链接】ha_washdataHome Assistant integration for smart-plug appliance monitoring: detects cycles, matches programs, estimates time remaining. Supports washing machines, dryers, dishwashers and more.项目地址https://gitcode.com/gh_mirrors/ha/ha_washdata点击查看免费下载相关推荐ws 8.x 完整 API 参考Node.js WebSocket 客户端与服务端实战指南ws 8.x 完整 API 参考Node.js WebSocket 客户端与服务端实战指南 本指南以 doc/ws.md https://link.gitco后端通信FanControl 风扇控制免费完整指南画一条温度-转速曲线10 分钟把噪音管住FanControl 风扇控制免费完整指南画一条温度 转速曲线10 分钟把噪音管住 机箱风扇忽高忽低地响CPU 温度却只涨了两度——问题多半出在出厂写死的桌面应用智能硬件CMake ccmake 终端交互式配置界面Curses 界面命令行参考与实战指南CMake ccmake 终端交互式配置界面Curses 界面命令行参考与实战指南 ccmake 是 CMake 自带的基于 curses 库的终端交互式配置构建工具开发工具CLI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考