publish information from critical battery state
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
#pragma once
|
#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_voltage "nuki/battery/voltage"
|
||||||
#define mqtt_topic_battery_drain "nuki/battery/drain"
|
#define mqtt_topic_battery_drain "nuki/battery/drain"
|
||||||
#define mqtt_topic_battery_max_turn_current "nuki/battery/maxTurnCurrent"
|
#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);
|
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)
|
void Network::publishFloat(const char* topic, const float value, const uint8_t precision)
|
||||||
{
|
{
|
||||||
char str[30];
|
char str[30];
|
||||||
@@ -175,6 +182,13 @@ void Network::publishInt(const char *topic, const int value)
|
|||||||
_mqttClient.publish(topic, str);
|
_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()
|
bool Network::isMqttConnected()
|
||||||
{
|
{
|
||||||
return _mqttConnected;
|
return _mqttConnected;
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ public:
|
|||||||
void publishKeyTurnerState(const char* state, const char* trigger, const char* completionStatus);
|
void publishKeyTurnerState(const char* state, const char* trigger, const char* completionStatus);
|
||||||
void publishDoorSensorState(const char* state);
|
void publishDoorSensorState(const char* state);
|
||||||
void publishBatteryReport(const BatteryReport& batteryReport);
|
void publishBatteryReport(const BatteryReport& batteryReport);
|
||||||
|
void publishCriticalBattery(uint8_t level, bool isCritical, bool isCharging);
|
||||||
|
|
||||||
void setLockActionReceived(void (*lockActionReceivedCallback)(const char* value));
|
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 publishFloat(const char* topic, const float value, const uint8_t precision = 2);
|
||||||
void publishInt(const char* topic, const int value);
|
void publishInt(const char* topic, const int value);
|
||||||
|
void publishBool(const char* topic, const bool value);
|
||||||
|
|
||||||
bool reconnect();
|
bool reconnect();
|
||||||
|
|
||||||
|
|||||||
8
Nuki.cpp
8
Nuki.cpp
@@ -109,6 +109,14 @@ void Nuki::updateKeyTurnerState()
|
|||||||
_network->publishDoorSensorState(doorSensorStateStr);
|
_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));
|
memcpy(&_lastKeyTurnerState, &_keyTurnerState, sizeof(KeyTurnerState));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user