如何用require引入homeassistant-ws库并解决NodeJS使用问题
Home Assistant NodeJS WebSocket库homeassistant-ws使用指南(require引入方案)
问题1:是否必须用import?能否用require引入?
可以用require引入,不需要强制使用ES模块的import语法。该库支持CommonJS规范,直接通过require就能导入,只是导入方式和你熟悉的home-assistant库略有区别。
问题2:解决引入后的报错及完整可用示例
你遇到的报错是由于导入方式错误+变量重复声明导致的,以下是正确的require引入方案及完整代码:
1. 先安装依赖
npm install homeassistant-ws
2. 完整代码示例
// 正确用require导入库的核心方法 const { createConnection } = require('homeassistant-ws'); // Home Assistant连接配置 const haConfig = { host: '127.0.0.1', // 注意:不需要加http前缀,库默认使用ws/wss协议 port: 8123, token: '你的Home Assistant长期令牌', ignoreCert: true // 若使用自签名证书的HTTPS,需要开启此选项 }; // 建立连接并执行操作的异步函数 async function haWebSocketDemo() { try { // 创建WebSocket连接 const connection = await createConnection(haConfig); console.log('成功连接到Home Assistant'); // 示例1:获取所有实体的状态 const allStates = await connection.getStates(); console.log('所有实体状态:', allStates); // 示例2:调用Home Assistant服务(例如打开客厅灯) await connection.callService('light', 'turn_on', { entity_id: 'light.living_room' }); console.log('已调用开灯服务'); // 示例3:监听实体状态变化事件 connection.subscribeEvents(event => { if (event.event_type === 'state_changed') { const { entity_id, new_state } = event.data; console.log(`实体${entity_id}状态变为: ${new_state.state}`); } }); } catch (error) { console.error('连接或操作失败:', error.message); } } // 执行连接函数 haWebSocketDemo();
报错原因解析
SyntaxError: Identifier 'hass' has already been declared:你重复声明了hass变量,比如同时使用import和require导入,或者多次声明同名变量,删除重复声明即可解决。TypeError: hass is not a function:该库的默认导出不是构造函数,而是包含createConnection等工具方法的对象,直接将导入的对象当作函数调用就会触发这个错误,正确做法是解构导出的createConnection方法来使用。
内容的提问来源于stack exchange,提问作者sceptre357
相关产品推荐
相关产品推荐

