Raspberry Pi – AM2302 / DTH22 WEB

Sensory umożliwiające badanie warunków środowiskowych są spotykane niemal na każdym kroku naszego życia, Najczęściej mierzonymi wartościami są temperatura oraz wilgotność.  Wszystko z dzięki sensora, tym razem na warsztat trafił sensor z rodziny DTHxx a dokładnie DTH22 (AM2302). Z racji tego, że poniewierało mi się Raspberry PI zero postanowiłem zrobić z niego pożytek. Do roboty został zaprzęgnięty Nginx a za prezentację graficzną dopowiada Munin.

Potrzebne elementy:

 
Hardware:
RasberryPi Zero lub odpowiednik
– karta mikroSD
– czujnik DHT22 (AM2302) lub DTH11
– komputer do łączności po ssh

Software
– Raspberian OS
– Nginx
– Munin
– WiringPI
– Lol_dth22

Pierwszym krokiem jest podłączenie naszego czujnika do RaspberryPI. Pomijam temat wgrywania systemu i podłączenia się po ssh, każdy raczej wie jak to zrobić.

Pin 1 czujnika DTH22 (AM2302) podłączamy do Vcc (+3,3V)
Pin 2 czujnika DTH22 (AM2302) podłączamy do GIPO (GIPO 4)
Pin 4 czujnika DTH22 (AM2302) podłączamy do GND (Ground)

Następnie logujemy się na naszą malinę na roota będzie szybciej. Wszystkie elementy składowe będę opisywał w kolejności, no to lecimy.

1. Instalacja Nginx, czyli nasz serwer www, wiem zaraz ktoś się doczepi, że nie Apache, jednocześnie instalujemy obsługę PHP.

apt-get update
apt-get install nginx php5-fpm

2. Instalacja Munin, jest to proste narzędzie stworzone dla administratorów do monitorowania różnych parametrów systemu, zostanie przez nas wykorzystane do wyświetlenia danych z czujnika DTH22 (AM2303).

apt-get install munin munin-node munin-plugins-extra

Edytujemy plik:

nano /etc/munin/munin.conf

[server.name]
address 127.0.0.1
use_node_name yes

3. Konfiguracja Nginx dla wirtualnego hosta. Zamiast tranzystor.pl wprowadzamy też z którą będzie współpracował nasz Nginx.

nano /etc/nginx/sites-enabled/default or nano /etc/nginx/sites-enabled/tranzystor.pl

server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/tranzystor.pl.crt;
ssl_certificate_key /etc/nginx/ssl/tranzystor.pl.key;
server_name tranzystor.pl;
root „/var/cache/munin/www/”;
auth_basic „Private access”;
auth_basic_user_file /etc/munin/munin_htpasswd;

location ^~ /munin-cgi/munin-cgi-graph/ {
fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/var/run/munin/spawn-fcgi-munin-graph.sock;
include fastcgi_params;
}

location /static/ {
alias /etc/munin/static/;
}
}

4. Generowanie certyfikatu SSL

mkdir /etc/nginx/ssl
openssl req -subj ‚/CN=tranzystor.pl’ -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/tranzystor.pl.key -out /etc/nginx/ssl/tranzystor.pl.crt

5. Generujemy swoje hasło dostępowe do danych. Zamiast admin można wprowadzić swoją nazwę użytkownika.

apt-get install apache2-utils
htpasswd -c /etc/munin/munin_htpasswd admin

6. Dodawanie modułów do munin.

cd /usr/share/munin/plugins
wget -O pisense_ https://raw.github.com/perception101/pisense/master/pisense_
chmod a+x pisense_
ln -s /usr/share/munin/plugins/pisense_ /etc/munin/plugins/pisense_temp
ln -s /usr/share/munin/plugins/pisense_ /etc/munin/plugins/pisense_clock
nano /etc/munin/plugin-conf.d/munin-node

[pisense_*]
user root

7. Konfiguracja DTH22 (AM2302), może to zająć chwilkę, z jednoczesną instalacja GITa, zapomniałem wcześniej 😉

apt-get install git-core
cd /opt/
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build

cd /opt/
git clone https://github.com/technion/lol_dht22
cd lol_dht22
./configure
make

8. Tworzenie wtyczki DTH22 w Munin.

nano /etc/munin/plugins/DHT22-humidity

#!/bin/sh

case $1 in
config)
cat <<‚EOM’
graph_title Relative humidity
graph_vlabel Percent
graph_category AM2302
humidity.label RH
humidity.draw AREASTACK
humidity.colour 3E9BFB
EOM
exit 0;;
esac

printf „humidity.value ”
/opt/lol_dht22/loldht 7 | grep -i „humidity” | cut -d ‚ ‚ -f3

chmod +x /etc/munin/plugins/DHT22-humidity

nano /etc/munin/plugins/DHT22-temperature

 

#!/bin/sh

case $1 in
config)
cat <<‚EOM’
graph_title Temperature
graph_vlabel Celsius
graph_category AM2302
temperature.label Celsius
temperature.label Temperature
temperature.draw AREASTACK
temperature.colour 00FF00
EOM
exit 0;;
esac

printf „temperature.value ”
/opt/lol_dht22/loldht 7 | grep -i „temperature” | cut -d ‚ ‚ -f7

chmod +x /etc/munin/plugins/DHT22-temperature

 

nano /etc/munin/plugin-conf.d/munin-node

i dodajemy na samym końcu

[DHT22-*]
user root

9. Aktywujemy Dynazoom dla grafi.

apt-get install spawn-fcgi libcgi-fast-perl

nano /etc/init.d/munin-fastcgi

#! /bin/sh

### BEGIN INIT INFO
# Provides: spawn-fcgi-munin-graph
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: starts FastCGI for Munin-Graph
### END INIT INFO
# ————————————————————–
# Munin-CGI-Graph Spawn-FCGI Startscript by Julien Schmidt
# eMail: munin-trac at julienschmidt.com
# www: http://www.julienschmidt.com
# ————————————————————–
# Install:
# 1. Copy this file to /etc/init.d
# 2. Edit the variables below
# 3. run „update-rc.d spawn-fcgi-munin-graph defaults”
# ————————————————————–
# Special thanks for their help to:
# Frantisek Princ
# Jérôme Warnier
# ————————————————————–
# Last Update: 14. February 2013
#
# Please change the following variables:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=spawn-fcgi-munin-graph
PID_FILE=/var/run/munin/$NAME.pid
SOCK_FILE=/var/run/munin/$NAME.sock
SOCK_USER=www-data
FCGI_USER=www-data
FCGI_GROUP=www-data
FCGI_WORKERS=2
DAEMON=/usr/bin/spawn-fcgi
DAEMON_OPTS=”-s $SOCK_FILE -F $FCGI_WORKERS -U $SOCK_USER -u $FCGI_USER -g $FCGI_GROUP -P $PID_FILE — /usr/lib/munin/cgi/munin-cgi-graph”

# ————————————————————–
# No edits necessary beyond this line
# ————————————————————–

if [ ! -x $DAEMON ]; then
echo „File not found or is not executable: $DAEMON!”
exit 0
fi

status() {
if [ ! -r $PID_FILE ]; then
return 1
fi

for FCGI_PID in `cat $PID_FILE`; do
if [ -z „${FCGI_PID}” ]; then
return 1
fi

FCGI_RUNNING=`ps -p ${FCGI_PID} | grep ${FCGI_PID}`
if [ -z „${FCGI_RUNNING}” ]; then
return 1
fi
done;

return 0
}

start() {
if status; then
echo „FCGI is already running!”
exit 1
else
$DAEMON $DAEMON_OPTS
fi
}

stop () {
if ! status; then
echo „No PID-file at $PID_FILE found or PID not valid. Maybe not running”
exit 1
fi

# Kill processes
for PID_RUNNING in `cat $PID_FILE`; do
kill -9 $PID_RUNNING
done

# Remove PID-file
rm -f $PID_FILE

# Remove Sock-File
rm -f $SOCK_FILE
}

case „$1” in
start)
echo „Starting $NAME: ”
start
echo „… DONE”
;;

stop)
echo „Stopping $NAME: ”
stop
echo „… DONE”
;;

force-reload|restart)
echo „Stopping $NAME: ”
stop
echo „Starting $NAME: ”
start
echo „… DONE”
;;

status)
if status; then
echo „FCGI is RUNNING”
else
echo „FCGI is NOT RUNNING”
fi
;;

*)
echo „Usage: $0 {start|stop|force-reload|restart|status}”
exit 1
;;
esac

exit 0

chmod 755 /etc/init.d/munin-fastcgi

update-rc.d munin-fastcgi defaults

/etc/init.d/munin-fastcgi start

10. Na koniec restartujemy usługę i możemy zobaczyć efekt naszej pracy.

munin-node-configure

/etc/init.d/nginx restart

/etc/init.d/munin-node restart

Aby wejść na naszą stronę wystarczy wpisać adres który wykorzystywaliśmy przy konfiguracji np. tranzystor.pl, w pierwszej chwili zostaniemy poproszeni o podanie naszego loginu oraz hasła które zdefiniowaliśmy wcześniej. Mamy dostępne wykresy z ostatnich 24h oraz z tygodnia oraz roku.
Przykładowe wykresy temperatur oraz wilgotności.

 

Post Author: swistak

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Potwierdz, że nie jesteś botem. *