У нас есть водяной теплый пол в комнатах. Управление работой каждого направления теплого пола автоматизировано по температуре в каждой комнате. Как сделана эта автоматизация подробно описывал в статьях: Делаем центр зонального управления теплыми полами.
Теперь придумаем себе задачу мониторинга работы этого центра управления теплым полом. Все события и состояния центра будут отправляться на сервер, размещенный на хостинге в интернет.
В качестве устройства, осуществляющего считывание данных состояния центра управления теплым полом и отправки на сервер, будем использовать Arduino с Wi-Fi модулем.
В качестве программного обеспечения сервера будем использовать MaxSite CMS со специально разработанным плагином.
Подобный плагин для MaxSite CMS, принимающий данные от Arduino UNO, я уже состряпал ранее: My_ESP8266.
Правильным бы было развивать этот плагин дальше, делая его универсальным и оттачивая функционал. Но нет - напишу другой плагин, заточенный под поставленную задачу.
Кстати - а поставлена ли задача?
Постановка задачи мониторинга автоматизации теплого пола.
Задача обычная: собрать информацию датчиками Arduino, передать ее на сервер и обработать на сервере.
Но какую вообще информацию мы можем собрать?
Комнатные термостаты, учитывая гистерезис, подают и снимают напряжение с моторизированных головок направлений теплого пола.
Что мы можем контролировать? По сути только состояния направлений теплого пола: включено/выключено.
Можно еще измерять температуру в контурах теплого пола, но на подаче она будет почти постоянной, выставленной термостатом насосно-смесительной группы.
Можно измерять температуру обратки и температуру на улице. Мы можем измерять температуру обратки на коллекторе теплого пола и температуру обратки трубы каждого направления теплого пола.
Значит мы можем контролировать бинарные состояния направлений отопления и 8 значений температур.
Как мы можем обработать эту информацию?
Мы можем построить график температур но это мало полезно. А что еще?
Для каждого направления мы можем генерировать суточный отчет - % времени, который направление было включено.
Интересным также будет среднее время, которое было включено (t_on) и выключено (t_off) каждое направление за период и за сутки.
t_on будет означать теплоемкость (инерционность) помещения.
t_off будет означать теплопотери (утепленность) помещения.
Можно вычислить зависимость этих параметров от температуры на улице.
Отклонение текущего значения от стандартных, вычисленных на основе статистики наблюдений, будет означать нештатную ситуацию.
Задача уже становится интересной - не правда ли?
Структура базы данных.
Правильное хранение информации в базе данных - это уже 50% решения задачи.
Логично, чтобы Arduino отправляло на сервер моменты смены состояния направлений и сразу же скопом значения всех датчиков температуры.
На сервере надо сразу все это писать в таблицы.
Будут таблицы - справочники сущностей, задаваемые в начале работы: комнаты, датчики.
Таблицы измеряемых значений: моменты, интервалы, температуры.
Комнаты (направления).
Id | Номер комнаты | |
Name | Название комнаты | |
No | Номер штуцера на коллекторе | |
S | Площадь, м кв | |
V | Объем, м куб | |
Q | Условный расход воды через расходомер, л | |
T | Условная комфортная температура | |
n | Количество циклов, по которым были вычислены следующие поля | |
t_on | Средняя длительность интервала включенности | |
t_off | Средняя длительность интервала выключенности |
Датчики.
Id | Номер датчика | |
Name | Название | |
Type | Тип | |
T | Ожидаемая температура | |
T_low | Опасно низкая температура | |
T_hight | Опасно высокая температура |
Моменты.
Id | ||
Time | Время возникновения события | |
Room_ID | Направление, в котором возникло событие | |
Type | 0-выключился, 1-включился |
Непонятно что делать, если по одному направлению подряд пришло событие одного типа.
Интервалы.
Это вспомогательная не реляционная вычисляемая таблица. Интервал будет добавляться при добавлении момента.
Id | ||
Time_1 | Время начала интервала | |
Time_2 | Время окончания интервала | |
Room_ID | Направление интервала | |
Type | 0-был включен, 1-был выключен | |
Time | Длительность интервала |
Непонятно как обрабатывать переход суток.
Температуры.
Id | ||
T_id | Номер датчика | |
Value | Значение датчика | |
Time | Время измерения |