Publish battery level to MQTT
This commit is contained in:
22
src/main.cpp
22
src/main.cpp
@@ -45,6 +45,7 @@ void startFetchingPosition(uint16_t shadeID, int8_t targetPosition);
|
||||
|
||||
void publishPosition(const String& shadeName, const uint8_t position);
|
||||
void publishState(const String& shadeName, const String& state);
|
||||
void publishBattery(const String& shadeName, const uint8_t battery);
|
||||
|
||||
void publishDiscoveryTopics();
|
||||
|
||||
@@ -130,6 +131,15 @@ void processPacket(const Packet *packet) {
|
||||
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;
|
||||
|
||||
uint8_t identifier = 0x50; // position
|
||||
FieldType type = FieldType::FETCH;
|
||||
fields.push_back(Field{identifier, type, false, std::monostate{}});
|
||||
// position
|
||||
fields.push_back(Field{0x50, FieldType::FETCH, false, std::monostate{}});
|
||||
|
||||
// battery
|
||||
fields.push_back(Field{0x42, FieldType::FETCH, false, std::monostate{}});
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
void publishBattery(const String& shadeName, const uint8_t battery) {
|
||||
client.publish("hotdog/" + shadeName + "/battery", String(battery), true);
|
||||
}
|
||||
|
||||
void publishDiscoveryTopics() {
|
||||
char buffer[1024];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user