使用 Shelly 脚本通过身份验证控制 Shelly 设备

使用 shelly 脚本通过身份验证控制 shelly 设备

本文介绍了如何使用 Shelly 脚本通过身份验证来控制另一个 Shelly 设备。由于 Shelly.call(“http.get”) 方法无法将 URL 中的用户名和密码转换为 HTTP 认证头部,我们需要使用 HTTP.Request 方法,并手动生成 Authorization: Basic 头部来实现身份验证。文章提供了详细的代码示例,展示了如何构建带有身份验证信息的 HTTP 请求,并处理请求结果。

通过 HTTP.Request 进行身份验证

直接在 URL 中包含用户名和密码的方式 (http://USERNAME:PASSWORD@IP/relay/0?turn=on&timer=10) 并不总是有效,尤其是在 Shelly 的 Shelly.call(“http.get”) 方法中。更可靠的方法是使用 HTTP.Request,并手动添加 Authorization: Basic 头部。

以下是一个示例脚本,展示了如何使用 HTTP.Request 方法来控制需要身份验证的 Shelly 设备:

let CONFIG = {  host: "your_shelly_ip_or_hostname", // 目标 Shelly 设备的 IP 地址或主机名  username: "your_username",          // 目标 Shelly 设备的用户名  password: "your_password",          // 目标 Shelly 设备的密码  duration: 10                       // 开关持续时间,单位秒};function turnOnShelly() {  let shelly_url = "http://" + CONFIG.host + "/relay/0?turn=on&timer=" + CONFIG.duration;  let user_pass = btoa(CONFIG.username + ":" + CONFIG.password); // 将用户名和密码编码为 Base64 字符串  let header = {    method: "GET",    url: shelly_url,    headers: {},    timeout: 20,  };  if (CONFIG.username) {    header.headers.Authorization = "Basic " + user_pass; // 添加 Authorization 头部  }  print("Calling URL ", shelly_url);  Shelly.call("HTTP.Request", header, function (result, error_code, error_message) {    if (error_code === 200) {      print("Success: " + JSON.stringify(result));    } else {      print("Error code: " + error_code);      print("Errormessage: " + error_message);    }  }, null);}// 调用 turnOnShelly 函数来打开 Shelly 设备turnOnShelly();

代码解释:

CONFIG 对象: 包含了目标 Shelly 设备的 IP 地址/主机名、用户名、密码和开关持续时间。请务必替换为实际的值。btoa() 函数: JavaScript 内置函数,用于将字符串编码为 Base64 字符串。我们将用户名和密码用冒号连接起来,然后进行 Base64 编码,得到 Authorization 头部所需的值。header 对象: 定义了 HTTP 请求的各个属性,包括:method: 请求方法,这里使用 GET。url: 请求的 URL,包含了目标 Shelly 设备的 IP 地址和开关指令。headers: 请求头,我们在这里添加 Authorization 头部。timeout: 请求超时时间,单位秒。Shelly.call(“HTTP.Request”, …): 调用 Shelly 的 HTTP.Request 方法发送 HTTP 请求。第一个参数是 header 对象,包含了请求的详细信息。第二个参数是一个回调函数,用于处理请求结果。result: 请求返回的结果。error_code: 错误代码。200 表示成功。error_message: 错误信息。第三个参数是 null,表示没有额外的数据传递给回调函数。

使用步骤:

替换配置信息: 将 CONFIG 对象中的 host、username 和 password 替换为目标 Shelly 设备的实际值。保存脚本: 将代码保存为 .js 文件,例如 turn_on_shelly.js。上传到 Shelly 设备: 将脚本上传到 Shelly Plus 1 PM 设备上。运行脚本: 在 Shelly 设备的 Web 界面或通过 API 运行该脚本。

注意事项:

确保目标 Shelly 设备已启用身份验证,并且用户名和密码正确。btoa() 函数在某些情况下可能无法正确处理非 ASCII 字符。如果用户名或密码包含特殊字符,可能需要进行额外的编码处理。仔细检查 Shelly 设备的日志输出,以便诊断任何问题。

总结:

通过使用 HTTP.Request 方法,并手动添加 Authorization: Basic 头部,我们可以轻松地通过身份验证来控制 Shelly 设备。这种方法比直接在 URL 中包含用户名和密码更安全、更可靠。希望本教程能帮助你成功地使用 Shelly 脚本控制其他 Shelly 设备。

以上就是使用 Shelly 脚本通过身份验证控制 Shelly 设备的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1515522.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
解决Node.js中npm全局安装包无法找到的问题
上一篇 2025年12月20日 09:12:15
解决Web媒体文件在线播放问题的调试指南:以缓存与路径问题为例
下一篇 2025年12月20日 09:12:27

相关推荐

发表回复

登录后才能评论
关注微信