使用 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)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月20日 09:12:15
下一篇 2025年12月20日 09:12:27

相关推荐

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

    本文档介绍了如何使用 Shelly Plus 1 PM 上的脚本,通过用户名和密码验证来控制另一个 Shelly 设备。由于 Shelly.call(“http.get”) 不会自动将 URL 中的凭据转换为 HTTP 身份验证标头,因此我们需要使用 HTTP.Request…

    2025年12月20日
    000
  • JS如何实现VR效果

    js实现vr效果主要依赖webxr api与three.js等3d库。首先通过navigator.xr检测浏览器是否支持webxr,1. 检查navigator.xr是否存在;2. 调用issessionsupported(‘immersive-vr’)确认是否支持沉浸式vr…

    2025年12月20日
    000
  • 使用 ScrollControls 实现触摸控制的解决方案

    本文旨在解决在使用 ScrollControls 时触摸控制失效的问题。通过分析 OrbitControls 和 ScrollControls 之间的冲突,提供了一种简单的解决方案,即禁用其中一个控制器,从而启用另一个控制器的触摸控制功能。本文将详细介绍这一解决方案,并提供相关代码示例,帮助开发者轻…

    2025年12月20日
    000
  • js 如何使用pick选择对象数组的特定属性

    从对象数组中挑选特定属性最常用且高效的方法是使用array.prototype.map()结合es6解构赋值,1. 可通过map和解构直接提取所需属性并返回新对象;2. 使用简洁的箭头函数语法实现隐式返回;3. 封装pickfromarray函数以支持动态指定属性列表;4. 在map中利用解构重命名…

    2025年12月20日
    000
  • 在JavaScript中高效使用自定义事件(CustomEvent)进行组件通信

    本文深入探讨了JavaScript中自定义事件(CustomEvent)的创建、分发与监听机制。通过实例代码,详细阐述了如何利用CustomEvent实现不同组件间的解耦通信,并提供了关于事件数据传递、事件流以及最佳实践的指导,帮助开发者构建更模块化、可维护的前端应用。 在现代JavaScript应…

    2025年12月20日
    000
  • 使用 Three.js 实现几何体轮廓线效果

    本文介绍了如何在 Three.js 中为几何体添加轮廓线效果。通过使用 THREE.EdgesGeometry 和 THREE.LineSegments,我们可以轻松地在现有几何体的边缘绘制轮廓线,无需复杂的自定义着色器。此外,还讨论了如何使用 LineMaterial 和 LineSegments…

    2025年12月20日
    000
  • 如何用BOM实现页面的离线访问?

    要实现页面的离线访问,主要使用 service workers 和 localstorage。1. service workers 作为浏览器后台脚本,通过拦截网络请求并决定返回缓存资源或发起新请求,实现离线资源加载;2. 注册 service worker 并编写其脚本,完成资源缓存、请求处理和版…

    2025年12月20日 好文分享
    000
  • js如何实现3D旋转效果 使用Three.js创建3D旋转动画

    要实现javascript中的3d旋转效果,应使用three.js库进行开发。具体步骤如下:1. 引入three.js库;2. 创建场景(scene)作为舞台;3. 创建相机(camera)设置视角;4. 创建渲染器(renderer)负责绘制;5. 创建3d对象并添加到场景中;6. 使用reque…

    2025年12月20日 好文分享
    000
  • JS怎么实现前端数据缓存 4种本地存储方案提升数据读取效率

    前端数据缓存的实现方式有四种主要方案,分别是localstorage、sessionstorage、cookie和indexeddb。1. localstorage用于长期存储数据,适合存储用户偏好等静态信息,但只能存储字符串且同步执行可能阻塞主线程;2. sessionstorage适用于会话级别…

    2025年12月20日 好文分享
    000
  • 如何用JavaScript实现3D动画?

    使用javascript实现3d动画通常通过three.js库。1.引入three.js并设置基本场景。2.创建3d对象,如立方体或太阳系模型。3.实现动画效果,如旋转或轨道运动。4.优化性能,使用webglrenderer和lod技术。5.调试时使用性能分析工具和错误处理。通过这些步骤,可以在浏览…

    2025年12月20日
    000
  • JavaScript中的localStorage和sessionStorage有什么区别?

    localstorage用于长期存储数据,sessionstorage仅在会话期间有效。1.localstorage数据持久保留,适合存储用户偏好和学习进度。2.sessionstorage数据仅在当前标签页有效,适合临时数据如购物车内容。两者读写操作同步,需注意性能。 JavaScript中的lo…

    2025年12月20日
    000
  • JavaScript中如何使用Three.js3D图表?

    在javascript中,可以使用three.js创建3d图表。具体步骤如下:1. 创建场景、相机和渲染器;2. 根据数据创建几何体和材质,生成柱状图形并添加到场景中;3. 渲染场景并添加交互功能,优化性能和视觉效果。 在JavaScript中使用Three.js来创建3D图表确实是一个令人兴奋的话…

    2025年12月20日
    000
  • 怎样用JavaScript实现3D效果?

    用javascript实现3d效果主要依赖于webgl技术和three.js库。1. webgl是一种基于opengl es 2.0的javascript api,允许在浏览器中进行硬件加速的3d图形渲染。2. three.js是一个基于webgl的javascript 3d库,简化了3d开发过程,…

    2025年12月20日
    000
  • JS POST请求失败,但POSTMAN成功:如何排查浏览器Fetch API请求问题?

    浏览器Fetch API POST请求失败,但Postman却成功? 使用JavaScript的Fetch API发送POST请求时,遇到一个难题:浏览器执行失败,但Postman却能成功发送相同的请求。本文将分析可能原因及解决方法。 问题:开发者使用Fetch API发送POST请求,请求体包含J…

    2025年12月20日
    000
  • Jeecg BasicTable静态数据源下校验失效是什么原因?

    Jeecg BasicTable静态数据源下校验失效问题排查指南 在使用JeecgBoot框架的BasicTable组件时,数据校验失效是一个常见问题。本文将分析一个实际案例:BasicTable使用静态数据源(dataSource)并设置校验规则后,数据无法通过校验。 问题:开发者按照官方文档,将…

    2025年12月20日
    000
  • Jeecg BasicTable静态数据源校验失效是怎么回事?

    Jeecg BasicTable静态数据源校验失效问题解析 jeecgboot框架的basictable组件提供了便捷的可编辑表格功能。许多开发者在使用过程中会遇到这样的问题:当使用静态datasource(而非动态api请求)时,即使设置了校验规则,数据也无法通过校验。本文将针对这个问题进行分析。…

    好文分享 2025年12月20日
    000
  • 在不到两分钟的时间内旋转新铁路上的许可证密钥API!

    Railway 的新功能特性让部署单文件微服务变得轻而易举,无需管理基础设施或代码库。本文将演示如何使用 Hono、Redis 和 Bun 运行时,在一个文件中构建一个许可证 API。准备开始构建吧! 注意: Railway 功能非常适合处理小型任务,例如网络钩子、cron 作业或简单的 API。它…

    2025年12月19日
    000
  • 数字制造时代的微型创业:混合生产系统和价值创造的技术分析

    研究摘要 在数字经济蓬勃发展的今天,以经营多个小型企业为特点的微型创业模式正日益兴起,并展现出颠覆性潜力。本文深入探讨了家用数字制造工具(如3D打印机、数控铣床、激光雕刻机)如何帮助微型企业家突破传统制造模式的限制,通过融合跨学科流程、物料再利用和利基市场定位,创造更高价值。基于案例研究和模块化生产…

    2025年12月19日
    000
  • 使用 esmsh 无需捆绑程序即可进行捆绑

    先前文章中,我分享了一些在现代 Web 项目中避免使用复杂开发者工具的技巧,其中包括如何利用 esm.sh 直接从浏览器导入包。 随着依赖项的累积,特别是当依赖项本身也依赖其他库(即传递依赖项)时,您可能会发现初始加载时间受到影响。当然,页面加载后,所有内容都会被有效缓存。但浏览器需要加载许多不同的…

    2025年12月19日
    000
  • 我如何在一天内构建我的应用程序代码库

    the coders bakery: a game-changer for software developers As a software developer, I’m constantly seeking tools to streamline workflows and boos…

    2025年12月19日 好文分享
    000

发表回复

登录后才能评论
关注微信