使用 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

相关推荐

  • RichHandler与Rich Progress集成:解决显示冲突的教程

    在使用rich库的`richhandler`进行日志输出并同时使用`progress`组件时,可能会遇到显示错乱或溢出问题。这通常是由于为`richhandler`和`progress`分别创建了独立的`console`实例导致的。解决方案是确保日志处理器和进度条组件共享同一个`console`实例…

    2026年5月10日
    000
  • python如何捕获所有类型的异常_python try except捕获所有异常的方法

    答案:捕获所有异常推荐使用except Exception as e,可捕获常规错误并记录日志,避免影响程序正常退出;需拦截系统信号时才用except BaseException as e。 在Python中,要捕获所有类型的异常,最常见且推荐的方法是使用 except Exception as e…

    2026年5月10日
    000
  • c++怎么实现一个静态代码分析工具_C++代码质量与静态分析工具开发

    静态代码分析工具通过解析源码构建AST,利用Clang框架实现未使用变量检测,结合ASTMatchers进行规则匹配,最终生成警告信息。 静态代码分析工具可以在不运行程序的前提下,检测出潜在的语法错误、编码规范问题、内存泄漏风险等。在C++中开发一个简单的静态分析工具,核心思路是解析源码并构建抽象语…

    2026年5月10日
    000
  • C++怎么理解C++的异常安全保证_C++ noexcept与强异常安全设计

    异常安全确保C++程序在抛出异常时仍保持有效状态,分为基本、强和无异常三个级别;通过copy-and-swap等技术可实现强保证,而noexcept关键字用于声明不抛异常的函数,提升性能与安全性,尤其应用于移动操作和swap,合理使用能增强代码可靠性。 在C++中,异常安全(Exception Sa…

    2026年5月10日
    000
  • Telegram Bot 启动时定制化操作与信息获取指南

    本文深入探讨了在 `python-telegram-bot` v20 中,如何在 bot 启动时执行定制化操作和获取信息。重点介绍了 `applicationbuilder` 的 `post_init_handler` 回调函数,展示了如何在其中安全地进行 telegram api 调用,并明确指出…

    2026年5月10日
    100
  • 使用ThreeJS在Canvas中实现动态图像效果并与DOM同步

    本文探讨了如何在网页中利用html `canvas>` 元素,结合threejs库,实现高级动态图像效果并与常规html dom元素完美同步。针对将图像渲染到canvas而非直接使用html “ 标签的挑战,我们揭示了threejs多元素渲染的核心机制,即通过动态调整渲染器的视口和裁剪区域,…

    2026年5月10日
    000
  • PHP多维数组怎么遍历_PHP多维数组遍历方法与代码示例

    遍历PHP多维数组需根据结构选择方法:固定层级用嵌套foreach,未知深度用递归函数或array_walk_recursive;常见陷阱包括深度不确定、非数组元素未检查、引用副作用及性能问题;筛选或修改数据可在遍历中加条件判断,结合引用修改原数组;扁平化常用递归+array_merge或array…

    2026年5月10日
    100
  • Telegram Bot v20 启动时执行任务与信息获取指南

    本文详细阐述了在 `python-telegram-bot` v20 中,如何在 bot 启动时,即 `run_polling()` 之前,执行自定义逻辑和发送信息。核心在于利用 `post_init_handler` 回调函数,并通过 `application.bot` 实例进行 telegram…

    2026年5月10日
    000
  • 什么是AC自动机?多模式字符串匹配

    AC自动机通过Trie树与Fail指针实现多模式串高效匹配,构建时先插入所有模式串形成Trie树,再用BFS建立Fail指针以实现失配跳转,匹配时对文本串一次扫描即可找出所有匹配模式,相比KMP在多模式场景下更高效。 AC自动机,简单来说,就是一个能同时匹配多个模式串的字符串匹配算法。它是在Trie…

    2026年5月10日
    000
  • Go语言HTTP客户端长连接与响应体数据读取指南

    本文旨在解决Go语言http.Client在处理HTTP长连接时,读取响应体数据为空或不完整的问题。核心在于正确初始化用于response.Body.Read()的字节缓冲区,并妥善处理io.Reader的返回值(读取字节数n和错误err),确保数据被有效接收和处理,避免因缓冲区未分配或错误处理不当…

    2026年5月10日
    000
  • html单选框如何添加_在HTML表单中添加单选框【表单】

    HTML单选框需用,同组name值相同以实现互斥;配合label提升可访问性,可用for/id显式关联或嵌套隐式关联;用checked设默认选中;CSS可通过appearance:none和伪元素自定义样式。 如果您需要在HTML表单中添加单选框,必须使用 元素,并确保同一组单选框具有相同的 nam…

    2025年12月23日
    000
  • myeclipse如何创建html_myeclipse创建html流程【方法】

    可在MyEclipse中通过五种方式创建HTML文件:一、在动态Web项目中使用Web→HTML File向导,存入WebContent目录;二、在Java项目中手动建文件夹再新建HTML文件;三、配置HTML模板自动插入标准结构;四、复制现有HTML文件快速复用;五、启用MyEclipse HTM…

    2025年12月23日
    000
  • Selenium WebDriver:通过XPath精确定位特定区域的单选按钮

    本教程旨在指导用户如何在使用selenium webdriver进行自动化测试时,精确地选择网页中特定div容器内的单选按钮组。通过优化xpath定位策略,我们将解决因元素选择器过于宽泛而导致选取到非目标元素的问题,确保自动化操作的准确性和效率。 理解问题:定位的挑战 在使用Selenium进行We…

    2025年12月23日
    000
  • Selenium XPath高级技巧:精准定位特定容器内的单选按钮

    本教程详细介绍了在Selenium自动化测试中,如何利用XPath的强大功能,精准定位并选择特定HTML容器(如div)内的单选按钮。文章通过分析常见定位问题,展示了如何结合类名和文本内容来构建精确的XPath表达式,避免选择到不相关的元素,从而提高自动化脚本的稳定性和准确性。 引言:自动化测试中的…

    2025年12月23日
    000
  • vb怎么运行html_vb运行html步骤【指南】

    VB可通过WebBrowser控件或调用默认浏览器运行HTML。1. 使用WebBrowser控件加载本地或远程HTML页面,VB6需在部件中启用“Microsoft Web Browser”,VB.NET直接拖放控件并调用Navigate方法;2. 通过Shell函数调用rundll32打开默认浏…

    2025年12月23日
    000
  • Selenium:使用XPath精确选择特定区域的单选按钮

    本文旨在解决selenium自动化测试中,当多个ui区域具有相似结构时,如何精确地选择特定div内的单选按钮。通过优化xpath定位策略,结合元素类名和文本内容来唯一标识目标父元素,从而避免选中不必要的元素,提高定位的准确性和脚本的稳定性。 1. 问题背景:宽泛定位的挑战 在进行Web自动化测试时,…

    2025年12月23日
    300
  • Selenium XPath 精确定位:如何选择特定容器内的单选按钮

    本文旨在解决Selenium自动化测试中,当通用选择器捕获过多元素时,如何精确选择特定HTML容器(如div)内的单选按钮。我们将通过优化XPath表达式,结合父元素的类属性和文本内容进行定位,从而实现对目标元素的精准控制,避免不必要的元素干扰,提升测试脚本的稳定性和准确性。 在进行Web自动化测试…

    2025年12月23日
    000
  • 如何在Three.js中动态更改3D模型(如glTF、GLB、FBX)的纹理

    本教程详细介绍了如何在three.js应用中动态更改3d模型的纹理。文章涵盖了纹理加载、目标网格识别以及如何将新纹理应用于特定网格的材质`map`属性。通过示例代码和最佳实践,您将学会如何响应用户选择(例如来自下拉菜单)来更新模型的视觉外观,从而提升应用的交互性和灵活性。 在Three.js中,动态…

    2025年12月23日
    000
  • W3C HTML验证器中Unicode字符路径解析的深度解析与修复

    W3C HTML验证器中Unicode字符路径解析的深度解析与修复W3C HTML验证器中Unicode字符路径解析的深度解析与修复W3C HTML验证器中Unicode字符路径解析的深度解析与修复W3C HTML验证器中Unicode字符路径解析的深度解析与修复

    本文深入探讨了w3c html验证器在处理包含特定unicode字符(如?)的url路径时曾出现的验证错误。该问题源于验证器内部url解析逻辑对utf-16补充字符处理不当,未能正确计算字符索引。文章详细解释了java中utf-16编码与代理对的概念,以及修复方案如何通过引入character.ch…

    2025年12月23日 用户投稿
    200
  • Three.js中动态更换3D模型纹理的教程

    本教程详细介绍了如何在Three.js应用中,通过用户选择(如下拉菜单)动态更改GLTF、GLB、FBX等3D模型特定网格的纹理。文章涵盖了纹理加载、目标网格识别、材质更新的核心机制,并提供了代码示例和最佳实践,旨在帮助开发者实现模型外观的实时定制化。 在Three.js中,为3D模型(如GLTF、…

    2025年12月23日
    000

发表回复

登录后才能评论
关注微信