Пятница, 22.11.2024
Завод горного оборудования
Меню сайта
Google_Translate
Категории раздела
Мои статьи [125]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Рейтинг@Mail.ru

Яндекс.Метрика
Главная » Статьи » Мои статьи

Скрипт на bash для записи показаний DS18B20 в текстовый файл

Скрипт состоит из двух функций. При запуске надо указать любую из них на выбор. Примеры запуска из каталога скрипта приведены в комментариях (на английском). Командой
./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

Категория: Мои статьи | Добавил: zgo (17.07.2017)
Просмотров: 2206 | Комментарии: 1 | Теги: graph, запись, Файл, text, bash, показания, график, writing, DS18B20, diagram | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Поиск
Друзья сайта
  • Создать сайт
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Все проекты компании
  • Сайт завода zgo.ucoz.ru
  • Забайкальский край
    Дарасун
    Яндекс.Погода


    Хостинг Ucoz опять навязал видеорекламу, но обещает - "мы настроили систему так, чтобы в сутки на уникального посетителя приходилось не более двух показов."
    Совет, как не смотреть видеорекламу.

    Или используйте Uran - браузер от Ucoz без рекламы Скачать

    или подключите к браузеру блокировщик рекламы, например, Adblock Plus или uBlock Origin

    Универсальный декодер кириллицы



    Защита, контроль, управление.



    DONATE (поддержи автора)
    Все статьи авторские, при использовании прошу ссылаться на сайт
    Copyright Дарасунский завод горного оборудования © 2004 - 2024
    Бесплатный конструктор сайтов - uCoz