From eceabfeae7227f5c03a9b1e1274854a9a9877ce0 Mon Sep 17 00:00:00 2001 From: technyon Date: Sat, 13 Aug 2022 20:28:11 +0200 Subject: [PATCH] json log for opener --- NetworkLock.cpp | 15 +++---- NetworkLock.h | 2 +- NetworkOpener.cpp | 94 +++++++++++++++++++++++++++++++++++++++++-- NetworkOpener.h | 3 +- NukiOpenerWrapper.cpp | 21 ++-------- NukiOpenerWrapper.h | 2 - NukiWrapper.cpp | 2 +- lib/nuki_ble | 2 +- 8 files changed, 105 insertions(+), 36 deletions(-) diff --git a/NetworkLock.cpp b/NetworkLock.cpp index 7e8aeed..0d14b96 100644 --- a/NetworkLock.cpp +++ b/NetworkLock.cpp @@ -231,7 +231,7 @@ void NetworkLock::publishBinaryState(NukiLock::LockState lockState) } -void NetworkLock::publishAuthorizationInfo(const std::list& logEntries) +void NetworkLock::publishAuthorizationInfo(const std::list& logEntries) { char str[50]; @@ -261,7 +261,7 @@ void NetworkLock::publishAuthorizationInfo(const std::list& logE switch(log.loggingType) { - case Nuki::LoggingType::LockAction: + case NukiLock::LoggingType::LockAction: memset(str, 0, sizeof(str)); NukiLock::lockactionToString((NukiLock::LockAction)log.data[0], str); json.concat("\"action\": \""); json.concat(str); json.concat("\",\n"); @@ -274,7 +274,7 @@ void NetworkLock::publishAuthorizationInfo(const std::list& logE NukiLock::completionStatusToString((NukiLock::CompletionStatus)log.data[3], str); json.concat("\"completionStatus\": \""); json.concat(str); json.concat("\"\n"); break; - case Nuki::LoggingType::KeypadAction: + case NukiLock::LoggingType::KeypadAction: memset(str, 0, sizeof(str)); NukiLock::lockactionToString((NukiLock::LockAction)log.data[0], str); json.concat("\"action\": \""); json.concat(str); json.concat("\",\n"); @@ -283,7 +283,7 @@ void NetworkLock::publishAuthorizationInfo(const std::list& logE NukiLock::completionStatusToString((NukiLock::CompletionStatus)log.data[2], str); json.concat("\"completionStatus\": \""); json.concat(str); json.concat("\"\n"); break; - case Nuki::LoggingType::DoorSensor: + case NukiLock::LoggingType::DoorSensor: memset(str, 0, sizeof(str)); NukiLock::lockactionToString((NukiLock::LockAction)log.data[0], str); json.concat("\"action\": \""); @@ -324,12 +324,7 @@ void NetworkLock::publishAuthorizationInfo(const std::list& logE json.concat("]"); publishString(mqtt_topic_lock_log, json.c_str()); } -//uint16_t timeStampYear; -//uint8_t timeStampMonth; -//uint8_t timeStampDay; -//uint8_t timeStampHour; -//uint8_t timeStampMinute; -//uint8_t timeStampSecond; + void NetworkLock::clearAuthorizationInfo() { publishString(mqtt_topic_lock_log, ""); diff --git a/NetworkLock.h b/NetworkLock.h index 85420dc..67529d9 100644 --- a/NetworkLock.h +++ b/NetworkLock.h @@ -22,7 +22,7 @@ public: void publishKeyTurnerState(const NukiLock::KeyTurnerState& keyTurnerState, const NukiLock::KeyTurnerState& lastKeyTurnerState); void publishBinaryState(NukiLock::LockState lockState); - void publishAuthorizationInfo(const std::list& logEntries); + void publishAuthorizationInfo(const std::list& logEntries); void clearAuthorizationInfo(); void publishCommandResult(const char* resultStr); void publishBatteryReport(const NukiLock::BatteryReport& batteryReport); diff --git a/NetworkOpener.cpp b/NetworkOpener.cpp index 376bbec..94314d0 100644 --- a/NetworkOpener.cpp +++ b/NetworkOpener.cpp @@ -142,10 +142,98 @@ void NetworkOpener::publishBinaryState(NukiOpener::LockState lockState) } } -void NetworkOpener::publishAuthorizationInfo(const uint32_t authId, const char *authName) +void NetworkOpener::publishAuthorizationInfo(const std::list& logEntries) { - publishUInt(mqtt_topic_lock_auth_id, authId); - publishString(mqtt_topic_lock_auth_name, authName); + char str[50]; + + String json = "[\n"; + + for(const auto& log : logEntries) + { + json.concat("{\n"); + + json.concat("\"index\": "); json.concat(log.index); json.concat(",\n"); + json.concat("\"authorizationId\": "); json.concat(log.authId); json.concat(",\n"); + + memset(str, 0, sizeof(str)); + memcpy(str, log.name, sizeof(log.name)); + json.concat("\"authorizationName\": \""); json.concat(str); json.concat("\",\n"); + + json.concat("\"timeYear\": "); json.concat(log.timeStampYear); json.concat(",\n"); + json.concat("\"timeMonth\": "); json.concat(log.timeStampMonth); json.concat(",\n"); + json.concat("\"timeDay\": "); json.concat(log.timeStampDay); json.concat(",\n"); + json.concat("\"timeHour\": "); json.concat(log.timeStampHour); json.concat(",\n"); + json.concat("\"timeMinute\": "); json.concat(log.timeStampMinute); json.concat(",\n"); + json.concat("\"timeSecond\": "); json.concat(log.timeStampSecond); json.concat(",\n"); + + memset(str, 0, sizeof(str)); + loggingTypeToString(log.loggingType, str); + json.concat("\"type\": \""); json.concat(str); json.concat("\",\n"); + + switch(log.loggingType) + { + case NukiOpener::LoggingType::LockAction: + memset(str, 0, sizeof(str)); + NukiLock::lockactionToString((NukiLock::LockAction)log.data[0], str); + json.concat("\"action\": \""); json.concat(str); json.concat("\",\n"); + + memset(str, 0, sizeof(str)); + NukiLock::triggerToString((NukiLock::Trigger)log.data[1], str); + json.concat("\"trigger\": \""); json.concat(str); json.concat("\",\n"); + + memset(str, 0, sizeof(str)); + NukiLock::completionStatusToString((NukiLock::CompletionStatus)log.data[3], str); + json.concat("\"completionStatus\": \""); json.concat(str); json.concat("\"\n"); + break; + case NukiOpener::LoggingType::KeypadAction: + memset(str, 0, sizeof(str)); + NukiLock::lockactionToString((NukiLock::LockAction)log.data[0], str); + json.concat("\"action\": \""); json.concat(str); json.concat("\",\n"); + + memset(str, 0, sizeof(str)); + NukiLock::completionStatusToString((NukiLock::CompletionStatus)log.data[2], str); + json.concat("\"completionStatus\": \""); json.concat(str); json.concat("\"\n"); + break; + case NukiOpener::LoggingType::DoorbellRecognition: + json.concat("\"mode\": \""); + switch(log.data[0] & 3) + { + case 0: + json.concat("None"); + break; + case 1: + json.concat("RTO"); + break; + case 2: + json.concat("CM"); + break; + default: + json.concat("Unknown"); + break; + } + json.concat("\",\n"); + break; + + } + + json.concat("}"); + if(&log == &logEntries.back()) + { + json.concat("\n"); + } + else + { + json.concat(",\n"); + } + } + + json.concat("]"); + publishString(mqtt_topic_lock_log, json.c_str()); +} + +void NetworkOpener::clearAuthorizationInfo() +{ + publishString(mqtt_topic_lock_log, ""); } void NetworkOpener::publishCommandResult(const char *resultStr) diff --git a/NetworkOpener.h b/NetworkOpener.h index db90ee1..1fb89cd 100644 --- a/NetworkOpener.h +++ b/NetworkOpener.h @@ -20,7 +20,8 @@ public: void publishKeyTurnerState(const NukiOpener::OpenerState& keyTurnerState, const NukiOpener::OpenerState& lastKeyTurnerState); void publishBinaryState(NukiOpener::LockState lockState); - void publishAuthorizationInfo(const uint32_t authId, const char* authName); + void publishAuthorizationInfo(const std::list& logEntries); + void clearAuthorizationInfo(); void publishCommandResult(const char* resultStr); void publishBatteryReport(const NukiOpener::BatteryReport& batteryReport); void publishConfig(const NukiOpener::Config& config); diff --git a/NukiOpenerWrapper.cpp b/NukiOpenerWrapper.cpp index 0069724..d690fcc 100644 --- a/NukiOpenerWrapper.cpp +++ b/NukiOpenerWrapper.cpp @@ -126,7 +126,7 @@ void NukiOpenerWrapper::update() if(_clearAuthData) { - _network->publishAuthorizationInfo(0, ""); + _network->clearAuthorizationInfo(); _clearAuthData = false; } @@ -185,36 +185,23 @@ void NukiOpenerWrapper::updateAuthData() Nuki::CmdResult result = _nukiOpener.retrieveLogEntries(0, 0, 0, true); if(result != Nuki::CmdResult::Success) { - _network->publishAuthorizationInfo(0, ""); return; } delay(100); - result = _nukiOpener.retrieveLogEntries(_nukiOpener.getLogEntryCount() - 2, 1, 0, false); + result = _nukiOpener.retrieveLogEntries(0, 10, 1, false); if(result != Nuki::CmdResult::Success) { - _network->publishAuthorizationInfo(0, ""); return; } delay(200); - std::list log; + std::list log; _nukiOpener.getLogEntries(&log); if(log.size() > 0) { - const Nuki::LogEntry& entry = log.front(); - - if(entry.authId != _lastAuthId) - { - _network->publishAuthorizationInfo(entry.authId, (char *) entry.name); - _lastAuthId = entry.authId; - } - } - else - { - _network->publishAuthorizationInfo(0, ""); - _lastAuthId = 0; + _network->publishAuthorizationInfo(log); } } diff --git a/NukiOpenerWrapper.h b/NukiOpenerWrapper.h index 43b8c29..7473f9b 100644 --- a/NukiOpenerWrapper.h +++ b/NukiOpenerWrapper.h @@ -59,8 +59,6 @@ private: NukiOpener::OpenerState _lastKeyTurnerState; NukiOpener::OpenerState _keyTurnerState; - uint32_t _lastAuthId = 0xffff; - NukiOpener::BatteryReport _batteryReport; NukiOpener::BatteryReport _lastBatteryReport; diff --git a/NukiWrapper.cpp b/NukiWrapper.cpp index 04b80fd..90702d0 100644 --- a/NukiWrapper.cpp +++ b/NukiWrapper.cpp @@ -225,7 +225,7 @@ void NukiWrapper::updateAuthData() } delay(200); - std::list log; + std::list log; _nukiLock.getLogEntries(&log); if(log.size() > 0) diff --git a/lib/nuki_ble b/lib/nuki_ble index 10c99b0..9e95f5c 160000 --- a/lib/nuki_ble +++ b/lib/nuki_ble @@ -1 +1 @@ -Subproject commit 10c99b04bdc4c4292dec3a3665ccc17fa91d60f1 +Subproject commit 9e95f5c9b3f3c9fc0b36cee315052473c316cb2f