Shelly脚本获取电压值返回undefined问题求助
Shelly脚本获取电压值返回undefined问题求助
嘿,我看你在Shelly脚本里获取电压时遇到了返回undefined的问题,这大概率是代码里的几个小细节出错了,我帮你梳理下:
首先看你代码里的Shelly.call部分,你用了"Voltmeter.GetStatus"这种HTML实体引号,这在Shelly的JS脚本里是不被识别的,会导致API调用直接失败,所以回调里的result自然就是undefined了。另外还有几个可以优化的地方,比如事件回调的参数命名和错误处理,我给你调整了代码:
Shelly.addEventHandler( function(event, ud) { // 先判断是不是功率变化的事件,避免不必要的调用 if (event.name === "apower_change") { print('Power: ' + event.info.apower); // 这里把HTML实体引号换成了标准双引号,这是关键修复点 Shelly.call("Voltmeter.GetStatus", {id: 0}, function(result, error_code, error_message, ud) { // 增加错误处理,方便排查问题 if (error_code === 0) { // 直接打印具体的电压值,而不是整个result对象 print('Current Voltage: ' + result.voltage); } else { print('Failed to get voltage: Error Code ' + error_code + ', Message: ' + error_message); } }, null ); } }, null );
我给你列下主要的修改点:
- 把事件回调的参数名改成了
event(原来的apower_change其实是事件对象,命名容易混淆),还加了事件类型判断,确保只在功率变化时触发电压获取。 - 核心修复:将
"替换成了标准的双引号,这是导致API调用失败的根本原因。 - 增加了错误处理逻辑,调用失败时能看到具体的错误信息,方便你进一步排查(比如Voltmeter的id是否正确,设备是否支持该API)。
- 成功获取结果后,直接输出
result.voltage,而不是整个result对象,这样能得到你需要的具体电压数值。
你可以试试这个修改后的脚本,应该就能正常获取电压值了。
备注:内容来源于stack exchange,提问作者Lex
相关产品推荐
相关产品推荐

