/* Basic ESP32 MQTT example โปรแกรมสำหรับ ESP32 โดยใช้ mqtt_server broker.mqtt-dashboard.com */ #include #include #include #include #include #include #include #include StaticJsonDocument<200> doc; #include #if !defined(PZEM_RX_PIN) && !defined(PZEM_TX_PIN) #define PZEM_RX_PIN 16 #define PZEM_TX_PIN 17 #endif #if !defined(PZEM_SERIAL) #define PZEM_SERIAL Serial2 #endif #define NUM_PZEMS 1 PZEM004Tv30 pzems[NUM_PZEMS]; String message, message1, message2, message3,mess1,mess2,mess3; int s01, s02, s03, s04, s05, s06, s07, s08, s09, s10, s11, s12; // Update these with values suitable for your network. //const char* mqtt_server = "broker.emqx.io"; const char* mqtt_server = "mqttgo.io"; //const char* mqtt_server = "broker.mqtt-dashboard.com"; WiFiClient espClient; PubSubClient client(espClient); unsigned long lastMsg = 0; #define MSG_BUFFER_SIZE (200) int timezone = 7 * 3600; //ตั้งค่า TimeZone ตามเวลาประเทศไทย int dst = 0; //กำหนดค่า Date Swing Time char msg[MSG_BUFFER_SIZE]; String data ; const byte disp1 = 2; #define ConfigWiFi_Pin 15 #define ESP_AP_NAME "ESP32 sakConfig 211" const char* host = "http://saksri.net"; //ใส่ IP หรือ Host ของเครื่อง Database ก็ได้ int th, tw, tm, ts, td, tn, ty, vtm; int set_t1, set_t2, set_t3, set_t4; int v_0, v_1, v_2, v_3, v_4, v_5, v_6, v_7; float voltage ,current,power ,energy ,frequency ,pf ; float vtwatt =0; float vsec, vmin2; int value = 0; String vx1 = "xxx"; #define vtopic "xxxx/xxxxx" #define WDT_TIMEOUT 60 const byte o1 = 13; const byte o2 = 12; const byte o3 = 14; const byte o4 = 27; const byte i1 =19; const byte i2 =18; const byte i3 =5 ; const byte i4 =4 ; const int pingPin = 22; const int inPin = 21; long vcm; void setup() { // pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED pin as an output EEPROM.begin(1500); pinMode(ConfigWiFi_Pin, INPUT_PULLUP); Serial.begin(9600); Serial.println("Starting..."); pinMode(disp1, OUTPUT); pinMode(o1, OUTPUT); pinMode(o2, OUTPUT); pinMode(o3, OUTPUT); pinMode(o4, OUTPUT); pinMode(i1, INPUT_PULLUP); pinMode(i2, INPUT_PULLUP); pinMode(i3, INPUT_PULLUP); pinMode(i4, INPUT_PULLUP); esp_task_wdt_config_t wdt_config = { .timeout_ms = WDT_TIMEOUT * 1000, .idle_core_mask = (1 << portNUM_PROCESSORS) - 1, .trigger_panic = true }; // ตรวจสอบก่อนว่ามีการ Init ไปแล้วหรือยัง ถ้ายังค่อยสั่ง Init // ใน Core รุ่นใหม่ มักจะถูก Init มาแล้ว เราจึงใช้การ Reconfigure แทนได้ esp_err_t err = esp_task_wdt_reconfigure(&wdt_config); if (err != ESP_OK) { esp_task_wdt_init(&wdt_config); } esp_task_wdt_add(NULL); // เพิ่ม Task ปัจจุบัน (Main Loop) เข้าไปใน Watchdog // Add the current task (loop) to WDT WiFiManager wifiManager; if (digitalRead(ConfigWiFi_Pin) == LOW) // Press button { //reset saved settings wifiManager.resetSettings(); // go to ip 192.168.4.1 to config } wifiManager.autoConnect(ESP_AP_NAME); while (WiFi.status() != WL_CONNECTED) { delay(250); Serial.print("."); } WiFi.mode(WIFI_STA); // explicitly set mode, esp defaults to STA+AP WiFiManager wm; // wm.autoConnect("ESP32_AutoConnect sak211"); // ESP.restart(); bool res; // res = wm.autoConnect(); // auto generated AP name from chipid // res = wm.autoConnect("AutoConnectAP","123"); // password protected ap if (!res) { Serial.println("Failed to connect"); // ESP.restart(); } else { //if you get here you have connected to the WiFi Serial.println("connected...yeey :)"); } Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); configTime(timezone, dst, "pool.ntp.org", "time.nist.gov"); //ดึงเวลาจาก Server Serial.println("\nLoading time"); while (!time(nullptr)) { Serial.print("*"); delay(1000); } // vtwatt=00.0; // EEPROM.put(510,vtwatt); // EEPROM.commit(); if (EEPROM.read(1001) == 1) {s01 = 1; digitalWrite(o1,1);} else {s01 = 0;digitalWrite(o1,0);} if (EEPROM.read(1002) == 1) {s02 = 1; digitalWrite(o2,1);} else {s02 = 0;digitalWrite(o2,0);} if (EEPROM.read(1003) == 1) {s03 = 1; digitalWrite(o3,1);} else {s03 = 0;digitalWrite(o3,0);} if (EEPROM.read(1004) == 1) {s04 = 1; digitalWrite(o4,1);} else {s04 = 0;digitalWrite(o4,0);} if (EEPROM.read(1005) == 1) s05 = 1; else s05 = 0; if (EEPROM.read(1006) == 1) s06 = 1; else s06 = 0; client.setServer(mqtt_server, 1883); client.setCallback(callback); for(int i = 0; i < NUM_PZEMS; i++) { #if defined(USE_SOFTWARE_SERIAL) // Initialize the PZEMs with Software Serial pzems[i] = PZEM004Tv30(pzemSWSerial, 0x10 + i); #elif defined(ESP32) // Initialize the PZEMs with Hardware Serial2 on RX/TX pins 16 and 17 pzems[i] = PZEM004Tv30(PZEM_SERIAL, PZEM_RX_PIN, PZEM_TX_PIN, 0x10 + i); #else // Initialize the PZEMs with Hardware Serial2 on the default pins /* Hardware Serial2 is only available on certain boards. * For example the Arduino MEGA 2560 */ pzems[i] = PZEM004Tv30(PZEM_SERIAL, 0x10 + i); #endif } EEPROM.get(510,vtwatt); } long microsecondsToCentimeters(long microseconds) { // The speed of sound is 340 m/s or 29 microseconds per centimeter. // The ping travels out and back, so to find the distance of the // object we take half of the distance travelled. return microseconds / 29 / 2; } void read_alutra() { long duration, cm; pinMode(pingPin, OUTPUT); digitalWrite(pingPin, LOW); delayMicroseconds(2); digitalWrite(pingPin, HIGH); delayMicroseconds(5); digitalWrite(pingPin, LOW); pinMode(inPin, INPUT); duration = pulseIn(inPin, HIGH); cm = microsecondsToCentimeters(duration); vcm = cm; Serial.print(cm); Serial.print("cm"); Serial.println(); // send_data("D7" + String(vcm)); //send_dataata = vx1 + "D3"+int_to_str(vcm);data.toCharArray(msg, (data.length() + 1));client.publish(vtopic, msg); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); message = ""; for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); message = message + (char)payload[i]; } mess1=message.substring(0,4); mess2=message.substring(4,9); mess3=message.substring(9,length); message1 = message.substring(0, 3); message2 = message.substring(3, length); message3 = message.substring(8, 15); String v2x = String(message).substring(0, 6); String v2y = String(message).substring(0, 10); Serial.print("message="); Serial.println(message); Serial.print("message1="); Serial.println(message1); Serial.print("message2="); Serial.println(message2); Serial.print("message3="); Serial.println(message3); // Switch on the LED if an 1 was received as first character // String v2z = String(message).substring(0, 5); // String vxx = String(message).substring(3, 6); // String v4 = String(message).substring(3, length); if ( message == vx1 + "DRRL2DT") { disp_eeprom(); } if ( v2y == vx1 + "DRRL2EE") { byte v1 = message2[7] & 0b00001111; byte v2 = message2[8] & 0b00001111; byte v3 = message2[9] & 0b00001111; byte v4 = message2[10] & 0b00001111; byte v5 = message2[11] & 0b00001111; byte v6 = message2[12] & 0b00001111; byte v7 = message2[13] & 0b00001111; int v8 = v1*1000+v2 * 100 + v3 * 10 + v4; int v9 = v5 * 100 + v6 * 10 + v7; EEPROM.write(v8, v9); EEPROM.commit(); } if (v2x == vx1 + "STT") { if (message2[0] == 'S' && message2[1] == 'T' && message2[2] == 'T' ) { int v1 = message2[4] & 0b00001111 ; int v2 = message2[5] & 0b00001111 ; int v3 = message2[6] & 0b00001111 ; int v4 = message2[7] & 0b00001111 ; int v5 = (v1 * 1000 + v2 * 100 + v3 * 10 + v4) ; Serial.println("vvvv111"); Serial.println(v5); if (message2[3] == '1') { s01 = 1; digitalWrite(o1, HIGH); data = vx1 + "1ON"; set_t1 = v5; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"1ON-SET_TIMER","1","55" ); Serial.println("vvvssssss"); Serial.println(set_t1); } if (message2[3] == '2') { s02 = 1; digitalWrite(o2, HIGH); set_t2 = v5; data = vx1 + "2ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"2ON-SET_TIMER","2" ,"55"); } if (message2[3] == '3') { s03 = 1; digitalWrite(o3, HIGH); set_t3 = v5; data = vx1 + "3ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"3ON-SET_TIMER","3","55" ); } if (message2[3] == '4') { s04 = 1; digitalWrite(o4, HIGH); set_t4 = v5; data = vx1 + "4ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"4ON-SET_TIMER","4","55" ); } } } if (message == vx1 + "H00") { if (s01 == 1) { data = vx1 + "1ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (s01 == 0) { data = vx1 + "1OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (s02 == 1) { data = vx1 + "2ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (s02 == 0) { data = vx1 + "2OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (s03 == 1) { data = vx1 + "3ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (s03 == 0) { data = vx1 + "3OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (s04 == 1) { data = vx1 + "4ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (s04 == 0) { data = vx1 + "4OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (s05 == 1) { data = vx1 + "5ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (s05 == 0) { data = vx1 + "5OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (s06 == 1) { data = vx1 + "6ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (s06 == 0) { data = vx1 + "6OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } } if (message == vx1 + "AON") { EEPROM.write(1001,1);EEPROM.commit(); digitalWrite(o1,1); s01 = 1; data = vx1 + "1ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"ON_1_webapp","1","55"); } if (message == vx1 + "AOFF") { EEPROM.write(1001,0);EEPROM.commit(); digitalWrite(o1,0); s01 = 0; data = vx1 + "1OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"OFF_1_webapp","1","55"); } if (message == vx1 + "BON") { EEPROM.write(1002,1);EEPROM.commit(); digitalWrite(o2,1); s02 = 1; data = vx1 + "2ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"ON_2_webapp","2","55"); } if (message == vx1 + "BOFF") { EEPROM.write(1002,0);EEPROM.commit(); digitalWrite(o2,0); s02 = 0; data = vx1 + "2OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"OFF_2_webapp","2","55"); } if (message == vx1 + "CON") { EEPROM.write(1003,1);EEPROM.commit(); digitalWrite(o3,1); s03 = 1; data = vx1 + "3ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"ON_3_webapp","3","55"); } if (message == vx1 + "COFF") { EEPROM.write(1003,0);EEPROM.commit(); digitalWrite(o3,0); s03 = 0; data = vx1 + "3OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"OFF_3_webapp","3","55"); } if (message == vx1 + "DON") { EEPROM.write(1004,1);EEPROM.commit(); digitalWrite(o4,1); s04 = 1; data = vx1 + "4ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"ON_4_webapp","4","55"); } if (message== vx1 + "DOFF") { EEPROM.write(1004,0);EEPROM.commit(); digitalWrite(o4,0); s04 = 0; data = vx1 + "4OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"OFF_4_webapp","4","55"); } if (message == vx1 + "EON") { EEPROM.write(1005,1);EEPROM.commit(); s05 = 1; data = vx1 + "5ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"ON_5_webapp","5","55"); } if (message == vx1 + "EOFF") { EEPROM.write(1005,0);EEPROM.commit(); s05 = 0; data = vx1 + "5OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"OFF_5_webapp","5","55"); } if (message == vx1 + "FON") { EEPROM.write(1006,1);EEPROM.commit(); s06 = 1; data = vx1 + "6ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"ON_6_webapp","6","55"); } if (message == vx1 + "FOFF") { EEPROM.write(1006,0);EEPROM.commit(); s06 = 0; data = vx1 + "6OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"OFF_6_webapp","6","55"); } } void reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Create a random client ID String clientId = "ESP8266Client-"; clientId += String(random(0xffff), HEX); // Attempt to connect if (client.connect(clientId.c_str())) { Serial.println("connected"); // Once connected, publish an announcement... // client.publish("outTopic", "hello world"); // ... and resubscribe // client.subscribe("saksri/muk"); client.subscribe(vtopic); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } } String int_to_str(int vnn) { String vss = ""; if ( vnn < 10 ) vss = "000" + String(vnn); else if ( vnn < 100 ) vss = "00" + String(vnn); else if ( vnn < 1000 ) vss = "0" + String(vnn); else if ( vnn < 10000 ) vss = "" + String(vnn); return vss; } void disp_eeprom() { int vzz = 0; for (int ii = 0; ii < EEPROM.read(1); ii++) { String vssx = ""; if (EEPROM.read(25 + ii * 6) < 10) vssx += "T -00" + String(EEPROM.read(25 + ii * 6)) + ":"; else if (EEPROM.read(25 + ii * 6) < 100) vssx += "T -0" + String(EEPROM.read(25 + ii * 6)) + ":"; else vssx += "T -" + String(EEPROM.read(25 + ii * 6)) + ":"; if (EEPROM.read(23 + ii * 6) < 10) vssx += "00" + String(EEPROM.read(23 + ii * 6)) + "/"; else if (EEPROM.read(23 + ii * 6) < 100) vssx += "0" + String(EEPROM.read(23 + ii * 6)) + "/"; else vssx += "" + String(EEPROM.read(23 + ii * 6)) + "/"; if (EEPROM.read(20 + ii * 6) == 99) vssx += "-/"; else if (EEPROM.read(20 + ii * 6) < 10) vssx += "0" + String(EEPROM.read(20 + ii * 6)) + "/"; else vssx += String(EEPROM.read(20 + ii * 6)) + "/"; if (EEPROM.read(21 + ii * 6) == 99) vssx += "-/"; else if (EEPROM.read(21 + ii * 6) < 10) vssx += "0" + String(EEPROM.read(21 + ii * 6)) + "/"; else vssx += String(EEPROM.read(21 + ii * 6)) + "/"; if (EEPROM.read(22 + ii * 6) < 10) vssx += "0" + String(EEPROM.read(22 + ii * 6)) + "/"; else vssx += String(EEPROM.read(22 + ii * 6)) + "/"; if (EEPROM.read(24 + ii * 6) < 10) vssx += "0" + String(EEPROM.read(24 + ii * 6)); else vssx += String(EEPROM.read(24 + ii * 6)); send_data2(vssx); //Serial.println(vssx); vzz++; if (vzz > 4) { send_data2("T -มีต่อ.. "); vzz = 0; } } send_data2("T -END "); //Serial.println("Z"); } void chk_pro1() { Serial.println("CHK555"); vtm = tm; if (EEPROM.read(500) == 1) v_0 = 0; else v_0 = 55; if (EEPROM.read(501) == 1) v_1 = 1; else v_1 = 55; if (EEPROM.read(502) == 1) v_2 = 2; else v_2 = 55; if (EEPROM.read(503) == 1) v_3 = 3; else v_3 = 55; if (EEPROM.read(504) == 1) v_4 = 4; else v_4 = 55; if (EEPROM.read(505) == 1) v_5 = 5; else v_5 = 55; if (EEPROM.read(506) == 1) v_6 = 6; else v_6 = 55; for (int ii = 0; ii < EEPROM.read(1); ii++) { // Serial.print("vd=");Serial.print(td);Serial.print(" v4=");Serial.println(v_4); if (tw == v_0 || tw == v_1 || tw == v_2 || tw == v_3 || tw == v_4 || tw == v_5 || tw == v_6 ) { // Serial.print("dee=");Serial.println(EEPROM.read(21+ii*6)); // Serial.print("dvh=");Serial.println(EEPROM.read(22+ii*6)); if ( ( th == EEPROM.read(21 + ii * 6) || EEPROM.read(21 + ii * 6) == 99 ) && tm == EEPROM.read(22 + ii * 6) ) { Serial.println("okok"); int vyy = EEPROM.read(24 + ii * 6); int vxx1 = 0; for (int i = 0; i < 4; i++) { vxx1 = vyy % 2; vyy = vyy / 2; if (i == 0) { if ( vxx1 == 1) if (digitalRead(o1) == 0) {send_data("1ON"); s01=1;digitalWrite(o1,1);sent_to_database(vtopic,vx1,"1ON","PROG-TIME","" ); } if ( vxx1 == 0) if (digitalRead(o1) == 1) {send_data("1OFF");s01=0;digitalWrite(o1,0);sent_to_database(vtopic,vx1,"1OFF","PROG-TIME","" ); } } if (i == 1) { if ( vxx1 == 1) if (digitalRead(o2) == 0) {send_data("2ON"); s02=1;digitalWrite(o2,1);sent_to_database(vtopic,vx1,"2ON","PROG-TIME","" ); } if ( vxx1 == 0) if (digitalRead(o2) == 1) {send_data("2OFF");s02=0;digitalWrite(o2,0); sent_to_database(vtopic,vx1,"2OFF","PROG-TIME","" );} } if (i == 2) { if ( vxx1 == 1) if (digitalRead(o3) == 0) {send_data("3ON"); s03=1;digitalWrite(o3,1); sent_to_database(vtopic,vx1,"3ON","PROG-TIME","" );} if ( vxx1 == 0) if (digitalRead(o3) == 1) {send_data("3OFF");s03=0;digitalWrite(o3,0);sent_to_database(vtopic,vx1,"3OFF","PROG-TIME","" ); } } if (i == 3) { if ( vxx1 == 1) if (digitalRead(o4) == 0) {send_data("4ON"); s04=1;digitalWrite(o4,1);sent_to_database(vtopic,vx1,"4ON","PROG-TIME","" ); } if ( vxx1 == 0) if (digitalRead(o4) == 1) {send_data("4OFF");s04=0;digitalWrite(o4,0);sent_to_database(vtopic,vx1,"4OFF","PROG-TIME","" ); } } delay(100); } } } } } void send_data(String vss) { data = vx1 + vss; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } void send_data2(String vss) { data = vss; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); esp_task_wdt_reset(); time_t now = time(nullptr); struct tm* p_tm = localtime(&now); ts = p_tm->tm_sec; tm = p_tm->tm_min; th = p_tm->tm_hour; tw = p_tm->tm_wday; td = p_tm->tm_mday; tn = p_tm->tm_mon + 1; ty = p_tm->tm_year ; if (millis() - vsec > 1000) { vsec = millis(); voltage = pzems[0].voltage(); current = pzems[0].current(); power = pzems[0].power(); energy = pzems[0].energy(); frequency = pzems[0].frequency(); if (power>0) {vtwatt = vtwatt +( power/(60*60)); EEPROM.put(510,vtwatt); EEPROM.commit(); } // Serial.print("vtwatt=");Serial.println(vtwatt); if (digitalRead(disp1) == 0) digitalWrite(disp1, 1); else digitalWrite(disp1, 0); if (s06 == 1 ) { if (tm != vtm) chk_pro1(); } if ((tm % 15 == 0 and ts == 0) ) { Serial.println("connection save data okok"); // sent_to_database2(vtopic, vx1, String(vcm), "0", "OK" ); } if ( set_t1 > 0 || set_t2 > 0 || set_t3 > 0 || set_t4 > 0 ) { if (set_t1 > 0 ) { set_t1 = set_t1 - 1; send_data("D3" + int_to_str(set_t1)); if (set_t1 == 0) { s01 = 0; digitalWrite(o1, 0); send_data("1OFF"); sent_to_database(vtopic,vx1,"1OFF-SET_TIMER","1","55" ); } } if (set_t2 > 0 ) { set_t2 = set_t2 - 1; send_data("D4" + int_to_str(set_t2)); if (set_t2 == 0) { s02 = 0; digitalWrite(o2, 0); send_data("2OFF"); sent_to_database(vtopic,vx1,"2OFF-SET_TIMER","2","55" ); } } if (set_t3 > 0 ) { set_t3 = set_t3 - 1; send_data("D5" + int_to_str(set_t3)); if (set_t3 == 0) { s03 = 0; digitalWrite(o3, 0); send_data("3OFF"); sent_to_database(vtopic,vx1,"3OFF-SET_TIMER","3","55" ); } } if (set_t4 > 0 ) { set_t4 = set_t4 - 1; send_data("D6" + int_to_str(set_t4)); if (set_t4 == 0) { s04 = 0; digitalWrite(o4, 0); send_data("4OFF"); sent_to_database(vtopic,vx1,"4OFF-SET_TIMER","4","55" ); } } } } if (millis() - vmin2 > 8000) { vmin2 = millis(); // read_alutra(); String vxxx = "D2" + String(EEPROM.read(500)) + String(EEPROM.read(501)) + String(EEPROM.read(502)) + String(EEPROM.read(503)) + String(EEPROM.read(504)) + String(EEPROM.read(505)) + String(EEPROM.read(506)); send_data(vxxx); vxxx = "D1" + String(tw) + "/" + String(th) + ":" + String(tm) + ":" + String(ts); send_data(vxxx); data = vx1 + "D7"+voltage+"volt"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); data = vx1 + "D8"+power+"watt"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); data = vx1 + "D9"+String(vtwatt)+"WH"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); } if (tm % 15 ==0 and ts==0) { data_watt_wh( mqtt_server, vtopic ,vx1,String(voltage), String(current),String(power), String(vtwatt), String(pf), String(frequency)); } if (digitalRead(i1) == 0) { if (digitalRead(o1) == 1) { EEPROM.write(1001,0);EEPROM.commit(); digitalWrite(o1, LOW); s01 = 0; data = vx1 + "1OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"1OFF-MAN-SW","1" ,"55"); } else { EEPROM.write(1001,1);EEPROM.commit(); digitalWrite(o1, HIGH); s01 = 1; data = vx1 + "1ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"1ON-MAN-SW","1" ,"55" ); } while (digitalRead(i1) == 0) delay(100); } if (digitalRead(i2) == 0) { if (digitalRead(o2) == 1) { EEPROM.write(1002,0);EEPROM.commit(); digitalWrite(o2, LOW); s02 = 0; data = vx1 + "2OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"2OFF-MAN-SW","2","55"); } else { EEPROM.write(1002,1);EEPROM.commit(); digitalWrite(o2, HIGH); s02 = 1; data = vx1 + "2ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"2ON-MAN-SW","2" ,"55" ); } while (digitalRead(i2) == 0) delay(100); } if (digitalRead(i3) == 0) { if (digitalRead(o3) == 1) { EEPROM.write(1003,0);EEPROM.commit(); digitalWrite(o3, LOW); s03 = 0; data = vx1 + "3OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"3OFF-MAN-SW","3" ,"55" ); } else { EEPROM.write(1003,1);EEPROM.commit(); digitalWrite(o3, HIGH); s03 = 1; data = vx1 + "3ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"3ON-MAN-SW","3" ,"55" ); } while (digitalRead(i3) == 0) delay(100); } if (digitalRead(i4) == 0) { if (digitalRead(o4) == 1) {EEPROM.write(1004,0);EEPROM.commit(); digitalWrite(o4, LOW); s04 = 0; data = vx1 + "4OFF"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"4OFF-MAN-SW","4" ,"55" ); } else {EEPROM.write(1004,1);EEPROM.commit(); digitalWrite(o4, HIGH); s04 = 1; data = vx1 + "4ON"; data.toCharArray(msg, (data.length() + 1)); client.publish(vtopic, msg); sent_to_database(vtopic,vx1,"4ON-MAN-SW","4" ,"55" ); } while (digitalRead(i4) == 0) delay(100); } } void sent_to_database(String dd1, String dd2, String dd3, String dd4, String dd5) { Serial.println("get data"); HTTPClient http; String url = host; url +="/test_db_mysql_2.php?code=A0001"; url += "&D1=" + dd1; url += "&D2=" + dd2; url += "&D3=" + dd3; url += "&D4=" + dd4; url += "&D5=" + dd5; http.begin(url); int httpCode = http.GET(); if (httpCode > 0) { String Payload = http.getString(); String strg1 = jsonExtract(Payload, "vch1"); Serial.print("strg1=");Serial.println(strg1); } } void data_watt_wh(String dd1, String dd2,String vvcode, String dd3, String dd4, String dd5, String dd6, String dd7, String dd8) { HTTPClient http; String url = host; url +="/data_watt_hw.php?"; url +="vcode="+vvcode; url += "&d1=" + dd1; url += "&d2=" + dd2; url += "&d3=" + dd3; url += "&d4=" + dd4; url += "&d5=" + dd5; url += "&d6=" + dd6; url += "&d7=" + dd7; url += "&d8=" + dd8; http.begin(url); int httpCode = http.GET(); if (httpCode > 0) { String Payload = http.getString(); String strg1 = jsonExtract(Payload, "vch1"); Serial.print("strg1=");Serial.println(strg1); } }