diff --git a/MqttTopics.h b/MqttTopics.h index 243bf52..cafe005 100644 --- a/MqttTopics.h +++ b/MqttTopics.h @@ -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" diff --git a/Network.cpp b/Network.cpp index 5d4a123..69dfc64 100644 --- a/Network.cpp +++ b/Network.cpp @@ -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); diff --git a/Network.h b/Network.h index 3655fd0..b71a54b 100644 --- a/Network.h +++ b/Network.h @@ -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); diff --git a/NukiWrapper.cpp b/NukiWrapper.cpp index f5aa992..676b37f 100644 --- a/NukiWrapper.cpp +++ b/NukiWrapper.cpp @@ -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); diff --git a/README.md b/README.md index d38306d..373b691 100644 --- a/README.md +++ b/README.md @@ -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