Basic functions and configuration questions

Hi All,

Pretty excited to start playing around on the open EMS platform. I have gone trough the getting started page as well as writing your own drivers and have a couple of questions.

  1. Do you perhaps have an example of doing a block register read and then breaking that up into the individual signals? I have looked into the sunspec drivers, but I do not find the actual register map? :frowning:
  2. How would one go about displaying or having access to these values from the UI for both visualisation and download?

Looking forward to learning some more. On that note, is there some course that you offer to get up to speed quicker? I think that would be great!


Hi Bartho and welcome to the OpenEMS community. Pretty excited to have you here! :wink:

1.) The SunSpec implementation is quite complicated if you are just starting, because it has to be very generic and dynamic. If you are not implementing a device that supports SunSpec, it is much easier to just hard-code the modbus protocol - just like its done in the “Implementing a Device” tutorial (Implementing a device :: Open Energy Management System)

For a more realistic example, you can e.g. read the implementation of the Siemens PAC meter (openems/ at develop · OpenEMS/openems · GitHub). The modbus protocol definition inside defineModbusProtocol() defines two modbus read tasks (FC3ReadRegistersTask). The individual registers are then split into OpenEMS Channels.

The OpenEMS Modbus Bridge will continuously execute those two FC3 read requests, split the response and write the individual signals/values into the Channels.

2.) If you implement something that is already existing in OpenEMS (e.g. a energy storage system, a grid/production/consumption meter, etc.), your implementation should implement the appropriate Nature (i.e. the Java interface) and map modbus registers to the required Channels (e.g. ACTIVE_POWER or SOC for battery state of charge). OpenEMS UI should then automatically pick these values up and display them nicely.

If you want to read other data or a lot of different values, it is common practice to not use OpenEMS UI for the visualization. Instead write the data to an InfluxDB time series database (using openems/io.openems.edge.timedata.influxdb at develop · OpenEMS/openems · GitHub) and visualize the data from there using Grafana (

Unfortunately there are no ‘courses’ on OpenEMS yet and we know that documentation is lacking a lot of details. Sorry.


Hi Stefan,

Thanks very much for the in depth explanation on how to get things going. I will follow the Grafana route for now, I have heard good things about it!