duinozone.cz - Arduino a Raspberry fórum

Autor Téma: Notifikátor udalostí cez mikrokontróler  (Přečteno 466 krát)

Offline martinius96

  • Bastlíř začátečník
  • *
  • Příspěvků: 26
Notifikátor udalostí cez mikrokontróler
« kdy: Únor 23, 2019, 00:25:45 dopoledne »
Dnes v krátosti predstavím notifikátor udalostí, ktorý bol pôvodne navrhnutý už k existujúcim projektom. Jeho hlavnou úlohou bolo upozornenie na stavy a krízové situácie, ktoré počas behu systému nastali a vyžadujú pozornosť, alebo vyriešenie.  Upozornenia boli riešené odosielaním e-mailov s časovým obmedzením navoleným používateľom.

To vo výsledku znamená, že ak dôjde ku krízovej situácii, aby systém s každým pripojením mikrokontroléra neodosielal email cez .php stránku, je to ohraničené časovým intervalom - medzerou. V intervaloch (napr. každých 5 min, alebo iný navolený interval) je používateľ informovaný e-mailom na krízovú situáciu. Po prihlásení používateľa do systému sa už e-mailové notifikácie ďalej k tomu konkrétnemu problému neposielajú. V prípade, že je používateľ v systéme a nastane krízová situácia, e-mail sa odošle minimálne 1 krát pre prípad, ak by to prehliadol a pod.
Využitie je plánované hlavne pre tieto účely:
    Pohyb v noci okolo PIR senzora - vhodné pre areály, haly
    Senzor vytopenia - vhodné pre práčovne, byty
    Teplotné senzory - oznam pri mínusovej teplote - vhodné pre sady, kotolne
    Prekročenie vlhkosti, tlaku vzduchu - vhodné pre meteostanice
    Prekročenie otáčok motora - hall snímač s magnetom
    Prekročenie napätia/prúdu
    a ďalšie veličiny, ktoré je možné merať
Každý e-mail je možné odoslať s rôznymi informáciami. Napríklad stav batérie, opis problému, posledné hodnoty, aké riešenie sa vyžaduje a pod.

Systém je teda vhodný aj pre laikov a dokáže zabrániť väčšej katastrofe, napríklad pri vytopení v noci, mimo domu, pomôže s rýchlejšou reakciou na problém s možnosťou okamžitého vyriešenia - napríklad uzavretím solenoid ventilu pre vodu automaticky, nevyžaduje sa akcia od používateľa. O uzavretí môže byť používateľ taktiež notifikovaný. Súčasťou je aj webaplikácia, kde môže používateľ vidieť aj aktuálne hodnoty a po oprave problému vytopenia môže jedným klikom opäť dovoliť systému elektromagnetický ventil - solenoid otvoriť prostredníctvom relé.

Čo sa týka dátovej náročnosti, .php súbor, na ktorý sa mikrokontróler pripojí má do 1kB, podľa rozsiahlosti kódu. Je teda vhodný aj 3G router s dátovým balíkom nižších tried s použitím napríklad pre sady a iné exteriérové miesta, kde nie je wifi, či Ethernet. Mikrokontróler môže aj spať a v prípade nehodovej udalosti ho akcia na pine (napríklad pri vytopení dôjde k spojeniu kontaktov pre záznam) zobudí a mikrokontróler môže informovať o udalostiach. V spánku je možné pri mikrokontroléroch dostať odber rádovo v jednotkách µA, teda je systém možné prevádzkovať aj na batérie.

Arduino s Ethernet shieldom, respektíve modulom vie komunikovať po HTTP protokole. V prípade ESP8266 a ESP32 môžeme komunikovať aj po HTTPS protokole. ESP32 vyžaduje špecifickú konfiguráciu HTTPS spojenia na webserver, nakoľko sa vyžaduje Root CA certifikát daného webu v .pem formáte. GET, alebo POST parametrami je možné do .php súboru, ktorý odosiela mail vložiť aj hodnoty, ktoré budú súčasťou problému pre lepšiu identifikáciu problému.

Web časť projektu je univerzálna a vie sa na ňu napojiť akýkoľvek mikrokontróler či už po HTTP alebo HTTPS protokole. Pripojenie na webserver a na súbor, ktorý odošle e-mail môže vyzerať následovne (Arduino + Wiznet W5100 po HTTP):
Kód: [Vybrat]
#include <SPI.h>
#include <Ethernet.h>
#define Hostname "Arduino"   
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};   
char server[] = "www.mywebsite.com";     
IPAddress ip(192, 168, 1, 254); //IP adresa zo subnet rozsahu
EthernetClient client;   
void setup() {
 Serial.begin(9600);
}
 
void loop() {
   if (Ethernet.begin(mac) == 0) {   
    Serial.println("Chyba konfiguracie DHCP, nastavim manualnu IPv4");
    Ethernet.begin(mac, ip);                       
  } 


if (client.connect(server, 80)) {
    Serial.println("Pripojenie na webserver prebehlo uspesne..");
    client.print("GET /email.php");   //umiestnenie php scriptu na webserveri 
    client.println(" HTTP/1.1");             
    client.println("Host: www.mywebsite.com");
    client.println("Connection: close");   
    client.println();                       
 client.stop();   
 Serial.println("E-mail uspesne odoslany!");
  } else {                                         
    Serial.println("Pripojenie neuspesne");
  } 
delay(10000);
}
E-mail je možné odoslať prostredníctvom .php stránky cez SMTP server cez mail(); funkciu. V prípade, že neuvedieme odosielaciu e-mailovú adresu, e-mail sa odošle prostredníctvom sendmail_from parametra z nastavenia webservera (Apache / Nginx). Implementácia teda nie je zložitá.
Príklad:
Kód: [Vybrat]
<?php
$sprava
"Ahoj svet!";
$spravawordwrap($msg,70);
mail("adresaprijimatela@jehomail.com","Predmet spravy",$sprava);
?>

V prípade korektnosti nastavenia SMTP servera na vašich .php stránkach po spustení tohto e-mailu dostanete e-mail s textom Ahoj Svet! a zvoleným predmetom.
Vo frameworkových systémoch (Laravel, Symphony) sa stretneme skôr s použitím PHPMailer knižnice. E-mail je možné doplniť aj o obrázky, doplnkové info s detailným opisom problému. Cieľovú e-mailovú adresu treba na prichádzajúce e-maily s rovnakou správou od rovnakého odosiellateľa pripraviť, aby to nevyhodnocoval ako spam a tým pádom nenotifikoval používateľa. Špeciálne to platí pre G-mail a podobné služby s dobrou SPAM filtráciou.
O projekte je niečo spísané aj na mojom webe, ktorý môžete taktiež navštíviť, nájdete tam aj rôzne ďalšie realizované projekty cez Arduino, ESP dosky, devkity s použitím webových riešení: https://arduino.php5.sk/mailer.php