84 lines
1.8 KiB
C
84 lines
1.8 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 {
|
|
char name[16];
|
|
char setpoint[20];
|
|
char sensor[20];
|
|
double Rref;
|
|
double RNominal;
|
|
};
|
|
|
|
struct Topic {
|
|
char root[10];
|
|
Vessel mash;
|
|
Vessel boil;
|
|
};
|
|
|
|
struct Mqtt {
|
|
IPAddress broker;
|
|
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;
|
|
strcpy(BoilKettle.name, "boil_kettle");
|
|
strcpy(BoilKettle.setpoint, BOIL_SETPOINT_TOPIC);
|
|
strcpy(BoilKettle.sensor, BOIL_ACTUAL_TOPIC);
|
|
BoilKettle.Rref = RREF_KETTLE;
|
|
BoilKettle.RNominal = RNOMINAL_KETTLE;
|
|
|
|
// Vessel MashTun {mashname, MASH_SETPOINT_TOPIC, MASH_ACTUAL_TOPIC, RREF_MASH, RNOMINAL_MASH};
|
|
Vessel MashTun;
|
|
strcpy(MashTun.name, "mash_tun");
|
|
strcpy(MashTun.setpoint, MASH_SETPOINT_TOPIC);
|
|
strcpy(MashTun.sensor, MASH_ACTUAL_TOPIC);
|
|
MashTun.Rref = RREF_MASH;
|
|
MashTun.RNominal = RNOMINAL_MASH;
|
|
|
|
Topic mqtt_topics;
|
|
strcpy(mqtt_topics.root,TOPIC_ROOT);
|
|
mqtt_topics.mash = MashTun;
|
|
mqtt_topics.boil = BoilKettle;
|
|
|
|
Mqtt mqtt_data;
|
|
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;
|
|
}
|
|
}
|
|
}
|