Черновая версия, возможны ошибки и опечатки))
01.
Lighhtpd
Файловую систему создадим используя Buildroot. В этом случае она получается компактнее и может быть размещена в микросхеме NAND Flash модуля. В случае если это не является обязательным, можно собрать Debian и разместить его на SD карте. Для отображения информации и графиков нам понадобится web server. Мы будем использовать lighttpd входящий в состав пакетов Buildroot. Устанавливаем соответствующую галочку и собираем файловую систему. Для настройки lighttpd используется файл /etc/lighttpd/lighttpd.conf. Старые версии Buildroot его не генерируют, поэтому создадим вручную:
mkdir /etc/lighttpd vi /etc/lighhtpd/lighttpd.conf
Содержимое файла lighttpd.conf:
server.document-root = "/var/www/servers/www.imx287.org/pages/" server.port = 80 mimetype.assign = ( ".html" => "text/html", ".txt" => "text/plain", ".jpg" => "image/jpeg", ".png" => "image/png" ) static-file.exclude-extensions = ( ".fcgi", ".php", ".rb", "~", ".inc" ) index-file.names = ( "index.html" )
Чтобы запустить web server выполняем:
lighttpd -D -f /etc/lighttpd/lighttpd.conf
Чтобы lighttpd запускался при старте системы, создадим сервис S51lighttpd
vi /etc/init.d/S51lighttpd
Содержимое файла S51lighttpd
#!/bin/sh # # Starts lighttpd. # start() { echo "Starting lighttpd: " start-stop-daemon -S -q -p /var/run/lighttpd.pid --exec /usr/sbin/lighttpd -- -f /etc/lighttpd/lighttpd.conf echo "OK" } restart() { stop start } case "$1" in start) start ;; stop) stop ;; restart|reload) restart ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac exit $?
Параметр server.document-root в файле lighttpd.conf указывает путь, где должны лежать web страницы (/var/www/servers/www.imx287.org/pages/). Пока там ничего нет, поэтому отображать нечего. Сначала создадим необходимые папки:
mkdir /var/www/servers mkdir /var/www/servers/www.imx287.org mkdir /var/www/servers/www.imx287.org/pages
Затем создадим простейшую web страницу:
cd /var/www/servers/www.imx287.org/pages vi index.html
Содержимое страницы:
<html><body><h1>It works!</h1> <p>This is the default web page for this server.</p> <p>The web server software is running but no content has been added, yet.</p> </body></html> |
Проверим, перегружаем плату, в логе должно появиться сообщение о старте lighttpd. В браузере зайдем по IP адресу назначенному плате, должна отобразиться наша тестовая страница:
RRDtool
Для хранения данных и создания графиков будем использовать rrdtool. Данные из Википедии:
RRDtool — набор утилит для работы с RRD (Round-robin Database, кольцевая база данных). Созданы Тоби Отикером (Tobias Oetiker) для хранения, обработки и визуализации динамических (изменяющихся во времени) последовательностей данных, таких как сетевой трафик, температура, загрузка процессора и так далее.[1] Все данные хранятся в кольцевой базе, размер которой остаётся неизменным. RRDtool включают в себя возможность графического отображения хранимой информации. Данный набор утилит распространяется под лицензией GNU GPL.
Пересобираем buildroot включив rrdtool. Для начала следует создать базу данных в которой будет храниться информация о температуре и влажности. Базу данных разместим там же где лежат страницы web сервера
rrdtool create /var/www/servers/www.imx287.org/pages/db.rrd --step=300 DS:temperature:GAUGE:600:U:U DS:humidity:GAUGE:600:U:U \ RRA:AVERAGE:0.5:1:30 RRA:AVERAGE:0.5:2:30 RRA:AVERAGE:0.5:10:144
Занесение данных в базу данных выполняется так:
rrdtool update /var/www/servers/www.imx287.org/pages/db.rrd `date +"%s"`:$TEMPERATURE:$HUMIDITY
Создание картинки с графиком температуры:
rrdtool graph $DEST_DIR/temp.png DEF:temperature=$DEST_DIR/db.rrd:temperature:AVERAGE LINE1:temperature#FF0000 --width 800
Соответственно картинка с графиком влажности:
rrdtool graph $DEST_DIR/humidity.png DEF:humidity=$DEST_DIR/db.rrd:humidity:AVERAGE LINE1:humidity#FF0000 --width 800
Оформим все это в виде скрипта sensor.sh, который будет считывать информацию с датчика, заносить в базу и строить графики:
vi /home/sensor.sh
Содержимое скрипта
#!/bin/sh DEST_DIR=/var/www/servers/www.imx287.org/pages mkdir -p $DEST_DIR TEMP_FILE=/sys/class/hwmon/hwmon0/device/temp1_input TEMPERATURE=-1 [ -f $TEMP_FILE ] && TEMPERATURE=`expr \`cat $TEMP_FILE\` / 1000` TEMP_FILE=/sys/class/hwmon/hwmon0/device/humidity1_input HUMIDITY=-1 [ -f $TEMP_FILE ] && HUMIDITY=`expr \`cat $TEMP_FILE\` / 1000` echo $TEMPERATURE echo $HUMIDITY rrdtool update /var/www/servers/www.imx287.org/pages/db.rrd `date +"%s"`:$TEMPERATURE:$HUMIDITY rrdtool graph $DEST_DIR/temp.png DEF:temperature=$DEST_DIR/db.rrd:temperature:AVERAGE LINE1:temperature#FF0000 --width 800 rrdtool graph $DEST_DIR/humidity.png DEF:humidity=$DEST_DIR/db.rrd:humidity:AVERAGE LINE1:humidity#FF0000 --width 800 ESP:wq - выход из редактора vi chmod +x /home/sensor.sh
В результате, в /var/www/servers/www.imx287.org/pages/ будет лежать две сгенерированные картинки temp.png и humidity.png которые можно отобразить на web странице. Модифицированный файл index.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Temperature and Humidity</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="content-style-type" content="text/css"> <meta http-equiv="refresh" content="600"> </head> <body> <h2 align=center>Temperature Graph</h2> <table align=center border=0 cellspacing=0 cellpadding=5> <tr><td><img src="/temp.png" alt="graph1"></td></tr> </table> <h2 align=center>Humidity Graph</h2> <table align=center border=0 cellspacing=0 cellpadding=5> <tr><td><img src="/humidity.png" alt="graph2"></td></tr> </table> </body> </html> |
Для периодического запуска скрипта поместим его в cron:
mkdir /var/spool/cron/ mkdir /var/spool/cron/crontabs/ crontab -e */5 * * * * /home/sensor.sh
Скрипт будет запускаться каждые 5 минут и обновлять картинки с графиками.
Через некоторое время, после накопления результатов, графики примут нормальный вид: картинка обновленных графиков.