Inhoudsopgave:

Raspberry Pi gecontroleerde kamertemperatuurbewaking met Gnuplot-beelduitvoer en e-mailwaarschuwingsmogelijkheid - Ajarnpa
Raspberry Pi gecontroleerde kamertemperatuurbewaking met Gnuplot-beelduitvoer en e-mailwaarschuwingsmogelijkheid - Ajarnpa

Video: Raspberry Pi gecontroleerde kamertemperatuurbewaking met Gnuplot-beelduitvoer en e-mailwaarschuwingsmogelijkheid - Ajarnpa

Video: Raspberry Pi gecontroleerde kamertemperatuurbewaking met Gnuplot-beelduitvoer en e-mailwaarschuwingsmogelijkheid - Ajarnpa
Video: Raspberry Pi Pico for Robotics 2024, Juni-
Anonim
Raspberry Pi gecontroleerde kamertemperatuurbewaking met Gnuplot-beelduitvoer en e-mailwaarschuwingsmogelijkheid
Raspberry Pi gecontroleerde kamertemperatuurbewaking met Gnuplot-beelduitvoer en e-mailwaarschuwingsmogelijkheid

Waar ik werk, is er een zeer belangrijke ruimte waar veel computers staan. De omgevingstemperatuur van deze ruimte moet erg koel zijn om de prestaties van deze systemen te optimaliseren. Ik werd gevraagd om met een monitoringsysteem te komen dat de mogelijkheid heeft om een of andere vorm van waarschuwing te sturen naar een paar mensen die hen op de hoogte stellen dat er iets mis is met de airconditioning in die kamer. De hardware voor deze build, ik gebruikte Raspberry pi en een USB-temperatuur- en vochtigheidssensor. Voor monitoring heb ik Gnuplot gebruikt om drie temperatuurgrafieken te plotten en een afbeelding van die grafieken te maken. Ik heb toen een speciale HTML-pagina gemaakt die op de Raspberry pi wordt gehost, zodat de huidige omstandigheden, die gnuplot-uitvoerafbeeldingen, kunnen worden gecontroleerd vanaf een webpagina binnen ons netwerk. Voor waarschuwingen heb ik ervoor gekozen om met Gmail te gaan. Ik had een voorbeeldcode gevonden in een Linux User-magazine. (Natuurlijk kun je elke mailserver gebruiken als je eenmaal de benodigde poorttoewijzingen kent.) Daarvoor heb ik een speciaal Gmail-e-mailaccount gemaakt voor deze waarschuwingen. Ook als een toegevoegde functie, wanneer een waarschuwing is geactiveerd, voeg ik een grafiek toe aan de e-mail, zodat de persoon die de e-mail ontvangt een idee kan krijgen van hoe drastisch de toename was die de waarschuwing heeft veroorzaakt.

Stap 1: De hardware-installatie

De hardware-installatie
De hardware-installatie

Er komt niet veel bij kijken om de hardware in te stellen. De Raspberry pi draait Raspian en de USB-temperatuursensor kan eenvoudig rechtstreeks op een van de USB-poorten worden aangesloten. Het stroomverbruik van deze sensor is minimaal en daarom heb ik hem rechtstreeks vanuit de Raspberry pi gevoed. Echter, voor USB-aangedreven apparaten met een beetje meer stroomverbruik, raad ik aan ze via een aangedreven USB-hub van stroom te voorzien en niet rechtstreeks vanaf de USB-poort van de Raspberry pi. Zodra de temperatuursensor is ingeschakeld, levert deze een seriële reeks die de temperatuur en vochtigheidsmetingen van de huidige omstandigheden. temperatuur=20,9°C vochtigheid=62,7% dauwpunt=13.0°CA pythonscript ontleedt deze string en slaat de temperatuur- en vochtigheidswaarden om de vijf minuten op in drie tekstbestanden; een dagelijkse, 24 uur en 48 uur tekstbestanden (de verschillen zullen later in de HTML-sectie worden besproken). Uit deze bestanden genereert Gnuplot de grafieken en vervolgens de afbeeldingen van de dataset in elk bestand. Voordat ik het python-script bespreek, zal ik het hebben over het voorbereiden van de Raspberry pi. Omdat de monitoring online moet gebeuren, moet er een webserver worden geïnstalleerd. Ik heb er een paar geprobeerd in mijn tijd op de Raspberry pi, maar hoewel het een beetje groot is, geef ik de voorkeur aan Apache. Om Apache op uw Raspberry pi te installeren, typt u eenvoudig: sudo apt-get install apache2 Het zal u een prompt geven voordat het wordt geïnstalleerd, druk op "y" voor ja en Apache zal een paar minuten worden geïnstalleerd, afhankelijk van uw Raspberry pi. klaar is, moet u twee python-plug-ins installeren: python-serial en de python-gnuplot-plug. (Hoewel ik me realiseerde dat recente Raspian-builds de standaard voor python-seriële plug-in hebben, maar voor de zekerheid.) -ins worden geïnstalleerd. En daarmee is de hardware setup compleet.

Stap 2: Software instellen - E-mail instellen en ontvangers

maak een e-mailadres aan Voordat we te ver in de software gaan, is het nu een goed moment om een Gmail-account aan te maken om uw e-mailwaarschuwingen vanaf te verzenden. (Dit voorbeeld gebruikt GMail, maar elke mailserver kan worden gebruikt zodra we de smtp-poortinstellingen kennen) De python-code is vrij eenvoudig, maar de benodigde invoer is van cruciaal belang. Zonder hen zou niets werken.from time import *import time import seriële import smtplib import Gnuplot import os import sysEindelijk de mailinglijst. Natuurlijk moeten we de ontvangers van de e-mail toevoegen. Elk e-mailadres wordt opgeslagen in een variabele.from_address = '[email protected]'to_address1 = 'recipient1.mail.com' to_address2 = 'recipient2.mail.com'username = '[email protected]' password = 'custom_email_password'

Stap 3: Software-installatie - Seriële installatie en parsing

Vervolgens kijken we naar de seriële setup. Het is gewoon een kwestie van parameters instellen die overeenkomen met de seriële output van de sensor. De sensor voert een seriële string uit op 9600 8 N 1, wat een standaardformaat is. Nadat de string is ontvangen, zijn er verschillende manieren om deze string in python te ontleden en mogelijk betrouwbaarder. De manier waarop ik het doe, is door te zoeken naar de "tijdelijke" tekens in de seriële reeks. Eenmaal gelokaliseerd is het gewoon een kwestie van de volgende 46 seriële karakters in een string lezen. De verzamelde string kan nu worden geadresseerd als elementen in een array. De gewenste gegevens worden uit de tekenreeks geparseerd en opgeslagen in de drie bestanden samen met de bijbehorende tijdstempel.timestamp = strftime("%d%b%Y %H:%M:%S", localtime())

Stap 4: Software-installatie - Gnuplot

Software-installatie - Gnuplot
Software-installatie - Gnuplot
Software-installatie - Gnuplot
Software-installatie - Gnuplot
Software-installatie - Gnuplot
Software-installatie - Gnuplot

Gnuplot is een grafisch hulpmiddel voor de opdrachtregel. Als je eenmaal de basis hebt doorgrond, kan het een behoorlijk krachtig hulpmiddel zijn voor de grafische weergave van datasets. Gnuplot kan rechtstreeks plotten vanuit een opgemaakt tekstbestand en we hebben er toevallig een van de parseerstap ervoor. Zodra we aan gnuplot hebben aangegeven waar in het bestand de gegevens zich bevinden, kunnen we de gewenste waarden plotten. Ik ga de tijd op de X-as gebruiken en onze temperatuur op de Y-as. Mijn ervaring is dat het plotten van de tijd het moeilijkst is omdat je het tijdformaat in gnuplot moet krijgen om overeen te komen met het formaat van het tekstbestand. Nadat alle grafische opties zijn voltooid en naar jouw voorkeur, kan Gnuplot een afbeelding van deze grafiek maken. Dit is de afbeelding die we later op onze webpagina zullen gebruiken. Ik heb gekozen voor een.png-afbeelding en aangezien ik de oude afbeelding op de webpagina wil vervangen, heeft elke afbeelding dezelfde naam, zodat deze coderegel niet hoeft te veranderen. De instelling van de afbeeldingsgrootte is gekoppeld aan de optimalisatie van de HTML-pagina. Ik speelde eerst met standaardformaten en experimenteerde vervolgens om het beeld op mijn scherm te laten passen. Voor dit project sla ik geen oude afbeeldingen op, dus de fysieke grootte van het bestand in de opslag is geen belangrijke factor voor kostbare Raspberry pi-opslag. Hier is een codefragment om de daily.png-grafiekafbeelding te maken en op te slaan.g = Gnuplot. Gnuplot(debug=debug)g('cd "' + pad + '"')g('set xdata time')g('set timefmt "%d%b%Y %H:%M:%S"') g('set format x "%H:%M\n%d%b"') g('set title " Daily Current Temperature Display"') g('set key off') g('set grid') g('set xlabel "Time\nDate"') g('set yrange [15.0:35.0]') g('set ylabel " Temperature "') g('set datafile missing "NaN"') g('set terminal png-grootte 800, 400')g('set output "daily.png"')g('plot "daily.dat" met 1:($3) met regels')OPMERKING: De regel met de tekst g('set datafile ontbreekt "NaN"'), het doel van deze regel is om een lege ruimte in de plot te plotten. De variabele "NaN" wordt naar het bestand geschreven als het python-script iets vreemds detecteert voor een bepaalde meting of een seriële verzending. Zoals u kunt zien in de drie bovenstaande grafieken, geeft de daily-p.webp

Stap 5: Software-installatie - Drempelinstelling en e-mailen

De drempel voor de waarschuwing moet met vallen en opstaan voor uw installatie worden gedaan. de kamer waarin de systemen zijn ondergebracht, heeft geen ramen, dus zodra de airconditioning stopt, kan deze erg snel erg heet worden. In eerste instantie heb ik een paar dagen naar de dataset gekeken en de variaties in temperatuur bekeken voordat ik de waarschuwingswaarde van 30 graden C heb gekozen. Dit is ingesteld als een variabele binnen het python-script. Dit lijkt misschien niet erg hoog, maar als de waarschuwing eenmaal is geactiveerd, wilt u uzelf toch de tijd geven om het probleem op te lossen voordat het kritiek wordt.

Voor de eenvoud stuur ik individuele e-mails naar de mailinglijst. Omdat de mailinglijst kort is, heb ik nooit de moeite genomen om één e-mail naar meerdere ontvangers te sturen. Een ding om hier op te merken, aangezien ik dit script elke 5 minuten als een cron-taak uitvoer, wil je niet elke 5 minuten e-mails verzenden zodra de drempel is geactiveerd. Om dit te omzeilen, schrijf ik de datum en tijd van de waarschuwing naar een bestand en controleer ik dit bestand voordat ik e-mails verzend om te zien of het systeem al in een waarschuwingsstatus is. Eenmaal in een waarschuwingsstatus, zal het alleen elk uur na de eerste trigger opnieuw een e-mail verzenden zolang het systeem zich in de waarschuwingsstatus bevindt. Op die manier blokkeert Gmail uw e-mail niet om in korte tijd te veel e-mails te verzenden.

Stap 6: Software-installatie - HTML

De monitoring van het gehele systeem gebeurt via een webpagina en hiervoor is een heel basaal html-script nodig. De afbeeldingen die Gnuplot heeft gemaakt, gebruik ik gewoon dezelfde afmetingen van de afbeelding terug. Ik geloof dat ik ongeveer 3 formaten heb doorlopen voor deze afbeeldingen, wat de beste pasvorm op mijn scherm gaf. Voordat we het html-script maken, maken we er een map voor. Standaard bevindt de webhostingmap zich op /var/www/. Hoewel het enige doel van deze Raspberry pi is om deze kamer te bewaken en e-mailwaarschuwingen af te geven, heb ik voor een goede huishouding een aparte map gemaakt in de /var/www/ map. Aangezien deze map van de rootgebruiker is, moet je sudo gebruiken om een map op deze locatie te maken. sudo mkdir /var/www/temperature In dit voorbeeld heb ik temperatuur gebruikt als de naam van de map, maar je kunt hier elke naam gebruiken, maar onthoud dat deze in de adresbalk moet worden ingevoerd om deze pagina te bekijken. Dit pad wordt opgeslagen in een variabele in het python-script. Zelfs als de hostinglocatie moet worden gewijzigd of het script moet worden aangepast voor een ander systeem, kan het gewoon vanaf deze locatie worden gewijzigd. Nu kunnen we ons html-script in deze map maken en onthouden dat u sudo moet gebruiken voor alle opdrachten die u wil hier uitvoeren. Ik raad je aan om het html-script "index.html" te noemen, omdat dit dit zou vereenvoudigen wanneer je deze pagina probeert te vinden. Het belangrijkste is om ervoor te zorgen dat de afbeeldingsgrootte gelijk is aan de afbeeldingsgrootte van Gnuplot. Om deze pagina te bekijken, je hoeft alleen maar het IP-adres van de Raspberry Pi in te voeren gevolgd door /temperatuur (of hoe je je map ook hebt genoemd). Ik heb verschillende systemen aan het werk die verschillende dingen bewaken en ze produceren allemaal een grafische uitvoer van hun resultaten. Dus ik heb een pagina gemaakt met links naar al deze pagina's, zodat ik me geen zorgen hoef te maken over het invoeren van het adres elke keer dat ik deze pagina's wil openen.

Stap 7: Ik leef…

Ik heb dit gebruikt om de temperatuur in een computerruimte in de gaten te houden, maar dit kunnen vrijwel gegevens uit elke bron zijn. Als het eenmaal kan worden opgeslagen in een tekstbestand en je weet dat het formaat is, kan Gnuplot de rest doen. Een ding dat ik onlangs aan dit project heb toegevoegd, is het verzenden van een soort "hartslag"-e-mail. Dat is op de eerste van de maand om 9.00 uur. Ik heb een script dat wordt uitgevoerd dat de mailinglijst e-mailt om hen te laten weten dat het systeem werkt zoals het hoort en dat alles goed is in de kamer.

De cronjob-lijst gebruiken als:

Aanbevolen: