Generate DTU ID dynamicly based on ESP chipID

This commit is contained in:
Thomas Basler 2022-10-20 21:00:26 +02:00
parent e8bb28d160
commit 359d513cfd
3 changed files with 41 additions and 3 deletions

View File

@ -6,4 +6,5 @@
class Utils { class Utils {
public: public:
static uint32_t getChipId(); static uint32_t getChipId();
static uint64_t generateDtuSerial();
}; };

View File

@ -9,3 +9,26 @@ uint32_t Utils::getChipId()
} }
return chipId; 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;
}

View File

@ -7,9 +7,10 @@
#include "MqttHassPublishing.h" #include "MqttHassPublishing.h"
#include "MqttPublishing.h" #include "MqttPublishing.h"
#include "MqttSettings.h" #include "MqttSettings.h"
#include "NtpSettings.h"
#include "WebApi.h"
#include "NetworkSettings.h" #include "NetworkSettings.h"
#include "NtpSettings.h"
#include "Utils.h"
#include "WebApi.h"
#include "defaults.h" #include "defaults.h"
#include <Arduino.h> #include <Arduino.h>
#include <LittleFS.h> #include <LittleFS.h>
@ -76,9 +77,22 @@ void setup()
WebApi.init(); WebApi.init();
Serial.println(F("done")); 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 // Initialize inverter communication
Serial.print(F("Initialize Hoymiles interface... ")); Serial.print(F("Initialize Hoymiles interface... "));
const CONFIG_T& config = Configuration.get();
Hoymiles.init(); Hoymiles.init();
Serial.println(F(" Setting radio PA level... ")); Serial.println(F(" Setting radio PA level... "));