berezhinskiy / ecoflow_exporter Goto Github PK
View Code? Open in Web Editor NEWPrometheus exporter for EcoFlow portable power stations
License: GNU General Public License v3.0
Prometheus exporter for EcoFlow portable power stations
License: GNU General Public License v3.0
Слава Україні!!!
River Pro
works fine too
except no metrics for charge/discharge time:
ecoflow_pd_remain_time
+ ecoflow_bms_master_amp
sign - not sure its OKdmytro.kulyk@MAC-570022 datalake % curl -s http://localhost:9090/metrics | grep "remain_time"
# HELP ecoflow_pd_remain_time value from MQTT object key pd.remainTime
# TYPE ecoflow_pd_remain_time gauge
ecoflow_pd_remain_time{device="device_no"} 162.0
Since Prometheus metrics are generated dynamically, it is required to implement validation to comply with the Prometheus data model
Stupid question but is it possible to add multiple devices?
I do see a valid token in the response but the data/user/name does not exist in the JSON.
There is: user_name = response["data"]["user"]["email"]
HACS is using:
user_name = response["data"]["user"].get("name", "")
The idea is to remove the prerequired step of obtaining MQTT credentials by a bash script. Python can do extraction logic. Environment variables MQTT_USERNAME
and MQTT_PASSWORD
will be changed to ECOFLOW_USERNAME
and ECOFLOW_PASSWORD
. I'd like to know the potential limitations of the number of mobile applications on EcoFlow's backend side since each new docker run will generate new MQTT credentials. Another option is to use MQTT_USERNAME
and MQTT_PASSWORD
in case the env vars are exists. Otherwise, MQTT credentials will be printed to STDOUT
My home Ecoflow setup consists of Ecoflow Delta Pro + Ecoflow Smart Home Panel
I'd like to be able to extract data from more than one Ecoflow device.
After reviving the code it seems the following would be needed to be done:
Alternatively, two instances of ecoflow_exporter can be launched to have one exporter per device.
First of all a HUGE THANKS for this repo! After two weeks of tinkering with Homeassistant on a Pi 4 and dependency hell I appreciate how smooth this went!
I have an overpaneled Delta 2 Max (2x2x455Wp) connected to a PowerStream w/ 2 additional 455 Wp panels and a smart-meter. (and 800 Wp w/o storage)
I want to control how much the PS delivers to the home depending on panel delivery by day, Delta charge status and power requirements signaled by the SHRDZM meter MQTT or Rest.
Thanks to your effort I can query the Delta. Anything that you want to hint when I want to control the PS via its API from what I learned from here and @vbash.
Thanks again!
G.
It seems something changed within the Ecoflow web architecture (needed to relogin with the phone etc) and since some hours, the tool is failing (wrong username/password).
The list of unsupported metrics from the logs for my Delta 2, as you've asked:
Hi - What would be the recommendation to monitor multiple Ecoflow River's? Just run multiple containers?
Thanks for the great work!
Thanks
Чи є якісь оновлення стосовно Charging Remaining Time для River Max?
Так і показує NO Data на відміну від Delta MAX.
First of all a HUGE thank you for a FANTASTIC job! Works perfectly with River 2 Pro.
So, questions.
How to track multiple devices? If i add second line with DEVICE_SN
into .env
then only the last entered serial number is used for pulling data. Adding the second number into Grafana dash gui does not work either, no data retrieved. Besides, even if only one serial is written in .env
still, the Grafana dashboard starts empty and i have to manually add the serial to it. Should it get the number from .env
?
How to use the device names instead of numbers? I assume, substitute the line of DEVICE_SN
with the DEVICE_NAME
?
After last update i see this in container logs
ecoflow_exporter | 2023-12-14 07:38:48,517 INFO Created new metric from payload key bms_slave_bmsSlaveStatus_1.soh -> ecoflow_bms_slave_bms_slave_status_1_soh
ecoflow_exporter | 2023-12-14 07:38:48,517 INFO Created new metric from payload key bms_slave_bmsSlaveStatus_1.tagChgAmp -> ecoflow_bms_slave_bms_slave_status_1_tag_chg_amp
ecoflow_exporter | 2023-12-14 07:38:48,517 INFO Created new metric from payload key bms_slave_bmsSlaveStatus_1.remainTime -> ecoflow_bms_slave_bms_slave_status_1_remain_time
ecoflow_exporter | 2023-12-14 07:38:48,518 INFO Created new metric from payload key bms_slave_bmsSlaveStatus_1.targetSoc -> ecoflow_bms_slave_bms_slave_status_1_target_soc
ecoflow_exporter | 2023-12-14 07:38:48,518 INFO Created new metric from payload key bms_slave_bmsSlaveStatus_1.bqSysStatReg -> ecoflow_bms_slave_bms_slave_status_1_bq_sys_stat_reg
ecoflow_exporter | 2023-12-14 07:38:48,518 INFO Created new metric from payload key bms_slave_bmsSlaveStatus_1.productType -> ecoflow_bms_slave_bms_slave_status_1_product_type
ecoflow_exporter | 2023-12-14 07:38:48,518 INFO Created new metric from payload key bms_slave_bmsSlaveStatus_1.minMosTemp -> ecoflow_bms_slave_bms_slave_status_1_min_mos_temp
ecoflow_exporter | 2023-12-14 07:38:48,519 INFO Created new metric from payload key bms_slave_bmsSlaveStatus_1.diffSoc -> ecoflow_bms_slave_bms_slave_status_1_diff_soc
ecoflow_exporter | 2023-12-14 07:38:48,519 INFO Created new metric from payload key bms_slave_bmsSlaveStatus_1.soc -> ecoflow_bms_slave_bms_slave_status_1_soc
ecoflow_exporter | 2023-12-14 07:38:48,519 INFO Created new metric from payload key bms_slave_bmsSlaveStatus_1.minCellTemp -> ecoflow_bms_slave_bms_slave_status_1_min_cell_temp
ecoflow_exporter | 2023-12-14 07:38:48,519 INFO Created new metric from payload key bms_slave_bmsSlaveStatus_1.packSn -> ecoflow_bms_slave_bms_slave_status_1_pack_sn
ecoflow_exporter | Traceback (most recent call last):
ecoflow_exporter | File "/ecoflow_exporter.py", line 365, in <module>
ecoflow_exporter | main()
ecoflow_exporter | File "/ecoflow_exporter.py", line 357, in main
ecoflow_exporter | metrics.loop()
ecoflow_exporter | File "/ecoflow_exporter.py", line 262, in loop
ecoflow_exporter | self.process_payload(params)
ecoflow_exporter | File "/ecoflow_exporter.py", line 292, in process_payload
ecoflow_exporter | metric.set(ecoflow_payload_value)
ecoflow_exporter | File "/ecoflow_exporter.py", line 217, in set
ecoflow_exporter | self.metric.labels(device=self.device_name).set(value)
ecoflow_exporter | File "/usr/local/lib/python3.11/site-packages/prometheus_client/metrics.py", line 417, in set
ecoflow_exporter | self._value.set(float(value))
ecoflow_exporter | ^^^^^^^^^^^^
ecoflow_exporter | ValueError: could not convert string to float: 'R361Z1B4HF5S0986'
ecoflow_exporter exited with code 1
R361Z1B4HF5S0986 is an extra battery serial number
Delta mini works fine too.
Thank you for your work.
Since yesterday 14th June 20123 we recognized friction in the logs and data visualisation outage after around one month of stable processing.
We installed the docker compose version from the commandline including alertmanager reporting to Telegram on May 30th on a MacMini M1 under Monterey and used Docker Desktop just to monitor the install.
We run an Ecoflow Delta Pro under latest Firmware V1.0.1.49, | V0.1.0 (WLAN) (not updated during use of ecoflow_exporter)
Everything worked fine except short interruptions due to network related external issues (Restarts etc.)
We also recognized short outages of receiving messages in the night at almost the same time when the Internet connection is shortly interrupted by the Provider.
Today we restarted the containers and for a short time everything went back to normal.
Then we received the "Message queue is empty. Assuming that the device is offline" messages again.
What we figured out is that the reporting from the Ecoflow server goes back to normal as long as a local iPhone with the Ecoflow app is actively communicating with the services. The Communication drops again when the app goes to background when closing the iPhone app screen (not the app) to the background.
This could be reproduced many times.
### usual messages before the issues (there are more different ones, but I omit them for now)
2023-06-14 08:05:45 ecoflow_exporter | 2023-06-14 06:05:45,741 INFO Processing 15 event(s) from the message queue
2023-06-14 08:05:55 ecoflow_exporter | 2023-06-14 06:05:55,759 INFO Processing 15 event(s) from the message queue
### goes offline
2023-06-14 08:06:05 ecoflow_exporter | 2023-06-14 06:06:05,772 INFO Message queue is empty. Assuming that the device is offline
2023-06-14 08:06:15 ecoflow_exporter | 2023-06-14 06:06:15,780 INFO Message queue is empty. Assuming that the device is offline
2
### messages after container restart
2023-06-15 16:24:08 ecoflow_exporter | 2023-06-15 14:24:08,139 INFO Login to EcoFlow API https://api.ecoflow.com/auth/login
2023-06-15 16:24:08 ecoflow_exporter | 2023-06-15 14:24:08,308 INFO Successfully logged in: [user]
2023-06-15 16:24:08 ecoflow_exporter | 2023-06-15 14:24:08,308 INFO Requesting IoT MQTT credentials https://api.ecoflow.com/iot-auth/app/certification
2023-06-15 16:24:08 ecoflow_exporter | 2023-06-15 14:24:08,423 INFO Successfully extracted account: app-******removed******
2023-06-15 16:24:08 ecoflow_exporter | 2023-06-15 14:24:08,443 INFO Connecting to MQTT Broker mqtt-e.ecoflow.com:8883 using client id ANDROID_******removed******
2023-06-15 16:24:08 ecoflow_exporter | 2023-06-15 14:24:08,682 INFO Subscribed to MQTT topic /app/device/property/******Ser#removed******
2023-06-15 16:24:18 ecoflow_exporter | 2023-06-15 14:24:18,635 INFO Processing 15 event(s) from the message queue
2023-06-15 16:24:18 ecoflow_exporter | 2023-06-15 14:24:18,636 INFO Created new metric from payload key pd.iconWifiMode -> ecoflow_pd_icon_wifi_mode
...
## Note: repeated many times for every property
...
2023-06-15 16:24:18 ecoflow_exporter | 2023-06-15 14:24:18,645 INFO Created new metric from payload key mppt.chgState -> ecoflow_mppt_chg_state
2023-06-15 16:24:28 ecoflow_exporter | 2023-06-15 14:24:28,653 INFO Processing 20 event(s) from the message queue
## now starts processing every 30 seconds 19 times written to the log and then goes offline
### goes online after iOS Device goes online
- 2023-06-15 11:55:52 ecoflow_exporter | 2023-06-15 09:55:52,441 INFO Processing 15 event(s) from the message queue'
2023-06-15 11:56:22 ecoflow_exporter | 2023-06-15 09:56:22,490 INFO Processing 18 event(s) from the message queue
2023-06-15 11:56:32 ecoflow_exporter | 2023-06-15 09:56:32,514 INFO Processing 16 event(s) from the message queue
2023-06-15 11:56:42 ecoflow_exporter | 2023-06-15 09:56:42,528 INFO Processing 15 event(s) from the message queue
2023-06-15 11:56:52 ecoflow_exporter | 2023-06-15 09:56:52,544 INFO Processing 10 event(s) from the message queue
### repeated after iOS goes offline until iOS Device goes online again
- 2023-06-15 15:45:28 ecoflow_exporter | 2023-06-15 13:45:28,007 INFO Message queue is empty. Assuming that the device is offline
### intermediate Grafana log messages
- 2023-06-15 15:49:27 grafana | logger=cleanup t=2023-06-15T13:49:27.38569113Z level=info msg="Completed cleanup jobs" duration=15.996333ms
2023-06-15 15:49:27 grafana | logger=grafana.update.checker t=2023-06-15T13:49:27.579195171Z level=info msg="Update check succeeded" duration=102.637208ms
2023-06-15 15:49:27 grafana | logger=plugins.update.checker t=2023-06-15T13:49:27.68191263Z level=info msg="Update check succeeded" duration=151.199709ms
### intermediate Prometheus log messages
2023-06-15 17:00:03 prometheus | ts=2023-06-15T15:00:03.132Z caller=compact.go:523 level=info component=tsdb msg="write block" mint=1686830400000 maxt=1686837600000 ulid=******removed****** duration=72.176208ms
2023-06-15 17:00:03 prometheus | ts=2023-06-15T15:00:03.137Z caller=head.go:1286 level=info component=tsdb msg="Head GC completed" caller=truncateMemory duration=1.818208ms
2023-06-15 17:00:03 prometheus | ts=2023-06-15T15:00:03.141Z caller=checkpoint.go:100 level=info component=tsdb msg="Creating checkpoint" from_segment=189 to_segment=191 mint=1686837600000
2023-06-15 17:00:03 prometheus | ts=2023-06-15T15:00:03.235Z caller=head.go:1254 level=info component=tsdb msg="WAL checkpoint complete" first=189 last=191 duration=93.9965ms
We get these alerts as well as follows:
After running the docker image with correct settings :
WARNING: Published ports are discarded when using host network mode
2024-05-05 10:07:14,636 INFO Login to EcoFlow API https://api.ecoflow.com/auth/login
2024-05-05 10:07:15,447 ERROR Failed to extract key 'name' from response:
...
Hello! Thanks for this exporter.
It is strange, but I have different parameters for my Delta Pro.
For instance, I have ecoflow_bms_master_f32_show_soc
instead of ecoflow_bms_bms_status_f32_show_soc
.
Have this behavior for all parameters prefixed with ecoflow_bms_bms_status
and ecoflow_bms_ems_status
.
How did you investigate it? How did you find info about MQTT messages and API? Thanks.
It should be possible to define custom value for device
label by setting DEVICE_NAME
environment variable. If not given, DEVICE_SN
will be exported.
device
label instead of device_sn
Hello,
how to monitor multiple Ecoflows and have their serial number available in the dropdown list in Grafana dashboard ?
I did try a lot of things suggested here but nothing works.
Thank you very much
Is it possible to add the version of the ecoflow exporter to the metrics please?
I'd like to get this data to allow Release-Argus to check the version it's running.
Delta 2 Max works fine.
Great work, thank you!
After plug smart extra battery have mostly NO DATA on dashboard.
In docker log have some like:
2024-06-27 09:38:02,067 INFO Created new metric from payload key bms_bmsStatus.actSoc -> ecoflow_bms_bms_status_act_soc 2024-06-27 09:38:02,067 WARNING Skipping unsupported metric bms_bmsStatus.cellVol: [3277, 3285, 3285, 3282, 3285, 3278, 3281, 3286, 3286, 3282, 3286, 3286] 2024-06-27 09:38:02,068 WARNING Skipping unsupported metric bms_slave.cellVol: [] 2024-06-27 09:38:02,069 WARNING Skipping unsupported metric bms_slave.cellTemp: [] 2024-06-27 09:38:12,070 INFO Processing 9 event(s) from the message queue 2024-06-27 09:38:12,072 WARNING Skipping unsupported metric bms_slave.cellVol: [] 2024-06-27 09:38:12,072 WARNING Skipping unsupported metric bms_slave.cellTemp: [] 2024-06-27 09:38:12,074 WARNING Skipping unsupported metric bms_slave.cellVol: [] 2024-06-27 09:38:12,075 WARNING Skipping unsupported metric bms_slave.cellTemp: [] 2024-06-27 09:38:12,077 WARNING Skipping unsupported metric bms_slave.cellVol: [] 2024-06-27 09:38:12,077 WARNING Skipping unsupported metric bms_slave.cellTemp: [] 2024-06-27 09:38:12,078 WARNING Skipping unsupported metric bms_slave.cellVol: [] 2024-06-27 09:38:12,079 WARNING Skipping unsupported metric bms_slave.cellTemp: [] 2024-06-27 09:38:12,081 WARNING Skipping unsupported metric bms_slave.cellVol: [] 2024-06-27 09:38:12,081 WARNING Skipping unsupported metric bms_slave.cellTemp: [] 2024-06-27 09:38:22,083 INFO Processing 10 event(s) from the message queue 2024-06-27 09:38:22,084 WARNING Skipping unsupported metric bms_slave.cellVol: [] 2024-06-27 09:38:22,085 WARNING Skipping unsupported metric bms_slave.cellTemp: [] 2024-06-27 09:38:22,086 WARNING Skipping unsupported metric bms_kitInfo.watts: [{'appState': 1, 'curPower': -24, 'appVer': 34275944, 'f32Soc': 59.8, 'soc': 60, 'avaFlag': 1, 'sn': 'R341Z1XXXXXXXXXXX', 'detail': 4, 'type': 80, 'loadVer': 34275328}, {'appState': 0, 'curPower': 0, 'appVer': 0, 'f32Soc': 0, 'soc': 0, 'avaFlag': 0, 'sn': '', 'detail': 0, 'type': 0, 'loadVer': 0}] 2024-06-27 09:38:22,088 WARNING Skipping unsupported metric bms_bmsStatus.cellTemp: [] 2024-06-27 09:38:22,088 WARNING Skipping unsupported metric bms_bmsStatus.cellVol: [3285, 3285, 3279, 3277, 3279, 3282, 3283, 3282, 3282, 3283, 3283] 2024-06-27 09:38:22,089 WARNING Skipping unsupported metric bms_slave.cellVol: [] 2024-06-27 09:38:22,090 WARNING Skipping unsupported metric bms_slave.cellTemp: [] 2024-06-27 09:38:22,090 WARNING Skipping unsupported metric pd.icoBytes: [32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 2024-06-27 09:38:22,092 WARNING Skipping unsupported metric bms_slave.cellVol: [] 2024-06-27 09:38:22,092 WARNING Skipping unsupported metric bms_slave.cellTemp: [] 2024-06-27 09:38:22,094 WARNING Skipping unsupported metric bms_slave.cellVol: [] 2024-06-27 09:38:22,095 WARNING Skipping unsupported metric bms_slave.cellTemp: [] 2024-06-27 09:38:32,096 INFO Processing 9 event(s) from the message queue 2024-06-27 09:38:32,098 WARNING Skipping unsupported metric bms_slave.cellVol: [] 2024-06-27 09:38:32,099 WARNING Skipping unsupported metric bms_slave.cellTemp: [] 2024-06-27 09:38:32,101 WARNING Skipping unsupported metric bms_slave.cellVol: []
where 'sn': 'R341Z1XXXXXXXXXXX', - is smart extra battery SN, it's can't add to mobile app
also in log
Traceback (most recent call last): File "/ecoflow_exporter.py", line 365, in <module> main() File "/ecoflow_exporter.py", line 357, in main metrics.loop() File "/ecoflow_exporter.py", line 262, in loop self.process_payload(params) File "/ecoflow_exporter.py", line 292, in process_payload metric.set(ecoflow_payload_value) File "/ecoflow_exporter.py", line 217, in set self.metric.labels(device=self.device_name).set(value) File "/usr/local/lib/python3.11/site-packages/prometheus_client/metrics.py", line 417, in set self._value.set(float(value)) ^^^^^^^^^^^^ ValueError: could not convert string to float: 'R341Z1XXXXXXXXXXX'
I'm trying to extract data from EcoFlow RIVER 2 with this exporter, and although the exporter provides data, it is not pulled by Grafana.
To reproduce the issue I create a docker-compose.yaml file with content:
grafana:
image: grafana/grafana-oss
ports: ["3000:3000"]
environment:
GF_LOG_LEVEL: debug
volumes:
- ./grafana-data:/var/lib/grafana
scrapper:
image: ghcr.io/berezhinskiy/ecoflow_exporter
environment:
DEVICE_SN: ddd
ECOFLOW_USERNAME: xxx
ECOFLOW_PASSWORD: "xxx"
Then while creating data source (type=Prometheus, URL 'http://scrapper:9090/') I see error message saying 'Error reading Prometheus: An error occurred within the plugin'.
Grafana logs say on debug level: 'msg="Processing metrics query" query="unsupported value type"', and nothing more interesting (or I don't know how to get to the actual error message).
Here is the datasource output:
# TYPE python_gc_objects_collected_total counter
python_gc_objects_collected_total{generation="0"} 928.0
python_gc_objects_collected_total{generation="1"} 469.0
python_gc_objects_collected_total{generation="2"} 0.0
# HELP python_gc_objects_uncollectable_total Uncollectable object found during GC
# TYPE python_gc_objects_uncollectable_total counter
python_gc_objects_uncollectable_total{generation="0"} 0.0
python_gc_objects_uncollectable_total{generation="1"} 0.0
python_gc_objects_uncollectable_total{generation="2"} 0.0
# HELP python_gc_collections_total Number of times this generation was collected
# TYPE python_gc_collections_total counter
python_gc_collections_total{generation="0"} 57.0
python_gc_collections_total{generation="1"} 5.0
python_gc_collections_total{generation="2"} 0.0
# HELP python_info Python platform information
# TYPE python_info gauge
python_info{implementation="CPython",major="3",minor="11",patchlevel="1",version="3.11.1"} 1.0
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
# TYPE process_virtual_memory_bytes gauge
process_virtual_memory_bytes 3.581952e+07
# HELP process_resident_memory_bytes Resident memory size in bytes.
# TYPE process_resident_memory_bytes gauge
process_resident_memory_bytes 2.8778496e+07
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
# TYPE process_start_time_seconds gauge
process_start_time_seconds 1.6735425705e+09
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
# TYPE process_cpu_seconds_total counter
process_cpu_seconds_total 0.8500000000000001
# HELP process_open_fds Number of open file descriptors.
# TYPE process_open_fds gauge
process_open_fds 8.0
# HELP process_max_fds Maximum number of open file descriptors.
# TYPE process_max_fds gauge
process_max_fds 1.048576e+06
# HELP ecoflow_online 1 if device is online
# TYPE ecoflow_online gauge
ecoflow_online{device="ddd"} 1.0
# HELP ecoflow_mqtt_messages_receive_total total MQTT messages
# TYPE ecoflow_mqtt_messages_receive_total counter
ecoflow_mqtt_messages_receive_total{device="ddd"} 153.0
# HELP ecoflow_mqtt_messages_receive_created total MQTT messages
# TYPE ecoflow_mqtt_messages_receive_created gauge
ecoflow_mqtt_messages_receive_created{device="ddd"} 1.6735425796005847e+09
# HELP ecoflow_bms_bms_status_output_watts value from MQTT object key bms_bmsStatus.outputWatts
# TYPE ecoflow_bms_bms_status_output_watts gauge
ecoflow_bms_bms_status_output_watts{device="ddd"} 80.0
# HELP ecoflow_bms_bms_status_max_cell_vol value from MQTT object key bms_bmsStatus.maxCellVol
# TYPE ecoflow_bms_bms_status_max_cell_vol gauge
ecoflow_bms_bms_status_max_cell_vol{device="ddd"} 3157.0
# HELP ecoflow_bms_bms_status_remain_cap value from MQTT object key bms_bmsStatus.remainCap
# TYPE ecoflow_bms_bms_status_remain_cap gauge
ecoflow_bms_bms_status_remain_cap{device="ddd"} 4104.0
# HELP ecoflow_bms_bms_status_amp value from MQTT object key bms_bmsStatus.amp
# TYPE ecoflow_bms_bms_status_amp gauge
ecoflow_bms_bms_status_amp{device="ddd"} -6.0
# HELP ecoflow_bms_bms_status_f32_show_soc value from MQTT object key bms_bmsStatus.f32ShowSoc
# TYPE ecoflow_bms_bms_status_f32_show_soc gauge
ecoflow_bms_bms_status_f32_show_soc{device="ddd"} 23.4
# HELP ecoflow_bms_bms_status_min_cell_vol value from MQTT object key bms_bmsStatus.minCellVol
# TYPE ecoflow_bms_bms_status_min_cell_vol gauge
ecoflow_bms_bms_status_min_cell_vol{device="ddd"} 3157.0
# HELP ecoflow_inv_output_watts value from MQTT object key inv.outputWatts
# TYPE ecoflow_inv_output_watts gauge
ecoflow_inv_output_watts{device="ddd"} 52.0
# HELP ecoflow_inv_inv_out_amp value from MQTT object key inv.invOutAmp
# TYPE ecoflow_inv_inv_out_amp gauge
ecoflow_inv_inv_out_amp{device="ddd"} 360.0
# HELP ecoflow_inv_inv_out_vol value from MQTT object key inv.invOutVol
# TYPE ecoflow_inv_inv_out_vol gauge
ecoflow_inv_inv_out_vol{device="ddd"} 229746.0
# HELP ecoflow_inv_ac_in_vol value from MQTT object key inv.acInVol
# TYPE ecoflow_inv_ac_in_vol gauge
ecoflow_inv_ac_in_vol{device="ddd"} 8100.0
# HELP ecoflow_bms_ems_status_f32_lcd_show_soc value from MQTT object key bms_emsStatus.f32LcdShowSoc
# TYPE ecoflow_bms_ems_status_f32_lcd_show_soc gauge
ecoflow_bms_ems_status_f32_lcd_show_soc{device="ddd"} 23.4
# HELP ecoflow_pd_car_used_time value from MQTT object key pd.carUsedTime
# TYPE ecoflow_pd_car_used_time gauge
ecoflow_pd_car_used_time{device="ddd"} 230291.0
# HELP ecoflow_pd_inv_used_time value from MQTT object key pd.invUsedTime
# TYPE ecoflow_pd_inv_used_time gauge
ecoflow_pd_inv_used_time{device="ddd"} 536788.0
# HELP ecoflow_pd_watts_out_sum value from MQTT object key pd.wattsOutSum
# TYPE ecoflow_pd_watts_out_sum gauge
ecoflow_pd_watts_out_sum{device="ddd"} 58.0
# HELP ecoflow_mppt_in_vol value from MQTT object key mppt.inVol
# TYPE ecoflow_mppt_in_vol gauge
ecoflow_mppt_in_vol{device="ddd"} 1068.0
# HELP ecoflow_mppt_out_vol value from MQTT object key mppt.outVol
# TYPE ecoflow_mppt_out_vol gauge
ecoflow_mppt_out_vol{device="ddd"} 12632.0
# HELP ecoflow_pd_car_watts value from MQTT object key pd.carWatts
# TYPE ecoflow_pd_car_watts gauge
ecoflow_pd_car_watts{device="ddd"} 4.0
# HELP ecoflow_inv_ac_in_freq value from MQTT object key inv.acInFreq
# TYPE ecoflow_inv_ac_in_freq gauge
ecoflow_inv_ac_in_freq{device="ddd"} 50.0
# HELP ecoflow_bms_ems_status_dsg_remain_time value from MQTT object key bms_emsStatus.dsgRemainTime
# TYPE ecoflow_bms_ems_status_dsg_remain_time gauge
ecoflow_bms_ems_status_dsg_remain_time{device="ddd"} 40.0
# HELP ecoflow_pd_remain_time value from MQTT object key pd.remainTime
# TYPE ecoflow_pd_remain_time gauge
ecoflow_pd_remain_time{device="ddd"} 41.0
# HELP ecoflow_mppt_in_amp value from MQTT object key mppt.inAmp
# TYPE ecoflow_mppt_in_amp gauge
ecoflow_mppt_in_amp{device="ddd"} 0.0
# HELP ecoflow_bms_ems_status_dsg_cmd value from MQTT object key bms_emsStatus.dsgCmd
# TYPE ecoflow_bms_ems_status_dsg_cmd gauge
ecoflow_bms_ems_status_dsg_cmd{device="ddd"} 1.0
# HELP ecoflow_bms_ems_status_chg_vol value from MQTT object key bms_emsStatus.chgVol
# TYPE ecoflow_bms_ems_status_chg_vol gauge
ecoflow_bms_ems_status_chg_vol{device="ddd"} 12.0
# HELP ecoflow_bms_ems_status_chg_remain_time value from MQTT object key bms_emsStatus.chgRemainTime
# TYPE ecoflow_bms_ems_status_chg_remain_time gauge
ecoflow_bms_ems_status_chg_remain_time{device="ddd"} 5999.0
# HELP ecoflow_bms_ems_status_max_charge_soc value from MQTT object key bms_emsStatus.maxChargeSoc
# TYPE ecoflow_bms_ems_status_max_charge_soc gauge
ecoflow_bms_ems_status_max_charge_soc{device="ddd"} 100.0
# HELP ecoflow_bms_ems_status_para_vol_max value from MQTT object key bms_emsStatus.paraVolMax
# TYPE ecoflow_bms_ems_status_para_vol_max gauge
ecoflow_bms_ems_status_para_vol_max{device="ddd"} 0.0
# HELP ecoflow_bms_ems_status_lcd_show_soc value from MQTT object key bms_emsStatus.lcdShowSoc
# TYPE ecoflow_bms_ems_status_lcd_show_soc gauge
ecoflow_bms_ems_status_lcd_show_soc{device="ddd"} 23.0
# HELP ecoflow_bms_ems_status_bms_model value from MQTT object key bms_emsStatus.bmsModel
# TYPE ecoflow_bms_ems_status_bms_model gauge
ecoflow_bms_ems_status_bms_model{device="ddd"} 0.0
# HELP ecoflow_bms_ems_status_chg_amp value from MQTT object key bms_emsStatus.chgAmp
# TYPE ecoflow_bms_ems_status_chg_amp gauge
ecoflow_bms_ems_status_chg_amp{device="ddd"} 0.0
# HELP ecoflow_bms_ems_status_chg_state value from MQTT object key bms_emsStatus.chgState
# TYPE ecoflow_bms_ems_status_chg_state gauge
ecoflow_bms_ems_status_chg_state{device="ddd"} 2.0
# HELP ecoflow_bms_ems_status_open_ups_flag value from MQTT object key bms_emsStatus.openUpsFlag
# TYPE ecoflow_bms_ems_status_open_ups_flag gauge
ecoflow_bms_ems_status_open_ups_flag{device="ddd"} 0.0
# HELP ecoflow_bms_ems_status_open_bms_idx value from MQTT object key bms_emsStatus.openBmsIdx
# TYPE ecoflow_bms_ems_status_open_bms_idx gauge
ecoflow_bms_ems_status_open_bms_idx{device="ddd"} 0.0
# HELP ecoflow_bms_ems_status_min_dsg_soc value from MQTT object key bms_emsStatus.minDsgSoc
# TYPE ecoflow_bms_ems_status_min_dsg_soc gauge
ecoflow_bms_ems_status_min_dsg_soc{device="ddd"} 0.0
# HELP ecoflow_bms_ems_status_para_vol_min value from MQTT object key bms_emsStatus.paraVolMin
# TYPE ecoflow_bms_ems_status_para_vol_min gauge
ecoflow_bms_ems_status_para_vol_min{device="ddd"} 0.0
# HELP ecoflow_bms_ems_status_min_open_oil_eb value from MQTT object key bms_emsStatus.minOpenOilEb
# TYPE ecoflow_bms_ems_status_min_open_oil_eb gauge
ecoflow_bms_ems_status_min_open_oil_eb{device="ddd"} 0.0
# HELP ecoflow_bms_ems_status_chg_cmd value from MQTT object key bms_emsStatus.chgCmd
# TYPE ecoflow_bms_ems_status_chg_cmd gauge
ecoflow_bms_ems_status_chg_cmd{device="ddd"} 1.0
# HELP ecoflow_bms_ems_status_max_avail_num value from MQTT object key bms_emsStatus.maxAvailNum
# TYPE ecoflow_bms_ems_status_max_avail_num gauge
ecoflow_bms_ems_status_max_avail_num{device="ddd"} 0.0
# HELP ecoflow_bms_ems_status_max_close_oil_eb value from MQTT object key bms_emsStatus.maxCloseOilEb
# TYPE ecoflow_bms_ems_status_max_close_oil_eb gauge
ecoflow_bms_ems_status_max_close_oil_eb{device="ddd"} 0.0
# HELP ecoflow_bms_ems_status_ems_is_normal_flag value from MQTT object key bms_emsStatus.emsIsNormalFlag
# TYPE ecoflow_bms_ems_status_ems_is_normal_flag gauge
ecoflow_bms_ems_status_ems_is_normal_flag{device="ddd"} 1.0
# HELP ecoflow_bms_ems_status_bms_war_state value from MQTT object key bms_emsStatus.bmsWarState
# TYPE ecoflow_bms_ems_status_bms_war_state gauge
ecoflow_bms_ems_status_bms_war_state{device="ddd"} 0.0
# HELP ecoflow_bms_ems_status_fan_level value from MQTT object key bms_emsStatus.fanLevel
# TYPE ecoflow_bms_ems_status_fan_level gauge
ecoflow_bms_ems_status_fan_level{device="ddd"} 0.0
# HELP ecoflow_bms_bms_status_sys_ver value from MQTT object key bms_bmsStatus.sysVer
# TYPE ecoflow_bms_bms_status_sys_ver gauge
ecoflow_bms_bms_status_sys_ver{device="ddd"} 3.3620282e+07
# HELP ecoflow_bms_bms_status_min_cell_temp value from MQTT object key bms_bmsStatus.minCellTemp
# TYPE ecoflow_bms_bms_status_min_cell_temp gauge
ecoflow_bms_bms_status_min_cell_temp{device="ddd"} 26.0
# HELP ecoflow_bms_bms_status_design_cap value from MQTT object key bms_bmsStatus.designCap
# TYPE ecoflow_bms_bms_status_design_cap gauge
ecoflow_bms_bms_status_design_cap{device="ddd"} 20000.0
# HELP ecoflow_bms_bms_status_temp value from MQTT object key bms_bmsStatus.temp
# TYPE ecoflow_bms_bms_status_temp gauge
ecoflow_bms_bms_status_temp{device="ddd"} 26.0
# HELP ecoflow_bms_bms_status_cycles value from MQTT object key bms_bmsStatus.cycles
# TYPE ecoflow_bms_bms_status_cycles gauge
ecoflow_bms_bms_status_cycles{device="ddd"} 27.0
# HELP ecoflow_bms_bms_status_type value from MQTT object key bms_bmsStatus.type
# TYPE ecoflow_bms_bms_status_type gauge
ecoflow_bms_bms_status_type{device="ddd"} 1.0
# HELP ecoflow_bms_bms_status_soh value from MQTT object key bms_bmsStatus.soh
# TYPE ecoflow_bms_bms_status_soh gauge
ecoflow_bms_bms_status_soh{device="ddd"} 0.0
# HELP ecoflow_bms_bms_status_max_cell_temp value from MQTT object key bms_bmsStatus.maxCellTemp
# TYPE ecoflow_bms_bms_status_max_cell_temp gauge
ecoflow_bms_bms_status_max_cell_temp{device="ddd"} 26.0
# HELP ecoflow_bms_bms_status_cell_id value from MQTT object key bms_bmsStatus.cellId
# TYPE ecoflow_bms_bms_status_cell_id gauge
ecoflow_bms_bms_status_cell_id{device="ddd"} 2.0
# HELP ecoflow_bms_bms_status_min_mos_temp value from MQTT object key bms_bmsStatus.minMosTemp
# TYPE ecoflow_bms_bms_status_min_mos_temp gauge
ecoflow_bms_bms_status_min_mos_temp{device="ddd"} 26.0
# HELP ecoflow_bms_bms_status_vol value from MQTT object key bms_bmsStatus.vol
# TYPE ecoflow_bms_bms_status_vol gauge
ecoflow_bms_bms_status_vol{device="ddd"} 12.0
# HELP ecoflow_bms_bms_status_remain_time value from MQTT object key bms_bmsStatus.remainTime
# TYPE ecoflow_bms_bms_status_remain_time gauge
ecoflow_bms_bms_status_remain_time{device="ddd"} 0.0
# HELP ecoflow_bms_bms_status_full_cap value from MQTT object key bms_bmsStatus.fullCap
# TYPE ecoflow_bms_bms_status_full_cap gauge
ecoflow_bms_bms_status_full_cap{device="ddd"} 17531.0
# HELP ecoflow_bms_bms_status_bq_sys_stat_reg value from MQTT object key bms_bmsStatus.bqSysStatReg
# TYPE ecoflow_bms_bms_status_bq_sys_stat_reg gauge
ecoflow_bms_bms_status_bq_sys_stat_reg{device="ddd"} 0.0
# HELP ecoflow_bms_bms_status_open_bms_idx value from MQTT object key bms_bmsStatus.openBmsIdx
# TYPE ecoflow_bms_bms_status_open_bms_idx gauge
ecoflow_bms_bms_status_open_bms_idx{device="ddd"} 1.0
# HELP ecoflow_bms_bms_status_num value from MQTT object key bms_bmsStatus.num
# TYPE ecoflow_bms_bms_status_num gauge
ecoflow_bms_bms_status_num{device="ddd"} 0.0
# HELP ecoflow_bms_bms_status_bms_fault value from MQTT object key bms_bmsStatus.bmsFault
# TYPE ecoflow_bms_bms_status_bms_fault gauge
ecoflow_bms_bms_status_bms_fault{device="ddd"} 0.0
# HELP ecoflow_bms_bms_status_soc value from MQTT object key bms_bmsStatus.soc
# TYPE ecoflow_bms_bms_status_soc gauge
ecoflow_bms_bms_status_soc{device="ddd"} 23.0
# HELP ecoflow_bms_bms_status_err_code value from MQTT object key bms_bmsStatus.errCode
# TYPE ecoflow_bms_bms_status_err_code gauge
ecoflow_bms_bms_status_err_code{device="ddd"} 0.0
# HELP ecoflow_bms_bms_status_input_watts value from MQTT object key bms_bmsStatus.inputWatts
# TYPE ecoflow_bms_bms_status_input_watts gauge
ecoflow_bms_bms_status_input_watts{device="ddd"} 0.0
# HELP ecoflow_bms_bms_status_tag_chg_amp value from MQTT object key bms_bmsStatus.tagChgAmp
# TYPE ecoflow_bms_bms_status_tag_chg_amp gauge
ecoflow_bms_bms_status_tag_chg_amp{device="ddd"} 20000.0
# HELP ecoflow_bms_bms_status_max_mos_temp value from MQTT object key bms_bmsStatus.maxMosTemp
# TYPE ecoflow_bms_bms_status_max_mos_temp gauge
ecoflow_bms_bms_status_max_mos_temp{device="ddd"} 26.0
# HELP ecoflow_pd_typec1_temp value from MQTT object key pd.typec1Temp
# TYPE ecoflow_pd_typec1_temp gauge
ecoflow_pd_typec1_temp{device="ddd"} 0.0
# HELP ecoflow_pd_qc_usb1_watts value from MQTT object key pd.qcUsb1Watts
# TYPE ecoflow_pd_qc_usb1_watts gauge
ecoflow_pd_qc_usb1_watts{device="ddd"} 0.0
# HELP ecoflow_pd_watts_in_sum value from MQTT object key pd.wattsInSum
# TYPE ecoflow_pd_watts_in_sum gauge
ecoflow_pd_watts_in_sum{device="ddd"} 0.0
# HELP ecoflow_pd_dc_in_used_time value from MQTT object key pd.dcInUsedTime
# TYPE ecoflow_pd_dc_in_used_time gauge
ecoflow_pd_dc_in_used_time{device="ddd"} 0.0
# HELP ecoflow_pd_wifi_ver value from MQTT object key pd.wifiVer
# TYPE ecoflow_pd_wifi_ver gauge
ecoflow_pd_wifi_ver{device="ddd"} 0.0
# HELP ecoflow_pd_ext3p8_port value from MQTT object key pd.ext3p8Port
# TYPE ecoflow_pd_ext3p8_port gauge
ecoflow_pd_ext3p8_port{device="ddd"} 0.0
# HELP ecoflow_pd_dsg_power_d_c value from MQTT object key pd.dsgPowerDC
# TYPE ecoflow_pd_dsg_power_d_c gauge
ecoflow_pd_dsg_power_d_c{device="ddd"} 0.0
# HELP ecoflow_pd_chg_power_d_c value from MQTT object key pd.chgPowerDC
# TYPE ecoflow_pd_chg_power_d_c gauge
ecoflow_pd_chg_power_d_c{device="ddd"} 0.0
# HELP ecoflow_pd_model value from MQTT object key pd.model
# TYPE ecoflow_pd_model gauge
ecoflow_pd_model{device="ddd"} 0.0
# HELP ecoflow_pd_wifi_auto_rcvy value from MQTT object key pd.wifiAutoRcvy
# TYPE ecoflow_pd_wifi_auto_rcvy gauge
ecoflow_pd_wifi_auto_rcvy{device="ddd"} 0.0
# HELP ecoflow_pd_standby_min value from MQTT object key pd.standbyMin
# TYPE ecoflow_pd_standby_min gauge
ecoflow_pd_standby_min{device="ddd"} 30.0
# HELP ecoflow_pd_beep_mode value from MQTT object key pd.beepMode
# TYPE ecoflow_pd_beep_mode gauge
ecoflow_pd_beep_mode{device="ddd"} 0.0
# HELP ecoflow_pd_typec_used_time value from MQTT object key pd.typecUsedTime
# TYPE ecoflow_pd_typec_used_time gauge
ecoflow_pd_typec_used_time{device="ddd"} 27.0
# HELP ecoflow_pd_typec2_watts value from MQTT object key pd.typec2Watts
# TYPE ecoflow_pd_typec2_watts gauge
ecoflow_pd_typec2_watts{device="ddd"} 0.0
# HELP ecoflow_pd_ext4p8_port value from MQTT object key pd.ext4p8Port
# TYPE ecoflow_pd_ext4p8_port gauge
ecoflow_pd_ext4p8_port{device="ddd"} 0.0
# HELP ecoflow_pd_bright_level value from MQTT object key pd.brightLevel
# TYPE ecoflow_pd_bright_level gauge
ecoflow_pd_bright_level{device="ddd"} 100.0
# HELP ecoflow_pd_typec_cha_watts value from MQTT object key pd.typecChaWatts
# TYPE ecoflow_pd_typec_cha_watts gauge
ecoflow_pd_typec_cha_watts{device="ddd"} 0.0
# HELP ecoflow_pd_usbqc_used_time value from MQTT object key pd.usbqcUsedTime
# TYPE ecoflow_pd_usbqc_used_time gauge
ecoflow_pd_usbqc_used_time{device="ddd"} 0.0
# HELP ecoflow_pd_dc_out_state value from MQTT object key pd.dcOutState
# TYPE ecoflow_pd_dc_out_state gauge
ecoflow_pd_dc_out_state{device="ddd"} 0.0
# HELP ecoflow_pd_chg_sun_power value from MQTT object key pd.chgSunPower
# TYPE ecoflow_pd_chg_sun_power gauge
ecoflow_pd_chg_sun_power{device="ddd"} 0.0
# HELP ecoflow_pd_car_temp value from MQTT object key pd.carTemp
# TYPE ecoflow_pd_car_temp gauge
ecoflow_pd_car_temp{device="ddd"} 0.0
# HELP ecoflow_pd_usb_used_time value from MQTT object key pd.usbUsedTime
# TYPE ecoflow_pd_usb_used_time gauge
ecoflow_pd_usb_used_time{device="ddd"} 0.0
# HELP ecoflow_pd_mppt_used_time value from MQTT object key pd.mpptUsedTime
# TYPE ecoflow_pd_mppt_used_time gauge
ecoflow_pd_mppt_used_time{device="ddd"} 0.0
# HELP ecoflow_pd_usb1_watts value from MQTT object key pd.usb1Watts
# TYPE ecoflow_pd_usb1_watts gauge
ecoflow_pd_usb1_watts{device="ddd"} 0.0
# HELP ecoflow_pd_dsg_power_a_c value from MQTT object key pd.dsgPowerAC
# TYPE ecoflow_pd_dsg_power_a_c gauge
ecoflow_pd_dsg_power_a_c{device="ddd"} 3646.0
# HELP ecoflow_pd_qc_usb2_watts value from MQTT object key pd.qcUsb2Watts
# TYPE ecoflow_pd_qc_usb2_watts gauge
ecoflow_pd_qc_usb2_watts{device="ddd"} 0.0
# HELP ecoflow_pd_wifi_rssi value from MQTT object key pd.wifiRssi
# TYPE ecoflow_pd_wifi_rssi gauge
ecoflow_pd_wifi_rssi{device="ddd"} 0.0
# HELP ecoflow_pd_wire_watts value from MQTT object key pd.wireWatts
# TYPE ecoflow_pd_wire_watts gauge
ecoflow_pd_wire_watts{device="ddd"} 0.0
# HELP ecoflow_pd_chg_power_a_c value from MQTT object key pd.chgPowerAC
# TYPE ecoflow_pd_chg_power_a_c gauge
ecoflow_pd_chg_power_a_c{device="ddd"} 7923.0
# HELP ecoflow_pd_lcd_off_sec value from MQTT object key pd.lcdOffSec
# TYPE ecoflow_pd_lcd_off_sec gauge
ecoflow_pd_lcd_off_sec{device="ddd"} 300.0
# HELP ecoflow_pd_ext_rj45_port value from MQTT object key pd.extRj45Port
# TYPE ecoflow_pd_ext_rj45_port gauge
ecoflow_pd_ext_rj45_port{device="ddd"} 0.0
# HELP ecoflow_pd_err_code value from MQTT object key pd.errCode
# TYPE ecoflow_pd_err_code gauge
ecoflow_pd_err_code{device="ddd"} 0.0
# HELP ecoflow_pd_sys_ver value from MQTT object key pd.sysVer
# TYPE ecoflow_pd_sys_ver gauge
ecoflow_pd_sys_ver{device="ddd"} 3.3620274e+07
# HELP ecoflow_pd_typec2_temp value from MQTT object key pd.typec2Temp
# TYPE ecoflow_pd_typec2_temp gauge
ecoflow_pd_typec2_temp{device="ddd"} 0.0
# HELP ecoflow_pd_typec1_watts value from MQTT object key pd.typec1Watts
# TYPE ecoflow_pd_typec1_watts gauge
ecoflow_pd_typec1_watts{device="ddd"} 0.0
# HELP ecoflow_pd_chg_dsg_state value from MQTT object key pd.chgDsgState
# TYPE ecoflow_pd_chg_dsg_state gauge
ecoflow_pd_chg_dsg_state{device="ddd"} 0.0
# HELP ecoflow_pd_usb2_watts value from MQTT object key pd.usb2Watts
# TYPE ecoflow_pd_usb2_watts gauge
ecoflow_pd_usb2_watts{device="ddd"} 0.0
# HELP ecoflow_pd_soc value from MQTT object key pd.soc
# TYPE ecoflow_pd_soc gauge
ecoflow_pd_soc{device="ddd"} 24.0
# HELP ecoflow_pd_car_state value from MQTT object key pd.carState
# TYPE ecoflow_pd_car_state gauge
ecoflow_pd_car_state{device="ddd"} 1.0
# HELP ecoflow_inv_dc_in_vol value from MQTT object key inv.dcInVol
# TYPE ecoflow_inv_dc_in_vol gauge
ecoflow_inv_dc_in_vol{device="ddd"} 0.0
# HELP ecoflow_inv_cfg_ac_work_mode value from MQTT object key inv.cfgAcWorkMode
# TYPE ecoflow_inv_cfg_ac_work_mode gauge
ecoflow_inv_cfg_ac_work_mode{device="ddd"} 0.0
# HELP ecoflow_inv_slow_chg_watts value from MQTT object key inv.SlowChgWatts
# TYPE ecoflow_inv_slow_chg_watts gauge
ecoflow_inv_slow_chg_watts{device="ddd"} 0.0
# HELP ecoflow_inv_dc_in_amp value from MQTT object key inv.dcInAmp
# TYPE ecoflow_inv_dc_in_amp gauge
ecoflow_inv_dc_in_amp{device="ddd"} 0.0
# HELP ecoflow_inv_cfg_ac_out_freq value from MQTT object key inv.cfgAcOutFreq
# TYPE ecoflow_inv_cfg_ac_out_freq gauge
ecoflow_inv_cfg_ac_out_freq{device="ddd"} 2.0
# HELP ecoflow_inv_err_code value from MQTT object key inv.errCode
# TYPE ecoflow_inv_err_code gauge
ecoflow_inv_err_code{device="ddd"} 0.0
# HELP ecoflow_inv_dc_in_temp value from MQTT object key inv.dcInTemp
# TYPE ecoflow_inv_dc_in_temp gauge
ecoflow_inv_dc_in_temp{device="ddd"} 0.0
# HELP ecoflow_inv_inv_out_freq value from MQTT object key inv.invOutFreq
# TYPE ecoflow_inv_inv_out_freq gauge
ecoflow_inv_inv_out_freq{device="ddd"} 50.0
# HELP ecoflow_inv_charger_type value from MQTT object key inv.chargerType
# TYPE ecoflow_inv_charger_type gauge
ecoflow_inv_charger_type{device="ddd"} 1.0
# HELP ecoflow_inv_ac_in_amp value from MQTT object key inv.acInAmp
# TYPE ecoflow_inv_ac_in_amp gauge
ecoflow_inv_ac_in_amp{device="ddd"} 48.0
# HELP ecoflow_inv_fan_state value from MQTT object key inv.fanState
# TYPE ecoflow_inv_fan_state gauge
ecoflow_inv_fan_state{device="ddd"} 0.0
# HELP ecoflow_inv_cfg_ac_xboost value from MQTT object key inv.cfgAcXboost
# TYPE ecoflow_inv_cfg_ac_xboost gauge
ecoflow_inv_cfg_ac_xboost{device="ddd"} 0.0
# HELP ecoflow_inv_cfg_ac_enabled value from MQTT object key inv.cfgAcEnabled
# TYPE ecoflow_inv_cfg_ac_enabled gauge
ecoflow_inv_cfg_ac_enabled{device="ddd"} 1.0
# HELP ecoflow_inv_out_temp value from MQTT object key inv.outTemp
# TYPE ecoflow_inv_out_temp gauge
ecoflow_inv_out_temp{device="ddd"} 33.0
# HELP ecoflow_inv_inv_type value from MQTT object key inv.invType
# TYPE ecoflow_inv_inv_type gauge
ecoflow_inv_inv_type{device="ddd"} 0.0
# HELP ecoflow_inv_cfg_ac_out_vol value from MQTT object key inv.cfgAcOutVol
# TYPE ecoflow_inv_cfg_ac_out_vol gauge
ecoflow_inv_cfg_ac_out_vol{device="ddd"} 0.0
# HELP ecoflow_inv_ac_dip_switch value from MQTT object key inv.acDipSwitch
# TYPE ecoflow_inv_ac_dip_switch gauge
ecoflow_inv_ac_dip_switch{device="ddd"} 0.0
# HELP ecoflow_inv_fast_chg_watts value from MQTT object key inv.FastChgWatts
# TYPE ecoflow_inv_fast_chg_watts gauge
ecoflow_inv_fast_chg_watts{device="ddd"} 0.0
# HELP ecoflow_inv_input_watts value from MQTT object key inv.inputWatts
# TYPE ecoflow_inv_input_watts gauge
ecoflow_inv_input_watts{device="ddd"} 0.0
# HELP ecoflow_inv_standby_mins value from MQTT object key inv.standbyMins
# TYPE ecoflow_inv_standby_mins gauge
ecoflow_inv_standby_mins{device="ddd"} 0.0
# HELP ecoflow_inv_chg_pause_flag value from MQTT object key inv.chgPauseFlag
# TYPE ecoflow_inv_chg_pause_flag gauge
ecoflow_inv_chg_pause_flag{device="ddd"} 0.0
# HELP ecoflow_inv_discharge_type value from MQTT object key inv.dischargeType
# TYPE ecoflow_inv_discharge_type gauge
ecoflow_inv_discharge_type{device="ddd"} 0.0
# HELP ecoflow_inv_sys_ver value from MQTT object key inv.sysVer
# TYPE ecoflow_inv_sys_ver gauge
ecoflow_inv_sys_ver{device="ddd"} 5.0397473e+07
# HELP ecoflow_mppt_car_out_vol value from MQTT object key mppt.carOutVol
# TYPE ecoflow_mppt_car_out_vol gauge
ecoflow_mppt_car_out_vol{device="ddd"} 0.0
# HELP ecoflow_mppt_car_state value from MQTT object key mppt.carState
# TYPE ecoflow_mppt_car_state gauge
ecoflow_mppt_car_state{device="ddd"} 1.0
# HELP ecoflow_mppt_discharge_type value from MQTT object key mppt.dischargeType
# TYPE ecoflow_mppt_discharge_type gauge
ecoflow_mppt_discharge_type{device="ddd"} 0.0
# HELP ecoflow_mppt_fault_code value from MQTT object key mppt.faultCode
# TYPE ecoflow_mppt_fault_code gauge
ecoflow_mppt_fault_code{device="ddd"} 4096.0
# HELP ecoflow_mppt_dc24v_state value from MQTT object key mppt.dc24vState
# TYPE ecoflow_mppt_dc24v_state gauge
ecoflow_mppt_dc24v_state{device="ddd"} 0.0
# HELP ecoflow_mppt_cfg_ac_xboost value from MQTT object key mppt.cfgAcXboost
# TYPE ecoflow_mppt_cfg_ac_xboost gauge
ecoflow_mppt_cfg_ac_xboost{device="ddd"} 1.0
# HELP ecoflow_mppt_car_temp value from MQTT object key mppt.carTemp
# TYPE ecoflow_mppt_car_temp gauge
ecoflow_mppt_car_temp{device="ddd"} 24.0
# HELP ecoflow_mppt_out_watts value from MQTT object key mppt.outWatts
# TYPE ecoflow_mppt_out_watts gauge
ecoflow_mppt_out_watts{device="ddd"} 0.0
# HELP ecoflow_mppt_sw_ver value from MQTT object key mppt.swVer
# TYPE ecoflow_mppt_sw_ver gauge
ecoflow_mppt_sw_ver{device="ddd"} 3.3620282e+07
# HELP ecoflow_mppt_x60_chg_type value from MQTT object key mppt.x60ChgType
# TYPE ecoflow_mppt_x60_chg_type gauge
ecoflow_mppt_x60_chg_type{device="ddd"} 0.0
# HELP ecoflow_mppt_car_out_amp value from MQTT object key mppt.carOutAmp
# TYPE ecoflow_mppt_car_out_amp gauge
ecoflow_mppt_car_out_amp{device="ddd"} 0.0
# HELP ecoflow_mppt_out_amp value from MQTT object key mppt.outAmp
# TYPE ecoflow_mppt_out_amp gauge
ecoflow_mppt_out_amp{device="ddd"} 0.0
# HELP ecoflow_mppt_chg_pause_flag value from MQTT object key mppt.chgPauseFlag
# TYPE ecoflow_mppt_chg_pause_flag gauge
ecoflow_mppt_chg_pause_flag{device="ddd"} 0.0
# HELP ecoflow_mppt_dcdc12v_watts value from MQTT object key mppt.dcdc12vWatts
# TYPE ecoflow_mppt_dcdc12v_watts gauge
ecoflow_mppt_dcdc12v_watts{device="ddd"} 0.0
# HELP ecoflow_mppt_ac_standby_mins value from MQTT object key mppt.acStandbyMins
# TYPE ecoflow_mppt_ac_standby_mins gauge
ecoflow_mppt_ac_standby_mins{device="ddd"} 60.0
# HELP ecoflow_mppt_pow_standby_min value from MQTT object key mppt.powStandbyMin
# TYPE ecoflow_mppt_pow_standby_min gauge
ecoflow_mppt_pow_standby_min{device="ddd"} 60.0
# HELP ecoflow_mppt_in_watts value from MQTT object key mppt.inWatts
# TYPE ecoflow_mppt_in_watts gauge
ecoflow_mppt_in_watts{device="ddd"} 0.0
# HELP ecoflow_mppt_dcdc12v_vol value from MQTT object key mppt.dcdc12vVol
# TYPE ecoflow_mppt_dcdc12v_vol gauge
ecoflow_mppt_dcdc12v_vol{device="ddd"} 0.0
# HELP ecoflow_mppt_scr_standby_min value from MQTT object key mppt.scrStandbyMin
# TYPE ecoflow_mppt_scr_standby_min gauge
ecoflow_mppt_scr_standby_min{device="ddd"} 300.0
# HELP ecoflow_mppt_car_out_watts value from MQTT object key mppt.carOutWatts
# TYPE ecoflow_mppt_car_out_watts gauge
ecoflow_mppt_car_out_watts{device="ddd"} 0.0
# HELP ecoflow_mppt_mppt_temp value from MQTT object key mppt.mpptTemp
# TYPE ecoflow_mppt_mppt_temp gauge
ecoflow_mppt_mppt_temp{device="ddd"} 0.0
# HELP ecoflow_mppt_cfg_ac_enabled value from MQTT object key mppt.cfgAcEnabled
# TYPE ecoflow_mppt_cfg_ac_enabled gauge
ecoflow_mppt_cfg_ac_enabled{device="ddd"} 1.0
# HELP ecoflow_mppt_chg_type value from MQTT object key mppt.chgType
# TYPE ecoflow_mppt_chg_type gauge
ecoflow_mppt_chg_type{device="ddd"} 0.0
# HELP ecoflow_mppt_dcdc12v_amp value from MQTT object key mppt.dcdc12vAmp
# TYPE ecoflow_mppt_dcdc12v_amp gauge
ecoflow_mppt_dcdc12v_amp{device="ddd"} 0.0
# HELP ecoflow_mppt_beep_state value from MQTT object key mppt.beepState
# TYPE ecoflow_mppt_beep_state gauge
ecoflow_mppt_beep_state{device="ddd"} 0.0
# HELP ecoflow_mppt_cfg_ac_out_vol value from MQTT object key mppt.cfgAcOutVol
# TYPE ecoflow_mppt_cfg_ac_out_vol gauge
ecoflow_mppt_cfg_ac_out_vol{device="ddd"} 230.0
# HELP ecoflow_mppt_cfg_chg_type value from MQTT object key mppt.cfgChgType
# TYPE ecoflow_mppt_cfg_chg_type gauge
ecoflow_mppt_cfg_chg_type{device="ddd"} 0.0
# HELP ecoflow_mppt_dc24v_temp value from MQTT object key mppt.dc24vTemp
# TYPE ecoflow_mppt_dc24v_temp gauge
ecoflow_mppt_dc24v_temp{device="ddd"} 0.0
# HELP ecoflow_mppt_car_standby_min value from MQTT object key mppt.carStandbyMin
# TYPE ecoflow_mppt_car_standby_min gauge
ecoflow_mppt_car_standby_min{device="ddd"} 0.0
# HELP ecoflow_mppt_dc_chg_current value from MQTT object key mppt.dcChgCurrent
# TYPE ecoflow_mppt_dc_chg_current gauge
ecoflow_mppt_dc_chg_current{device="ddd"} 8000.0
# HELP ecoflow_mppt_chg_state value from MQTT object key mppt.chgState
# TYPE ecoflow_mppt_chg_state gauge
ecoflow_mppt_chg_state{device="ddd"} 0.0
# HELP ecoflow_mppt_cfg_chg_watts value from MQTT object key mppt.cfgChgWatts
# TYPE ecoflow_mppt_cfg_chg_watts gauge
ecoflow_mppt_cfg_chg_watts{device="ddd"} 360.0
# HELP ecoflow_mppt_cfg_ac_out_freq value from MQTT object key mppt.cfgAcOutFreq
# TYPE ecoflow_mppt_cfg_ac_out_freq gauge
ecoflow_mppt_cfg_ac_out_freq{device="ddd"} 50.0
Any suggestions how to find the exact issue cause?
Thanks for this project.
I bought a River 2 Pro and wanted to know the cycle count because it is a sample/display model. It is unfortunate that the app does not provide this information.
After charging the display went from 0 cycles to what I can only assume is now the the actual cycle count (5).
Thank you again.
Let's put all eggs in one basket 😜
I have pointed https://github.com/brendanobra/ecoflow-prometheus-exporter to this project. This project is much more feature rich, thanks for the great work. I have just installed it in a k0s cluster and it's collecting from my Delta Pro and graphing nicely. Thanks!
According to best practices for naming metrics and labels, the voltage should be in volts
and the current in amperes
as base units. EcoFlow sends millivolts mV
and milliampere mA
.
It is possible to convert units by exporter since all voltage, and current JSON keys have _vol
and _amp
suffix accordingly. The only downside here - it will break Grafana dashboard backward compatibility. A new revision will be required. Historical data will be affected as well. Still determining if the game is worth the candle.
Please can you add integration for Delta Mini?, thanks in advance.
Please be sure to vote here if you need the arm64 package.
What is the current state of the API implementation?
I tried today for the first time and got no data so far.
Running on ubuntu (docker)
~$ docker run --rm \
-e DEVICE_SN=R33************* \
-e ECOFLOW_USERNAME=************** \
-e ECOFLOW_PASSWORD=********** \
-it -p 9090:9090 ghcr.io/berezhinskiy/ecoflow_exporter
2023-03-09 02:54:16,295 INFO Login to EcoFlow API https://api.ecoflow.com/auth/login
2023-03-09 02:54:16,891 INFO Successfully logged in: Ecoflow User
2023-03-09 02:54:16,891 INFO Requesting IoT MQTT credentials https://api.ecoflow.com/iot-auth/app/certification
2023-03-09 02:54:17,464 INFO Successfully extracted account: app-8cc8****************************
2023-03-09 02:54:17,509 INFO Connecting to MQTT Broker mqtt.ecoflow.com:8883
2023-03-09 02:54:18,085 INFO Subscribed to MQTT topic /app/device/property/R33*************
2023-03-09 02:54:22,895 INFO Message queue is empty. Assuming that the device is offline
2023-03-09 02:54:27,896 INFO Message queue is empty. Assuming that the device is offline
2023-03-09 02:54:32,896 INFO Message queue is empty. Assuming that the device is offline
2023-03-09 02:54:37,896 INFO Message queue is empty. Assuming that the device is offline
2023-03-09 02:54:42,896 INFO Message queue is empty. Assuming that the device is offline
2023-03-09 02:54:47,897 INFO Message queue is empty. Assuming that the device is offline
2023-03-09 02:54:52,897 INFO Message queue is empty. Assuming that the device is offline
2023-03-09 02:54:57,897 INFO Message queue is empty. Assuming that the device is offline
2023-03-09 02:55:02,898 INFO Message queue is empty. Assuming that the device is offline
Exporter output
~$ curl --silent http://localhost:9090/
# HELP python_gc_objects_collected_total Objects collected during gc
# TYPE python_gc_objects_collected_total counter
python_gc_objects_collected_total{generation="0"} 308.0
python_gc_objects_collected_total{generation="1"} 235.0
python_gc_objects_collected_total{generation="2"} 0.0
# HELP python_gc_objects_uncollectable_total Uncollectable object found during GC
# TYPE python_gc_objects_uncollectable_total counter
python_gc_objects_uncollectable_total{generation="0"} 0.0
python_gc_objects_uncollectable_total{generation="1"} 0.0
python_gc_objects_uncollectable_total{generation="2"} 0.0
# HELP python_gc_collections_total Number of times this generation was collected
# TYPE python_gc_collections_total counter
python_gc_collections_total{generation="0"} 54.0
python_gc_collections_total{generation="1"} 4.0
python_gc_collections_total{generation="2"} 0.0
# HELP python_info Python platform information
# TYPE python_info gauge
python_info{implementation="CPython",major="3",minor="11",patchlevel="1",version="3.11.1"} 1.0
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
# TYPE process_virtual_memory_bytes gauge
process_virtual_memory_bytes 3.5926016e+07
# HELP process_resident_memory_bytes Resident memory size in bytes.
# TYPE process_resident_memory_bytes gauge
process_resident_memory_bytes 2.6157056e+07
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
# TYPE process_start_time_seconds gauge
process_start_time_seconds 1.67833045501e+09
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
# TYPE process_cpu_seconds_total counter
process_cpu_seconds_total 2.2800000000000002
# HELP process_open_fds Number of open file descriptors.
# TYPE process_open_fds gauge
process_open_fds 9.0
# HELP process_max_fds Maximum number of open file descriptors.
# TYPE process_max_fds gauge
process_max_fds 1.048576e+06
# HELP ecoflow_online 1 if device is online
# TYPE ecoflow_online gauge
ecoflow_online{device="R33*************"} 0.0
# HELP ecoflow_mqtt_messages_receive_total total MQTT messages
# TYPE ecoflow_mqtt_messages_receive_total counter
The app can access the device.
I tried so far:
Can anyone confirm this currently working?
I believe that most people don't care how it is implemented. MQTT word can confuse and leads to misunderstanding. What do you think about renaming this project to ecoflow_exporter
?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.