Brewery-Controller/boil_kettle/eeprom_init.h

67 lines
1.4 KiB
C

#include <EEPROM.h>
const uint8_t CompileTimeP[] PROGMEM = __DATE__ " " __TIME__;
const size_t ConfAddress = sizeof(CompileTimeP);
unsigned char b, e = -1, *p = (uint8_t*)CompileTimeP - 1;
struct Vessel {
String name;
String setpoint;
String sensor;
double Rref;
double RNominal;
};
struct Topic {
String root;
Vessel mash;
Vessel boil;
};
struct Mqtt {
char broker[14];
char user[10];
char password[21];
Topic topic;
};
struct ConfigData {
Mqtt mqtt;
int interval;
int period;
uint8_t threshold;
uint8_t hysteresis;
};
void StoreEEPROM() {
while( b = pgm_read_byte( ++p ) ){
if( b != EEPROM[++e] ){
Vessel BoilKettle {"boil_kettle", BOIL_SETPOINT_TOPIC, BOIL_ACTUAL_TOPIC, RREF_KETTLE, RNOMINAL_KETTLE};
Vessel MashTun {"mash_tun", MASH_SETPOINT_TOPIC, MASH_ACTUAL_TOPIC, RREF_MASH, RNOMINAL_MASH};
Topic mqtt_topics {TOPIC_ROOT, MashTun, BoilKettle};
Mqtt mqtt_data;
strcpy(mqtt_data.broker, MQTT_BROKER);
strcpy(mqtt_data.user, MQTT_USER);
strcpy(mqtt_data.password, MQTT_PASSWORD);
mqtt_data.topic = mqtt_topics;
ConfigData conf {
mqtt_data,
UpdateInterval,
PeriodPWM,
ThreshPWR,
Hysteresis
};
EEPROM.put(ConfAddress, conf);
Serial.println(conf.mqtt.broker);
while( b = pgm_read_byte( p++ ) ) EEPROM[e++] = b;
break;
}
}
}