Ошибка при попытке получить данные о производстве за один день из Solplanet/AISWEI Cloud API.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Ошибка при попытке получить данные о производстве за один день из Solplanet/AISWEI Cloud API.

Сообщение Anonymous »

Основываясь на очень полезных ответах @Rik на этот вопрос: AISWEI Solar API — Получить список растений, я могу читать ежедневную и ежемесячную выработку электроэнергии моими солнечными панелями (что несколько сбивает с толку, называемое «по месяцам» и «по годам»). "соответственно) из облачного API AISWEI. Общее производство («bytotal») также работает хорошо.
Однако опция «bydays», которая должна возвращать выходные данные с интервалом в 20 минут (у меня нет «профессиональной» версии), возвращает сервер тайм-аута. ошибка (504). Я пробовал подход как на Python, так и на PHP, и проблема касается обоих. Кто-нибудь сталкивался с той же проблемой? Возможно, я допустил ошибку где-то в процессе, но не могу ее обнаружить.
Моя версия Python показана ниже. По сути, я упростил код @Rik, удалив опцию «pro» и сделав getPlantOutput функцией для всех случаев параметра «период» (по дням, по месяцам, по годам, по итогу).

Код: Выделить всё

import requests
import json
import os
import hmac
import hashlib
import base64
from datetime import datetime

os.environ['TZ'] = 'Europe/Amsterdam'  # Setting the default timezone
crlf = "\n"  # Line break

host = 'https://eu-api-genergal.aisweicloud.com'

ApiKey = '...'
AppKey = '...'
AppSecret = '...'

today = datetime.today().strftime('%Y-%m-%d')
month = datetime.today().strftime('%Y-%m')

def getfromapi(url):
global host, AppKey, AppSecret, ApiKey

method = "GET"
accept = "application/json"
content_type = "application/json; charset=UTF-8"

key = f"key={ApiKey}"
url += ('&' if '?' in url else '?') + key
s1 = url.split('?')
s2 = sorted(s1[1].split('&'))
url = s1[0] + '?' + '&'.join(s2)

header = {
"User-Agent": "app 1.0",
"Content-Type": content_type,
"Accept": accept,
"X-Ca-Signature-Headers": "X-Ca-Key",
"X-Ca-Key": AppKey
}

str_sign = f"{method}\n{accept}\n\n{content_type}\n\nX-Ca-Key:{AppKey}\n{url}"
sign = base64.b64encode(hmac.new(AppSecret.encode('utf-8'), str_sign.encode('utf-8'), hashlib.sha256).digest())
header['X-Ca-Signature'] = sign

response = requests.get(f"{host}{url}", headers=header)

data = response.text

try:
json_data = json.loads(data)
except:
json_data = {}

json_data['status'] = response.status_code
json_data['headers'] = response.headers

return json_data

def getPlantOutput(period, date):
url = "/getPlantOutput?period=" + period + "&date=" + date
json1 = getfromapi(url)

if json1['status'] == 200:
return json1
else:
msg = f"Error retrieving data: {json1['status']}\n{json1['headers']}"
return msg
Теперь вызов getPlantOutput("bymonth",month) возвращает что-то вроде

Код: Выделить всё

{'key': '4b5102e528db40009b1a237f04a32663', 'dataunit': 'KWh', 'data': [{'time': '2024-05-01', 'no': '1', 'value': '59.8'}, {'time': '2024-05-02', 'no': '2', 'value': '59.0'}, {'time': '2024-05-03', 'no': '3', 'value': '57.8'}, {'time': '2024-05-04', 'no': '4', 'value': '47.1'}, {'time': '2024-05-05', 'no': '5', 'value': '28.1'}, {'time': '2024-05-06', 'no': '6', 'value': '16.5'}, {'time': '2024-05-07', 'no': '7', 'value': '62.2'}, {'time': '2024-05-08', 'no': '8', 'value': '52.6'}, {'time': '2024-05-09', 'no': '9', 'value': '47.6'}, {'time': '2024-05-10', 'no': '10', 'value': '12.1'}, {'time': '2024-05-11', 'no': '11', 'value': '28.9'}, {'time': '2024-05-12', 'no': '12', 'value': '62.8'}, {'time': '2024-05-13', 'no': '13', 'value': '62.3'}, {'time': '2024-05-14', 'no': '14', 'value': '61.4'}, {'time': '2024-05-15', 'no': '15', 'value': '60.6'}, {'time': '2024-05-16', 'no': '16', 'value': '61.3'}, {'time': '2024-05-17', 'no': '17', 'value': '62.6'}, {'time': '2024-05-18', 'no': '18', 'value': '60.0'}, {'time': '2024-05-19', 'no': '19', 'value': '50.1'}, {'time': '2024-05-20', 'no': '20', 'value': '43.8'}, {'time': '2024-05-21', 'no': '21', 'value': '57.4'}, {'time': '2024-05-22', 'no': '22', 'value': '56.5'}, {'time': '2024-05-23', 'no': '23', 'value': '26.0'}, {'time': '2024-05-24', 'no': '24', 'value': '55.2'}, {'time': '2024-05-25', 'no': '25', 'value': '47.7'}, {'time': '2024-05-26', 'no': '26', 'value': '38.9'}, {'time': '2024-05-27', 'no': '27', 'value': '35.5'}, {'time': '2024-05-28', 'no': '28', 'value': '0.0'}, {'time': '2024-05-29', 'no': '29', 'value': '0.0'}, {'time': '2024-05-30', 'no': '30', 'value': '0.0'}, {'time': '2024-05-31', 'no': '31', 'value': '0.0'}], 'status': 200, 'headers': {'Date': 'Tue, 28 May 2024 19:57:28 GMT', 'Content-Type': 'text/plain;charset=UTF-8', 'Content-Length': '1512', 'Connection': 'keep-alive', 'Keep-Alive': 'timeout=25', 'Server': 'Kaede/3.5.3.777 (ec3d9i5ys)', 'X-Ca-Request-Id': '791B21C1-BD4C-4E4B-916F-A78FEE5A5684'}}
то есть общий объем производства за каждый день в этом месяце. Однако вызов getPlantOutput("bydays", Today) или, скажем, getPlantOutput("bydays", "2024-05-10") возвращает

Код: Выделить всё

Error retrieving data: 504
{'Date': 'Tue, 28 May 2024 20:00:55 GMT', 'Content-Type': 'application/oct-stream', 'Content-Length': '0', 'Connection': 'keep-alive', 'Keep-Alive': 'timeout=25', 'X-Ca-Error-Message': 'Backend service request timeout', 'Server': 'Kaede/3.5.3.777 (ec3d9z7df)', 'X-Ca-Error-Code': 'D504TO', 'X-Ca-Request-Id': '56DF2B30-8A1B-4F18-98A3-10EC0ED7741C'}
Я также пробовал использовать хост https://api.general.aisweicloud.com вместо https://eu-api-genergal.aisweicloud.com, но не знаю. если бы мои данные вообще были там доступны, а также я, похоже, не смогу к ним подключиться:

Код: Выделить всё

HTTPSConnectionPool(host='api.general.aisweicloud.com', port=443): Max retries exceeded with url: /getPlantOutput?date=2024-05-28&key=4b5102e528db40009b1a237f04a32663&period=bydays (Caused by SSLError(CertificateError("hostname 'api.general.aisweicloud.com' doesn't match either of '*.aisweicloud.com', 'aisweicloud.com'")))
Есть мысли?

Подробнее здесь: https://stackoverflow.com/questions/785 ... ei-cloud-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»