first commit
This commit is contained in:
396
ESP8266_BATTERIE_INJECTION/config.h
Normal file
396
ESP8266_BATTERIE_INJECTION/config.h
Normal file
@@ -0,0 +1,396 @@
|
||||
const int maxSize = 60; // Taille du tableau
|
||||
|
||||
//--------------------------- SETUP -------------------------------------
|
||||
|
||||
#define MPPT_100_20 // Define used Victron Device
|
||||
|
||||
// Supported:
|
||||
// "MPPT 75 | 10"
|
||||
// "MPPT 75 | 15" tested with FW 1.56
|
||||
// "MPPT 100 | 20" tested with FW 1.5 / 1.56
|
||||
// "MPPT 100 | 30" tested with FW 1.59
|
||||
|
||||
//--------------------------- SETUP -------------------------------------
|
||||
|
||||
|
||||
|
||||
// MPPT 75 | 10
|
||||
#ifdef MPPT_75_10
|
||||
#define MAX_AMPERAGE 10
|
||||
|
||||
const byte buffsize = 32;
|
||||
const byte value_bytes = 33;
|
||||
const byte label_bytes = 9;
|
||||
const byte num_keywords = 18;
|
||||
|
||||
char keywords[num_keywords][label_bytes] = {
|
||||
"PID",
|
||||
"FW",
|
||||
"SER#",
|
||||
"V",
|
||||
"I",
|
||||
"VPV",
|
||||
"PPV",
|
||||
"CS",
|
||||
"ERR",
|
||||
"LOAD",
|
||||
"IL",
|
||||
"H19",
|
||||
"H20",
|
||||
"H21",
|
||||
"H22",
|
||||
"H23",
|
||||
"HSDS",
|
||||
"Checksum"
|
||||
};
|
||||
#define PID 0
|
||||
#define FW 1
|
||||
#define SER 2 // Offically SER# but # does not play that well as macro
|
||||
#define V 3 // ScV
|
||||
#define I 4 // ScI
|
||||
#define VPV 5 // PVV
|
||||
#define PPV 6 // PVI = PVV / VPV
|
||||
#define CS 7 // ScS
|
||||
#define ERR 8 // ScERR
|
||||
#define LOAD 9 // SLs
|
||||
#define IL 10 // SLI
|
||||
#define H19 11
|
||||
#define H20 12
|
||||
#define H21 13
|
||||
#define H22 14
|
||||
#define H23 15
|
||||
#define HSDS 16
|
||||
#define CHECKSUM 17
|
||||
#endif
|
||||
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
||||
// MPPT 75 | 15
|
||||
#ifdef MPPT_75_15
|
||||
#define MAX_AMPERAGE 15
|
||||
|
||||
const byte buffsize = 32;
|
||||
const byte value_bytes = 33;
|
||||
const byte label_bytes = 9;
|
||||
const byte num_keywords = 19;
|
||||
|
||||
char keywords[num_keywords][label_bytes] = {
|
||||
"PID",
|
||||
"FW",
|
||||
"SER#",
|
||||
"V",
|
||||
"I",
|
||||
"VPV",
|
||||
"PPV",
|
||||
"CS",
|
||||
"MPPT",
|
||||
"ERR",
|
||||
"LOAD",
|
||||
"IL",
|
||||
"H19",
|
||||
"H20",
|
||||
"H21",
|
||||
"H22",
|
||||
"H23",
|
||||
"HSDS",
|
||||
"Checksum"
|
||||
};
|
||||
#define PID 0
|
||||
#define FW 1
|
||||
#define SER 2 // Offically SER# but # does not play that well as macro
|
||||
#define V 3 // ScV
|
||||
#define I 4 // ScI
|
||||
#define VPV 5 // PVV
|
||||
#define PPV 6 // PVI = PVV / VPV
|
||||
#define CS 7 // ScS
|
||||
#define MPPT 8
|
||||
#define ERR 9 // ScERR
|
||||
#define LOAD 10 // SLs
|
||||
#define IL 11 // SLI
|
||||
#define H19 12
|
||||
#define H20 13
|
||||
#define H21 14
|
||||
#define H22 15
|
||||
#define H23 16
|
||||
#define HSDS 17
|
||||
#define CHECKSUM 18
|
||||
#endif
|
||||
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
||||
// MPPT 100 | 20
|
||||
#ifdef MPPT_100_20
|
||||
#define MAX_AMPERAGE 20
|
||||
|
||||
const byte buffsize = 32;
|
||||
const byte value_bytes = 33;
|
||||
const byte label_bytes = 9;
|
||||
const byte num_keywords = 20;
|
||||
|
||||
char keywords[num_keywords][label_bytes] = {
|
||||
"PID",
|
||||
"FW",
|
||||
"SER#",
|
||||
"V",
|
||||
"I",
|
||||
"VPV",
|
||||
"PPV",
|
||||
"CS",
|
||||
"MPPT",
|
||||
"OR",
|
||||
"ERR",
|
||||
"LOAD",
|
||||
"IL",
|
||||
"H19",
|
||||
"H20",
|
||||
"H21",
|
||||
"H22",
|
||||
"H23",
|
||||
"HSDS",
|
||||
"Checksum"
|
||||
};
|
||||
#define PID 0
|
||||
#define FW 1
|
||||
#define SER 2
|
||||
#define V 3
|
||||
#define I 4
|
||||
#define VPV 5
|
||||
#define PPV 6
|
||||
#define MPPT 7
|
||||
#define OR 8
|
||||
#define CS 9
|
||||
#define ERR 10
|
||||
#define LOAD 11
|
||||
#define IL 12
|
||||
#define H19 13
|
||||
#define H20 14
|
||||
#define H21 15
|
||||
#define H22 16
|
||||
#define H23 17
|
||||
#define HSDS 18
|
||||
#define CHECKSUM 19
|
||||
#endif
|
||||
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
||||
// MPPT 100 | 30
|
||||
#ifdef MPPT_100_30
|
||||
#define MAX_AMPERAGE 30
|
||||
|
||||
const byte buffsize = 32;
|
||||
const byte value_bytes = 33;
|
||||
const byte label_bytes = 9;
|
||||
const byte num_keywords = 20;
|
||||
|
||||
char keywords[num_keywords][label_bytes] = {
|
||||
"PID",
|
||||
"FW",
|
||||
"SER#",
|
||||
"V",
|
||||
"I",
|
||||
"VPV",
|
||||
"PPV",
|
||||
"CS",
|
||||
"MPPT",
|
||||
"OR",
|
||||
"ERR",
|
||||
"LOAD",
|
||||
"IL",
|
||||
"H19",
|
||||
"H20",
|
||||
"H21",
|
||||
"H22",
|
||||
"H23",
|
||||
"HSDS",
|
||||
"Checksum"
|
||||
};
|
||||
#define PID 0
|
||||
#define FW 1
|
||||
#define SER 2
|
||||
#define V 3
|
||||
#define I 4
|
||||
#define VPV 5
|
||||
#define PPV 6
|
||||
#define MPPT 7
|
||||
#define OR 8
|
||||
#define CS 9
|
||||
#define ERR 10
|
||||
#define LOAD 11
|
||||
#define IL 12
|
||||
#define H19 13
|
||||
#define H20 14
|
||||
#define H21 15
|
||||
#define H22 16
|
||||
#define H23 17
|
||||
#define HSDS 18
|
||||
#define CHECKSUM 19
|
||||
|
||||
#endif
|
||||
|
||||
struct ErrorCode {
|
||||
const char* code;
|
||||
const char* label;
|
||||
};
|
||||
|
||||
ErrorCode errorCodes[] = {
|
||||
{"0", "No error"},
|
||||
{"2", "Battery voltage too high"},
|
||||
{"17", "Charger temperature too high"},
|
||||
{"18", "Charger over current"},
|
||||
{"19", "Charger current reversed"},
|
||||
{"20", "Bulk time limit exceeded"},
|
||||
{"21", "Current sensor issue (sensor bias/sensor broken)"},
|
||||
{"26", "Terminals overheated"},
|
||||
{"33", "Input voltage too high (solar panel)"},
|
||||
{"34", "Input current too high (solar panel)"},
|
||||
{"38", "Input shutdown (due to excessive battery voltage)"},
|
||||
{"116", "Factory calibration data lost"},
|
||||
{"117", "Invalid/incompatible firmware"},
|
||||
{"119", "User settings invalid"}
|
||||
};
|
||||
const int errorCodesSize = sizeof(errorCodes) / sizeof(errorCodes[0]);
|
||||
|
||||
|
||||
struct OperationState {
|
||||
const char* code;
|
||||
const char* label;
|
||||
};
|
||||
|
||||
OperationState operationStates[] = {
|
||||
{"0", "Off"},
|
||||
{"1", "Low power"},
|
||||
{"2", "Fault"},
|
||||
{"3", "Bulk"},
|
||||
{"4", "Absorption"},
|
||||
{"5", "Float"},
|
||||
{"9", "Inverting (on)"}
|
||||
};
|
||||
const int operationStatesSize = sizeof(operationStates) / sizeof(operationStates[0]);
|
||||
|
||||
struct LabelDescription {
|
||||
const char* code;
|
||||
const char* label;
|
||||
};
|
||||
|
||||
struct OffReason {
|
||||
const char* code;
|
||||
const char* label;
|
||||
};
|
||||
|
||||
OffReason offReasons[] = {
|
||||
{"0x00000100", "No input power"},
|
||||
{"0x00000080", "Switched off (power switch)"},
|
||||
{"0x00000040", "Switched off (device mode register)"},
|
||||
{"0x00000020", "Remote input"},
|
||||
{"0x00000010", "Protection active"},
|
||||
{"0x00000008", "Paygo"},
|
||||
{"0x00000004", "BMS"},
|
||||
{"0x00000002", "Engine shutdown detection"},
|
||||
{"0x00000001", "Analysing input voltage"},
|
||||
{"0x00000000", "Working"}
|
||||
};
|
||||
const int offReasonsSize = sizeof(offReasons) / sizeof(offReasons[0]);
|
||||
|
||||
|
||||
LabelDescription mpptData[] = {
|
||||
{"V", "Voltage batterie mV"},
|
||||
{"VPV", "Voltage panneau mV"},
|
||||
{"PPV", "Puissance panneau W"},
|
||||
{"I", "Intensité batterie mA"},
|
||||
{"IL", "Intensité décharge mA"},
|
||||
{"OR", "Raison non fonctionnement"},
|
||||
{"LOAD", "Etat sortie On/Off"},
|
||||
{"H19", "Quantité d'énergie totale"},
|
||||
{"H20", "Quantité d'énergie totale aujourd'hui"},
|
||||
{"H21", "Puissance maximale aujourd'hui"},
|
||||
{"H22", "Quantité d'énergie totale hier"},
|
||||
{"H23", "Puissance maximale hier"},
|
||||
{"ERR", "Code d'erreur"},
|
||||
{"CS", "État de fonctionnement"},
|
||||
{"FW", "Version du firmware (16 bits)"},
|
||||
{"PID", "ID du produit"},
|
||||
{"SER#", "Numéro de série"},
|
||||
{"HSDS", "Numéro de la séquence du jour (0..364)"},
|
||||
{"MPPT", "Mode de fonctionnement du tracker"}
|
||||
};
|
||||
const int mpptDataSize = sizeof(mpptData) / sizeof(mpptData[0]);
|
||||
|
||||
struct MPPTState {
|
||||
const char* code;
|
||||
const char* label;
|
||||
};
|
||||
|
||||
MPPTState mpptStates[] = {
|
||||
{"0", "Off"},
|
||||
{"1", "Voltage or current limited"},
|
||||
{"2", "Actif"}
|
||||
};
|
||||
const int mpptStatesSize = sizeof(mpptStates) / sizeof(mpptStates[0]);
|
||||
|
||||
|
||||
//////////////////////////////////////////
|
||||
// Storage
|
||||
//////////////////////////////////////////
|
||||
struct Configuration {
|
||||
int max_current_charge;
|
||||
int max_current_injection;
|
||||
int voltage_charge;
|
||||
int voltage_injection;
|
||||
boolean configured;
|
||||
};
|
||||
|
||||
Configuration config;
|
||||
|
||||
|
||||
struct To_Store {
|
||||
int total_elements;
|
||||
int hour[maxSize];
|
||||
int min[maxSize];
|
||||
int tensions[maxSize];
|
||||
};
|
||||
To_Store to_store;
|
||||
#define TO_STORE_ADDRESS sizeof(Configuration) // commence après la configuration
|
||||
|
||||
const int EEPROM_SIZE = 1024;
|
||||
const int CONFIG_START = 0; // Start address in EEPROM
|
||||
|
||||
|
||||
double getFloatParam(String param)
|
||||
{
|
||||
return String(server.arg(param).c_str()).toFloat();
|
||||
}
|
||||
|
||||
void readConfiguration() {
|
||||
|
||||
EEPROM.get(CONFIG_START, config);
|
||||
|
||||
Serial.println("Configuration Loaded:");
|
||||
Serial.println("Charge: " + String(config.max_current_charge));
|
||||
Serial.println("Injection: " + String(config.max_current_injection));
|
||||
|
||||
}
|
||||
void handleSave() {
|
||||
if (getFloatParam("max_current_charge") && getFloatParam("max_current_injection")
|
||||
&& getFloatParam("voltage_charge") && getFloatParam("voltage_injection")
|
||||
) {
|
||||
|
||||
config.max_current_charge = getFloatParam("max_current_charge");
|
||||
config.max_current_injection = getFloatParam("max_current_injection");
|
||||
config.voltage_charge = getFloatParam("voltage_charge");
|
||||
config.voltage_injection = getFloatParam("voltage_injection");
|
||||
|
||||
config.configured = true;
|
||||
// // Sauvegarde des paramètres dans l'EEPROM
|
||||
EEPROM.put(CONFIG_START, config);
|
||||
EEPROM.commit();
|
||||
server.send(200, "text/plain", "Configuration saved");
|
||||
} else {
|
||||
config.configured = false;
|
||||
EEPROM.put(CONFIG_START, config);
|
||||
EEPROM.commit();
|
||||
server.send(400, "text/plain", "Invalid request");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user