Compare commits

...

10 commits

Author SHA1 Message Date
niltrip
8d22af9344 response after update firmware 5.1.16.11
new parameter
2024-08-29 13:34:22 +02:00
niltrip
386bc3b448 3 new Parameter 2024-08-27 22:25:33 +02:00
niltrip
c571821bfe readme 2024-08-27 22:25:06 +02:00
niltrip
4395fb6f13 documentation
default 10s
2024-08-27 19:13:07 +02:00
niltrip
bdfb6b02ba Change config_flow 2024-08-25 13:50:40 +02:00
niltrip
0275d26daf fix LOGGER 2024-08-25 12:49:55 +02:00
niltrip
0812b9bb4d cosmetic 2024-08-25 12:05:58 +02:00
Juergen Dammers
e6d0c5e5c6
Merge pull request #8 from niltrip/new-Parameter-JD
New parameter jd
2024-08-25 10:45:28 +02:00
niltrip
3d657ce512 feature special icons
disable some debug messages
2024-08-22 23:29:56 +02:00
niltrip
2c2822bcea fix issue url 2024-08-22 23:28:18 +02:00
9 changed files with 618 additions and 46 deletions

View file

@ -34,16 +34,20 @@ Follow the flow.
### Sensors ### Sensors
Sensors are registered to each device as `sensor.{name}_{serial}_{sensor_name}` with an friendly name of `sensor_name`. Additional attributes are presented on each sensor: Sensors are registered to device as `sensor.{device_name}_{sensor_name}` with an friendly name of `sensor_name`. Additional attributes are presented on each sensor:
- Product Description, Destination Name, Source Name: internal names - Product Description, Destination Name, Source Name: internal names
- Internal Unique ID: `{serial}_{sensor_name}` - Internal Unique ID: `{serial}_{sensor_name}` or `{serial}_{report}_{sensor_name}`
- Device Name: as - Device Name: `{serial}`
- Vendor Product Serial: serial number of the PowerOcean inverter - Vendor Product Serial: serial number of the PowerOcean inverter
- Vendor Firmware Version: 5.1.8 - Vendor Firmware Version: 5.1.15
- Vendor Product Build: 13 - Vendor Product Build: 6
![sensor](documentation/sensor.PNG) ![sensor](documentation/sensor.PNG)
##Neuer Sensor (berechnet aus einzelnen Strings)
![sensor](documentation/mpptPv_pwrTotal.PNG)
## Troubleshooting ## Troubleshooting
Please set your logging for the this custom component to debug during initial setup phase. If everything works well, you are safe to remove the debug logging: Please set your logging for the this custom component to debug during initial setup phase. If everything works well, you are safe to remove the debug logging:

View file

@ -142,13 +142,11 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
step_device_options_schema = vol.Schema( step_device_options_schema = vol.Schema(
{ {
vol.Required("custom_device_name", default=default_device_name): str, vol.Required("custom_device_name", default=default_device_name): str,
# vol.Required("polling_time", default=60): vol.All( vol.Required("polling_time", default=10): vol.All(
vol.Required("polling_time", default=5): vol.All( vol.Coerce(int), vol.Clamp(min=5)
vol.Coerce(int), vol.Clamp(min=60)
), ),
vol.Required("group_sensors", default=True): bool, vol.Required("group_sensors", default=True): bool,
#vol.Required("disable_sensors", default=False): bool, vol.Required("disable_sensors", default=False): bool,
vol.Required("disable_sensors", default=True): bool,
} }
) )

View file

@ -3,10 +3,10 @@
import logging import logging
from homeassistant.const import Platform from homeassistant.const import Platform
DOMAIN = "powerocean" # Have requested to add logos via https://github.com/home-assistant/brands/pull/4904 DOMAIN = "powerocean"
NAME = "Ecoflow PowerOcean" NAME = "Ecoflow PowerOcean"
VERSION = "2024.01.01" VERSION = "2024.08.27"
ISSUE_URL = "https://github.com/evercape/powerocean/issues" ISSUE_URL = "https://github.com/niltrip/powerocean/issues"
ISSUE_URL_ERROR_MESSAGE = " Please log any issues here: " + ISSUE_URL ISSUE_URL_ERROR_MESSAGE = " Please log any issues here: " + ISSUE_URL

View file

@ -15,7 +15,7 @@ from .const import _LOGGER, ISSUE_URL_ERROR_MESSAGE
# Better storage of PowerOcean endpoint # Better storage of PowerOcean endpoint
PowerOceanEndPoint = namedtuple( PowerOceanEndPoint = namedtuple(
"PowerOceanEndPoint", "PowerOceanEndPoint",
"internal_unique_id, serial, name, friendly_name, value, unit, description", "internal_unique_id, serial, name, friendly_name, value, unit, description, icon",
) )
@ -43,7 +43,7 @@ class Ecoflow:
"vendor": "Ecoflow", "vendor": "Ecoflow",
"serial": self.sn, "serial": self.sn,
"version": "5.1.15", # TODO: woher bekommt man diese Info? "version": "5.1.15", # TODO: woher bekommt man diese Info?
"build": "13", # TODO: wo finde ich das? "build": "6", # TODO: wo finde ich das?
"name": "PowerOcean", "name": "PowerOcean",
"features": "Photovoltaik", "features": "Photovoltaik",
} }
@ -120,7 +120,6 @@ class Ecoflow:
response = self.get_json_response(request) response = self.get_json_response(request)
_LOGGER.debug(f"{response}") _LOGGER.debug(f"{response}")
_LOGGER.debug(f"{response['data']}")
return self._get_sensors(response) return self._get_sensors(response)
@ -136,7 +135,7 @@ class Ecoflow:
def __get_unit(self, key): def __get_unit(self, key):
"""Function get unit from key Name.""" """Function get unit from key Name."""
if key.endswith(("pwr", "Pwr")): if key.endswith(("pwr", "Pwr", "Power")):
unit = "W" unit = "W"
elif key.endswith(("amp", "Amp")): elif key.endswith(("amp", "Amp")):
unit = "A" unit = "A"
@ -233,6 +232,9 @@ class Ecoflow:
if not isinstance(value, dict): if not isinstance(value, dict):
# default uid, unit and descript # default uid, unit and descript
unique_id = f"{self.sn}_{key}" unique_id = f"{self.sn}_{key}"
special_icon = None
if key == "mpptPwr":
special_icon = "mdi:solar-power"
sensors[unique_id] = PowerOceanEndPoint( sensors[unique_id] = PowerOceanEndPoint(
internal_unique_id=unique_id, internal_unique_id=unique_id,
@ -242,6 +244,7 @@ class Ecoflow:
value=value, value=value,
unit=self.__get_unit(key), unit=self.__get_unit(key),
description=self.__get_description(key), description=self.__get_description(key),
icon=special_icon,
) )
return sensors return sensors
@ -270,6 +273,7 @@ class Ecoflow:
# value=value, # value=value,
# unit=self.__get_unit(key), # unit=self.__get_unit(key),
# description=self.__get_description(key), # description=self.__get_description(key),
# icon=None,
# ) # )
# dict.update(sensors, data) # dict.update(sensors, data)
# #
@ -307,6 +311,7 @@ class Ecoflow:
value=value, value=value,
unit=self.__get_unit(key), unit=self.__get_unit(key),
description=self.__get_description(key), description=self.__get_description(key),
icon=None,
) )
dict.update(sensors, data) dict.update(sensors, data)
@ -340,6 +345,9 @@ class Ecoflow:
# default uid, unit and descript # default uid, unit and descript
unique_id = f"{self.sn}_{report}_{bat}_{key}" unique_id = f"{self.sn}_{report}_{bat}_{key}"
description_tmp = f"{name}" + self.__get_description(key) description_tmp = f"{name}" + self.__get_description(key)
special_icon = None
if key == "bpAmp":
special_icon = "mdi:current-dc"
data[unique_id] = PowerOceanEndPoint( data[unique_id] = PowerOceanEndPoint(
internal_unique_id=unique_id, internal_unique_id=unique_id,
serial=self.sn, serial=self.sn,
@ -348,6 +356,7 @@ class Ecoflow:
value=value, value=value,
unit=self.__get_unit(key), unit=self.__get_unit(key),
description=description_tmp, description=description_tmp,
icon=special_icon,
) )
# compute mean temperature of cells # compute mean temperature of cells
key = "bpTemp" key = "bpTemp"
@ -363,6 +372,7 @@ class Ecoflow:
value=value, value=value,
unit=self.__get_unit(key), unit=self.__get_unit(key),
description=description_tmp, description=description_tmp,
icon=None,
) )
dict.update(sensors, data) dict.update(sensors, data)
@ -376,6 +386,10 @@ class Ecoflow:
sens_select = [ sens_select = [
"bpRemainWatth", "bpRemainWatth",
"emsBpAliveNum", "emsBpAliveNum",
"emsBpPower",
"pcsActPwr",
"pcsMeterPower",
] ]
data = {} data = {}
for key, value in d.items(): for key, value in d.items():
@ -391,6 +405,7 @@ class Ecoflow:
value=value, value=value,
unit=self.__get_unit(key), unit=self.__get_unit(key),
description=description_tmp, description=description_tmp,
icon=None,
) )
# special for phases # special for phases
@ -408,6 +423,7 @@ class Ecoflow:
value=value, value=value,
unit=self.__get_unit(key), unit=self.__get_unit(key),
description=self.__get_description(key), description=self.__get_description(key),
icon=None,
) )
# special for mpptPv # special for mpptPv
@ -419,6 +435,11 @@ class Ecoflow:
for i, mpptpv in enumerate(mpptpvs): for i, mpptpv in enumerate(mpptpvs):
for key, value in d["mpptHeartBeat"][0]["mpptPv"][i].items(): for key, value in d["mpptHeartBeat"][0]["mpptPv"][i].items():
unique_id = f"{self.sn}_{report}_mpptHeartBeat_{mpptpv}_{key}" unique_id = f"{self.sn}_{report}_mpptHeartBeat_{mpptpv}_{key}"
special_icon = None
if key.endswith("amp"):
special_icon = "mdi:current-dc"
if key.endswith("pwr"):
special_icon = "mdi:solar-power"
data[unique_id] = PowerOceanEndPoint( data[unique_id] = PowerOceanEndPoint(
internal_unique_id=unique_id, internal_unique_id=unique_id,
@ -428,6 +449,7 @@ class Ecoflow:
value=value, value=value,
unit=self.__get_unit(key), unit=self.__get_unit(key),
description=self.__get_description(key), description=self.__get_description(key),
icon=special_icon,
) )
# sum power of all strings # sum power of all strings
if key == "pwr": if key == "pwr":
@ -445,6 +467,7 @@ class Ecoflow:
value=mpptPv_sum, value=mpptPv_sum,
unit=self.__get_unit(key), unit=self.__get_unit(key),
description="Solarertrag aller Strings", description="Solarertrag aller Strings",
icon="mdi:solar-power",
) )
dict.update(sensors, data) dict.update(sensors, data)

View file

@ -11,5 +11,5 @@
"homekit": {}, "homekit": {},
"iot_class": "cloud_polling", "iot_class": "cloud_polling",
"requirements": [], "requirements": [],
"version": "2024.01.01" "version": "2024.08.27"
} }

View file

@ -144,11 +144,11 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
# entity is enabled # entity is enabled
if entity and not entity.disabled_by: if entity and not entity.disabled_by:
sensor_data = full_data.get(sensor.unique_id) sensor_data = full_data.get(sensor.unique_id)
_LOGGER.debug(f"{device_id}: Sensor {sensor.name} enabled.") # _LOGGER.debug(f"{device_id}: Sensor {sensor.name} enabled.")
if sensor_data: if sensor_data:
_LOGGER.debug( # _LOGGER.debug(
f"{device_id}: Sensor {sensor.name} has API data to update {sensor_data}" # f"{device_id}: Sensor {sensor.name} has API data to update {sensor_data}"
) # )
# Check if current state value differs from new API value, # Check if current state value differs from new API value,
# or current state has not initialized # or current state has not initialized
@ -156,19 +156,19 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
str(sensor._state).strip() str(sensor._state).strip()
!= str(sensor_data.value).strip() != str(sensor_data.value).strip()
): ):
_LOGGER.debug( # _LOGGER.debug(
f"{device_id}: Sensor {sensor.name} marked for update: current state = " # f"{device_id}: Sensor {sensor.name} marked for update: current state = "
f"{sensor._state} with new value = {sensor_data.value}" # f"{sensor._state} with new value = {sensor_data.value}"
) # )
# Now update the sensor with new values # Now update the sensor with new values
# update_status returns 1 for upated, 0 for skipped or error # update_status returns 1 for upated, 0 for skipped or error
update_status = await sensor.async_update(sensor_data) update_status = await sensor.async_update(sensor_data)
counter_updated = counter_updated + update_status counter_updated = counter_updated + update_status
else: else:
_LOGGER.debug( # _LOGGER.debug(
f"{device_id}: Sensor {sensor.name} skipped update! Current value = " # f"{device_id}: Sensor {sensor.name} skipped update! Current value = "
f"{sensor._state}, new value = {sensor_data.value}" # f"{sensor._state}, new value = {sensor_data.value}"
) # )
counter_unchanged = counter_unchanged + 1 counter_unchanged = counter_unchanged + 1
else: else:
_LOGGER.warning( _LOGGER.warning(
@ -177,9 +177,9 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
) )
counter_error = counter_error + 1 counter_error = counter_error + 1
else: else:
_LOGGER.debug( # _LOGGER.debug(
f"{device_id}: Sensor {sensor.name} is disabled, skipping update" # f"{device_id}: Sensor {sensor.name} is disabled, skipping update"
) # )
counter_disabled = counter_disabled + 1 counter_disabled = counter_disabled + 1
else: else:
_LOGGER.warning( _LOGGER.warning(
@ -231,9 +231,9 @@ class PowerOceanSensor(SensorEntity):
self._unique_id = endpoint.internal_unique_id self._unique_id = endpoint.internal_unique_id
# Set the icon for the sensor based on its unit, ensure the icon_mapper is defined # Set the icon for the sensor based on its unit, ensure the icon_mapper is defined
self._icon = PowerOceanSensor.icon_mapper.get( # Default handled in function
endpoint.unit # self._icon = PowerOceanSensor.icon_mapper.get(endpoint.unit)
) # Default handled in function self._icon = endpoint.icon
# The initial state/value of the sensor # The initial state/value of the sensor
self._state = endpoint.value self._state = endpoint.value
@ -328,16 +328,21 @@ class PowerOceanSensor(SensorEntity):
"manufacturer": "ECOFLOW", "manufacturer": "ECOFLOW",
} }
icon_mapper = defaultdict( @property
lambda: "mdi:alert-circle", def icon(self):
{ """Return the icon of the sensor."""
"°C": "mdi:thermometer", return self._icon
"%": "mdi:flash",
"s": "mdi:timer", # icon_mapper = defaultdict(
"Wh": "mdi:solar-power-variant-outline", # lambda: "mdi:alert-circle",
"h": "mdi:timer-sand", # {
}, # "°C": "mdi:thermometer",
) # "%": "mdi:flash",
# "s": "mdi:timer",
# "Wh": "mdi:solar-power-variant-outline",
# "h": "mdi:timer-sand",
# },
# )
# This is to register the icon settings # This is to register the icon settings
async def async_added_to_hass(self): async def async_added_to_hass(self):

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View file

@ -37,6 +37,7 @@
"SN_BATTERIEPACK2": "{\n \"bpPwr\": -509.56927,\n \"bpSoc\": 83,\n \"bpSoh\": 100,\n \"bpTemp\": [30.0, 31.0, 30.0, 31.0, 31.0, 29.0, 30.0, 30.0, 31.0],\n \"bpCellMaxVol\": 3311.0,\n \"bpCellMinVol\": 3309.0,\n \"bpRunSta\": \"RUNSTA_RUN\",\n \"bpVol\": 52.957,\n \"bpAmp\": -9.622321,\n \"bpBusVol\": 800.7783,\n \"bpErrCode\": 0,\n \"bpCellVol\": [3311.0, 3311.0, 3310.0, 3310.0, 3310.0, 3311.0, 3310.0, 3311.0, 3310.0, 3309.0, 3310.0, 3310.0, 3311.0, 3310.0, 3310.0, 3311.0],\n \"bpDsrc\": 1,\n \"bpSn\": \"SEozMlpESDRaRjhVMDE2Nw==\",\n \"bpCycles\": 129,\n \"bpBalanceState\": 0,\n \"bpHvMosTemp\": 41.0,\n \"bpLvMosTemp\": 40.0,\n \"bpPtcTemp\": 31.0,\n \"bpHtsTemp\": 36.0,\n \"bpBusNegTemp\": 36.0,\n \"bpBusPosTemp\": 37.0,\n \"bpEnvTemp\": 37.0,\n \"bpAccuChgCap\": 10595094,\n \"bpAccuDsgCap\": 10531372,\n \"bpDesignCap\": 100000,\n \"bpFullCap\": 101681,\n \"bpMaxCellTemp\": 31.0,\n \"bpMinCellTemp\": 29.0,\n \"bpMaxMosTemp\": 41.0,\n \"bpMinMosTemp\": 40.0,\n \"bpBmsFault\": 0,\n \"bpEcloundSoc\": 65535,\n \"bpHeartbeatVer\": 33,\n \"bpTimestamp\": 1723754955,\n \"bpRealSoc\": 82.0,\n \"bpRealSoh\": 101.68145,\n \"bpGlobalProtect\": 0,\n \"bpDownLimitSoc\": 14,\n \"bpUpLimitSoc\": 100,\n \"bpActiveCalReqStat\": 0,\n \"bpActiveCalRunStat\": 0,\n \"moduleProductInfo\": 21251,\n \"moduleProgramSta\": 1,\n \"moduleAplSwVer\": 67176201,\n \"moduleLoaderSwVer\": 67174401,\n \"bmsRunSta\": \"PB_BMS_STATE_NORMAL\",\n \"bmsChgDsgSta\": \"PB_STANDBY_STATE\",\n \"dabModSta\": \"PB_MOD_STA_NORMAL\",\n \"bpChgSop\": 50,\n \"bpDsgSop\": 80,\n \"bpRemainWatth\": 4395.431,\n \"bpTargetSoc\": 83.16742,\n \"bpDiffSoc\": 3.0,\n \"bpMaxSoc\": 83.756485,\n \"bpMinSoc\": 80.75656,\n \"bpLimitSoc\": 0.5,\n \"bpCalendarSoh\": 100.0,\n \"bpCycleSoh\": 100.0,\n \"bpAcRechargeFlag\": false,\n \"bpPtcHeatFlag\": false,\n \"bpPtcExitEvent\": \"PB_PTC_OT_STATE\",\n \"bpAccuChgEnergy\": 539787,\n \"bpAccuDsgEnergy\": 521340,\n \"bpPtcTemp2\": 32.0,\n \"bpSysState\": \"NORMAL_STATE\"\n}" "SN_BATTERIEPACK2": "{\n \"bpPwr\": -509.56927,\n \"bpSoc\": 83,\n \"bpSoh\": 100,\n \"bpTemp\": [30.0, 31.0, 30.0, 31.0, 31.0, 29.0, 30.0, 30.0, 31.0],\n \"bpCellMaxVol\": 3311.0,\n \"bpCellMinVol\": 3309.0,\n \"bpRunSta\": \"RUNSTA_RUN\",\n \"bpVol\": 52.957,\n \"bpAmp\": -9.622321,\n \"bpBusVol\": 800.7783,\n \"bpErrCode\": 0,\n \"bpCellVol\": [3311.0, 3311.0, 3310.0, 3310.0, 3310.0, 3311.0, 3310.0, 3311.0, 3310.0, 3309.0, 3310.0, 3310.0, 3311.0, 3310.0, 3310.0, 3311.0],\n \"bpDsrc\": 1,\n \"bpSn\": \"SEozMlpESDRaRjhVMDE2Nw==\",\n \"bpCycles\": 129,\n \"bpBalanceState\": 0,\n \"bpHvMosTemp\": 41.0,\n \"bpLvMosTemp\": 40.0,\n \"bpPtcTemp\": 31.0,\n \"bpHtsTemp\": 36.0,\n \"bpBusNegTemp\": 36.0,\n \"bpBusPosTemp\": 37.0,\n \"bpEnvTemp\": 37.0,\n \"bpAccuChgCap\": 10595094,\n \"bpAccuDsgCap\": 10531372,\n \"bpDesignCap\": 100000,\n \"bpFullCap\": 101681,\n \"bpMaxCellTemp\": 31.0,\n \"bpMinCellTemp\": 29.0,\n \"bpMaxMosTemp\": 41.0,\n \"bpMinMosTemp\": 40.0,\n \"bpBmsFault\": 0,\n \"bpEcloundSoc\": 65535,\n \"bpHeartbeatVer\": 33,\n \"bpTimestamp\": 1723754955,\n \"bpRealSoc\": 82.0,\n \"bpRealSoh\": 101.68145,\n \"bpGlobalProtect\": 0,\n \"bpDownLimitSoc\": 14,\n \"bpUpLimitSoc\": 100,\n \"bpActiveCalReqStat\": 0,\n \"bpActiveCalRunStat\": 0,\n \"moduleProductInfo\": 21251,\n \"moduleProgramSta\": 1,\n \"moduleAplSwVer\": 67176201,\n \"moduleLoaderSwVer\": 67174401,\n \"bmsRunSta\": \"PB_BMS_STATE_NORMAL\",\n \"bmsChgDsgSta\": \"PB_STANDBY_STATE\",\n \"dabModSta\": \"PB_MOD_STA_NORMAL\",\n \"bpChgSop\": 50,\n \"bpDsgSop\": 80,\n \"bpRemainWatth\": 4395.431,\n \"bpTargetSoc\": 83.16742,\n \"bpDiffSoc\": 3.0,\n \"bpMaxSoc\": 83.756485,\n \"bpMinSoc\": 80.75656,\n \"bpLimitSoc\": 0.5,\n \"bpCalendarSoh\": 100.0,\n \"bpCycleSoh\": 100.0,\n \"bpAcRechargeFlag\": false,\n \"bpPtcHeatFlag\": false,\n \"bpPtcExitEvent\": \"PB_PTC_OT_STATE\",\n \"bpAccuChgEnergy\": 539787,\n \"bpAccuDsgEnergy\": 521340,\n \"bpPtcTemp2\": 32.0,\n \"bpSysState\": \"NORMAL_STATE\"\n}"
}, },
"JTS1_EMS_HEARTBEAT": { "JTS1_EMS_HEARTBEAT": {
"pcsBpPower": -512.94556,
"pcsCPhase": { "pcsCPhase": {
"vol": 238.08665, "vol": 238.08665,
"amp": 1.032396, "amp": 1.032396,
@ -78,6 +79,8 @@
"mpptInsResist": 679.71265 "mpptInsResist": 679.71265
} }
], ],
"emsBpPower": -503.5379,
"pcsActPwr": 95.37367,
"pcsAPhase": { "pcsAPhase": {
"vol": 230.28967, "vol": 230.28967,
"amp": 1.1428562, "amp": 1.1428562,

View file

@ -0,0 +1,539 @@
{
"code": "0",
"message": "Success",
"data": {
"sysLoadPwr": 1730.0,
"sysGridPwr": 0.0,
"mpptPwr": 1770.0,
"bpPwr": 40.0,
"bpSoc": 55,
"sysBatChgUpLimit": 0,
"sysBatDsgDownLimit": 0,
"sysGridSta": 0,
"sysOnOffMachineStat": 0,
"online": 1,
"todayElectricityGeneration": "1.79",
"monthElectricityGeneration": "770.80",
"yearElectricityGeneration": "4781.03",
"totalElectricityGeneration": "4883.49",
"systemName": "systemName",
"createTime": "createTime",
"location": "location",
"timezone": "timezone",
"quota": {
"JTS1_ENERGY_STREAM_REPORT": {
"bpSoc": 55,
"mpptPwr": 1770.0,
"updateTime": "2024-08-29 16:14:09",
"bpPwr": 40.0,
"sysLoadPwr": 1730.0,
"sysGridPwr": 0.0
},
"JTS1_EMS_CHANGE_REPORT": {
"pcsUnderFreqIncrementEndDelay": 0.0,
"pcsQuQ1": 0.6,
"pcsQuQ2": 0.0,
"pcsQuQ3": 0.0,
"pcsQuQ4": -0.6,
"afciEn": 0,
"ethWanStat": 0,
"pcsDcErrCode": 0,
"evBindList": {
"evSn": [
]
},
"pcsFaultRecoverHighFreqOnGrid": 50.1,
"afciProtectValueCh1": 0.0,
"pcsLowVolRecover": 195.5,
"batRealyStatus": 2,
"mppt1WarningCode": 0,
"afciProtectValueCh2": 20000.0,
"afciFaultCntCh2": 0,
"afciFaultCntCh1": 0,
"pcsOverVolDeratingSwitch": 0,
"pcsOverFreq1": 51.5,
"pcsOverFreq2": 51.5,
"sysHeatStat": 0,
"pcsHighVolRideThroughRecover": 253.0,
"pcsAutoTestFlag": 0,
"pcsSafetyCountryCodeSelection": 4,
"bpLineOffFlag": 0,
"batSoftRelayStatus": 0,
"pcsUnderFreqIncrementEnd": 49.8,
"emsWorkState": 0,
"iot4gErr": 7,
"bpOnlineSum": 2,
"pcsOverFreqDeratingSwitch": 0,
"afciFaultMaxValueCh1": 0.0,
"afciFaultMaxValueCh2": 0.0,
"sysWorkSta": 0,
"pcsOverVolRideThroughStart1": 265.65,
"batRelayCloseFailFlag": 0,
"rateCtrlSwtich": false,
"pcsFastCheck": 0,
"pcsOverVolRideThroughStart2": 287.5,
"pcsLowFreqTime2": 100,
"emsSysSelfCheckStat": 9,
"pcsLowFreqTime1": 100,
"pcsLowVolRideThroughRecover": 195.5,
"pcsReactPwrCompensation": 0.0049,
"wireless4gIccid": "",
"pcsQuLockoutPower": 0.0,
"pcsActivePowerSoftstartSwitch": 1,
"pcsCospP1": 0.1,
"pcsCospP2": 0.5,
"pcsOvpProtectCnt": 0,
"pcsUnderFreqIncrementSlope": 0.4,
"pcsCospP3": 1.0,
"parallelType": 0,
"pcsCospP4": 0.0,
"sysMulPeakTime": 1200,
"emsWordMode": "WORKMODE_SELFUSE",
"pcsOverVolRideThroughProtectTime1": 5500,
"pcsOverFreqDeratingRecoverSlope": 0.09,
"pcsOfpProtectCnt": 0,
"pcsUvp2ProtectCnt": 0,
"pcsOverVolRideThroughProtectTime2": 1000,
"pcsUnderFreqIncrementRecoverSlope": 0.09,
"pcsFaultRecoverHighVolOnGrid": 253.0,
"chgDsgPwr": 0.0,
"pcsRunSta": "RUNSTA_RUN",
"mppt2WarningCode": 0,
"pcsOfpProtectValue": 0.0,
"pcsQuV1": 213.90001,
"wifiStaStat": 0,
"pcsAutoTestState": 0,
"pcsOverVolDeratingEnd": 257.6,
"pcsFaultRecoverLowFreqOnGrid": 47.53,
"emsFeedRatio": 100,
"pcsLowVolRideThroughProtectTime1": 5200,
"pcsFreqLocalCommand": 1,
"pcsLowVolRideThroughProtectTime3": 1000,
"pcsLowVolRideThroughProtectTime2": 3000,
"pcsOverFreqDeratingStart": 50.2,
"pcs10minOverVolTime": 100,
"sysGridSta": 0,
"pcsUnderFreqIncrementStart": 49.8,
"sysRateCtrlTime": 60,
"pcsAvgOvpProtectCnt": 0,
"pcsUvp2ProtectValue": 0.0,
"pcsLowVolTime2": 300,
"pcsLowVolTime3": 240,
"pcsFaultRecoverLowVolOnGrid": 195.5,
"mppt2FaultCode": 0,
"pcsLowVolTime1": 3000,
"pcsSendEnd": 0,
"sysBatBackupRatio": 0,
"emsFeedPwr": 10000,
"afciSelfTestCmdState": 0,
"pcsOvpProtectValue": 0.0,
"sysMulPeakSwitch": true,
"emsSgRunStat": 0,
"pcsOverFreqDeratingEnd": 50.2,
"pcs10minOverVolSwitch": 0,
"pcsUnderFreqIncrementFrozeSwitch": 0,
"pcsAcWarningCode": 0,
"sysTypeCfg": 0,
"pcsPowerDeratingFlag": 9,
"pcsQuV2": 223.1,
"pcsQuV3": 236.9,
"pcsQuV4": 246.1,
"emsFeedMode": 3,
"pcsAcErrCode": 0,
"pcsOngridReconnectFlag": 0,
"pcsUvp1ProtectCnt": 0,
"pcsOverVolDeratingDaleyTime": 0.0,
"sysCalStat": 0,
"emsSgReadyEn": false,
"pcsOverFreqTime2": 100,
"pcsOverFreqTime1": 100,
"pcsOverVolDeratingTimeConst": 10.0,
"pcsPowerDeratingSet": 200,
"userRole": 0,
"pcsAvgOvpProtectValue": 0.0,
"pcsFunctionEnable": 0,
"pcsOverVolTime1": 100,
"pcsOverVolTime2": 100,
"pcsOverVolTime3": 0,
"pcsActivePowerNormalRampUpRate": 60.0,
"pcsUfpProtectValue": 0.0,
"pcsLowVolRideThroughStart1": 184.0,
"pcsAntiBackFlowSwitch": 1,
"pcsLowVolRideThroughStart3": 57.5,
"pcsLowVol1": 184.0,
"pcsLowVolRideThroughStart2": 103.5,
"pcsLowVol2": 103.5,
"pcsLowVol3": 57.5,
"pcsOverFreqDeratingEndDelay": 0.0,
"pcsOverVolDeratingEndPower": 0.0,
"sysOnOffMachineStat": 0,
"afciFaultClearState": 0,
"parallelTypeCur": 0,
"mppt1FaultCode": 0,
"pcsOverVolRecover": 253.0,
"emsCtrlLedType": 1,
"pcsActivePowerDeratingPercent": 1.0,
"sysBatChgUpLimit": 100,
"pcsOverVol3": 0.0,
"pcsOverVol2": 287.5,
"pcsOverVol1": 287.5,
"pcs10minOverVol": 253.0,
"pcsAutoTestPercent": 0,
"iot4gSta": 2,
"afciFaultValueCh2": 0.0,
"afciFaultValueCh1": 0.0,
"emsSgReady": {
"emsSgParam": [
]
},
"pcsOverFreqDeratingStartDelay": 0.0,
"sysBatDsgDownLimit": 10,
"pcsLowFreqRecover": 47.53,
"parallelTypeSet": 0,
"pcsActivePowerSoftStartRate": 0.1,
"pcsOverFreqDeratingCutoffPower": 0.0,
"pcsActivePowerSoftstartTime": 1143373824,
"pcsQuMinimumCosphi": 0.4,
"pcsHighFreqOnGrid": 50.1,
"pcsQuTimeConst": 10.0,
"pcsReactPwrModeSelect": 0,
"iot4gOn": 1,
"bpTotalChgEnergy": 1214338,
"pcsLowFreqOnGrid": 47.53,
"pcsRunFsmState": 58861634,
"afciFaultFlagCh1": 0,
"pcsOverFreqDeratingFrozeSwitch": 0,
"afciFaultFlagCh2": 0,
"updateTime": "2024-08-29 16:37:32",
"pcsHighVolOnGrid": 253.0,
"pcsOverVolDeratingStart": 253.0,
"pcsUfpProtectCnt": 0,
"pcsOverFreqRecover": 50.1,
"pcsUnderFreqIncrementRecoverSlopeSwitch": 1,
"chgDsgMode": 0,
"sysMeterCfg": 0,
"pcsCospPf2": -1.0,
"pcsOverFreqDeratingRecoverSlopeSwitch": 0,
"pcsCospPf1": -1.0,
"pcsCospPf4": 0.0,
"pcsCospPf3": -0.9,
"afciIsExist": 0,
"pcsActivePowerGradient": 0.0033,
"afciSellfTestResult": 0,
"pcsHvrtLvrtSwitch": 1,
"pcsQuLockinPower": 0.0,
"pcsActivePowerDeratingSwitch": 0,
"bpChgDsgSta": 1,
"pcsFreqRecoverTime": 1000,
"emsKeepSoc": 0,
"pcsFaultRecoverOnGridWaitTime": 60000,
"pcsPfValue": 1.0,
"bpReverseFlag": 0,
"afciEnSet": 0,
"pcsVolRecoverTime": 1000,
"pcsOnGridWaitTime": 60000,
"bpSoc": 60,
"pcsReconnectGridDetectSwitch": 1,
"pcsLowFreq1": 47.5,
"pcsLowFreq2": 47.5,
"bpRestartFlag": 1,
"pcsUvp1ProtectValue": 0.0,
"emsCtrlLedBright": 10,
"pcsOverVolDeratingStartingPower": 1.0,
"pcsOverFreqDeratingSlope": 0.4,
"pcsUnderFreqIncrementSwitch": 0,
"virtualHardEdition": 1,
"parallelAllowState": false,
"pcsReactPwrPercent": 0.0,
"afciSwitchFreqCh2": 20000,
"iot4gPdp": -1,
"pcsRelaySelfCheckSta": 9,
"afciSwitchFreqCh1": 0,
"pcsOverFreqDeratingPowerBased": 2.0,
"emsStopAll": 0,
"pcsUnderFreqIncrementStartDelay": 0.0,
"pcsFreqExternalSignal": 0,
"pcsRelayStateShow": 609324111,
"bpTotalDsgEnergy": 1147539,
"pcsLowVolOnGrid": 195.5,
"afciEnableCmdState": 0,
"pcsIslandDetectSwitch": 1,
"emsBackupEvent": 0
},
"JTS1_HP_TIMER_TASK_REPORT": {
},
"JTS1_BP_STA_REPORT": {
"SN_BATTERIEPACK1": "{\n \"bpPwr\": 1561.5443,\n \"bpSoc\": 61,\n \"bpSoh\": 100,\n \"bpTemp\": [29.0, 31.0, 29.0, 29.0, 31.0, 28.0, 28.0, 29.0, 30.0],\n \"bpCellMaxVol\": 3381.0,\n \"bpCellMinVol\": 3374.0,\n \"bpRunSta\": \"RUNSTA_RUN\",\n \"bpVol\": 54.021,\n \"bpAmp\": 28.906246,\n \"bpBusVol\": 807.8273,\n \"bpErrCode\": 0,\n \"bpCellVol\": [3376.0, 3378.0, 3377.0, 3379.0, 3378.0, 3379.0, 3377.0, 3378.0, 3381.0, 3379.0, 3377.0, 3379.0, 3379.0, 3380.0, 3375.0, 3374.0],\n \"bpDsrc\": 2,\n \"bpSn\": \"SEozMlpESDRaRjhVMDEyNg==\",\n \"bpCycles\": 132,\n \"bpBalanceState\": 0,\n \"bpHvMosTemp\": 38.0,\n \"bpLvMosTemp\": 37.0,\n \"bpPtcTemp\": 30.0,\n \"bpHtsTemp\": 34.0,\n \"bpBusNegTemp\": 36.0,\n \"bpBusPosTemp\": 36.0,\n \"bpEnvTemp\": 35.0,\n \"bpAccuChgCap\": 11190702,\n \"bpAccuDsgCap\": 11171727,\n \"bpDesignCap\": 100000,\n \"bpFullCap\": 101937,\n \"bpMaxCellTemp\": 31.0,\n \"bpMinCellTemp\": 28.0,\n \"bpMaxMosTemp\": 38.0,\n \"bpMinMosTemp\": 37.0,\n \"bpBmsFault\": 0,\n \"bpEcloundSoc\": 65535,\n \"bpHeartbeatVer\": 33,\n \"bpTimestamp\": 1724920557,\n \"bpRealSoc\": 61.0,\n \"bpRealSoh\": 101.93712,\n \"bpGlobalProtect\": 0,\n \"bpDownLimitSoc\": 14,\n \"bpUpLimitSoc\": 100,\n \"bpActiveCalReqStat\": 0,\n \"bpActiveCalRunStat\": 0,\n \"moduleProductInfo\": 21251,\n \"moduleProgramSta\": 1,\n \"moduleAplSwVer\": 67176454,\n \"moduleLoaderSwVer\": 67174401,\n \"bmsRunSta\": \"PB_BMS_STATE_NORMAL\",\n \"bmsChgDsgSta\": \"PB_DSG_STATE\",\n \"dabModSta\": \"PB_MOD_STA_NORMAL\",\n \"bpChgSop\": 50,\n \"bpDsgSop\": 80,\n \"bpRemainWatth\": 3123.2,\n \"bpTargetSoc\": 61.346497,\n \"bpDiffSoc\": 2.333374,\n \"bpMaxSoc\": 62.444008,\n \"bpMinSoc\": 60.108322,\n \"bpLimitSoc\": 0.5,\n \"bpCalendarSoh\": 100.0,\n \"bpCycleSoh\": 100.0,\n \"bpAcRechargeFlag\": false,\n \"bpPtcHeatFlag\": false,\n \"bpPtcExitEvent\": \"PB_PTC_OT_STATE\",\n \"bpAccuChgEnergy\": 574233,\n \"bpAccuDsgEnergy\": 555830,\n \"bpPtcTemp2\": 31.0,\n \"bpSysState\": \"NORMAL_STATE\"\n}",
"": "{\n \"bpTemp\": [],\n \"bpCellVol\": []\n}",
"updateTime": "2024-08-29 16:36:02",
"SN_BATTERIEPACK2": "{\n \"bpPwr\": -0.26787513,\n \"bpSoc\": 61,\n \"bpSoh\": 100,\n \"bpTemp\": [29.0, 31.0, 29.0, 30.0, 31.0, 29.0, 30.0, 30.0, 31.0],\n \"bpCellMaxVol\": 3338.0,\n \"bpCellMinVol\": 3326.0,\n \"bpRunSta\": \"RUNSTA_RUN\",\n \"bpVol\": 53.277,\n \"bpAmp\": -0.0050279694,\n \"bpBusVol\": 808.02185,\n \"bpErrCode\": 0,\n \"bpCellVol\": [3328.0, 3330.0, 3329.0, 3335.0, 3329.0, 3331.0, 3331.0, 3328.0, 3338.0, 3326.0, 3333.0, 3328.0, 3334.0, 3333.0, 3330.0, 3335.0],\n \"bpDsrc\": 1,\n \"bpSn\": \"SEozMlpESDRaRjhVMDE2Nw==\",\n \"bpCycles\": 138,\n \"bpBalanceState\": 0,\n \"bpHvMosTemp\": 39.0,\n \"bpLvMosTemp\": 37.0,\n \"bpPtcTemp\": 31.0,\n \"bpHtsTemp\": 36.0,\n \"bpBusNegTemp\": 35.0,\n \"bpBusPosTemp\": 36.0,\n \"bpEnvTemp\": 35.0,\n \"bpAccuChgCap\": 11294418,\n \"bpAccuDsgCap\": 11253368,\n \"bpDesignCap\": 100000,\n \"bpFullCap\": 101681,\n \"bpMaxCellTemp\": 31.0,\n \"bpMinCellTemp\": 29.0,\n \"bpMaxMosTemp\": 39.0,\n \"bpMinMosTemp\": 37.0,\n \"bpBmsFault\": 0,\n \"bpEcloundSoc\": 65535,\n \"bpHeartbeatVer\": 33,\n \"bpTimestamp\": 1724920556,\n \"bpRealSoc\": 61.0,\n \"bpRealSoh\": 101.68145,\n \"bpGlobalProtect\": 0,\n \"bpDownLimitSoc\": 14,\n \"bpUpLimitSoc\": 100,\n \"bpActiveCalReqStat\": 0,\n \"bpActiveCalRunStat\": 0,\n \"moduleProductInfo\": 21251,\n \"moduleProgramSta\": 1,\n \"moduleAplSwVer\": 67176454,\n \"moduleLoaderSwVer\": 67174401,\n \"bmsRunSta\": \"PB_BMS_STATE_NORMAL\",\n \"bmsChgDsgSta\": \"PB_STANDBY_STATE\",\n \"dabModSta\": \"PB_MOD_STA_NORMAL\",\n \"bpChgSop\": 50,\n \"bpDsgSop\": 80,\n \"bpRemainWatth\": 3123.2,\n \"bpTargetSoc\": 61.015976,\n \"bpDiffSoc\": 3.0,\n \"bpMaxSoc\": 62.38619,\n \"bpMinSoc\": 59.380417,\n \"bpLimitSoc\": 0.5,\n \"bpCalendarSoh\": 100.0,\n \"bpCycleSoh\": 100.0,\n \"bpAcRechargeFlag\": false,\n \"bpPtcHeatFlag\": false,\n \"bpPtcExitEvent\": \"PB_PTC_OT_STATE\",\n \"bpAccuChgEnergy\": 577577,\n \"bpAccuDsgEnergy\": 559331,\n \"bpPtcTemp2\": 31.0,\n \"bpSysState\": \"NORMAL_STATE\"\n}"
},
"JTS1_LOGY_DEV_REPORT": {
"HPReport": {
"devSn": "",
"online": 0,
"errorCode": ""
},
"updateTime": "2024-08-29 16:27:34"
},
"JTS1_EMS_PARAM_CHANGE_REPORT": {
"smartCtrl": false,
"breakerCapacityMax": 400,
"energyEfficientEnable": true,
"breakerEnableState": true,
"bpBurst": false,
"updateTime": "2024-08-29 16:27:34",
"lowerPowerStat": false,
"sysZone": 8,
"sysTimeTab": 19662120
},
"JTS1_HP_UI_REPORT": {
},
"JTS1_PARALLEL_ENERGY_STREAM_REPORT": {
},
"JTS1_EMS_ALL_TIMER_TASK_REPORT": {
"timeTaskCfg": [
],
"updateTime": "2024-08-29 13:21:07"
},
"JTS1_HEATING_ROD_TIMER_TASK_REPORT": {
},
"JTS1_LOGY_DEV_ENERGY_STREAM_REPORT": {
},
"JTS1_APP_REQUEST_BP_EU_LAW_DATA_REPORT": {
},
"JTS1_EMS_PV_INV_ENERGY_STREAM_REPORT": {
"pvInvPwr": 0.0,
"updateTime": "2024-08-29 16:14:09"
},
"JTS1_EMS_PARALLEL_DEVICE_LIST": {
},
"JT303_EDEV_PRIORITY_LIST_REPORT": {
},
"JTS1_ERROR_CHANGE_REPORT": {
"updateTime": "2024-08-29 16:27:36",
"emsErrCode": {
"errCode": [
],
"moduleSn": "codierte sn"
},
"pcsErrCode": {
"errCode": [
],
"moduleSn": "codierte sn"
},
"bpErrCode": [
{
"errCode": [
],
"moduleSn": "codierte sn"
},
{
"errCode": [
],
"moduleSn": "codierte sn"
}
]
},
"JTS1_EV_CHARGING_ENERGY_STREAM_REPORT": {
},
"JTS1_ERROR_CODE_MASK_REPORT": {
"errorCode": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"updateTime": "2024-08-29 13:21:07"
},
"JTS1_EMS_HEARTBEAT": {
"emsPcsStartupState": 1,
"pcsBpPower": 1232.3423,
"pcsPfcCurRef": 0.0,
"pcsCPhase": {
"vol": 239.47925,
"amp": 1.0047227,
"actPwr": -149.27367,
"reactPwr": 188.70789,
"apparentPwr": 240.61024
},
"pcsActivePowerRef": 713.7766,
"pcsReactivePowerRef": 0.0,
"bpRemainWatth": 6666.0,
"emsMpptModStat": 0,
"pcsAverageVoltage": 0.0,
"emsBpAliveNum": 2,
"pcsDci": 0.0035001037,
"emsBpDsg": -6601.1196,
"emsSelfUsedCnt": 14701148,
"pcsActivePowerLimitUp": 713.7766,
"pcsBPhase": {
"vol": 241.53192,
"amp": 0.6367133,
"actPwr": -123.93383,
"reactPwr": 91.0534,
"apparentPwr": 153.78659
},
"pcsDcv": 0.0,
"pcsVbusRef": 770.0,
"emsStartFsmState": 1078644260,
"emsBusVolt": 806.4418,
"emsBpChg": 5000.848,
"emsAcMakeupTriggleSoc": 12,
"bpDsgTime": 600000,
"pcsLeakAmp": -6.364746,
"emsLpStateFlag": 0,
"emsMpptStartupState": 1,
"pcsActivePowerLimitDn": -10000.0,
"pcsBusVolt": 806.153,
"pcsGridSafetyStateRecord": 9490524,
"pcsCommInterfaceState": 17120,
"emsLpState": 0,
"pcsMeterPower": -5.2220154,
"emsStopCmd": 34,
"emsPcsSelfcheckState": 1,
"emsAcMakeupExitSoc": 14,
"emsBusVoltErrSlidFilter": 0.85184544,
"emsPvInvPwr": 0.0,
"emsMpptHbState": 17,
"emsBpChgRequest": 0,
"pcsLoadInfo": [
{
"vol": 235.78484,
"amp": 0.0,
"freq": 50.019608,
"pwr": 0.0
},
{
"vol": 241.53192,
"amp": 0.0,
"freq": 50.019608,
"pwr": 0.0
},
{
"vol": 239.47925,
"amp": 0.0,
"freq": 50.019608,
"pwr": 0.0
}
],
"mpptHeartBeat": [
{
"mpptPv": [
{
"vol": 345.86108,
"amp": 5.05552,
"lightSta": true,
"pwr": 1748.5077
},
{
"vol": 254.73224,
"amp": 1.5166792,
"lightSta": true,
"pwr": 386.34708
}
],
"mpptTempVal": [
41.100002,
42.3,
42.0
],
"mpptInsResist": 611.47766
}
],
"emsBusVoltRipple": 1.2493286,
"emsLpType": 0,
"pcsBpPowerChgLimit": 5000.848,
"pcsAcFreq": 50.01,
"emsSocCalibRequest": 0,
"emsBpStartupState": 1,
"emsSysCfg": 7,
"emsAcMakeupMinSoc": 0,
"emsLpMpptCnt": 0,
"emsBpSelfcheckState": 1,
"emsBpPower": 1234.7299,
"emsActiveOffGridCmd": 0,
"pcsActPwr": 109.46263,
"emsLpBpCnt": 0,
"emsNtcTempMax": 42.3,
"emsAcMakeupCnt": 0,
"emsSocCalibState": 0,
"pcsRelayStateShow": 609324111,
"updateTime": "2024-08-29 16:40:24",
"emsMpptRunState": 1,
"pcsVgridThd": 8.080436E-05,
"pcsInterruptOccupancyRate": 90.0,
"pcsAPhase": {
"vol": 235.78484,
"amp": 1.8547661,
"actPwr": 382.67014,
"reactPwr": 211.70108,
"apparentPwr": 437.3257
},
"emsMpptSelfcheckState": 1,
"pcsPfcCurReal": 0.0,
"pcsGridSafetyFuncRecord": 100687970,
"pcsGridInvErrorRms": 10.824885,
"meterHeartBeat": [
{
"meterAddr": 106,
"meterType": 11,
"meterData": [
0.0,
0.0,
0.0,
5.4385986
]
}
]
},
"JT303_EDEV_PRIORITY_SET_ACK": {
},
"JTS1_HEATING_ROD_ENERGY_STREAM_REPORT": {
},
"JTS1_EVCHARGING_REPORT": {
},
"JTS1_HEATING_ROD_PARAM_REPORT": {
},
"JTS1_ECOLOGY_DEV_BIND_LIST_REPORT": {
"devItem": [
],
"updateTime": "2024-08-29 16:27:34"
},
"JTS1_MPPT_STA_REPORT": {
},
"JTS1_EV_CHARGING_TIMER_TASK_REPORT": {
}
}
},
"eagleEyeTraceId": "lange id",
"tid": ""
}