Power to MAX

This commit is contained in:
2021-01-04 17:12:20 +03:00
parent 8bd7f648fa
commit dea3e1e391
4 changed files with 98 additions and 54 deletions

View File

@@ -2,7 +2,8 @@
#define MY_DEBUG #define MY_DEBUG
#define MY_RADIO_RF24 #define MY_RADIO_RF24
#define MY_RF24_CHANNEL (105) #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 SOCK1 2
#define SOCK2 3 #define SOCK2 3
@@ -21,9 +22,10 @@
// #undef MY_NODE_ID // #undef MY_NODE_ID
// #define MY_NODE_ID 14 // #define MY_NODE_ID 14
bool stat1, stat2; bool stat1, stat2, Ack;
void presentation(); 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); void receive(const MyMessage &message);
MyMessage msgMillis(2, V_VAR1); MyMessage msgMillis(2, V_VAR1);
@@ -49,13 +51,13 @@ void setup() {
stat2 = loadState(1); stat2 = loadState(1);
digitalWrite(SOCK2, stat2); digitalWrite(SOCK2, stat2);
digitalWrite(RELAY2, !stat2); digitalWrite(RELAY2, !stat2);
sendData(msgSock1s, !stat1, V_STATUS); sendData(msgSock1s, !stat1);
wait(100); wait(100);
sendData(msgSock2s, !stat2, V_STATUS); sendData(msgSock2s, !stat2);
wait(100); wait(100);
sendData(msgSock1, !stat1, V_VAR2); sendData(msgSock1, !stat1);
wait(100); wait(100);
sendData(msgSock2, !stat2, V_VAR3); sendData(msgSock2, !stat2);
} }
void loop() { void loop() {
@@ -66,8 +68,8 @@ void loop() {
stat1 = !stat1; stat1 = !stat1;
digitalWrite(SOCK1, stat1); digitalWrite(SOCK1, stat1);
digitalWrite(RELAY1, !stat1); digitalWrite(RELAY1, !stat1);
sendData(msgSock1s, !stat1, V_STATUS); sendData(msgSock1s, !stat1);
sendData(msgSock1, !stat1, V_VAR2); sendData(msgSock1, !stat1);
saveState(0, stat1); saveState(0, stat1);
Serial.print(F("Change Sock1: ")); Serial.println(stat1); Serial.print(F("Change Sock1: ")); Serial.println(stat1);
} }
@@ -75,8 +77,8 @@ void loop() {
stat2 = !stat2; stat2 = !stat2;
digitalWrite(SOCK2, stat2); digitalWrite(SOCK2, stat2);
digitalWrite(RELAY2, !stat2); digitalWrite(RELAY2, !stat2);
sendData(msgSock2s, !stat2, V_VAR3); sendData(msgSock2s, !stat2);
sendData(msgSock2, !stat2, V_STATUS); sendData(msgSock2, !stat2);
saveState(1, stat2); saveState(1, stat2);
Serial.print(F("Change Sock2: ")); Serial.println(stat2); Serial.print(F("Change Sock2: ")); Serial.println(stat2);
} }
@@ -86,19 +88,20 @@ void loop() {
digitalWrite(SOCK1, stat1); digitalWrite(SOCK1, stat1);
digitalWrite(RELAY1, !stat1); digitalWrite(RELAY1, !stat1);
saveState(0, digitalRead(SOCK1)); saveState(0, digitalRead(SOCK1));
sendData(msgSock1, !stat1, V_VAR2); sendData(msgSock1, !stat1);
} }
if(stat2 != digitalRead(SOCK2)){ if(stat2 != digitalRead(SOCK2)){
Serial.print(F("Curr Sock2: ")); Serial.println(digitalRead(SOCK2)); Serial.print(F("Curr Sock2: ")); Serial.println(digitalRead(SOCK2));
digitalWrite(SOCK2, stat2); digitalWrite(SOCK2, stat2);
digitalWrite(RELAY2, !stat2); digitalWrite(RELAY2, !stat2);
saveState(1, digitalRead(SOCK2)); saveState(1, digitalRead(SOCK2));
sendData(msgSock2, !stat2, V_VAR3); sendData(msgSock2, !stat2);
Serial.print(F("Change Sock2: ")); Serial.println(stat2); Serial.print(F("Change Sock2: ")); Serial.println(stat2);
} }
if((cRun + 60000) <= millis()){ if((cRun + 60000) <= millis()){
cRun = 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"); 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; bool send_data = false;
uint8_t count = 0; uint8_t count = 0;
while(send_data == false){ while(send_data == false){
count++; count++;
send_data = send(msg.set(status)); send_data = send(msg.set(status), true);
wait(100, C_SET, msg.type); wait(1000, C_SET, msg.type);
if ((count == 3 )&&(send_data == 0)){ // Если сделано 3 попытки и нет подтверждения отправки if ((count == 3 )&&(send_data == 0)){ // Если сделано 3 попытки и нет подтверждения отправки
count = 0; // Обнуляем счётчик count = 0; // Обнуляем счётчик
send_data = 1; // Выходим из цикла 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) void receive(const MyMessage &message)
{ {
if(message.isAck()) {Ack = true; return;}
if(message.getType() != V_STATUS) return; if(message.getType() != V_STATUS) return;
switch (message.sensor) switch (message.sensor)
{ {

View File

@@ -18,4 +18,5 @@ upload_port = 192.168.1.137
lib_deps = lib_deps =
ottowinter/AsyncMqttClient-esphome @ ^0.8.4 ottowinter/AsyncMqttClient-esphome @ ^0.8.4
jwrw/ESP_EEPROM @ ^2.1.0
; sstaub/Ticker @ ^3.2.0 ; sstaub/Ticker @ ^3.2.0

View File

@@ -2,16 +2,16 @@
#include <ArduinoOTA.h> #include <ArduinoOTA.h>
#include <Ticker.h> #include <Ticker.h>
#include <AsyncMqttClient.h> #include <AsyncMqttClient.h>
#include <EEPROM.h> #include <ESP_EEPROM.h>
#include <Bounce2.h> #include <Bounce2.h>
#define BUTT1 (0) #define BUTT1 (0)
#define BUTT2 (2) #define BUTT2 (2)
#define SOCK1 (4) #define SOCK1 (4)
#define SOCK2 (5) #define SOCK2 (5)
#define LED_WF (14) #define LED_WF (13)
#define LED_MQ (12) #define LED_MQ (12)
#define LED_WRK (13) #define LED_WRK (14)
const char* ssid = "wf-home"; const char* ssid = "wf-home";
const char* password = "0ndthnrf"; const char* password = "0ndthnrf";
@@ -22,7 +22,8 @@ Bounce but2 = Bounce();
unsigned long cRun = millis(); unsigned long cRun = millis();
int nSec; int nSec;
bool stat1, stat2, oldstat1, oldstat2; uint8_t stat1, stat2, oldstat1, oldstat2;
unsigned long lwms;
AsyncMqttClient mqttClient; AsyncMqttClient mqttClient;
Ticker mqttReconnectTimer; Ticker mqttReconnectTimer;
@@ -38,7 +39,8 @@ void onWifiDisconnect(const WiFiEventStationModeDisconnected& event);
void onMqttConnect(bool sessionPresent); void onMqttConnect(bool sessionPresent);
void onMqttDisconnect(AsyncMqttClientDisconnectReason reason); void onMqttDisconnect(AsyncMqttClientDisconnectReason reason);
void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total); 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(){ void setup(){
Serial.begin(9600); Serial.begin(9600);
@@ -75,62 +77,70 @@ void setup(){
mqttClient.onConnect(onMqttConnect); mqttClient.onConnect(onMqttConnect);
mqttClient.onDisconnect(onMqttDisconnect); mqttClient.onDisconnect(onMqttDisconnect);
mqttClient.onMessage(onMqttMessage); mqttClient.onMessage(onMqttMessage);
mqttClient.onPublish(onMqttPublish);
mqttClient.setServer(mqtt_server, 1883); mqttClient.setServer(mqtt_server, 1883);
mqttClient.setClientId("Rozetka1"); mqttClient.setClientId("Rozetka1");
pinMode(LED_WF, OUTPUT); pinMode(LED_WF, OUTPUT);
pinMode(LED_MQ, OUTPUT); pinMode(LED_MQ, OUTPUT);
pinMode(LED_WRK, OUTPUT); pinMode(LED_WRK, OUTPUT);
but1.attach(BUTT1, INPUT_PULLUP); pinMode(BUTT1, INPUT_PULLUP);
but2.attach(BUTT2, INPUT_PULLUP); pinMode(BUTT2, INPUT_PULLUP);
but1.attach(BUTT1);
but2.attach(BUTT2);
but1.interval(50);
but2.interval(50);
pinMode(SOCK1, OUTPUT); pinMode(SOCK1, OUTPUT);
pinMode(SOCK2, OUTPUT); pinMode(SOCK2, OUTPUT);
digitalWrite(LED_WF, HIGH); digitalWrite(LED_WF, HIGH);
digitalWrite(LED_MQ, HIGH); digitalWrite(LED_MQ, HIGH);
digitalWrite(LED_WRK, HIGH); digitalWrite(LED_WRK, HIGH);
EEPROM.begin(4); EEPROM.begin(8);
EEPROM.get(0, stat1); stat1 = EEPROM.read(0);
oldstat1 = !stat1; stat2 = EEPROM.read(1);
EEPROM.get(1, stat1); oldstat1 = stat1;
oldstat2 = !stat2; digitalWrite(SOCK1, stat1);
//EEPROM.get(4, stat1);
oldstat2 = stat2;
digitalWrite(SOCK2, stat2);
connectToWifi(); connectToWifi();
nSec = 0; lwms = millis();
} }
void loop(){ void loop(){
static unsigned long lwms = millis();
ArduinoOTA.handle(); ArduinoOTA.handle();
yield(); yield();
but1.update();
but2.update();
if(but1.fell()){ if(but1.fell()){
stat1 = !stat1; stat1 == 0 ? stat1=1 : stat1=0;
} }
if(but2.fell()){ if(but2.fell()){
stat2 = !stat2; stat2 == 0 ? stat2=1 : stat2=0;
} }
if(stat1 != oldstat1){ if(stat1 != oldstat1){
oldstat1 = stat1; oldstat1 = stat1;
digitalWrite(SOCK1, stat1); digitalWrite(SOCK1, stat1);
EEPROM.put(0, stat1); EEPROM.write(0, stat1);
EEPROM.commit(); EEPROM.commit();
pubBool("/home/roz1/on1", stat1); pubBool("/home/roz1/on1", stat1);
} }
if(stat2 != oldstat2){ if(stat2 != oldstat2){
oldstat2 = stat2; oldstat2 = stat2;
digitalWrite(SOCK2, stat2); digitalWrite(SOCK2, stat2);
EEPROM.put(1, stat2); EEPROM.write(1, stat2);
EEPROM.commit(); EEPROM.commit();
pubBool("/home/roz1/on2", stat2); pubBool("/home/roz1/on2", stat2);
} }
if(cRun + 999 < millis()){ if(cRun + 999 < millis()){
cRun = millis(); cRun = millis();
if(mqttClient.connected()){
if(++nSec > 59){ if(++nSec > 59){
nSec = 0; nSec = 0;
char v[15]; char v[15];
ultoa(millis(), v, 10); ultoa(millis()/1000, v, 10);
mqttClient.publish("/home/roz1/millis", 1, false, v); mqttClient.publish("/home/roz1/millis", 1, false, v);
digitalWrite(LED_WRK, LOW); }
lwms = millis();
} }
} }
if(lwms + 300 < millis()) digitalWrite(LED_WRK, HIGH); if(lwms + 300 < millis()) digitalWrite(LED_WRK, HIGH);
@@ -165,12 +175,13 @@ void onMqttConnect(bool sessionPresent) {
Serial.println("Connected to MQTT."); Serial.println("Connected to MQTT.");
Serial.print("Session present: "); Serial.print("Session present: ");
Serial.println(sessionPresent); Serial.println(sessionPresent);
mqttClient.publish("/home/roz1/on1", 1, false, stat1 == true ? "false" : "true"); mqttClient.publish("/home/roz1/on1", 1, false, stat1 == 0 ? "false" : "true");
mqttClient.publish("/home/roz1/on1_set", 1, false, stat1 == true ? "false" : "true"); mqttClient.publish("/home/roz1/on1_set", 1, false, stat1 == 0 ? "false" : "true");
mqttClient.publish("/home/roz1/on2", 1, false, stat2 == true ? "false" : "true"); mqttClient.publish("/home/roz1/on2", 1, false, stat2 == 0 ? "false" : "true");
mqttClient.publish("/home/roz1/on2_set", 1, false, stat2 == true ? "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/on1_set", 1);
mqttClient.subscribe("/home/roz1/on2_set", 1); mqttClient.subscribe("/home/roz1/on2_set", 1);
nSec = 59;
digitalWrite(LED_MQ, LOW); digitalWrite(LED_MQ, LOW);
} }
@@ -191,25 +202,29 @@ void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties
Serial.println(pl); Serial.println(pl);
if(strcmp(topic, "/home/roz1/on1_set") == 0){ if(strcmp(topic, "/home/roz1/on1_set") == 0){
if(strcmp(pl, "true") == 0){ if(strcmp(pl, "true") == 0){
stat1 = false; stat1 = 1;
} }
else{ else{
stat1 = true; stat1 = 0;
} }
return; return;
} }
if(strcmp(topic, "/home/roz1/on2_set") == 0){ if(strcmp(topic, "/home/roz1/on2_set") == 0){
if(strcmp(pl, "true") == 0){ if(strcmp(pl, "true") == 0){
stat2 = false; stat2 = 1;
} }
else{ 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()){ if(mqttClient.connected()){
mqttClient.publish(topic, 1, false, pl != true ? "true" : "false"); mqttClient.publish(topic, 1, false, pl == 1 ? "true" : "false");
} }
} }

View File

@@ -2,7 +2,7 @@
#define MY_DEBUG #define MY_DEBUG
#define MY_RADIO_RF24 #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_GATEWAY_SERIAL
#define MY_RF24_CHANNEL (105) #define MY_RF24_CHANNEL (105)
#define MY_RX_MESSAGE_BUFFER_FEATURE #define MY_RX_MESSAGE_BUFFER_FEATURE