Compare commits

..

No commits in common. "8d22af9344a3692f2bf151a3beb0f17bb7851984" and "69074b45a8caad29725734c0dc1b234e2409ff40" have entirely different histories.

9 changed files with 46 additions and 618 deletions

View file

@ -34,20 +34,16 @@ Follow the flow.
### Sensors ### Sensors
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: 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:
- Product Description, Destination Name, Source Name: internal names - Product Description, Destination Name, Source Name: internal names
- Internal Unique ID: `{serial}_{sensor_name}` or `{serial}_{report}_{sensor_name}` - Internal Unique ID: `{serial}_{sensor_name}`
- Device Name: `{serial}` - Device Name: as
- Vendor Product Serial: serial number of the PowerOcean inverter - Vendor Product Serial: serial number of the PowerOcean inverter
- Vendor Firmware Version: 5.1.15 - Vendor Firmware Version: 5.1.8
- Vendor Product Build: 6 - Vendor Product Build: 13
![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,11 +142,13 @@ 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=10): vol.All( # vol.Required("polling_time", default=60): vol.All(
vol.Coerce(int), vol.Clamp(min=5) vol.Required("polling_time", default=5): vol.All(
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" DOMAIN = "powerocean" # Have requested to add logos via https://github.com/home-assistant/brands/pull/4904
NAME = "Ecoflow PowerOcean" NAME = "Ecoflow PowerOcean"
VERSION = "2024.08.27" VERSION = "2024.01.01"
ISSUE_URL = "https://github.com/niltrip/powerocean/issues" ISSUE_URL = "https://github.com/evercape/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, icon", "internal_unique_id, serial, name, friendly_name, value, unit, description",
) )
@ -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": "6", # TODO: wo finde ich das? "build": "13", # TODO: wo finde ich das?
"name": "PowerOcean", "name": "PowerOcean",
"features": "Photovoltaik", "features": "Photovoltaik",
} }
@ -120,6 +120,7 @@ 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)
@ -135,7 +136,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", "Power")): if key.endswith(("pwr", "Pwr")):
unit = "W" unit = "W"
elif key.endswith(("amp", "Amp")): elif key.endswith(("amp", "Amp")):
unit = "A" unit = "A"
@ -232,9 +233,6 @@ 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,
@ -244,7 +242,6 @@ 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
@ -273,7 +270,6 @@ 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)
# #
@ -311,7 +307,6 @@ 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)
@ -345,9 +340,6 @@ 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,
@ -356,7 +348,6 @@ 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"
@ -372,7 +363,6 @@ 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)
@ -386,10 +376,6 @@ 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():
@ -405,7 +391,6 @@ 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
@ -423,7 +408,6 @@ 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
@ -435,11 +419,6 @@ 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,
@ -449,7 +428,6 @@ 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":
@ -467,7 +445,6 @@ 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.08.27" "version": "2024.01.01"
} }

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
# Default handled in function self._icon = PowerOceanSensor.icon_mapper.get(
# self._icon = PowerOceanSensor.icon_mapper.get(endpoint.unit) endpoint.unit
self._icon = endpoint.icon ) # Default handled in function
# The initial state/value of the sensor # The initial state/value of the sensor
self._state = endpoint.value self._state = endpoint.value
@ -328,21 +328,16 @@ class PowerOceanSensor(SensorEntity):
"manufacturer": "ECOFLOW", "manufacturer": "ECOFLOW",
} }
@property icon_mapper = defaultdict(
def icon(self): lambda: "mdi:alert-circle",
"""Return the icon of the sensor.""" {
return self._icon "°C": "mdi:thermometer",
"%": "mdi:flash",
# icon_mapper = defaultdict( "s": "mdi:timer",
# lambda: "mdi:alert-circle", "Wh": "mdi:solar-power-variant-outline",
# { "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.

Before

Width:  |  Height:  |  Size: 58 KiB

View file

@ -37,7 +37,6 @@
"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,
@ -79,8 +78,6 @@
"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

@ -1,539 +0,0 @@
{
"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": ""
}