Управление освещением
Презентации
Технические решения на LogicMachine
Визуализация
  logicmachine.net.ru    Технические решения на LogicMachine    Cбор данных с приборов учета потребления ресурсов в реальном времени

Cбор данных с приборов учета потребления ресурсов в реальном времени

Задача:

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

Преимущества решения:

  • Получение данных из управляемых домов в реальном времени.
  • Масштабируемость системы как внутри здания, так и по количеству подключенных домов.
  • Использование шины KNX делает систему отказоустойчивой (нет единой точки отказа).
  • Легкая интеграция в бизнес приложения.

Решение:

Для решения задачи мы будем использовать обычные импульсные счетчики, которые передают информацию о потребление в виде импульсов. Для снятия сигналов с этих счетчиков, мы будем использовать устройство EVIKA Multiport, на которое можно подключить до 8 импульсных счетчиков. EVIKA Multiport преобразует эти сигналы в KNX-телеграммы.
Используйте программу ETS для конфигурации EVIKA Multiport, где можно настроить перевод количества импульсов со счетчиков в измеряемые величины (m3, кВт) и режим отправки телеграмм – по истечению периода времени или изменению значения.

  • Input – Binary impulse counter (Вход – Счетчик импульсов).
  • Counter pulse edge [Rising edge / Falling edge / Both] (Импульса счетчик [Замыкание (Вкл.)/ Размыкание (Выкл.)/ Замыкание и размыкание (Вкл./Выкл.)] – какой сигнал импульса считать.
  • Counter direction [Up/Down] (Направление счетчика [Вверх/Вниз]) – направления счетчика.
  • Number of pulses per counter increment [1–100] (Количество импульсов на шаг счетчика [1–100] – количество импульсов для увеличения счетчика на 1 (например, 10 импульсов сообщают об 1 литре воды > увеличение счетчика на 1).
  • Counter step per each pulse [1–100] (Шаг счетчика на каждый импульс [1–100]) – шаг счетчика для каждого импульса (например, 1 импульс означает 10 литров воды >увеличение счетчика на 10).
  • Send telegram on counter update [Disabled/Enabled] (Отправка значения при изменении значения счетчика [Включено/Отключено])– отправить телеграмму на шину при каждом обновлении счетчика.
  • Periodical send interval [10 s – 10 min] (Отправка значения по таймеру [10 сек. – 10 мин.]) – временной промежуток, после которого число считанных импульсов отправляется на шину

Полная документация по устройству EVIKA Multiport лежит на нашем сайте по адресу: /katalog/multiport-v3-universal-ny-j-kontroller-vvoda-vy-voda-8-mi-kanal-ny-j-uio8-knxv3/

Для передачи данных со счетчиков мы выбрали KNX-сеть по следующим причинам:

  • Для ее прокладки требуется всего одна витая пара.
  • Для работы устройств EVIKA Multiport не требуется дополнительное питание.
  • KNX сеть является децентрализованной сетью, когда при выходе из строя одного устройства это никак не повлияет на работу остальных устройств.
  • Произвольная топология (кроме круга).

Подключенное к KNX-сети здания устройство EVIKA LogicMachine будет получать телеграммы от устройств EVIKA Multiport, которые будут содержать значения счетчиков.

Для обработки этих телеграмм в веб-интерфейсе EVIKA LogicMachine определяем объект соответствующий счетчику и тип данных 12. 4 байта, целое без знака (12. 4 byte unsigned integer).

Создаем скрипт, который будет срабатывать при получении телеграммы на этот групповой адрес:

-- получаем значение счетчика
value = event.getvalue()
 -- получаем идентификатор счетчика, который записан как имя переменной
id = grp.alias(event.dst)
 
 -- передаем значение на веб сервер УК (в данном примере http://192.168.1.15)
http = require "socket.http"
local cmd = string.format("http://192.168.1.15/insert.php?id=%s&value=%d", id, value)
result, statuscode = http.request(cmd)
 
-- сохраняем результат выполнения запроса. Если все выполнилось правильно,  
-- то statuscode будет равен ОК (код 200), иначе сохраняем предупреждение, текст ошибки
 if (statuscode ~= 200) then
        alert('Error: '..statuscode..'. '..result..' query: '..cmd)
end

Скрипт, при получении телеграммы, устанавливает соединение с web-сервером в УК и передает ему HTTP-запрос, содержащий заводской идентификатор счетчика и его текущее значение. Если результат выполнения запроса показывает, что он был выполнен с ошибкой, то сохраняем во вкладке Уведомления (Alerts) текст ошибки и запрос.
На стороне УК может работать на сервере любая связка веб-сервера и СУБД. Например, в данном примере использовали классическую тройку Apache + PHP + MySQL. На базе данных MySQL мы завели пользователя ‘lm_user’ с паролем ‘123456’. Создали интерфейсную таблицу counters.

CREATETABLEIFNOTEXISTS `counters`(
`id` int(11) NOT NULL AUTO_INCREMENT,
`dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`id_counter` int(11) NOT NULL,
`value` float NOT NULL,
PRIMARYKEY (`id`),
UNIQUEKEY `id`(`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=cp1251 COLLATE=cp1251_general_cs AUTO_INCREMENT=1989 ;

В этой таблице мы сохраняем данные от всех работающих EVIKA LogicMachine со всех зданий. (Считаем, что идентификатор счетчика уникальным). Далее данные из этой таблицы можно передать в любое бизнес приложение, но решение этой задачи здесь не описывается. Таблица содержит следующие поля:

  • id – уникальный идентификатор записи в таблице, устанавливается автоматически
  • dt – время вставки записи, устанавливается автоматически
  • id_counter – идентификатор счетчика
  • value – значение счетчика

 Для записи приходящих данных в эту таблицу будем использовать скрипт, написанный на языке PHP и вызываемый веб-сервером. Скрипт разбирает параметры HTTP-запроса, определяет идентификатор счетчика и его значение, устанавливает соединение с базой данных, формирует SQL-запрос для записи в таблицу и выполняет его.

// разбираем http запрос пришедший из EVIKA LogicMachine
$id_c = $_GET["id"];
$value_c = $_GET["value"];
 
if(!$id_c || !$value_c )
{
	// если данные не корректны, то возвращаем описание ошибки
	echo "non correct data";
	exit;
}
 
// соединяемся с СУБД
$db = mysql_pconnect("localhost", "lm_user", "123456");
 
if(!$db)
{
	// возвращаем ошибку если не удалось соединится с базой
	echo "Error connect to database";
	exit;
}
 
// выбираем базу данных
mysql_select_db("data");
// формируем sql запрос к базе данных
$query = "INSERT INTO counters(`id_counter`, `value`)
VALUES(".$id_c.",".$value_c.")";
 
// выполняем запрос
if(mysql_query($query))
{
	//если все выполнилось нормально
	echo "OK";
}
else
{
	// если не смогли выполнить запрос возвращаем ошибку
	echo "Error execute sql query: ".$query;
};
В результ

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

Требуемое оборудование в расчете на здание:

  1. EVIKA LogicMachine.
  2. EVIKA Multiport.
  3. Импульсные счетчики.
  4. EVIKA KNX Дроссель.
  5. Блок питания 25-30В.

Требуемое оборудование на стороне офиса УК

  1. Сервер с установленной СУБД и Веб сервером. Мы советуем использовать Apache+PHP+MySQL.
  2. Постоянный ip-адрес, требуемая скорость доступа зависит от кол-ва счетчиков и частоты передачи данных (для коттеджей может быть достаточно GSM модема).



Copyright
© Embedded Systems Rus
2019. All Rights Reserved