publish information from critical battery state

This commit is contained in:
technyon
2022-03-31 20:54:23 +02:00
parent 1efd8157e2
commit 2f3362b76c
4 changed files with 27 additions and 0 deletions

View File

@@ -1,5 +1,8 @@
#pragma once
#define mqtt_topic_battery_level "nuki/battery/level"
#define mqtt_topic_battery_critical "nuki/battery/critical"
#define mqtt_topic_battery_charging "nuki/battery/charging"
#define mqtt_topic_battery_voltage "nuki/battery/voltage"
#define mqtt_topic_battery_drain "nuki/battery/drain"
#define mqtt_topic_battery_max_turn_current "nuki/battery/maxTurnCurrent"

View File

@@ -161,6 +161,13 @@ void Network::publishBatteryReport(const BatteryReport& batteryReport)
publishFloat(mqtt_topic_battery_max_turn_current, (float)batteryReport.maxTurnCurrent / 1000.0);
}
void Network::publishCriticalBattery(uint8_t level, bool isCritical, bool isCharging)
{
publishInt(mqtt_topic_battery_level, level); // milliwatt seconds
publishBool(mqtt_topic_battery_critical, isCritical);
publishBool(mqtt_topic_battery_charging, isCharging);
}
void Network::publishFloat(const char* topic, const float value, const uint8_t precision)
{
char str[30];
@@ -175,6 +182,13 @@ void Network::publishInt(const char *topic, const int value)
_mqttClient.publish(topic, str);
}
void Network::publishBool(const char *topic, const bool value)
{
char str[2] = {0};
str[0] = value ? '1' : '0';
_mqttClient.publish(topic, str);
}
bool Network::isMqttConnected()
{
return _mqttConnected;

View File

@@ -19,6 +19,7 @@ public:
void publishKeyTurnerState(const char* state, const char* trigger, const char* completionStatus);
void publishDoorSensorState(const char* state);
void publishBatteryReport(const BatteryReport& batteryReport);
void publishCriticalBattery(uint8_t level, bool isCritical, bool isCharging);
void setLockActionReceived(void (*lockActionReceivedCallback)(const char* value));
@@ -28,6 +29,7 @@ private:
void publishFloat(const char* topic, const float value, const uint8_t precision = 2);
void publishInt(const char* topic, const int value);
void publishBool(const char* topic, const bool value);
bool reconnect();

View File

@@ -109,6 +109,14 @@ void Nuki::updateKeyTurnerState()
_network->publishDoorSensorState(doorSensorStateStr);
}
if(_keyTurnerState.criticalBatteryState != _lastKeyTurnerState.criticalBatteryState)
{
uint8_t level = (_keyTurnerState.criticalBatteryState & 0b11111100) >> 1;
bool critical = (_keyTurnerState.criticalBatteryState & 0b00000001) > 0;
bool charging = (_keyTurnerState.criticalBatteryState & 0b00000010) > 0;
_network->publishCriticalBattery(level, critical, charging);
}
memcpy(&_lastKeyTurnerState, &_keyTurnerState, sizeof(KeyTurnerState));
}