In effetti, con quello che hai detto mi fai riflettere
E' anche vero che sapendo che certi sistemi sono violabili, gli faccio fare cose che non possono compromettere la sicurezza, e quindi posso anche allegare lo sketch.
Tornando al problema, visto che mi hai spiegato il perchè un'anno fa è stato compilato, non capisco come mai adesso dia questo problema, io ho solo aggiunto un paio di comandi da remoto, non attribuisco a questo ...
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
#define BOTtoken "XXXXXXXXXXXX" // utente1
char CHAT_ID[] = "YYYYYYYY"; // utente1
#define BOTtoken_M "VVVVVVVVVVV" // utente 2
char CHAT_ID_M[] = "ZZZZZZZZZZZ"; // utente 2
#define RXD2 16 // definisce pin RX porta serial2
#define TXD2 17 // definisce pin TX porta serial2
#define caldaia 15 // pin relè caldaia
#define azzera 5 // pin azzera errori antifurto
#define cancello 4 // pin apre/chiude cancello princ
#define luci_sala 18 // pin comanda luci sala
#define on_lan 21 // pin comanda relè stacca lan al DVR
#define sbarra 19 // pin apre/chiude sbarra
#define PULS 34 // pin ingresso pulsante
const char* ssid = "nome_wifi";
const char* password = "passw_wifi";
String chat_id; // ci salvo id letto da telegram
byte puls = HIGH; // ci salvo la lettura del pulsante
byte n_mess = 0; // ci salvo il num di mess ricevuti Denis
byte n_mess1 = 0; // ci salvo il num di mess ricevuti Matteo
byte i = 0; // contatore invio mess
byte rx; // byte dove salvo il dato seriale letto
byte conta; // conta i byte letti da seriale
byte lettura[40]; // creo 40 byte, dove salvo lettura seriale
byte volbatt = 0; // ci memorizzo il valore tens batteria
byte ERRORI1 = 0; // ci memorizzo lo stato errori, ogni bit è un sensore
byte ERRORI2 = 0; // ci memorizzo lo stato errori, ogni bit è un sensore
byte STATI = 0; // ci memorizzo lo stato delle cose, ogni bit è una cosa
byte STATI1 = 0; // ci memorizzo lo stato delle cose, ogni bit è una cosa
byte NEW_ERRORI1 = 0; // ci memorizzo lo stato errori appena letto
byte NEW_ERRORI2 = 0; // ci memorizzo lo stato errori
byte NEW_STATI = 0; // ci memorizzo lo stato delle cose
byte NEW_STATI1 = 0; // ci memorizzo lo stato delle cose
byte conta_porta_ingr = 0; // i byte conta, servono a contare le volte che un sensore
byte conta_porta_off = 0; // interviene, ed è visibile dal display
byte conta_portone = 0;
byte conta_canc_princ = 0;
byte conta_canc_salt = 0;
byte conta_barr_canc = 0;
byte conta_barr_off = 0;
byte conta_pir_porta = 0;
byte conta_pir_strada = 0;
byte conta_pir_cima_strada = 0;
byte old_conta_porta_ingr = 0; // ci salvo vecchio stato per controllo
byte old_conta_porta_off = 0;
byte old_conta_portone = 0;
byte old_conta_canc_princ = 0;
byte old_conta_canc_salt = 0;
byte old_conta_barr_canc = 0;
byte old_conta_barr_off = 0;
byte old_conta_pir_porta = 0;
byte old_conta_pir_strada = 0;
byte old_conta_pir_cima_strada = 0;
int t_sala = 0; // temperatura sala
int u_sala = 0; // umidità sala
int t_camera = 0; // temperatura camera
int u_camera = 0; // umidità camera
int t_esterna = 0; // temperatura esterna
int u_esterna = 0; // umidità esterna
int t_vano = 0; // temperatura del sensore barometrico
int p_baro = 0; // pressione intero
float vbatt = 0.0; // volt batteria, con decimali
float temp_sala = 0.0; // temperatura sala
float umid_sala = 0.0; // umidità sala
float temp_camera = 0.0; // temperatura camera
float umid_camera = 0.0; // umidità camera
float temp_esterna = 0.0; // temperatura esterna
float umid_esterna = 0.0; // umidità esterna
float temp_vano = 0; // temperatura del sensore barometrico
boolean non_aggiornare = false; // per sapere se aggiornare
boolean scritto_all = false; // per sapere se ho scritto degli allarmi
bool pompa_azz = false; // per sapere se ho azzerato tempo pompa acqua
bool fatto220 = false; // per sapere se ho scritto mancanza 220
bool anti_on = false; // per sapere se ho segnalato antifurto off
bool campan = false; // per sapere se ho segnalato suonato campanello
bool err_camp = false; // per sapere se rotto puls campanello
bool res_ok = false; // per sapere se ho azzerato errori
unsigned long t_lett = 0; // tempo per lettura da chat
unsigned long t_ser = 0; // tempo lettura seriale
unsigned long pompa = 0; // tempo per pompa acqua troppo accesa
unsigned long inser = 0; // tempo attesa da attivazione antifurto
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
UniversalTelegramBot bot1(BOTtoken_M, client);
void setup()
{
Serial.begin(9600); // Inizializzo la seriale di esp32
Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2); //seriale 2 dove leggo i dati
pinMode(cancello, OUTPUT);
pinMode(caldaia, OUTPUT);
pinMode(azzera, OUTPUT);
pinMode(luci_sala, OUTPUT);
pinMode(on_lan, OUTPUT);
pinMode(sbarra, OUTPUT);
pinMode(PULS, INPUT);
digitalWrite(cancello, LOW);
digitalWrite(caldaia, LOW);
digitalWrite(azzera, LOW);
digitalWrite(luci_sala, LOW);
digitalWrite(on_lan, LOW);
digitalWrite(sbarra, LOW);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
client.setCACert(TELEGRAM_CERTIFICATE_ROOT); // cert root per api.telegram.org
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println("connessione al WI-FI...");
}
Serial.println(WiFi.localIP()); // scrivo IP locale dell'ESP32
delay(200);
bot.sendMessage(CHAT_ID, "Ciao, sono stato alimentato", ""); // invia mess Denis
bot1.sendMessage(CHAT_ID_M, "Ciao, sono stato alimentato", ""); // invia mess Matteo
leggi(); // legge i dati da seriale
bitWrite(ERRORI2, 4, 1); // dico c'è 220 per non dare errore all'alimentazione
t_lett = millis(); // azzero il tempo
t_ser = millis(); // azzero il tempo
}
void loop()
{
if (millis() - t_ser > 150) // ogni 150 ms
{
leggi(); // legge i dati da seriale
if (millis() - inser > 180000 && anti_on == true)
{ // se trascorsi 3 minuti da att antifurto e se antifurto attivo
if (res_ok == false) // solo se non già fatto
{
digitalWrite(azzera, HIGH); // azzero eventuali errori anti
delay(150);
digitalWrite(azzera, LOW);
delay(3000); // attendo che la scheda antifurto azzeri
aggiorna_stati(); // aggiorno a zero tutti gli stati
res_ok = true; // avviso che ho azzerato
}
controllo(); // funzione controlla sensori antifurto
}
t_ser = millis(); // azzero il tempo
}
if (millis() - t_lett > 500) // ogni 500 ms contr mess telegram
{
n_mess = bot.getUpdates(bot.last_message_received + 1);
while (n_mess)
{
rispondi_D(n_mess); // risponde a Denis
n_mess = bot.getUpdates(bot.last_message_received + 1);
}
n_mess1 = bot1.getUpdates(bot1.last_message_received + 1);
while (n_mess1)
{
rispondi_M(n_mess1); // risponde a Matteo
n_mess1 = bot1.getUpdates(bot1.last_message_received + 1);
}
t_lett = millis(); // azzero il tempo
}
//_________________________________________________________________________________
puls = digitalRead(PULS); // leggo il pin ingresso
if (puls == LOW) // se è premuto il pulsante
{
bot.sendMessage(CHAT_ID, "E' stato premuto il puls di test, tutto funziona regolarmente!", "");
bot1.sendMessage(CHAT_ID_M, "E' stato premuto il puls di test, tutto funziona regolarmente!", "");
delay(500);
while (puls == LOW) // attendo venga rilasciato il pulsante
{
puls = digitalRead(PULS); // leggo il pin ingresso
}
}
//_________________________________________________________________________________
if (bitRead (ERRORI2, 4) == 0 && fatto220 == false) // leggo il bit della 220, a 1 se c'è
{
bot.sendMessage(CHAT_ID, "Mancanza rete 220", "");
bot1.sendMessage(CHAT_ID_M, "Mancanza rete 220", "");
fatto220 = true; // avviso che ho scritto
}
if (bitRead (ERRORI2, 4) == 1 && fatto220 == true) // leggo il bit della 220, a 1 se c'è
{
bot.sendMessage(CHAT_ID, "E' tornata la rete 220", "");
bot1.sendMessage(CHAT_ID_M, "E' tornata la rete 220", "");
fatto220 = false; // avviso che ho scritto
}
//_________________________________________________________________________________
if (bitRead (STATI, 2) == 1 && anti_on == false)// se antifurto on e non già fatto
{
if (bitRead (STATI1, 5) == 0) // leggo il bit del portone off
{
bot.sendMessage(CHAT_ID, "E' stato inserito l'antifurto col portone officina aperto", "");
bot1.sendMessage(CHAT_ID_M, "E' stato inserito l'antifurto col portone officina aperto", "");
}
if (bitRead (STATI1, 6) == 0) // leggo il bit della porta ingr
{
bot.sendMessage(CHAT_ID, "E' stato inserito l'antifurto con la porta ingresso aperta", "");
bot1.sendMessage(CHAT_ID_M, "E' stato inserito l'antifurto con la porta ingresso aperta", "");
}
if (bitRead (STATI1, 4) == 0) // leggo il bit della porta interna off
{
bot.sendMessage(CHAT_ID, "E' stato inserito l'antifurto con la porta interna officina aperta", "");
bot1.sendMessage(CHAT_ID_M, "E' stato inserito l'antifurto con la porta interna officina aperta", "");
}
anti_on = true; // avviso antifurto attivo
res_ok = false; // azzero avviso fatti azzeramenti
inser = millis(); // carico tempo per contr sensori antifurto
}
if (bitRead (STATI, 2) == 0 && anti_on == true)// se antifurto off e non già fatto
{
bot.sendMessage(CHAT_ID, "E' stato disattivato l'antifurto!", "");
bot1.sendMessage(CHAT_ID_M, "E' stato disattivato l'antifurto!", "");
anti_on = false; // avviso antifurto disattivo
}
//_________________________________________________________________________________
if (bitRead (ERRORI2, 3) == 1) // leggo il bit della pompa acqua, se accesa
{
if (pompa_azz == false) // se non ho azzerato
{
pompa = millis(); // azzero tempo millis
pompa_azz = true; // avviso che ho azzerato
}
if (millis() - pompa > 120000) // se passati 2 minuti
{
bot.sendMessage(CHAT_ID, "Pompa acqua accesa da più di 2 minuti", "");
bot1.sendMessage(CHAT_ID_M, "Pompa acqua accesa da più di 2 minuti", "");
pompa = millis(); // azzero tempo millis
}
}
else // se pompa spenta
{
pompa_azz = false; // azzero avviso per poterlo rifare
}
//_________________________________________________________________________________
if (bitRead (ERRORI2, 1) == 1 && campan == false)// se sonato campanello e non già fatto
{
bot.sendMessage(CHAT_ID, "Qualcuno ha suonato il campanello", "");
bot1.sendMessage(CHAT_ID_M, "Qualcuno ha suonato il campanello", "");
campan = true; // avviso fatto suonato campanello
}
if (bitRead (ERRORI2, 1) == 0 && campan == true)// se campanello a riposo e non già fatto
{
campan = false; // azzero avviso suonato campanello
}
//_________________________________________________________________________________
if (bitRead (ERRORI2, 2) == 1 && err_camp == false)
{ // se pulsante campanello in corto e non già fatto
bot.sendMessage(CHAT_ID, "Pulsante campanello in corto", "");
bot1.sendMessage(CHAT_ID_M, "Pulsante campanello in corto", "");
err_camp = true; // avviso fatto errore campanello
}
if (bitRead (ERRORI2, 2) == 0 && err_camp == true)// se non c'è err puls camp
{
err_camp = false; // azzero avviso errore campanello
}
//_________________________________________________________________________________
} //OOOOOOOOOOOOOOOOOOOOOO FINE LOOP OOOOOOOOOOOOOOOOOOOOOOOOO
//**************************************************************************
void rispondi_D(byte n_mess)
{
for (i = 0; i < n_mess; i++)
{
chat_id = String(bot.messages[i].chat_id); // verifica ID
if (chat_id != CHAT_ID) // se l'ID è diverso
{
bot.sendMessage(chat_id, "Utente non autorizzato!", "");
bot.sendMessage(CHAT_ID, "Utente non autorizzato ha provato ad accedere a Denis...", "");
bot1.sendMessage(CHAT_ID_M, "Utente non autorizzato ha provato ad accedere a Denis...", "");
continue;
}
String text = bot.messages[i].text;
String from_name = bot.messages[i].from_name;
if (text == "/info")
{
String welcome = "Benvenuto Denis \n";
welcome += "Usa questi comandi per controllare le tue uscite.\n\n";
welcome += " /vedi allarmi antifurto \n";
welcome += " /stati ingressi e luci di casa \n";
welcome += " /temperature varie temperature di casa \n";
welcome += " /accendi_caldaia accende la caldaia \n";
welcome += " /spegni_caldaia spegne la caldaia \n";
welcome += " /azzera pulisce gli errori antifurto \n";
welcome += " /cancello apre/chiude il cancello \n";
welcome += " /sbarra apre/chiude la sbarra \n";
welcome += " /luce_off spegne luci sala \n";
welcome += " /luce_on accende luci sala \n";
welcome += " /luce_temp luci sala a tempo \n";
welcome += " /stato per sapere stato delle uscite \n";
welcome += " /ciao saluto \n";
bot.sendMessage(CHAT_ID, welcome, "");
}
if (text == "/accendi_caldaia")
{
bot.sendMessage(CHAT_ID, "ho acceso la caldaia!", "");
digitalWrite(caldaia, HIGH);
}
if (text == "/spegni_caldaia")
{
bot.sendMessage(CHAT_ID, "ho spento la caldaia!", "");
digitalWrite(caldaia, LOW);
}
if (text == "/azzera")
{
digitalWrite(azzera, HIGH);
delay(150);
digitalWrite(azzera, LOW);
delay(1000); // attendo che la scheda antifurto azzeri
aggiorna_stati(); // aggiorno a zero tutti gli stati
bot.sendMessage(CHAT_ID, "ho azzerato gli errori antifurto!", "");
}
if (text == "/sbarra")
{
digitalWrite(sbarra, HIGH);
delay(250);
digitalWrite(sbarra, LOW);
bot.sendMessage(CHAT_ID, "inviato comando sbarra", "");
}
if (text == "/cancello")
{
if (bitRead (STATI1, 7) == 0) // leggo il bit, se canc aperto
{
digitalWrite(cancello, HIGH);
delay(200);
digitalWrite(cancello, LOW);
bot.sendMessage(CHAT_ID, "chiudo il cancello", "");
}
else // se canc chiuso
{
digitalWrite(cancello, HIGH);
delay(200);
digitalWrite(cancello, LOW);
bot.sendMessage(CHAT_ID, "apro il cancello", "");
}
}
if (text == "/luce_off")
{
if (bitRead (ERRORI2, 6) == 1) // leggo il bit della luce sala
{ // se accesa
digitalWrite(luci_sala, HIGH);
delay(800);
digitalWrite(luci_sala, LOW);
bot.sendMessage(CHAT_ID, "ho spento la luce di sala!", "");
}
else // se già spenta
{
bot.sendMessage(CHAT_ID, "la luce di sala è già spenta!!!", "");
}
}
if (text == "/luce_on")
{
if (bitRead (ERRORI2, 6) == 0) // leggo il bit della luce sala
{ // se spenta
digitalWrite(luci_sala, HIGH);
delay(100);
digitalWrite(luci_sala, LOW);
bot.sendMessage(CHAT_ID, "ho acceso la luce di sala!", "");
}
else // se è già accesa
{
bot.sendMessage(CHAT_ID, "la luce di sala è già accesa!!!", "");
}
}
if (text == "/luce_temp")
{
if (bitRead (ERRORI2, 6) == 0) // leggo il bit della luce sala
{ // se spenta
digitalWrite(luci_sala, HIGH);
delay(800);
digitalWrite(luci_sala, LOW);
bot.sendMessage(CHAT_ID, "ho acceso la luce di sala a tempo!", "");
}
else // se accesa
{
digitalWrite(luci_sala, HIGH);
delay(800);
digitalWrite(luci_sala, LOW); // spengo la luce
delay(800); // attendo
digitalWrite(luci_sala, HIGH);
delay(800);
digitalWrite(luci_sala, LOW); // riaccendo a tempo
bot.sendMessage(CHAT_ID, "ho acceso la luce sala a tempo!", "");
}
}
if (text == "/temperature")
{
String welcome = "Ecco le temperature di casa: \n\n";
welcome += "Temperatura sala = ";
welcome += temp_sala;
welcome += "\n";
welcome += "Umidità sala = ";
welcome += umid_sala;
welcome += "\n";
welcome += "Temperatura camera = ";
welcome += temp_camera;
welcome += "\n";
welcome += "Umidità camera = ";
welcome += umid_camera;
welcome += "\n";
welcome += "Temperatura esterna = ";
welcome += temp_esterna;
welcome += "\n";
welcome += "Umidità esterna = ";
welcome += umid_esterna;
welcome += "\n";
welcome += "Temperatura vano tecnico = ";
welcome += temp_vano;
welcome += "\n";
welcome += "Pressione barometrica = ";
welcome += p_baro;
bot.sendMessage(CHAT_ID, welcome, "");
}
if (text == "/vedi")
{
String welcome = "Ecco i dati richiesti: \n\n";
welcome += "PIR cima strada = ";
welcome += conta_pir_cima_strada;
welcome += "\n";
welcome += "PIR strada camera = ";
welcome += conta_pir_strada;
welcome += "\n";
welcome += "PIR davanti porta ingr. = ";
welcome += conta_pir_porta;
welcome += "\n";
welcome += "Barriera cancello = ";
welcome += conta_barr_canc;
welcome += "\n";
welcome += "Barriera officina = ";
welcome += conta_barr_off;
welcome += "\n";
if (bitRead (STATI1, 6) == 0) // leggo il bit della porta ingr
{
welcome += "Porta ingresso APERTA ";
}
else
{
welcome += "Porta ingresso chiusa ";
}
welcome += conta_porta_ingr;
welcome += "\n";
if (bitRead (STATI1, 5) == 0) // leggo il bit del portone off
{
welcome += "Portone officina APERTO ";
}
else
{
welcome += "Portone officina chiuso ";
}
welcome += conta_portone;
welcome += "\n";
if (bitRead (STATI1, 4) == 0) // leggo il bit della porta interna off
{
welcome += "Porta interna off APERTA ";
}
else
{
welcome += "Porta interna off chiusa ";
}
welcome += conta_porta_off;
welcome += "\n";
if (bitRead (STATI1, 7) == 0) // leggo il bit del canc aperto
{
welcome += "Cancello principale APERTO ";
}
else
{
welcome += "Cancello principale chiuso ";
}
welcome += conta_canc_princ;
welcome += "\n";
if (bitRead (STATI1, 3) == 0) // leggo il bit del canc salt aperto
{
welcome += "Cancello salt APERTO ";
}
else
{
welcome += "Cancello salt chiuso ";
}
welcome += conta_canc_salt;
bot.sendMessage(CHAT_ID, welcome, "");
}
if (text == "/stati")
{
String welcome = "Ecco i dati richiesti: \n\n";
welcome += "Tensione batteria = ";
welcome += vbatt;
welcome += "\n";
if (bitRead (STATI, 0) == 1) // leggo il bit del crepuscolare
{
welcome += "Il crepuscolare vede NOTTE";
}
else
{
welcome += "Il crepuscolare vede giorno";
}
welcome += "\n";
if (bitRead (ERRORI2, 4) == 1) // leggo il bit della 220, a 1 se c'è
{
welcome += "Rete 220 presente";
}
else
{
welcome += "Mancanza rete 220V";
}
welcome += "\n";
if (bitRead (ERRORI2, 3) == 1) // leggo il bit della pompa acqua
{
welcome += "Pompa acqua ACCESA";
}
else
{
welcome += "Pompa acqua spenta";
}
welcome += "\n";
if (bitRead (STATI, 2) == 1) // leggo il bit dell'antifurto
{
welcome += "Antifurto ATTIVO";
}
else
{
welcome += "Antifurto non attivo";
}
welcome += "\n";
if (bitRead (STATI, 7) == 1) // leggo il bit della luce fuori
{
welcome += "Luci esterne davanti ACCESE";
}
else
{
welcome += "Luci esterne davanti spente";
}
welcome += "\n";
if (bitRead (STATI, 6) == 1) // leggo il bit della luce fuori
{
welcome += "Luci esterne dietro ACCESE";
}
else
{
welcome += "Luci esterne dietro spente";
}
welcome += "\n";
if (bitRead (STATI, 5) == 1) // leggo il bit della luce fuori
{
welcome += "Luci esterne camera ACCESE";
}
else
{
welcome += "Luci esterne camera spente";
}
welcome += "\n";
if (bitRead (STATI, 4) == 1) // leggo il bit della luce fuori
{
welcome += "Luci esterne porta ACCESE";
}
else
{
welcome += "Luci esterne porta spente";
}
welcome += "\n";
if (bitRead (STATI, 3) == 1) // leggo il bit della luce fuori
{
welcome += "Luci esterne campo ACCESE";
}
else
{
welcome += "Luci esterne campo spente";
}
welcome += "\n";
if (bitRead (ERRORI2, 6) == 1) // leggo il bit della luce sala
{
welcome += "Luci sala ACCESE";
}
else
{
welcome += "Luci sala spente";
}
welcome += "\n";
if (bitRead (ERRORI2, 5) == 1) // leggo il bit della luce officina
{
welcome += "Luci officina ACCESE";
}
else
{
welcome += "Luci officina spente";
}
bot.sendMessage(CHAT_ID, welcome, "");
}
if (text == "/ciao")
{
bot.sendMessage(CHAT_ID, "Ciao Denis, come posso aiutarti ? ", "");
}
if (text == "/stato")
{
if (digitalRead(caldaia))
{
bot.sendMessage(CHAT_ID, "la caldaia è accesa!", "");
}
else
{
bot.sendMessage(CHAT_ID, "la caldaia è spenta!", "");
}
if (digitalRead(on_lan))
{
bot.sendMessage(CHAT_ID, "il DVR è collegato in rete!", "");
}
else
{
bot.sendMessage(CHAT_ID, "il DVR non è connesso alla rete!", "");
}
}
}
}
//**************************************************************************
void rispondi_M(byte n_mess) // funzione risponde a Matteo
{
for (i = 0; i < n_mess; i++)
{
chat_id = String(bot1.messages[i].chat_id); // verifica ID
if (chat_id != CHAT_ID_M) // se l'ID è diverso
{
bot.sendMessage(chat_id, "Utente non autorizzato!", "");
bot.sendMessage(CHAT_ID, "Utente non autorizzato ha provato ad accedere a Matteo...", "");
bot1.sendMessage(CHAT_ID_M, "Utente non autorizzato ha provato ad accedere a Matteo...", "");
continue;
}
String text = bot1.messages[i].text;
String from_name = bot1.messages[i].from_name;
if (text == "/info")
{
String welcome = "Benvenuto Matteo \n";
welcome += "Usa questi comandi per controllare le tue uscite.\n\n";
welcome += " /vedi allarmi antifurto \n";
welcome += " /stati ingressi e luci di casa \n";
welcome += " /temperature varie temperature di casa \n";
welcome += " /accendi_caldaia accende la caldaia \n";
welcome += " /spegni_caldaia spegne la caldaia \n";
welcome += " /azzera pulisce gli errori antifurto \n";
welcome += " /cancello apre/chiude il cancello \n";
welcome += " /sbarra apre/chiude la sbarra \n";
welcome += " /luce_off spegne luci sala \n";
welcome += " /luce_on accende luci sala \n";
welcome += " /luce_temp luci sala a tempo \n";
welcome += " /stato per sapere stato delle uscite \n";
welcome += " /ciao saluto \n";
bot1.sendMessage(CHAT_ID_M, welcome, "");
}
if (text == "/accendi_caldaia")
{
bot1.sendMessage(CHAT_ID_M, "ho acceso la caldaia!", "");
bot.sendMessage(CHAT_ID, "Matteo ha acceso la caldaia!", "");
digitalWrite(caldaia, HIGH);
}
if (text == "/spegni_caldaia")
{
bot1.sendMessage(CHAT_ID_M, "ho spento la caldaia!", "");
bot.sendMessage(CHAT_ID, "Matteo ha spento la caldaia!", "");
digitalWrite(caldaia, LOW);
}
if (text == "/azzera")
{
digitalWrite(azzera, HIGH);
delay(150);
digitalWrite(azzera, LOW);
delay(1000); // attendo che la scheda antifurto azzeri
aggiorna_stati(); // aggiorno a zero tutti gli stati
bot1.sendMessage(CHAT_ID_M, "ho azzerato gli errori antifurto!", "");
}
if (text == "/sbarra")
{
digitalWrite(sbarra, HIGH);
delay(250);
digitalWrite(sbarra, LOW);
bot1.sendMessage(CHAT_ID_M, "inviato comando sbarra", "");
bot.sendMessage(CHAT_ID, "Matteo ha inviato comando sbarra", "");
}
if (text == "/cancello")
{
if (bitRead (STATI1, 7) == 0) // leggo il bit, se canc aperto
{
digitalWrite(cancello, HIGH);
delay(200);
digitalWrite(cancello, LOW);
bot1.sendMessage(CHAT_ID_M, "chiudo il cancello", "");
bot.sendMessage(CHAT_ID, "Matteo ha chiuso il cancello", "");
}
else // se canc chiuso
{
digitalWrite(cancello, HIGH);
delay(200);
digitalWrite(cancello, LOW);
bot1.sendMessage(CHAT_ID_M, "apro il cancello", "");
bot.sendMessage(CHAT_ID, "Matteo ha aperto il cancello", "");
}
}
if (text == "/luce_off")
{
if (bitRead (ERRORI2, 6) == 1) // leggo il bit della luce sala
{ // se accesa
digitalWrite(luci_sala, HIGH);
delay(800);
digitalWrite(luci_sala, LOW);
bot1.sendMessage(CHAT_ID_M, "ho spento la luce di sala!", "");
bot.sendMessage(CHAT_ID, "Matteo ha spento la luce di sala!", "");
}
else // se già spenta
{
bot1.sendMessage(CHAT_ID_M, "la luce di sala è già spenta!!!", "");
}
}
if (text == "/luce_on")
{
if (bitRead (ERRORI2, 6) == 0) // leggo il bit della luce sala
{ // se spenta
digitalWrite(luci_sala, HIGH);
delay(100);
digitalWrite(luci_sala, LOW);
bot1.sendMessage(CHAT_ID_M, "ho acceso la luce di sala!", "");
bot.sendMessage(CHAT_ID, "Matteo ha acceso la luce di sala!", "");
}
else // se è già accesa
{
bot1.sendMessage(CHAT_ID_M, "la luce di sala è già accesa!!!", "");
}
}
if (text == "/luce_temp")
{
if (bitRead (ERRORI2, 6) == 0) // leggo il bit della luce sala
{ // se spenta
digitalWrite(luci_sala, HIGH);
delay(800);
digitalWrite(luci_sala, LOW);
bot1.sendMessage(CHAT_ID_M, "ho acceso la luce di sala a tempo!", "");
bot.sendMessage(CHAT_ID, "Matteo ha acceso la luce di sala a tempo!", "");
}
else // se accesa
{
digitalWrite(luci_sala, HIGH);
delay(800);
digitalWrite(luci_sala, LOW); // spengo la luce
delay(800); // attendo
digitalWrite(luci_sala, HIGH);
delay(800);
digitalWrite(luci_sala, LOW); // riaccendo a tempo
bot1.sendMessage(CHAT_ID_M, "accesa luce sala a tempo!", "");
bot.sendMessage(CHAT_ID, "Matteo ha acceso la luce di sala a tempo!", "");
}
}
if (text == "/temperature")
{
String welcome = "Ecco le temperature di casa: \n\n";
welcome += "Temperatura sala = ";
welcome += temp_sala;
welcome += "\n";
welcome += "Umidità sala = ";
welcome += umid_sala;
welcome += "\n";
welcome += "Temperatura camera = ";
welcome += temp_camera;
welcome += "\n";
welcome += "Umidità camera = ";
welcome += umid_camera;
welcome += "\n";
welcome += "Temperatura esterna = ";
welcome += temp_esterna;
welcome += "\n";
welcome += "Umidità esterna = ";
welcome += umid_esterna;
welcome += "\n";
welcome += "Temperatura vano tecnico = ";
welcome += temp_vano;
welcome += "\n";
welcome += "Pressione barometrica = ";
welcome += p_baro;
bot1.sendMessage(CHAT_ID_M, welcome, "");
}
if (text == "/vedi")
{
String welcome = "Ecco i dati richiesti: \n\n";
welcome += "PIR cima strada = ";
welcome += conta_pir_cima_strada;
welcome += "\n";
welcome += "PIR strada camera = ";
welcome += conta_pir_strada;
welcome += "\n";
welcome += "PIR davanti porta ingr. = ";
welcome += conta_pir_porta;
welcome += "\n";
welcome += "Barriera cancello = ";
welcome += conta_barr_canc;
welcome += "\n";
welcome += "Barriera officina = ";
welcome += conta_barr_off;
welcome += "\n";
if (bitRead (STATI1, 6) == 0) // leggo il bit della porta ingr
{
welcome += "Porta ingresso APERTA ";
}
else
{
welcome += "Porta ingresso chiusa ";
}
welcome += conta_porta_ingr;
welcome += "\n";
if (bitRead (STATI1, 5) == 0) // leggo il bit del portone off
{
welcome += "Portone officina APERTO ";
}
else
{
welcome += "Portone officina chiuso ";
}
welcome += conta_portone;
welcome += "\n";
if (bitRead (STATI1, 4) == 0) // leggo il bit della porta interna off
{
welcome += "Porta interna off APERTA ";
}
else
{
welcome += "Porta interna off chiusa ";
}
welcome += conta_porta_off;
welcome += "\n";
if (bitRead (STATI1, 7) == 0) // leggo il bit del canc aperto
{
welcome += "Cancello principale APERTO ";
}
else
{
welcome += "Cancello principale chiuso ";
}
welcome += conta_canc_princ;
welcome += "\n";
if (bitRead (STATI1, 3) == 0) // leggo il bit del canc salt aperto
{
welcome += "Cancello salt APERTO ";
}
else
{
welcome += "Cancello salt chiuso ";
}
welcome += conta_canc_salt;
bot1.sendMessage(CHAT_ID_M, welcome, "");
}
if (text == "/stati")
{
String welcome = "Ecco i dati richiesti: \n\n";
welcome += "Tensione batteria = ";
welcome += vbatt;
welcome += "\n";
if (bitRead (STATI, 0) == 1) // leggo il bit del crepuscolare
{
welcome += "Il crepuscolare vede NOTTE";
}
else
{
welcome += "Il crepuscolare vede giorno";
}
welcome += "\n";
if (bitRead (ERRORI2, 4) == 1) // leggo il bit della 220, a 1 se c'è
{
welcome += "Rete 220 presente";
}
else
{
welcome += "Mancanza rete 220V";
}
welcome += "\n";
if (bitRead (ERRORI2, 3) == 1) // leggo il bit della pompa acqua
{
welcome += "Pompa acqua ACCESA";
}
else
{
welcome += "Pompa acqua spenta";
}
welcome += "\n";
if (bitRead (STATI, 2) == 1) // leggo il bit dell'antifurto
{
welcome += "Antifurto ATTIVO";
}
else
{
welcome += "Antifurto non attivo";
}
welcome += "\n";
if (bitRead (STATI, 7) == 1) // leggo il bit della luce fuori
{
welcome += "Luci esterne davanti ACCESE";
}
else
{
welcome += "Luci esterne davanti spente";
}
welcome += "\n";
if (bitRead (STATI, 6) == 1) // leggo il bit della luce fuori
{
welcome += "Luci esterne dietro ACCESE";
}
else
{
welcome += "Luci esterne dietro spente";
}
welcome += "\n";
if (bitRead (STATI, 5) == 1) // leggo il bit della luce fuori
{
welcome += "Luci esterne camera ACCESE";
}
else
{
welcome += "Luci esterne camera spente";
}
welcome += "\n";
if (bitRead (STATI, 4) == 1) // leggo il bit della luce fuori
{
welcome += "Luci esterne porta ACCESE";
}
else
{
welcome += "Luci esterne porta spente";
}
welcome += "\n";
if (bitRead (STATI, 3) == 1) // leggo il bit della luce fuori
{
welcome += "Luci esterne campo ACCESE";
}
else
{
welcome += "Luci esterne campo spente";
}
welcome += "\n";
if (bitRead (ERRORI2, 6) == 1) // leggo il bit della luce sala
{
welcome += "Luci sala ACCESE";
}
else
{
welcome += "Luci sala spente";
}
welcome += "\n";
if (bitRead (ERRORI2, 5) == 1) // leggo il bit della luce officina
{
welcome += "Luci officina ACCESE";
}
else
{
welcome += "Luci officina spente";
}
bot1.sendMessage(CHAT_ID_M, welcome, "");
bot.sendMessage(CHAT_ID, "Matteo ha guardato gli stati", "");
}
if (text == "/ciao")
{
bot1.sendMessage(CHAT_ID_M, "Ciao Matteo, come posso aiutarti ?", "");
}
if (text == "/stato")
{
if (digitalRead(caldaia))
{
bot1.sendMessage(CHAT_ID_M, "la caldaia è accesa!", "");
}
else
{
bot1.sendMessage(CHAT_ID_M, "la caldaia è spenta!", "");
}
if (digitalRead(on_lan))
{
bot1.sendMessage(CHAT_ID_M, "il DVR è collegato in rete!", "");
}
else
{
bot1.sendMessage(CHAT_ID_M, "il DVR non è connesso alla rete!", "");
}
}
}
}
//********************************************************************
void leggi() // leggo la seriale
{
conta = 0; // azzero contatore byte ricevuti
while (Serial2.available()) // svuota tutto il buffer
{
rx = Serial2.read(); // salva il byte letto da seriale
if (conta < 31)
{
lettura[conta] = rx; // memorizza max 31 byte
}
conta++; // ma conta tutti i byte ricevuti
}
if (conta == 31) // se ricevuti esattamente 31
{
// ****** converto i 2 byte in un intero ********
t_sala = lettura[1] * 256 + lettura[0]; // 1° byte H, 2° byte L
u_sala = lettura[3] * 256 + lettura[2];
t_camera = lettura[5] * 256 + lettura[4];
u_camera = lettura[7] * 256 + lettura[6];
t_esterna = lettura[9] * 256 + lettura[8];
u_esterna = lettura[11] * 256 + lettura[10];
t_vano = lettura[13] * 256 + lettura[12];
p_baro = lettura[15] * 256 + lettura[14];
volbatt = lettura[16];
NEW_ERRORI1 = lettura[17];
NEW_ERRORI2 = lettura[18];
NEW_STATI = lettura[19];
NEW_STATI1 = lettura[20];
conta_porta_ingr = lettura[21];
conta_portone = lettura[22];
conta_porta_off = lettura[23];
conta_canc_princ = lettura[24];
conta_canc_salt = lettura[25];
conta_barr_off = lettura[26];
conta_barr_canc = lettura[27];
conta_pir_porta = lettura[28];
conta_pir_strada = lettura[29];
conta_pir_cima_strada = lettura[30];
vbatt = volbatt / 10.0; // divido per 10 per vedere la virgola
temp_sala = t_sala / 100.0; // divido per 100 e converto in float
umid_sala = u_sala / 100.0;
temp_camera = t_camera / 100.0;
umid_camera = u_camera / 100.0;
temp_esterna = t_esterna / 100.0;
umid_esterna = u_esterna / 100.0;
temp_vano = t_vano / 100.0;
if (NEW_ERRORI1 == ERRORI1 && NEW_ERRORI2 == ERRORI2 && NEW_STATI == STATI && NEW_STATI1 == STATI1)
{
non_aggiornare = true; // dico di non aggiornare il display
}
else
{
non_aggiornare = false; // dico di aggiornare il display
ERRORI1 = NEW_ERRORI1; // aggiorno le variabili
ERRORI2 = NEW_ERRORI2;
STATI = NEW_STATI;
STATI1 = NEW_STATI1;
}
}
}
//********************************************************************
void controllo() // verifico se c'è un allarme
{
if (conta_porta_ingr != old_conta_porta_ingr) // contr porta ingresso
{
String welcome = "Si è verificato un allarme a casa: \n\n";
welcome += "apertura porta ingresso n.";
welcome += conta_porta_ingr;
bot.sendMessage(CHAT_ID, welcome, "");
bot1.sendMessage(CHAT_ID_M, welcome, "");
old_conta_porta_ingr = conta_porta_ingr; // salvo il nuovo valore
}
if (conta_porta_off != old_conta_porta_off) // contr porta officina
{
String welcome = "Si è verificato un allarme a casa: \n\n";
welcome += "apertura porta interna officina n.";
welcome += conta_porta_off;
bot.sendMessage(CHAT_ID, welcome, "");
bot1.sendMessage(CHAT_ID_M, welcome, "");
old_conta_porta_off = conta_porta_off; // salvo il nuovo valore
}
if (conta_portone != old_conta_portone) // contr portone officina
{
String welcome = "Si è verificato un allarme a casa: \n\n";
welcome += "apertura portone officina n.";
welcome += conta_portone;
bot.sendMessage(CHAT_ID, welcome, "");
bot1.sendMessage(CHAT_ID_M, welcome, "");
old_conta_portone = conta_portone; // salvo il nuovo valore
}
if (conta_canc_princ != old_conta_canc_princ) // contr cancello princ
{
String welcome = "Si è verificato un allarme a casa: \n\n";
welcome += "apertura cancello n.";
welcome += conta_canc_princ;
bot.sendMessage(CHAT_ID, welcome, "");
bot1.sendMessage(CHAT_ID_M, welcome, "");
old_conta_canc_princ = conta_canc_princ; // salvo il nuovo valore
}
if (conta_canc_salt != old_conta_canc_salt) // contr cancello salt
{
String welcome = "Si è verificato un allarme a casa: \n\n";
welcome += "apertura cancello SALT n.";
welcome += conta_canc_salt;
bot.sendMessage(CHAT_ID, welcome, "");
bot1.sendMessage(CHAT_ID_M, welcome, "");
old_conta_canc_salt = conta_canc_salt; // salvo il nuovo valore
}
if (conta_barr_canc != old_conta_barr_canc) // contr barriera cancello
{
String welcome = "Si è verificato un allarme a casa: \n\n";
welcome += "barriera cancello n.";
welcome += conta_barr_canc;
bot.sendMessage(CHAT_ID, welcome, "");
bot1.sendMessage(CHAT_ID_M, welcome, "");
old_conta_barr_canc = conta_barr_canc; // salvo il nuovo valore
}
if (conta_barr_off != old_conta_barr_off) // contr barriera officina
{
String welcome = "Si è verificato un allarme a casa: \n\n";
welcome += "barriera officina n.";
welcome += conta_barr_off;
bot.sendMessage(CHAT_ID, welcome, "");
bot1.sendMessage(CHAT_ID_M, welcome, "");
old_conta_barr_off = conta_barr_off; // salvo il nuovo valore
}
if (conta_pir_porta != old_conta_pir_porta) // contr pir davanti porta
{
String welcome = "Si è verificato un allarme a casa: \n\n";
welcome += "PIR davanti porta n.";
welcome += conta_pir_porta;
bot.sendMessage(CHAT_ID, welcome, "");
bot1.sendMessage(CHAT_ID_M, welcome, "");
old_conta_pir_porta = conta_pir_porta; // salvo il nuovo valore
}
if (conta_pir_strada != old_conta_pir_strada) // contr barriera davanti camera
{
String welcome = "Si è verificato un allarme a casa: \n\n";
welcome += "barriera strada n.";
welcome += conta_pir_strada;
bot.sendMessage(CHAT_ID, welcome, "");
bot1.sendMessage(CHAT_ID_M, welcome, "");
old_conta_pir_strada = conta_pir_strada; // salvo il nuovo valore
}
if (conta_pir_cima_strada != old_conta_pir_cima_strada) // contr barriera cima strada
{
String welcome = "Si è verificato un allarme a casa: \n\n";
welcome += "barriera in cima alla strada n.";
welcome += conta_pir_cima_strada;
bot.sendMessage(CHAT_ID, welcome, "");
bot1.sendMessage(CHAT_ID_M, welcome, "");
old_conta_pir_cima_strada = conta_pir_cima_strada; // salvo il nuovo valore
}
}
//********************************************************************
void aggiorna_stati() // aggiorna tutti gli stati a zero
{
old_conta_pir_cima_strada = 0;
old_conta_pir_strada = 0;
old_conta_pir_porta = 0;
old_conta_barr_off = 0;
old_conta_barr_canc = 0;
old_conta_canc_salt = 0;
old_conta_canc_princ = 0;
old_conta_portone = 0;
old_conta_porta_off = 0;
old_conta_porta_ingr = 0;
conta_pir_cima_strada = 0;
conta_pir_strada = 0;
conta_pir_porta = 0;
conta_barr_off = 0;
conta_barr_canc = 0;
conta_canc_salt = 0;
conta_canc_princ = 0;
conta_portone = 0;
conta_porta_off = 0;
conta_porta_ingr = 0;
}