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];
|
uint8_t wifi_mac[8];
|
||||||
esp_read_mac(wifi_mac, ESP_MAC_WIFI_STA);
|
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::init(m_name);
|
||||||
NimBLEDevice::setMTU(512);
|
NimBLEDevice::setMTU(512);
|
||||||
@ -73,7 +73,10 @@ void BleService::onWrite(NimBLECharacteristic* pCharacteristic)
|
|||||||
{
|
{
|
||||||
m_app.getCommandProcessor()->take();
|
m_app.getCommandProcessor()->take();
|
||||||
char * buffer = m_app.getCommandProcessor()->process(pCharacteristic->getValue().c_str(), pCharacteristic->getDataLength());
|
char * buffer = m_app.getCommandProcessor()->process(pCharacteristic->getValue().c_str(), pCharacteristic->getDataLength());
|
||||||
pCharacteristic->setValue((uint8_t*)buffer, strlen(buffer));
|
if(buffer != nullptr && strlen(buffer) != 0)
|
||||||
pCharacteristic->notify();
|
{
|
||||||
|
pCharacteristic->setValue((uint8_t*)buffer, strlen(buffer));
|
||||||
|
pCharacteristic->notify();
|
||||||
|
}
|
||||||
m_app.getCommandProcessor()->give();
|
m_app.getCommandProcessor()->give();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,7 +13,7 @@ class BleService : public NimBLEServerCallbacks, NimBLECharacteristicCallbacks
|
|||||||
protected:
|
protected:
|
||||||
App & m_app;
|
App & m_app;
|
||||||
|
|
||||||
char m_name[32];
|
char m_name[75];
|
||||||
|
|
||||||
NimBLEServer * m_server = nullptr;
|
NimBLEServer * m_server = nullptr;
|
||||||
NimBLEService * m_service = nullptr;
|
NimBLEService * m_service = nullptr;
|
||||||
|
|||||||
@ -198,6 +198,34 @@ bool CommandProcessor::cmdSetTemperatureOffset(Parser & p, char * buffer)
|
|||||||
return false;
|
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_START if(false){}
|
||||||
#define COMMAND(command, function) else if(strcmp(command, getElementAt(0, p, temp)) == 0) function(p, temp)
|
#define COMMAND(command, function) else if(strcmp(command, getElementAt(0, p, temp)) == 0) function(p, temp)
|
||||||
#define COMMAND_END else strcpy(m_buffer, "error");
|
#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, "|");
|
Parser p((char *)data, "|");
|
||||||
char temp[BUF_LEN];
|
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_START
|
||||||
|
COMMAND("mac", cmdReadFullMac);
|
||||||
COMMAND("Z", cmdSetGroupId);
|
COMMAND("Z", cmdSetGroupId);
|
||||||
COMMAND("0", cmdSetMqttDevId);
|
COMMAND("0", cmdSetMqttDevId);
|
||||||
COMMAND("-", cmdSetWorkingId);
|
COMMAND("-", cmdSetWorkingId);
|
||||||
@ -222,5 +266,8 @@ char * CommandProcessor::process(const char * data, uint32_t len)
|
|||||||
COMMAND("9", cmdSetTemperatureOffset);
|
COMMAND("9", cmdSetTemperatureOffset);
|
||||||
COMMAND_END;
|
COMMAND_END;
|
||||||
|
|
||||||
|
if(!m_authenticated)
|
||||||
|
m_buffer[0] = 0;
|
||||||
|
|
||||||
return m_buffer;
|
return m_buffer;
|
||||||
}
|
}
|
||||||
@ -10,6 +10,8 @@ protected:
|
|||||||
Mutex m_mutex;
|
Mutex m_mutex;
|
||||||
ReaderWriter m_rw;
|
ReaderWriter m_rw;
|
||||||
char m_buffer[512];
|
char m_buffer[512];
|
||||||
|
bool m_authenticated = false;
|
||||||
|
uint32_t m_auth_time = 0;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CommandProcessor(AppIF & app);
|
CommandProcessor(AppIF & app);
|
||||||
@ -28,4 +30,6 @@ protected:
|
|||||||
bool cmdReportAllSettings(Parser & p, char * buffer);
|
bool cmdReportAllSettings(Parser & p, char * buffer);
|
||||||
bool cmdSetTemperatureOffset(Parser & p, char * buffer);
|
bool cmdSetTemperatureOffset(Parser & p, char * buffer);
|
||||||
bool cmdSetMqttDevId(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 "ReaderWriter.h"
|
||||||
#include "Settings.h"
|
#include "Settings.h"
|
||||||
|
|
||||||
#define INACTIVE_TIMER (2*60*1000*1000)
|
#define INACTIVE_TIMER (5*60*1000*1000)
|
||||||
|
|
||||||
class ProvisionSoftAP
|
class ProvisionSoftAP
|
||||||
{
|
{
|
||||||
|
|||||||
@ -95,5 +95,5 @@ void Settings::setDefaults()
|
|||||||
|
|
||||||
m_data->sensors.temperature.temp_offset = 0;
|
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