Battery storage systems, paired with energy management systems (EMS), play an increasingly critical role in stabilizing power grids and integrating renewable energy sources. These systems generate a massive volume of time-series data, including real-time metrics on voltage, current, state of charge, temperature, and system performance.
However, managing this data is no easy task. Challenges include ensuring high-frequency data ingestion, maintaining long-term storage without compromising query performance, synchronizing data from multiple distributed assets, and enabling real-time analytics for monitoring and optimization. Without a robust data infrastructure, the true value of battery storage and EMS data can remain untapped.
To help battery storage enterprises realize the benefits of improving their data infrastructure, TDengine has made public a demo environment that simulates the storage and processing of EMS data. In our environment, this data is generated by an MQTT simulator and then sent to an MQTT broker, which forwards it to a TDengine deployment at the edge. This data is then replicated to a centrally deployed TDengine instance, showcasing TDengine’s high-performance data ingestion, efficient storage and compression, and edge–cloud synchronization features. Finally, a Grafana instance is deployed to monitor and visualize the deployment.

With our public repository, you can easily test TDengine in an EMS scenario. The repository includes a Docker Compose script with which you can set up a test environment on your local machine, make changes and see them reflected in TDengine, and view performance test results.
1. Create Demo Environment
Ensure that you have installed Git and Docker on your machine. Then clone the repository:
git clone https://github.com/taosdata/ems
In the docker-compose
directory within the cloned repository, start the demo environment with Docker Compose:
cd ems/docker-compose
docker compose up -d
Once the images have been downloaded and the containers have been started, you can view the demo environment in Docker:

2. Use Demo Environment
In a web browser, open http://127.0.0.1:7060 to view the GUI for the edge TDengine Enterprise instance. Log in with the default username root
and password taosdata
. From the main menu on the left, click Data In to see the MQTT ingestion tasks:

These tasks are ingesting data from the MQTT broker and storing it on the edge node. From the main menu, click Explorer to view the ingested data:

You can see that supertables have been created and incoming data is being stored at the edge.
For edge–cloud synchronization, open http://127.0.0.1:16060 in a web browser to view the GUI for the central (cloud) TDengine Enterprise instance. Log in with the default username root
and password taosdata
. From the main menu on the left, click Data In to see the TDengine 3.x replication task:

Then click Explorer in the main menu. The supertables from the edge node have been replicated to the central node, and the same data is contained within them.

To view information about your cluster, you can open http://127.0.0.1:13000 in a web browser and use Grafana. Log in with the default username admin
and password admin
. The Grafana container has been preconfigured with TDinsight, a set of dashboards designed to monitor TDengine and show key statistics about your deployment.

You can also create custom dashboards using the preinstalled TDengine data source to view the simulated data being ingested.
You can modify this containerized setup to adapt it to your own environment or data ingestion requirements and see immediately how TDengine would perform in a given scenario. You can also spin up additional containers if you would like to test synchronization on a larger scale. For detailed information about configuring and using the demo environment, see https://github.com/taosdata/ems/tree/main/docker-compose.
3. View Test Results
When you spin up the Docker containers with Docker Compose, the TDengine client node automatically runs basic performance tests. Note that these tests are running in a containerized environment with limited resources, and do not necessarily reflect the performance you can achieve with dedicated servers.
To view the test results, open the docker-compose/report
directory in the repository. When the client node begins running tests, it creates a subdirectory in this location with the date and time that the tests were run. You can see the results for the central and edge nodes in the summary
directory or see all recorded information in the details
directory.