From dea3e1e3913c44614f26caf173a3bdf09ebac5d1 Mon Sep 17 00:00:00 2001 From: lexa Date: Mon, 4 Jan 2021 17:12:20 +0300 Subject: [PATCH] Power to MAX --- Rozetka/src/main.cpp | 62 ++++++++++++++++++------- RozetkaESP/platformio.ini | 1 + RozetkaESP/src/main.cpp | 87 ++++++++++++++++++++--------------- SerialGateWayMyS/src/main.cpp | 2 +- 4 files changed, 98 insertions(+), 54 deletions(-) diff --git a/Rozetka/src/main.cpp b/Rozetka/src/main.cpp index c9950fb..d2e8642 100644 --- a/Rozetka/src/main.cpp +++ b/Rozetka/src/main.cpp @@ -2,7 +2,8 @@ #define MY_DEBUG #define MY_RADIO_RF24 #define MY_RF24_CHANNEL (105) -#define MY_RF24_PA_LEVEL RF24_PA_HIGH +#define MY_RF24_PA_LEVEL RF24_PA_MAX +#define MY_REPEATER_FEATURE #define SOCK1 2 #define SOCK2 3 @@ -21,9 +22,10 @@ // #undef MY_NODE_ID // #define MY_NODE_ID 14 -bool stat1, stat2; +bool stat1, stat2, Ack; void presentation(); -void sendData(MyMessage msg, bool status, mysensors_data_t msd); +void sendData(MyMessage msg, bool status); +void sendData(MyMessage msg, uint32_t status); void receive(const MyMessage &message); MyMessage msgMillis(2, V_VAR1); @@ -49,13 +51,13 @@ void setup() { stat2 = loadState(1); digitalWrite(SOCK2, stat2); digitalWrite(RELAY2, !stat2); - sendData(msgSock1s, !stat1, V_STATUS); + sendData(msgSock1s, !stat1); wait(100); - sendData(msgSock2s, !stat2, V_STATUS); + sendData(msgSock2s, !stat2); wait(100); - sendData(msgSock1, !stat1, V_VAR2); + sendData(msgSock1, !stat1); wait(100); - sendData(msgSock2, !stat2, V_VAR3); + sendData(msgSock2, !stat2); } void loop() { @@ -66,8 +68,8 @@ void loop() { stat1 = !stat1; digitalWrite(SOCK1, stat1); digitalWrite(RELAY1, !stat1); - sendData(msgSock1s, !stat1, V_STATUS); - sendData(msgSock1, !stat1, V_VAR2); + sendData(msgSock1s, !stat1); + sendData(msgSock1, !stat1); saveState(0, stat1); Serial.print(F("Change Sock1: ")); Serial.println(stat1); } @@ -75,8 +77,8 @@ void loop() { stat2 = !stat2; digitalWrite(SOCK2, stat2); digitalWrite(RELAY2, !stat2); - sendData(msgSock2s, !stat2, V_VAR3); - sendData(msgSock2, !stat2, V_STATUS); + sendData(msgSock2s, !stat2); + sendData(msgSock2, !stat2); saveState(1, stat2); Serial.print(F("Change Sock2: ")); Serial.println(stat2); } @@ -86,19 +88,20 @@ void loop() { digitalWrite(SOCK1, stat1); digitalWrite(RELAY1, !stat1); saveState(0, digitalRead(SOCK1)); - sendData(msgSock1, !stat1, V_VAR2); + sendData(msgSock1, !stat1); } if(stat2 != digitalRead(SOCK2)){ Serial.print(F("Curr Sock2: ")); Serial.println(digitalRead(SOCK2)); digitalWrite(SOCK2, stat2); digitalWrite(RELAY2, !stat2); saveState(1, digitalRead(SOCK2)); - sendData(msgSock2, !stat2, V_VAR3); + sendData(msgSock2, !stat2); Serial.print(F("Change Sock2: ")); Serial.println(stat2); } if((cRun + 60000) <= millis()){ cRun = millis(); - send(msgMillis.set(cRun)); + sendData(msgMillis, cRun); + //send(msgMillis.set(cRun)); } } @@ -110,14 +113,14 @@ void presentation() present(2, S_CUSTOM, "ESMillis"); } -void sendData(MyMessage msg, bool status, mysensors_data_t msd) +void sendData(MyMessage msg, bool status) { bool send_data = false; uint8_t count = 0; while(send_data == false){ count++; - send_data = send(msg.set(status)); - wait(100, C_SET, msg.type); + send_data = send(msg.set(status), true); + wait(1000, C_SET, msg.type); if ((count == 3 )&&(send_data == 0)){ // Если сделано 3 попытки и нет подтверждения отправки count = 0; // Обнуляем счётчик send_data = 1; // Выходим из цикла @@ -125,8 +128,33 @@ void sendData(MyMessage msg, bool status, mysensors_data_t msd) } } +void sendData(MyMessage msg, uint32_t val) +{ + bool send_data = false; + uint8_t count = 0; + Ack = false; + //Serial.print(millis()); + //Serial.println(" Send UINT32 Enter"); + while(send_data == false){ + count++; + send_data = send(msg.set(val), true); + wait(1000, C_SET, msg.type); + //Serial.print(millis()); + //Serial.println(" Send UINT32"); + if ((count == 3) && (send_data == 0)){ // Если сделано 3 попытки и нет подтверждения отправки + count = 0; // Обнуляем счётчик + send_data = 1; // Выходим из цикла + } + } + // if(Ack){ + // Serial.print(millis()); + // Serial.println(" Send UINT32 OK"); + // } +} + void receive(const MyMessage &message) { + if(message.isAck()) {Ack = true; return;} if(message.getType() != V_STATUS) return; switch (message.sensor) { diff --git a/RozetkaESP/platformio.ini b/RozetkaESP/platformio.ini index 5555489..fdeceab 100644 --- a/RozetkaESP/platformio.ini +++ b/RozetkaESP/platformio.ini @@ -18,4 +18,5 @@ upload_port = 192.168.1.137 lib_deps = ottowinter/AsyncMqttClient-esphome @ ^0.8.4 + jwrw/ESP_EEPROM @ ^2.1.0 ; sstaub/Ticker @ ^3.2.0 \ No newline at end of file diff --git a/RozetkaESP/src/main.cpp b/RozetkaESP/src/main.cpp index b62a4e0..e56507d 100644 --- a/RozetkaESP/src/main.cpp +++ b/RozetkaESP/src/main.cpp @@ -2,16 +2,16 @@ #include #include #include -#include +#include #include #define BUTT1 (0) #define BUTT2 (2) #define SOCK1 (4) #define SOCK2 (5) -#define LED_WF (14) +#define LED_WF (13) #define LED_MQ (12) -#define LED_WRK (13) +#define LED_WRK (14) const char* ssid = "wf-home"; const char* password = "0ndthnrf"; @@ -22,7 +22,8 @@ Bounce but2 = Bounce(); unsigned long cRun = millis(); int nSec; -bool stat1, stat2, oldstat1, oldstat2; +uint8_t stat1, stat2, oldstat1, oldstat2; +unsigned long lwms; AsyncMqttClient mqttClient; Ticker mqttReconnectTimer; @@ -38,7 +39,8 @@ void onWifiDisconnect(const WiFiEventStationModeDisconnected& event); void onMqttConnect(bool sessionPresent); void onMqttDisconnect(AsyncMqttClientDisconnectReason reason); void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total); -void pubBool(const char* topic, bool pl); +void pubBool(const char* topic, uint8_t pl); +void onMqttPublish(uint16_t packetId); void setup(){ Serial.begin(9600); @@ -75,62 +77,70 @@ void setup(){ mqttClient.onConnect(onMqttConnect); mqttClient.onDisconnect(onMqttDisconnect); mqttClient.onMessage(onMqttMessage); + mqttClient.onPublish(onMqttPublish); mqttClient.setServer(mqtt_server, 1883); mqttClient.setClientId("Rozetka1"); pinMode(LED_WF, OUTPUT); pinMode(LED_MQ, OUTPUT); pinMode(LED_WRK, OUTPUT); - but1.attach(BUTT1, INPUT_PULLUP); - but2.attach(BUTT2, INPUT_PULLUP); + pinMode(BUTT1, INPUT_PULLUP); + pinMode(BUTT2, INPUT_PULLUP); + but1.attach(BUTT1); + but2.attach(BUTT2); + but1.interval(50); + but2.interval(50); pinMode(SOCK1, OUTPUT); pinMode(SOCK2, OUTPUT); digitalWrite(LED_WF, HIGH); digitalWrite(LED_MQ, HIGH); digitalWrite(LED_WRK, HIGH); - EEPROM.begin(4); - EEPROM.get(0, stat1); - oldstat1 = !stat1; - EEPROM.get(1, stat1); - oldstat2 = !stat2; + EEPROM.begin(8); + stat1 = EEPROM.read(0); + stat2 = EEPROM.read(1); + oldstat1 = stat1; + digitalWrite(SOCK1, stat1); + //EEPROM.get(4, stat1); + oldstat2 = stat2; + digitalWrite(SOCK2, stat2); connectToWifi(); - nSec = 0; + lwms = millis(); } void loop(){ - static unsigned long lwms = millis(); - ArduinoOTA.handle(); yield(); + but1.update(); + but2.update(); if(but1.fell()){ - stat1 = !stat1; + stat1 == 0 ? stat1=1 : stat1=0; } if(but2.fell()){ - stat2 = !stat2; + stat2 == 0 ? stat2=1 : stat2=0; } if(stat1 != oldstat1){ oldstat1 = stat1; digitalWrite(SOCK1, stat1); - EEPROM.put(0, stat1); + EEPROM.write(0, stat1); EEPROM.commit(); pubBool("/home/roz1/on1", stat1); } if(stat2 != oldstat2){ oldstat2 = stat2; digitalWrite(SOCK2, stat2); - EEPROM.put(1, stat2); + EEPROM.write(1, stat2); EEPROM.commit(); pubBool("/home/roz1/on2", stat2); } if(cRun + 999 < millis()){ cRun = millis(); - if(++nSec > 59){ - nSec = 0; - char v[15]; - ultoa(millis(), v, 10); - mqttClient.publish("/home/roz1/millis", 1, false, v); - digitalWrite(LED_WRK, LOW); - lwms = millis(); + if(mqttClient.connected()){ + if(++nSec > 59){ + nSec = 0; + char v[15]; + ultoa(millis()/1000, v, 10); + mqttClient.publish("/home/roz1/millis", 1, false, v); + } } } if(lwms + 300 < millis()) digitalWrite(LED_WRK, HIGH); @@ -165,12 +175,13 @@ void onMqttConnect(bool sessionPresent) { Serial.println("Connected to MQTT."); Serial.print("Session present: "); Serial.println(sessionPresent); - mqttClient.publish("/home/roz1/on1", 1, false, stat1 == true ? "false" : "true"); - mqttClient.publish("/home/roz1/on1_set", 1, false, stat1 == true ? "false" : "true"); - mqttClient.publish("/home/roz1/on2", 1, false, stat2 == true ? "false" : "true"); - mqttClient.publish("/home/roz1/on2_set", 1, false, stat2 == true ? "false" : "true"); + mqttClient.publish("/home/roz1/on1", 1, false, stat1 == 0 ? "false" : "true"); + mqttClient.publish("/home/roz1/on1_set", 1, false, stat1 == 0 ? "false" : "true"); + mqttClient.publish("/home/roz1/on2", 1, false, stat2 == 0 ? "false" : "true"); + mqttClient.publish("/home/roz1/on2_set", 1, false, stat2 == 0 ? "false" : "true"); mqttClient.subscribe("/home/roz1/on1_set", 1); mqttClient.subscribe("/home/roz1/on2_set", 1); + nSec = 59; digitalWrite(LED_MQ, LOW); } @@ -191,25 +202,29 @@ void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties Serial.println(pl); if(strcmp(topic, "/home/roz1/on1_set") == 0){ if(strcmp(pl, "true") == 0){ - stat1 = false; + stat1 = 1; } else{ - stat1 = true; + stat1 = 0; } return; } if(strcmp(topic, "/home/roz1/on2_set") == 0){ if(strcmp(pl, "true") == 0){ - stat2 = false; + stat2 = 1; } else{ - stat2 = true; + stat2 = 0; } } } +void onMqttPublish(uint16_t packetId) { + digitalWrite(LED_WRK, LOW); + lwms = millis(); +} -void pubBool(const char* topic, bool pl){ +void pubBool(const char* topic, uint8_t pl){ if(mqttClient.connected()){ - mqttClient.publish(topic, 1, false, pl != true ? "true" : "false"); + mqttClient.publish(topic, 1, false, pl == 1 ? "true" : "false"); } } \ No newline at end of file diff --git a/SerialGateWayMyS/src/main.cpp b/SerialGateWayMyS/src/main.cpp index e850657..df7219d 100644 --- a/SerialGateWayMyS/src/main.cpp +++ b/SerialGateWayMyS/src/main.cpp @@ -2,7 +2,7 @@ #define MY_DEBUG #define MY_RADIO_RF24 -#define MY_RF24_PA_LEVEL RF24_PA_HIGH +#define MY_RF24_PA_LEVEL RF24_PA_MAX #define MY_GATEWAY_SERIAL #define MY_RF24_CHANNEL (105) #define MY_RX_MESSAGE_BUFFER_FEATURE