mqtt now has pin that unlocks commands for 10s - pin command, added mac command to return full mac address

This commit is contained in:
Miro Zmrzli 2024-07-25 10:58:35 -07:00
parent ee77bb4e78
commit de8b89fd19
6 changed files with 60 additions and 6 deletions

View File

@ -24,7 +24,7 @@ void BleService::start()
uint8_t wifi_mac[8];
esp_read_mac(wifi_mac, ESP_MAC_WIFI_STA);
sprintf(m_name, "WP_%02x%02x%02x", wifi_mac[3], wifi_mac[4], wifi_mac[5]);
sprintf(m_name, "WP_%s_%02x%02x%02x", SETTINGS.mqtt.device_id, wifi_mac[3], wifi_mac[4], wifi_mac[5]);
NimBLEDevice::init(m_name);
NimBLEDevice::setMTU(512);
@ -73,7 +73,10 @@ void BleService::onWrite(NimBLECharacteristic* pCharacteristic)
{
m_app.getCommandProcessor()->take();
char * buffer = m_app.getCommandProcessor()->process(pCharacteristic->getValue().c_str(), pCharacteristic->getDataLength());
if(buffer != nullptr && strlen(buffer) != 0)
{
pCharacteristic->setValue((uint8_t*)buffer, strlen(buffer));
pCharacteristic->notify();
}
m_app.getCommandProcessor()->give();
}

View File

@ -13,7 +13,7 @@ class BleService : public NimBLEServerCallbacks, NimBLECharacteristicCallbacks
protected:
App & m_app;
char m_name[32];
char m_name[75];
NimBLEServer * m_server = nullptr;
NimBLEService * m_service = nullptr;

View File

@ -198,6 +198,34 @@ bool CommandProcessor::cmdSetTemperatureOffset(Parser & p, char * buffer)
return false;
}
bool CommandProcessor::cmdAuth(Parser & p, char * buffer)
{
int value = 0;
if(strToInt(getElementAt(1, p, buffer), value))
{
if(value == 7856)
{
m_authenticated = true;
m_auth_time = millis();
ESP_LOGW(TAG, "Authenticated for 10s");
strcpy(m_buffer, "pin|ok");
return true;
}
}
return false;
}
bool CommandProcessor::cmdReadFullMac(Parser & p, char * buffer)
{
uint8_t wifi_mac[8];
esp_read_mac(wifi_mac, ESP_MAC_WIFI_STA);
m_rw.reset();
m_rw.appendf("mac,%02x%02x%02x%02x%02x%02x", wifi_mac[0], wifi_mac[1], wifi_mac[2], wifi_mac[3], wifi_mac[4], wifi_mac[5]);
strcpy(m_buffer, m_rw.getBuffer());
return true;
}
#define COMMAND_START if(false){}
#define COMMAND(command, function) else if(strcmp(command, getElementAt(0, p, temp)) == 0) function(p, temp)
#define COMMAND_END else strcpy(m_buffer, "error");
@ -209,7 +237,23 @@ char * CommandProcessor::process(const char * data, uint32_t len)
Parser p((char *)data, "|");
char temp[BUF_LEN];
if(strcmp("pin", getElementAt(0, p, temp)) == 0)
{
cmdAuth(p, temp);
return m_buffer;
}
if(millis() - m_auth_time > 10000)
{
ESP_LOGI(TAG, "nut autorized");
m_buffer[0] = 0;
return m_buffer;
}
m_auth_time = millis();
COMMAND_START
COMMAND("mac", cmdReadFullMac);
COMMAND("Z", cmdSetGroupId);
COMMAND("0", cmdSetMqttDevId);
COMMAND("-", cmdSetWorkingId);
@ -222,5 +266,8 @@ char * CommandProcessor::process(const char * data, uint32_t len)
COMMAND("9", cmdSetTemperatureOffset);
COMMAND_END;
if(!m_authenticated)
m_buffer[0] = 0;
return m_buffer;
}

View File

@ -10,6 +10,8 @@ protected:
Mutex m_mutex;
ReaderWriter m_rw;
char m_buffer[512];
bool m_authenticated = false;
uint32_t m_auth_time = 0;
public:
CommandProcessor(AppIF & app);
@ -28,4 +30,6 @@ protected:
bool cmdReportAllSettings(Parser & p, char * buffer);
bool cmdSetTemperatureOffset(Parser & p, char * buffer);
bool cmdSetMqttDevId(Parser & p, char * buffer);
bool cmdAuth(Parser & p, char * buffer);
bool cmdReadFullMac(Parser & p, char * buffer);
};

View File

@ -15,7 +15,7 @@
#include "ReaderWriter.h"
#include "Settings.h"
#define INACTIVE_TIMER (2*60*1000*1000)
#define INACTIVE_TIMER (5*60*1000*1000)
class ProvisionSoftAP
{

View File

@ -95,5 +95,5 @@ void Settings::setDefaults()
m_data->sensors.temperature.temp_offset = 0;
strcpy(m_data->mqtt.device_id, "client1-authn-ID");
strcpy(m_data->mqtt.device_id, "0");
}