Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/traci-server/TraCIServerAPI_ChargingStation.cpp
169665 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.
4
// This program and the accompanying materials are made available under the
5
// terms of the Eclipse Public License 2.0 which is available at
6
// https://www.eclipse.org/legal/epl-2.0/
7
// This Source Code may also be made available under the following Secondary
8
// Licenses when the conditions for such availability set forth in the Eclipse
9
// Public License 2.0 are satisfied: GNU General Public License, version 2
10
// or later which is available at
11
// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13
/****************************************************************************/
14
/// @file TraCIServerAPI_ChargingStation.cpp
15
/// @author Jakob Erdmann
16
/// @date 16.03.2020
17
///
18
// APIs for getting/setting charging station values via TraCI
19
/****************************************************************************/
20
#include <config.h>
21
22
#include <microsim/MSNet.h>
23
#include <microsim/MSEdge.h>
24
#include <microsim/MSStoppingPlace.h>
25
#include <libsumo/ChargingStation.h>
26
#include <libsumo/TraCIConstants.h>
27
#include <libsumo/StorageHelper.h>
28
#include "TraCIServerAPI_ChargingStation.h"
29
30
31
// ===========================================================================
32
// method definitions
33
// ===========================================================================
34
bool
35
TraCIServerAPI_ChargingStation::processGet(TraCIServer& server, tcpip::Storage& inputStorage,
36
tcpip::Storage& outputStorage) {
37
const int variable = inputStorage.readUnsignedByte();
38
const std::string id = inputStorage.readString();
39
server.initWrapper(libsumo::RESPONSE_GET_CHARGINGSTATION_VARIABLE, variable, id);
40
try {
41
if (!libsumo::ChargingStation::handleVariable(id, variable, &server, &inputStorage)) {
42
return server.writeErrorStatusCmd(libsumo::CMD_GET_CHARGINGSTATION_VARIABLE, "Get ChargingStation Variable: unsupported variable " + toHex(variable, 2) + " specified", outputStorage);
43
}
44
} catch (libsumo::TraCIException& e) {
45
return server.writeErrorStatusCmd(libsumo::CMD_GET_CHARGINGSTATION_VARIABLE, e.what(), outputStorage);
46
}
47
server.writeStatusCmd(libsumo::CMD_GET_CHARGINGSTATION_VARIABLE, libsumo::RTYPE_OK, "", outputStorage);
48
server.writeResponseWithLength(outputStorage, server.getWrapperStorage());
49
return true;
50
}
51
52
53
bool
54
TraCIServerAPI_ChargingStation::processSet(TraCIServer& server, tcpip::Storage& inputStorage,
55
tcpip::Storage& outputStorage) {
56
std::string warning = ""; // additional description for response
57
// variable
58
int variable = inputStorage.readUnsignedByte();
59
if (variable != libsumo::VAR_PARAMETER &&
60
variable != libsumo::VAR_CS_POWER &&
61
variable != libsumo::VAR_CS_EFFICIENCY &&
62
variable != libsumo::VAR_CS_CHARGE_DELAY &&
63
variable != libsumo::VAR_CS_CHARGE_IN_TRANSIT) {
64
return server.writeErrorStatusCmd(libsumo::CMD_SET_CHARGINGSTATION_VARIABLE, "Change ChargingStation State: unsupported variable " + toHex(variable, 2) + " specified", outputStorage);
65
}
66
// id
67
std::string id = inputStorage.readString();
68
69
try {
70
// process
71
switch (variable) {
72
case libsumo::VAR_PARAMETER: {
73
StoHelp::readCompound(inputStorage, 2, "A compound object of size 2 is needed for setting a parameter.");
74
const std::string name = StoHelp::readTypedString(inputStorage, "The name of the parameter must be given as a string.");
75
const std::string value = StoHelp::readTypedString(inputStorage, "The value of the parameter must be given as a string.");
76
libsumo::ChargingStation::setParameter(id, name, value);
77
}
78
break;
79
case libsumo::VAR_CS_POWER: {
80
double value = 0;
81
if (!server.readTypeCheckingDouble(inputStorage, value)) {
82
return server.writeErrorStatusCmd(libsumo::CMD_SET_CHARGINGSTATION_VARIABLE, "Setting chargingPower requires a double.", outputStorage);
83
}
84
libsumo::ChargingStation::setChargingPower(id, value);
85
}
86
break;
87
case libsumo::VAR_CS_EFFICIENCY: {
88
double value = 0;
89
if (!server.readTypeCheckingDouble(inputStorage, value)) {
90
return server.writeErrorStatusCmd(libsumo::CMD_SET_CHARGINGSTATION_VARIABLE, "Setting efficiency requires a double.", outputStorage);
91
}
92
libsumo::ChargingStation::setEfficiency(id, value);
93
}
94
break;
95
case libsumo::VAR_CS_CHARGE_DELAY: {
96
double value = 0;
97
if (!server.readTypeCheckingDouble(inputStorage, value)) {
98
return server.writeErrorStatusCmd(libsumo::CMD_SET_CHARGINGSTATION_VARIABLE, "Setting charge delay requires a double.", outputStorage);
99
}
100
libsumo::ChargingStation::setChargeDelay(id, value);
101
}
102
break;
103
case libsumo::VAR_CS_CHARGE_IN_TRANSIT: {
104
const int value = StoHelp::readTypedInt(inputStorage, "Setting charge in transit requires an integer.");
105
libsumo::ChargingStation::setChargeInTransit(id, value != 0);
106
}
107
break;
108
default:
109
break;
110
}
111
} catch (libsumo::TraCIException& e) {
112
return server.writeErrorStatusCmd(libsumo::CMD_SET_CHARGINGSTATION_VARIABLE, e.what(), outputStorage);
113
}
114
server.writeStatusCmd(libsumo::CMD_SET_CHARGINGSTATION_VARIABLE, libsumo::RTYPE_OK, warning, outputStorage);
115
return true;
116
}
117
118
119
/****************************************************************************/
120
121