From e17af28accc29b29f93d841fc4c0f7d8ef1d5a48 Mon Sep 17 00:00:00 2001 From: LUCAS DREZET Date: Thu, 20 Oct 2022 15:07:26 +0200 Subject: [PATCH 1/4] add logs when receive MQTT message --- src/chargepoint/mqtt/MqttManager.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/chargepoint/mqtt/MqttManager.cpp b/src/chargepoint/mqtt/MqttManager.cpp index 80c5e6e..df8e548 100644 --- a/src/chargepoint/mqtt/MqttManager.cpp +++ b/src/chargepoint/mqtt/MqttManager.cpp @@ -58,6 +58,8 @@ void MqttManager::mqttMessageReceived(const char* topic, const std::string& mess (void)qos; (void)retained; + std::cout << "MQTT message received!" << std::endl; + // Decode message bool valid = false; rapidjson::Document payload; @@ -75,6 +77,7 @@ void MqttManager::mqttMessageReceived(const char* topic, const std::string& mess } else { + std::cout << "topic: " << topic << "\npayload: " << message << std::endl; // Split topic name std::filesystem::path topic_path(topic); @@ -185,10 +188,10 @@ void MqttManager::start(unsigned int nb_phases, unsigned int max_charge_point_cu std::cout << "Connecting to the broker (" << m_config.mqttConfig().brokerUrl() << ")..." << std::endl; if (m_mqtt->connect(m_config.mqttConfig().brokerUrl())) { - std::cout << "Subscribing to charge point's command topic..." << std::endl; + std::cout << "Subscribing to charge point's command topic: " << chargepoint_cmd_topic << std::endl; if (m_mqtt->subscribe(chargepoint_cmd_topic)) { - std::cout << "Subscribing to charge point's connector topics..." << std::endl; + std::cout << "Subscribing to charge point's connector topics: " << chargepoint_car_topics << " and " << chargepoint_tag_topics << std::endl; if (m_mqtt->subscribe(chargepoint_car_topics) && m_mqtt->subscribe(chargepoint_tag_topics)) { // Wait for disconnection or end of application From 17f862fec7c5aa6a4da978cee2fe4f523d92f093 Mon Sep 17 00:00:00 2001 From: LUCAS DREZET Date: Wed, 26 Oct 2022 13:38:23 +0200 Subject: [PATCH 2/4] simu now can have different intensities on each phase --- README.md | 14 ++-- docker/Dockerfile | 2 +- src/chargepoint/ConnectorData.h | 10 +-- src/chargepoint/SimulatedChargePoint.cpp | 27 ++++++-- src/chargepoint/mqtt/MqttManager.cpp | 56 +++++++++++++-- src/supervisor/ChargePointManager.py | 20 ++++-- src/supervisor/ui/ConnectorWidget.py | 10 ++- src/supervisor/ui/SupervisorScreen.py | 18 +++-- src/supervisor/ui/connector.kv | 86 +++++++++++++++++++++--- 9 files changed, 201 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 6fbd476..600c4a5 100644 --- a/README.md +++ b/README.md @@ -305,8 +305,12 @@ The status message has the following payload : "max_setpoint":32.0, "ocpp_setpoint":32.0, "setpoint":0.0, - "consumption":0.0, - "car_consumption":0.0, + "consumption_l1":0.0, + "consumption_l2":0.0, + "consumption_l3":0.0, + "car_consumption_l1":0.0, + "car_consumption_l2":0.0, + "car_consumption_l3":0.0, "car_cable_capacity":0.0, "car_ready":true } @@ -318,9 +322,11 @@ The expected command payload is : ``` { - "cable": 32, + "cable": 32.0, "ready": true, - "consumption": 10 + "consumption_l1": 10.0, + "consumption_l2": 10.0, + "consumption_l3": 10.0 } ``` diff --git a/docker/Dockerfile b/docker/Dockerfile index e31c785..7a0cea7 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -11,7 +11,7 @@ ARG gid=1000 RUN echo "APT::Get::Assume-Yes "true";" >> /etc/apt/apt.conf.d/aptconf -RUN apt-get update && apt-get install build-essential clang cmake python3 python3-pip python3-venv wget libpaho-mqtt-dev git openssl libssl-dev sqlite3 libsqlite3-dev\ +RUN apt-get update && apt-get install build-essential clang cmake python3 python3-pip python3-venv wget libpaho-mqtt-dev git openssl libssl-dev sqlite3 libsqlite3-dev zip curl \ && apt-get -q autoremove && rm -rf "/var/lib/apt/lists/*" RUN git clone https://github.com/c-jimenez/open-ocpp.git diff --git a/src/chargepoint/ConnectorData.h b/src/chargepoint/ConnectorData.h index 0d5dc90..e8c82e1 100644 --- a/src/chargepoint/ConnectorData.h +++ b/src/chargepoint/ConnectorData.h @@ -41,7 +41,9 @@ struct ConnectorData max_setpoint(0.f), ocpp_setpoint(0.f), setpoint(0.f), - car_consumption(0.f), + car_consumption_l1(0.f), + car_consumption_l2(0.f), + car_consumption_l3(0.f), car_cable_capacity(0.f), car_ready(true), preparing_start(), @@ -63,10 +65,10 @@ struct ConnectorData float ocpp_setpoint; /** @brief Setpoint */ float setpoint; - /** @brief Consumption */ - float consumption; /** @brief Car consumption */ - float car_consumption; + float car_consumption_l1; + float car_consumption_l2; + float car_consumption_l3; /** @brief Car cable capacity */ float car_cable_capacity; /** @brief Indicate that the car is ready to charge */ diff --git a/src/chargepoint/SimulatedChargePoint.cpp b/src/chargepoint/SimulatedChargePoint.cpp index aaaa8fd..a03c798 100644 --- a/src/chargepoint/SimulatedChargePoint.cpp +++ b/src/chargepoint/SimulatedChargePoint.cpp @@ -650,17 +650,36 @@ void SimulatedChargePoint::computeSetpoints(ocpp::chargepoint::IChargePoint& cha void SimulatedChargePoint::computeCurrentConsumption(ConnectorData& connector) { // Default is no consumption - connector.consumption = 0.f; + float consumption_l1 = 0.f; + float consumption_l2 = 0.f; + float consumption_l3 = 0.f; // Check if charging if (connector.status == ChargePointStatus::Charging) { // Consumption must match both setpoint and car needs - connector.consumption = std::min(connector.car_consumption, connector.setpoint); + unsigned int nb_phases = connector.meter->getNumberOfPhases(); + if (nb_phases == 1) + { + consumption_l1 = std::min(connector.car_consumption_l1, connector.setpoint); + } + else if (nb_phases == 2) + { + consumption_l1 = std::min(connector.car_consumption_l1, connector.setpoint); + consumption_l2 = std::min(connector.car_consumption_l2, connector.setpoint); + } + else if (nb_phases == 3) + { + consumption_l1 = std::min(connector.car_consumption_l1, connector.setpoint); + consumption_l2 = std::min(connector.car_consumption_l2, connector.setpoint); + consumption_l3 = std::min(connector.car_consumption_l3, connector.setpoint); + } } // Apply consumption in the meter - std::vector currents(connector.meter->getNumberOfPhases()); - currents.assign(currents.size(), connector.consumption); + std::vector currents; + currents.push_back(consumption_l1); + currents.push_back(consumption_l2); + currents.push_back(consumption_l3); connector.meter->setCurrents(currents); } \ No newline at end of file diff --git a/src/chargepoint/mqtt/MqttManager.cpp b/src/chargepoint/mqtt/MqttManager.cpp index df8e548..836328e 100644 --- a/src/chargepoint/mqtt/MqttManager.cpp +++ b/src/chargepoint/mqtt/MqttManager.cpp @@ -25,6 +25,7 @@ SOFTWARE. #include "MqttManager.h" #include "SimulatedChargePointConfig.h" #include "Topics.h" +#include "MeterSimulator.h" #include "json.h" #include @@ -131,12 +132,28 @@ void MqttManager::mqttMessageReceived(const char* topic, const std::string& mess connector_data.car_ready = ready.GetBool(); } } - if (payload.HasMember("consumption")) + if (payload.HasMember("consumption_l1")) { - rapidjson::Value& consumption = payload["consumption"]; - if (consumption.IsFloat()) + rapidjson::Value& consumption_l1 = payload["consumption_l1"]; + if (consumption_l1.IsFloat()) { - connector_data.car_consumption = consumption.GetFloat(); + connector_data.car_consumption_l1 = consumption_l1.GetFloat(); + } + } + if (payload.HasMember("consumption_l2")) + { + rapidjson::Value& consumption_l2 = payload["consumption_l2"]; + if (consumption_l2.IsFloat()) + { + connector_data.car_consumption_l2 = consumption_l2.GetFloat(); + } + } + if (payload.HasMember("consumption_l3")) + { + rapidjson::Value& consumption_l3 = payload["consumption_l3"]; + if (consumption_l3.IsFloat()) + { + connector_data.car_consumption_l3 = consumption_l3.GetFloat(); } } } @@ -270,7 +287,9 @@ void MqttManager::updateData(std::vector& connectors) const const ConnectorData& mqtt_data = m_connectors[connector.id - 1u]; connector.car_cable_capacity = mqtt_data.car_cable_capacity; connector.car_ready = mqtt_data.car_ready; - connector.car_consumption = mqtt_data.car_consumption; + connector.car_consumption_l1 = mqtt_data.car_consumption_l1; + connector.car_consumption_l2 = mqtt_data.car_consumption_l2; + connector.car_consumption_l3 = mqtt_data.car_consumption_l3; connector.fault_pending = mqtt_data.fault_pending; } } @@ -303,6 +322,7 @@ void MqttManager::publishData(const std::vector& connectors) std::stringstream topic; topic << m_connectors_topic << connector.id << "/status"; + // Create the JSON message rapidjson::Document msg; msg.Parse("{}"); @@ -315,11 +335,33 @@ void MqttManager::publishData(const std::vector& connectors) msg.AddMember(rapidjson::StringRef("max_setpoint"), rapidjson::Value(connector.max_setpoint), msg.GetAllocator()); msg.AddMember(rapidjson::StringRef("ocpp_setpoint"), rapidjson::Value(connector.ocpp_setpoint), msg.GetAllocator()); msg.AddMember(rapidjson::StringRef("setpoint"), rapidjson::Value(connector.setpoint), msg.GetAllocator()); - msg.AddMember(rapidjson::StringRef("consumption"), rapidjson::Value(connector.consumption), msg.GetAllocator()); - msg.AddMember(rapidjson::StringRef("car_consumption"), rapidjson::Value(connector.car_consumption), msg.GetAllocator()); + msg.AddMember(rapidjson::StringRef("car_consumption_l1"), rapidjson::Value(connector.car_consumption_l1), msg.GetAllocator()); + msg.AddMember(rapidjson::StringRef("car_consumption_l2"), rapidjson::Value(connector.car_consumption_l2), msg.GetAllocator()); + msg.AddMember(rapidjson::StringRef("car_consumption_l3"), rapidjson::Value(connector.car_consumption_l3), msg.GetAllocator()); msg.AddMember(rapidjson::StringRef("car_cable_capacity"), rapidjson::Value(connector.car_cable_capacity), msg.GetAllocator()); msg.AddMember(rapidjson::StringRef("car_ready"), rapidjson::Value(connector.car_ready), msg.GetAllocator()); + std::vector currents = connector.meter->getCurrents(); + unsigned int nb_phases = connector.meter->getNumberOfPhases(); + if (nb_phases == 1) + { + msg.AddMember(rapidjson::StringRef("consumption_l1"), rapidjson::Value(currents[0]), msg.GetAllocator()); + msg.AddMember(rapidjson::StringRef("consumption_l2"), rapidjson::Value(0), msg.GetAllocator()); + msg.AddMember(rapidjson::StringRef("consumption_l3"), rapidjson::Value(0), msg.GetAllocator()); + } + else if (nb_phases == 2) + { + msg.AddMember(rapidjson::StringRef("consumption_l1"), rapidjson::Value(currents[0]), msg.GetAllocator()); + msg.AddMember(rapidjson::StringRef("consumption_l2"), rapidjson::Value(currents[1]), msg.GetAllocator()); + msg.AddMember(rapidjson::StringRef("consumption_l3"), rapidjson::Value(0), msg.GetAllocator()); + } + else if (nb_phases == 3) + { + msg.AddMember(rapidjson::StringRef("consumption_l1"), rapidjson::Value(currents[0]), msg.GetAllocator()); + msg.AddMember(rapidjson::StringRef("consumption_l2"), rapidjson::Value(currents[1]), msg.GetAllocator()); + msg.AddMember(rapidjson::StringRef("consumption_l3"), rapidjson::Value(currents[2]), msg.GetAllocator()); + } + rapidjson::StringBuffer buffer; rapidjson::Writer writer(buffer); msg.Accept(writer); diff --git a/src/supervisor/ChargePointManager.py b/src/supervisor/ChargePointManager.py index 291def8..eef939c 100644 --- a/src/supervisor/ChargePointManager.py +++ b/src/supervisor/ChargePointManager.py @@ -49,9 +49,13 @@ def __init__(self, id: int) -> None: # Setpoint self.setpoint = 0 # Consumption - self.consumption = 0 + self.consumption_l1 = 0 + self.consumption_l2 = 0 + self.consumption_l3 = 0 # Car consumption - self.car_consumption = 0 + self.car_consumption_l1 = 0 + self.car_consumption_l2 = 0 + self.car_consumption_l3 = 0 # Car cable capacity self.car_cable_capacity = 0 # Car ready for charging @@ -138,7 +142,7 @@ def stop(self) -> bool: return ret - def send_connector_values(self, cp_id: str, con_id: int, car_consumption: float, car_cable: float, car_ready: bool) -> bool: + def send_connector_values(self, cp_id: str, con_id: int, car_consumption_l1: float, car_consumption_l2: float, car_consumption_l3: float, car_cable: float, car_ready: bool) -> bool: """ Send new connector values for a Charge Point """ ret = False @@ -150,7 +154,7 @@ def send_connector_values(self, cp_id: str, con_id: int, car_consumption: float, # Build message payload = {"cable": car_cable, "ready": car_ready, - "consumption": car_consumption} + "consumption_l1": car_consumption_l1, "consumption_l2": car_consumption_l2, "consumption_l3": car_consumption_l3} # Publish message ret = self.__client.publish(topic_name, json.dumps(payload)) @@ -352,8 +356,12 @@ def __on_message_received(self, topic: str, payload: str, qos: int, retained: bo con.max_setpoint = data["max_setpoint"] con.ocpp_setpoint = data["ocpp_setpoint"] con.setpoint = data["setpoint"] - con.consumption = data["consumption"] - con.car_consumption = data["car_consumption"] + con.consumption_l1 = data["consumption_l1"] + con.consumption_l2 = data["consumption_l2"] + con.consumption_l3 = data["consumption_l3"] + con.car_consumption_l1 = data["car_consumption_l1"] + con.car_consumption_l2 = data["car_consumption_l2"] + con.car_consumption_l3 = data["car_consumption_l3"] con.car_cable_capacity = data["car_cable_capacity"] con.car_ready = data["car_ready"] diff --git a/src/supervisor/ui/ConnectorWidget.py b/src/supervisor/ui/ConnectorWidget.py index 265a9a5..c5fb0ea 100644 --- a/src/supervisor/ui/ConnectorWidget.py +++ b/src/supervisor/ui/ConnectorWidget.py @@ -33,14 +33,18 @@ class ConnectorWidget(BoxLayout): con_id = NumericProperty(None) status = StringProperty(None) max_current = NumericProperty(None) - car_consumption = NumericProperty(None) + car_consumption_l1 = NumericProperty(None) + car_consumption_l2 = NumericProperty(None) + car_consumption_l3 = NumericProperty(None) car_cable = NumericProperty(None) car_ready = BooleanProperty(None) id_tag = StringProperty(None) - def set_properties(self, car_consumption: float, car_cable: float, car_ready: bool, id_tag: str) -> None: + def set_properties(self, car_consumption_l1: float, car_consumption_l2: float, car_consumption_l3: float, car_cable: float, car_ready: bool, id_tag: str) -> None: """ Set the properties values """ - self.sl_car_consumption.value = car_consumption + self.sl_car_consumption_l1.value = car_consumption_l1 + self.sl_car_consumption_l2.value = car_consumption_l2 + self.sl_car_consumption_l3.value = car_consumption_l3 self.sl_car_cable.value = car_cable self.tb_car_ready.active = not car_ready self.ti_id_tag.text = id_tag diff --git a/src/supervisor/ui/SupervisorScreen.py b/src/supervisor/ui/SupervisorScreen.py index 3790bc1..a85a10c 100644 --- a/src/supervisor/ui/SupervisorScreen.py +++ b/src/supervisor/ui/SupervisorScreen.py @@ -234,7 +234,9 @@ def __on_cp_update(self, cp: ChargePoint, deleted: bool) -> None: connector_widget = self.stk_connectors.children[con_index] if isinstance(connector_widget, ConnectorWidget) and connector_widget.con_id == con_id: connector_widget.status = connector.status - connector_widget.consumption = connector.consumption + connector_widget.consumption_l1 = connector.consumption_l1 + connector_widget.consumption_l2 = connector.consumption_l2 + connector_widget.consumption_l3 = connector.consumption_l3 break else: @@ -302,13 +304,19 @@ def on_cp_selection_changed(self, value, *args): widget.con_id = connector.id widget.status = connector.status widget.max_current = connector.max_setpoint - widget.consumption = connector.consumption - widget.set_properties(connector.car_consumption, connector.car_cable_capacity, + widget.consumption_l1 = connector.consumption_l1 + widget.consumption_l2 = connector.consumption_l2 + widget.consumption_l3 = connector.consumption_l3 + widget.set_properties(connector.car_consumption_l1, connector.car_consumption_l2, connector.car_consumption_l3, connector.car_cable_capacity, connector.car_ready, connector.id_tag) # Bind to events widget.bind( - car_consumption=self.on_connector_value_changed) + car_consumption_l1=self.on_connector_value_changed) + widget.bind( + car_consumption_l2=self.on_connector_value_changed) + widget.bind( + car_consumption_l3=self.on_connector_value_changed) widget.bind( car_cable=self.on_connector_value_changed) widget.bind( @@ -323,7 +331,7 @@ def on_connector_value_changed(self, connector, *args): """ Called when a value in the connector has changed """ # Send new connector values self.__cp_mgr.send_connector_values( - self.__selected_cp_id, connector.con_id, connector.car_consumption, connector.car_cable, connector.car_ready) + self.__selected_cp_id, connector.con_id, connector.car_consumption_l1, connector.car_consumption_l2, connector.car_consumption_l3, connector.car_cable, connector.car_ready) def on_connector_id_tag_passed(self, connector, *args): """ Called when an id tag has been passed on a connector """ diff --git a/src/supervisor/ui/connector.kv b/src/supervisor/ui/connector.kv index 15aa9ca..8bfd396 100644 --- a/src/supervisor/ui/connector.kv +++ b/src/supervisor/ui/connector.kv @@ -31,23 +31,29 @@ con_id: 1 status: "Dead" max_current: 16 - consumption: 0 - car_consumption: sl_car_consumption.value + consumption_l1: 0 + consumption_l2: 0 + consumption_l3: 0 + car_consumption_l1: sl_car_consumption_l1.value + car_consumption_l2: sl_car_consumption_l2.value + car_consumption_l3: sl_car_consumption_l3.value car_cable: sl_car_cable.value car_ready: not tb_car_ready.active id_tag: ti_id_tag.text - sl_car_consumption: sl_car_consumption + sl_car_consumption_l1: sl_car_consumption_l1 + sl_car_consumption_l2: sl_car_consumption_l2 + sl_car_consumption_l3: sl_car_consumption_l3 sl_car_cable: sl_car_cable tb_car_ready: tb_car_ready ti_id_tag: ti_id_tag bt_id_tag: bt_id_tag size_hint: None, None - size: 400, 200 + size: 400, 280 connector_status_text: 'Connector : ' + str(root.con_id) + ' - ' + root.status - connector_status_charging_text: self.connector_status_text + ' (' + str(root.consumption) + 'A)' + connector_status_charging_text: self.connector_status_text + ' (' + str(root.consumption_l1) + '/' + str(root.consumption_l2) + '/' + str(root.consumption_l3) + 'A)' BackgroundLabel: text: root.connector_status_charging_text if root.status == "Charging" else root.connector_status_text @@ -129,7 +135,7 @@ size: 400, 40 Label: - text: 'Car consumption' + text: 'Car consumption Phase1' text_size: self.size halign: 'center' valign: 'middle' @@ -137,7 +143,7 @@ size: 150, 0 Slider: - id: sl_car_consumption + id: sl_car_consumption_l1 min: 0 max: root.max_current step: 1 @@ -146,7 +152,71 @@ size: 150, 0 Label: - text: str(sl_car_consumption.value) + 'A' + text: str(sl_car_consumption_l1.value) + 'A' + text_size: self.size + halign: 'center' + valign: 'middle' + size_hint: None, 1. + size: 50, 0 + + BoxLayout: + orientation: 'horizontal' + padding: 5 + spacing: 5 + size_hint: None, None + size: 400, 40 + + Label: + text: 'Car consumption Phase2' + text_size: self.size + halign: 'center' + valign: 'middle' + size_hint: None, 1. + size: 150, 0 + + Slider: + id: sl_car_consumption_l2 + min: 0 + max: root.max_current + step: 1 + orientation: 'horizontal' + size_hint: None, 1. + size: 150, 0 + + Label: + text: str(sl_car_consumption_l2.value) + 'A' + text_size: self.size + halign: 'center' + valign: 'middle' + size_hint: None, 1. + size: 50, 0 + + BoxLayout: + orientation: 'horizontal' + padding: 5 + spacing: 5 + size_hint: None, None + size: 400, 40 + + Label: + text: 'Car consumption Phase3' + text_size: self.size + halign: 'center' + valign: 'middle' + size_hint: None, 1. + size: 150, 0 + + Slider: + id: sl_car_consumption_l3 + min: 0 + max: root.max_current + step: 1 + orientation: 'horizontal' + size_hint: None, 1. + size: 150, 0 + + Label: + text: str(sl_car_consumption_l3.value) + 'A' text_size: self.size halign: 'center' valign: 'middle' From 72eb172b97a3af940b6b1e6552bfba5e9d85d929 Mon Sep 17 00:00:00 2001 From: LUCAS DREZET Date: Thu, 27 Oct 2022 14:37:31 +0200 Subject: [PATCH 3/4] fix requested changes --- src/chargepoint/SimulatedChargePoint.cpp | 31 ++++++++++++++---------- src/chargepoint/mqtt/MqttManager.cpp | 22 +++-------------- 2 files changed, 22 insertions(+), 31 deletions(-) diff --git a/src/chargepoint/SimulatedChargePoint.cpp b/src/chargepoint/SimulatedChargePoint.cpp index a03c798..f899ec6 100644 --- a/src/chargepoint/SimulatedChargePoint.cpp +++ b/src/chargepoint/SimulatedChargePoint.cpp @@ -659,20 +659,25 @@ void SimulatedChargePoint::computeCurrentConsumption(ConnectorData& connector) { // Consumption must match both setpoint and car needs unsigned int nb_phases = connector.meter->getNumberOfPhases(); - if (nb_phases == 1) + switch (nb_phases) { - consumption_l1 = std::min(connector.car_consumption_l1, connector.setpoint); - } - else if (nb_phases == 2) - { - consumption_l1 = std::min(connector.car_consumption_l1, connector.setpoint); - consumption_l2 = std::min(connector.car_consumption_l2, connector.setpoint); - } - else if (nb_phases == 3) - { - consumption_l1 = std::min(connector.car_consumption_l1, connector.setpoint); - consumption_l2 = std::min(connector.car_consumption_l2, connector.setpoint); - consumption_l3 = std::min(connector.car_consumption_l3, connector.setpoint); + case 1: + consumption_l1 = std::min(connector.car_consumption_l1, connector.setpoint); + break; + + case 2: + consumption_l1 = std::min(connector.car_consumption_l1, connector.setpoint); + consumption_l2 = std::min(connector.car_consumption_l2, connector.setpoint); + break; + + case 3: + consumption_l1 = std::min(connector.car_consumption_l1, connector.setpoint); + consumption_l2 = std::min(connector.car_consumption_l2, connector.setpoint); + consumption_l3 = std::min(connector.car_consumption_l3, connector.setpoint); + break; + + default: + break; } } diff --git a/src/chargepoint/mqtt/MqttManager.cpp b/src/chargepoint/mqtt/MqttManager.cpp index 836328e..1d87dbf 100644 --- a/src/chargepoint/mqtt/MqttManager.cpp +++ b/src/chargepoint/mqtt/MqttManager.cpp @@ -78,7 +78,7 @@ void MqttManager::mqttMessageReceived(const char* topic, const std::string& mess } else { - std::cout << "topic: " << topic << "\npayload: " << message << std::endl; + std::cout << "topic: " << topic << std::endl << "payload: " << message << std::endl; // Split topic name std::filesystem::path topic_path(topic); @@ -322,7 +322,6 @@ void MqttManager::publishData(const std::vector& connectors) std::stringstream topic; topic << m_connectors_topic << connector.id << "/status"; - // Create the JSON message rapidjson::Document msg; msg.Parse("{}"); @@ -341,25 +340,12 @@ void MqttManager::publishData(const std::vector& connectors) msg.AddMember(rapidjson::StringRef("car_cable_capacity"), rapidjson::Value(connector.car_cable_capacity), msg.GetAllocator()); msg.AddMember(rapidjson::StringRef("car_ready"), rapidjson::Value(connector.car_ready), msg.GetAllocator()); + static const char* consumption_str[] = {"consumption_l1", "consumption_l2", "consumption_l3"}; std::vector currents = connector.meter->getCurrents(); unsigned int nb_phases = connector.meter->getNumberOfPhases(); - if (nb_phases == 1) - { - msg.AddMember(rapidjson::StringRef("consumption_l1"), rapidjson::Value(currents[0]), msg.GetAllocator()); - msg.AddMember(rapidjson::StringRef("consumption_l2"), rapidjson::Value(0), msg.GetAllocator()); - msg.AddMember(rapidjson::StringRef("consumption_l3"), rapidjson::Value(0), msg.GetAllocator()); - } - else if (nb_phases == 2) - { - msg.AddMember(rapidjson::StringRef("consumption_l1"), rapidjson::Value(currents[0]), msg.GetAllocator()); - msg.AddMember(rapidjson::StringRef("consumption_l2"), rapidjson::Value(currents[1]), msg.GetAllocator()); - msg.AddMember(rapidjson::StringRef("consumption_l3"), rapidjson::Value(0), msg.GetAllocator()); - } - else if (nb_phases == 3) + for (unsigned int i = 0; i < nb_phases ; i++) { - msg.AddMember(rapidjson::StringRef("consumption_l1"), rapidjson::Value(currents[0]), msg.GetAllocator()); - msg.AddMember(rapidjson::StringRef("consumption_l2"), rapidjson::Value(currents[1]), msg.GetAllocator()); - msg.AddMember(rapidjson::StringRef("consumption_l3"), rapidjson::Value(currents[2]), msg.GetAllocator()); + msg.AddMember(rapidjson::StringRef(consumption_str[i]), rapidjson::Value(currents[i]), msg.GetAllocator()); } rapidjson::StringBuffer buffer; From 5a367cd4550d51ea23d0cb031ea0664613d4a826 Mon Sep 17 00:00:00 2001 From: Lucas DREZET Date: Thu, 10 Nov 2022 09:27:29 +0100 Subject: [PATCH 4/4] openocpp connection time out is now 30sec --- src/chargepoint/config/config.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chargepoint/config/config.ini b/src/chargepoint/config/config.ini index 45793ba..6715e17 100644 --- a/src/chargepoint/config/config.ini +++ b/src/chargepoint/config/config.ini @@ -47,7 +47,7 @@ AuthorizationCacheEnabled=true AuthorizeRemoteTxRequests=true BlinkRepeat=10 ClockAlignedDataInterval=0 -ConnectionTimeOut=3600 +ConnectionTimeOut=30 ConnectorPhaseRotation=1.RST,2.RST,3.RST ConnectorPhaseRotationMaxLength=3 GetConfigurationMaxKeys=150