publish trigger action and completion status
This commit is contained in:
@@ -4,5 +4,7 @@
|
||||
#define mqtt_topic_battery_drain "nuki/battery/drain"
|
||||
#define mqtt_topic_battery_max_turn_current "nuki/battery/maxTurnCurrent"
|
||||
|
||||
#define mqtt_topic_lockstate "nuki/lock/state"
|
||||
#define mqtt_topic_lockstate_state "nuki/lock/state"
|
||||
#define mqtt_topic_lockstate_trigger "nuki/lock/trigger"
|
||||
#define mqtt_topic_lockstate_completionStatus "nuki/lock/completionStatus"
|
||||
#define mqtt_topic_lockstate_action "nuki/lock/action"
|
||||
10
Network.cpp
10
Network.cpp
@@ -135,9 +135,11 @@ void Network::onMqttDataReceived(char *&topic, byte *&payload, unsigned int &len
|
||||
}
|
||||
}
|
||||
|
||||
void Network::publishKeyTurnerState(const char* state)
|
||||
void Network::publishKeyTurnerState(const char* state, const char* trigger, const char* completionStatus)
|
||||
{
|
||||
_mqttClient.publish(mqtt_topic_lockstate, state);
|
||||
_mqttClient.publish(mqtt_topic_lockstate_state, state);
|
||||
_mqttClient.publish(mqtt_topic_lockstate_trigger, trigger);
|
||||
_mqttClient.publish(mqtt_topic_lockstate_completionStatus, completionStatus);
|
||||
}
|
||||
|
||||
void Network::setLockActionReceived(void (*lockActionReceivedCallback)(const char *))
|
||||
@@ -148,8 +150,8 @@ void Network::setLockActionReceived(void (*lockActionReceivedCallback)(const cha
|
||||
void Network::publishBatteryReport(const BatteryReport& batteryReport)
|
||||
{
|
||||
publishFloat(mqtt_topic_battery_voltage, (float)batteryReport.batteryVoltage / 1000.0);
|
||||
publishFloat(mqtt_topic_battery_drain, (float)batteryReport.batteryDrain / 1000.0); // milliwatt seconds
|
||||
publishInt(mqtt_topic_battery_max_turn_current, batteryReport.maxTurnCurrent);
|
||||
publishInt(mqtt_topic_battery_drain, batteryReport.batteryDrain); // milliwatt seconds
|
||||
publishFloat(mqtt_topic_battery_max_turn_current, (float)batteryReport.maxTurnCurrent / 1000.0);
|
||||
}
|
||||
|
||||
void Network::publishFloat(const char* topic, const float value, const uint8_t precision)
|
||||
|
||||
@@ -14,7 +14,7 @@ public:
|
||||
void initialize();
|
||||
void update();
|
||||
|
||||
void publishKeyTurnerState(const char* state);
|
||||
void publishKeyTurnerState(const char* state, const char* trigger, const char* completionStatus);
|
||||
void publishBatteryReport(const BatteryReport& batteryReport);
|
||||
|
||||
void setLockActionReceived(void (*lockActionReceivedCallback)(const char* value));
|
||||
|
||||
85
Nuki.cpp
85
Nuki.cpp
@@ -84,14 +84,18 @@ void Nuki::updateKeyTurnerState()
|
||||
{
|
||||
_nukiBle.requestKeyTurnerState(&_keyTurnerState);
|
||||
|
||||
char str[20];
|
||||
lockstateToString(_keyTurnerState.lockState, str);
|
||||
char lockStateStr[20];
|
||||
lockstateToString(_keyTurnerState.lockState, lockStateStr);
|
||||
char triggerStr[20];
|
||||
triggerToString(_keyTurnerState.trigger, triggerStr);
|
||||
char completionStatusStr[20];
|
||||
completionStatusToString(_keyTurnerState.lastLockActionCompletionStatus, completionStatusStr);
|
||||
|
||||
if(_keyTurnerState.lockState != _lastKeyTurnerState.lockState)
|
||||
{
|
||||
_network->publishKeyTurnerState(str);
|
||||
_network->publishKeyTurnerState(lockStateStr, triggerStr, completionStatusStr);
|
||||
Serial.print(F("Nuki lock state: "));
|
||||
Serial.println(str);
|
||||
Serial.println(lockStateStr);
|
||||
}
|
||||
|
||||
memcpy(&_lastKeyTurnerState, &_keyTurnerState, sizeof(KeyTurnerState));
|
||||
@@ -153,6 +157,79 @@ void Nuki::lockstateToString(const LockState state, char* str)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Nuki::triggerToString(const NukiTrigger trigger, char *str)
|
||||
{
|
||||
switch(trigger)
|
||||
{
|
||||
case NukiTrigger::autoLock:
|
||||
strcpy(str, "autoLock");
|
||||
break;
|
||||
case NukiTrigger::automatic:
|
||||
strcpy(str, "automatic");
|
||||
break;
|
||||
case NukiTrigger::button:
|
||||
strcpy(str, "button");
|
||||
break;
|
||||
case NukiTrigger::manual:
|
||||
strcpy(str, "autoLock");
|
||||
break;
|
||||
case NukiTrigger::system:
|
||||
strcpy(str, "system");
|
||||
break;
|
||||
default:
|
||||
strcpy(str, "undefined");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Nuki::completionStatusToString(const CompletionStatus status, char *str)
|
||||
{
|
||||
switch (status)
|
||||
{
|
||||
case CompletionStatus::success:
|
||||
strcpy(str, "success");
|
||||
break;
|
||||
case CompletionStatus::busy:
|
||||
strcpy(str, "busy");
|
||||
break;
|
||||
case CompletionStatus::canceled:
|
||||
strcpy(str, "canceled");
|
||||
break;
|
||||
case CompletionStatus::clutchFailure:
|
||||
strcpy(str, "clutchFailure");
|
||||
break;
|
||||
case CompletionStatus::incompleteFailure:
|
||||
strcpy(str, "incompleteFailure");
|
||||
break;
|
||||
case CompletionStatus::invalidCode:
|
||||
strcpy(str, "invalidCode");
|
||||
break;
|
||||
case CompletionStatus::lowMotorVoltage:
|
||||
strcpy(str, "lowMotorVoltage");
|
||||
break;
|
||||
case CompletionStatus::motorBlocked:
|
||||
strcpy(str, "motorBlocked");
|
||||
break;
|
||||
case CompletionStatus::motorPowerFailure:
|
||||
strcpy(str, "motorPowerFailure");
|
||||
break;
|
||||
case CompletionStatus::otherError:
|
||||
strcpy(str, "otherError");
|
||||
break;
|
||||
case CompletionStatus::tooRecent:
|
||||
strcpy(str, "tooRecent");
|
||||
break;
|
||||
case CompletionStatus::unknown:
|
||||
strcpy(str, "unknown");
|
||||
break;
|
||||
default:
|
||||
strcpy(str, "undefined");
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
LockAction Nuki::lockActionToEnum(const char *str)
|
||||
{
|
||||
if(strcmp(str, "unlock") == 0) return LockAction::unlock;
|
||||
|
||||
3
Nuki.h
3
Nuki.h
@@ -21,6 +21,9 @@ private:
|
||||
void lockstateToString(const LockState state, char* str); // char array at least 14 characters
|
||||
LockAction lockActionToEnum(const char* str); // char array at least 14 characters
|
||||
|
||||
void triggerToString(const NukiTrigger trigger, char* str); // char arry at least 10 characters
|
||||
void completionStatusToString(const CompletionStatus status, char* str); // char arry at least 18 characters
|
||||
|
||||
NukiBle _nukiBle;
|
||||
Network* _network;
|
||||
Preferences* _preferences;
|
||||
|
||||
Reference in New Issue
Block a user