Hi, everybody!
I need your help, if I understand the OpenEMS implementation correctly, WebSockets are used for local communication between components, especially for data exchange between OpenEMS Edge and OpenEMS UI. However, not all methods that work through HTTP are available via WebSocket. I am unable to create, update, or delete components via WebSocket from a remote server.
E.g. I don’t have any issue with create component via HTTP API
POST http://user:password@192.168.1.244:8084/jsonrpc
{
"jsonrpc": "2.0",
"method": "createComponentConfig",
"params": {
"factoryPid": "Simulator.ProductionMeter.Acting",
"properties": [
{ "name": "id", "value": "meter2" },
{ "name": "alias", "value": "PV BRF Malmo" },
{ "name": "enabled", "value": true }
]
}
}
But when I try to use WS:
public JsonObject sendCreateComponentConfigRequest(WebSocketSession session) {
JsonObject request = new JsonObject();
request.addProperty("jsonrpc", "2.0");
request.addProperty("method", "createComponentConfig");
JsonObject params = new JsonObject();
params.addProperty("factoryPid", "Simulator.ProductionMeter.Acting");
JsonArray properties = new JsonArray();
JsonObject prop1 = new JsonObject();
prop1.addProperty("name", "id");
prop1.addProperty("value", "meter2");
properties.add(prop1);
JsonObject prop2 = new JsonObject();
prop2.addProperty("name", "alias");
prop2.addProperty("value", "PV BRF Malmo");
properties.add(prop2);
JsonObject prop3 = new JsonObject();
prop3.addProperty("name", "enabled");
prop3.addProperty("value", true);
properties.add(prop3);
params.add("properties", properties);
request.add("params", params);
request.addProperty("id", "0efc6142-346b-4c28-b167-d8d5829f6045");
return request;
}
@Override
public void afterConnectionEstablished(WebSocketSession session) throws IOException {
log.info("Connected: {}", session.getId());
JsonObject request = sendCreateComponentConfigRequest(session);
session.sendMessage(new TextMessage(request.toString()));
}
I get this warn:
Is it possible that someone has documentation regarding this or has encountered a similar issue? I would be very grateful.
UPDATE:
From the OpenEMS GitHub repository, I noticed that the message "Endpoint with method 'getEdgesStatus' is not defined"
is logged when the endpoints map does not contain a key matching the method name (in my case, getEdgesStatus
). I wonder that the map might be empty, and I may have missed some steps required to populate it with available methods