@@ -25,6 +25,7 @@ SOFTWARE.
2525#include " MqttManager.h"
2626#include " SimulatedChargePointConfig.h"
2727#include " Topics.h"
28+ #include " MeterSimulator.h"
2829#include " json.h"
2930
3031#include < cstring>
@@ -58,6 +59,8 @@ void MqttManager::mqttMessageReceived(const char* topic, const std::string& mess
5859 (void )qos;
5960 (void )retained;
6061
62+ std::cout << " MQTT message received!" << std::endl;
63+
6164 // Decode message
6265 bool valid = false ;
6366 rapidjson::Document payload;
@@ -75,6 +78,7 @@ void MqttManager::mqttMessageReceived(const char* topic, const std::string& mess
7578 }
7679 else
7780 {
81+ std::cout << " topic: " << topic << std::endl << " payload: " << message << std::endl;
7882 // Split topic name
7983 std::filesystem::path topic_path (topic);
8084
@@ -128,12 +132,28 @@ void MqttManager::mqttMessageReceived(const char* topic, const std::string& mess
128132 connector_data.car_ready = ready.GetBool ();
129133 }
130134 }
131- if (payload.HasMember (" consumption" ))
135+ if (payload.HasMember (" consumption_l1" ))
136+ {
137+ rapidjson::Value& consumption_l1 = payload[" consumption_l1" ];
138+ if (consumption_l1.IsFloat ())
139+ {
140+ connector_data.car_consumption_l1 = consumption_l1.GetFloat ();
141+ }
142+ }
143+ if (payload.HasMember (" consumption_l2" ))
144+ {
145+ rapidjson::Value& consumption_l2 = payload[" consumption_l2" ];
146+ if (consumption_l2.IsFloat ())
147+ {
148+ connector_data.car_consumption_l2 = consumption_l2.GetFloat ();
149+ }
150+ }
151+ if (payload.HasMember (" consumption_l3" ))
132152 {
133- rapidjson::Value& consumption = payload[" consumption " ];
134- if (consumption .IsFloat ())
153+ rapidjson::Value& consumption_l3 = payload[" consumption_l3 " ];
154+ if (consumption_l3 .IsFloat ())
135155 {
136- connector_data.car_consumption = consumption .GetFloat ();
156+ connector_data.car_consumption_l3 = consumption_l3 .GetFloat ();
137157 }
138158 }
139159 }
@@ -185,10 +205,10 @@ void MqttManager::start(unsigned int nb_phases, unsigned int max_charge_point_cu
185205 std::cout << " Connecting to the broker (" << m_config.mqttConfig ().brokerUrl () << " )..." << std::endl;
186206 if (m_mqtt->connect (m_config.mqttConfig ().brokerUrl ()))
187207 {
188- std::cout << " Subscribing to charge point's command topic... " << std::endl;
208+ std::cout << " Subscribing to charge point's command topic: " << chargepoint_cmd_topic << std::endl;
189209 if (m_mqtt->subscribe (chargepoint_cmd_topic))
190210 {
191- std::cout << " Subscribing to charge point's connector topics... " << std::endl;
211+ std::cout << " Subscribing to charge point's connector topics: " << chargepoint_car_topics << " and " << chargepoint_tag_topics << std::endl;
192212 if (m_mqtt->subscribe (chargepoint_car_topics) && m_mqtt->subscribe (chargepoint_tag_topics))
193213 {
194214 // Wait for disconnection or end of application
@@ -267,7 +287,9 @@ void MqttManager::updateData(std::vector<ConnectorData>& connectors) const
267287 const ConnectorData& mqtt_data = m_connectors[connector.id - 1u ];
268288 connector.car_cable_capacity = mqtt_data.car_cable_capacity ;
269289 connector.car_ready = mqtt_data.car_ready ;
270- connector.car_consumption = mqtt_data.car_consumption ;
290+ connector.car_consumption_l1 = mqtt_data.car_consumption_l1 ;
291+ connector.car_consumption_l2 = mqtt_data.car_consumption_l2 ;
292+ connector.car_consumption_l3 = mqtt_data.car_consumption_l3 ;
271293 connector.fault_pending = mqtt_data.fault_pending ;
272294 }
273295}
@@ -312,11 +334,20 @@ void MqttManager::publishData(const std::vector<ConnectorData>& connectors)
312334 msg.AddMember (rapidjson::StringRef (" max_setpoint" ), rapidjson::Value (connector.max_setpoint ), msg.GetAllocator ());
313335 msg.AddMember (rapidjson::StringRef (" ocpp_setpoint" ), rapidjson::Value (connector.ocpp_setpoint ), msg.GetAllocator ());
314336 msg.AddMember (rapidjson::StringRef (" setpoint" ), rapidjson::Value (connector.setpoint ), msg.GetAllocator ());
315- msg.AddMember (rapidjson::StringRef (" consumption" ), rapidjson::Value (connector.consumption ), msg.GetAllocator ());
316- msg.AddMember (rapidjson::StringRef (" car_consumption" ), rapidjson::Value (connector.car_consumption ), msg.GetAllocator ());
337+ msg.AddMember (rapidjson::StringRef (" car_consumption_l1" ), rapidjson::Value (connector.car_consumption_l1 ), msg.GetAllocator ());
338+ msg.AddMember (rapidjson::StringRef (" car_consumption_l2" ), rapidjson::Value (connector.car_consumption_l2 ), msg.GetAllocator ());
339+ msg.AddMember (rapidjson::StringRef (" car_consumption_l3" ), rapidjson::Value (connector.car_consumption_l3 ), msg.GetAllocator ());
317340 msg.AddMember (rapidjson::StringRef (" car_cable_capacity" ), rapidjson::Value (connector.car_cable_capacity ), msg.GetAllocator ());
318341 msg.AddMember (rapidjson::StringRef (" car_ready" ), rapidjson::Value (connector.car_ready ), msg.GetAllocator ());
319342
343+ static const char * consumption_str[] = {" consumption_l1" , " consumption_l2" , " consumption_l3" };
344+ std::vector<float > currents = connector.meter ->getCurrents ();
345+ unsigned int nb_phases = connector.meter ->getNumberOfPhases ();
346+ for (unsigned int i = 0 ; i < nb_phases ; i++)
347+ {
348+ msg.AddMember (rapidjson::StringRef (consumption_str[i]), rapidjson::Value (currents[i]), msg.GetAllocator ());
349+ }
350+
320351 rapidjson::StringBuffer buffer;
321352 rapidjson::Writer<rapidjson::StringBuffer> writer (buffer);
322353 msg.Accept (writer);
0 commit comments