Indholdsfortegnelse:

Raspberry Pi -kontrolleret rumtemperaturovervågning med Gnuplot -billedoutput og e -mailalarm: 7 trin
Raspberry Pi -kontrolleret rumtemperaturovervågning med Gnuplot -billedoutput og e -mailalarm: 7 trin

Video: Raspberry Pi -kontrolleret rumtemperaturovervågning med Gnuplot -billedoutput og e -mailalarm: 7 trin

Video: Raspberry Pi -kontrolleret rumtemperaturovervågning med Gnuplot -billedoutput og e -mailalarm: 7 trin
Video: SCP-261 Пан-мерное Торговый и эксперимент Войти 261 объявление Де + полный + 2024, December
Anonim
Raspberry Pi kontrolleret rumtemperaturovervågning med Gnuplot -billedoutput og e -mailalarm
Raspberry Pi kontrolleret rumtemperaturovervågning med Gnuplot -billedoutput og e -mailalarm

Hvor jeg arbejder, er der et meget vigtigt rum, der rummer masser af computere. Rumtemperaturen i dette rum skal være meget kølig for at optimere ydeevnen af disse systemer. Jeg blev bedt om at komme med et overvågningssystem, der har mulighed for at sende en form for advarsel til et par mennesker, der vil give dem besked om, at der er noget galt med klimaanlægget i det pågældende rum. Hardwaren til denne build, jeg brugte Raspberry pi og en USB temperatur- og fugtighedsføler. Til overvågning brugte jeg Gnuplot til at plotte tre temperaturgrafer og oprette et billede af disse grafer. Jeg oprettede derefter en dedikeret HTML -side, der vil blive hostet på Raspberry pi, så de nuværende betingelser, disse gnuplot -outputbilleder, kan overvåges fra en webside i vores netværk. Til advarsel valgte jeg at gå med Gmail. Jeg havde fundet en eksempelkode i et Linux -brugermagasin. (Selvfølgelig kan du bruge en hvilken som helst mailserver, når du kender de nødvendige portopgaver.) Til det oprettede jeg en dedikeret Gmail -e -mail -konto til disse advarsler. Også som en ekstra funktion, når en advarsel er blevet udløst, vedhæfter jeg en graf til e -mailen, så den person, der modtager e -mailen, kan få en idé om, hvor drastisk en stigning det var, der har forårsaget advarslen.

Trin 1: Hardwareopsætningen

Hardwareopsætningen
Hardwareopsætningen

Der er ikke meget at opsætte hardwaren. Raspberry pi kører Raspian, og USB -temperatursensoren tilsluttes ganske enkelt direkte til en af USB -portene. Strømforbruget til denne sensor er minimalt, og som et resultat drev jeg den direkte fra Raspberry pi. Men for USB -drevne enheder med lidt mere strømforbrug, vil jeg anbefale at drive dem via en drevet USB -hub og ikke direkte fra Raspberry pi's USB -port. Når temperatursensoren er tændt, giver den en seriel streng, der indeholder temperaturen og fugtighedsmålinger af de aktuelle forhold. temperatur = 20,9 ° C fugtighed = 62,7% dugpunkt = 13,0 ° CA python -script analyserer denne streng og gemmer temperatur- og fugtighedsværdierne i tre tekstfiler hvert femte minut; en daglig, 24 timer og 48 timer tekstfiler (Forskellene vil blive diskuteret senere i HTML -sektionen). Fra disse filer vil Gnuplot generere graferne og efterfølgende billederne af datasættet i hver fil. Inden jeg diskuterer python -scriptet, vil jeg tale om at forberede Raspberry pi. Da overvågningen skal udføres online, skal der installeres en webserver. Jeg har prøvet et par af dem i min tid på Raspberry pi, men selvom det er lidt stort, foretrækker jeg Apache. For at installere Apache på din Raspberry pi skriver du blot: sudo apt-get install apache2 Det giver dig en prompt, før den installeres, tryk på "y" for ja, og og Apache installeres et par minutter afhængigt af din Raspberry pi. Når det er udført, skal du installere to python-plug-ins: python-serial og python-gnuplot-stikket. (Selvom jeg har indset, at nylige Raspian-builds har python-seriel plug-in-standarden, men bare for at være sikker.) For at installere dem, du skriver: sudo apt-get install python-serial python-gnuplotNår du igen har anerkendt prompterne, plugger disse stik -ins installeres. Og dermed er hardwareopsætningen fuldført.

Trin 2: Softwareopsætning - E -mailopsætning og modtagere

oprette e -mail -adresse Inden vi kommer for langt ind i softwaren nu, ville det være et godt tidspunkt at oprette en Gmail -konto til at sende dine e -mailadvarsler fra. (Dette eksempel bruger GMail, men enhver mailserver kan bruges, når vi kender smtp -portindstillingerne) Python -koden er ret ligetil, men den nødvendige import er kritisk. Uden dem ville intet fungere. Fra tid import *import tid import seriel import smtplib import Gnuplot import os import sys Endelig postliste. Selvfølgelig skal vi tilføje modtagerne af e -mailen. Hver e -mail -adresse gemmes i en variable.from_address ='[email protected]'to_address1 = 'recipient1.mail.com' to_address2 = 'recipient2.mail.com'username =' [email protected] 'password =' custom_email_password '

Trin 3: Softwareopsætning - Seriel opsætning og analyse

Dernæst ser vi på den serielle opsætning. Det er bare et spørgsmål om at opsætte parametre, der matcher det serielle output fra sensoren. Sensoren udsender en seriel streng ved 9600 8 N 1, som er et standardformat. Efter at strengen er blevet modtaget, er der flere måder at analysere denne streng i python og muligvis mere pålideligt. Måden jeg gør det på er at lede efter "temp" -tegnene i seriestrengen. Når det er fundet, er det simpelthen et spørgsmål om at læse de næste 46 serielle tegn ind i en streng. Den indsamlede streng kan nu adresseres som elementer i en matrix. De ønskede data parses ud fra strengen og gemmes i de tre filer sammen med det tilhørende tidsstempel.timestamp = strftime ("%d%b%Y%H:%M:%S", localtime ())

Trin 4: Softwareopsætning - Gnuplot

Softwareopsætning - Gnuplot
Softwareopsætning - Gnuplot
Softwareopsætning - Gnuplot
Softwareopsætning - Gnuplot
Softwareopsætning - Gnuplot
Softwareopsætning - Gnuplot

Gnuplot er et grafisk værktøj til kommandolinjen. Når du har fundet ud af det grundlæggende, kan det være et ret kraftfuldt værktøj til grafisk visning af datasæt. Gnuplot kan plotte direkte fra en formateret tekstfil, og vi har tilfældigvis en fra analysetrinet før. Når vi angiver for gnuplot, hvor i filen dataene er placeret, kan vi plotte de ønskede værdier. Jeg vil bruge tiden på X -aksen og vores temperatur på Y -aksen. Det er det sværeste at planlægge tid ud fra min erfaring, da du er nødt til at få tidsformatet i gnuplot til at matche tekstfilens format. Dette er det billede, vi senere vil bruge på vores webside. Jeg valgte at gå med et-p.webp

Trin 5: Softwareopsætning - Tærskelindstilling og e -mail

Tærsklen for advarslen skal udføres ved forsøg og fejl i din opsætning. rummet, der huser systemerne, har ingen vinduer, så når klimaanlægget stopper, kan det blive meget varmt meget hurtigt. Oprindeligt kiggede jeg på datasættet i et par dage og så variationerne i temperatur, før jeg besluttede alarmværdien på 30 grader C. Dette er indstillet som en variabel inden for python scipt. Dette virker måske ikke særlig højt, men når advarslen er udløst, vil du stadig give dig tid til at rette op på problemet, før det bliver kritisk.

For enkelheds skyld sender jeg individuelle e -mails til mailinglisten. Da mailinglisten er kort, gider jeg aldrig sende en e -mail til flere modtagere. En ting at bemærke her, da jeg kører dette script som et cron -job hvert 5. minut, vil du ikke sende e -mails hvert 5. minut, når tærsklen er udløst. For at komme uden om dette skriver jeg datoen og klokkeslættet for advarslen til en fil og kontrollerer denne fil, før jeg sender nogen e -mails for at se, om systemet allerede er i en alarmtilstand. Når den er i en advarselstilstand, sender den kun en e -mail igen hver time efter den første trigger, så længe systemet er i og alarmtilstand. På den måde blokerer Gmail ikke din e -mail fra at sende for mange e -mails på kort tid.

Trin 6: Softwareopsætning - HTML

Overvågningen af hele systemet sker via en webside, og et meget grundlæggende html -script er nødvendigt til dette. De billeder, som Gnuplot skabte, bruger jeg ganske enkelt de samme dimensioner af billedet tilbage. Jeg tror, jeg har gennemgået omkring 3 størrelser for disse billeder, som gav den bedste pasform på min skærm. Inden vi opretter html -scriptet, lad os oprette en mappe til det. Som standard er webhostemappen placeret på/var/www/. Selvom dette hindbær pi 'eneste formål er at overvåge dette værelse og udsende e -mail -advarsler, oprettede jeg for god husholdning en separat mappe i mappen/var/www/. Da denne mappe tilhører rodbrugeren, skal du bruge sudo til at oprette en mappe, og denne placering er. sudo mkdir/var/www/temperature I dette eksempel brugte jeg temperatur som navnet på mappen, men du kan bruge et hvilket som helst navn her, men husk, da dette skal indtastes i adresselinjen for at se denne side. Denne sti er gemt i en variabel i python -scriptet. Selvom hostingplaceringen skal ændres, eller scriptet skal ændres til et andet system, kan det bare ændres fra dette ene sted. Nu kan vi oprette vores html -script i denne mappe og huske at bruge sudo foran alle kommandoer, du vil eksekvere herinde. Jeg vil anbefale dig at navngive html -scriptet "index.html", da dette ville forenkle dette, når du forsøger at finde denne side. Det afgørende er at sikre, at billedstørrelsen er den samme som billedstørrelsen fra Gnuplot. For at se denne side, du er simpelthen nødt til at indtaste IP -adressen på Raspberry Pi efterfulgt af /temperatur (eller hvad du nogensinde har navngivet din mappe) Jeg har flere systemer på arbejde, der overvåger forskellige ting, og de producerer alle nogle grafiske output af deres resultater. Så jeg oprettede en side, der har links til alle disse sider, så jeg ikke skal bekymre mig om at indtaste adressen hver gang, jeg vil have adgang til disse sider.

Trin 7: Jeg lever …

Jeg har brugt dette til at overvåge temperaturen i et computerrum, men dette kunne have været stort set data fra enhver kilde. Når det kan gemmes i en tekstfil, og du ved, at det er format, kan Gnuplot klare resten. En ting, jeg for nylig tilføjede til dette projekt, er at sende en slags "hjerteslag" -email. Det er den første i måneden kl. 9, jeg har et script, der kører, der sender mailinglisten med e -mail for at fortælle dem, at systemet kører som det skal, og alt er godt i rummet.

Brug af cronjob -listen som:

Anbefalede: