Пятница, 27.12.2024, 07:37
| RSS
Поиск
Главная |
Защита, контроль, управление
Форма входа

Меню

Авторские проекты

Статьи

Raspberry Pi

Полезная информация

Обратная связь

Ссылки

Форум

Чат

Канал YouTube

Группа в Facebook


Календарь
«  Сентябрь 2015  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
282930

Наш опрос

Ссылки


Яндекс.Метрика





.
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Raspberry Pi для домашней автоматизации. Построение графиков

Raspberry Pi для домашней автоматизации. Построение графиков

Наш канал в YouTube


dygraph

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

В этом материале будет рассмотрено, как добавить графики в нашу систему домашней автоматизации. Как известно, для того что бы построить любой график в двухмерной системе координат, необходимо указать массивы координат точек по осям Х и Y. Соединив эти точки, мы получим график изменений тех или иных параметров. Достоверность графика зависит как от выбранного масштаба, так и от частоты выборки значений по осям Х и Y. Например, если мы хотим отслеживать динамику изменения атмосферного давления во времени, то координатой Х у нас будет являться время, а координатой Yзначение давления в миллиметрах ртутного столба. В этом примере давление всегда будет абсолютной величиной, а выборка этой величины во времени будет зависеть от выбранной пользователем. Понятно, что чем чаще делается выборка, тем точнее получится график. Однако к этому вопросу тоже нужно подходить разумно. Например, для построения графика медленно изменяющихся процессов - атмосферного давления или температуры, частота выборки может составлять 10-30 и более минут. А вот для контроля качества напряжения в сети, выборку амплитудного значения напряжения нужно делать очень часто - каждые 20 мс (т.е в течение одного периода).

Построение графика состоит из двух этапов. Первый этап – это формирование базы данных (координат Х и Y), а второй – визуализация полученных данных в графическом виде. Далее на практическом примере я постараюсь показать, как построить график изменения во времени значений атмосферного давления, получаемых при помощи датчика BMP085. Но сначала остановимся на одном очень важном моменте.

Кто внимательно следит за всеми публикациями на сайте по системе домашней автоматизации на Raspberry Pi, видимо, заметили следующую особенность – выполнение той или иной функции происходит только при открытой странице браузера. Например, когда мы работаем через UART, то запросы на удаленные контроллеры и обработка получаемых с них данных выполняются непосредственно скриптами JavaScript web-страницы. Работа с интерфейсами I2C, 1-wire осуществляется посредством макросов, написанных на языке Python, но опять же вызываемых с web-страницы. Поэтому, если браузер закрыт, то данные мы не получим. Следовательно, макросы (скрипты) Python должны работать постоянно, вне зависимости от того, открыта web-страница в браузере или нет. Это очень важное условие для формирования базы данных.

Получив данные, необходимо сохранить их в базе. В качестве базы данных используется обычный текстовый файл. В нашем случае это data_press.txt. В первой строке файла указываем  имена переменных через запятую - Data и Pressure. Далее каждый раз с новой строки в файл будут записываться значения даты, времени и давления (рис.1)

 

dygraph txt

Рис.1

 

Формирование базы данных осуществляется посредством скрипта Python script.py, который с заданной дискретизацией формирует запрос на получение данных с датчика BMP085 и  записывает их в текстовый файл (рис.2). Файл script.py необходимо скопировать в папку /home/pi/myproject/python.

 

dygraph python

Рис.2

 

Сформировав базу данных, можно перейти ко второму этапу - построить график изменения давления во времени. Для этого воспользуемся готовой библиотекой dygraph, представляющей собой мощный инструмент, написанный на JavaScript и предназначенный для построения масштабируемых графиков различных функций. Библиотеку  dygraph.js скачиваем с сайта http://dygraphs.com и копируем ее в папку /home/pi/myproject/html. В этой же папке разместим и файл базы данных data_press.txt.

Для вывода графика на web-страницу создаем файл graphs_press.html (рис.3) и аналогично копируем его в папку /home/pi/myproject/html

 

dygraph html

Рис.3

 

Теперь, если открыть в браузере страницу graphs.html, то при условии, что в файле data_press.txt есть данные даты, времени и давления, будет выведен график изменения давления за период времени (рис.4).

 

график температуры dygraph

Рис.4

 

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

Аналогично вместе с давлением можно вывести в одну систему координат значения температуры, получаемые с этого датчика BMP085. Однако это не очень удобно. Дело в том, что абсолютные величины температуры значительно ниже абсолютных величин давления. Для примера возьмем 20 градусов и 750 мм.рт.столба. Если оба графика разместить в одной системе координат, то график давления будет в верхней области, а температуры – в самом низу. И хотя с помощью мышки очень просто масштабировать графики, но для общего восприятия два графика, значения одного из которых отличаются от значений другого более чем в 35 раз, очень  не наглядно. Поэтому, в одну систему координат имеет смысл выводить параметры одного рода, которые нужно сравнить. Для примера приведу график двух температур, получаемых от датчиков DS18B20, установленных прямо на сервере Raspberry Pi. Один из этих датчиков показывает температуру воздуха внутри корпуса сервера, а другой – температуру теплоотвода процессора (рис.5)

 

dygraph web интерфейс

Рис.5

 

С  помощью библиотеки dygraph  можно построить не только графики параметров, но и графики событий, т.е вести так называемую ретроспективу. Но об этом поговорим как-нибудь в следующий раз.

 

Скрипты JavaScript, Python, файл базы данных

Содержание всех статей по Raspberry Pi




Категория: | Просмотров: 10638 | Добавил: Admin | Теги: | Рейтинг: 5.0/1 |
Всего комментариев: 3


2 123ksn  
Спасибо за очередную полезную статью! Но... Лично я предпочитаю использовать текстовый формат CSV, в котором данные разделены точкой с запятой. Такие файлы Excel считает "родными" и позволяет творить чудеса с информацией, в том числе строить графики, диаграммы и получать суммы, среднее значение, логарифм и прочие цифры интересующего процесса. Например, я могу сказать сколько раз включался насос и сколько времени он проработал.

3 Admin  
0
Так не проблема, установите в настройках gygraphs формат данных, аналогичный CSV (т.е разделение запятыми), вместо расширения txt присвойте файлу базы данных расширение csv и...собственно все smile

А если нет нужды (желания) делать визуализацию на gygraphs, а использовать Excel, то ещё все упрощается - достаточно только формировать файл базы данных. Но ведь и график просматривать придется в таком случае на "стороннем железе" - машине с Windows. А здесь он сразу выводится на страницу. Хотя, тут уже как кому удобней.

1 deniss1900  
Прикольно!!! Еще бы сделать контроллер для замера трехфазной сети и записи в лог с графиком.





T2M © 2024
Сайт управляется системой uCoz