Отправка смс о температуре воздуха + прогноз
Тут опишу небольшой скрипт, написанный на Shell для отправки температуры воздуха с сенсора DS18B20 при изменении на определённое кол-во градусов, а так же способ получения прогноза температуры на ближайший промежуток времени. Так же скрипт ограничен по времени отправки, смс отправляются только в период с 07 до 23 часов.
Для начала нам нужно пройтись по статье «1-wire термо станция на FreeBSD» — собрать схему, проверить датчики, для отправки смс используется модем Huawei, настроенные по статье: «Отправка смс с модема Huawei e171 FreeBSD». Источником данных о прогнозе погоды служит сайт rp5.ru по Вашему городу. Для отправки смс нам необходимо модифицировать скрипт добавления данных в БД следующим образом:
#!/bin/sh
outopen=`date '+%H'`
minh=07
maxh=23
db_host=localhost
db_pass=пароль_бд
db_user=пользователь_бд
db_name=имя_бд
digitemp_dir=/mnt/soft/digitemp
digitemp_bin=$digitemp_dir/dt
digitemp_conf=$digitemp_dir/.digitemprc
digitemp_format=%.1C
digitemp_sensor=13
smssendbin=/usr/local/bin/sendsms
grad=4
idrp5=4475
#######################################################
# Сам скрипт
#######################################################
# Выполняем получение данных с сенсоров
`$digitemp_bin -a -q -o $digitemp_format -c $digitemp_conf -l temperature.log`
# Процедура проверки временных файлов
TmpFiles ()
{
if ! [ -f $digitemp_dir/sensor${1}.dat ];
then
touch $digitemp_dir/sensor${1}.dat;
echo '100' >> $digitemp_dir/sensor${1}.dat;
fi
}
# Сверяем временной интервал
IsTime()
{
if [ "$1" -ge "$2" ]
then
if [ "$1" -lt "$3" ]
then
Gradaciya $ost $digitemp_sensor;
fi
fi
}
Gradaciya()
{
if [ $1 -eq 0 ];
then
t_file=`cat $digitemp_dir/sensor${2}.dat`;
MakeTmpl $2 $t_file;
fi
}
MakeTmpl()
{
if [ $t_cel -ne $2 ];
then
rm -f $digitemp_dir/sensor${1}.dat;
echo $t_cel >> $digitemp_dir/sensor${1}.dat
Ssms $1
fi
}
Ssms()
{
#####
# Отправка смс - настройка шаблонов в зависимости от сенсора
#####
# Шаблон для сенсора 13
if [ $1 -eq 13 ];
then
tpl="Temperatura Doma: ";
$smssendbin 79230000000 "${tpl}${line}C";
fi
# Шаблон для сенсора 14
if [ $1 -eq 14 ];
then
tpl="Tempetarura v Krasnoyarske: ";
#Подтягиваем прогноз
prgn=`/usr/local/bin/curl -s http://rp5.ru/xml/${idrp5}/00000/ru | grep -E -i -m2 -w 'HHii|temperature' | sed -e :a -e 's/<[^>]*>//g;/</N;//ba' | tr -d '\n' | awk '{ print "V "$1" prognoz "$2"C"; }'`;
$smssendbin 79230000000 "${tpl}${line}C; ${prgn}";
fi
}
cat temperature.log | while read line;
do
TmpFiles $digitemp_sensor;
t_cel=`echo $line | awk -F "." '{print $1}' `;
ost=`let "$t_cel % $grad"`;
IsTime $outopen $minh $maxh;
sql="call update_temp($line,$digitemp_sensor);";
digitemp_sensor=`expr $digitemp_sensor + 1`;
`/bin/echo $sql | /usr/local/bin/mysql -h$db_host -u$db_user $db_name -p$db_pass`;
done
rm -f temperature.log;
Вкратце расскажу о настройках:
Пример полученной смс показан на фото ниже: