Simulated OpenEMS Components

This bundle provides simulated OpenEMS Components for the Natures. They are useful for testing and demoing without real hardware.

Simulator-App

The Simulator-App is a very specific component that needs to be handled with care. It provides a full simulation environment to run an OpenEMS Edge instance in simulated realtime environment. After you ran a Simulation, you will receive the simulation result as a JSON. Also the simulation result can be viewed in OpenEMS UI.

Be aware that the SimulatorApp Component takes control over the complete OpenEMS Edge Application, i.e. if you enable it, it is going to delete all existing Component configurations!

To run a simulation:

  1. Run OpenEMS Edge using the EdgeApp.bndrun

  2. Open up Apache Felix Web Console and

    1. activate a "Controller Api REST/JSON Read-Write"

    2. activate a "Simulator App"

  3. Send a JSON-RPC Request like the following, providing full configurations for all required OpenEMS Edge Components

{
   "method":"componentJsonApi",
   "params":{
      "componentId":"_simulator",
      "payload":{
         "method":"executeSimulation",
         "params":{
            "components":[
               {
                  "factoryPid":"Scheduler.AllAlphabetically",
                  "properties":[
                     {
                        "name":"id",
                        "value":"scheduler0"
                     }
                  ]
               },
               {
                  "factoryPid":"Simulator.GridMeter.Reacting",
                  "properties":[
                     {
                        "name":"id",
                        "value":"meter0"
                     }
                  ]
               },
               {
                  "factoryPid":"Simulator.NRCMeter.Acting",
                  "properties":[
                     {
                        "name":"id",
                        "value":"meter1"
                     },
                     {
                        "name":"alias",
                        "value":"Consumption"
                     },
                     {
                        "name":"datasource.id",
                        "value":"_simulator"
                     }
                  ]
               },
               {
                  "factoryPid":"Simulator.ProductionMeter.Acting",
                  "properties":[
                     {
                        "name":"id",
                        "value":"meter2"
                     },
                     {
                        "name":"alias",
                        "value":"South Roof"
                     },
                     {
                        "name":"datasource.id",
                        "value":"_simulator"
                     }
                  ]
               },
               {
                  "factoryPid":"Simulator.EssSymmetric.Reacting",
                  "properties":[
                     {
                        "name":"id",
                        "value":"ess0"
                     },
                     {
                        "name":"maxApparentPower",
                        "value":10000
                     },
                     {
                        "name":"capacity",
                        "value":10200
                     },
                     {
                        "name":"initialSoc",
                        "value":50
                     }
                  ]
               },
               {
                  "factoryPid":"Controller.Symmetric.Balancing",
                  "properties":[
                     {
                        "name":"id",
                        "value":"ctrlBalancing0"
                     },
                     {
                        "name":"ess.id",
                        "value":"ess0"
                     },
                     {
                        "name":"meter.id",
                        "value":"meter0"
                     }
                  ]
               }
            ],
            "clock":{
               "start":"2000-01-01T00:00:00.00Z",
               "end":"2000-01-08T00:00:00.00Z",
               "timeleapPerCycle":900000,
               "executeCycleTwice":true
            },
            "profiles":{
               "meter1/ActivePower": [436,404,373,344,316,290,267,248,236,227,220,216,211,207,203,199,196,193,192,191,191,191,193,195,198,201,206,211,219,232,254,290,342,405,474,543,607,666,719,767,810,849,886,924,962,999,1029,1049,1055,1047,1025,990,944,890,833,779,732,692,658,630,607,588,572,555,539,527,524,535,562,602,647,692,731,764,795,825,854,878,892,887,861,820,775,733,704,683,666,646,621,591,556,518,479,440,402,364,436,404,374,345,316,290,267,249,236,227,220,216,211,207,203,199,196,193,192,191,191,191,193,195,198,201,206,211,219,232,255,291,342,405,475,544,608,667,720,768,811,850,888,926,964,1000,1030,1050,1056,1048,1027,992,945,891,834,780,733,693,659,631,608,589,572,556,540,528,525,536,563,603,648,693,732,765,796,826,855,880,893,888,862,821,776,735,705,684,667,647,622,591,556,519,480,441,402,365,338,304,274,249,231,218,209,204,200,198,197,195,194,193,191,191,192,194,196,200,204,215,238,279,340,413,489,557,607,642,663,673,676,673,665,653,638,622,607,594,586,580,578,578,580,584,593,607,626,647,664,673,670,658,639,619,600,583,568,553,539,527,517,511,510,515,527,549,579,618,662,711,761,810,855,893,922,940,943,931,902,862,818,777,744,716,691,665,635,602,566,528,489,450,412,374,338,304,275,250,231,218,210,204,201,198,197,196,194,193,192,192,192,194,197,200,205,216,239,279,340,414,490,558,608,643,664,674,677,674,666,654,639,623,608,595,587,581,579,579,581,585,594,608,627,648,665,674,671,659,640,620,601,584,569,554,540,528,518,512,511,516,528,550,580,619,663,712,762,811,856,895,924,941,945,932,904,864,820,778,745,717,692,666,636,603,567,529,490,451,413,375,338,304,275,250,231,218,210,204,201,198,197,196,194,193,192,192,192,194,197,200,205,216,239,279,340,415,491,558,609,643,664,675,678,675,666,654,639,624,608,596,587,582,579,579,581,586,594,608,628,649,666,675,672,659,641,621,602,585,569,554,540,528,518,513,512,517,529,550,581,619,664,712,763,812,857,896,925,942,946,933,905,865,820,779,745,718,693,667,637,603,567,529,491,452,413,375,339,305,275,250,232,219,210,204,201,198,197,196,194,193,192,192,192,194,197,200,205,216,239,280,341,415,491,559,609,644,665,676,679,676,667,655,640,624,609,596,588,582,580,580,582,586,595,609,628,649,667,676,673,660,641,621,602,585,570,555,541,529,519,513,512,517,529,551,581,620,665,713,764,813,858,897,926,943,947,934,906,865,821,780,746,719,694,668,637,604,568,530,491,452,413,375,339,305,275,250,232,219,210,205,201,199,198,196,195,194,192,192,193,195,197,201,205,216,239,280,341,415,492,559,610,645,666,676,679,676,668,656,641,625,609,597,588,583,580,580,582,587,595,609,629,650,667,676,673,661,642,622,603,586,570,555,541,529,519,514,513,518,530,551,582,621,665,714,764,814,859,897,927,944,948,935,906,866,822,781,747,719,694,668,638,604,568,530,492,452,414,376],
               "meter2/ActivePower": [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,0,0,4,24,100,250,277,345,449,457,535,530,575,770,862,720,779,808,638,552,457,440,574,537,499,356,216,267,180,180,147,102,19,4,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,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,6,23,105,162,223,271,309,370,431,463,514,481,463,516,467,406,375,361,401,387,372,345,334,337,312,275,229,184,141,96,20,4,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,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,5,20,74,134,173,209,254,275,302,331,380,419,437,471,410,441,444,410,394,400,396,384,387,391,350,291,260,208,140,74,20,5,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,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,3,24,130,215,278,378,443,529,534,568,797,726,618,766,703,802,809,755,783,682,633,672,590,629,515,523,403,318,251,171,31,3,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,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,26,56,336,1979,945,2897,3580,2510,3097,3499,5616,6327,2631,898,3859,3909,4931,3683,5996,1777,3615,3415,1601,1254,4954,4145,3426,1163,101,457,27,5,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,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,6,21,65,25,48,84,108,125,123,99,84,119,214,202,183,104,151,450,881,1878,3424,5211,4329,3986,1796,1904,1618,1173,646,758,50,13,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,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,13,35,104,163,246,349,329,406,387,379,457,396,488,530,540,591,835,774,740,569,549,542,524,549,471,446,337,234,192,110,30,7,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]
            },
            "collect":[
               "_sum/GridActivePower",
               "_sum/EssActivePower",
               "_sum/ProductionActivePower",
               "_sum/ConsumptionActivePower",
               "_sum/EssSoc"
            ]
         }
      }
   }
}

Datasources

Datasources provide input data for simulated components. There are several types available:

CSV Datasources

  • Simulator.Datasource.CSV.Direct - Reads data directly from a CSV string provided in the configuration.

  • Simulator.Datasource.CSV.Predefined - Reads data from predefined CSV files bundled with OpenEMS (e.g., standard load profiles).

Single Value Datasources

  • Simulator.Datasource.Single.Direct - Provides a single data channel with values defined as an integer array in the configuration.

  • Simulator.Datasource.Single.Channel - Provides a single data channel that can be set dynamically via a writable channel. This is useful for external testing scenarios where production/consumption data needs to be injected at runtime.

Using Simulator.Datasource.Single.Channel

This datasource allows setting simulation values externally via REST API or other channel write mechanisms.

Example: Setting consumption data via REST API
# Set consumption to 6000 W
curl -d '{"value":6000}' http://admin:admin@localhost:8084/rest/channel/simulateConsumption/Data

# Verify the value was set
curl http://admin:admin@localhost:8084/rest/channel/_sum/ConsumptionActivePower
Configuration example
{
  "factoryPid": "Simulator.Datasource.Single.Channel",
  "properties": [
    {
      "name": "id",
      "value": "simulateConsumption"
    },
    {
      "name": "enabled",
      "value": true
    }
  ]
}

The datasource exposes a Data channel with read/write access. When a value is written to this channel, it immediately becomes available as the datasource’s output value. If no value has been set, the default value is 0.