release 1.5

This commit is contained in:
Thomas Luther 2024-02-26 01:13:20 +01:00
parent 0850a8d992
commit cd0a3eb87c
67 changed files with 2088 additions and 84 deletions

View File

@ -5,19 +5,17 @@ pip install cryptography
pip install aiohttp
"""
# pylint: disable=too-many-lines,too-many-arguments,too-many-branches,too-many-statements,too-many-public-methods
from __future__ import annotations
from base64 import b64encode
import contextlib
from datetime import datetime, timedelta
from enum import Enum
import json
import logging
import os
import sys
import time
from base64 import b64encode
from datetime import datetime, timedelta
from enum import Enum
from aiohttp import ClientSession
from aiohttp.client_exceptions import ClientError
@ -225,6 +223,22 @@ LOGIN_RESPONSE: dict = {
}
class SolixDeviceType(Enum):
"""Enumuration for Anker Solix device types."""
SYSTEM = "system"
SOLARBANK = "solarbank"
INVERTER = "inverter"
PPS = "pps"
POWERPANEL = "powerpanel"
class SolixParmType(Enum):
"""Enumuration for Anker Solix Parameter types."""
SOLARBANK_SCHEDULE = "4"
class SolixDeviceStatus(Enum):
"""Enumuration for Anker Solix Device status."""
@ -241,6 +255,7 @@ class SolarbankStatus(Enum):
discharging = "2"
bypass = "3"
bypass_charging = "35" # pseudo state, the solarbank does not distinguish this
charge_priority = "37" # pseudo state, the solarbank does not distinguish this but reports 3 as seen so far
wakeup = "4" # Not clear what happens during this state, but observed short intervals during night as well
# TODO(3): Add descriptions once status code usage is observed/known
# There is also a deep standby / full bypass mode at cold temperatures when the battery cannot be loaded.
@ -249,7 +264,7 @@ class SolarbankStatus(Enum):
unknown = "unknown"
class AnkerSolixApi: # pylint: disable=too-many-instance-attributes
class AnkerSolixApi:
"""Define the API class to handle Anker server authentication and API requests, along with the last state of queried site details and Device information."""
def __init__(
@ -304,7 +319,7 @@ class AnkerSolixApi: # pylint: disable=too-many-instance-attributes
# Define Encryption for password, using ECDH assymetric key exchange for shared secret calculation, which must be used to encrypt the password using AES-256-CBC with seed of 16
# uncompressed public key from EU Anker server in the format 04 [32 byte x vlaue] [32 byte y value]
# TODO(2): COM Anker server public key usage to be validated
# TODO(2): COM Anker server public key usage must still be validated
self._api_public_key_hex = "04c5c00c4f8d1197cc7c3167c52bf7acb054d722f0ef08dcd7e0883236e0d72a3868d9750cb47fa4619248f3d83f0f662671dadc6e2d31c2f41db0161651c7c076"
self._curve = (
ec.SECP256R1()
@ -431,7 +446,6 @@ class AnkerSolixApi: # pylint: disable=too-many-instance-attributes
"""Update the internal device details dictionary with the given data. The device_sn key must be set in the data dict for the update to be applied.
This method is used to consolidate various device related key values from various requests under a common set of device keys.
TODO: Add more relevent keys for Solarbank or other devices once known/required
"""
sn = devData.get("device_sn")
if sn:
@ -465,17 +479,42 @@ class AnkerSolixApi: # pylint: disable=too-many-instance-attributes
device.update({"wifi_signal": str(value)})
elif key in ["bt_ble_mac"] and value:
device.update({"bt_ble_mac": str(value)})
elif key in ["battery_power"]:
elif key in ["battery_power"] and value:
# This is a percentage value for the battery state of charge, not power
device.update({"battery_soc": str(value)})
cap = ""
# Derive battery capacity in Wh from solarbank name
if device.get("type") == SolixDeviceType.SOLARBANK.value:
cap = device.get("name", "").replace("Solarbank E", "")
# Add capacity and calculate remaining energy in Wh
if cap and str(cap).isdigit() and str(value).isdigit:
device.update(
{
"battery_capacity": str(cap),
"battery_energy": str(
int(int(cap) * int(value) / 100)
),
}
)
elif key in ["charging_power"]:
device.update({"charging_power": str(value)})
elif key in ["photovoltaic_power"]:
device.update({"input_power": str(value)})
elif key in ["output_power"]:
device.update({"output_power": str(value)})
elif key in ["set_load_power"]:
device.update({"set_output_power": str(value)})
# solarbank info shows the load preset per device, which is identical to device parallel_home_load for 2 solarbanks, or current homeload for single solarbank
elif key in ["set_load_power", "parallel_home_load"] and value:
# Value may include unit, remove unit to have content consistent
device.update({"set_output_power": str(value).replace("W", "")})
# The current_home_load from get_device_load always shows the system wide settings made via the schedule
elif key in ["current_home_load"] and value:
# Value may include unit, remove unit to have content consistent
device.update(
{"set_system_output_power": str(value).replace("W", "")}
)
# Value for device home load may be empty for single solarbank, use this setting also for device preset in this case
if not device.get("set_output_power"):
device.update({"set_output_power": str(value).replace("W", "")})
elif key in ["power_unit"]:
device.update({"power_unit": str(value)})
elif key in ["status"]:
@ -495,13 +534,20 @@ class AnkerSolixApi: # pylint: disable=too-many-instance-attributes
if str(value) == status.value:
description = status.name
break
# check if battery charging during bypass
if description == SolarbankStatus.bypass.name and (
charge := devData.get("charging_power")
# check if battery charging during bypass and if output during bypass
# NOTE: charging power may be updated after initial device details update
# NOTE: If status is 3=Bypass but nothing goes out, the charge priority is active (e.g. 0 Watt switch)
if (
description == SolarbankStatus.bypass.name
and (charge := devData.get("charging_power"))
and (out := devData.get("output_power"))
):
with contextlib.suppress(ValueError):
charge = int(charge)
if charge > 0:
if int(out) == 0:
# Bypass but 0 W output must be active charge priority
description = SolarbankStatus.charge_priority.name
elif int(charge) > 0:
# Bypass with output and charge must be bypass charging
description = SolarbankStatus.bypass_charging.name
device.update({"charging_status_desc": description})
elif key in ["bws_surplus"]:
@ -512,6 +558,12 @@ class AnkerSolixApi: # pylint: disable=too-many-instance-attributes
device.update({"auto_upgrade": bool(value)})
elif key in ["power_cutoff"]:
device.update({"power_cutoff": int(value)})
elif key in ["fittings"]:
# update nested dictionary
if "fittings" in device:
device["fittings"].update(dict(value))
else:
device["fittings"] = dict(value)
elif key in ["solar_info"] and isinstance(value, dict) and value:
# remove unnecessary keys from solar_info
keylist = value.keys()
@ -522,8 +574,11 @@ class AnkerSolixApi: # pylint: disable=too-many-instance-attributes
]:
value.pop(key)
device.update({"solar_info": dict(value)})
# schedule is currently a site wide setting. However, we save this with device details to retain info across site updates
# When individual device schedules are support in future, this info is needed per device anyway
elif key in ["schedule"] and isinstance(value, dict) and value:
device.update({"schedule": dict(value)})
# inverter specific keys
elif key in ["generate_power"]:
device.update({"generate_power": str(value)})
@ -646,7 +701,7 @@ class AnkerSolixApi: # pylint: disable=too-many-instance-attributes
endpoint: str,
*,
headers: dict | None = None,
json: dict | None = None, # noqa: W0621 # pylint: disable=redefined-outer-name
json: dict | None = None, # pylint: disable=redefined-outer-name
) -> dict:
"""Handle all requests to the API. This is also called recursively by login requests if necessary."""
if not headers:
@ -770,9 +825,7 @@ class AnkerSolixApi: # pylint: disable=too-many-instance-attributes
self._logger.error("Response Text: %s", body_text)
raise err
async def update_sites( # pylint: disable=too-many-locals
self, fromFile: bool = False
) -> dict:
async def update_sites(self, fromFile: bool = False) -> dict:
"""Get the latest info for all accessible sites and update class site and device variables.
Example data:
@ -808,11 +861,12 @@ class AnkerSolixApi: # pylint: disable=too-many-instance-attributes
mysite = self.sites.get(myid, {})
siteInfo = mysite.get("site_info", {})
siteInfo.update(site)
mysite.update({"site_info": siteInfo})
admin = siteInfo.get("ms_type", 0) in [
0,
1,
] # add boolean key to indicate whether user is site admin (ms_type 1 or not known) and can query device details
mysite.update(
{"type": SolixDeviceType.SYSTEM.value, "site_info": siteInfo}
)
admin = (
siteInfo.get("ms_type", 0) in [0, 1]
) # add boolean key to indicate whether user is site admin (ms_type 1 or not known) and can query device details
mysite.update({"site_admin": admin})
# Update scene info for site
self._logger.debug("Getting scene info for site")
@ -820,29 +874,77 @@ class AnkerSolixApi: # pylint: disable=too-many-instance-attributes
mysite.update(scene)
self.sites.update({myid: mysite})
# Update device details from scene info
for solarbank in (mysite.get("solarbank_info", {})).get(
"solarbank_list", []
):
sb_total_charge = (mysite.get("solarbank_info", {})).get(
"total_charging_power", ""
)
sb_total_charge_calc = 0
sb_charges = {}
sb_list = (mysite.get("solarbank_info", {})).get("solarbank_list", [])
for solarbank in sb_list:
# work around for incorrect charging power value per solarbank, only solarbank total_charging_power is correct
# calculate estimate based on total for proportional split across available solarbanks and their calculated charge power
with contextlib.suppress(ValueError):
charge_calc = 0
power_in = int(solarbank.get("photovoltaic_power", ""))
power_out = int(solarbank.get("output_power", ""))
power_charge = int(solarbank.get("charging_power", ""))
charge_calc = abs(power_in - power_out)
if power_charge == 0:
solarbank["charging_power"] = charge_calc
sb_total_charge_calc += charge_calc
sn = self._update_dev(
solarbank, devType="solarbank", siteId=myid, isAdmin=admin
solarbank,
devType=SolixDeviceType.SOLARBANK.value,
siteId=myid,
isAdmin=admin,
)
if sn:
act_devices.append(sn)
sb_charges[sn] = charge_calc
# adjust calculated SB charge to match total
if (
len(sb_charges) == len(sb_list)
and str(sb_total_charge).isdigit()
and sb_total_charge_calc > 0
):
sb_total_charge = int(sb_total_charge)
for sn, charge in sb_charges.items():
self.devices[sn]["charging_power"] = int(
sb_total_charge / sb_total_charge_calc * charge
)
# Update also the charge status description which may change after charging power correction
charge_status = self.devices[sn].get("charging_status")
if charge_status == SolarbankStatus.bypass:
self._update_dev(
{
"device_sn": sn,
"charging_status": charge_status,
}
)
for pps in (mysite.get("pps_info", {})).get("pps_list", []):
sn = self._update_dev(
pps, devType="pps", siteId=myid, isAdmin=admin
pps,
devType=SolixDeviceType.PPS.value,
siteId=myid,
isAdmin=admin,
)
if sn:
act_devices.append(sn)
for solar in mysite.get("solar_list", []):
sn = self._update_dev(
solar, devType="inverter", siteId=myid, isAdmin=admin
solar,
devType=SolixDeviceType.INVERTER.value,
siteId=myid,
isAdmin=admin,
)
if sn:
act_devices.append(sn)
for powerpanel in mysite.get("powerpanel_list", []):
sn = self._update_dev(
powerpanel, devType="powerpanel", siteId=myid, isAdmin=admin
powerpanel,
devType=SolixDeviceType.POWERPANEL.value,
siteId=myid,
isAdmin=admin,
)
if sn:
act_devices.append(sn)
@ -892,7 +994,7 @@ class AnkerSolixApi: # pylint: disable=too-many-instance-attributes
device.update(wifi_list[wifi_index - 1])
# Fetch device type specific details
if dev_Type in ["solarbank"]:
if dev_Type in [SolixDeviceType.SOLARBANK.value]:
# Fetch active Power Cutoff setting for solarbanks
self._logger.debug("Getting Power Cutoff settings for device")
await self.get_power_cutoff(
@ -908,10 +1010,17 @@ class AnkerSolixApi: # pylint: disable=too-many-instance-attributes
await self.get_device_load(
siteId=site_id, deviceSn=sn, fromFile=fromFile
)
# Fetch device fittings for device types supporting it
self._logger.debug("Getting fittings for device")
await self.get_device_fittings(
siteId=site_id, deviceSn=sn, fromFile=fromFile
)
# update entry in devices
self.devices.update({sn: device})
# TODO(1): Fetch other details of specific device types as known and relevant
# TODO(#0): Fetch other details of specific device types as known and relevant
return self.devices
@ -1084,6 +1193,56 @@ class AnkerSolixApi: # pylint: disable=too-many-instance-attributes
self._update_dev(device)
return data
async def set_auto_upgrade(self, devices: dict[str, bool]) -> bool:
"""Set auto upgrade switches for given device dictonary.
Example input:
devices = {'9JVB42LJK8J0P5RY': True}
The main switch must be set True if any device switch is set True. The main switch does not need to be changed to False if no device is True.
But if main switch is set to False, all devices will automatically be set to False and individual setting is ignored by Api.
"""
# get actual settings
settings = await self.get_auto_upgrade()
if (main_switch := settings.get("main_switch")) is None:
return False
dev_switches = {}
main = None
change_list = []
for dev_setting in settings.get("device_list") or []:
if (
isinstance(dev_setting, dict)
and (device_sn := dev_setting.get("device_sn"))
and (dev_upgrade := dev_setting.get("auto_upgrade")) is not None
):
dev_switches[device_sn] = dev_upgrade
# Loop through provided device list and compose the request data device list that needs to be send
for sn, upgrade in devices.items():
if sn in dev_switches:
if upgrade != dev_switches[sn]:
change_list.append({"device_sn": sn, "auto_upgrade": upgrade})
if upgrade:
main = True
if change_list:
# json example for endpoint
# {"main_switch": False, "device_list": [{"device_sn": "9JVB42LJK8J0P5RY","auto_upgrade": True}]}
data = {
"main_switch": main if main is not None else main_switch,
"device_list": change_list,
}
# Make the Api call and check for return code
code = (
await self.request(
"post", _API_ENDPOINTS["set_auto_upgrade"], json=data
)
).get("code")
if not isinstance(code, int) or int(code) != 0:
return False
# update the data in api dict
await self.get_auto_upgrade()
return True
async def get_wifi_list(self, siteId: str, fromFile: bool = False) -> dict:
"""Get the wifi list.
@ -1175,16 +1334,26 @@ class AnkerSolixApi: # pylint: disable=too-many-instance-attributes
"post", _API_ENDPOINTS["get_device_load"], json=data
)
# API Bug? home_load_data provided as string instead of object...Convert into object for proper handling
string_data = (resp.get("data", {})).get("home_load_data", {})
string_data = (resp.get("data") or {}).get("home_load_data") or {}
if isinstance(string_data, str):
resp["data"].update({"home_load_data": json.loads(string_data)})
data = resp.get("data", {})
if schedule := data.get("home_load_data", {}):
self._update_dev({"device_sn": deviceSn, "schedule": schedule})
data = resp.get("data") or {}
if schedule := data.get("home_load_data") or {}:
self._update_dev(
{
"device_sn": deviceSn,
"schedule": schedule,
"current_home_load": data.get("current_home_load") or "",
"parallel_home_load": data.get("parallel_home_load") or "",
}
)
return data
async def get_device_parm(
self, siteId: str, paramType: str = "4", fromFile: bool = False
self,
siteId: str,
paramType: str = SolixParmType.SOLARBANK_SCHEDULE.value,
fromFile: bool = False,
) -> dict:
r"""Get device parameters (e.g. solarbank schedule). This can be queried for each siteId listed in the homepage info site_list. The paramType is always 4, but can be modified if necessary.
@ -1214,7 +1383,7 @@ class AnkerSolixApi: # pylint: disable=too-many-instance-attributes
self,
siteId: str,
paramData: dict,
paramType: str = "4",
paramType: str = SolixParmType.SOLARBANK_SCHEDULE.value,
command: int = 17,
toFile: bool = False,
) -> dict:
@ -1245,6 +1414,45 @@ class AnkerSolixApi: # pylint: disable=too-many-instance-attributes
)
return resp.get("data", {})
async def get_device_fittings(
self, siteId: str, deviceSn: str, fromFile: bool = False
) -> dict:
r"""Get device fittings.
Example data:
{"data": [{
"device_sn": "ZDL32D6A3HKXUTN1","product_code": "A17Y0","device_name": "E1600 0W Output Switch","alias_name": "E1600 0W Output Switch",
"img_url": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/2024/01/10/iot-admin/EPBsJ3a5JyMGqA1j/picl_A17Y0_normal.png",
"bt_ble_id": "","bt_ble_mac": "FC1CEA253CDB","link_time": 1707127936
}]}
"""
data = {"site_id": siteId, "device_sn": deviceSn}
if fromFile:
resp = self._loadFromFile(
os.path.join(self._testdir, f"device_fittings_{deviceSn}.json")
)
else:
resp = await self.request(
"post", _API_ENDPOINTS["get_device_fittings"], json=data
)
data = resp.get("data") or {}
# update devices dict with new fittings data
fittings = {}
for fitting in [
x
for x in data.get("data") or []
if isinstance(x, dict) and x.get("device_sn")
]:
# remove unnecessary keys from fitting device
keylist = fitting.keys()
for key in [
x for x in ("img_url", "bt_ble_id", "link_time") if x in keylist
]:
fitting.pop(key)
fittings[fitting.get("device_sn")] = fitting
self._update_dev({"device_sn": deviceSn, "fittings": fittings})
return data
async def get_ota_info(
self, solarbankSn: str = "", inverterSn: str = "", fromFile: bool = False
) -> dict:
@ -1331,16 +1539,12 @@ class AnkerSolixApi: # pylint: disable=too-many-instance-attributes
"site_id": siteId,
"device_sn": deviceSn,
"type": rangeType if rangeType in ["day", "week", "year"] else "day",
"start_time": (
startDay.strftime("%Y-%m-%d")
if startDay
else datetime.today().strftime("%Y-%m-%d")
),
"device_type": (
devType
if devType in ["solar_production", "solarbank"]
else "solar_production"
),
"start_time": startDay.strftime("%Y-%m-%d")
if startDay
else datetime.today().strftime("%Y-%m-%d"),
"device_type": devType
if devType in ["solar_production", "solarbank"]
else "solar_production",
"end_time": endDay.strftime("%Y-%m-%d") if endDay else "",
}
resp = await self.request("post", _API_ENDPOINTS["energy_analysis"], json=data)

View File

@ -1,12 +1,14 @@
{
"4AD5NI2AC8WL4CFI": {
"device_sn": "4AD5NI2AC8WL4CFI",
"J19P1918S0BKY4EP": {
"device_sn": "J19P1918S0BKY4EP",
"type": "solarbank",
"site_id": "3df1aea0-4b7c-e0f8-7cc5-5ba5a4df5f7a",
"site_id": "b8b1aaa6-ff7c-f1d3-9faa-c5e1648091ff",
"is_admin": true,
"device_pn": "A17C0",
"name": "Solarbank E1600",
"battery_soc": "75",
"battery_capacity": "1600",
"battery_energy": "1200",
"charging_power": "0",
"power_unit": "W",
"charging_status": "2",
@ -16,14 +18,13 @@
"wireless_type": "1",
"input_power": "0",
"output_power": "0",
"set_output_power": "",
"bt_ble_mac": "EC9E58A36A94",
"bt_ble_mac": "F68FC0404AD7",
"alias": "Solarbank E1600",
"wifi_online": false,
"charge": false,
"bws_surplus": "0",
"sw_version": "v1.4.4",
"auto_upgrade": true,
"auto_upgrade": false,
"wifi_name": "wifi-network-1",
"wifi_signal": "100",
"power_cutoff": 10,
@ -87,6 +88,9 @@
"is_charge_priority": 0,
"default_charge_priority": 0,
"is_zero_output_tips": 1
}
},
"set_system_output_power": "300",
"set_output_power": "300",
"fittings": {}
}
}

View File

@ -1,7 +1,8 @@
{
"3df1aea0-4b7c-e0f8-7cc5-5ba5a4df5f7a": {
"b8b1aaa6-ff7c-f1d3-9faa-c5e1648091ff": {
"type": "system",
"site_info": {
"site_id": "3df1aea0-4b7c-e0f8-7cc5-5ba5a4df5f7a",
"site_id": "b8b1aaa6-ff7c-f1d3-9faa-c5e1648091ff",
"site_name": "BKW",
"site_img": "",
"device_type_list": [
@ -49,12 +50,12 @@
"solarbank_list": [
{
"device_pn": "A17C0",
"device_sn": "4AD5NI2AC8WL4CFI",
"device_sn": "J19P1918S0BKY4EP",
"device_name": "Solarbank E1600",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "75",
"bind_site_status": "",
"charging_power": "0",
"charging_power": 0,
"power_unit": "W",
"charging_status": "2",
"status": "0",
@ -70,7 +71,7 @@
"power_unit": "W",
"charging_status": "0",
"total_battery_power": "0.00",
"updated_time": "2023-12-28 18:53:27",
"updated_time": "2024-02-22 01:16:32",
"total_photovoltaic_power": "0",
"total_output_power": "0.00",
"display_set_power": false
@ -78,7 +79,7 @@
"retain_load": "300W",
"updated_time": "01-01-0001 00:00:00",
"power_site_type": 2,
"site_id": "3df1aea0-4b7c-e0f8-7cc5-5ba5a4df5f7a",
"site_id": "b8b1aaa6-ff7c-f1d3-9faa-c5e1648091ff",
"powerpanel_list": []
}
}

View File

@ -5,13 +5,13 @@
"main_switch": true,
"device_list": [
{
"device_sn": "4AD5NI2AC8WL4CFI",
"device_sn": "J19P1918S0BKY4EP",
"device_name": "Solarbank E1600",
"auto_upgrade": true,
"auto_upgrade": false,
"alias_name": "Solarbank E1600",
"icon": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png"
}
]
},
"trace_id": "cd0b5b19d1ee5958cc4ecfdd66a90910"
"trace_id": "07e9f38f25a3f84ccdda95e6bde176d4"
}

View File

@ -4,10 +4,10 @@
"data": {
"data": [
{
"device_sn": "4AD5NI2AC8WL4CFI",
"device_sn": "J19P1918S0BKY4EP",
"product_code": "A17C0",
"bt_ble_id": "EC:9E:58:A3:6A:94",
"bt_ble_mac": "EC9E58A36A94",
"bt_ble_id": "F6:8F:C0:40:4A:D7",
"bt_ble_mac": "F68FC0404AD7",
"device_name": "Solarbank E1600",
"alias_name": "Solarbank E1600",
"img_url": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
@ -26,5 +26,5 @@
}
]
},
"trace_id": "46caca47d8629d532caac685b2167ffb"
"trace_id": "9eebba7bcd2992dbccae0561cc0f3cae"
}

View File

@ -5,5 +5,5 @@
"device_list": null,
"guide_txt": ""
},
"trace_id": "c7f8cb6b0dad2af2effa6ab6ad1fb424"
"trace_id": "bfc75c3882ba76d42cb51b32f0e3cc5a"
}

View File

@ -0,0 +1,19 @@
{
"code": 0,
"msg": "success!",
"data": {
"ota_complete_status": 2,
"process_skip_type": 1,
"solar_info": {
"solar_sn": "",
"solar_brand": "ANKER",
"solar_model": "A5140",
"brand_id": "3a9930f5-74ef-4e41-a797-04e6b33d3f0f",
"model_img": "https://public-aiot-ore-qa.s3.us-west-2.amazonaws.com/product/870cd979-95d8-4cc1-89c4-04a26511c9b1/picl_A1771_normal.png",
"version": "",
"ota_status": 1,
"solar_model_name": "MI60 Microinverter"
}
},
"trace_id": "7ea0ad4d351fe3696435e3a1e4a58f43"
}

View File

@ -0,0 +1,8 @@
{
"code": 0,
"msg": "success!",
"data": {
"data": []
},
"trace_id": "fd7ded14b0e11d5d2ff8dfce2ace3faa"
}

View File

@ -0,0 +1,12 @@
{
"code": 0,
"msg": "success!",
"data": {
"site_id": "b8b1aaa6-ff7c-f1d3-9faa-c5e1648091ff",
"home_load_data": "{\"ranges\":[{\"id\":0,\"start_time\":\"00:00\",\"end_time\":\"08:00\",\"turn_on\":true,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":300,\"number\":1}],\"charge_priority\":80},{\"id\":0,\"start_time\":\"08:00\",\"end_time\":\"17:00\",\"turn_on\":false,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":100,\"number\":1}],\"charge_priority\":80},{\"id\":0,\"start_time\":\"17:00\",\"end_time\":\"24:00\",\"turn_on\":true,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":300,\"number\":1}],\"charge_priority\":0}],\"min_load\":100,\"max_load\":800,\"step\":0,\"is_charge_priority\":0,\"default_charge_priority\":0,\"is_zero_output_tips\":1}",
"current_home_load": "300W",
"parallel_home_load": "",
"parallel_display": false
},
"trace_id": "c73f8add28b4b6accd0ff213db4e9cab"
}

View File

@ -0,0 +1,8 @@
{
"code": 0,
"msg": "success!",
"data": {
"param_data": "{\"ranges\":[{\"id\":0,\"start_time\":\"00:00\",\"end_time\":\"08:00\",\"turn_on\":true,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":300,\"number\":1}],\"charge_priority\":80},{\"id\":0,\"start_time\":\"08:00\",\"end_time\":\"17:00\",\"turn_on\":false,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":100,\"number\":1}],\"charge_priority\":80},{\"id\":0,\"start_time\":\"17:00\",\"end_time\":\"24:00\",\"turn_on\":true,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":300,\"number\":1}],\"charge_priority\":0}],\"min_load\":100,\"max_load\":800,\"step\":0,\"is_charge_priority\":0,\"default_charge_priority\":0,\"is_zero_output_tips\":1}"
},
"trace_id": "d3babd61efdfadf1d298ed0f08da4d55"
}

View File

@ -4,7 +4,7 @@
"data": {
"site_list": [
{
"site_id": "3df1aea0-4b7c-e0f8-7cc5-5ba5a4df5f7a",
"site_id": "b8b1aaa6-ff7c-f1d3-9faa-c5e1648091ff",
"site_name": "BKW",
"site_img": "",
"device_type_list": [
@ -20,7 +20,7 @@
"solarbank_list": [
{
"device_pn": "",
"device_sn": "4AD5NI2AC8WL4CFI",
"device_sn": "J19P1918S0BKY4EP",
"device_name": "Solarbank E1600",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "75",
@ -39,5 +39,5 @@
],
"powerpanel_list": []
},
"trace_id": "2e647ef3c3bc8bdfe5e2f1f21d0cd410"
"trace_id": "7ec26cd4e3ebac01c5bbceabab0b3ad5"
}

View File

@ -0,0 +1,23 @@
{
"code": 0,
"msg": "success!",
"data": {
"power_cutoff_data": [
{
"id": 1,
"is_selected": 1,
"output_cutoff_data": 10,
"lowpower_input_data": 5,
"input_cutoff_data": 10
},
{
"id": 2,
"is_selected": 0,
"output_cutoff_data": 5,
"lowpower_input_data": 4,
"input_cutoff_data": 5
}
]
},
"trace_id": "688edd9aa7f63abf2ecd89cbcac79cdf"
}

View File

@ -0,0 +1,11 @@
{
"code": 0,
"msg": "success!",
"data": {
"site_id": "b8b1aaa6-ff7c-f1d3-9faa-c5e1648091ff",
"price": 0.4,
"site_co2": 0,
"site_price_unit": "\u20ac"
},
"trace_id": "6edea20b7d8ecdbebf9eff8339efd98b"
}

View File

@ -0,0 +1,75 @@
{
"code": 0,
"msg": "success!",
"data": {
"home_info": {
"home_name": "Home",
"home_img": "",
"charging_power": "0.00",
"power_unit": "W"
},
"solar_list": [],
"pps_info": {
"pps_list": [],
"total_charging_power": "0.00",
"power_unit": "W",
"total_battery_power": "0.00",
"updated_time": "",
"pps_status": 0
},
"statistics": [
{
"type": "1",
"total": "89.75",
"unit": "kwh"
},
{
"type": "2",
"total": "89.48",
"unit": "kg"
},
{
"type": "3",
"total": "35.90",
"unit": "\u20ac"
}
],
"topology_type": "1",
"solarbank_info": {
"solarbank_list": [
{
"device_pn": "A17C0",
"device_sn": "J19P1918S0BKY4EP",
"device_name": "Solarbank E1600",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "75",
"bind_site_status": "",
"charging_power": "0",
"power_unit": "W",
"charging_status": "2",
"status": "0",
"wireless_type": "1",
"main_version": "",
"photovoltaic_power": "0",
"output_power": "0",
"create_time": 1695392386,
"set_load_power": ""
}
],
"total_charging_power": "0",
"power_unit": "W",
"charging_status": "0",
"total_battery_power": "0.00",
"updated_time": "2024-02-22 01:16:32",
"total_photovoltaic_power": "0",
"total_output_power": "0.00",
"display_set_power": false
},
"retain_load": "300W",
"updated_time": "01-01-0001 00:00:00",
"power_site_type": 2,
"site_id": "b8b1aaa6-ff7c-f1d3-9faa-c5e1648091ff",
"powerpanel_list": []
},
"trace_id": "ed1cf05df2ee38fe9cface257d7e0e35"
}

View File

@ -0,0 +1,39 @@
{
"code": 0,
"msg": "success!",
"data": {
"site_info": {
"site_id": "b8b1aaa6-ff7c-f1d3-9faa-c5e1648091ff",
"site_name": "BKW",
"site_img": "",
"device_type_list": null,
"ms_type": 0,
"power_site_type": 0,
"is_allow_delete": false
},
"solar_list": [],
"pps_list": [],
"solarbank_list": [
{
"device_pn": "A17C0",
"device_sn": "J19P1918S0BKY4EP",
"device_name": "Solarbank E1600",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "",
"bind_site_status": "",
"charging_power": "",
"power_unit": "",
"charging_status": "",
"status": "",
"wireless_type": "",
"main_version": "",
"photovoltaic_power": "",
"output_power": "",
"create_time": 0,
"set_load_power": ""
}
],
"powerpanel_list": []
},
"trace_id": "560cc90e81ebe4dfda45ac4f295ca07a"
}

View File

@ -4,7 +4,7 @@
"data": {
"site_list": [
{
"site_id": "3df1aea0-4b7c-e0f8-7cc5-5ba5a4df5f7a",
"site_id": "b8b1aaa6-ff7c-f1d3-9faa-c5e1648091ff",
"site_name": "BKW",
"site_img": "",
"device_type_list": [
@ -16,5 +16,5 @@
}
]
},
"trace_id": "f1ac7d6cee7a2432ea3e6d2dcaa3b6ad"
"trace_id": "cda3bbcc760a9239d38076efacfefaea"
}

View File

@ -0,0 +1,12 @@
{
"code": 0,
"msg": "success!",
"data": {
"brand_id": "3a9930f5-74ef-4e41-a797-04e6b33d3f0f",
"solar_brand": "ANKER",
"solar_model": "A5140",
"solar_sn": "",
"solar_model_name": "MI60 Microinverter"
},
"trace_id": "c84fe77fee6a27a04f3dd5f50af91bea"
}

View File

@ -7,7 +7,7 @@
"solarbank_list": [
{
"device_pn": "A17C0",
"device_sn": "4AD5NI2AC8WL4CFI",
"device_sn": "J19P1918S0BKY4EP",
"device_name": "Solarbank E1600",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "",
@ -25,5 +25,5 @@
}
]
},
"trace_id": "05cba7ba093e3e2abfaa4800f35fa7e0"
"trace_id": "7f27c7c8daaadb4d12fa129de411499b"
}

View File

@ -0,0 +1,13 @@
{
"code": 0,
"msg": "success!",
"data": {
"wifi_info_list": [
{
"wifi_name": "wifi-network-1",
"wifi_signal": "100"
}
]
},
"trace_id": "19d71d7c090ba105da53084fdca41baa"
}

View File

@ -0,0 +1,233 @@
{
"6TXY2KVEWX2UB78L": {
"device_sn": "RBJX4XL3BQ8PWS1X",
"type": "solarbank",
"site_id": "7fe6ade4-f3eb-ba1f-d82f-1f3a7e4fee8a",
"is_admin": true,
"device_pn": "A17C0",
"name": "Solarbank E1600",
"battery_soc": "46",
"charging_power": "0",
"power_unit": "W",
"charging_status": "3",
"charging_status_desc": "bypass",
"status": "1",
"status_desc": "on",
"wireless_type": "1",
"input_power": "72",
"output_power": "0",
"set_output_power": "0",
"bt_ble_mac": "0668D49E66AE",
"alias": "SB2",
"wifi_online": true,
"charge": false,
"bws_surplus": "0",
"sw_version": "v1.5.6",
"auto_upgrade": true,
"wifi_name": "wifi-network-3",
"wifi_signal": "98",
"power_cutoff": 10,
"solar_info": {
"solar_brand": "ANKER",
"solar_model": "A5143",
"solar_sn": "OTGYG8DGM1D3",
"solar_model_name": "MI80 Microinverter(BLE)"
},
"schedule": {
"ranges": [
{
"id": 0,
"start_time": "00:00",
"end_time": "07:30",
"turn_on": true,
"appliance_loads": [
{
"id": 0,
"name": "Benutzerdefiniert",
"power": 150,
"number": 1
}
],
"charge_priority": 80
},
{
"id": 0,
"start_time": "07:30",
"end_time": "09:30",
"turn_on": true,
"appliance_loads": [
{
"id": 0,
"name": "Benutzerdefiniert",
"power": 150,
"number": 1
}
],
"charge_priority": 80
},
{
"id": 0,
"start_time": "09:30",
"end_time": "17:30",
"turn_on": false,
"appliance_loads": [
{
"id": 0,
"name": "Benutzerdefiniert",
"power": 150,
"number": 1
}
],
"charge_priority": 100
},
{
"id": 0,
"start_time": "17:30",
"end_time": "24:00",
"turn_on": false,
"appliance_loads": [
{
"id": 0,
"name": "Benutzerdefiniert",
"power": 150,
"number": 1
}
],
"charge_priority": 80
}
],
"min_load": 100,
"max_load": 800,
"step": 0,
"is_charge_priority": 1,
"default_charge_priority": 80,
"is_zero_output_tips": 0
}
},
"WO42TA2RIXLX2WLZ": {
"device_sn": "Y0VUVD54J4GI7PRS",
"type": "solarbank",
"site_id": "7fe6ade4-f3eb-ba1f-d82f-1f3a7e4fee8a",
"is_admin": true,
"device_pn": "A17C0",
"name": "Solarbank E1600",
"battery_soc": "52",
"charging_power": "0",
"power_unit": "W",
"charging_status": "3",
"charging_status_desc": "bypass",
"status": "1",
"status_desc": "on",
"wireless_type": "1",
"input_power": "72",
"output_power": "0",
"set_output_power": "0",
"bt_ble_mac": "AC2D06D70E6B",
"alias": "SB1",
"wifi_online": true,
"charge": false,
"bws_surplus": "0",
"sw_version": "v1.5.6",
"auto_upgrade": true,
"wifi_name": "wifi-network-3",
"wifi_signal": "98",
"power_cutoff": 10,
"solar_info": {
"solar_brand": "ANKER",
"solar_model": "A5143",
"solar_sn": "OTGYG8DGM1D3",
"solar_model_name": "MI80 Microinverter(BLE)"
},
"schedule": {
"ranges": [
{
"id": 0,
"start_time": "00:00",
"end_time": "07:30",
"turn_on": true,
"appliance_loads": [
{
"id": 0,
"name": "Benutzerdefiniert",
"power": 150,
"number": 1
}
],
"charge_priority": 80
},
{
"id": 0,
"start_time": "07:30",
"end_time": "09:30",
"turn_on": true,
"appliance_loads": [
{
"id": 0,
"name": "Benutzerdefiniert",
"power": 150,
"number": 1
}
],
"charge_priority": 80
},
{
"id": 0,
"start_time": "09:30",
"end_time": "17:30",
"turn_on": false,
"appliance_loads": [
{
"id": 0,
"name": "Benutzerdefiniert",
"power": 150,
"number": 1
}
],
"charge_priority": 100
},
{
"id": 0,
"start_time": "17:30",
"end_time": "24:00",
"turn_on": false,
"appliance_loads": [
{
"id": 0,
"name": "Benutzerdefiniert",
"power": 150,
"number": 1
}
],
"charge_priority": 80
}
],
"min_load": 100,
"max_load": 800,
"step": 0,
"is_charge_priority": 1,
"default_charge_priority": 80,
"is_zero_output_tips": 0
}
},
"PK2UE3X006JF": {
"device_sn": "OTGYG8DGM1D3",
"type": "inverter",
"site_id": "7fe6ade4-f3eb-ba1f-d82f-1f3a7e4fee8a",
"is_admin": true,
"name": "MI80 Microinverter(BLE)",
"generate_power": "0.00",
"power_unit": "W",
"status": "1",
"status_desc": "on",
"wireless_type": "2",
"device_pn": "A5143",
"bt_ble_mac": "9EBD418DD71B",
"alias": "MI80 Microinverter(BLE)",
"wifi_online": false,
"wifi_name": "wifi-network-3",
"charge": false,
"bws_surplus": "0",
"sw_version": "v0.0.1",
"wifi_signal": "94"
}
}

View File

@ -0,0 +1,116 @@
{
"beddfef9-acaa-89de-f6c9-31fc9a499c65": {
"site_info": {
"site_id": "7fe6ade4-f3eb-ba1f-d82f-1f3a7e4fee8a",
"site_name": "AnkerPrime",
"site_img": "",
"device_type_list": [
3,
1
],
"ms_type": 1,
"power_site_type": 2,
"is_allow_delete": true
},
"site_admin": true,
"home_info": {
"home_name": "Home",
"home_img": "",
"charging_power": "0.00",
"power_unit": "W"
},
"solar_list": [
{
"device_sn": "OTGYG8DGM1D3",
"device_name": "MI80 Microinverter(BLE)",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/0f8e0ca7-dda9-4e70-940d-fe08e1fc89ea/picl_A5143_normal.png",
"bind_site_status": "",
"generate_power": "0.00",
"power_unit": "W",
"status": "1",
"wireless_type": "2",
"device_pn": "A5143",
"main_version": ""
}
],
"pps_info": {
"pps_list": [],
"total_charging_power": "0.00",
"power_unit": "W",
"total_battery_power": "0.00",
"updated_time": "",
"pps_status": 0
},
"statistics": [
{
"type": "1",
"total": "14.41",
"unit": "kwh"
},
{
"type": "2",
"total": "14.36",
"unit": "kg"
},
{
"type": "3",
"total": "4.61",
"unit": "\u20ac"
}
],
"topology_type": "1",
"solarbank_info": {
"solarbank_list": [
{
"device_pn": "A17C0",
"device_sn": "RBJX4XL3BQ8PWS1X",
"device_name": "SB2",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "46",
"bind_site_status": "",
"charging_power": "0",
"power_unit": "W",
"charging_status": "3",
"status": "1",
"wireless_type": "1",
"main_version": "",
"photovoltaic_power": "72",
"output_power": "0",
"create_time": 1707039514,
"set_load_power": "0"
},
{
"device_pn": "A17C0",
"device_sn": "Y0VUVD54J4GI7PRS",
"device_name": "SB1",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "52",
"bind_site_status": "",
"charging_power": "0",
"power_unit": "W",
"charging_status": "3",
"status": "1",
"wireless_type": "1",
"main_version": "",
"photovoltaic_power": "72",
"output_power": "0",
"create_time": 1707130510,
"set_load_power": "0"
}
],
"total_charging_power": "144",
"power_unit": "W",
"charging_status": "0",
"total_battery_power": "0.49",
"updated_time": "2024-02-22 13:17:30",
"total_photovoltaic_power": "144",
"total_output_power": "0.00",
"display_set_power": true
},
"retain_load": "0W",
"updated_time": "01-01-0001 00:00:00",
"power_site_type": 2,
"site_id": "7fe6ade4-f3eb-ba1f-d82f-1f3a7e4fee8a",
"powerpanel_list": []
}
}

View File

@ -0,0 +1,24 @@
{
"code": 0,
"msg": "success!",
"data": {
"main_switch": true,
"device_list": [
{
"device_sn": "WO42TA2RIXLX2WLZ",
"device_name": "Solarbank E1600",
"auto_upgrade": true,
"alias_name": "SB1",
"icon": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png"
},
{
"device_sn": "6TXY2KVEWX2UB78L",
"device_name": "Solarbank E1600",
"auto_upgrade": true,
"alias_name": "SB2",
"icon": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png"
}
]
},
"trace_id": "0bd61d8eae05f2bdc7f6bda5ee615d2c"
}

View File

@ -0,0 +1,71 @@
{
"code": 0,
"msg": "success!",
"data": {
"data": [
{
"device_sn": "PK2UE3X006JF",
"product_code": "A5143",
"bt_ble_id": "140FBCB617F0",
"bt_ble_mac": "140FBCB617F0",
"device_name": "MI80 Microinverter(BLE)",
"alias_name": "MI80 Microinverter(BLE)",
"img_url": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/0f8e0ca7-dda9-4e70-940d-fe08e1fc89ea/picl_A5143_normal.png",
"link_time": 1707581381737,
"wifi_online": false,
"wifi_name": "wifi-network-1",
"relate_type": [
"ble"
],
"charge": false,
"bws_surplus": 0,
"device_sw_version": "v0.0.1",
"has_manual": false,
"hes_data": null
},
{
"device_sn": "WO42TA2RIXLX2WLZ",
"product_code": "A17C0",
"bt_ble_id": "DDCEDE2CA2D880D6B3E9CF5E01BEBAC0",
"bt_ble_mac": "4BDB6A35CFFD",
"device_name": "Solarbank E1600",
"alias_name": "SB1",
"img_url": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"link_time": 1707039543652,
"wifi_online": true,
"wifi_name": "",
"relate_type": [
"ble",
"wifi"
],
"charge": false,
"bws_surplus": 0,
"device_sw_version": "v1.5.6",
"has_manual": false,
"hes_data": null
},
{
"device_sn": "6TXY2KVEWX2UB78L",
"product_code": "A17C0",
"bt_ble_id": "728D453D7CA8D5D9AFEF1D89BBAE7FED",
"bt_ble_mac": "EE3BFBD6DB9B",
"device_name": "Solarbank E1600",
"alias_name": "SB2",
"img_url": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"link_time": 1707039423762,
"wifi_online": true,
"wifi_name": "",
"relate_type": [
"ble",
"wifi"
],
"charge": false,
"bws_surplus": 0,
"device_sw_version": "v1.5.6",
"has_manual": false,
"hes_data": null
}
]
},
"trace_id": "4cd860c899ec772afefdefd1e042daf9"
}

View File

@ -0,0 +1,9 @@
{
"code": 0,
"msg": "success!",
"data": {
"device_list": null,
"guide_txt": ""
},
"trace_id": "29b2ae3cb302fb3a30bfa52f0d8f1bcd"
}

View File

@ -0,0 +1,19 @@
{
"code": 0,
"msg": "success!",
"data": {
"ota_complete_status": 2,
"process_skip_type": 2,
"solar_info": {
"solar_sn": "PK2UE3X006JF",
"solar_brand": "ANKER",
"solar_model": "A5143",
"brand_id": "3a9930f5-74ef-4e41-a797-04e6b33d3f0f",
"model_img": "https://public-aiot-ore-qa.s3.us-west-2.amazonaws.com/anker-power/public/product/2023/09/18/iot-admin/77Y3rnoAVmzTQrSr/picl_A17C0FW_guide_SN_A5143.png",
"version": "Anker EZ1 1.0.0_b",
"ota_status": 3,
"solar_model_name": "MI80 Microinverter(BLE)"
}
},
"trace_id": "6e54269c6b7c6cbf2ec7b80bc83eedd5"
}

View File

@ -0,0 +1,19 @@
{
"code": 0,
"msg": "success!",
"data": {
"ota_complete_status": 2,
"process_skip_type": 2,
"solar_info": {
"solar_sn": "PK2UE3X006JF",
"solar_brand": "ANKER",
"solar_model": "A5143",
"brand_id": "3a9930f5-74ef-4e41-a797-04e6b33d3f0f",
"model_img": "https://public-aiot-ore-qa.s3.us-west-2.amazonaws.com/anker-power/public/product/2023/09/18/iot-admin/77Y3rnoAVmzTQrSr/picl_A17C0FW_guide_SN_A5143.png",
"version": "Anker EZ1 1.0.0_b",
"ota_status": 3,
"solar_model_name": "MI80 Microinverter(BLE)"
}
},
"trace_id": "e09abf5e2f1bd1001f9b978ae6bccba8"
}

View File

@ -0,0 +1,8 @@
{
"code": 0,
"msg": "success!",
"data": {
"data": []
},
"trace_id": "2bf9a0fe16ccb4a9f5ee495d3db2e0ae"
}

View File

@ -0,0 +1,8 @@
{
"code": 0,
"msg": "success!",
"data": {
"data": []
},
"trace_id": "b0eaff6d759bbfd56dd2f2421b6a9e13"
}

View File

@ -0,0 +1,8 @@
{
"code": 0,
"msg": "success!",
"data": {
"data": []
},
"trace_id": "aeb578aaee66bb30a20b1a6ab104cdfc"
}

View File

@ -0,0 +1,12 @@
{
"code": 0,
"msg": "success!",
"data": {
"site_id": "beddfef9-acaa-89de-f6c9-31fc9a499c65",
"home_load_data": "{\"ranges\":[{\"id\":0,\"start_time\":\"00:00\",\"end_time\":\"07:30\",\"turn_on\":true,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":150,\"number\":1}],\"charge_priority\":80},{\"id\":0,\"start_time\":\"07:30\",\"end_time\":\"09:30\",\"turn_on\":true,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":150,\"number\":1}],\"charge_priority\":80},{\"id\":0,\"start_time\":\"09:30\",\"end_time\":\"17:30\",\"turn_on\":false,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":150,\"number\":1}],\"charge_priority\":100},{\"id\":0,\"start_time\":\"17:30\",\"end_time\":\"24:00\",\"turn_on\":false,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":150,\"number\":1}],\"charge_priority\":80}],\"min_load\":100,\"max_load\":800,\"step\":0,\"is_charge_priority\":1,\"default_charge_priority\":80,\"is_zero_output_tips\":0}",
"current_home_load": "0W",
"parallel_home_load": "0W",
"parallel_display": true
},
"trace_id": "6c51fc6b854d0c6a9fcebbc147bbb7dc"
}

View File

@ -0,0 +1,12 @@
{
"code": 0,
"msg": "success!",
"data": {
"site_id": "beddfef9-acaa-89de-f6c9-31fc9a499c65",
"home_load_data": "{\"ranges\":[{\"id\":0,\"start_time\":\"00:00\",\"end_time\":\"07:30\",\"turn_on\":true,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":150,\"number\":1}],\"charge_priority\":80},{\"id\":0,\"start_time\":\"07:30\",\"end_time\":\"09:30\",\"turn_on\":true,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":150,\"number\":1}],\"charge_priority\":80},{\"id\":0,\"start_time\":\"09:30\",\"end_time\":\"17:30\",\"turn_on\":false,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":150,\"number\":1}],\"charge_priority\":100},{\"id\":0,\"start_time\":\"17:30\",\"end_time\":\"24:00\",\"turn_on\":false,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":150,\"number\":1}],\"charge_priority\":80}],\"min_load\":100,\"max_load\":800,\"step\":0,\"is_charge_priority\":1,\"default_charge_priority\":80,\"is_zero_output_tips\":0}",
"current_home_load": "0W",
"parallel_home_load": "0W",
"parallel_display": true
},
"trace_id": "8d53eee0f4829267f0adcb7e097508cc"
}

View File

@ -0,0 +1,12 @@
{
"code": 0,
"msg": "success!",
"data": {
"site_id": "beddfef9-acaa-89de-f6c9-31fc9a499c65",
"home_load_data": "{\"ranges\":[{\"id\":0,\"start_time\":\"00:00\",\"end_time\":\"07:30\",\"turn_on\":true,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":150,\"number\":1}],\"charge_priority\":80},{\"id\":0,\"start_time\":\"07:30\",\"end_time\":\"09:30\",\"turn_on\":true,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":150,\"number\":1}],\"charge_priority\":80},{\"id\":0,\"start_time\":\"09:30\",\"end_time\":\"17:30\",\"turn_on\":false,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":150,\"number\":1}],\"charge_priority\":100},{\"id\":0,\"start_time\":\"17:30\",\"end_time\":\"24:00\",\"turn_on\":false,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":150,\"number\":1}],\"charge_priority\":80}],\"min_load\":100,\"max_load\":800,\"step\":0,\"is_charge_priority\":1,\"default_charge_priority\":80,\"is_zero_output_tips\":0}",
"current_home_load": "0W",
"parallel_home_load": "0W",
"parallel_display": true
},
"trace_id": "47cf7a4eaec4abfbf12ffebf1d2dbbeb"
}

View File

@ -0,0 +1,8 @@
{
"code": 0,
"msg": "success!",
"data": {
"param_data": "{\"ranges\":[{\"id\":0,\"start_time\":\"00:00\",\"end_time\":\"07:30\",\"turn_on\":true,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":150,\"number\":1}],\"charge_priority\":80},{\"id\":0,\"start_time\":\"07:30\",\"end_time\":\"09:30\",\"turn_on\":true,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":150,\"number\":1}],\"charge_priority\":80},{\"id\":0,\"start_time\":\"09:30\",\"end_time\":\"17:30\",\"turn_on\":false,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":150,\"number\":1}],\"charge_priority\":100},{\"id\":0,\"start_time\":\"17:30\",\"end_time\":\"24:00\",\"turn_on\":false,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":150,\"number\":1}],\"charge_priority\":80}],\"min_load\":100,\"max_load\":800,\"step\":0,\"is_charge_priority\":1,\"default_charge_priority\":80,\"is_zero_output_tips\":0}"
},
"trace_id": "40a3cdc83c5e79ebb2eb5d91be3dade2"
}

View File

@ -0,0 +1,75 @@
{
"code": 0,
"msg": "success!",
"data": {
"site_list": [
{
"site_id": "beddfef9-acaa-89de-f6c9-31fc9a499c65",
"site_name": "AnkerPrime",
"site_img": "",
"device_type_list": [
3,
1
],
"ms_type": 0,
"power_site_type": 0,
"is_allow_delete": false
}
],
"solar_list": [
{
"device_sn": "PK2UE3X006JF",
"device_name": "MI80 Microinverter(BLE)",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/0f8e0ca7-dda9-4e70-940d-fe08e1fc89ea/picl_A5143_normal.png",
"bind_site_status": "1",
"generate_power": "",
"power_unit": "",
"status": "",
"wireless_type": "",
"device_pn": "",
"main_version": ""
}
],
"pps_list": [],
"solarbank_list": [
{
"device_pn": "",
"device_sn": "6TXY2KVEWX2UB78L",
"device_name": "SB2",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "46",
"bind_site_status": "1",
"charging_power": "",
"power_unit": "",
"charging_status": "",
"status": "",
"wireless_type": "",
"main_version": "",
"photovoltaic_power": "",
"output_power": "",
"create_time": 0,
"set_load_power": ""
},
{
"device_pn": "",
"device_sn": "WO42TA2RIXLX2WLZ",
"device_name": "SB1",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "52",
"bind_site_status": "1",
"charging_power": "",
"power_unit": "",
"charging_status": "",
"status": "",
"wireless_type": "",
"main_version": "",
"photovoltaic_power": "",
"output_power": "",
"create_time": 0,
"set_load_power": ""
}
],
"powerpanel_list": []
},
"trace_id": "24f42c6fbdabc4baaecefe560cf6ef77"
}

View File

@ -0,0 +1,23 @@
{
"code": 0,
"msg": "success!",
"data": {
"power_cutoff_data": [
{
"id": 1,
"is_selected": 1,
"output_cutoff_data": 10,
"lowpower_input_data": 5,
"input_cutoff_data": 10
},
{
"id": 2,
"is_selected": 0,
"output_cutoff_data": 5,
"lowpower_input_data": 4,
"input_cutoff_data": 5
}
]
},
"trace_id": "dd8ffe41b2e1ce4b50ed82be55c2efc7"
}

View File

@ -0,0 +1,23 @@
{
"code": 0,
"msg": "success!",
"data": {
"power_cutoff_data": [
{
"id": 1,
"is_selected": 1,
"output_cutoff_data": 10,
"lowpower_input_data": 5,
"input_cutoff_data": 10
},
{
"id": 2,
"is_selected": 0,
"output_cutoff_data": 5,
"lowpower_input_data": 4,
"input_cutoff_data": 5
}
]
},
"trace_id": "e3db7c9ca2468be386c9e7b0a9dbaefb"
}

View File

@ -0,0 +1,23 @@
{
"code": 0,
"msg": "success!",
"data": {
"power_cutoff_data": [
{
"id": 1,
"is_selected": 1,
"output_cutoff_data": 10,
"lowpower_input_data": 5,
"input_cutoff_data": 10
},
{
"id": 2,
"is_selected": 0,
"output_cutoff_data": 5,
"lowpower_input_data": 4,
"input_cutoff_data": 5
}
]
},
"trace_id": "97ea2f4895eea97bd61abe8b4ca53dde"
}

View File

@ -0,0 +1,11 @@
{
"code": 0,
"msg": "success!",
"data": {
"site_id": "beddfef9-acaa-89de-f6c9-31fc9a499c65",
"price": 0.32,
"site_co2": 0,
"site_price_unit": "\u20ac"
},
"trace_id": "831bbfcbefdb411bece398bdaa4ebdae"
}

View File

@ -0,0 +1,106 @@
{
"code": 0,
"msg": "success!",
"data": {
"home_info": {
"home_name": "Home",
"home_img": "",
"charging_power": "0.00",
"power_unit": "W"
},
"solar_list": [
{
"device_sn": "PK2UE3X006JF",
"device_name": "MI80 Microinverter(BLE)",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/0f8e0ca7-dda9-4e70-940d-fe08e1fc89ea/picl_A5143_normal.png",
"bind_site_status": "",
"generate_power": "0.00",
"power_unit": "W",
"status": "1",
"wireless_type": "2",
"device_pn": "A5143",
"main_version": ""
}
],
"pps_info": {
"pps_list": [],
"total_charging_power": "0.00",
"power_unit": "W",
"total_battery_power": "0.00",
"updated_time": "",
"pps_status": 0
},
"statistics": [
{
"type": "1",
"total": "14.41",
"unit": "kwh"
},
{
"type": "2",
"total": "14.36",
"unit": "kg"
},
{
"type": "3",
"total": "4.61",
"unit": "\u20ac"
}
],
"topology_type": "1",
"solarbank_info": {
"solarbank_list": [
{
"device_pn": "A17C0",
"device_sn": "6TXY2KVEWX2UB78L",
"device_name": "SB2",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "46",
"bind_site_status": "",
"charging_power": "0",
"power_unit": "W",
"charging_status": "3",
"status": "1",
"wireless_type": "1",
"main_version": "",
"photovoltaic_power": "72",
"output_power": "0",
"create_time": 1707039514,
"set_load_power": "0"
},
{
"device_pn": "A17C0",
"device_sn": "WO42TA2RIXLX2WLZ",
"device_name": "SB1",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "52",
"bind_site_status": "",
"charging_power": "0",
"power_unit": "W",
"charging_status": "3",
"status": "1",
"wireless_type": "1",
"main_version": "",
"photovoltaic_power": "72",
"output_power": "0",
"create_time": 1707130510,
"set_load_power": "0"
}
],
"total_charging_power": "144",
"power_unit": "W",
"charging_status": "0",
"total_battery_power": "0.49",
"updated_time": "2024-02-22 13:17:30",
"total_photovoltaic_power": "144",
"total_output_power": "0.00",
"display_set_power": true
},
"retain_load": "0W",
"updated_time": "01-01-0001 00:00:00",
"power_site_type": 2,
"site_id": "beddfef9-acaa-89de-f6c9-31fc9a499c65",
"powerpanel_list": []
},
"trace_id": "ffae31c7dbcfa27ecaaecf30a6badb92"
}

View File

@ -0,0 +1,4 @@
SETUP:
Anker MI 80 Inverter
2x solarbank e1600
1 System in Anker App

View File

@ -0,0 +1,70 @@
{
"code": 0,
"msg": "success!",
"data": {
"site_info": {
"site_id": "beddfef9-acaa-89de-f6c9-31fc9a499c65",
"site_name": "AnkerPrime",
"site_img": "",
"device_type_list": null,
"ms_type": 0,
"power_site_type": 0,
"is_allow_delete": false
},
"solar_list": [
{
"device_sn": "PK2UE3X006JF",
"device_name": "MI80 Microinverter(BLE)",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/0f8e0ca7-dda9-4e70-940d-fe08e1fc89ea/picl_A5143_normal.png",
"bind_site_status": "",
"generate_power": "",
"power_unit": "",
"status": "",
"wireless_type": "",
"device_pn": "",
"main_version": ""
}
],
"pps_list": [],
"solarbank_list": [
{
"device_pn": "A17C0",
"device_sn": "6TXY2KVEWX2UB78L",
"device_name": "SB2",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "",
"bind_site_status": "",
"charging_power": "",
"power_unit": "",
"charging_status": "",
"status": "",
"wireless_type": "",
"main_version": "",
"photovoltaic_power": "",
"output_power": "",
"create_time": 0,
"set_load_power": ""
},
{
"device_pn": "A17C0",
"device_sn": "WO42TA2RIXLX2WLZ",
"device_name": "SB1",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "",
"bind_site_status": "",
"charging_power": "",
"power_unit": "",
"charging_status": "",
"status": "",
"wireless_type": "",
"main_version": "",
"photovoltaic_power": "",
"output_power": "",
"create_time": 0,
"set_load_power": ""
}
],
"powerpanel_list": []
},
"trace_id": "bc44b7bcdfadcbec2fbe2b04ff8deb6d"
}

View File

@ -0,0 +1,21 @@
{
"code": 0,
"msg": "success!",
"data": {
"site_list": [
{
"site_id": "beddfef9-acaa-89de-f6c9-31fc9a499c65",
"site_name": "AnkerPrime",
"site_img": "",
"device_type_list": [
3,
1
],
"ms_type": 1,
"power_site_type": 2,
"is_allow_delete": true
}
]
},
"trace_id": "68740a3b7bf3df0fc3d2fa6b5fe2ae8b"
}

View File

@ -0,0 +1,12 @@
{
"code": 0,
"msg": "success!",
"data": {
"brand_id": "3a9930f5-74ef-4e41-a797-04e6b33d3f0f",
"solar_brand": "ANKER",
"solar_model": "A5143",
"solar_sn": "PK2UE3X006JF",
"solar_model_name": "MI80 Microinverter(BLE)"
},
"trace_id": "dadff22c3df0c07ee33cbecf5ef6f42b"
}

View File

@ -0,0 +1,12 @@
{
"code": 0,
"msg": "success!",
"data": {
"brand_id": "3a9930f5-74ef-4e41-a797-04e6b33d3f0f",
"solar_brand": "ANKER",
"solar_model": "A5143",
"solar_sn": "PK2UE3X006JF",
"solar_model_name": "MI80 Microinverter(BLE)"
},
"trace_id": "f77669a3caf42517c1e202f0adf6491d"
}

View File

@ -0,0 +1,60 @@
{
"code": 0,
"msg": "success!",
"data": {
"solar_list": [
{
"device_sn": "PK2UE3X006JF",
"device_name": "MI80 Microinverter(BLE)",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/0f8e0ca7-dda9-4e70-940d-fe08e1fc89ea/picl_A5143_normal.png",
"bind_site_status": "1",
"generate_power": "",
"power_unit": "",
"status": "0",
"wireless_type": "2",
"device_pn": "A5143",
"main_version": ""
}
],
"pps_list": [],
"solarbank_list": [
{
"device_pn": "A17C0",
"device_sn": "WO42TA2RIXLX2WLZ",
"device_name": "SB1",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "",
"bind_site_status": "1",
"charging_power": "",
"power_unit": "",
"charging_status": "",
"status": "1",
"wireless_type": "1",
"main_version": "",
"photovoltaic_power": "",
"output_power": "",
"create_time": 0,
"set_load_power": ""
},
{
"device_pn": "A17C0",
"device_sn": "6TXY2KVEWX2UB78L",
"device_name": "SB2",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "",
"bind_site_status": "1",
"charging_power": "",
"power_unit": "",
"charging_status": "",
"status": "1",
"wireless_type": "1",
"main_version": "",
"photovoltaic_power": "",
"output_power": "",
"create_time": 0,
"set_load_power": ""
}
]
},
"trace_id": "ec59d13ed6356dfca2c0d03cbaad9a6f"
}

View File

@ -0,0 +1,17 @@
{
"code": 0,
"msg": "success!",
"data": {
"wifi_info_list": [
{
"wifi_name": "wifi-network-1",
"wifi_signal": "98"
},
{
"wifi_name": "wifi-network-1",
"wifi_signal": "94"
}
]
},
"trace_id": "5df3a423dae8ba2abcc75f4abea92d65"
}

View File

@ -0,0 +1,92 @@
{
"SE0QPSV3WXDDXN8G": {
"device_sn": "SE0QPSV3WXDDXN8G",
"type": "solarbank",
"site_id": "5c345692-b73f-8ce8-a9fd-b7928c5fa51d",
"is_admin": true,
"device_pn": "A17C0",
"name": "Solarbank E1600",
"battery_soc": "56",
"charging_power": "0",
"power_unit": "W",
"charging_status": "3",
"charging_status_desc": "bypass",
"status": "1",
"status_desc": "on",
"wireless_type": "1",
"input_power": "267",
"output_power": "0",
"set_output_power": "",
"bt_ble_mac": "EA7AAD9B60BD",
"alias": "Solarbank E1600",
"wifi_online": true,
"charge": false,
"bws_surplus": "0",
"sw_version": "v1.5.6",
"auto_upgrade": false,
"wifi_name": "wifi-network-1",
"wifi_signal": "36",
"power_cutoff": 10,
"solar_info": {
"solar_brand": "Deye",
"solar_model": "SUN600G3-EU-230",
"solar_sn": "",
"solar_model_name": "SUN600G3-EU-230"
},
"schedule": {
"ranges": [
{
"id": 0,
"start_time": "00:00",
"end_time": "07:00",
"turn_on": true,
"appliance_loads": [
{
"id": 0,
"name": "Benutzerdefiniert",
"power": 100,
"number": 1
}
],
"charge_priority": 80
},
{
"id": 0,
"start_time": "07:00",
"end_time": "20:00",
"turn_on": false,
"appliance_loads": [
{
"id": 0,
"name": "Benutzerdefiniert",
"power": 150,
"number": 1
}
],
"charge_priority": 80
},
{
"id": 0,
"start_time": "20:00",
"end_time": "24:00",
"turn_on": true,
"appliance_loads": [
{
"id": 0,
"name": "Benutzerdefiniert",
"power": 100,
"number": 1
}
],
"charge_priority": 80
}
],
"min_load": 150,
"max_load": 800,
"step": 0,
"is_charge_priority": 0,
"default_charge_priority": 0,
"is_zero_output_tips": 0
}
}
}

View File

@ -0,0 +1,84 @@
{
"5c345692-b73f-8ce8-a9fd-b7928c5fa51d": {
"site_info": {
"site_id": "5c345692-b73f-8ce8-a9fd-b7928c5fa51d",
"site_name": "Anker Solix E1600",
"site_img": "",
"device_type_list": [
3
],
"ms_type": 1,
"power_site_type": 2,
"is_allow_delete": true
},
"site_admin": true,
"home_info": {
"home_name": "Home",
"home_img": "",
"charging_power": "0.00",
"power_unit": "W"
},
"solar_list": [],
"pps_info": {
"pps_list": [],
"total_charging_power": "0.00",
"power_unit": "W",
"total_battery_power": "0.00",
"updated_time": "",
"pps_status": 0
},
"statistics": [
{
"type": "1",
"total": "75.63",
"unit": "kwh"
},
{
"type": "2",
"total": "75.41",
"unit": "kg"
},
{
"type": "3",
"total": "28.74",
"unit": "\u20ac"
}
],
"topology_type": "1",
"solarbank_info": {
"solarbank_list": [
{
"device_pn": "A17C0",
"device_sn": "SE0QPSV3WXDDXN8G",
"device_name": "Solarbank E1600",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "56",
"bind_site_status": "",
"charging_power": "0",
"power_unit": "W",
"charging_status": "3",
"status": "1",
"wireless_type": "1",
"main_version": "",
"photovoltaic_power": "267",
"output_power": "0",
"create_time": 1695394124,
"set_load_power": ""
}
],
"total_charging_power": "267",
"power_unit": "W",
"charging_status": "0",
"total_battery_power": "0.56",
"updated_time": "2024-02-22 14:42:12",
"total_photovoltaic_power": "267",
"total_output_power": "0.00",
"display_set_power": false
},
"retain_load": "0W",
"updated_time": "01-01-0001 00:00:00",
"power_site_type": 2,
"site_id": "5c345692-b73f-8ce8-a9fd-b7928c5fa51d",
"powerpanel_list": []
}
}

View File

@ -0,0 +1,17 @@
{
"code": 0,
"msg": "success!",
"data": {
"main_switch": false,
"device_list": [
{
"device_sn": "SE0QPSV3WXDDXN8G",
"device_name": "Solarbank E1600",
"auto_upgrade": false,
"alias_name": "Solarbank E1600",
"icon": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png"
}
]
},
"trace_id": "50f4906ee2dedf2d982ec68fbde09173"
}

View File

@ -0,0 +1,30 @@
{
"code": 0,
"msg": "success!",
"data": {
"data": [
{
"device_sn": "SE0QPSV3WXDDXN8G",
"product_code": "A17C0",
"bt_ble_id": "EA:7A:AD:9B:60:BD",
"bt_ble_mac": "EA7AAD9B60BD",
"device_name": "Solarbank E1600",
"alias_name": "Solarbank E1600",
"img_url": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"link_time": 1695394038705,
"wifi_online": true,
"wifi_name": "",
"relate_type": [
"ble",
"wifi"
],
"charge": false,
"bws_surplus": 0,
"device_sw_version": "v1.5.6",
"has_manual": false,
"hes_data": null
}
]
},
"trace_id": "a1a461ed0ea2bb9ec79ecab2347e97f9"
}

View File

@ -0,0 +1,9 @@
{
"code": 0,
"msg": "success!",
"data": {
"device_list": null,
"guide_txt": ""
},
"trace_id": "e28b26fe8dccc7f40bdfbc79148eddcd"
}

View File

@ -0,0 +1,19 @@
{
"code": 0,
"msg": "success!",
"data": {
"ota_complete_status": 2,
"process_skip_type": 1,
"solar_info": {
"solar_sn": "",
"solar_brand": "Deye",
"solar_model": "SUN600G3-EU-230",
"brand_id": "227fb692-1e9e-439f-aadb-40c9144f6996",
"model_img": "",
"version": "",
"ota_status": 1,
"solar_model_name": "SUN600G3-EU-230"
}
},
"trace_id": "dccd78ba3fb99c6e2bab49f0510ce87e"
}

View File

@ -0,0 +1,19 @@
{
"code": 0,
"msg": "success!",
"data": {
"data": [
{
"device_sn": "ZDL32D6A3HKXUTN1",
"product_code": "A17Y0",
"device_name": "E1600 0W Output Switch",
"alias_name": "E1600 0W Output Switch",
"img_url": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/2024/01/10/iot-admin/EPBsJ3a5JyMGqA1j/picl_A17Y0_normal.png",
"bt_ble_id": "",
"bt_ble_mac": "FC1CEA253CDB",
"link_time": 1707127936
}
]
},
"trace_id": "055aeafc5fbbfabfedbf2bbcd254ede3"
}

View File

@ -0,0 +1,12 @@
{
"code": 0,
"msg": "success!",
"data": {
"site_id": "5c345692-b73f-8ce8-a9fd-b7928c5fa51d",
"home_load_data": "{\"ranges\":[{\"id\":0,\"start_time\":\"00:00\",\"end_time\":\"07:00\",\"turn_on\":true,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":100,\"number\":1}],\"charge_priority\":80},{\"id\":0,\"start_time\":\"07:00\",\"end_time\":\"20:00\",\"turn_on\":false,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":150,\"number\":1}],\"charge_priority\":80},{\"id\":0,\"start_time\":\"20:00\",\"end_time\":\"24:00\",\"turn_on\":true,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":100,\"number\":1}],\"charge_priority\":80}],\"min_load\":150,\"max_load\":800,\"step\":0,\"is_charge_priority\":0,\"default_charge_priority\":0,\"is_zero_output_tips\":0}",
"current_home_load": "0W",
"parallel_home_load": "",
"parallel_display": false
},
"trace_id": "e2bc02ad278c764fbe1eb1c0b15f06df"
}

View File

@ -0,0 +1,8 @@
{
"code": 0,
"msg": "success!",
"data": {
"param_data": "{\"ranges\":[{\"id\":0,\"start_time\":\"00:00\",\"end_time\":\"07:00\",\"turn_on\":true,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":100,\"number\":1}],\"charge_priority\":80},{\"id\":0,\"start_time\":\"07:00\",\"end_time\":\"20:00\",\"turn_on\":false,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":150,\"number\":1}],\"charge_priority\":80},{\"id\":0,\"start_time\":\"20:00\",\"end_time\":\"24:00\",\"turn_on\":true,\"appliance_loads\":[{\"id\":0,\"name\":\"Benutzerdefiniert\",\"power\":100,\"number\":1}],\"charge_priority\":80}],\"min_load\":150,\"max_load\":800,\"step\":0,\"is_charge_priority\":0,\"default_charge_priority\":0,\"is_zero_output_tips\":0}"
},
"trace_id": "c1de0c0ec83ff687a25f6d8ebcf5efaf"
}

View File

@ -0,0 +1,43 @@
{
"code": 0,
"msg": "success!",
"data": {
"site_list": [
{
"site_id": "5c345692-b73f-8ce8-a9fd-b7928c5fa51d",
"site_name": "Anker Solix E1600",
"site_img": "",
"device_type_list": [
3
],
"ms_type": 0,
"power_site_type": 0,
"is_allow_delete": false
}
],
"solar_list": [],
"pps_list": [],
"solarbank_list": [
{
"device_pn": "",
"device_sn": "SE0QPSV3WXDDXN8G",
"device_name": "Solarbank E1600",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "56",
"bind_site_status": "1",
"charging_power": "",
"power_unit": "",
"charging_status": "",
"status": "",
"wireless_type": "",
"main_version": "",
"photovoltaic_power": "",
"output_power": "",
"create_time": 0,
"set_load_power": ""
}
],
"powerpanel_list": []
},
"trace_id": "7cbb4ed8eded8785f5dc5066ab28fe00"
}

View File

@ -0,0 +1,23 @@
{
"code": 0,
"msg": "success!",
"data": {
"power_cutoff_data": [
{
"id": 1,
"is_selected": 1,
"output_cutoff_data": 10,
"lowpower_input_data": 5,
"input_cutoff_data": 10
},
{
"id": 2,
"is_selected": 0,
"output_cutoff_data": 5,
"lowpower_input_data": 4,
"input_cutoff_data": 5
}
]
},
"trace_id": "809b4800aa50eca5f89dcfede689dea8"
}

View File

@ -0,0 +1,11 @@
{
"code": 0,
"msg": "success!",
"data": {
"site_id": "5c345692-b73f-8ce8-a9fd-b7928c5fa51d",
"price": 0.38,
"site_co2": 0,
"site_price_unit": "\u20ac"
},
"trace_id": "aafbf25dfbccbb7cdd676fba2a623151"
}

View File

@ -0,0 +1,75 @@
{
"code": 0,
"msg": "success!",
"data": {
"home_info": {
"home_name": "Home",
"home_img": "",
"charging_power": "0.00",
"power_unit": "W"
},
"solar_list": [],
"pps_info": {
"pps_list": [],
"total_charging_power": "0.00",
"power_unit": "W",
"total_battery_power": "0.00",
"updated_time": "",
"pps_status": 0
},
"statistics": [
{
"type": "1",
"total": "75.63",
"unit": "kwh"
},
{
"type": "2",
"total": "75.41",
"unit": "kg"
},
{
"type": "3",
"total": "28.74",
"unit": "\u20ac"
}
],
"topology_type": "1",
"solarbank_info": {
"solarbank_list": [
{
"device_pn": "A17C0",
"device_sn": "SE0QPSV3WXDDXN8G",
"device_name": "Solarbank E1600",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "56",
"bind_site_status": "",
"charging_power": "0",
"power_unit": "W",
"charging_status": "3",
"status": "1",
"wireless_type": "1",
"main_version": "",
"photovoltaic_power": "267",
"output_power": "0",
"create_time": 1695394124,
"set_load_power": ""
}
],
"total_charging_power": "267",
"power_unit": "W",
"charging_status": "0",
"total_battery_power": "0.56",
"updated_time": "2024-02-22 14:42:12",
"total_photovoltaic_power": "267",
"total_output_power": "0.00",
"display_set_power": false
},
"retain_load": "0W",
"updated_time": "01-01-0001 00:00:00",
"power_site_type": 2,
"site_id": "5c345692-b73f-8ce8-a9fd-b7928c5fa51d",
"powerpanel_list": []
},
"trace_id": "6ebdaaae952e62bba128dfffb4f2c86d"
}

View File

@ -0,0 +1,4 @@
SETUP:
1x solarbank e1600
1 x 0W Switch
1 System in Anker App

View File

@ -0,0 +1,39 @@
{
"code": 0,
"msg": "success!",
"data": {
"site_info": {
"site_id": "5c345692-b73f-8ce8-a9fd-b7928c5fa51d",
"site_name": "Anker Solix E1600",
"site_img": "",
"device_type_list": null,
"ms_type": 0,
"power_site_type": 0,
"is_allow_delete": false
},
"solar_list": [],
"pps_list": [],
"solarbank_list": [
{
"device_pn": "A17C0",
"device_sn": "SE0QPSV3WXDDXN8G",
"device_name": "Solarbank E1600",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "",
"bind_site_status": "",
"charging_power": "",
"power_unit": "",
"charging_status": "",
"status": "",
"wireless_type": "",
"main_version": "",
"photovoltaic_power": "",
"output_power": "",
"create_time": 0,
"set_load_power": ""
}
],
"powerpanel_list": []
},
"trace_id": "f70bffa4fbd02ca1f9e13c88b5f1af90"
}

View File

@ -0,0 +1,20 @@
{
"code": 0,
"msg": "success!",
"data": {
"site_list": [
{
"site_id": "5c345692-b73f-8ce8-a9fd-b7928c5fa51d",
"site_name": "Anker Solix E1600",
"site_img": "",
"device_type_list": [
3
],
"ms_type": 1,
"power_site_type": 2,
"is_allow_delete": true
}
]
},
"trace_id": "10cdf7797cbb2e7c17b3bdd5306dfb2f"
}

View File

@ -0,0 +1,12 @@
{
"code": 0,
"msg": "success!",
"data": {
"brand_id": "227fb692-1e9e-439f-aadb-40c9144f6996",
"solar_brand": "Deye",
"solar_model": "SUN600G3-EU-230",
"solar_sn": "",
"solar_model_name": "SUN600G3-EU-230"
},
"trace_id": "e8c19e9df57ed9b2c95de3d38acd9bc0"
}

View File

@ -0,0 +1,29 @@
{
"code": 0,
"msg": "success!",
"data": {
"solar_list": [],
"pps_list": [],
"solarbank_list": [
{
"device_pn": "A17C0",
"device_sn": "SE0QPSV3WXDDXN8G",
"device_name": "Solarbank E1600",
"device_img": "https://public-aiot-fra-prod.s3.dualstack.eu-central-1.amazonaws.com/anker-power/public/product/anker-power/e9478c2d-e665-4d84-95d7-dd4844f82055/20230719-144818.png",
"battery_power": "",
"bind_site_status": "1",
"charging_power": "",
"power_unit": "",
"charging_status": "",
"status": "1",
"wireless_type": "1",
"main_version": "",
"photovoltaic_power": "",
"output_power": "",
"create_time": 0,
"set_load_power": ""
}
]
},
"trace_id": "f22ddac5d4803fb09939e1f7be2dd6bb"
}

View File

@ -0,0 +1,13 @@
{
"code": 0,
"msg": "success!",
"data": {
"wifi_info_list": [
{
"wifi_name": "wifi-network-1",
"wifi_signal": "36"
}
]
},
"trace_id": "f378d2627ad09a3b25c87cbd497cb5e7"
}

View File

@ -1,6 +1,6 @@
[project]
name = "Anker-Solix-Api"
version = "1.4.0"
version = "1.5.0"
description = "Python library for Anker Solix Power devices (Solarbank, Inverter etc)"
readme = "README.md"
requires-python = ">=3.11"

View File

@ -14,18 +14,17 @@ the Anker App since it will be kicked out on each refresh.
""" # noqa: D205
import asyncio
from datetime import datetime, timedelta
import json
import logging
import os
import sys
import time
from datetime import datetime, timedelta
from aiohttp import ClientSession
from aiohttp.client_exceptions import ClientError
import common
from api import api, errors
import common
_LOGGER: logging.Logger = logging.getLogger(__name__)
_LOGGER.addHandler(logging.StreamHandler(sys.stdout))
@ -59,7 +58,7 @@ async def main() -> ( # noqa: C901 # pylint: disable=too-many-locals,too-many-b
None
):
"""Run Main routine to start Solarbank monitor in a loop."""
global REFRESH # pylint: disable=global-statement
global REFRESH # pylint: disable=global-statement # noqa: PLW0603
CONSOLE.info("Solarbank Monitor:")
# get list of possible example and export folders to test the monitor against
exampleslist = get_subfolders(
@ -186,6 +185,7 @@ async def main() -> ( # noqa: C901 # pylint: disable=too-many-locals,too-many-b
f"{'Solar Power':<{col1}}: {dev.get('input_power',''):>3} {unit:<{col2-4}} Charge Power: {dev.get('charging_power',''):>3} {unit}"
)
preset = dev.get("set_output_power") or "---"
site_preset = dev.get("set_system_output_power") or "---"
CONSOLE.info(
f"{'Output Power':<{col1}}: {dev.get('output_power',''):>3} {unit:<{col2-4}} (Output Preset: {preset:>3} {unit})"
)
@ -197,7 +197,7 @@ async def main() -> ( # noqa: C901 # pylint: disable=too-many-locals,too-many-b
# data = schedules.get(sn,{})
data = dev.get("schedule", {})
CONSOLE.info(
f"{'Schedule':<{col1}}: {now.strftime('%H:%M UTC %z'):<{col2}} (Current Preset: {(data.get('current_home_load','---')).replace('W','')} W)"
f"{'Schedule':<{col1}}: {now.strftime('%H:%M UTC %z'):<{col2}} (Current Preset: {str(site_preset).replace('W','')} W)"
)
CONSOLE.info(
f"{'ID':<{t1}} {'Start':<{t2}} {'End':<{t3}} {'Discharge':<{t4}} {'Output':<{t5}} {'ChargePrio':<{t6}}"