Publish battery level to MQTT

This commit is contained in:
2024-02-13 11:39:17 +11:00
parent 0eba1a6f1b
commit 42713c1bb1

View File

@@ -45,6 +45,7 @@ void startFetchingPosition(uint16_t shadeID, int8_t targetPosition);
void publishPosition(const String& shadeName, const uint8_t position); void publishPosition(const String& shadeName, const uint8_t position);
void publishState(const String& shadeName, const String& state); void publishState(const String& shadeName, const String& state);
void publishBattery(const String& shadeName, const uint8_t battery);
void publishDiscoveryTopics(); void publishDiscoveryTopics();
@@ -130,6 +131,15 @@ void processPacket(const Packet *packet) {
publishPosition(shades[i].name, position); publishPosition(shades[i].name, position);
} }
} }
} else if (field.identifier == 0x42) {
for (size_t i = 0; i < shades.size(); i++) {
if (packet->source == shades[i].ID) {
uint8_t value = std::get<uint8_t>(field.value);
uint8_t battery = uint8_t(((float)value / 200) * 100);
publishBattery(shades[i].name, battery);
}
}
} }
} }
} }
@@ -207,9 +217,11 @@ bool sendFetchPosition(uint16_t destination) {
std::vector<Field> fields; std::vector<Field> fields;
uint8_t identifier = 0x50; // position // position
FieldType type = FieldType::FETCH; fields.push_back(Field{0x50, FieldType::FETCH, false, std::monostate{}});
fields.push_back(Field{identifier, type, false, std::monostate{}});
// battery
fields.push_back(Field{0x42, FieldType::FETCH, false, std::monostate{}});
packet.parameters = FieldsParameters {fields}; packet.parameters = FieldsParameters {fields};
@@ -331,6 +343,10 @@ void publishPosition(const String& shadeName, const uint8_t position) {
client.publish("hotdog/" + shadeName + "/position", String(position), true); client.publish("hotdog/" + shadeName + "/position", String(position), true);
} }
void publishBattery(const String& shadeName, const uint8_t battery) {
client.publish("hotdog/" + shadeName + "/battery", String(battery), true);
}
void publishDiscoveryTopics() { void publishDiscoveryTopics() {
char buffer[1024]; char buffer[1024];