Generate DTU ID dynamicly based on ESP chipID
This commit is contained in:
parent
e8bb28d160
commit
359d513cfd
@ -6,4 +6,5 @@
|
|||||||
class Utils {
|
class Utils {
|
||||||
public:
|
public:
|
||||||
static uint32_t getChipId();
|
static uint32_t getChipId();
|
||||||
|
static uint64_t generateDtuSerial();
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
20
src/main.cpp
20
src/main.cpp
@ -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... "));
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user