You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shelly Plus 1 PM脚本开启带身份验证的Shelly 1失败求助

解决Shelly脚本中HTTP身份验证失效的问题

问题背景

我用Shelly Plus 1 PM运行脚本,需要在特定时段将另一台带用户名密码保护的Shelly 1开启10秒。未设置身份验证时,以下脚本可正常运行:

function turnOn() {
  Shelly.call("http.get", {url: 'http://' + 
          Config.ip + 
          '/relay/0?turn=on&timer=' + 
           JSON.stringify(Config.duration * 60)});
}

添加身份验证后脚本失效,尝试在URL中嵌入用户名密码的写法,但Shelly 1无反应;但用Postman发送完全相同的请求(http://USERNAME:PASSWORD@IP/relay/0?turn=on&timer=10)却能正常生效。

解决方案

Shelly的http.get调用可能无法自动解析URL中的user:pass@格式身份验证信息,Postman会自动将其转换为标准的Authorization请求头,我们可以手动构造这个请求头来解决问题:

方法1:手动添加Basic Auth请求头

function turnOn() {
  // 将用户名和密码拼接后转成Base64编码
  var authToken = btoa(Config.username + ':' + Config.password);
  Shelly.call("http.get", {
    url: 'http://' + Config.ip + '/relay/0?turn=on&timer=' + JSON.stringify(Config.duration * 60),
    headers: {
      "Authorization": "Basic " + authToken
    }
  });
}

补充提示

如果你的用户名或密码包含特殊字符(比如@、:、/等),建议先对其进行URL编码,避免拼接时出错:

function turnOn() {
  var encodedUser = encodeURIComponent(Config.username);
  var encodedPass = encodeURIComponent(Config.password);
  var authToken = btoa(encodedUser + ':' + encodedPass);
  
  Shelly.call("http.get", {
    url: 'http://' + Config.ip + '/relay/0?turn=on&timer=' + JSON.stringify(Config.duration * 60),
    headers: {
      "Authorization": "Basic " + authToken
    }
  });
}

内容的提问来源于stack exchange,提问作者n11f

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 15:27:28