Домашний термометр с прогнозом погоды

/www/pages/modesco/ubuntovod

С рождением ребёнка существенно повышается внимание, уделяемое погоде на улице: если сам ты можешь выйти на улицу в чём придётся, и немножко помёрзнуть или промокнуть, не взяв зонтик, то родительский инстинкт просто не даст причинить неудобство твоему ребёнку. Спасибо современным технологиям - температуру на улице и прогноз погоды можно в любой момент посмотреть на специальных сайтах.

И всё было бы хорошо, но в один прекрасный день я пообещал своей супруге повесить за окно обычный термометр - ей было неудобно открывать ноутбук, заходить на сайт и смотреть погоду там.

Как говорится в известной пословице: мужик сказал, женщина напомнила, женщина напомнила, женщина напомнила, женщина задолбала, мужик сделал.

Вообще, идея повесить в коридоре монитор и выводить на него всякие непотребности посещала меня много раз за последние годы, однако впихнуть даже самый маленький, 14-дюймовый монитор было некуда, а маленькие текстовые или графические дисплеи, которые так любят всякие моддеры, ну совершенно неинформативны и нечитаемы издалека.

Однажды, делая заказ на сайте DX я наткнулся на достаточно маленький (7 дюймов) телевизор с VGA-входом и решил воплотить свою идею в жизнь.

Термометр с прогнозом погоды

Непосредственно над входной дверью у меня в квартире есть небольшой шкаф, в котором я держал роутер, старый ноутбук, используемый как сервер, NAS и прочую "живность". Купленный мною телевизор-монитор вписался в этот зоопарк идеально.

Дальнейшее описание достаточно тривиально - большую часть можно смело опустить.

Настройка сервера

Всё, что нам требуется от компьютера - показывать веб-страничку. Самый простой способ сделать это - поставить иксы, какой-нибудь лёгкий оконный менеджер, браузер и запускать всё это автоматически при запуске, открывая в браузере нашу страницу.

С иксами я не мучался и просто установил Ubuntu 12.04, благо она оказалась LTS, да и стоявшую у меня для всяких тестов и разработки версию 8.04 давно пора было обновить.

Страничку будем отдавать с помощью nginx:

sudo apt-get install nginx

А гененировать по крону с помощью Mojolicious - замечательного фреймфорка:

curl get.mojolicio.us | sudo sh

Вообще, можно было бы и страничку отдавать с помощью Mojo, запустив скрипт (с малейшими переделками) через morbo, но вариант с nginx и генерацией статического файла тоже имеет право на существование - таким образом мы всегда отдаём браузеру сгенерированную страницу и у нас не будет задержек, да и кэширование, в случае с несколькими клиентами не помешает.

Создаём директорию, в которой будет лежать наша html-страничка:

sudo mkdir -p /var/www/weather/
sudo chown www-data:www-data /var/www/weather

Сохраняем наш перл-скрипт:

sudo curl https://raw.github.com/dreadatour/weather/master/weather.pl -o /usr/bin/generate-weather
sudo chmod +x /usr/bin/generate-weather

Добавляем в crontab строку для запуска скрипта. Для этого откроем файл /etc/crontab в любом текстовом редакторе:

sudo nano /etc/crontab

И добавим в конец следующую строку:

1
* * * * * www-data /usr/bin/generate-weather > /var/www/weather/index.html

Ждём, когда cron отработает и у нас появится файл с прогнозом погоды (файл будет обновляться раз в минуту):

ls /var/www/weather/index.html

Правим конфиг nginx /etc/nginx/sites-available/default:

1
2
3
4
5
6
server {
listen 80;
server_name localhost;
root /var/www/weather/;
index index.html;
}

И рестартим его:

sudo /etc/init.d/nginx restart

Проверяем, что всё работает как надо:

curl localhost

В результате мы должны получить нашу html-страницу.

Настройка системы

В качестве менеджера окон выбор пал на Openbox (более тяжёлые WM ставить не было никакого смысла). Ставим его:

sudo apt-get install openbox

В качестве браузера поставим хром (а точнее его вариацию - chromium):

sudo apt-get install chromium-browser

Ставим утилиту "unclutter" - с помощью неё скрываем курсор мыши:

sudo apt-get install unclutter

В настройках убунты включаем автоматический вход в систему - как оказалось, довольно неудобно после каждой перезагрузки залезать в шкаф и логиниться там с помощью клавиатуры ноутбука, а выводить клавиатуру наружу излишне и глупо.

Далее, создаём файл /usr/share/xsessions/chrome-session.desktop:

1
2
3
4
[Desktop Entry]
Name=chrome-session
Comment=Weather
Exec=/usr/bin/chrome-session

И файл /usr/bin/chrome-session:

1
2
3
4
5
6
7
8
#!/bin/sh
openbox-session & # запускаем openbox
xrandr --output VGA1 --mode 800x600 & # устанавливаем разрешение телевизора
xset s blank & # выключаем screensaver
xset s 0 0 &
xset -dpms &
unclutter -idle 1 & # прячем мышку
chromium-browser --kiosk "http://localhost/" # запускаем браузер и открываем страницу с прогнозом

Браузер запускается в режиме "киоск" - в полноэкранном режиме.

Разлогиниваемся, выбираем в списке сессий нашу "chrome-session", вводим пароль и попадаем на страничку с прогнозом погоды. На всякий случай для проверки перегружаем компьютер:

sudo reboot

Всё должно работать.

Не останавливаемся

Вместе с телевизором я заказал тач-панель соответствующих размеров, но при установке её я благополучно всё испортил: благодаря кривизне моих рук при закручивании крепёжных винтов панель треснула и отказалась работать. Я уже заказал ещё одну панель и в следующий раз буду аккуратнее.

В дальнейших планах - выводить на монитор пробки (удобно посмотреть их перед выходом, просто ткнув в экран), а так же другие плюшки, вроде изображения с дверного глазка, различных напоминаний и уведомлений.

Исходный код скрипта и конфигурационных файлов системы выложены тут: github.com.

Ваша жена или девушка стала совсем некрасивой? Это не проблема! Ведь есть салон красоты Ленинский проспект, вот там то ей помогут обрести былую красоту! Рекомендую именно туда посылать вашу половинку!

Evgeniy Lukoyanov
2012-05-30 07:23:00
Отличная идея! И исполнение на высоте.
Николай
2012-05-30 12:06:00
Да, действительно идея отличная. Вот ещё бы придумать сервер на чём нибудь меньшего размера и стоимости, тогда вообще было бы просто Супер!
Maxim Seliverstov
2012-05-30 23:12:00
Все хорошо, но ни как не могу понять, зачем нужно было ставить фреймворк Mojolicious , если он потом в дальнейшем ни где не используется (далее вы скачиваете какой-то скрипт с сайта и используете уже его). Не понятно, для чего этот фреймворк нужен и как им пользоваться. И не описано, как настроить скрипт на генерацию погоды в нужном регионе..
arthurqt4
2012-06-01 15:15:00
А если все это дело не от ноута, а от чего то вроде Raspberry Pi работало, то вообще была бы сказка. Жаль сам телек так не прошьешь.