节点演员
节点.js / TypeScript 客户端 Rademacher HomePilot / Start2Smart 磁盘 中枢 本地网络 (无云.
精神继承人 皮拉德马赫 ——同为本地REST API,TypeScript-native. 如果您可以控制HomePilot应用程序中的设备,您可以用这个库控制它. 盖/盲、开关/插口、可变减震器、Zigbee灯、自动调温器/辐射阀、传感器和墙壁控制器.
只有节点,只有本地的. 联系局域网的枢纽 不使用或需要 Rademacher 云账户 .
安装
npm i @apocaliss92/noderademacher
要求节点20或更后.
快开始
import { Rademacher, CoverDevice } from '@apocaliss92/noderademacher';
// Point at your hub (host or IP). Add `password` if the hub is protected.
const hub = new Rademacher({ host: '192.168.1.50' });
// 1. Connect (auto-resolves the api-version base path, logs in if protected)
await hub.connect();
// 2. List devices registered to the hub
const devices = await hub.listDevices();
// 3. Create a typed handle (fetches its initial state)
const cover = (await hub.createDevice(devices[0])) as CoverDevice;
// 4. React to polled state changes
cover.on('stateChanged', ({ changed }) => console.log('changed:', changed));
// 5. Control it
await cover.open();
await cover.setPosition(60); // 0 = closed, 100 = open
// 6. Re-poll whenever you like (HomePilot has no realtime push)
await cover.refresh();
发现
HomePilot 拥有 没有广播/MDNS发现 (Rademacher自己的整合通过DHCP MAC-OUI找到). 这么说吧 noderademacher 发现中枢 HTTP 测试 局域网——它通过中心站的身份端点确认每个主机:
import { Rademacher } from '@apocaliss92/noderademacher';
// Sweep every local /24 (bounded concurrency), or pass { subnet: '192.168.1' } / { hosts: [...] }
const hubs = await Rademacher.discover();
// → [{ host, model: 'HomePilot' | 'Start2Smart', name, firmware?, uid?, basePath, passwordProtected }]
for (const found of hubs) {
const hub = new Rademacher({ host: found.host, basePath: found.basePath });
await hub.connect();
}
Rademacher.discover({ subnet, hosts, concurrency, timeoutMs }) - 缩小搜索速度 拉德马赫MAC OUIS(B0:1F:81, (中文(简体) ), 38:FD:FE导出为 RADEMACHER_MAC_PREFIXES 如果您想要预过滤 ARP 扫描.
设备——包括网关,所有信息
listDevices() 编号 : getDevices() 返回 枢纽/出入口本身作为一个单独的设备 联合国
HubDevice, (中文(简体) ), did = -1类别 hub首先,然后是每个物理设备。 过
{ includeHub: false } 来省略它.
const devices = await hub.getDevices(); // typed handles, gateway first, each already polled
for (const dev of devices) {
console.log(dev.name, dev.category, dev.describe());
}
describe() 返回时 一切可获 关于设备:身份、电池、每台
能力(价值+分/分/最大/步)和最新 statuses 编号 : readings编辑 HubDevice
曝光固件,硬件/软件平台,DuoFern-stick版本,节点名称,MAC,LED状态
和坚固的状态.
支持的设备
| 类 | DEVICE_TYPE_LOC | 要点 |
|---|---|---|
CoverDevice | 2,8个 | open 编号 : close 编号 : stop, (中文(简体) ), setPosition, (中文(简体) ), setTilt通风 |
SwitchDevice | 1个 | turnOn 编号 : turnOff 编号 : setOn, (中文(简体) ), isOn |
ActuatorDevice | 页:1 | 可淡化 : setBrightness, (中文(简体) ), brightness, (中文(简体) ), isOn |
LightDevice | 70-76 (中文(简体) ) | 演员 + setRgb, (中文(简体) ), setColorTemperature |
ThermostatDevice | 页:1 | setTargetTemperature, (中文(简体) ), currentTemperature升级 |
SensorDevice | 3个 | 温度、风能、亮度、雨量、接触、运动、烟雾 |
WallControllerDevice | 10个 | 频道按键时间戳 |
UnknownDevice | —— 说 | 原始状态 + 通过命令 |
特征检测由 能力名称存在 (单位:千美元)device.hasCapability(...)),与参考库完全一样——从不按产品代码.
如何运作
- 连接 - 探测器
http://<host>/…解决 api-version 基础路径(''v1 数据//hpv2)并检测密码保护;在设定密码时通过两相加盐的SHA-256挑战(cookie会话)登录. - 设备 —— 说
listDevices()读取/devices(全部能力清单-特征检测+类别). - 状态 —— 说
createDevice()编号 :refresh()读取/v4/devices/{did}(单位:千美元)statusesMap+ 键readings) (中文(简体) ). - 图标 每个控制是
PUT /devices/{did}与{ name, value? }。 。 。 .
HomePilot的本地API已经 没有实时推,因此州通过投票刷新(device.refresh()) (中文(简体) ).
有两个女孩值得了解(为你处理)
- 封面位置倒转 接线(HomePilot 0=开通). 这个图书馆揭露了HA风格
position(100 = 开口)并倒置于读取和写取两种. - 温度 状态为 deci-°C(
/10),但写作命令中的平地 °C——模型双向转换.
诊断倾倒器
import { createDumper } from '@apocaliss92/noderademacher';
const snap = createDumper(cover).dump();
// { did, category: 'cover', model, name: 'Ki*****', capabilities: [...], state: { statuses, readings } }
redact: true (默认) 遮盖友好名称, 这样垃圾可以安全共享 .
错误类型
| 类 | 掷出时 |
|---|---|
RademacherError | 基础类 |
RademacherAuthError | 登录/ 重新启用失败 |
RademacherApiError | 非-2xx HTTP 或非零中枢 error_code (单位:千美元).status(中文(简体) ) |
RademacherTransportError | 网络错误到达中枢 |
信用范围
逆向工程从 pyrademacher (图书馆背后的 家庭助理Rademacher融入社会) (中文(简体) ). 见 docs/rademacher-homepilot-api-spec.md 对于完整的协议,请注意此端口的构建来源。 与拉德马赫没有关联或认可.
许可证
麻省理工学院——见 自由主义。 。 。 .