Browse Source

* 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
pull/9/head
lumapu 2 years ago
parent
commit
a9b7fd0599
  1. 41
      tools/esp8266/app.cpp
  2. 4
      tools/esp8266/app.h
  3. 6
      tools/esp8266/defines.h
  4. 48
      tools/esp8266/hmInverters.h
  5. 38
      tools/esp8266/hmRadio.h
  6. 2
      tools/esp8266/html/h/setup_html.h
  7. 2
      tools/esp8266/html/setup.html
  8. 4
      tools/esp8266/mqtt.h

41
tools/esp8266/app.cpp

@ -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);
}

4
tools/esp8266/app.h

@ -69,9 +69,7 @@ class app : public Main {
return ret;
}
uint8_t mState;
bool mKeyPressed;
bool mShowRebootRequest;
HmSystemType *mSys;

6
tools/esp8266/defines.h

@ -25,7 +25,7 @@
//-------------------------------------
#define VERSION_MAJOR 0
#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_TOPIC_LEN 32
#define MQTT_INTERVAL_LEN 2 // uint16_t
#define MQTT_PORT_LEN 2 // uint16_t
#define ADDR_START 0
@ -81,7 +82,8 @@ typedef struct {
#define ADDR_MQTT_TOPIC ADDR_MQTT_PWD + MQTT_PWD_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

48
tools/esp8266/hmInverters.h

@ -60,16 +60,16 @@ typedef struct {
// HM400 HM350?, HM300?
//-------------------------------------
const byteAssign_t hm400assignment[] = {
{ FLD_UDC, UNIT_V, CH1, CMD01, 14, 2, 10 },
{ FLD_IDC, UNIT_A, CH1, CMD01, 16, 2, 100 },
{ FLD_PDC, UNIT_W, CH1, CMD01, 18, 2, 10 },
{ FLD_YT, UNIT_KWH, CH1, CMD01, 20, 4, 1000 },
{ FLD_YD, UNIT_WH, CH1, CMD01, 24, 2, 1000 },
{ FLD_UAC, UNIT_V, CH0, CMD01, 26, 2, 10 },
{ FLD_F, UNIT_HZ, CH0, CMD82, 12, 2, 100 },
{ FLD_PAC, UNIT_W, CH0, CMD82, 14, 2, 10 },
{ FLD_IAC, UNIT_A, CH0, CMD82, 18, 2, 100 },
{ FLD_T, UNIT_C, CH0, CMD82, 22, 2, 10 }
{ FLD_UDC, UNIT_V, CH1, CMD01, 3, 2, 10 },
{ FLD_IDC, UNIT_A, CH1, CMD01, 5, 2, 100 },
{ FLD_PDC, UNIT_W, CH1, CMD01, 7, 2, 10 },
{ FLD_YT, UNIT_KWH, CH1, CMD01, 9, 4, 1000 },
{ FLD_YD, UNIT_WH, CH1, CMD01, 13, 2, 1000 },
{ FLD_UAC, UNIT_V, CH0, CMD01, 15, 2, 10 },
{ FLD_F, UNIT_HZ, CH0, CMD82, 1, 2, 100 },
{ FLD_PAC, UNIT_W, CH0, CMD82, 3, 2, 10 },
{ FLD_IAC, UNIT_A, CH0, CMD82, 7, 2, 100 },
{ FLD_T, UNIT_C, CH0, CMD82, 11, 2, 10 }
};
#define HM400_LIST_LEN (sizeof(hm400assignment) / sizeof(byteAssign_t))
@ -78,20 +78,20 @@ const byteAssign_t hm400assignment[] = {
// HM600, HM700
//-------------------------------------
const byteAssign_t hm600assignment[] = {
{ FLD_UDC, UNIT_V, CH1, CMD01, 14, 2, 10 },
{ FLD_IDC, UNIT_A, CH1, CMD01, 16, 2, 100 },
{ FLD_PDC, UNIT_W, CH1, CMD01, 18, 2, 10 },
{ FLD_UDC, UNIT_V, CH2, CMD01, 20, 2, 10 },
{ FLD_IDC, UNIT_A, CH2, CMD01, 22, 2, 100 },
{ FLD_PDC, UNIT_W, CH2, CMD01, 24, 2, 10 },
{ FLD_YW, UNIT_WH, CH0, CMD02, 12, 2, 1 },
{ FLD_YT, UNIT_WH, CH0, CMD02, 14, 4, 1 },
{ FLD_YD, UNIT_WH, CH1, CMD02, 18, 2, 1 },
{ FLD_YD, UNIT_WH, CH2, CMD02, 20, 2, 1 },
{ FLD_UAC, UNIT_V, CH0, CMD02, 22, 2, 10 },
{ FLD_F, UNIT_HZ, CH0, CMD02, 24, 2, 100 },
{ FLD_IAC, UNIT_A, CH0, CMD02, 26, 2, 10 },
{ FLD_T, UNIT_C, CH0, CMD83, 18, 2, 10 }
{ FLD_UDC, UNIT_V, CH1, CMD01, 3, 2, 10 },
{ FLD_IDC, UNIT_A, CH1, CMD01, 5, 2, 100 },
{ FLD_PDC, UNIT_W, CH1, CMD01, 7, 2, 10 },
{ FLD_UDC, UNIT_V, CH2, CMD01, 9, 2, 10 },
{ FLD_IDC, UNIT_A, CH2, CMD01, 11, 2, 100 },
{ FLD_PDC, UNIT_W, CH2, CMD01, 13, 2, 10 },
{ FLD_YW, UNIT_WH, CH0, CMD02, 1, 2, 1 },
{ FLD_YT, UNIT_KWH, CH0, CMD02, 3, 4, 1000 },
{ FLD_YD, UNIT_WH, CH1, CMD02, 7, 2, 1 },
{ FLD_YD, UNIT_WH, CH2, CMD02, 9, 2, 1 },
{ FLD_UAC, UNIT_V, CH0, CMD02, 11, 2, 10 },
{ FLD_F, UNIT_HZ, CH0, CMD02, 13, 2, 100 },
{ FLD_IAC, UNIT_A, CH0, CMD02, 15, 2, 10 },
{ FLD_T, UNIT_C, CH0, CMD83, 7, 2, 10 }
};
#define HM600_LIST_LEN (sizeof(hm600assignment) / sizeof(byteAssign_t))

38
tools/esp8266/hmRadio.h

@ -64,7 +64,7 @@ class HmRadio {
~HmRadio() {}
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);
mBufCtrl = ctrl;
@ -84,14 +84,18 @@ class HmRadio {
// enable only receiving interrupts
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.startListening();
Serial.println("Radio Config:");
DPRINTLN("Radio Config:");
mNrf24.printPrettyDetails();
mSendChannel = getDefaultChannel();
if(!mNrf24.isChipConnected()) {
DPRINTLN("WARNING! your NRF24 module can't be reached, check the wiring");
}
}
void handleIntr(void) {
@ -182,6 +186,21 @@ class HmRadio {
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 pinCe;
uint8_t pinIrq;
@ -190,7 +209,7 @@ class HmRadio {
private:
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);
DISABLE_IRQ;
@ -202,7 +221,7 @@ class HmRadio {
mSendChannel = getDefaultChannel();
#endif
mNrf24.setChannel(mSendChannel);
//Serial.println("CH: " + String(mSendChannel));
//DPRINTLN("CH: " + String(mSendChannel));
mNrf24.openWritingPipe(invId); // TODO: deprecated
mNrf24.setCRCLength(RF24_CRC_16);
@ -237,15 +256,6 @@ class HmRadio {
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 mChanIdx;
uint16_t mDtuIdCrc;

2
tools/esp8266/html/h/setup_html.h

@ -1,4 +1,4 @@
#ifndef __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\">&nbsp;</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\">&nbsp;</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__*/

2
tools/esp8266/html/setup.html

@ -41,6 +41,8 @@
<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>

4
tools/esp8266/mqtt.h

@ -20,9 +20,9 @@ class mqtt {
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;
mClient->setServer(broker, 1883);
mClient->setServer(broker, port);
snprintf(mUser, MQTT_USER_LEN, "%s", user);
snprintf(mPwd, MQTT_PWD_LEN, "%s", pwd);

Loading…
Cancel
Save