Anonymous
Ошибка при попытке получить данные о производстве за один день из Solplanet/AISWEI Cloud API.
Сообщение
Anonymous » 28 май 2024, 23:22
Основываясь на очень полезных ответах @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
1716927740
Anonymous
Основываясь на очень полезных ответах @Rik на этот вопрос: AISWEI Solar API — Получить список растений, я могу читать ежедневную и ежемесячную выработку электроэнергии моими солнечными панелями (что несколько сбивает с толку, называемое «по месяцам» и «по годам»). "соответственно) из облачного API AISWEI. Общее производство («bytotal») также работает хорошо. Однако опция «bydays», которая должна возвращать выходные данные с интервалом в 20 минут (у меня нет «профессиональной» версии), возвращает сервер тайм-аута. ошибка (504). Я пробовал подход как на Python, так и на PHP, и проблема касается обоих. Кто-нибудь сталкивался с той же проблемой? Возможно, я допустил ошибку где-то в процессе, но не могу ее обнаружить. Моя версия Python показана ниже. По сути, я упростил код @Rik, удалив опцию «pro» и сделав getPlantOutput функцией для всех случаев параметра «период» (по дням, по месяцам, по годам, по итогу). [code]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 [/code] Теперь вызов getPlantOutput("bymonth",month) возвращает что-то вроде [code]{'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'}} [/code] то есть общий объем производства за каждый день в этом месяце. Однако вызов getPlantOutput("bydays", Today) или, скажем, getPlantOutput("bydays", "2024-05-10") возвращает [code]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'} [/code] Я также пробовал использовать хост https://api.general.aisweicloud.com вместо https://eu-api-genergal.aisweicloud.com, но не знаю. если бы мои данные вообще были там доступны, а также я, похоже, не смогу к ним подключиться: [code]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'"))) [/code] Есть мысли? Подробнее здесь: [url]https://stackoverflow.com/questions/78546306/error-trying-to-retrieve-a-single-days-production-from-solplanet-aiswei-cloud-a[/url]