Line data Source code
1 : /****************************************************************************/
2 : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3 : // Copyright (C) 2017-2024 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 ChargingStation.cpp
15 : /// @author Jakob Erdmann
16 : /// @date 16.03.2020
17 : ///
18 : // C++ TraCI client API implementation
19 : /****************************************************************************/
20 : #include <config.h>
21 :
22 : #include <microsim/MSNet.h>
23 : #include <microsim/MSLane.h>
24 : #include <microsim/MSStoppingPlace.h>
25 : #include <microsim/trigger/MSChargingStation.h>
26 : #include <libsumo/TraCIConstants.h>
27 : #include <utils/common/SUMOTime.h>
28 : #include "Helper.h"
29 : #include "ChargingStation.h"
30 :
31 :
32 : namespace libsumo {
33 : // ===========================================================================
34 : // static member initializations
35 : // ===========================================================================
36 :
37 : SubscriptionResults ChargingStation::mySubscriptionResults;
38 : ContextSubscriptionResults ChargingStation::myContextSubscriptionResults;
39 :
40 : // ===========================================================================
41 : // static member definitions
42 : // ===========================================================================
43 :
44 : std::vector<std::string>
45 809 : ChargingStation::getIDList() {
46 : std::vector<std::string> ids;
47 2595 : for (auto& item : MSNet::getInstance()->getStoppingPlaces(SUMO_TAG_CHARGING_STATION)) {
48 1786 : ids.push_back(item.first);
49 : }
50 807 : std::sort(ids.begin(), ids.end());
51 807 : return ids;
52 2 : }
53 :
54 :
55 : int
56 12 : ChargingStation::getIDCount() {
57 12 : return (int)getIDList().size();
58 : }
59 :
60 :
61 : std::string
62 32 : ChargingStation::getLaneID(const std::string& stopID) {
63 32 : return getChargingStation(stopID)->getLane().getID();
64 : }
65 :
66 : double
67 31 : ChargingStation::getStartPos(const std::string& stopID) {
68 31 : return getChargingStation(stopID)->getBeginLanePosition();
69 : }
70 :
71 :
72 : double
73 31 : ChargingStation::getEndPos(const std::string& stopID) {
74 31 : return getChargingStation(stopID)->getEndLanePosition();
75 : }
76 :
77 :
78 : std::string
79 31 : ChargingStation::getName(const std::string& stopID) {
80 31 : return getChargingStation(stopID)->getMyName();
81 : }
82 :
83 :
84 : int
85 101 : ChargingStation::getVehicleCount(const std::string& stopID) {
86 101 : return (int)getChargingStation(stopID)->getStoppedVehicles().size();
87 : }
88 :
89 :
90 : std::vector<std::string>
91 101 : ChargingStation::getVehicleIDs(const std::string& stopID) {
92 : std::vector<std::string> result;
93 161 : for (const SUMOVehicle* veh : getChargingStation(stopID)->getStoppedVehicles()) {
94 60 : result.push_back(veh->getID());
95 101 : }
96 101 : return result;
97 0 : }
98 :
99 :
100 : double
101 521 : ChargingStation::getChargingPower(const std::string& stopID) {
102 521 : return dynamic_cast<MSChargingStation*>(getChargingStation(stopID))->getChargingPower(true);
103 : }
104 :
105 :
106 : double
107 525 : ChargingStation::getEfficiency(const std::string& stopID) {
108 525 : return dynamic_cast<MSChargingStation*>(getChargingStation(stopID))->getEfficency();
109 : }
110 :
111 :
112 : double
113 20 : ChargingStation::getChargeDelay(const std::string& stopID) {
114 20 : return STEPS2TIME(dynamic_cast<MSChargingStation*>(getChargingStation(stopID))->getChargeDelay());
115 : }
116 :
117 :
118 : int
119 20 : ChargingStation::getChargeInTransit(const std::string& stopID) {
120 20 : return dynamic_cast<MSChargingStation*>(getChargingStation(stopID))->getChargeInTransit();
121 : }
122 :
123 :
124 : void
125 512 : ChargingStation::setChargingPower(const std::string& stopID, double chargingpower) {
126 512 : dynamic_cast<MSChargingStation*>(getChargingStation(stopID))->setChargingPower(chargingpower);
127 511 : }
128 :
129 :
130 : void
131 512 : ChargingStation::setEfficiency(const std::string& stopID, double efficiency) {
132 512 : dynamic_cast<MSChargingStation*>(getChargingStation(stopID))->setEfficiency(efficiency);
133 511 : }
134 :
135 :
136 : void
137 10 : ChargingStation::setChargeDelay(const std::string& stopID, double delay) {
138 10 : dynamic_cast<MSChargingStation*>(getChargingStation(stopID))->setChargeDelay(TIME2STEPS(delay));
139 10 : }
140 :
141 :
142 : void
143 10 : ChargingStation::setChargeInTransit(const std::string& stopID, bool value) {
144 10 : dynamic_cast<MSChargingStation*>(getChargingStation(stopID))->setChargeInTransit(value);
145 10 : }
146 :
147 :
148 : std::string
149 2 : ChargingStation::getParameter(const std::string& stopID, const std::string& param) {
150 4 : return getChargingStation(stopID)->getParameter(param, "");
151 : }
152 :
153 :
154 0 : LIBSUMO_GET_PARAMETER_WITH_KEY_IMPLEMENTATION(ChargingStation)
155 :
156 : void
157 1 : ChargingStation::setParameter(const std::string& stopID, const std::string& key, const std::string& value) {
158 1 : getChargingStation(stopID)->setParameter(key, value);
159 1 : }
160 :
161 :
162 252 : LIBSUMO_SUBSCRIPTION_IMPLEMENTATION(ChargingStation, CHARGINGSTATION)
163 :
164 :
165 : MSStoppingPlace*
166 2460 : ChargingStation::getChargingStation(const std::string& id) {
167 2460 : return Helper::getStoppingPlace(id, SUMO_TAG_CHARGING_STATION);
168 : }
169 :
170 :
171 : std::shared_ptr<VariableWrapper>
172 266 : ChargingStation::makeWrapper() {
173 266 : return std::make_shared<Helper::SubscriptionWrapper>(handleVariable, mySubscriptionResults, myContextSubscriptionResults);
174 : }
175 :
176 :
177 : bool
178 1321 : ChargingStation::handleVariable(const std::string& objID, const int variable, VariableWrapper* wrapper, tcpip::Storage* paramData) {
179 1321 : switch (variable) {
180 459 : case TRACI_ID_LIST:
181 459 : return wrapper->wrapStringList(objID, variable, getIDList());
182 6 : case ID_COUNT:
183 6 : return wrapper->wrapInt(objID, variable, getIDCount());
184 20 : case VAR_LANE_ID:
185 39 : return wrapper->wrapString(objID, variable, getLaneID(objID));
186 19 : case VAR_POSITION:
187 19 : return wrapper->wrapDouble(objID, variable, getStartPos(objID));
188 19 : case VAR_LANEPOSITION:
189 19 : return wrapper->wrapDouble(objID, variable, getEndPos(objID));
190 19 : case VAR_NAME:
191 38 : return wrapper->wrapString(objID, variable, getName(objID));
192 61 : case VAR_STOP_STARTING_VEHICLES_NUMBER:
193 61 : return wrapper->wrapInt(objID, variable, getVehicleCount(objID));
194 61 : case VAR_STOP_STARTING_VEHICLES_IDS:
195 61 : return wrapper->wrapStringList(objID, variable, getVehicleIDs(objID));
196 313 : case VAR_CS_POWER:
197 313 : return wrapper->wrapDouble(objID, variable, getChargingPower(objID));
198 317 : case VAR_CS_EFFICIENCY:
199 317 : return wrapper->wrapDouble(objID, variable, getEfficiency(objID));
200 12 : case VAR_CS_CHARGE_DELAY:
201 12 : return wrapper->wrapDouble(objID, variable, STEPS2TIME(getChargeDelay(objID)));
202 12 : case VAR_CS_CHARGE_IN_TRANSIT:
203 12 : return wrapper->wrapInt(objID, variable, getChargeInTransit(objID));
204 2 : case libsumo::VAR_PARAMETER:
205 2 : paramData->readUnsignedByte();
206 4 : return wrapper->wrapString(objID, variable, getParameter(objID, paramData->readString()));
207 0 : case libsumo::VAR_PARAMETER_WITH_KEY:
208 0 : paramData->readUnsignedByte();
209 0 : return wrapper->wrapStringPair(objID, variable, getParameterWithKey(objID, paramData->readString()));
210 : default:
211 : return false;
212 : }
213 : }
214 :
215 : }
216 :
217 : /****************************************************************************/
|