Скрипт состоит из двух функций. При запуске надо указать любую из них на выбор. Примеры запуска из каталога скрипта приведены в комментариях (на английском). Командой
./sensor1.sh ds1820_mon 5
запускается функция, который каждые 5 секунд выводит показания температуры на экран монитора. Командой
nohup ./sensor1.sh ds1820_log 3 /var/www/html/data_temp.txt &
показания температуры с интервалом 3 секунды пишутся в лог-файл /var/www/html/data_temp.txt. Скрипт запустится в фоновом режиме.
Для остановки скрипта введите kill [идентификатор_процесса].
Каждое показание занимает строчку в текстовом файле: в начале строки указывается дата, время и через запятую значение температуры в виде десятичной дроби с 3 знаками после запятой. Погрешность датчика составляет полградуса в середине диапазона и до двух градусов по краям диапазона измерений, поэтому можно ограничиться выводом только целой части.
Скрипт отслеживает положительные и отрицательные температуры.
Скрипт sensor1.sh
#!/bin/bash
# Description: A simple bash script to monitor or log the temp sensors
SLEEP=$2
LOG=$3
function ds1820_mon {
echo Polling DS1820 every $SLEEP seconds.
for (( ; ; ))
do
mdate="$(date +%Y-%m-%d\ %H:%M:%S)"
T1=$(cat /sys/bus/w1/devices/28-041654f0dcff/w1_slave | grep t= | cut -f 2 -d "=")
INTEGER=${T1:0:(-3)}
# Restore the leading 0 for positive and negative numbers
if [ -z $INTEGER ]
then
INTEGER="0"
fi
if [ "$INTEGER" == "-" ]
then
INTEGER="-0"
fi
FRACTION=${T1:(-3)}
echo $mdate, "$INTEGER.$FRACTION"
sleep $SLEEP
done
}
function ds1820_log {
#echo Logging DS1820 to file every $SLEEP seconds. >> $LOG
for (( ; ; ))
do
mdate="$(date +%Y-%m-%d\ %H:%M:%S)"
T1=$(cat /sys/bus/w1/devices/28-041654f0dcff/w1_slave | grep t= | cut -f 2 -d "=")
INTEGER=${T1:0:(-3)}
# Restore the leading 0 for positive and negative numbers
if [ -z $INTEGER ]
then
INTEGER="0"
fi
if [ "$INTEGER" == "-" ]
then
INTEGER="-0"
fi
FRACTION=${T1:(-3)}
echo $mdate,"$INTEGER.$FRACTION" >> $LOG
sleep $SLEEP
done
}
case $1 in
ds1820_mon)
ds1820_mon
;;
ds1820_log)
ds1820_log
;;
*)
echo -----------------------------------------------------------------------------
echo
echo DS1820 tool syntax.
echo The tool has two modes, monitor and log.
echo Monitor will print to screen and log will log to a file.
echo -----------------------------------------------------------------------------
echo -- Monitor Mode --
echo Monitor mode accepts two variables the name of the sensor
echo and the polling time in seconds.
echo To poll the ds1820 every 5 seconds the syntax would be:
echo "./sensor.sh ds1820_mon 5"
echo
echo -----------------------------------------------------------------------------
echo -- Log Mode --
echo Log mode accepts three variables the name of the sensor,
echo polling time and the log file name.
echo To log the ds1820 every 5 seconds to the syntax would be:
echo "./sensor.sh ds1820_log 5 /var/log/ds1820_temp &"
echo
echo -----------------------------------------------------------------------------
;;
esac
# END
Сначала выделяется целая часть INTEGER, затем дробная часть FRACTION. Целая часть через точку объединяется с дробной и получается число с дробной частью.
Источники: [1] и www.sbprojects.com (автор San Bergmans) [2].
Не забудьте заменить идентификатор датчика на свой (выделен желтым фоном). Находясь в каталоге скрипта, дайте скрипту права на выполнение командой chmod +x sensor1.sh.
Для построения графика можно использовать готовую библиотеку dygraph-combined-dev.js [3].
Для проверки скрипта использовал Raspberry Pi с уже установленным веб-сервером Apache. Для построения графика воспользовался материалами с ресурса [3]. Файлы скопируйте в папку /var/www/html.
Измените права на папку командами
sudo chown -R pi:pi /var/www/html
sudo chmod -R 755 /var/www/html
На компьютере локальной сети в адресной строке браузера введите IP адрес Raspberry Pi и имя файла - temp.html. Например, так:
192.168.1.28/temp.html
Скачать файлы
Еще о построении графиков можно посмотреть в статьях [4] и [5].
Распакуйте скачанный архив в отдельную директорию в домашнем каталоге. Перейдите в этот каталог. Можно запустить скрипт прямо в этом каталоге.
Если скрипт не запускается, дайте скрипту права на выполнение командой chmod +x sensor1.sh.
Иногда при считывании показаний в файл данных записывается сбойное значение, которое может быть в несколько раз больше или меньше типичных значений. На графике это выглядит как пик или ломаная линия. Чтобы привести график к нормальному виду, удалите сбойное значение из файла данных. Как это сделать, описано в статье WebIOPi-0.7.1 и Raspberry Pi 3 - подключение датчика давления BMP180 . Там же описано, как удалить устаревшие данные из текстового файла.
Использованные ресурсы
1. Brendan Horan, Practical Raspberry Pi, Apress 2013 p.58-59
2. http://academicfox.com/raspberry-pi-ds18b20-2/
3. http://electromost.com/news/raspberry_pi_dlja_domashnej_avtomatizacii_grafiki_parametrov/2015-09-18-136
4. http://zgo.narod.ru/publ/monitor_temperatury_i_vlazhnosti_dht11_ili_dht22_i_webiopi/1-1-0-53
5. http://zgo.narod.ru/publ/webiopi_0_7_1_i_raspberry_pi_3_podkljuchenie_datchika_davlenija_bmp180/1-1-0-60
6. http://zgo.narod.ru/publ/monitor_atmosfernogo_davlenija_i_temperatury_na_raspberry_pi_3/1-1-0-69
7. https://zalinux.ru/?p=458
8. http://wiki.ayac.ru/skripty/bash-dobavlenie-daty-v-vyvod-komandy
9. https://www.linux.org.ru/forum/general/6485077
|