mirror of https://github.com/arendst/Tasmota.git
Wifi provide Mac Address on Core3 (#21117)
This commit is contained in:
parent
8a06984947
commit
541f3630a1
|
@ -79,6 +79,10 @@ public:
|
||||||
static int hostByName(const char* aHostname, IPAddress& aResult);
|
static int hostByName(const char* aHostname, IPAddress& aResult);
|
||||||
|
|
||||||
static void scrubDNS(void);
|
static void scrubDNS(void);
|
||||||
|
|
||||||
|
// With ESP32 Core3, the WiFi mac address is not valid until the wifi is actually started
|
||||||
|
// this helper function always provide a valid mac address
|
||||||
|
static String macAddress(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -295,4 +295,21 @@ int WiFiHelper::hostByName(const char* aHostname, IPAddress& aResult)
|
||||||
return WiFiHelper::hostByName(aHostname, aResult, WifiDNSGetTimeout());
|
return WiFiHelper::hostByName(aHostname, aResult, WifiDNSGetTimeout());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (ESP_IDF_VERSION_MAJOR >= 5)
|
||||||
|
#include "esp_mac.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
String WiFiHelper::macAddress(void) {
|
||||||
|
#if (ESP_IDF_VERSION_MAJOR < 5)
|
||||||
|
return WiFi.macAddress();
|
||||||
|
#else
|
||||||
|
uint8_t mac[6] = {0,0,0,0,0,0};
|
||||||
|
char macStr[18] = { 0 };
|
||||||
|
|
||||||
|
esp_read_mac(mac, ESP_MAC_WIFI_STA);
|
||||||
|
snprintf(macStr, sizeof(macStr), "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
||||||
|
return String(macStr);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#endif // ESP32
|
#endif // ESP32
|
||||||
|
|
|
@ -73,4 +73,8 @@ int WiFiHelper::hostByName(const char* aHostname, IPAddress& aResult) {
|
||||||
return WiFi.hostByName(aHostname, aResult);
|
return WiFi.hostByName(aHostname, aResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String WiFiHelper::macAddress(void) {
|
||||||
|
return WiFi.macAddress();
|
||||||
|
}
|
||||||
|
|
||||||
#endif // ESP8266
|
#endif // ESP8266
|
||||||
|
|
|
@ -195,7 +195,7 @@ HTTPUpdateResult HTTPUpdateLight::handleUpdate(HTTPClientLight& http, const Stri
|
||||||
http.setFollowRedirects(_followRedirects);
|
http.setFollowRedirects(_followRedirects);
|
||||||
http.setUserAgent("ESP32-http-Update");
|
http.setUserAgent("ESP32-http-Update");
|
||||||
http.addHeader("Cache-Control", "no-cache");
|
http.addHeader("Cache-Control", "no-cache");
|
||||||
http.addHeader("x-ESP32-STA-MAC", WiFi.macAddress());
|
http.addHeader("x-ESP32-STA-MAC", WiFiHelper::macAddress());
|
||||||
http.addHeader("x-ESP32-AP-MAC", WiFi.softAPmacAddress());
|
http.addHeader("x-ESP32-AP-MAC", WiFi.softAPmacAddress());
|
||||||
http.addHeader("x-ESP32-free-space", String(ESP.getFreeSketchSpace()));
|
http.addHeader("x-ESP32-free-space", String(ESP.getFreeSketchSpace()));
|
||||||
http.addHeader("x-ESP32-sketch-size", String(ESP.getSketchSize()));
|
http.addHeader("x-ESP32-sketch-size", String(ESP.getSketchSize()));
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
|
#include <WiFiHelper.h>
|
||||||
#include <WiFiClient.h>
|
#include <WiFiClient.h>
|
||||||
#include <WiFiUdp.h>
|
#include <WiFiUdp.h>
|
||||||
#include <HttpClientLight.h>
|
#include <HttpClientLight.h>
|
||||||
|
|
|
@ -714,10 +714,6 @@ void setup(void) {
|
||||||
// Github inserts "release" or "commit number" before compiling using sed -i -e 's/TASMOTA_SHA_SHORT/TASMOTA_SHA_SHORT 85cff52-/g' tasmota_version.h
|
// Github inserts "release" or "commit number" before compiling using sed -i -e 's/TASMOTA_SHA_SHORT/TASMOTA_SHA_SHORT 85cff52-/g' tasmota_version.h
|
||||||
snprintf_P(TasmotaGlobal.image_name, sizeof(TasmotaGlobal.image_name), PSTR("(" STR(TASMOTA_SHA_SHORT) "%s)"), PSTR(CODE_IMAGE_STR)); // Results in (85cff52-tasmota) or (release-tasmota)
|
snprintf_P(TasmotaGlobal.image_name, sizeof(TasmotaGlobal.image_name), PSTR("(" STR(TASMOTA_SHA_SHORT) "%s)"), PSTR(CODE_IMAGE_STR)); // Results in (85cff52-tasmota) or (release-tasmota)
|
||||||
|
|
||||||
#if defined(ESP32) && (ESP_IDF_VERSION_MAJOR >= 5)
|
|
||||||
WiFi.begin(); // force wifi start so that the Mac address is known
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Format(TasmotaGlobal.mqtt_client, SettingsText(SET_MQTT_CLIENT), sizeof(TasmotaGlobal.mqtt_client));
|
Format(TasmotaGlobal.mqtt_client, SettingsText(SET_MQTT_CLIENT), sizeof(TasmotaGlobal.mqtt_client));
|
||||||
Format(TasmotaGlobal.mqtt_topic, SettingsText(SET_MQTT_TOPIC), sizeof(TasmotaGlobal.mqtt_topic));
|
Format(TasmotaGlobal.mqtt_topic, SettingsText(SET_MQTT_TOPIC), sizeof(TasmotaGlobal.mqtt_topic));
|
||||||
if (strchr(SettingsText(SET_HOSTNAME), '%') != nullptr) {
|
if (strchr(SettingsText(SET_HOSTNAME), '%') != nullptr) {
|
||||||
|
|
|
@ -946,7 +946,7 @@ void CmndStatus(void)
|
||||||
TasmotaGlobal.hostname,
|
TasmotaGlobal.hostname,
|
||||||
(uint32_t)WiFi.localIP(), Settings->ipv4_address[1], Settings->ipv4_address[2],
|
(uint32_t)WiFi.localIP(), Settings->ipv4_address[1], Settings->ipv4_address[2],
|
||||||
DNSGetIPStr(0).c_str(), DNSGetIPStr(1).c_str(),
|
DNSGetIPStr(0).c_str(), DNSGetIPStr(1).c_str(),
|
||||||
WiFi.macAddress().c_str()
|
WiFiHelper::macAddress().c_str()
|
||||||
,WifiGetIPv6Str().c_str(), WifiGetIPv6LinkLocalStr().c_str());
|
,WifiGetIPv6Str().c_str(), WifiGetIPv6LinkLocalStr().c_str());
|
||||||
#else // USE_IPV6
|
#else // USE_IPV6
|
||||||
Response_P(PSTR("{\"" D_CMND_STATUS D_STATUS5_NETWORK "\":{\"" D_CMND_HOSTNAME "\":\"%s\",\""
|
Response_P(PSTR("{\"" D_CMND_STATUS D_STATUS5_NETWORK "\":{\"" D_CMND_HOSTNAME "\":\"%s\",\""
|
||||||
|
@ -956,7 +956,7 @@ void CmndStatus(void)
|
||||||
TasmotaGlobal.hostname,
|
TasmotaGlobal.hostname,
|
||||||
(uint32_t)WiFi.localIP(), Settings->ipv4_address[1], Settings->ipv4_address[2],
|
(uint32_t)WiFi.localIP(), Settings->ipv4_address[1], Settings->ipv4_address[2],
|
||||||
Settings->ipv4_address[3], Settings->ipv4_address[4],
|
Settings->ipv4_address[3], Settings->ipv4_address[4],
|
||||||
WiFi.macAddress().c_str());
|
WiFiHelper::macAddress().c_str());
|
||||||
#endif // USE_IPV6
|
#endif // USE_IPV6
|
||||||
#ifdef USE_TASMESH
|
#ifdef USE_TASMESH
|
||||||
ResponseAppend_P(PSTR(",\"SoftAPMac\":\"%s\""), WiFi.softAPmacAddress().c_str());
|
ResponseAppend_P(PSTR(",\"SoftAPMac\":\"%s\""), WiFi.softAPmacAddress().c_str());
|
||||||
|
|
|
@ -117,11 +117,11 @@ String NetworkMacAddress(void) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
return WiFi.macAddress();
|
return WiFiHelper::macAddress();
|
||||||
}
|
}
|
||||||
|
|
||||||
String NetworkUniqueId(void) {
|
String NetworkUniqueId(void) {
|
||||||
String unique_id = WiFi.macAddress();
|
String unique_id = WiFiHelper::macAddress();
|
||||||
unique_id.replace(":", ""); // Full 12 chars MAC address as ID
|
unique_id.replace(":", ""); // Full 12 chars MAC address as ID
|
||||||
return unique_id;
|
return unique_id;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2459,7 +2459,7 @@ void HandleInformation(void) {
|
||||||
}
|
}
|
||||||
#endif // USE_IPV6
|
#endif // USE_IPV6
|
||||||
if (static_cast<uint32_t>(WiFi.localIP()) != 0) {
|
if (static_cast<uint32_t>(WiFi.localIP()) != 0) {
|
||||||
WSContentSend_P(PSTR("}1" D_MAC_ADDRESS "}2%s"), WiFi.macAddress().c_str());
|
WSContentSend_P(PSTR("}1" D_MAC_ADDRESS "}2%s"), WiFiHelper::macAddress().c_str());
|
||||||
WSContentSend_P(PSTR("}1" D_IP_ADDRESS " (WiFi)}2%_I"), (uint32_t)WiFi.localIP());
|
WSContentSend_P(PSTR("}1" D_IP_ADDRESS " (WiFi)}2%_I"), (uint32_t)WiFi.localIP());
|
||||||
}
|
}
|
||||||
show_hr = true;
|
show_hr = true;
|
||||||
|
|
|
@ -342,7 +342,7 @@ void MqttInit(void) {
|
||||||
String endpoint="https://global.azure-devices-provisioning.net/";
|
String endpoint="https://global.azure-devices-provisioning.net/";
|
||||||
#endif //USE_MQTT_AZURE_DPS_SCOPE_ENDPOINT
|
#endif //USE_MQTT_AZURE_DPS_SCOPE_ENDPOINT
|
||||||
|
|
||||||
String MACAddress = WiFi.macAddress();
|
String MACAddress = WiFiHelper::macAddress();
|
||||||
MACAddress.replace(":", "");
|
MACAddress.replace(":", "");
|
||||||
|
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_MQTT "DPS register for %s, scope %s to %s."), MACAddress.c_str(), dPSScopeId.c_str(), endpoint.c_str());
|
AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_MQTT "DPS register for %s, scope %s to %s."), MACAddress.c_str(), dPSScopeId.c_str(), endpoint.c_str());
|
||||||
|
|
|
@ -418,7 +418,7 @@ const char HueConfigResponse_JSON[] PROGMEM = "\x3D\xA7\xB3\xAC\x6B\x3D\x87\x99\
|
||||||
String GetHueDeviceId(uint16_t id, uint8_t ep = 0)
|
String GetHueDeviceId(uint16_t id, uint8_t ep = 0)
|
||||||
{
|
{
|
||||||
char s[32];
|
char s[32];
|
||||||
String deviceid = WiFi.macAddress();
|
String deviceid = WiFiHelper::macAddress();
|
||||||
deviceid.toLowerCase();
|
deviceid.toLowerCase();
|
||||||
if (0x11 == ep) { ep = 0xFE; } // avoid collision with 0x11 which is used as default for `0`
|
if (0x11 == ep) { ep = 0xFE; } // avoid collision with 0x11 which is used as default for `0`
|
||||||
if (0 == ep) { ep = 0x11; } // if ep is zero, revert to original value
|
if (0 == ep) { ep = 0x11; } // if ep is zero, revert to original value
|
||||||
|
@ -454,7 +454,7 @@ void HueNotImplemented(String *path)
|
||||||
void HueConfigResponse(String *response)
|
void HueConfigResponse(String *response)
|
||||||
{
|
{
|
||||||
*response += Decompress(HueConfigResponse_JSON, HueConfigResponse_JSON_SIZE);
|
*response += Decompress(HueConfigResponse_JSON, HueConfigResponse_JSON_SIZE);
|
||||||
response->replace(F("{ma"), WiFi.macAddress());
|
response->replace(F("{ma"), WiFiHelper::macAddress());
|
||||||
response->replace(F("{ip"), WiFi.localIP().toString());
|
response->replace(F("{ip"), WiFi.localIP().toString());
|
||||||
response->replace(F("{ms"), WiFi.subnetMask().toString());
|
response->replace(F("{ms"), WiFi.subnetMask().toString());
|
||||||
response->replace(F("{gw"), WiFi.gatewayIP().toString());
|
response->replace(F("{gw"), WiFi.gatewayIP().toString());
|
||||||
|
|
|
@ -241,7 +241,7 @@ extern "C" {
|
||||||
be_newobject(vm, "map");
|
be_newobject(vm, "map");
|
||||||
// (-2) map instance, (-1) map
|
// (-2) map instance, (-1) map
|
||||||
}
|
}
|
||||||
be_map_insert_str(vm, "mac", WiFi.macAddress().c_str());
|
be_map_insert_str(vm, "mac", WiFiHelper::macAddress().c_str());
|
||||||
be_map_insert_bool(vm, "up", WifiHasIP());
|
be_map_insert_bool(vm, "up", WifiHasIP());
|
||||||
if (Settings->flag4.network_wifi) {
|
if (Settings->flag4.network_wifi) {
|
||||||
int32_t rssi = WiFi.RSSI();
|
int32_t rssi = WiFi.RSSI();
|
||||||
|
|
|
@ -823,7 +823,7 @@ void CmndMeshPeer(void) {
|
||||||
MESHaddPeer(_MAC);
|
MESHaddPeer(_MAC);
|
||||||
MESHcountPeers();
|
MESHcountPeers();
|
||||||
ResponseCmndChar(_peerMAC);
|
ResponseCmndChar(_peerMAC);
|
||||||
} else if (WiFi.macAddress() == String(_peerMAC) || WiFi.softAPmacAddress() == String(_peerMAC)){
|
} else if (WiFiHelper::macAddress() == String(_peerMAC) || WiFi.softAPmacAddress() == String(_peerMAC)){
|
||||||
// a device can be added as its own peer, but every send will result in a ESP_NOW_SEND_FAIL
|
// a device can be added as its own peer, but every send will result in a ESP_NOW_SEND_FAIL
|
||||||
AddLog(LOG_LEVEL_DEBUG,PSTR("MSH: device %s cannot be a peer of itself"), XdrvMailbox.data, _peerMAC);
|
AddLog(LOG_LEVEL_DEBUG,PSTR("MSH: device %s cannot be a peer of itself"), XdrvMailbox.data, _peerMAC);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue