added json, more pump code, bugs
This commit is contained in:
+101
-11
@@ -4,13 +4,12 @@
|
||||
#include <PubSubClient.h>
|
||||
#include <shiftregister.h>
|
||||
#include <string.h>
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "pump.h"
|
||||
#include "valve.h"
|
||||
|
||||
#define COUNT_HTTP_METHOD 3
|
||||
#define METHOD_LENGTH 6
|
||||
#define BUFFER_SIZE 128
|
||||
|
||||
byte mac[] = { 0xC3, 0xF9, 0x7C, 0xB1, 0x8C, 0xF3 };
|
||||
@@ -34,10 +33,13 @@ PubSubClient client(ethClient);
|
||||
|
||||
void reconnect();
|
||||
void callback(char* topic, byte* payload, unsigned int length);
|
||||
void sendPumpStatus();
|
||||
void sendValveStatus(uint8_t valveNumber);
|
||||
void sendInfo();
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
Serial.println("Arduino Irrigation");
|
||||
Serial.println(F("Arduino Irrigation"));
|
||||
|
||||
valves.addShiftRegister(®);
|
||||
for (uint8_t i = 0; i < VALVE_COUNT; i++)
|
||||
@@ -58,25 +60,70 @@ void loop() {
|
||||
reconnect();
|
||||
client.loop();
|
||||
pump.loop();
|
||||
valves.loop();
|
||||
|
||||
static uint32_t lastDataSend = 0;
|
||||
if (millis() - lastDataSend > 2000) {
|
||||
sendInfo();
|
||||
sendPumpStatus();
|
||||
for (uint8_t i = 0; i < VALVE_COUNT; i++)
|
||||
sendValveStatus(i);
|
||||
lastDataSend = millis();
|
||||
}
|
||||
}
|
||||
|
||||
void callback(char* topic, byte* payload, unsigned int length) {
|
||||
Serial.print("Message arrived [");
|
||||
Serial.print(topic);
|
||||
Serial.print("] ");
|
||||
for (unsigned int i=0;i<length;i++) {
|
||||
Serial.print((char)payload[i]);
|
||||
if (length > 128) {
|
||||
Serial.println(F("Payload to big."));
|
||||
return;
|
||||
}
|
||||
Serial.println();
|
||||
|
||||
StaticJsonDocument<128> doc;
|
||||
DeserializationError error = deserializeJson(doc, payload, length);
|
||||
|
||||
if (error) {
|
||||
Serial.print(F("deserializeJson() failed: "));
|
||||
Serial.println(error.f_str());
|
||||
return;
|
||||
}
|
||||
|
||||
if (doc.containsKey("valve")) {
|
||||
uint8_t valveNumber = doc["valve"]["number"];
|
||||
uint8_t duration = doc["valve"]["duration"];
|
||||
if (duration)
|
||||
valves.open(valveNumber, duration);
|
||||
else
|
||||
valves.close(valveNumber);
|
||||
} else if (doc.containsKey("pump")) {
|
||||
uint8_t mode = doc["pump"]["mode"];
|
||||
uint8_t duration = doc["pump"]["duration"];
|
||||
if (mode)
|
||||
pump.activate(duration);
|
||||
else
|
||||
pump.stop();
|
||||
} else {
|
||||
Serial.println(F("Key not found."));
|
||||
}
|
||||
|
||||
// Serial.print("Message arrived [");
|
||||
// Serial.print(topic);
|
||||
// Serial.print("] ");
|
||||
// for (uint8_t i=0;i<length;i++) {
|
||||
// Serial.print((char)payload[i]);
|
||||
// }
|
||||
// Serial.println();
|
||||
}
|
||||
|
||||
void reconnect() {
|
||||
char topic[64];
|
||||
while (!client.connected()) {
|
||||
Serial.print("Attempting MQTT connection...");
|
||||
if (client.connect("arduinoClient")) {
|
||||
Serial.println("connected");
|
||||
client.publish("outTopic","reconnect");
|
||||
client.subscribe("inTopic");
|
||||
sprintf(topic, "%s/info", mainTopic);
|
||||
client.publish(topic,"reconnect");
|
||||
sprintf(topic, "%s/order", mainTopic);
|
||||
client.subscribe(topic);
|
||||
} else {
|
||||
Serial.print("failed, rc=");
|
||||
Serial.print(client.state());
|
||||
@@ -85,3 +132,46 @@ void reconnect() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sendPumpStatus() {
|
||||
StaticJsonDocument<96> doc;
|
||||
|
||||
JsonObject pumpJson = doc.createNestedObject("pump");
|
||||
pumpJson["status"] = pump.getStatus();
|
||||
pumpJson["duration"] = pump.getRunningTime();
|
||||
pumpJson["pressure"] = pump.getPressure();
|
||||
pumpJson["flow"] = pump.getFlow();
|
||||
|
||||
char buffer[256];
|
||||
char topic[64];
|
||||
sprintf(topic, "%s/pump", mainTopic);
|
||||
size_t n = serializeJson(doc, buffer);
|
||||
client.publish(topic, buffer, n);
|
||||
}
|
||||
|
||||
void sendValveStatus(uint8_t valveNumber) {
|
||||
StaticJsonDocument<96> doc;
|
||||
|
||||
JsonObject valve = doc.createNestedObject("valve");
|
||||
valve["timeLeft"] = valves.getTimeLeft(valveNumber);
|
||||
|
||||
char buffer[256];
|
||||
char topic[64];
|
||||
sprintf(topic, "%s/valve_%d", mainTopic, valveNumber);
|
||||
size_t n = serializeJson(doc, buffer);
|
||||
client.publish(topic, buffer, n);
|
||||
}
|
||||
|
||||
void sendInfo() {
|
||||
StaticJsonDocument<48> doc;
|
||||
|
||||
JsonObject info = doc.createNestedObject("valve");
|
||||
info["uptime"] = millis() / 1000;
|
||||
info["opened"] = valves.getNumOfOpen();
|
||||
|
||||
char buffer[256];
|
||||
char topic[64];
|
||||
sprintf(topic, "%s/info", mainTopic);
|
||||
size_t n = serializeJson(doc, buffer);
|
||||
client.publish(topic, buffer, n);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user