Skip to content

Commit 2e267e7

Browse files
author
Jan Kuthan
committed
Refactoring methods
1 parent e892516 commit 2e267e7

File tree

2 files changed

+135
-79
lines changed

2 files changed

+135
-79
lines changed

Diff for: platformio.ini

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@
1212
platform = atmelavr
1313
board = megaatmega2560
1414
framework = arduino
15-
upload_port = /dev/cu.usbmodem142401
15+
upload_port = /dev/cu.usbmodem144401
1616
monitor_baud = 115200

Diff for: src/main.cpp

+134-78
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const char* mqttServer = "192.168.1.100";
1212
const int mqttPort = 1883;
1313
const char* mqttUser = "admin";
1414
const char* mqttPassword = "admin";
15+
const char* mqttDeviceId = "RelayBoard-1";
1516

1617
// firmware
1718
const char* hearthbeatTopic = "devices/arduino/relayboard-1/heartbeat";
@@ -83,103 +84,44 @@ PubSubClient mqttClient(ethClient);
8384
AsyncDelay delay_ethCheckConnection;
8485
AsyncDelay delay_hearthbeat;
8586

86-
// main methods definitions
8787
void connectEthernet();
8888
void connectMqtt();
8989
void restartAllConnections();
90+
void pushHearthbeat();
91+
void prepareOutputPins();
92+
void prepareInputPins();
93+
bool connectionIsOk();
94+
void prepareTimers();
95+
void checkEthernetAndReconnectIfConnectionLost();
96+
void checkMqttConnectionAndReconnectIfConnectionLost();
97+
void checkInputChangesAndPublishToMqtt();
9098
void callback(char* topic, byte* payload, unsigned int length);
9199
void setPortViaMqttTopicStatus(int port, char *topic, byte *payload, unsigned int length, bool pingAndReturn, bool valueForPing);
92100
void publishPortStatusToMqtt(char* topic, int port, bool publishTrueIfInputLow);
93101

94-
// master setup method
95102
void setup() {
96103
Serial.begin(115200);
97104

98-
Serial.print("Set timer for check ethernet connection to (miliseconds):");
99-
Serial.println(ethCheckConnectionTimerMillis);
100-
delay_ethCheckConnection.start(ethCheckConnectionTimerMillis, AsyncDelay::MILLIS);
101-
102-
Serial.print("Set timer for sending heartbeat to (miliseconds):");
103-
Serial.println(hearthbeatTimerMillis);
104-
delay_hearthbeat.start(hearthbeatTimerMillis, AsyncDelay::MILLIS);
105-
106-
// prepare output pins (set PINs as OUTPUT and write default value from config)
107-
Serial.println("Setting pin mode for OUTPUTS:");
108-
for (int i =0; i < sizeof(settingsOutput) / sizeof(settingsOutput[0]); i++) {
109-
Serial.print("- subscribe topic: ");
110-
Serial.println(settingsOutput[i].subscribedTopic);
111-
Serial.print("- pin: ");
112-
Serial.println(settingsOutput[i].pin);
113-
Serial.print("- logic: ");
114-
Serial.println(settingsOutput[i].defaultLogic);
115-
116-
pinMode(settingsOutput[i].pin, OUTPUT);
117-
digitalWrite(settingsOutput[i].pin, settingsOutput[i].defaultLogic);
118-
}
105+
prepareTimers();
119106

120-
// prepare input pins
121-
Serial.println("Setting pin mode for INPUTS:");
122-
for (int i =0; i < sizeof(settingsInput) / sizeof(settingsInput[0]); i++) {
123-
Serial.print("- subscribe topic: ");
124-
Serial.println(settingsInput[i].publishToTopic);
125-
Serial.print("- pin: ");
126-
Serial.println(settingsInput[i].pin);
127-
128-
pinMode(settingsInput[i].pin, INPUT);
129-
130-
if (settingsInput[i].publishTrueIfInputLow) {
131-
Serial.print("- set as HIGH for enable pull-up");
132-
133-
digitalWrite(settingsInput[i].pin, HIGH); // Enable pull-up rezistors
134-
}
135-
}
107+
prepareOutputPins();
108+
prepareInputPins();
136109

137110
connectEthernet();
138111
connectMqtt();
139112
}
140113

141114
void loop() {
142-
if (delay_ethCheckConnection.isExpired()) {
143-
Serial.println("Check ethernet connection.");
144115

145-
if (!ethClient.connected()) {
146-
Serial.println("Connection lost... Reconnecting...");
147-
connectEthernet();
148-
connectMqtt();
149-
}
116+
checkEthernetAndReconnectIfConnectionLost();
150117

151-
delay_ethCheckConnection.repeat();
152-
}
118+
checkMqttConnectionAndReconnectIfConnectionLost();
153119

154120
mqttClient.loop();
155121

156-
if (delay_hearthbeat.isExpired()) {
157-
Serial.print("Send hearthbeat to topic: ");
158-
Serial.println(hearthbeatTopic);
159-
160-
mqttClient.publish(hearthbeatTopic, "ON", true);
161-
162-
delay_hearthbeat.repeat();
163-
}
164-
165-
for (int i =0; i < sizeof(settingsInput) / sizeof(settingsInput[0]); i++) {
166-
if (digitalRead(settingsInput[i].pin) != settingsInputPrevious[i]) {
167-
Serial.println("SettingsInput have changes, publish PIN status to MQTT (publishPortStatusToMqtt):");
168-
Serial.print(" - topic: ");
169-
Serial.println(settingsInput[i].publishToTopic);
170-
Serial.print(" - pin: ");
171-
Serial.println(settingsInput[i].pin);
172-
Serial.print(" - publish true if input low: ");
173-
Serial.println(settingsInput[i].publishTrueIfInputLow);
174-
175-
publishPortStatusToMqtt(settingsInput[i].publishToTopic, settingsInput[i].pin, settingsInput[i].publishTrueIfInputLow);
122+
pushHearthbeat();
176123

177-
Serial.print(" - set settingsInputPrevious:");
178-
Serial.println(settingsInput[i].pin);
179-
180-
settingsInputPrevious[i] = digitalRead(settingsInput[i].pin);
181-
}
182-
}
124+
checkInputChangesAndPublishToMqtt();
183125
}
184126

185127
// MQTT subscribe
@@ -244,6 +186,8 @@ void publishPortStatusToMqtt(char* topic, int pin, bool publishTrueIfInputLow) {
244186
Serial.println(pin);
245187
Serial.println("##############");
246188
} else {
189+
Serial.print("Publishing failed! Restart all connections!!!");
190+
247191
restartAllConnections();
248192
}
249193
}
@@ -286,7 +230,7 @@ void setPortViaMqttTopicStatus(int port, char *topic, byte *payload, unsigned in
286230
}
287231

288232
void connectEthernet() {
289-
Serial.println("Connect to ethernet wire");
233+
Serial.print("Connecting to ethernet network.");
290234

291235
Ethernet.begin(mac);
292236
}
@@ -310,14 +254,19 @@ void connectMqtt() {
310254
mqttClient.setCallback(callback);
311255

312256
while (!mqttClient.connected()) {
313-
Serial.println("Connecting to server...");
314-
if (!mqttClient.connect("deviceId", mqttUser, mqttPassword )) {
257+
Serial.print("Connecting MQTT to server: ");
258+
259+
if (!mqttClient.connect(mqttDeviceId, mqttUser, mqttPassword )) {
260+
261+
Serial.print("(disconnect all mqtt connections)");
262+
mqttClient.disconnect();
263+
315264
Serial.print("- failed with state ");
316265
Serial.println(mqttClient.state());
317266
delay(5000);
318267
}
319268
}
320-
Serial.println("- connected");
269+
Serial.println("- connected");
321270

322271
Serial.println("Set subscribe for all OUTPUT topics:");
323272
for (int i =0; i < sizeof(settingsOutput) / sizeof(settingsOutput[0]); i++) {
@@ -339,3 +288,110 @@ void restartAllConnections() {
339288

340289
connectMqtt();
341290
}
291+
292+
void pushHearthbeat() {
293+
if (delay_hearthbeat.isExpired()) {
294+
Serial.print("Send hearthbeat to topic: ");
295+
Serial.println(hearthbeatTopic);
296+
297+
mqttClient.publish(hearthbeatTopic, "ON", true);
298+
299+
delay_hearthbeat.repeat();
300+
}
301+
}
302+
303+
bool connectionIsOk() {
304+
return ethClient.connected();
305+
}
306+
307+
void checkEthernetAndReconnectIfConnectionLost() {
308+
if (delay_ethCheckConnection.isExpired()) {
309+
Serial.print("Check network connection: ");
310+
311+
if (!connectionIsOk()) {
312+
Serial.print("lost");
313+
314+
Serial.println("Connection lost... Reconnecting...");
315+
restartAllConnections();
316+
}
317+
318+
Serial.print("ok");
319+
320+
delay_ethCheckConnection.repeat();
321+
}
322+
}
323+
324+
void checkMqttConnectionAndReconnectIfConnectionLost() {
325+
if (!mqttClient.connected()) {
326+
Serial.println("Connection to MQTT server lost - reconnecting.");
327+
connectMqtt();
328+
}
329+
}
330+
331+
void prepareTimers() {
332+
Serial.print("Set timer for check ethernet connection to (miliseconds):");
333+
Serial.println(ethCheckConnectionTimerMillis);
334+
335+
delay_ethCheckConnection.start(ethCheckConnectionTimerMillis, AsyncDelay::MILLIS);
336+
337+
Serial.print("Set timer for sending heartbeat to (miliseconds):");
338+
Serial.println(hearthbeatTimerMillis);
339+
340+
delay_hearthbeat.start(hearthbeatTimerMillis, AsyncDelay::MILLIS);
341+
}
342+
343+
void prepareOutputPins() {
344+
Serial.println("Setting pin mode for OUTPUTS:");
345+
346+
for (int i =0; i < sizeof(settingsOutput) / sizeof(settingsOutput[0]); i++) {
347+
Serial.print("- subscribe topic: ");
348+
Serial.println(settingsOutput[i].subscribedTopic);
349+
Serial.print("- pin: ");
350+
Serial.println(settingsOutput[i].pin);
351+
Serial.print("- logic: ");
352+
Serial.println(settingsOutput[i].defaultLogic);
353+
354+
pinMode(settingsOutput[i].pin, OUTPUT);
355+
digitalWrite(settingsOutput[i].pin, settingsOutput[i].defaultLogic);
356+
}
357+
}
358+
359+
void prepareInputPins() {
360+
Serial.println("Setting pin mode for INPUTS:");
361+
362+
for (int i =0; i < sizeof(settingsInput) / sizeof(settingsInput[0]); i++) {
363+
Serial.print("- subscribe topic: ");
364+
Serial.println(settingsInput[i].publishToTopic);
365+
Serial.print("- pin: ");
366+
Serial.println(settingsInput[i].pin);
367+
368+
pinMode(settingsInput[i].pin, INPUT);
369+
370+
if (settingsInput[i].publishTrueIfInputLow) {
371+
Serial.print("- set as HIGH for enable pull-up");
372+
373+
digitalWrite(settingsInput[i].pin, HIGH); // Enable pull-up rezistors
374+
}
375+
}
376+
}
377+
378+
void checkInputChangesAndPublishToMqtt() {
379+
for (int i =0; i < sizeof(settingsInput) / sizeof(settingsInput[0]); i++) {
380+
if (digitalRead(settingsInput[i].pin) != settingsInputPrevious[i]) {
381+
Serial.println("SettingsInput have changes, publish PIN status to MQTT (publishPortStatusToMqtt):");
382+
Serial.print(" - topic: ");
383+
Serial.println(settingsInput[i].publishToTopic);
384+
Serial.print(" - pin: ");
385+
Serial.println(settingsInput[i].pin);
386+
Serial.print(" - publish true if input low: ");
387+
Serial.println(settingsInput[i].publishTrueIfInputLow);
388+
389+
publishPortStatusToMqtt(settingsInput[i].publishToTopic, settingsInput[i].pin, settingsInput[i].publishTrueIfInputLow);
390+
391+
Serial.print(" - set settingsInputPrevious:");
392+
Serial.println(settingsInput[i].pin);
393+
394+
settingsInputPrevious[i] = digitalRead(settingsInput[i].pin);
395+
}
396+
}
397+
}

0 commit comments

Comments
 (0)