#include #include "DFRobot_INA219.h" #include #include #include #include "secrets.h" DFRobot_INA219_IIC ina219(&Wire, INA219_I2C_ADDRESS1); WiFiClient wifiClient; MqttClient mqttClient(wifiClient); float ina219Reading_mA = 1000; float extMeterReading_mA = 1000; const long interval = 10000; // interval at which to read voltage and report unsigned long previousMillis = 0; // will store last time LED was updated const int analogInPin = A0; int sensorValue = 0; StaticJsonDocument<200> doc; int charCount; char json[200]; int myMessage; int myPin; void setup() { Serial.begin(115200); Serial.println(); pinMode(15, OUTPUT); digitalWrite(15, LOW); pinMode(12, OUTPUT); digitalWrite(12, LOW); pinMode(14, OUTPUT); digitalWrite(14, LOW); WiFi.begin(SECRET_SSID, SECRET_PASS); Serial.print("Connecting"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.print("Connected, IP address: "); Serial.println(WiFi.localIP()); if (!mqttClient.connect("192.168.1.38", 1883)) { Serial.print("MQTT connection failed! Error code = "); Serial.println(mqttClient.connectError()); while (1); } Serial.print("Connected to MQTT"); // subscribe to a topic mqttClient.subscribe("Generator1"); mqttClient.subscribe("Generator2"); mqttClient.subscribe("Generator3"); //Initialize the sensor while(ina219.begin() != true) { Serial.println("INA219 begin faild"); delay(2000); } //Linear calibration ina219.linearCalibrate(/*The measured current before calibration*/ina219Reading_mA, /*The current measured by other current testers*/extMeterReading_mA); Serial.println(); } void loop() { int messageSize = mqttClient.parseMessage(); if (messageSize) { // we received a message, print out the topic and contents Serial.print("Received a message with topic '"); Serial.print(mqttClient.messageTopic()); Serial.print("', length "); Serial.print(messageSize); Serial.println(" bytes:"); myPin=0; if(mqttClient.messageTopic()=="Generator1"){ myPin=15; } if(mqttClient.messageTopic()=="Generator2"){ myPin=12; } if(mqttClient.messageTopic()=="Generator3"){ myPin=14; } Serial.println(myPin); // use the Stream interface to print the contents charCount = 0; while (mqttClient.available()) { json[ charCount++ ] = (char)mqttClient.read(); } Serial.println(json); DeserializationError error = deserializeJson(doc, json); if(doc["state"] == "ON"){ Serial.println("Tested True"); digitalWrite(myPin, HIGH); } else { Serial.println("Tested False"); digitalWrite(myPin, LOW); } } unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; Serial.print("BusVoltage: "); Serial.print(ina219.getBusVoltage_V(), 2); Serial.println("V"); mqttClient.beginMessage("houseVoltage"); //mqttClient.print(sensorValue); mqttClient.print((ina219.getBusVoltage_V()/.493), 2); mqttClient.endMessage(); } }