diff --git a/README.md b/README.md index 128fd85..f7bef86 100644 --- a/README.md +++ b/README.md @@ -34,20 +34,16 @@ Follow the flow. ### 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 -- Internal Unique ID: `{serial}_{sensor_name}` or `{serial}_{report}_{sensor_name}` -- Device Name: `{serial}` +- Internal Unique ID: `{serial}_{sensor_name}` +- Device Name: as - Vendor Product Serial: serial number of the PowerOcean inverter -- Vendor Firmware Version: 5.1.15 -- Vendor Product Build: 6 +- Vendor Firmware Version: 5.1.8 +- Vendor Product Build: 13 ![sensor](documentation/sensor.PNG) -##Neuer Sensor (berechnet aus einzelnen Strings) - -![sensor](documentation/mpptPv_pwrTotal.PNG) - ## 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: diff --git a/custom_components/powerocean/config_flow.py b/custom_components/powerocean/config_flow.py index c9bf830..ed8a539 100644 --- a/custom_components/powerocean/config_flow.py +++ b/custom_components/powerocean/config_flow.py @@ -142,11 +142,13 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): step_device_options_schema = vol.Schema( { vol.Required("custom_device_name", default=default_device_name): str, - vol.Required("polling_time", default=10): vol.All( - vol.Coerce(int), vol.Clamp(min=5) + # vol.Required("polling_time", default=60): vol.All( + vol.Required("polling_time", default=5): vol.All( + vol.Coerce(int), vol.Clamp(min=60) ), 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, } ) diff --git a/custom_components/powerocean/const.py b/custom_components/powerocean/const.py index 5f7c779..708b90b 100644 --- a/custom_components/powerocean/const.py +++ b/custom_components/powerocean/const.py @@ -3,10 +3,10 @@ import logging 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" -VERSION = "2024.08.27" -ISSUE_URL = "https://github.com/niltrip/powerocean/issues" +VERSION = "2024.01.01" +ISSUE_URL = "https://github.com/evercape/powerocean/issues" ISSUE_URL_ERROR_MESSAGE = " Please log any issues here: " + ISSUE_URL diff --git a/custom_components/powerocean/ecoflow.py b/custom_components/powerocean/ecoflow.py index 70f70e4..04d4517 100644 --- a/custom_components/powerocean/ecoflow.py +++ b/custom_components/powerocean/ecoflow.py @@ -15,7 +15,7 @@ from .const import _LOGGER, ISSUE_URL_ERROR_MESSAGE # Better storage of PowerOcean endpoint PowerOceanEndPoint = namedtuple( "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", "serial": self.sn, "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", "features": "Photovoltaik", } @@ -120,6 +120,7 @@ class Ecoflow: response = self.get_json_response(request) _LOGGER.debug(f"{response}") + _LOGGER.debug(f"{response['data']}") return self._get_sensors(response) @@ -135,7 +136,7 @@ class Ecoflow: def __get_unit(self, key): """Function get unit from key Name.""" - if key.endswith(("pwr", "Pwr", "Power")): + if key.endswith(("pwr", "Pwr")): unit = "W" elif key.endswith(("amp", "Amp")): unit = "A" @@ -232,9 +233,6 @@ class Ecoflow: if not isinstance(value, dict): # default uid, unit and descript unique_id = f"{self.sn}_{key}" - special_icon = None - if key == "mpptPwr": - special_icon = "mdi:solar-power" sensors[unique_id] = PowerOceanEndPoint( internal_unique_id=unique_id, @@ -244,7 +242,6 @@ class Ecoflow: value=value, unit=self.__get_unit(key), description=self.__get_description(key), - icon=special_icon, ) return sensors @@ -273,7 +270,6 @@ class Ecoflow: # value=value, # unit=self.__get_unit(key), # description=self.__get_description(key), - # icon=None, # ) # dict.update(sensors, data) # @@ -311,7 +307,6 @@ class Ecoflow: value=value, unit=self.__get_unit(key), description=self.__get_description(key), - icon=None, ) dict.update(sensors, data) @@ -345,9 +340,6 @@ class Ecoflow: # default uid, unit and descript unique_id = f"{self.sn}_{report}_{bat}_{key}" description_tmp = f"{name}" + self.__get_description(key) - special_icon = None - if key == "bpAmp": - special_icon = "mdi:current-dc" data[unique_id] = PowerOceanEndPoint( internal_unique_id=unique_id, serial=self.sn, @@ -356,7 +348,6 @@ class Ecoflow: value=value, unit=self.__get_unit(key), description=description_tmp, - icon=special_icon, ) # compute mean temperature of cells key = "bpTemp" @@ -372,7 +363,6 @@ class Ecoflow: value=value, unit=self.__get_unit(key), description=description_tmp, - icon=None, ) dict.update(sensors, data) @@ -386,10 +376,6 @@ class Ecoflow: sens_select = [ "bpRemainWatth", "emsBpAliveNum", - "emsBpPower", - "pcsActPwr", - "pcsMeterPower", - ] data = {} for key, value in d.items(): @@ -405,7 +391,6 @@ class Ecoflow: value=value, unit=self.__get_unit(key), description=description_tmp, - icon=None, ) # special for phases @@ -423,7 +408,6 @@ class Ecoflow: value=value, unit=self.__get_unit(key), description=self.__get_description(key), - icon=None, ) # special for mpptPv @@ -435,11 +419,6 @@ class Ecoflow: for i, mpptpv in enumerate(mpptpvs): for key, value in d["mpptHeartBeat"][0]["mpptPv"][i].items(): 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( internal_unique_id=unique_id, @@ -449,7 +428,6 @@ class Ecoflow: value=value, unit=self.__get_unit(key), description=self.__get_description(key), - icon=special_icon, ) # sum power of all strings if key == "pwr": @@ -467,7 +445,6 @@ class Ecoflow: value=mpptPv_sum, unit=self.__get_unit(key), description="Solarertrag aller Strings", - icon="mdi:solar-power", ) dict.update(sensors, data) diff --git a/custom_components/powerocean/manifest.json b/custom_components/powerocean/manifest.json index b674693..351cd1d 100644 --- a/custom_components/powerocean/manifest.json +++ b/custom_components/powerocean/manifest.json @@ -11,5 +11,5 @@ "homekit": {}, "iot_class": "cloud_polling", "requirements": [], - "version": "2024.08.27" + "version": "2024.01.01" } diff --git a/custom_components/powerocean/sensor.py b/custom_components/powerocean/sensor.py index 8152d8f..3a8957d 100644 --- a/custom_components/powerocean/sensor.py +++ b/custom_components/powerocean/sensor.py @@ -144,11 +144,11 @@ async def async_setup_entry(hass, config_entry, async_add_entities): # entity is enabled if entity and not entity.disabled_by: 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: - # _LOGGER.debug( - # f"{device_id}: Sensor {sensor.name} has API data to update {sensor_data}" - # ) + _LOGGER.debug( + f"{device_id}: Sensor {sensor.name} has API data to update {sensor_data}" + ) # Check if current state value differs from new API value, # 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_data.value).strip() ): - # _LOGGER.debug( - # f"{device_id}: Sensor {sensor.name} marked for update: current state = " - # f"{sensor._state} with new value = {sensor_data.value}" - # ) + _LOGGER.debug( + f"{device_id}: Sensor {sensor.name} marked for update: current state = " + f"{sensor._state} with new value = {sensor_data.value}" + ) # Now update the sensor with new values # update_status returns 1 for upated, 0 for skipped or error update_status = await sensor.async_update(sensor_data) counter_updated = counter_updated + update_status else: - # _LOGGER.debug( - # f"{device_id}: Sensor {sensor.name} skipped update! Current value = " - # f"{sensor._state}, new value = {sensor_data.value}" - # ) + _LOGGER.debug( + f"{device_id}: Sensor {sensor.name} skipped update! Current value = " + f"{sensor._state}, new value = {sensor_data.value}" + ) counter_unchanged = counter_unchanged + 1 else: _LOGGER.warning( @@ -177,9 +177,9 @@ async def async_setup_entry(hass, config_entry, async_add_entities): ) counter_error = counter_error + 1 else: - # _LOGGER.debug( - # f"{device_id}: Sensor {sensor.name} is disabled, skipping update" - # ) + _LOGGER.debug( + f"{device_id}: Sensor {sensor.name} is disabled, skipping update" + ) counter_disabled = counter_disabled + 1 else: _LOGGER.warning( @@ -231,9 +231,9 @@ class PowerOceanSensor(SensorEntity): self._unique_id = endpoint.internal_unique_id # 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(endpoint.unit) - self._icon = endpoint.icon + self._icon = PowerOceanSensor.icon_mapper.get( + endpoint.unit + ) # Default handled in function # The initial state/value of the sensor self._state = endpoint.value @@ -328,21 +328,16 @@ class PowerOceanSensor(SensorEntity): "manufacturer": "ECOFLOW", } - @property - def icon(self): - """Return the icon of the sensor.""" - return self._icon - - # icon_mapper = defaultdict( - # lambda: "mdi:alert-circle", - # { - # "°C": "mdi:thermometer", - # "%": "mdi:flash", - # "s": "mdi:timer", - # "Wh": "mdi:solar-power-variant-outline", - # "h": "mdi:timer-sand", - # }, - # ) + icon_mapper = defaultdict( + lambda: "mdi:alert-circle", + { + "°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 async def async_added_to_hass(self): diff --git a/documentation/mpptPv_pwrTotal.PNG b/documentation/mpptPv_pwrTotal.PNG deleted file mode 100644 index fc36afd..0000000 Binary files a/documentation/mpptPv_pwrTotal.PNG and /dev/null differ diff --git a/documentation/parameter_selected.json b/documentation/parameter_selected.json index 259a64c..8709676 100644 --- a/documentation/parameter_selected.json +++ b/documentation/parameter_selected.json @@ -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}" }, "JTS1_EMS_HEARTBEAT": { - "pcsBpPower": -512.94556, "pcsCPhase": { "vol": 238.08665, "amp": 1.032396, @@ -79,8 +78,6 @@ "mpptInsResist": 679.71265 } ], - "emsBpPower": -503.5379, - "pcsActPwr": 95.37367, "pcsAPhase": { "vol": 230.28967, "amp": 1.1428562, diff --git a/documentation/response_modified_5_1_16_11.json b/documentation/response_modified_5_1_16_11.json deleted file mode 100644 index dfe0fce..0000000 --- a/documentation/response_modified_5_1_16_11.json +++ /dev/null @@ -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": "" -} \ No newline at end of file