diff --git a/README.md b/README.md index f7bef86..128fd85 100644 --- a/README.md +++ b/README.md @@ -34,16 +34,20 @@ Follow the flow. ### 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 -- Internal Unique ID: `{serial}_{sensor_name}` -- Device Name: as +- Internal Unique ID: `{serial}_{sensor_name}` or `{serial}_{report}_{sensor_name}` +- Device Name: `{serial}` - Vendor Product Serial: serial number of the PowerOcean inverter -- Vendor Firmware Version: 5.1.8 -- Vendor Product Build: 13 +- Vendor Firmware Version: 5.1.15 +- Vendor Product Build: 6 ![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 ed8a539..c9bf830 100644 --- a/custom_components/powerocean/config_flow.py +++ b/custom_components/powerocean/config_flow.py @@ -142,13 +142,11 @@ 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=60): vol.All( - vol.Required("polling_time", default=5): vol.All( - vol.Coerce(int), vol.Clamp(min=60) + vol.Required("polling_time", default=10): vol.All( + vol.Coerce(int), vol.Clamp(min=5) ), vol.Required("group_sensors", default=True): bool, - #vol.Required("disable_sensors", default=False): bool, - vol.Required("disable_sensors", default=True): bool, + vol.Required("disable_sensors", default=False): bool, } ) diff --git a/custom_components/powerocean/const.py b/custom_components/powerocean/const.py index 708b90b..5f7c779 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" # Have requested to add logos via https://github.com/home-assistant/brands/pull/4904 +DOMAIN = "powerocean" NAME = "Ecoflow PowerOcean" -VERSION = "2024.01.01" -ISSUE_URL = "https://github.com/evercape/powerocean/issues" +VERSION = "2024.08.27" +ISSUE_URL = "https://github.com/niltrip/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 04d4517..70f70e4 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", + "internal_unique_id, serial, name, friendly_name, value, unit, description, icon", ) @@ -43,7 +43,7 @@ class Ecoflow: "vendor": "Ecoflow", "serial": self.sn, "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", "features": "Photovoltaik", } @@ -120,7 +120,6 @@ class Ecoflow: response = self.get_json_response(request) _LOGGER.debug(f"{response}") - _LOGGER.debug(f"{response['data']}") return self._get_sensors(response) @@ -136,7 +135,7 @@ class Ecoflow: def __get_unit(self, key): """Function get unit from key Name.""" - if key.endswith(("pwr", "Pwr")): + if key.endswith(("pwr", "Pwr", "Power")): unit = "W" elif key.endswith(("amp", "Amp")): unit = "A" @@ -233,6 +232,9 @@ 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, @@ -242,6 +244,7 @@ class Ecoflow: value=value, unit=self.__get_unit(key), description=self.__get_description(key), + icon=special_icon, ) return sensors @@ -270,6 +273,7 @@ class Ecoflow: # value=value, # unit=self.__get_unit(key), # description=self.__get_description(key), + # icon=None, # ) # dict.update(sensors, data) # @@ -307,6 +311,7 @@ class Ecoflow: value=value, unit=self.__get_unit(key), description=self.__get_description(key), + icon=None, ) dict.update(sensors, data) @@ -340,6 +345,9 @@ 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, @@ -348,6 +356,7 @@ class Ecoflow: value=value, unit=self.__get_unit(key), description=description_tmp, + icon=special_icon, ) # compute mean temperature of cells key = "bpTemp" @@ -363,6 +372,7 @@ class Ecoflow: value=value, unit=self.__get_unit(key), description=description_tmp, + icon=None, ) dict.update(sensors, data) @@ -376,6 +386,10 @@ class Ecoflow: sens_select = [ "bpRemainWatth", "emsBpAliveNum", + "emsBpPower", + "pcsActPwr", + "pcsMeterPower", + ] data = {} for key, value in d.items(): @@ -391,6 +405,7 @@ class Ecoflow: value=value, unit=self.__get_unit(key), description=description_tmp, + icon=None, ) # special for phases @@ -408,6 +423,7 @@ class Ecoflow: value=value, unit=self.__get_unit(key), description=self.__get_description(key), + icon=None, ) # special for mpptPv @@ -419,6 +435,11 @@ 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, @@ -428,6 +449,7 @@ 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": @@ -445,6 +467,7 @@ 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 351cd1d..b674693 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.01.01" + "version": "2024.08.27" } diff --git a/custom_components/powerocean/sensor.py b/custom_components/powerocean/sensor.py index 3a8957d..8152d8f 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 - self._icon = PowerOceanSensor.icon_mapper.get( - endpoint.unit - ) # Default handled in function + # Default handled in function + # self._icon = PowerOceanSensor.icon_mapper.get(endpoint.unit) + self._icon = endpoint.icon # The initial state/value of the sensor self._state = endpoint.value @@ -328,16 +328,21 @@ class PowerOceanSensor(SensorEntity): "manufacturer": "ECOFLOW", } - 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", - }, - ) + @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", + # }, + # ) # 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 new file mode 100644 index 0000000..fc36afd Binary files /dev/null and b/documentation/mpptPv_pwrTotal.PNG differ diff --git a/documentation/parameter_selected.json b/documentation/parameter_selected.json index 8709676..259a64c 100644 --- a/documentation/parameter_selected.json +++ b/documentation/parameter_selected.json @@ -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}" }, "JTS1_EMS_HEARTBEAT": { + "pcsBpPower": -512.94556, "pcsCPhase": { "vol": 238.08665, "amp": 1.032396, @@ -78,6 +79,8 @@ "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 new file mode 100644 index 0000000..dfe0fce --- /dev/null +++ b/documentation/response_modified_5_1_16_11.json @@ -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": "" +} \ No newline at end of file