Innholdsfortegnelse:

Raspberry Pi -kontrollert romtemperaturovervåking med Gnuplot -bildeutgang og e -postvarsel: 7 trinn
Raspberry Pi -kontrollert romtemperaturovervåking med Gnuplot -bildeutgang og e -postvarsel: 7 trinn

Video: Raspberry Pi -kontrollert romtemperaturovervåking med Gnuplot -bildeutgang og e -postvarsel: 7 trinn

Video: Raspberry Pi -kontrollert romtemperaturovervåking med Gnuplot -bildeutgang og e -postvarsel: 7 trinn
Video: Первый взгляд на Raspberry Pi 5. Тест Памяти и CPU. Установка Home Assistant Operation System. 2024, Juni
Anonim
Raspberry Pi -kontrollert romtemperaturovervåking med Gnuplot -bildeutgang og e -postvarsel
Raspberry Pi -kontrollert romtemperaturovervåking med Gnuplot -bildeutgang og e -postvarsel

Der jeg jobber, er det et veldig viktig rom som inneholder mange datamaskiner. Omgivelsestemperaturen i dette rommet må være veldig kul for å optimalisere ytelsen til disse systemene. Jeg ble bedt om å komme med et overvåkingssystem som har muligheten til å sende en form for varsling til noen få personer som vil varsle dem om at noe er galt med klimaanlegget i det rommet. Maskinvaren for denne bygningen brukte jeg Raspberry pi og en USB temperatur- og fuktighetssensor. For overvåking brukte jeg Gnuplot til å plotte tre temperaturgrafer og lage et bilde av disse grafene. Jeg opprettet deretter en dedikert HTML -side som vil være plassert på Raspberry pi, slik at de nåværende forholdene, disse gnuplot -utdatabildene, kan overvåkes fra en webside i nettverket vårt. For varsling valgte jeg å gå med Gmail. Jeg hadde funnet noen eksempler på kode i et Linux -brukermagasin. (Selvfølgelig kan du bruke hvilken som helst e -postserver når du kjenner de nødvendige portoppgavene.) Til det opprettet jeg en dedikert Gmail -e -postkonto for disse varslene. Også som en tilleggsfunksjon, når et varsel er utløst, legger jeg ved en graf til e -posten slik at personen som mottar e -posten kan få en ide om hvor drastisk en økning det har forårsaket varselet.

Trinn 1: Maskinvareoppsettet

Maskinvareoppsettet
Maskinvareoppsettet

Det er ikke mye å sette opp maskinvaren. Raspberry pi kjører Raspian, og USB -temperatursensoren kobles rett og slett direkte til en av USB -portene. Strømforbruket til denne sensoren er minimalt, og som et resultat drev jeg den direkte fra Raspberry pi. Men for USB -drevne enheter med litt mer strømforbruk, vil jeg anbefale å drive dem via en drevet USB -hub og ikke direkte fra Raspberry pi's USB -port. Når temperatursensoren er slått på, gir den en seriell streng som inneholder temperaturen og fuktighetsavlesninger av de nåværende forholdene. temperatur = 20,9 ° C fuktighet = 62,7% duggpunkt = 13,0 ° CA python -skript analyserer denne strengen og lagrer temperatur- og fuktighetsverdiene i tre tekstfiler hvert femte minutt; en daglig, 24 timer og 48 timer tekstfiler (Forskjellene vil bli diskutert senere i HTML -delen). Fra disse filene vil Gnuplot generere grafene og deretter bildene av datasettet i hver fil. Før jeg diskuterer python -skriptet, vil jeg snakke om å forberede Raspberry pi. Siden overvåkingen skal gjøres online, må en webserver installeres. Jeg har prøvd noen av dem i min tid på Raspberry pi, men selv om det er litt stort, foretrekker jeg Apache. For å installere Apache på din Raspberry pi skriver du ganske enkelt: sudo apt-get install apache2 Det vil gi deg en melding før den installeres, trykk "y" for ja og og Apache vil bli installert noen minutter, avhengig av din bringebær pi. Når det er gjort er ferdig, må du installere to python-plug-ins: python-serial og python-gnuplot-pluggen. (Selv om jeg har innsett at de siste versjonene av Raspian har python-seriell plug-in-standarden, men bare for å være trygg.) For å installere de du skriver: sudo apt-get install python-serial python-gnuplotNår du har godkjent meldingene igjen, plugger disse pluggene -ins vil bli installert. Og med det er maskinvareoppsettet fullført.

Trinn 2: Programvareoppsett - E -postoppsett og mottakere

opprett e -postadresse Før vi kommer for langt inn i programvaren nå, ville det være et godt tidspunkt å opprette en Gmail -konto for å sende e -postvarsler fra. (Dette eksemplet bruker GMail, men hvilken som helst e -postserver kan brukes når vi kjenner smtp -portinnstillingene) Python -koden er ganske rett frem, men importen som trengs er kritisk. Uten dem ville ingenting fungert. Fra tid import *import tid import seriell import smtplib import Gnuplot import os import sys Endelig adresselisten. Selvfølgelig må vi legge til mottakerne av e -posten. Hver e -postadresse lagres i en variable.from_address = '[email protected]'to_address1 =' recipient1.mail.com 'to_address2 =' recipient2.mail.com'username = '[email protected]' password = 'custom_email_password'

Trinn 3: Programvareoppsett - Serielt oppsett og analyse

Deretter ser vi på det serielle oppsettet. Det er bare å sette opp parametere som samsvarer med seriell utgang fra sensoren. Sensoren sender ut en seriell streng på 9600 8 N 1 som er et standardformat. Etter at strengen er mottatt, er det flere måter å analysere denne strengen i python og muligens mer pålitelig. Måten jeg gjør det på er å lete etter "temp" -tegnene i seriestrengen. Når det er funnet, er det bare å lese de neste 46 serielle tegnene i en streng. Den innsamlede strengen kan nå adresseres som elementer i en matrise. Ønskede data blir analysert fra strengen og lagret i de tre filene sammen med tilhørende tidsstempel. Tidsstempel = strftime ("%d%b%Y%H:%M:%S", localtime ())

Trinn 4: Programvareoppsett - Gnuplot

Programvareoppsett - Gnuplot
Programvareoppsett - Gnuplot
Programvareoppsett - Gnuplot
Programvareoppsett - Gnuplot
Programvareoppsett - Gnuplot
Programvareoppsett - Gnuplot

Gnuplot er et kommandolinje grafisk verktøy. Når du har funnet ut det grunnleggende kan det være et ganske kraftig verktøy for grafisk visning av datasett. Gnuplot kan plotte direkte fra en formatert tekstfil, og vi har tilfeldigvis en fra analysetrinnet før. Når vi angir for gnuplot hvor i filen dataene er plassert, kan vi plotte de ønskede verdiene. Jeg kommer til å bruke tid på X -aksen og temperaturen vår på Y -aksen. Det er vanskeligst å planlegge tid fra min erfaring, ettersom du må få tidsformatet i gnuplot til å stemme overens med formatet på tekstfilen. Etter at alle grafalternativene er fullstendige og du foretrekker det, kan Gnuplot deretter lage et bilde av denne grafen. Dette vil være bildet som vi vil bruke på nettsiden vår senere. Jeg valgte å gå med et-p.webp

Trinn 5: Programvareoppsett - Terskelinnstilling og e -post

Terskelen for varslingen må gjøres ved prøving og feiling for oppsettet ditt. rommet som huser systemene har ingen vinduer, så når klimaanlegget stopper kan det bli veldig varmt veldig fort. I utgangspunktet så jeg på datasettet i noen dager og så på temperaturvariasjonene før jeg bestemte meg for varselverdien på 30 grader C. Dette er angitt som en variabel i pythonscipt. Dette virker kanskje ikke veldig høyt, men når varselet er utløst, vil du fortsatt gi deg tid til å rette opp problemet før det blir kritisk.

For enkelhets skyld sender jeg individuelle e -poster til adresselisten. Siden adresselisten er kort, gidder jeg aldri å sende en e -post til flere mottakere. En ting å merke seg her, siden jeg kjører dette skriptet som en cron -jobb hvert 5. minutt, vil du ikke sende e -post hvert 5. minutt når terskelen er utløst. For å komme rundt dette skriver jeg datoen og klokkeslettet for varselet til en fil og sjekker denne filen før jeg sender e -post for å se om systemet allerede er i en varslingstilstand. Når den er i en varslingstilstand, sender den bare en e -post på nytt hver time etter den første utløseren så lenge systemet er i og varslingstilstand. På den måten blokkerer Gmail ikke e -posten din fra å sende for mange e -poster på kort tid.

Trinn 6: Programvareoppsett - HTML

Overvåking av hele systemet gjøres via en webside, og et veldig grunnleggende html -skript er nødvendig for dette. Bildene som Gnuplot laget, bruker jeg ganske enkelt de samme dimensjonene på bildet. Jeg tror jeg gikk gjennom omtrent 3 størrelser for disse bildene som ga best passform på skjermen min. Før vi lager html -skriptet, la oss lage en mappe for det. Som standard ligger webhotellmappen på/var/www/. Selv om denne Raspberry pi 'eneste hensikten er å overvåke dette rommet og utstede e -postvarsler, opprettet jeg en egen mappe i mappen/var/www/for god husholdning. Siden denne mappen tilhører rotbrukeren, må du bruke sudo for å lage en mappe. sudo mkdir/var/www/temperatureI dette eksemplet brukte jeg temperatur som navn på mappen, men du kan bruke et hvilket som helst navn her, men husk, da dette må skrives inn i adresselinjen for å se denne siden. Denne banen er lagret i en variabel i python -skriptet. Selv om vertsstedet må endres eller skriptet må endres for et annet system, kan det bare endres fra dette ene stedet. Nå kan vi lage vårt HTML -skript i denne mappen og huske å bruke sudo foran alle kommandoer du ønsker å utføre her. Jeg vil anbefale deg å navngi html -skriptet "index.html", da dette ville forenkle dette når du prøver å finne denne siden. Det kritiske er å sørge for at bildestørrelsen er den samme som bildestørrelsen fra Gnuplot. For å se denne siden, du må bare skrive inn IP -adressen til Raspberry Pi etterfulgt av /temperatur (eller hva du noengav mappen din) Jeg har flere systemer på jobb som overvåker forskjellige ting, og de produserer alle noen grafiske resultater av resultatene. Så jeg opprettet en side som har lenker til alle disse sidene, slik at jeg ikke trenger å bekymre meg for å skrive inn adressen hver gang jeg vil ha tilgang til disse sidene.

Trinn 7: Jeg lever …

Jeg har brukt dette til å overvåke temperaturen i et datarom, men dette kunne ha vært ganske mye data fra hvilken som helst kilde. Når den kan lagres i en tekstfil og du vet at den er i formatet, kan Gnuplot gjøre resten. En ting jeg nylig har lagt til i dette prosjektet er å sende en slags "heartbeat" e -post. Det er den første i måneden kl. 09.00. Jeg har et skript som kjører som sender e -postlisten for å fortelle dem at systemet kjører som det skal, og alt er bra i rommet.

Bruke cronjob -listen som:

Anbefalt: