Can you please describe your issue more precise?
Thank you in advance.
I post json file for simulatorapp but tell me āUnable to get Response: A Singleton Component for PID [Ess.Power] is already existing!ā
What are you trying to do?
What you posted is clear for sureā¦
ā¦ if somebody else is willing to look into the magic glass bowl go for itā¦ i dont know what you are trying to do
It is indeed not very clear what you are trying to do. All I can say is that there is a singleton component with PID āEss.Powerā and Component-ID ā_powerā, which is automatically activated. Maybe, from the error message, you are tring to activate a second one?
We canāt see your full Json-RPC request in the picture, it would help if we can fully see it.
I have the same problem, trying to follow the instructions for creating a simulator App at openems/io.openems.edge.simulator/readme.adoc at develop Ā· OpenEMS/openems Ā· GitHub but it seems this Ess.Power with id _power is created on run.EdgeApp. But I havenāt specified any Ess.Power in my JsonRPC so I guess that the _simulator tries to create a new one, but fails due to there already being one.
2024-05-30T13:19:13,535 [4573-145] INFO [ontroller.api.rest.RestHandler] [ctrlApiRest0] REST/JsonRpc call by User [Admin]: {"method":"componentJsonApi","params":{"componentId":"_simulator","payload":{"method":"executeSim...
2024-05-30T13:19:13,535 [4573-145] INFO [simulator.app.SimulatorAppImpl] [_simulator] Starting Simulation
2024-05-30T13:19:13,535 [4573-145] INFO [simulator.app.SimulatorAppImpl] [_simulator] Delete Component [_evcsSlowPowerIncreaseFilter]
2024-05-30T13:19:13,540 [4573-145] INFO [simulator.app.SimulatorAppImpl] [_simulator] Delete Component [_power]
2024-05-30T13:19:13,542 [eFilter)] INFO [onent.AbstractOpenemsComponent] [_evcsSlowPowerIncreaseFilter] Modified Evcs.SlowPowerIncreaseFilter
2024-05-30T13:19:13,586 [eFilter)] INFO [onent.AbstractOpenemsComponent] [_evcsSlowPowerIncreaseFilter] Modified Evcs.SlowPowerIncreaseFilter
2024-05-30T13:19:13,591 [s.Power)] INFO [onent.AbstractOpenemsComponent] [_power] Modified Ess.Power
2024-05-30T13:19:13,594 [4573-145] INFO [simulator.app.SimulatorAppImpl] [_simulator] All Components are deactivated!
2024-05-30T13:19:13,629 [s.Power)] INFO [onent.AbstractOpenemsComponent] [_power] Modified Ess.Power
2024-05-30T13:19:13,630 [e.Cycle)] INFO [onent.AbstractOpenemsComponent] [_cycle] Modified Core.Cycle
2024-05-30T13:19:13,632 [e.Cycle)] INFO [onent.AbstractOpenemsComponent] [_cycle] Modified Core.Cycle
And the response is the same as OPs
{
"jsonrpc": "2.0",
"id": "c1d16b8d-ea7b-4e73-a2ac-227f97e66e41",
"error": {
"code": 1,
"message": "Unable to get Response: A Singleton Component for PID [Ess.Power] is already existing!",
"data": [
"Unable to get Response: A Singleton Component for PID [Ess.Power] is already existing!"
]
}
}
Iām trying to start a simulation with the configuration from our dev env with this JsonRPC:
{
"method": "componentJsonApi",
"params": {
"componentId": "_simulator",
"payload": {
"method": "executeSimulation",
"params": {
"components": [
{
"factoryPid": "Controller.Api.ModbusTcp.ReadOnly",
"properties": [
{
"name": "id",
"value": "ctrlApiModbusTcp0"
},
{
"name": "component.ids",
"value": [
"_sum"
]
},
{
"name": "maxConcurrentConnections",
"value": 5
},
{
"name": "port",
"value": 502
},
{
"name": "enabled",
"value": false
}
]
},
{
"factoryPid": "Controller.Api.Websocket",
"properties": [
{
"name": "id",
"value": "ctrlApiRest0"
},
{
"name": "apiTimeout",
"value": 60
},
{
"name": "port",
"value": 8085
},
{
"name": "enabled",
"value": true
}
]
},
{
"factoryPid": "Controller.CHP.SoC",
"properties": [
{
"name": "id",
"value": "ctrlChpSoc0"
},
{
"name": "alias",
"value": "Control CHP (BHKW)"
},
{
"name": "highThreshold",
"value": 80
},
{
"name": "inputChannelAddress",
"value": "_sum/EssSoc"
},
{
"name": "invert",
"value": false
},
{
"name": "lowThreshold",
"value": 20
},
{
"name": "mode",
"value": "MANUAL_ON"
},
{
"name": "outputChannelAddress",
"value": "io0/InputOutput2"
},
{
"name": "enabled",
"value": true
}
]
},
{
"factoryPid": "Controller.Debug.Log",
"properties": [
{
"name": "id",
"value": "ctrlDebugLog0"
},
{
"name": "enabled",
"value": true
}
]
},
{
"factoryPid": "Controller.Ess.LimitTotalDischarge",
"properties": [
{
"name": "id",
"value": "ctrlLimitTotalDischarge0"
},
{
"name": "ess.id",
"value": "ess0"
},
{
"name": "forceChargeSoc",
"value": 40
},
{
"name": "minSoc",
"value": "15"
},
{
"name": "enabled",
"value": true
}
]
},
{
"factoryPid": "Controller.Ess.Time-Of-Use-Tariff",
"properties": [
{
"name": "id",
"value": "ctrlEssTimeOfUseTariff0"
},
{
"name": "controlMode",
"value": "CHARGE_CONSUMPTION"
},
{
"name": "ess.id",
"value": "ess0"
},
{
"name": "ess.target",
"value": "(&(enabled=true)(!(service.pid=Controller.Ess.Time-Of-Use-Tariff))(|(id=ess0)))"
},
{
"name": "maxChargePowerFromGrid",
"value": 20000
},
{
"name": "mode",
"value": "AUTOMATIC"
},
{
"name": "riskLevel",
"value": "MEDIUM"
},
{
"name": "enabled",
"value": true
}
]
},
{
"factoryPid": "Scheduler.AllAlphabetically",
"properties": [
{
"name": "id",
"value": "scheduler0"
},
{
"name": "controllers.ids",
"value": [
"ctrlLimitTotalDischarge0",
"ctrlBalancing0",
"ctrlEssTimeOfUseTariff0"
]
},
{
"name": "alias",
"value": ""
},
{
"name": "enabled",
"value": true
}
]
},
{
"factoryPid": "Simulator.GridMeter.Reacting",
"properties": [
{
"name": "id",
"value": "meter0"
},
{
"name": "alias",
"value": "Grid"
},
{
"name": "enabled",
"value": true
}
]
},
{
"factoryPid": "Controller.IO.ChannelSingleThreshold",
"properties": [
{
"name": "id",
"value": "ctrlChannelSingleThreshold0"
},
{
"name": "alias",
"value": "Control by Threshold"
},
{
"name": "inputChannelAddress",
"value": "_sum/EssSoc"
},
{
"name": "invert",
"value": "true"
},
{
"name": "minimumSwitchingTime",
"value": 60
},
{
"name": "outputChannelAddress",
"value": "io0/InputOutput0"
},
{
"name": "switchedLoadPower",
"value": 0
},
{
"name": "mode",
"value": "AUTOMATIC"
},
{
"name": "threshold",
"value": 40
},
{
"name": "enabled",
"value": true
}
]
},
{
"factoryPid": "Controller.IO.HeatingElement",
"properties": [
{
"name": "id",
"value": "ctrlIoHeatingElement0"
},
{
"name": "alias",
"value": "Control Heating Element"
},
{
"name": "defaultLevel",
"value": "LEVEL_1"
},
{
"name": "endTime",
"value": "17:00"
},
{
"name": "minTime",
"value": 1
},
{
"name": "minimumSwitchingTime",
"value": 60
},
{
"name": "outputChannelPhaseL1",
"value": "io0/InputOutput3"
},
{
"name": "outputChannelPhaseL2",
"value": "io0/InputOutput4"
},
{
"name": "outputChannelPhaseL3",
"value": "io0/InputOutput5"
},
{
"name": "mode",
"value": "AUTOMATIC"
},
{
"name": "powerPerPhase",
"value": 2000
},
{
"name": "workMode",
"value": "TIME"
},
{
"name": "enabled",
"value": true
}
]
},
{
"factoryPid": "Controller.Io.FixDigitalOutput",
"properties": [
{
"name": "id",
"value": "ctrlIoFixDigitalOutput0"
},
{
"name": "alias",
"value": "Control Manually"
},
{
"name": "isOn",
"value": false
},
{
"name": "outputChannelAddress",
"value": "io0/InputOutput1"
},
{
"name": "enabled",
"value": true
}
]
},
{
"factoryPid": "Evcs.Predictor.PersistenceModel",
"properties": [
{
"name": "id",
"value": "predictor0"
},
{
"name": "BundleLocation",
"value": "?"
},
{
"name": "alias",
"value": ""
},
{
"name": "enabled",
"value": true
},
{
"name": "logVerbosity",
"value": "REQUESTED_PREDICTIONS"
},
{
"name": "channelAddresses",
"value": [
"_sum/ProductionActivePower",
"_sum/UnmanagedConsumptionActivePower",
"_sum/ConsumptionActivePower"
]
}
]
},
{
"factoryPid": "Simulator.NRCMeter.Acting",
"properties": [
{
"name": "id",
"value": "meter3"
},
{
"name": "alias",
"value": "Xs Consumption"
},
{
"name": "datasource.id",
"value": "_simulator"
},
{
"name": "enabled",
"value": true
}
]
},
{
"factoryPid": "TimeOfUseTariff.Pjm",
"properties": [
{
"name": "id",
"value": "timeOfUseTariff0"
},
{
"name": "filter",
"value": "DOM (DA)"
},
{
"name": "enabled",
"value": true
}
]
},
{
"factoryPid": "Timedata.InfluxDB",
"properties": [
{
"name": "id",
"value": "influx0"
},
{
"name": "apiKey",
"value": "an apikey"
},
{
"name": "bucket",
"value": "timedata"
},
{
"name": "isReadOnly",
"value": false
},
{
"name": "maxQueueSize",
"value": 5000
},
{
"name": "measurement",
"value": "data"
},
{
"name": "noOfCycles",
"value": 1
},
{
"name": "org",
"value": "BSF"
},
{
"name": "queryLanguage",
"value": "INFLUX_QL"
},
{
"name": "url",
"value": "http://localhost:8086"
},
{
"name": "enabled",
"value": true
}
]
},
{
"factoryPid": "Simulator.IO.DigitalInputOutput",
"properties": [
{
"name": "id",
"value": "io0"
},
{
"name": "alias",
"value": "Simulated Relay-Board"
},
{
"name": "numberOfOutputs",
"value": 6
},
{
"name": "enabled",
"value": true
}
]
},
{
"factoryPid": "Simulator.ProductionMeter.Acting",
"properties": [
{
"name": "id",
"value": "meter2"
},
{
"name": "alias",
"value": "PV BRF Malmo"
},
{
"name": "datasource.id",
"value": "_simulator"
},
{
"name": "enabled",
"value": true
}
]
},
{
"factoryPid": "Controller.Symmetric.BalancingSchedule",
"properties": [
{
"name": "id",
"value": "ctrlBalancing0"
},
{
"name": "alias",
"value": "Self-consumption optimization"
},
{
"name": "ess.id",
"value": "ess0"
},
{
"name": "ess.target",
"value": "(&(enabled=true)(!(service.pid=Controller.Symmetric.BalancingSchedule))(|(id=ess0)))"
},
{
"name": "meter.target",
"value": "(&(enabled=true)(!(service.pid=Controller.Symmetric.BalancingSchedule))(|(id=meter0)))"
},
{
"name": "meter.id",
"value": "meter0"
},
{
"name": "targetGridSetpoint",
"value": 0
},
{
"name": "enabled",
"value": true
}
]
}
],
"clock": {
"start": "2023-01-01T00:00:00Z",
"end": "2023-12-31T23:59:59Z",
"timeleapPerCycle": 900000,
"executeCycleTwice": false
},
"collect": [
"_sum/GridActivePower",
"_sum/EssActivePower",
"_sum/ProductionActivePower",
"_sum/ConsumptionActivePower",
"_sum/EssSoc"
],
"profiles": {
"meter3/ActivePower": [ "long list of numbers"
],
"meter2/ActivePower": [
"long list of numbers"
]
}
}
}
}
}
Even using the example JsonRpc results in the same error.
{
"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"
]
}
}
}
}
Response:
{
"jsonrpc": "2.0",
"id": "c5318708-bd4e-4d21-8864-353cced47c8d",
"error": {
"code": 1,
"message": "Unable to get Response: A Singleton Component for PID [Ess.Power] is already existing!",
"data": [
"Unable to get Response: A Singleton Component for PID [Ess.Power] is already existing!"
]
}
}
Iāve the same issue.
For now I fixed it by uncommenting the following lines and configure the existing Ess.Power
controller manually (via the Apache Felix Console) to disable Enable PID Filter
. This works without any side effects for me now. I also had to disable the cycle configuration, as I had an issue with that. I configured the cycle configuration manually and set the cycle time to 0.
Currently these are my changes to make the simulation working (theyāre just a workaround for now, not an actual fix Iāll publishā¦):
diff --git a/io.openems.edge.simulator/src/io/openems/edge/simulator/app/SimulatorAppImpl.java b/io.openems.edge.simulator/src/io/openems/edge/simulator/app/SimulatorAppImpl.java
index ca6c12154..bc483581e 100644
--- a/io.openems.edge.simulator/src/io/openems/edge/simulator/app/SimulatorAppImpl.java
+++ b/io.openems.edge.simulator/src/io/openems/edge/simulator/app/SimulatorAppImpl.java
@@ -189,8 +189,8 @@ public class SimulatorAppImpl extends AbstractOpenemsComponent
this.setCycleTime(AbstractWorker.ALWAYS_WAIT_FOR_TRIGGER_NEXT_RUN);
// Create Ess.Power with disabled PID filter
- this.componentManager.handleJsonrpcRequest(user,
- new CreateComponentConfigRequest("Ess.Power", Arrays.asList(new Property("enablePid", false))));
+// this.componentManager.handleJsonrpcRequest(user,
+// new CreateComponentConfigRequest("Ess.Power", Arrays.asList(new Property("enablePid", false))));
// Create Components
Set<String> simulatorComponentIds = new HashSet<>();
@@ -402,7 +402,7 @@ public class SimulatorAppImpl extends AbstractOpenemsComponent
var config = this.cm.getConfiguration("Core.Cycle", null);
Dictionary<String, Object> properties = new Hashtable<>();
properties.put("cycleTime", cycleTime);
- config.update(properties);
+// config.update(properties);
} catch (IOException e) {
this.logError(this.log, "Unable to configure Core Cycle-Time. " + e.getClass() + ": " + e.getMessage());
}
Iām currently working on fixing this, but had some follow up issues Iām currently working on as well (caution - still speculative root causing: cycle configuration is not updated properly resulting cycle thread hangs in await state (is a bit of a flaky bug, but happens more often than not); component creation/retrieval via osgi not working for everything in the simulation setup, e.g. time of use controller). I hope Iāll be able to publish a pull request for this next week.
Iāve created a merge request to fix the Ess.Power
issue. Took a bit longer than announced, sorry for that.
When I find the time, Iāll continue to look into the other issues Iāve mentioned (cycle time issue for the simulation)