Generate DTU ID dynamicly based on ESP chipID
This commit is contained in:
parent
e8bb28d160
commit
359d513cfd
@ -6,4 +6,5 @@
|
||||
class Utils {
|
||||
public:
|
||||
static uint32_t getChipId();
|
||||
static uint64_t generateDtuSerial();
|
||||
};
|
||||
|
||||
@ -8,4 +8,27 @@ uint32_t Utils::getChipId()
|
||||
chipId |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;
|
||||
}
|
||||
return chipId;
|
||||
}
|
||||
|
||||
uint64_t Utils::generateDtuSerial()
|
||||
{
|
||||
uint32_t chipId = getChipId();
|
||||
uint64_t dtuId = 0;
|
||||
|
||||
// Product category (char 1-4): 1 = Micro Inverter, 999 = Dummy
|
||||
dtuId |= 0x199900000000;
|
||||
|
||||
// Year of production (char 5): 1 equals 2015 so hard code 8 = 2022
|
||||
dtuId |= 0x80000000;
|
||||
|
||||
// Week of production (char 6-7): Range is 1-52 s hard code 1 = week 1
|
||||
dtuId |= 0x0100000;
|
||||
|
||||
// Running Number (char 8-12): Derived from the ESP chip id
|
||||
for (uint8_t i = 0; i < 5; i++) {
|
||||
dtuId |= (chipId % 10) << (i * 4);
|
||||
chipId /= 10;
|
||||
}
|
||||
|
||||
return dtuId;
|
||||
}
|
||||
20
src/main.cpp
20
src/main.cpp
@ -7,9 +7,10 @@
|
||||
#include "MqttHassPublishing.h"
|
||||
#include "MqttPublishing.h"
|
||||
#include "MqttSettings.h"
|
||||
#include "NtpSettings.h"
|
||||
#include "WebApi.h"
|
||||
#include "NetworkSettings.h"
|
||||
#include "NtpSettings.h"
|
||||
#include "Utils.h"
|
||||
#include "WebApi.h"
|
||||
#include "defaults.h"
|
||||
#include <Arduino.h>
|
||||
#include <LittleFS.h>
|
||||
@ -76,9 +77,22 @@ void setup()
|
||||
WebApi.init();
|
||||
Serial.println(F("done"));
|
||||
|
||||
// Check for default DTU serial
|
||||
Serial.print(F("Check for default DTU serial... "));
|
||||
CONFIG_T& config = Configuration.get();
|
||||
if (config.Dtu_Serial == DTU_SERIAL) {
|
||||
Serial.print(F("generate serial based on ESP chip id: "));
|
||||
uint64_t dtuId = Utils::generateDtuSerial();
|
||||
Serial.printf("%0x%08x... ",
|
||||
((uint32_t)((dtuId >> 32) & 0xFFFFFFFF)),
|
||||
((uint32_t)(dtuId & 0xFFFFFFFF)));
|
||||
config.Dtu_Serial = dtuId;
|
||||
Configuration.write();
|
||||
}
|
||||
Serial.println(F("done"));
|
||||
|
||||
// Initialize inverter communication
|
||||
Serial.print(F("Initialize Hoymiles interface... "));
|
||||
const CONFIG_T& config = Configuration.get();
|
||||
Hoymiles.init();
|
||||
|
||||
Serial.println(F(" Setting radio PA level... "));
|
||||
|
||||
Loading…
Reference in New Issue
Block a user