publish lock action command result via mqtt

This commit is contained in:
technyon
2022-04-22 21:14:36 +02:00
parent 8759d98871
commit dea5c1adaa
5 changed files with 22 additions and 12 deletions

View File

@@ -8,11 +8,12 @@
#define mqtt_topic_battery_max_turn_current "/battery/maxTurnCurrent"
#define mqtt_topic_battery_lock_distance "/battery/lockDistance"
#define mqtt_topic_lockstate_state "/lock/state"
#define mqtt_topic_lockstate_trigger "/lock/trigger"
#define mqtt_topic_lockstate_completionStatus "/lock/completionStatus"
#define mqtt_topic_lock_state "/lock/state"
#define mqtt_topic_lock_trigger "/lock/trigger"
#define mqtt_topic_lock_completionStatus "/lock/completionStatus"
#define mqtt_topic_lock_action_command_result "/lock/commandResult"
#define mqtt_topic_door_sensor_state "/lock/doorSensorState"
#define mqtt_topic_lockstate_action "/lock/action"
#define mqtt_topic_lock_action "/lock/action"
#define mqtt_topic_config_button_enabled "/configuration/buttonEnabled"
#define mqtt_topic_config_led_enabled "/configuration/ledEnabled"

View File

@@ -147,7 +147,7 @@ bool Network::reconnect()
Serial.println(F("MQTT connected"));
_mqttConnected = true;
delay(200);
subscribe(mqtt_topic_lockstate_action);
subscribe(mqtt_topic_lock_action);
for(auto topic : _configTopics)
{
@@ -206,7 +206,7 @@ void Network::onMqttDataReceived(char *&topic, byte *&payload, unsigned int &len
value[i] = payload[i];
}
if(comparePrefixedPath(topic, mqtt_topic_lockstate_action))
if(comparePrefixedPath(topic, mqtt_topic_lock_action))
{
if(strcmp(value, "") == 0) return;
@@ -216,7 +216,7 @@ void Network::onMqttDataReceived(char *&topic, byte *&payload, unsigned int &len
{
_lockActionReceivedCallback(value);
}
publishString(mqtt_topic_lockstate_action, "");
publishString(mqtt_topic_lock_action, "");
}
for(auto configTopic : _configTopics)
@@ -239,21 +239,21 @@ void Network::publishKeyTurnerState(const Nuki::KeyTurnerState& keyTurnerState,
{
memset(&str, 0, sizeof(str));
lockstateToString(keyTurnerState.lockState, str);
publishString(mqtt_topic_lockstate_state, str);
publishString(mqtt_topic_lock_state, str);
}
if(_firstTunerStatePublish || keyTurnerState.trigger != lastKeyTurnerState.trigger)
{
memset(&str, 0, sizeof(str));
triggerToString(keyTurnerState.trigger, str);
publishString(mqtt_topic_lockstate_trigger, str);
publishString(mqtt_topic_lock_trigger, str);
}
if(_firstTunerStatePublish || keyTurnerState.lastLockActionCompletionStatus != lastKeyTurnerState.lastLockActionCompletionStatus)
{
memset(&str, 0, sizeof(str));
completionStatusToString(keyTurnerState.lastLockActionCompletionStatus, str);
publishString(mqtt_topic_lockstate_completionStatus, str);
publishString(mqtt_topic_lock_completionStatus, str);
}
if(_firstTunerStatePublish || keyTurnerState.doorSensorState != lastKeyTurnerState.doorSensorState)
@@ -276,6 +276,11 @@ void Network::publishKeyTurnerState(const Nuki::KeyTurnerState& keyTurnerState,
_firstTunerStatePublish = false;
}
void Network::publishCommandResult(const char *resultStr)
{
publishString(mqtt_topic_lock_action_command_result, resultStr);
}
void Network::publishBatteryReport(const Nuki::BatteryReport& batteryReport)
{
publishFloat(mqtt_topic_battery_voltage, (float)batteryReport.batteryVoltage / 1000.0);

View File

@@ -19,6 +19,7 @@ public:
bool isMqttConnected();
void publishKeyTurnerState(const Nuki::KeyTurnerState& keyTurnerState, const Nuki::KeyTurnerState& lastKeyTurnerState);
void publishCommandResult(const char* resultStr);
void publishBatteryReport(const Nuki::BatteryReport& batteryReport);
void publishConfig(const Nuki::Config& config);
void publishAdvancedConfig(const Nuki::AdvancedConfig& config);

View File

@@ -108,6 +108,8 @@ void NukiWrapper::update()
char resultStr[15] = {0};
Nuki::cmdResultToString(cmdResult, resultStr);
_network->publishCommandResult(resultStr);
Serial.print(F("Lock action result: "));
Serial.println(resultStr);

View File

@@ -14,11 +14,12 @@ Just enable pairing mode on the NUKI lock and power on the ESP32. Pairing should
## MQTT Interface
- lock/action: Allows to execute lock actions. After executing the action, the value is reset to an empty string. Possible actions: unlock, lock, unlatch, lockNgo, lockNgoUnlatch, fullLock, fobAction1, fobAction2, fobAction3
- lock/state: Reports the current lock state as a string. Possible values are: uncalibrated, locked, unlocked, unlatched, unlockedLnga, unlatching, bootRun, motorBlocked
- lock/trigger: The trigger of the last action: autoLock, automatic, button, manual, system
- lock/completionStatus: Status of the last action: success, motorBlocked, canceled, tooRecent, busy, lowMotorVoltage, clutchFailure, motorPowerFailure, incompleteFailure, invalidCode, otherError, unknown
- lock/completionStatus: Status of the last action as reported by NUKI lock (needs bluetooth connection): success, motorBlocked, canceled, tooRecent, busy, lowMotorVoltage, clutchFailure, motorPowerFailure, incompleteFailure, invalidCode, otherError, unknown
- lock/commandResult: Result of the last action as reported by NUKI library: success, failed, timeOut, working, notPaired, error, undefined
- lock/doorSensorState: State of the door sensor: unavailable, deactivated, doorClosed, doorOpened, doorStateUnknown, calibrating
- lock/action: Allows to execute lock actions. After executing the action, the value is reset to an empty string. Possible actions: unlock, lock, unlatch, lockNgo, lockNgoUnlatch, fullLock, fobAction1, fobAction2, fobAction3
- battery/voltage: Reports the current battery voltage in Volts.
- battery/level: Battery level in percent