mqtt now has pin that unlocks commands for 10s - pin command, added mac command to return full mac address
This commit is contained in:
parent
ee77bb4e78
commit
de8b89fd19
@ -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());
|
||||
pCharacteristic->setValue((uint8_t*)buffer, strlen(buffer));
|
||||
pCharacteristic->notify();
|
||||
if(buffer != nullptr && strlen(buffer) != 0)
|
||||
{
|
||||
pCharacteristic->setValue((uint8_t*)buffer, strlen(buffer));
|
||||
pCharacteristic->notify();
|
||||
}
|
||||
m_app.getCommandProcessor()->give();
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
@ -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);
|
||||
};
|
||||
@ -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
|
||||
{
|
||||
|
||||
@ -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");
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user