воскресенье, 18 ноября 2012 г.


Raspberry PI или немного о домашней автоматизации.



В октябре 2011 года , вспоминая опыты с OPEN WRT , мне захотелось очередной раз вернуться к изучению LINUX систем, а главное осуществить свою давнюю задумку - мониторинг температуры на улице. 
 Для опытов был выбран системник на базе INTEL ATOM , на котором до этого не совсем успешно жил WINDOWS 7. Скачал с сайта UBUNTU 10.10 , установил ....  Поглядел ... Как и предыдущие попытки - ничего особенно не понял , но это уже был конец 2011 года а не 2003 год. Читая интернет , поднял LAMP сервер , а потом стал разбираться с PHP . На этот раз все пошло не без проблем , но довольно успешно. Сайт заработал . Следующим шагом было - прикрутить датчик температуры DS1820 через COM порт. Само устройство у меня валялось несколько лет на балконе в ящике с хламом с тех времен когда я его пробовал запустить под windows. Под виндой в свое время запуск был вполне успешен , но программы для работы и логгирования были либо платные , либо не совсем рабочие. 
 Подключил я это устройство к убунте и прочитав  эту статью ..... О чудо - все заработало...

Схема датчика:


Подключим устройство к компу и глядим в /dev/ttyS0 появился порт ttyS0 . В последствие выяснил что при подключении через USB-COM переходник , появлялся порт ttyUSB0.

Для чтения данных использовал программу DIGITEMP . Главным моментом в ее использовании , была начальная инициализация датчика. Без этого ничего не работало. 

установка:

apt-get install digitemp


инициализация:


digitemp_DS9097 -i -s /dev/ttyS0
В ответ нам выдаст:
......
Searching the 1-Wire LAN
10FBF32C020800C2 : DS1820/DS18S20/DS1920 Temperature Sensor
ROM #0 : 10FBF32C020800C2
Wrote .digitemprc



это очень важный момент, без него ничего не работает.  

Запустим теперь в таком виде: 
 digitemp_DS9097 -t 0 -i /dev/ttyUSB0 

получим вот такое сообщение:

DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU General Public License v2.0 - http://www.digitemp.com
Turning off all DS2409 Couplers
.
Searching the 1-Wire LAN
1079086A0108009D : DS1820/DS18S20/DS1920 Temperature Sensor
ROM #0 : 1079086A0108009D
Nov 19 10:22:25 Sensor 0 C: -0.62 F: 30.88


На этом первый этап можно считать законченным. Далее мне нужно было логгировать данные и сохранить их в БД для дальнейшего анализа. 
Сделал я это довольно просто: создал файл с именем var.sh и следующего содержания:


#!/bin/sh
digitemp_DS9097 -r2000 -t 0 -s /dev/ttyUSB0-q -o "%Y-%m-%d  %H:%M:%S %0.1C"  >> /home/www/thermal.log

Хочу отдельно остановится на параметре -r2000 , без данного параметра система через раз писала 85 градусов. Намного позже я понял что это задержка чтения после инициализации , которая почти избавляет от этого глюка. 

Данный файл после изменения режима запуска командой:

  CHMOD +X var.sh 

я поместил в (данная команда выполняется от имени текущего пользователя,а не под root!!!)

crjntab -e 

строкой вида:

0-59 * * * * sh /home/www/var.sh

означающей запуск каждую минуту. Увеличивать этот интервал до 10 минут например - не стоит т.к. все же иногда проскакивает показание +85 градусов. При запуске скрипт читал температуру и дописывал его в файл thermal.log. В дальнейшем запускалась программа на PHP , которая списывала данные из файла в базу данных. Можно было это сделать на прямую минуя log файл , но на тот момент я не обладал таким опытом , а в лоб это сделать не получилось. 
Другим моментом было , то что log файл можно было бэкапить (у меня например в dropbox) , а бекап БД для меня в то время представлялся более проблематичным. 

Следующим заданием в crontab было

0-59/21 * * * * php /home/www/reloadbase2012.php

это запуск программы синхронизатора log файла с БД mysql. 
Об этом я расскажу в следующий раз.

Спустя год с небольшим , а именно в конце октября этого года ,просматривая очередной уже реально не интересный счет за электричество  я подумал , что держать включенным системник только для логгирования температуры (и довольно редкого качания торрентов + просмотра фильмов через DNLA на тв samsung)- наверное не очень правильно. Тем более он издает определенный шум. Возникла мысль купить RASPBERRY PI и всю эту систему перенести на него.  Заказал в одном из российских интернет-магазинах стал ждать. Спустя  неделю посылка пришла.  Беглый осмотр устройства меня в принципе порадовал . Подключив через HDMI кабель к телевизору и воткнув зарядку от телефона я узрел картинку линукса. 



плата raspberry pi у телевизора

(а это показал ТВ 32 дюйма).

Тут мне хочется немного остановится на процессе записи образа на карту. 
Если следовать инструкции , то все просто , но под windows 7 не работает. Программа winimage выдает ошибку. Лечится это перемещением IMG файла в папку c:\chromeos, после чего файл успешно пишется на карту памяти. Каталог может называться как то по другому , но на эти грабли я наступил с год назад при попытке поглядеть на ноуте операционку в честь которой каталог назван. Та попытка была безуспешна. 

После запуска и некоторых настроек (которые очень хорошо описаны тут) я узрел линукс. Далее пошли сплошные разочарования. Youtube открылся , но показывать не стал. После некоторых плясок с бубном стал - но по шагам со скоростью 1-2 кадра в несколько секунд. Моя версия платы В , но с 256 мб памяти на борту. Как оказалась великий тормоз. После дня опытов я заново поставил систему на карту и начал переносить свой сервер .


Первым делом я поднял LAMP 

sudo apt-get update

sudo apt-get install apache2

sudo apt-get install mysql-server

sudo apt-get install php5

sudo apt-get install php5-mysql

после установки данных пакетов , все как то без проблемно заработало в отличие от первых опытов с убунтой.  Скопировал каталог с сайтом , а также каталог с базами MySql я узрел свой сайт в интернете. Сайт реализованный на движке wordpress конечно начал ощутимо тормозить. Анализ быстродействия утилитой htop , показал дефицит памяти в устройстве. Пришлось ее увеличивать , как это описано вот тут  .

Стоит отметить одну мою ошибку при копировании данных с mysql. Я их скопировал тупо перенесением каталога с базами данных при остановленном сервере. Все заработало , но не нашлись процедуры и функции бд , которые я создал. Изучение вопроса показало что надо было сделать дамп базы и потом ее вгрузить. Это я не знал , потому часть функционала сайта потерялась. Сегодня буду делать перенос вгрузкой.  Копирование переносом каталога было выполнено по причине того , что данные в БД для меня не имели ценности. Они синхронизировались с файлом лога и потому при первом запуске системы все данные были автоматом записаны в базу.

выгрузка дампа:

mysqldump -u root -pПАРОЛЬ ИмяБАЗЫ
--routines --extended-insert >/home/pi/dump.sql

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

Если рассматривать систему по цене , то плата на INTEL ATOM + DDR3 будет стоить примерно те же деньги что и RASPBERRY PI (не о каких 35 долларах понятно и не может быть речи) а именно в пределах 2500 руб, но при этом несравнимо фунциональней.  Замер потребляемой мощности показал у PI примерно около 10 ватт , а у системника в пределах 45 ватт (в нем еще винчестер на 500 гб внутри ) потому экономия на электричестве не очень значительна. 





  

Комментариев нет:

Отправить комментарий