Skip to content

Commit 5beccc1

Browse files
committed
[transaction] Save connector id related to transaction messages into FIFO + update transaction id in FIFO messages chen they are sent
1 parent ee32a58 commit 5beccc1

File tree

9 files changed

+138
-56
lines changed

9 files changed

+138
-56
lines changed

src/chargepoint/connector/Connector.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ struct Connector
4747
status_timer(timer_pool),
4848
last_notified_status(status),
4949
transaction_id(0),
50+
transaction_id_offline(0),
5051
transaction_start(),
5152
transaction_id_tag(),
5253
reservation_id(0),
@@ -86,6 +87,8 @@ struct Connector
8687

8788
/** @brief Current transaction id */
8889
int transaction_id;
90+
/** @brief Transaction id for offline transactions */
91+
int transaction_id_offline;
8992
/** @brief Start of transaction */
9093
ocpp::types::DateTime transaction_start;
9194
/** @brief Id tag associated with the transaction */

src/chargepoint/connector/Connectors.cpp

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ void Connectors::initDatabaseTable()
7777
"[status] INT,"
7878
"[last_notified_status] INT,"
7979
"[transaction_id] INT,"
80+
"[transaction_id_offline] INT,"
8081
"[transaction_start] BIGINT,"
8182
"[transaction_id_tag] VARCHAR(20),"
8283
"[reservation_id] INT,"
@@ -96,7 +97,7 @@ void Connectors::initDatabaseTable()
9697
m_find_query = m_database.query("SELECT * FROM Connectors WHERE id=?;");
9798
m_insert_query = m_database.query("INSERT INTO Connectors VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");
9899
m_update_query = m_database.query("UPDATE Connectors SET [status]=?, [last_notified_status]=?, [transaction_id]=?, "
99-
"[transaction_start]=?, [transaction_id_tag]=?, [reservation_id]=?, "
100+
"[transaction_id_offline]=?, [transaction_start]=?, [transaction_id_tag]=?, [reservation_id]=?, "
100101
"[reservation_id_tag]=?, [reservation_parent_id_tag]=?, [reservation_expiry_date]=? WHERE id=?;");
101102

102103
// Load the connector state
@@ -227,17 +228,19 @@ bool Connectors::loadConnector(Connector& connector)
227228
connector.status = static_cast<ChargePointStatus>(m_find_query->getInt32(1u));
228229
connector.last_notified_status = static_cast<ChargePointStatus>(m_find_query->getInt32(2u));
229230
connector.transaction_id = m_find_query->getInt32(3u);
230-
connector.transaction_start = static_cast<std::time_t>(m_find_query->getInt64(4u));
231-
connector.transaction_id_tag = m_find_query->getString(5u);
232-
connector.reservation_id = m_find_query->getInt32(6u);
233-
connector.reservation_id_tag = m_find_query->getString(7u);
234-
connector.reservation_parent_id_tag = m_find_query->getString(8u);
235-
connector.reservation_expiry_date = static_cast<std::time_t>(m_find_query->getInt64(9u));
231+
connector.transaction_id_offline = m_find_query->getInt32(4u);
232+
connector.transaction_start = static_cast<std::time_t>(m_find_query->getInt64(5u));
233+
connector.transaction_id_tag = m_find_query->getString(6u);
234+
connector.reservation_id = m_find_query->getInt32(7u);
235+
connector.reservation_id_tag = m_find_query->getString(8u);
236+
connector.reservation_parent_id_tag = m_find_query->getString(9u);
237+
connector.reservation_expiry_date = static_cast<std::time_t>(m_find_query->getInt64(10u));
236238

237239
LOG_DEBUG << "Connector " << connector.id << " loaded from database : "
238240
<< "status = " << ChargePointStatusHelper.toString(connector.status)
239241
<< " - last_notified_status = " << ChargePointStatusHelper.toString(connector.last_notified_status)
240242
<< " - transaction_id = " << connector.transaction_id
243+
<< " - transaction_id_offline = " << connector.transaction_id_offline
241244
<< " - transaction_start = " << connector.transaction_start.str()
242245
<< " - transaction_id_tag = " << connector.transaction_id_tag
243246
<< " - reservation_id = " << connector.reservation_id
@@ -270,13 +273,14 @@ bool Connectors::saveConnector(const Connector& connector)
270273
m_update_query->bind(0u, static_cast<int>(connector.status));
271274
m_update_query->bind(1u, static_cast<int>(connector.last_notified_status));
272275
m_update_query->bind(2u, connector.transaction_id);
273-
m_update_query->bind(3u, connector.transaction_start);
274-
m_update_query->bind(4u, connector.transaction_id_tag);
275-
m_update_query->bind(5u, connector.reservation_id);
276-
m_update_query->bind(6u, connector.reservation_id_tag);
277-
m_update_query->bind(7u, connector.reservation_parent_id_tag);
278-
m_update_query->bind(8u, connector.reservation_expiry_date);
279-
m_update_query->bind(9u, connector.id);
276+
m_update_query->bind(3u, connector.transaction_id_offline);
277+
m_update_query->bind(4u, connector.transaction_start);
278+
m_update_query->bind(5u, connector.transaction_id_tag);
279+
m_update_query->bind(6u, connector.reservation_id);
280+
m_update_query->bind(7u, connector.reservation_id_tag);
281+
m_update_query->bind(8u, connector.reservation_parent_id_tag);
282+
m_update_query->bind(9u, connector.reservation_expiry_date);
283+
m_update_query->bind(10u, connector.id);
280284
ret = m_update_query->exec();
281285
if (ret)
282286
{
@@ -303,12 +307,13 @@ bool Connectors::createConnector(const Connector& connector)
303307
m_insert_query->bind(1u, static_cast<int>(connector.status));
304308
m_insert_query->bind(2u, static_cast<int>(connector.last_notified_status));
305309
m_insert_query->bind(3u, connector.transaction_id);
306-
m_insert_query->bind(4u, connector.transaction_start);
307-
m_insert_query->bind(5u, connector.transaction_id_tag);
308-
m_insert_query->bind(6u, connector.reservation_id);
309-
m_insert_query->bind(7u, connector.reservation_id_tag);
310-
m_insert_query->bind(8u, connector.reservation_parent_id_tag);
311-
m_insert_query->bind(9u, connector.reservation_expiry_date);
310+
m_insert_query->bind(4u, connector.transaction_id_offline);
311+
m_insert_query->bind(5u, connector.transaction_start);
312+
m_insert_query->bind(6u, connector.transaction_id_tag);
313+
m_insert_query->bind(7u, connector.reservation_id);
314+
m_insert_query->bind(8u, connector.reservation_id_tag);
315+
m_insert_query->bind(9u, connector.reservation_parent_id_tag);
316+
m_insert_query->bind(10u, connector.reservation_expiry_date);
312317
ret = m_insert_query->exec();
313318
if (ret)
314319
{

src/chargepoint/metervalues/MeterValuesManager.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -421,11 +421,11 @@ void MeterValuesManager::sendMeterValues(unsigned int
421421

422422
// Send request
423423
MeterValuesConf meter_values_conf;
424-
m_msg_sender.call(METER_VALUES_ACTION, meter_values_req, meter_values_conf, fifo);
424+
m_msg_sender.call(METER_VALUES_ACTION, meter_values_req, meter_values_conf, fifo, connector_id);
425425
}
426426
}
427427

428-
/** @brief Compute the measurand list from a CSL confiuration string */
428+
/** @brief Compute the measurand list from a CSL configuration string */
429429
std::vector<std::pair<ocpp::types::Measurand, ocpp::types::Optional<ocpp::types::Phase>>> MeterValuesManager::computeMeasurandList(
430430
const std::string& meter_values, const unsigned int max_count)
431431
{

src/chargepoint/metervalues/MeterValuesManager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ class MeterValuesManager : public IMeterValuesManager,
141141
ocpp::types::ReadingContext context,
142142
ocpp::types::Optional<int> transaction_id = ocpp::types::Optional<int>());
143143

144-
/** @brief Compute the measurand list from a CSL confiuration string */
144+
/** @brief Compute the measurand list from a CSL configuration string */
145145
std::vector<std::pair<ocpp::types::Measurand, ocpp::types::Optional<ocpp::types::Phase>>> computeMeasurandList(
146146
const std::string& meter_values, const unsigned int max_count);
147147

src/chargepoint/transaction/RequestFifo.cpp

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ RequestFifo::RequestFifo(ocpp::database::Database& database)
3838
/** @brief Destructor */
3939
RequestFifo::~RequestFifo() { }
4040

41-
/** @copydoc void IRequestFifo::push(const std::string&, const rapidjson::Document&) const */
42-
void RequestFifo::push(const std::string& action, const rapidjson::Document& payload)
41+
/** @copydoc void IRequestFifo::push(unsigned int, const std::string&, const rapidjson::Document&) const */
42+
void RequestFifo::push(unsigned int connector_id, const std::string& action, const rapidjson::Document& payload)
4343
{
4444
std::lock_guard<std::mutex> lock(m_mutex);
4545

@@ -52,22 +52,23 @@ void RequestFifo::push(const std::string& action, const rapidjson::Document& pay
5252
std::string request = buffer.GetString();
5353

5454
// Add a new entry to the FIFO
55-
m_fifo.emplace(m_id, action, request);
55+
m_fifo.emplace(m_id, connector_id, action, request);
5656
if (m_insert_query)
5757
{
5858
m_insert_query->reset();
5959
m_insert_query->bind(0, m_id);
60-
m_insert_query->bind(1, action);
61-
m_insert_query->bind(2, request);
60+
m_insert_query->bind(1, connector_id);
61+
m_insert_query->bind(2, action);
62+
m_insert_query->bind(3, request);
6263
m_insert_query->exec();
6364
}
6465

6566
// Prepare for next entry
6667
m_id++;
6768
}
6869

69-
/** @copydoc bool IRequestFifo::front(std::string&, const rapidjson::Document&) const */
70-
bool RequestFifo::front(std::string& action, rapidjson::Document& payload)
70+
/** @copydoc bool IRequestFifo::front(unsigned int&, std::string&, const rapidjson::Document&) const */
71+
bool RequestFifo::front(unsigned int& connector_id, std::string& action, rapidjson::Document& payload)
7172
{
7273
bool ret = false;
7374

@@ -77,6 +78,7 @@ bool RequestFifo::front(std::string& action, rapidjson::Document& payload)
7778
// Get entry from FIFO
7879
const std::string& request_str = m_fifo.front().request;
7980
action = m_fifo.front().action;
81+
connector_id = m_fifo.front().connector_id;
8082

8183
// Deserialize request
8284
payload.Parse(request_str.c_str());
@@ -118,6 +120,7 @@ void RequestFifo::initDatabaseTable()
118120
// Create database
119121
auto query = m_database.query("CREATE TABLE IF NOT EXISTS RequestFifo ("
120122
"[id] INT UNSIGNED,"
123+
"[connector_id] INT UNSIGNED,"
121124
"[action] VARCHAR(64),"
122125
"[request] VARCHAR(1024),"
123126
"PRIMARY KEY([id]));");
@@ -128,7 +131,7 @@ void RequestFifo::initDatabaseTable()
128131

129132
// Create parametrized queries
130133
m_delete_query = m_database.query("DELETE FROM RequestFifo WHERE id=?;");
131-
m_insert_query = m_database.query("INSERT INTO RequestFifo VALUES (?, ?, ?);");
134+
m_insert_query = m_database.query("INSERT INTO RequestFifo VALUES (?, ?, ?, ?);");
132135
}
133136

134137
/** @brief Load requests from the database */
@@ -143,12 +146,13 @@ void RequestFifo::load()
143146
do
144147
{
145148
// Extract table data
146-
int id = query->getUInt32(0);
147-
std::string action = query->getString(1);
148-
std::string request_str = query->getString(2);
149+
int id = query->getUInt32(0);
150+
unsigned int connector_id = query->getUInt32(1);
151+
std::string action = query->getString(2);
152+
std::string request_str = query->getString(3);
149153

150154
// Store request inside the FIFO
151-
m_fifo.emplace(id, action, request_str);
155+
m_fifo.emplace(id, connector_id, action, request_str);
152156
} while (query->next());
153157

154158
// Prepare for next entry

src/chargepoint/transaction/RequestFifo.h

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,21 @@ class RequestFifo : public ocpp::messages::IRequestFifo
4242

4343
// IRequestFifo interface
4444

45-
/** @copydoc void IRequestFifo::push(const std::string&, const rapidjson::Document&) const */
46-
void push(const std::string& action, const rapidjson::Document& payload) override;
45+
/** @copydoc void IRequestFifo::push(unsigned int, const std::string&, const rapidjson::Document&) const */
46+
void push(unsigned int connector_id, const std::string& action, const rapidjson::Document& payload) override;
4747

48-
/** @copydoc bool IRequestFifo::front(std::string&, const rapidjson::Document&) const */
49-
bool front(std::string& action, rapidjson::Document& payload) override;
48+
/** @copydoc bool IRequestFifo::front(unsigned int&, std::string&, const rapidjson::Document&) const */
49+
bool front(unsigned int& connector_id, std::string& action, rapidjson::Document& payload) override;
5050

5151
/** @@copydoc void IRequestFifo::pop() */
5252
void pop() override;
5353

5454
/** @copydoc size_t IRequestFifo::size() const */
5555
size_t size() const override;
5656

57+
/** @copydoc bool IRequestFifo::empty() const */
58+
bool empty() const override { return (size() == 0); }
59+
5760
// RequestFifo interface
5861

5962
private:
@@ -63,10 +66,15 @@ class RequestFifo : public ocpp::messages::IRequestFifo
6366
/** @brief Default constructor */
6467
Entry() : id(0), action(), request() { }
6568
/** @brief Constructor */
66-
Entry(unsigned int _id, std::string _action, std::string _request) : id(_id), action(_action), request(_request) { }
69+
Entry(unsigned int _id, unsigned int _connector_id, std::string _action, std::string _request)
70+
: id(_id), connector_id(_connector_id), action(_action), request(_request)
71+
{
72+
}
6773

6874
/** @brief Id */
6975
unsigned int id;
76+
/** @brief Id of the connector related to the request */
77+
unsigned int connector_id;
7078
/** @brief Action */
7179
std::string action;
7280
/** @brief Request */

0 commit comments

Comments
 (0)