json log for opener

This commit is contained in:
technyon
2022-08-13 20:28:11 +02:00
parent c9a7af7688
commit eceabfeae7
8 changed files with 105 additions and 36 deletions

View File

@@ -231,7 +231,7 @@ void NetworkLock::publishBinaryState(NukiLock::LockState lockState)
}
void NetworkLock::publishAuthorizationInfo(const std::list<Nuki::LogEntry>& logEntries)
void NetworkLock::publishAuthorizationInfo(const std::list<NukiLock::LogEntry>& logEntries)
{
char str[50];
@@ -261,7 +261,7 @@ void NetworkLock::publishAuthorizationInfo(const std::list<Nuki::LogEntry>& 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<Nuki::LogEntry>& 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<Nuki::LogEntry>& 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<Nuki::LogEntry>& 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, "");

View File

@@ -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<Nuki::LogEntry>& logEntries);
void publishAuthorizationInfo(const std::list<NukiLock::LogEntry>& logEntries);
void clearAuthorizationInfo();
void publishCommandResult(const char* resultStr);
void publishBatteryReport(const NukiLock::BatteryReport& batteryReport);

View File

@@ -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<NukiOpener::LogEntry>& 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)

View File

@@ -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<NukiOpener::LogEntry>& logEntries);
void clearAuthorizationInfo();
void publishCommandResult(const char* resultStr);
void publishBatteryReport(const NukiOpener::BatteryReport& batteryReport);
void publishConfig(const NukiOpener::Config& config);

View File

@@ -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<Nuki::LogEntry> log;
std::list<NukiOpener::LogEntry> 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);
}
}

View File

@@ -59,8 +59,6 @@ private:
NukiOpener::OpenerState _lastKeyTurnerState;
NukiOpener::OpenerState _keyTurnerState;
uint32_t _lastAuthId = 0xffff;
NukiOpener::BatteryReport _batteryReport;
NukiOpener::BatteryReport _lastBatteryReport;

View File

@@ -225,7 +225,7 @@ void NukiWrapper::updateAuthData()
}
delay(200);
std::list<Nuki::LogEntry> log;
std::list<NukiLock::LogEntry> log;
_nukiLock.getLogEntries(&log);
if(log.size() > 0)