* added IP address to serial console on successful connect to station WiFi

* fix: RF24 power setting configuration
* added RF24 isChipConnected
* added MQTT port configuration
* fix offsets for HM400 and HM600 inverters
* added warning if configuration was changed without reboot
This commit is contained in:
lumapu 2022-04-26 22:49:00 +02:00
parent 169bf8c7c8
commit a9b7fd0599
8 changed files with 92 additions and 53 deletions

View file

@ -10,9 +10,12 @@ app::app() : Main() {
mSendTicker = new Ticker();
mFlagSend = false;
mShowRebootRequest = false;
mMqttTicker = NULL;
mMqttEvt = false;
memset(mCmds, 0, sizeof(uint32_t)*DBG_CMD_LIST_LEN);
//memset(mChannelStat, 0, sizeof(uint32_t) * 4);
@ -52,7 +55,7 @@ void app::setup(const char *ssid, const char *pwd, uint32_t timeout) {
mEep->read(ADDR_INV_TYPE + i, &invType);
if(0ULL != invSerial) {
mSys->addInverter(invName, invSerial, invType);
Serial.println("add inverter: " + String(invName) + ", SN: " + String(invSerial, HEX) + ", type: " + String(invType));
DPRINTLN("add inverter: " + String(invName) + ", SN: " + String(invSerial, HEX) + ", type: " + String(invType));
}
}
@ -73,6 +76,7 @@ void app::setup(const char *ssid, const char *pwd, uint32_t timeout) {
// mqtt
uint8_t mqttAddr[MQTT_ADDR_LEN];
uint16_t mqttPort;
char mqttUser[MQTT_USER_LEN];
char mqttPwd[MQTT_PWD_LEN];
char mqttTopic[MQTT_TOPIC_LEN];
@ -81,13 +85,14 @@ void app::setup(const char *ssid, const char *pwd, uint32_t timeout) {
mEep->read(ADDR_MQTT_PWD, mqttPwd, MQTT_PWD_LEN);
mEep->read(ADDR_MQTT_TOPIC, mqttTopic, MQTT_TOPIC_LEN);
mEep->read(ADDR_MQTT_INTERVAL, &interval);
mEep->read(ADDR_MQTT_PORT, &mqttPort);
char addr[16] = {0};
sprintf(addr, "%d.%d.%d.%d", mqttAddr[0], mqttAddr[1], mqttAddr[2], mqttAddr[3]);
if(interval < 1000)
interval = 1000;
mMqtt.setup(addr, mqttTopic, mqttUser, mqttPwd);
mMqtt.setup(addr, mqttTopic, mqttUser, mqttPwd, mqttPort);
mMqttTicker = new Ticker();
mMqttTicker->attach_ms(interval, std::bind(&app::mqttTicker, this));
@ -97,7 +102,15 @@ void app::setup(const char *ssid, const char *pwd, uint32_t timeout) {
mSys->setup();
if(!mWifiSettingsValid)
Serial.println("Warn: your settings are not valid! check [IP]/setup");
DPRINTLN("Warn: your settings are not valid! check [IP]/setup");
else {
DPRINTLN("\n\n----------------------------------------");
DPRINTLN("Welcome to AHOY!");
DPRINT("\npoint your browser to http://");
DPRINTLN(WiFi.localIP());
DPRINTLN("to configure your device");
DPRINTLN("----------------------------------------\n");
}
}
@ -114,7 +127,7 @@ void app::loop(void) {
// process buffer only on first occurrence
if((0 != len) && (0 == rptCnt)) {
uint8_t *cmd = &p->packet[11];
//Serial.println("CMD " + String(*cmd, HEX));
//DPRINTLN("CMD " + String(*cmd, HEX));
//mSys->Radio.dumpBuf("Payload ", p->packet, len);
inverter_t *iv = mSys->findInverter(&p->packet[3]);
@ -187,7 +200,7 @@ void app::loop(void) {
if(0.0f != mSys->getValue(iv, i)) {
snprintf(topic, 30, "%s/ch%d/%s", iv->name, iv->assign[i].ch, mSys->getFieldName(iv, i));
snprintf(val, 10, "%.3f %s", mSys->getValue(iv, i), mSys->getUnit(iv, i));
Serial.println(String(topic) + ": " + String(val));
DPRINTLN(String(topic) + ": " + String(val));
}
yield();
}
@ -307,12 +320,15 @@ void app::showSetup(void) {
html.replace("{INV_INTERVAL}", String(interval));
uint8_t mqttAddr[MQTT_ADDR_LEN] = {0};
uint16_t mqttPort;
mEep->read(ADDR_MQTT_ADDR, mqttAddr, MQTT_ADDR_LEN);
mEep->read(ADDR_MQTT_INTERVAL, &interval);
mEep->read(ADDR_MQTT_PORT, &mqttPort);
char addr[16] = {0};
sprintf(addr, "%d.%d.%d.%d", mqttAddr[0], mqttAddr[1], mqttAddr[2], mqttAddr[3]);
html.replace("{MQTT_ADDR}", String(addr));
html.replace("{MQTT_PORT}", String(mqttPort));
html.replace("{MQTT_USER}", String(mMqtt.getUser()));
html.replace("{MQTT_PWD}", String(mMqtt.getPwd()));
html.replace("{MQTT_TOPIC}", String(mMqtt.getTopic()));
@ -322,6 +338,7 @@ void app::showSetup(void) {
html.replace("{INV_INTERVAL}", "1000");
html.replace("{MQTT_ADDR}", "");
html.replace("{MQTT_PORT}", "1883");
html.replace("{MQTT_USER}", "");
html.replace("{MQTT_PWD}", "");
html.replace("{MQTT_TOPIC}", "/inverter");
@ -359,6 +376,12 @@ void app::showStatistics(void) {
content += String("61: ") + String(mChannelStat[2]) + String("\n");
content += String("75: ") + String(mChannelStat[3]) + String("\n");*/
if(!mSys->Radio.isChipConnected())
content += "WARNING! your NRF24 module can't be reached, check the wiring\n";
if(mShowRebootRequest)
content += "INFO: reboot your ESP to apply all your configuration changes!\n";
mWeb->send(200, "text/plain", content);
}
@ -474,11 +497,12 @@ void app::saveValues(bool webSend = true) {
// nrf24 amplifier power
mSys->Radio.AmplifierPower = mWeb->arg(String(pinArgNames[i])).toInt() & 0x03;
mSys->Radio.AmplifierPower = mWeb->arg("rf24Power").toInt() & 0x03;
mEep->write(ADDR_RF24_AMP_PWR, mSys->Radio.AmplifierPower);
// mqtt
uint8_t mqttAddr[MQTT_ADDR_LEN] = {0};
uint16_t mqttPort;
char mqttUser[MQTT_USER_LEN];
char mqttPwd[MQTT_PWD_LEN];
char mqttTopic[MQTT_TOPIC_LEN];
@ -493,7 +517,9 @@ void app::saveValues(bool webSend = true) {
mWeb->arg("mqttPwd").toCharArray(mqttPwd, MQTT_PWD_LEN);
mWeb->arg("mqttTopic").toCharArray(mqttTopic, MQTT_TOPIC_LEN);
interval = mWeb->arg("mqttInterval").toInt();
mqttPort = mWeb->arg("mqttPort").toInt();
mEep->write(ADDR_MQTT_ADDR, mqttAddr, MQTT_ADDR_LEN);
mEep->write(ADDR_MQTT_PORT, mqttPort);
mEep->write(ADDR_MQTT_USER, mqttUser, MQTT_USER_LEN);
mEep->write(ADDR_MQTT_PWD, mqttPwd, MQTT_PWD_LEN);
mEep->write(ADDR_MQTT_TOPIC, mqttTopic, MQTT_TOPIC_LEN);
@ -503,6 +529,7 @@ void app::saveValues(bool webSend = true) {
if((mWeb->arg("reboot") == "on"))
showReboot();
else {
mShowRebootRequest = true;
mWeb->send(200, "text/html", "<!doctype html><html><head><title>Setup saved</title><meta http-equiv=\"refresh\" content=\"0; URL=/setup\"></head><body>"
"<p>saved</p></body></html>");
}
@ -520,6 +547,6 @@ void app::updateCrc(void) {
uint16_t crc;
crc = buildEEpCrc(ADDR_START_SETTINGS, (ADDR_NEXT - ADDR_START_SETTINGS));
//Serial.println("new CRC: " + String(crc, HEX));
//DPRINTLN("new CRC: " + String(crc, HEX));
mEep->write(ADDR_SETTINGS_CRC, crc);
}