0

背景:我几乎没有任何编码知识,但我希望能够使用来自 Enphase 系统的太阳能输出数据来触发热水服务运行。我试图做到这一点的方法是将太阳能数据移动到谷歌表格中,当太阳能发电量足够高时,按下一个按钮。

我已经从另一个问题复制并更改了此代码,但我无法使其正常工作。我收到此错误:异常:https ://api.enphaseenergy.com 的请求失败返回代码 401。截断的服务器响应:{“reason”:“401”,“message”:[“未授权访问请求的资源。 ","未找到用户。"]}(使用 muteHttpExceptions 选项检查完整响应)。(第 10 行,文件“Enphase To Sheets”)。

我不知道从这里去哪里。任何想法我做错了什么?谢谢

代码:

function getReport() 
{
var url = 'https://api.enphaseenergy.com/api/v2/systemskey=<apikey>&user_id=<userid>'

var token = UrlFetchApp.fetch(url,{method:'POST',muteHttpExceptions: true});
var token_data = JSON.parse(token.getContentText());
var access_token = token_data.access_token

var url2 = 'https://api.enphaseenergy.com/api/v2/systems/1692404/stats&key<apikey>&user_id=<userid>'
var report = UrlFetchApp.fetch(url2,{method:'GET',headers:{Authorization: 'Bearer ' + '<apikey>'}});
Logger.log(report)

SpreadsheetApp.getActiveSheet().getSheetByName('Solar').getRange('A1').setValue(report); 
}
4

2 回答 2

0

我设法让这个工作。我所做的只是一些愚蠢的小错误,用问号代替了“&”。如果您需要,希望这对其他人有所帮助。一旦我在谷歌表中获得了我的数据,我使用 =transpose(split(A1)) 和另一个拆分函数来获得正确的格式,以便能够与 IFTTT 一起使用。

function getReport() 
{
  var url = 'https://api.enphaseenergy.com/api/v2/systems?key=<apikey_goes_here>&user_id=<userid_goes_here>'

  var token = UrlFetchApp.fetch(url,{method:'POST',muteHttpExceptions: true});
  var token_data = JSON.parse(token.getContentText());
  var access_token = token_data.access_token

  var url2 = 'https://api.enphaseenergy.com/api/v2/systems/1692404/summary?key=<apikey_goes_here>&user_id=<userid_goes_here>'
  var report = UrlFetchApp.fetch(url2,{method:'GET',headers:{Authorization: 'Bearer ' + '<userid_goes_here>'}});
  Logger.log(report)



  var sheet = SpreadsheetApp.getActive().getSheetByName('Solar');
  sheet.getRange('A1').setValue(report)

}
于 2020-09-04T07:03:19.960 回答
0

在我看来,您应该向他们请求一个 API 密钥,他们会向您发出一个,您可以将其放入带有 < > 符号的 url 部分。

也就是说,您需要一个真正的 api“密钥”和一个从 enphase 获得的真正用户 ID。

于 2020-09-03T16:27:19.320 回答