publish information from critical battery state
This commit is contained in:
@@ -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"
|
||||
|
||||
14
Network.cpp
14
Network.cpp
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
8
Nuki.cpp
8
Nuki.cpp
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user