mirror of
https://github.com/lumapu/ahoy.git
synced 2025-05-10 23:46:37 +02:00
* 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:
parent
169bf8c7c8
commit
a9b7fd0599
8 changed files with 92 additions and 53 deletions
|
@ -10,9 +10,12 @@ app::app() : Main() {
|
||||||
mSendTicker = new Ticker();
|
mSendTicker = new Ticker();
|
||||||
mFlagSend = false;
|
mFlagSend = false;
|
||||||
|
|
||||||
|
mShowRebootRequest = false;
|
||||||
|
|
||||||
mMqttTicker = NULL;
|
mMqttTicker = NULL;
|
||||||
mMqttEvt = false;
|
mMqttEvt = false;
|
||||||
|
|
||||||
|
|
||||||
memset(mCmds, 0, sizeof(uint32_t)*DBG_CMD_LIST_LEN);
|
memset(mCmds, 0, sizeof(uint32_t)*DBG_CMD_LIST_LEN);
|
||||||
//memset(mChannelStat, 0, sizeof(uint32_t) * 4);
|
//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);
|
mEep->read(ADDR_INV_TYPE + i, &invType);
|
||||||
if(0ULL != invSerial) {
|
if(0ULL != invSerial) {
|
||||||
mSys->addInverter(invName, invSerial, invType);
|
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
|
// mqtt
|
||||||
uint8_t mqttAddr[MQTT_ADDR_LEN];
|
uint8_t mqttAddr[MQTT_ADDR_LEN];
|
||||||
|
uint16_t mqttPort;
|
||||||
char mqttUser[MQTT_USER_LEN];
|
char mqttUser[MQTT_USER_LEN];
|
||||||
char mqttPwd[MQTT_PWD_LEN];
|
char mqttPwd[MQTT_PWD_LEN];
|
||||||
char mqttTopic[MQTT_TOPIC_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_PWD, mqttPwd, MQTT_PWD_LEN);
|
||||||
mEep->read(ADDR_MQTT_TOPIC, mqttTopic, MQTT_TOPIC_LEN);
|
mEep->read(ADDR_MQTT_TOPIC, mqttTopic, MQTT_TOPIC_LEN);
|
||||||
mEep->read(ADDR_MQTT_INTERVAL, &interval);
|
mEep->read(ADDR_MQTT_INTERVAL, &interval);
|
||||||
|
mEep->read(ADDR_MQTT_PORT, &mqttPort);
|
||||||
|
|
||||||
char addr[16] = {0};
|
char addr[16] = {0};
|
||||||
sprintf(addr, "%d.%d.%d.%d", mqttAddr[0], mqttAddr[1], mqttAddr[2], mqttAddr[3]);
|
sprintf(addr, "%d.%d.%d.%d", mqttAddr[0], mqttAddr[1], mqttAddr[2], mqttAddr[3]);
|
||||||
|
|
||||||
if(interval < 1000)
|
if(interval < 1000)
|
||||||
interval = 1000;
|
interval = 1000;
|
||||||
mMqtt.setup(addr, mqttTopic, mqttUser, mqttPwd);
|
mMqtt.setup(addr, mqttTopic, mqttUser, mqttPwd, mqttPort);
|
||||||
mMqttTicker = new Ticker();
|
mMqttTicker = new Ticker();
|
||||||
mMqttTicker->attach_ms(interval, std::bind(&app::mqttTicker, this));
|
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();
|
mSys->setup();
|
||||||
|
|
||||||
if(!mWifiSettingsValid)
|
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
|
// process buffer only on first occurrence
|
||||||
if((0 != len) && (0 == rptCnt)) {
|
if((0 != len) && (0 == rptCnt)) {
|
||||||
uint8_t *cmd = &p->packet[11];
|
uint8_t *cmd = &p->packet[11];
|
||||||
//Serial.println("CMD " + String(*cmd, HEX));
|
//DPRINTLN("CMD " + String(*cmd, HEX));
|
||||||
//mSys->Radio.dumpBuf("Payload ", p->packet, len);
|
//mSys->Radio.dumpBuf("Payload ", p->packet, len);
|
||||||
|
|
||||||
inverter_t *iv = mSys->findInverter(&p->packet[3]);
|
inverter_t *iv = mSys->findInverter(&p->packet[3]);
|
||||||
|
@ -187,7 +200,7 @@ void app::loop(void) {
|
||||||
if(0.0f != mSys->getValue(iv, i)) {
|
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(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));
|
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();
|
yield();
|
||||||
}
|
}
|
||||||
|
@ -307,12 +320,15 @@ void app::showSetup(void) {
|
||||||
html.replace("{INV_INTERVAL}", String(interval));
|
html.replace("{INV_INTERVAL}", String(interval));
|
||||||
|
|
||||||
uint8_t mqttAddr[MQTT_ADDR_LEN] = {0};
|
uint8_t mqttAddr[MQTT_ADDR_LEN] = {0};
|
||||||
|
uint16_t mqttPort;
|
||||||
mEep->read(ADDR_MQTT_ADDR, mqttAddr, MQTT_ADDR_LEN);
|
mEep->read(ADDR_MQTT_ADDR, mqttAddr, MQTT_ADDR_LEN);
|
||||||
mEep->read(ADDR_MQTT_INTERVAL, &interval);
|
mEep->read(ADDR_MQTT_INTERVAL, &interval);
|
||||||
|
mEep->read(ADDR_MQTT_PORT, &mqttPort);
|
||||||
|
|
||||||
char addr[16] = {0};
|
char addr[16] = {0};
|
||||||
sprintf(addr, "%d.%d.%d.%d", mqttAddr[0], mqttAddr[1], mqttAddr[2], mqttAddr[3]);
|
sprintf(addr, "%d.%d.%d.%d", mqttAddr[0], mqttAddr[1], mqttAddr[2], mqttAddr[3]);
|
||||||
html.replace("{MQTT_ADDR}", String(addr));
|
html.replace("{MQTT_ADDR}", String(addr));
|
||||||
|
html.replace("{MQTT_PORT}", String(mqttPort));
|
||||||
html.replace("{MQTT_USER}", String(mMqtt.getUser()));
|
html.replace("{MQTT_USER}", String(mMqtt.getUser()));
|
||||||
html.replace("{MQTT_PWD}", String(mMqtt.getPwd()));
|
html.replace("{MQTT_PWD}", String(mMqtt.getPwd()));
|
||||||
html.replace("{MQTT_TOPIC}", String(mMqtt.getTopic()));
|
html.replace("{MQTT_TOPIC}", String(mMqtt.getTopic()));
|
||||||
|
@ -322,6 +338,7 @@ void app::showSetup(void) {
|
||||||
html.replace("{INV_INTERVAL}", "1000");
|
html.replace("{INV_INTERVAL}", "1000");
|
||||||
|
|
||||||
html.replace("{MQTT_ADDR}", "");
|
html.replace("{MQTT_ADDR}", "");
|
||||||
|
html.replace("{MQTT_PORT}", "1883");
|
||||||
html.replace("{MQTT_USER}", "");
|
html.replace("{MQTT_USER}", "");
|
||||||
html.replace("{MQTT_PWD}", "");
|
html.replace("{MQTT_PWD}", "");
|
||||||
html.replace("{MQTT_TOPIC}", "/inverter");
|
html.replace("{MQTT_TOPIC}", "/inverter");
|
||||||
|
@ -359,6 +376,12 @@ void app::showStatistics(void) {
|
||||||
content += String("61: ") + String(mChannelStat[2]) + String("\n");
|
content += String("61: ") + String(mChannelStat[2]) + String("\n");
|
||||||
content += String("75: ") + String(mChannelStat[3]) + 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);
|
mWeb->send(200, "text/plain", content);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -474,11 +497,12 @@ void app::saveValues(bool webSend = true) {
|
||||||
|
|
||||||
|
|
||||||
// nrf24 amplifier power
|
// 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);
|
mEep->write(ADDR_RF24_AMP_PWR, mSys->Radio.AmplifierPower);
|
||||||
|
|
||||||
// mqtt
|
// mqtt
|
||||||
uint8_t mqttAddr[MQTT_ADDR_LEN] = {0};
|
uint8_t mqttAddr[MQTT_ADDR_LEN] = {0};
|
||||||
|
uint16_t mqttPort;
|
||||||
char mqttUser[MQTT_USER_LEN];
|
char mqttUser[MQTT_USER_LEN];
|
||||||
char mqttPwd[MQTT_PWD_LEN];
|
char mqttPwd[MQTT_PWD_LEN];
|
||||||
char mqttTopic[MQTT_TOPIC_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("mqttPwd").toCharArray(mqttPwd, MQTT_PWD_LEN);
|
||||||
mWeb->arg("mqttTopic").toCharArray(mqttTopic, MQTT_TOPIC_LEN);
|
mWeb->arg("mqttTopic").toCharArray(mqttTopic, MQTT_TOPIC_LEN);
|
||||||
interval = mWeb->arg("mqttInterval").toInt();
|
interval = mWeb->arg("mqttInterval").toInt();
|
||||||
|
mqttPort = mWeb->arg("mqttPort").toInt();
|
||||||
mEep->write(ADDR_MQTT_ADDR, mqttAddr, MQTT_ADDR_LEN);
|
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_USER, mqttUser, MQTT_USER_LEN);
|
||||||
mEep->write(ADDR_MQTT_PWD, mqttPwd, MQTT_PWD_LEN);
|
mEep->write(ADDR_MQTT_PWD, mqttPwd, MQTT_PWD_LEN);
|
||||||
mEep->write(ADDR_MQTT_TOPIC, mqttTopic, MQTT_TOPIC_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"))
|
if((mWeb->arg("reboot") == "on"))
|
||||||
showReboot();
|
showReboot();
|
||||||
else {
|
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>"
|
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>");
|
"<p>saved</p></body></html>");
|
||||||
}
|
}
|
||||||
|
@ -520,6 +547,6 @@ void app::updateCrc(void) {
|
||||||
|
|
||||||
uint16_t crc;
|
uint16_t crc;
|
||||||
crc = buildEEpCrc(ADDR_START_SETTINGS, (ADDR_NEXT - ADDR_START_SETTINGS));
|
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);
|
mEep->write(ADDR_SETTINGS_CRC, crc);
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,9 +69,7 @@ class app : public Main {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool mShowRebootRequest;
|
||||||
uint8_t mState;
|
|
||||||
bool mKeyPressed;
|
|
||||||
|
|
||||||
HmSystemType *mSys;
|
HmSystemType *mSys;
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
#define VERSION_MAJOR 0
|
#define VERSION_MAJOR 0
|
||||||
#define VERSION_MINOR 2
|
#define VERSION_MINOR 2
|
||||||
#define VERSION_PATCH 8
|
#define VERSION_PATCH 9
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
|
@ -57,6 +57,7 @@ typedef struct {
|
||||||
#define MQTT_PWD_LEN 32
|
#define MQTT_PWD_LEN 32
|
||||||
#define MQTT_TOPIC_LEN 32
|
#define MQTT_TOPIC_LEN 32
|
||||||
#define MQTT_INTERVAL_LEN 2 // uint16_t
|
#define MQTT_INTERVAL_LEN 2 // uint16_t
|
||||||
|
#define MQTT_PORT_LEN 2 // uint16_t
|
||||||
|
|
||||||
|
|
||||||
#define ADDR_START 0
|
#define ADDR_START 0
|
||||||
|
@ -81,7 +82,8 @@ typedef struct {
|
||||||
#define ADDR_MQTT_TOPIC ADDR_MQTT_PWD + MQTT_PWD_LEN
|
#define ADDR_MQTT_TOPIC ADDR_MQTT_PWD + MQTT_PWD_LEN
|
||||||
#define ADDR_MQTT_INTERVAL ADDR_MQTT_TOPIC + MQTT_TOPIC_LEN
|
#define ADDR_MQTT_INTERVAL ADDR_MQTT_TOPIC + MQTT_TOPIC_LEN
|
||||||
|
|
||||||
#define ADDR_NEXT ADDR_MQTT_INTERVAL + MQTT_INTERVAL_LEN
|
#define ADDR_MQTT_PORT ADDR_MQTT_INTERVAL + MQTT_INTERVAL_LEN
|
||||||
|
#define ADDR_NEXT ADDR_MQTT_PORT + MQTT_PORT_LEN
|
||||||
|
|
||||||
#define ADDR_SETTINGS_CRC 400
|
#define ADDR_SETTINGS_CRC 400
|
||||||
|
|
||||||
|
|
|
@ -60,16 +60,16 @@ typedef struct {
|
||||||
// HM400 HM350?, HM300?
|
// HM400 HM350?, HM300?
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
const byteAssign_t hm400assignment[] = {
|
const byteAssign_t hm400assignment[] = {
|
||||||
{ FLD_UDC, UNIT_V, CH1, CMD01, 14, 2, 10 },
|
{ FLD_UDC, UNIT_V, CH1, CMD01, 3, 2, 10 },
|
||||||
{ FLD_IDC, UNIT_A, CH1, CMD01, 16, 2, 100 },
|
{ FLD_IDC, UNIT_A, CH1, CMD01, 5, 2, 100 },
|
||||||
{ FLD_PDC, UNIT_W, CH1, CMD01, 18, 2, 10 },
|
{ FLD_PDC, UNIT_W, CH1, CMD01, 7, 2, 10 },
|
||||||
{ FLD_YT, UNIT_KWH, CH1, CMD01, 20, 4, 1000 },
|
{ FLD_YT, UNIT_KWH, CH1, CMD01, 9, 4, 1000 },
|
||||||
{ FLD_YD, UNIT_WH, CH1, CMD01, 24, 2, 1000 },
|
{ FLD_YD, UNIT_WH, CH1, CMD01, 13, 2, 1000 },
|
||||||
{ FLD_UAC, UNIT_V, CH0, CMD01, 26, 2, 10 },
|
{ FLD_UAC, UNIT_V, CH0, CMD01, 15, 2, 10 },
|
||||||
{ FLD_F, UNIT_HZ, CH0, CMD82, 12, 2, 100 },
|
{ FLD_F, UNIT_HZ, CH0, CMD82, 1, 2, 100 },
|
||||||
{ FLD_PAC, UNIT_W, CH0, CMD82, 14, 2, 10 },
|
{ FLD_PAC, UNIT_W, CH0, CMD82, 3, 2, 10 },
|
||||||
{ FLD_IAC, UNIT_A, CH0, CMD82, 18, 2, 100 },
|
{ FLD_IAC, UNIT_A, CH0, CMD82, 7, 2, 100 },
|
||||||
{ FLD_T, UNIT_C, CH0, CMD82, 22, 2, 10 }
|
{ FLD_T, UNIT_C, CH0, CMD82, 11, 2, 10 }
|
||||||
};
|
};
|
||||||
#define HM400_LIST_LEN (sizeof(hm400assignment) / sizeof(byteAssign_t))
|
#define HM400_LIST_LEN (sizeof(hm400assignment) / sizeof(byteAssign_t))
|
||||||
|
|
||||||
|
@ -78,20 +78,20 @@ const byteAssign_t hm400assignment[] = {
|
||||||
// HM600, HM700
|
// HM600, HM700
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
const byteAssign_t hm600assignment[] = {
|
const byteAssign_t hm600assignment[] = {
|
||||||
{ FLD_UDC, UNIT_V, CH1, CMD01, 14, 2, 10 },
|
{ FLD_UDC, UNIT_V, CH1, CMD01, 3, 2, 10 },
|
||||||
{ FLD_IDC, UNIT_A, CH1, CMD01, 16, 2, 100 },
|
{ FLD_IDC, UNIT_A, CH1, CMD01, 5, 2, 100 },
|
||||||
{ FLD_PDC, UNIT_W, CH1, CMD01, 18, 2, 10 },
|
{ FLD_PDC, UNIT_W, CH1, CMD01, 7, 2, 10 },
|
||||||
{ FLD_UDC, UNIT_V, CH2, CMD01, 20, 2, 10 },
|
{ FLD_UDC, UNIT_V, CH2, CMD01, 9, 2, 10 },
|
||||||
{ FLD_IDC, UNIT_A, CH2, CMD01, 22, 2, 100 },
|
{ FLD_IDC, UNIT_A, CH2, CMD01, 11, 2, 100 },
|
||||||
{ FLD_PDC, UNIT_W, CH2, CMD01, 24, 2, 10 },
|
{ FLD_PDC, UNIT_W, CH2, CMD01, 13, 2, 10 },
|
||||||
{ FLD_YW, UNIT_WH, CH0, CMD02, 12, 2, 1 },
|
{ FLD_YW, UNIT_WH, CH0, CMD02, 1, 2, 1 },
|
||||||
{ FLD_YT, UNIT_WH, CH0, CMD02, 14, 4, 1 },
|
{ FLD_YT, UNIT_KWH, CH0, CMD02, 3, 4, 1000 },
|
||||||
{ FLD_YD, UNIT_WH, CH1, CMD02, 18, 2, 1 },
|
{ FLD_YD, UNIT_WH, CH1, CMD02, 7, 2, 1 },
|
||||||
{ FLD_YD, UNIT_WH, CH2, CMD02, 20, 2, 1 },
|
{ FLD_YD, UNIT_WH, CH2, CMD02, 9, 2, 1 },
|
||||||
{ FLD_UAC, UNIT_V, CH0, CMD02, 22, 2, 10 },
|
{ FLD_UAC, UNIT_V, CH0, CMD02, 11, 2, 10 },
|
||||||
{ FLD_F, UNIT_HZ, CH0, CMD02, 24, 2, 100 },
|
{ FLD_F, UNIT_HZ, CH0, CMD02, 13, 2, 100 },
|
||||||
{ FLD_IAC, UNIT_A, CH0, CMD02, 26, 2, 10 },
|
{ FLD_IAC, UNIT_A, CH0, CMD02, 15, 2, 10 },
|
||||||
{ FLD_T, UNIT_C, CH0, CMD83, 18, 2, 10 }
|
{ FLD_T, UNIT_C, CH0, CMD83, 7, 2, 10 }
|
||||||
};
|
};
|
||||||
#define HM600_LIST_LEN (sizeof(hm600assignment) / sizeof(byteAssign_t))
|
#define HM600_LIST_LEN (sizeof(hm600assignment) / sizeof(byteAssign_t))
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ class HmRadio {
|
||||||
~HmRadio() {}
|
~HmRadio() {}
|
||||||
|
|
||||||
void setup(BUFFER *ctrl) {
|
void setup(BUFFER *ctrl) {
|
||||||
//Serial.println("HmRadio::setup, pins: " + String(pinCs) + ", " + String(pinCe) + ", " + String(pinIrq));
|
//DPRINTLN("HmRadio::setup, pins: " + String(pinCs) + ", " + String(pinCe) + ", " + String(pinIrq));
|
||||||
pinMode(pinIrq, INPUT_PULLUP);
|
pinMode(pinIrq, INPUT_PULLUP);
|
||||||
|
|
||||||
mBufCtrl = ctrl;
|
mBufCtrl = ctrl;
|
||||||
|
@ -84,14 +84,18 @@ class HmRadio {
|
||||||
// enable only receiving interrupts
|
// enable only receiving interrupts
|
||||||
mNrf24.maskIRQ(true, true, false);
|
mNrf24.maskIRQ(true, true, false);
|
||||||
|
|
||||||
Serial.println("RF24 Amp Pwr: RF24_PA_" + String(rf24AmpPower[AmplifierPower]));
|
DPRINTLN("RF24 Amp Pwr: RF24_PA_" + String(rf24AmpPower[AmplifierPower]));
|
||||||
mNrf24.setPALevel(AmplifierPower & 0x03);
|
mNrf24.setPALevel(AmplifierPower & 0x03);
|
||||||
mNrf24.startListening();
|
mNrf24.startListening();
|
||||||
|
|
||||||
Serial.println("Radio Config:");
|
DPRINTLN("Radio Config:");
|
||||||
mNrf24.printPrettyDetails();
|
mNrf24.printPrettyDetails();
|
||||||
|
|
||||||
mSendChannel = getDefaultChannel();
|
mSendChannel = getDefaultChannel();
|
||||||
|
|
||||||
|
if(!mNrf24.isChipConnected()) {
|
||||||
|
DPRINTLN("WARNING! your NRF24 module can't be reached, check the wiring");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleIntr(void) {
|
void handleIntr(void) {
|
||||||
|
@ -182,6 +186,21 @@ class HmRadio {
|
||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dumpBuf(const char *info, uint8_t buf[], uint8_t len) {
|
||||||
|
DPRINT(String(info));
|
||||||
|
for(uint8_t i = 0; i < len; i++) {
|
||||||
|
if(buf[i] < 10)
|
||||||
|
DPRINT("0");
|
||||||
|
DHEX(buf[i]);
|
||||||
|
DPRINT(" ");
|
||||||
|
}
|
||||||
|
DPRINTLN("");
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isChipConnected(void) {
|
||||||
|
return mNrf24.isChipConnected();
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t pinCs;
|
uint8_t pinCs;
|
||||||
uint8_t pinCe;
|
uint8_t pinCe;
|
||||||
uint8_t pinIrq;
|
uint8_t pinIrq;
|
||||||
|
@ -190,7 +209,7 @@ class HmRadio {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void sendPacket(uint64_t invId, uint8_t buf[], uint8_t len) {
|
void sendPacket(uint64_t invId, uint8_t buf[], uint8_t len) {
|
||||||
//Serial.println("sent packet: #" + String(mSendCnt));
|
//DPRINTLN("sent packet: #" + String(mSendCnt));
|
||||||
//dumpBuf("SEN ", buf, len);
|
//dumpBuf("SEN ", buf, len);
|
||||||
|
|
||||||
DISABLE_IRQ;
|
DISABLE_IRQ;
|
||||||
|
@ -202,7 +221,7 @@ class HmRadio {
|
||||||
mSendChannel = getDefaultChannel();
|
mSendChannel = getDefaultChannel();
|
||||||
#endif
|
#endif
|
||||||
mNrf24.setChannel(mSendChannel);
|
mNrf24.setChannel(mSendChannel);
|
||||||
//Serial.println("CH: " + String(mSendChannel));
|
//DPRINTLN("CH: " + String(mSendChannel));
|
||||||
|
|
||||||
mNrf24.openWritingPipe(invId); // TODO: deprecated
|
mNrf24.openWritingPipe(invId); // TODO: deprecated
|
||||||
mNrf24.setCRCLength(RF24_CRC_16);
|
mNrf24.setCRCLength(RF24_CRC_16);
|
||||||
|
@ -237,15 +256,6 @@ class HmRadio {
|
||||||
mDtuIdCrc = crc16nrf24(tmp, BIT_CNT(5));
|
mDtuIdCrc = crc16nrf24(tmp, BIT_CNT(5));
|
||||||
}
|
}
|
||||||
|
|
||||||
void dumpBuf(const char *info, uint8_t buf[], uint8_t len) {
|
|
||||||
Serial.print(String(info));
|
|
||||||
for(uint8_t i = 0; i < len; i++) {
|
|
||||||
Serial.print(buf[i], HEX);
|
|
||||||
Serial.print(" ");
|
|
||||||
}
|
|
||||||
Serial.println();
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t mChanOut[4];
|
uint8_t mChanOut[4];
|
||||||
uint8_t mChanIdx;
|
uint8_t mChanIdx;
|
||||||
uint16_t mDtuIdCrc;
|
uint16_t mDtuIdCrc;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __SETUP_H__
|
#ifndef __SETUP_H__
|
||||||
#define __SETUP_H__
|
#define __SETUP_H__
|
||||||
const char setup_html[] PROGMEM = "<!doctype html><html><head><title>Setup - {DEVICE}</title><link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"></head><body><h1>Setup</h1><div id=\"setup\" class=\"content\"><div id=\"content\"><p>Enter the credentials to your prefered WiFi station. After rebooting the device tries to connect with this information. </p><form method=\"post\" action=\"/save\"><p class=\"des\">WiFi</p><label for=\"ssid\">SSID</label><input type=\"text\" class=\"text\" name=\"ssid\" value=\"{SSID}\"/><label for=\"pwd\">Password</label><input type=\"password\" class=\"text\" name=\"pwd\" value=\"{PWD}\"/><p class=\"des\">Device Host Name</p><label for=\"device\">Device Name</label><input type=\"text\" class=\"text\" name=\"device\" value=\"{DEVICE}\"/><a class=\"erase\" href=\"/erase\">ERASE SETTINGS (not WiFi)</a><p class=\"des\">Inverter</p>{INVERTERS}<br/><p class=\"subdes\">General</p><label for=\"invInterval\">Interval (ms)</label><input type=\"text\" class=\"text\" name=\"invInterval\" value=\"{INV_INTERVAL}\"/><p class=\"des\">Pinout (Wemos)</p>{PINOUT}<p class=\"des\">Radio (NRF24L01+)</p><label for=\"rf24Power\">Amplifier Power Level</label><select name=\"rf24Power\">{RF24}</select><p class=\"des\">MQTT</p><label for=\"mqttAddr\">Broker / Server IP</label><input type=\"text\" class=\"text\" name=\"mqttAddr\" value=\"{MQTT_ADDR}\"/><label for=\"mqttUser\">Username (optional)</label><input type=\"text\" class=\"text\" name=\"mqttUser\" value=\"{MQTT_USER}\"/><label for=\"mqttPwd\">Password (optional)</label><input type=\"text\" class=\"text\" name=\"mqttPwd\" value=\"{MQTT_PWD}\"/><label for=\"mqttTopic\">Topic</label><input type=\"text\" class=\"text\" name=\"mqttTopic\" value=\"{MQTT_TOPIC}\"/><label for=\"mqttInterval\">Interval (ms)</label><input type=\"text\" class=\"text\" name=\"mqttInterval\" value=\"{MQTT_INTERVAL}\"/><p class=\"des\"> </p><input type=\"checkbox\" class=\"cb\" name=\"reboot\"/><label for=\"reboot\">Reboot device after successful save</label><input type=\"submit\" value=\"save\" class=\"btn\" /></form></div></div><div id=\"footer\"><p class=\"left\"><a href=\"/\">Home</a></p><p class=\"left\"><a href=\"/update\">Update Firmware</a></p><p class=\"right\">AHOY - {VERSION}</p></div></body></html>";
|
const char setup_html[] PROGMEM = "<!doctype html><html><head><title>Setup - {DEVICE}</title><link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"></head><body><h1>Setup</h1><div id=\"setup\" class=\"content\"><div id=\"content\"><p>Enter the credentials to your prefered WiFi station. After rebooting the device tries to connect with this information. </p><form method=\"post\" action=\"/save\"><p class=\"des\">WiFi</p><label for=\"ssid\">SSID</label><input type=\"text\" class=\"text\" name=\"ssid\" value=\"{SSID}\"/><label for=\"pwd\">Password</label><input type=\"password\" class=\"text\" name=\"pwd\" value=\"{PWD}\"/><p class=\"des\">Device Host Name</p><label for=\"device\">Device Name</label><input type=\"text\" class=\"text\" name=\"device\" value=\"{DEVICE}\"/><a class=\"erase\" href=\"/erase\">ERASE SETTINGS (not WiFi)</a><p class=\"des\">Inverter</p>{INVERTERS}<br/><p class=\"subdes\">General</p><label for=\"invInterval\">Interval (ms)</label><input type=\"text\" class=\"text\" name=\"invInterval\" value=\"{INV_INTERVAL}\"/><p class=\"des\">Pinout (Wemos)</p>{PINOUT}<p class=\"des\">Radio (NRF24L01+)</p><label for=\"rf24Power\">Amplifier Power Level</label><select name=\"rf24Power\">{RF24}</select><p class=\"des\">MQTT</p><label for=\"mqttAddr\">Broker / Server IP</label><input type=\"text\" class=\"text\" name=\"mqttAddr\" value=\"{MQTT_ADDR}\"/><label for=\"mqttPort\">Port</label><input type=\"text\" class=\"text\" name=\"mqttPort\" value=\"{MQTT_PORT}\"/><label for=\"mqttUser\">Username (optional)</label><input type=\"text\" class=\"text\" name=\"mqttUser\" value=\"{MQTT_USER}\"/><label for=\"mqttPwd\">Password (optional)</label><input type=\"text\" class=\"text\" name=\"mqttPwd\" value=\"{MQTT_PWD}\"/><label for=\"mqttTopic\">Topic</label><input type=\"text\" class=\"text\" name=\"mqttTopic\" value=\"{MQTT_TOPIC}\"/><label for=\"mqttInterval\">Interval (ms)</label><input type=\"text\" class=\"text\" name=\"mqttInterval\" value=\"{MQTT_INTERVAL}\"/><p class=\"des\"> </p><input type=\"checkbox\" class=\"cb\" name=\"reboot\"/><label for=\"reboot\">Reboot device after successful save</label><input type=\"submit\" value=\"save\" class=\"btn\" /></form></div></div><div id=\"footer\"><p class=\"left\"><a href=\"/\">Home</a></p><p class=\"left\"><a href=\"/update\">Update Firmware</a></p><p class=\"right\">AHOY - {VERSION}</p></div></body></html>";
|
||||||
#endif /*__SETUP_H__*/
|
#endif /*__SETUP_H__*/
|
||||||
|
|
|
@ -41,6 +41,8 @@
|
||||||
<p class="des">MQTT</p>
|
<p class="des">MQTT</p>
|
||||||
<label for="mqttAddr">Broker / Server IP</label>
|
<label for="mqttAddr">Broker / Server IP</label>
|
||||||
<input type="text" class="text" name="mqttAddr" value="{MQTT_ADDR}"/>
|
<input type="text" class="text" name="mqttAddr" value="{MQTT_ADDR}"/>
|
||||||
|
<label for="mqttPort">Port</label>
|
||||||
|
<input type="text" class="text" name="mqttPort" value="{MQTT_PORT}"/>
|
||||||
<label for="mqttUser">Username (optional)</label>
|
<label for="mqttUser">Username (optional)</label>
|
||||||
<input type="text" class="text" name="mqttUser" value="{MQTT_USER}"/>
|
<input type="text" class="text" name="mqttUser" value="{MQTT_USER}"/>
|
||||||
<label for="mqttPwd">Password (optional)</label>
|
<label for="mqttPwd">Password (optional)</label>
|
||||||
|
|
|
@ -20,9 +20,9 @@ class mqtt {
|
||||||
delete mClient;
|
delete mClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup(const char *broker, const char *topic, const char *user, const char *pwd) {
|
void setup(const char *broker, const char *topic, const char *user, const char *pwd, uint16_t port) {
|
||||||
mAddressSet = true;
|
mAddressSet = true;
|
||||||
mClient->setServer(broker, 1883);
|
mClient->setServer(broker, port);
|
||||||
|
|
||||||
snprintf(mUser, MQTT_USER_LEN, "%s", user);
|
snprintf(mUser, MQTT_USER_LEN, "%s", user);
|
||||||
snprintf(mPwd, MQTT_PWD_LEN, "%s", pwd);
|
snprintf(mPwd, MQTT_PWD_LEN, "%s", pwd);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue