Modify helpers for publishing to accept a std::string

This commit is contained in:
2024-05-04 23:11:29 +10:00
parent e8003772ef
commit 82fdc29f2a

View File

@@ -1,5 +1,5 @@
#include <Arduino.h> #include <Arduino.h>
#include <EspMQTTClient.h> #include <EspMqttClient.h>
#include <arduino-timer.h> #include <arduino-timer.h>
#include <ArduinoJson.h> #include <ArduinoJson.h>
#include <RFPowerView.h> #include <RFPowerView.h>
@@ -74,9 +74,9 @@ bool sendPacket(Packet *packet);
bool checkPosition(uint16_t shadeID); bool checkPosition(uint16_t shadeID);
void startFetchingPosition(uint16_t shadeID, int8_t targetPosition); void startFetchingPosition(uint16_t shadeID, int8_t targetPosition);
void publishPosition(const String& shadeName, const uint8_t position); void publishPosition(const std::string& shadeKey, const uint8_t position);
void publishState(const String& shadeName, const String& state); void publishState(const std::string& shadeKey, const String& state);
void publishBattery(const String& shadeName, const uint8_t battery); void publishBattery(const std::string& shadeKey, const uint8_t battery);
void publishDiscoveryTopics(); void publishDiscoveryTopics();
@@ -168,15 +168,15 @@ void processPacket(const Packet *packet) {
} }
shade->lastPosition = position; shade->lastPosition = position;
publishPosition(shade->key.c_str(), position); publishPosition(shade->key, position);
} }
} else if (field.identifier == 0x42) { } else if (field.identifier == 0x42) {
auto shade = shadeRepository.findById(source); auto shade = shadeRepository.findById(source);
if (shade != nullptr) { if (shade != nullptr) {
uint8_t value = std::get<uint8_t>(field.value); uint8_t value = std::get<uint8_t>(field.value);
uint8_t battery = uint8_t(((float)value / 200) * 100); uint8_t battery = uint8_t(((float)value / 200) * 100);
publishBattery(shade->key.c_str(), battery); publishBattery(shade->key, battery);
} }
} }
} }
@@ -304,13 +304,13 @@ void processCommandMessage(const String &topic, const String &payload) {
startFetchingPosition(shade->ID, 100); startFetchingPosition(shade->ID, 100);
publishState(shade->key.c_str(), "opening"); publishState(shade->key, "opening");
} else if (payload == "CLOSE") { } else if (payload == "CLOSE") {
sendClosePacket(shade->ID); sendClosePacket(shade->ID);
startFetchingPosition(shade->ID, 0); startFetchingPosition(shade->ID, 0);
publishState(shade->key.c_str(), "closing"); publishState(shade->key, "closing");
} else if (payload == "STOP") { } else if (payload == "STOP") {
sendStopPacket(shade->ID); sendStopPacket(shade->ID);
@@ -333,9 +333,9 @@ void processSetPositionMessage(const String& topic, const String &payload) {
sendSetPosition(shade->ID, percentage); sendSetPosition(shade->ID, percentage);
if (payload.toInt() > shade->lastPosition) { if (payload.toInt() > shade->lastPosition) {
publishState(shade->key.c_str(), "opening"); publishState(shade->key, "opening");
} else if (payload.toInt() < shade->lastPosition) { } else if (payload.toInt() < shade->lastPosition) {
publishState(shade->key.c_str(), "closing"); publishState(shade->key, "closing");
} }
startFetchingPosition(shade->ID, payload.toInt()); startFetchingPosition(shade->ID, payload.toInt());
@@ -358,7 +358,7 @@ bool checkPosition(uint16_t shadeID) {
} }
} }
publishState(shade->key.c_str(), shade->lastPosition > 0 ? "open" : "closed"); publishState(shade->key, shade->lastPosition > 0 ? "open" : "closed");
return false; return false;
} }
return false; return false;
@@ -381,16 +381,16 @@ void startFetchingPosition(uint16_t shadeID, int8_t targetPosition) {
} }
} }
void publishState(const String& shadeName, const String& state) { void publishState(const std::string& shadeKey, const String& state) {
client.publish(topic_prefix.c_str() + shadeName + "/state", state, true); client.publish((topic_prefix + shadeKey + "/state").c_str(), state, true);
} }
void publishPosition(const String& shadeName, const uint8_t position) { void publishPosition(const std::string& shadeKey, const uint8_t position) {
client.publish(topic_prefix.c_str() + shadeName + "/position", String(position), true); client.publish((topic_prefix + shadeKey + "/position").c_str(), String(position), true);
} }
void publishBattery(const String& shadeName, const uint8_t battery) { void publishBattery(const std::string& shadeKey, const uint8_t battery) {
client.publish(topic_prefix.c_str() + shadeName + "/battery", String(battery), true); client.publish((topic_prefix + shadeKey + "/battery").c_str(), String(battery), true);
} }
void publishDiscoveryTopics() { void publishDiscoveryTopics() {