Устройства на MQTT-SN протоколе для домашней автоматизации и IoT.

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Ответить
x13dev
Сообщения: 356
Зарегистрирован: 22 окт 2012, 11:40
Откуда: Бавария

Устройства на MQTT-SN протоколе для домашней автоматизации и IoT.

Сообщение x13dev » 22 апр 2017, 22:28

Выкладываю певую бету на всеобщее обзрение. У кого есть возможность, пожалуйста потестируйте.

На текущий момент реализованы:
  • Сервер - запускается под Windows и Linux(mono).
  • GUI - режим отображения инспектор, вывод логов
  • MQTT - MQTT клиент, подключение к сторонним MQTT Broker. Данные передаются в JSON формате.
  • MQTT-SN - ищет и подключает устройства по Ethernet(UDP) и последовательному порту
  • Logramm - реализация графического языка программирования
Для подключения к северу: клик на лого ->Connections->нужный сервер->Open
connect.jpg
connect.jpg (9.63 КБ) 1215 просмотров
В MQTT-SN пока реализованы GPIO и Serial. TWI и EmbeddedPLC в планах.
Из новых фич:
Переменные можно переименовывать - Op7 -> RoomLight
Появились входные/выходные конвертеры.
av.jpg
av.jpg (34.19 КБ) 1215 просмотров
MQTT
Для репликации топика на MQTT сервер нужно: создать в манифесте топика MQTT, и туда записать сервер, путь и маску.
MQTT.jpg
MQTT.jpg (22.24 КБ) 1215 просмотров
В ioBroker нужно поставить галочку в "Использовать заплатку для Chunking:"
В "Маска для собственных значений:" прописать маску, что осылается клиенты. Например "mqtt.0.Test.*", иначе будет отсылаться ВСЁ

Скачать можно здесь

Жду отзывов.
Последний раз редактировалось x13dev 02 янв 2018, 15:34, всего редактировалось 1 раз.

x13dev
Сообщения: 356
Зарегистрирован: 22 окт 2012, 11:40
Откуда: Бавария

BME680

Сообщение x13dev » 16 ноя 2017, 12:30

if.png
if.png (30.83 КБ) 875 просмотров
Мне тут пришёл датчик окружающей среды от Bosch - BME680. Предыдущий датчик из этой линейки (BME280) умеет измерять температуру, давление и влажность, а этот ещё должен мерять концентрацию газов в воздухе, а конкретно летучих органических веществ(VOC). В официальной документации написано, что принцип работы основан на свойстве изменения проводимости материала при контакте его с определяемым газом при нагреве. Т.е. сенсор нагревается, у нагретого сенсора измеряется сопротивление, можно задать до 10 таких температур. Я тестировал этот датчик в зип-пакете, а надо бы конечно в герметичной камере, но у меня такой возможности нет. Для удобства восприятия на графиках показана обратная величина, т.е. константа делённая на сопротивление.
В первом эксперименте ничего не происходило, просто чистый воздух
normal.png
normal.png (71.56 КБ) 875 просмотров
во втором добавил этиловый спирт
ethanol.png
ethanol.png (57.63 КБ) 875 просмотров
в третьем изопропиловый спирт
2-propanol.png
2-propanol.png (67.95 КБ) 875 просмотров
Видно что показания датчика резко поменялись, на чистом воздухе показания от 2 до 20, а с примесями от 200 до 1300, т.е. разница 1-2 порядка.
Был ещё эксперимент с угарным газом, но на него датчик не отреагировал, выглядит как график чистого воздуха.
Реакции на бытовой газ - бутан/пропан так-же не было.

Если для температуры, давления и влажности всё понятно, то для датчика газа есть только вот это сопротивление и как перевести его в концентрацию непонятно. Конечно имеется библиотека(BSEC), но под очень ограниченное число платформ и использовать её не удалось. Как бы из всего этого получить нормальные цифры IAQ индекса (Indoor air quality) или концентрации газов в ppm? Может есть какая-то стандартная обоснованная методика или они на коленке всё подгоняли?

Похоже датчик предназначен только для поиска утечек алкоголя дома.
Последний раз редактировалось x13dev 02 янв 2018, 15:35, всего редактировалось 1 раз.

Andrey_B
Администратор
Сообщения: 3732
Зарегистрирован: 18 мар 2011, 12:06

Re: Устройства на MQTT-SN протоколе для домашней автоматизации и IoT.

Сообщение Andrey_B » 16 ноя 2017, 17:21

Вероятно, фирма Bosch неспроста закрыла свой код для расчета IAQ. Видно, там нетривиальный алгоритм.
Существуют описания расчета AQI (Air quality index) на основе значений ppm по разным газам, но туда входит CO. Если BME680 не определяет CO, то да, возникают сомнения в объективности такого индекса.
Впрочем, такой датчик можно попробовать, например, поставить в приточку на предмет автоматического определения всяких запахов. Подобные ставят в автомобили (TGS822, MP503 и т.д.) Тогда приточка, возможно, будет автоматически отключаться, если соседи решат пожечь листья (вряд ли актуально для Баварии ;) или откачать выгребную яму.

x13dev
Сообщения: 356
Зарегистрирован: 22 окт 2012, 11:40
Откуда: Бавария

Logramm

Сообщение x13dev » 24 дек 2017, 21:15

Вот и прошла самая длинная ночь в году. Впереди праздники и надеюсь у Вас найдется время поиграть с новинкой. Тадам! Первая открытая бета плагина Logramm.
Logramm.png
Logramm.png (11.37 КБ) 544 просмотра
Как уже упоминалось теперь блоки можно самостоятельно создавать и делится ими.
Для блока нужно описать входы-выходы и логику на JavaScript.
Пример: блок logic inverter.

Код: Выделить всё

class NOT{
  Calculate(pin){
    this.SetState("Q", !this.GetState("A"));
  }
}
Метод Calculate вызывается при изменении входных переменных.

Было решено отказаться от событийной модели вычислений в пользу синхронной. Теперь корректно обрабатываются циклы, как например у блока A01 на изображении выше. В зависимости от загрузки системы A01 выдаёт до UPD32 импульсов в секунду и это под Windows.
Все изменения независимо от объёма вычислений производятся за один тик.
Последний раз редактировалось x13dev 01 фев 2018, 17:15, всего редактировалось 1 раз.

x13dev
Сообщения: 356
Зарегистрирован: 22 окт 2012, 11:40
Откуда: Бавария

Re: Устройства на MQTT-SN протоколе для домашней автоматизации и IoT.

Сообщение x13dev » 02 янв 2018, 15:58

Поздравляю всех с наступившим 2018 и желаю успехов и свершений.

В JavaScript ядро добавлен класс XMLHttpRequest. Для примера реализован экспорт данных в narodmon.ru

Код: Выделить всё

    this.xhr = new XMLHttpRequest();
    this.xhr.open("POST", "http://narodmon.ru/post.php");
    this.xhr.send(msg);
Так-же обновил реализацию Console, теперь сообщения пишутся в системный лог.

Код: Выделить всё

    Console.error("Сообщение об ошибке");
    Console.warn("Осторожно! Сингулярность приближается!");
    Console.info("Время: "+(new Date()).toString());
    Console.debug("step 7 pass");

x13dev
Сообщения: 356
Зарегистрирован: 22 окт 2012, 11:40
Откуда: Бавария

Погодная станция 1/2

Сообщение x13dev » 23 фев 2018, 16:36

osSens1.jpg
osSens1.jpg (29.34 КБ) 334 просмотра
Знать о происходящем за окном - это не только интересно, но и полезно. Особенно в домашней автоматизации. Данным об условиях снаружи найдётся применение и в отоплении и в освещении. Не забыть и на экранчик вывести - для людей.
При разработке данного устройства были учтены следующие требования:
  • зарядка от солнечной батареи
  • контроль заряда батареи. Пережиток с ранних версий, где батарейки могли закончиться в самый неожиданный момент
  • датчики температуры и давления
  • датчик освещённости
  • всё это должно поместиться в найденный на просторах Интернета корпус
В качестве датчика давления и температуры был взят BME280 от Bosch. Он хорошо себя зарекомендовал в предыдущих вариантах погодных сенсоров, не имеет аналогов в данной ценовой категории, широко доступен и разрешён для применения вне помещений. BME280 установлена горизонтально, чипом вниз. Так конденсат стекает вниз и не заливает датчик.
Чтобы не отвлекаться каждый раз - большинство компонент данной погодной станции использовались в других проектах на протяжении последних 3 и более лет, работают стабильно и не вызывают желания искать альтернативы. Все дорожки на платах, между которыми есть разность потенциалов, покрыты лаком. Красненький такой. Выглядит оно конечно непрезентабельно, но положительно сказывается на времени жизни устройства в агрессивной среде.
В качестве датчика освещённости используется BH1750. Оба датчика по TWI подключены к Panstamp’у, у которого на борту имеется микроконтроллер ATMega328 и трансивер CC1101.
osSens2.jpg
osSens2.jpg (58.89 КБ) 334 просмотра
Перейдём к подсистеме питания. В качестве аккумулятора используется LiFePo4 элемент типоразмера 18650. Для такого выбора есть 2 важные причины: такие аккумуляторы хорошо переживают низкие температуры и имеют приятную характеристику зарядки/разрядки, практически до полной разрядки держат напряжение на выходе 3.3 вольта. Солнечная батарея имеет размер 12 на 6 сантиметров и выдаёт 3 вольта до 0.25 Ампер. Избыточная мощность позволяет получать энергию от солнца даже пасмурными зимними днями. В качестве контроллера зарядки используется BQ25504 от Texas Instruments. Из преимуществ: начинает работать при напряжении на солнечной батарее от 0.35 вольта, имеет встроенный step-up, настраиваемый выход power good и защиту от перегрева. Недостатки: трудный для пайки VQFN корпус и для этого аккумулятора нельзя использовать распространённые солнечные батареи с выходным напряжением 4 вольта. Платы и корпус для солнечной батареи были изготовлены на CNC. Сборка производилась отвёрткой и добрым словом.

С железом закончили, можно переходить к подключению. Первым делом надо прошить микроконтроллер. Скачать A1C12.hex, залить в устройство, готово.
В течении пары секунд устройство найдёт гейт и появиться в папке /dev, теперь его надо сконфигурировать.
Первым делом добавим вход Vcc - напряжение питания микроконтроллера. Для этого правый клик на ветке children и в контекстном меню выбрать Vcc.
osSens3.png
osSens3.png (25.21 КБ) 334 просмотра
Для преобразования значений АЦП в вольты нужно добавить конвертер. Для этого правый клик на ветку Manifest.MQTT-SN и в контекстном меню выбрать convIn. В поле convIn ввести функцию преобразования, при следующем обновлении данных топик Vcc получит уже сконвертированные данные.
osSens4.png
osSens4.png (16.95 КБ) 334 просмотра
Для подключения датчиков BH1750 и BME280 их надо добавить через контекстное меню к топику Ta0.
osSens5.png
osSens5.png (17.86 КБ) 334 просмотра

x13dev
Сообщения: 356
Зарегистрирован: 22 окт 2012, 11:40
Откуда: Бавария

Погодная станция 2/2

Сообщение x13dev » 23 фев 2018, 16:39

Все данные уже есть остались последние штрихи.
Создать поле Manifest.MQTT-SN.ADCintegrate и присвоить ему 512. Здесь задаётся в течении скольки тиков нужно накапливать значения от АЦП перед их отсылкой. Тик у устройства 10 мс.
Теперь создать поле Manifest.MQTT-SN.SleepTime - на сколько секунд устройство уходит в режим энергосбережения.
osSens6.png
osSens6.png (29.03 КБ) 334 просмотра
Готово. Данные о погоде есть, теперь можно их использовать. Для тренировки выгрузим эти данные на narodmon.ru.
Для этого воспользуемся возможностями плагина Logramm - графического языка программирования. Мышкой перетаскиваем переменные (температура, давление и т.д.) на лограмму, поблизости кладём плагин для narodmon, присоединяем переменные к входам плагина. Блок A02 нужен для коррекции значений с датчика освещённости, поскольку сенсор находится в корпусе без прозрачного окна. Но нет худа без добр, так увеличился динамический диапазон и сенсор не слепнет даже на прямом солнце. По результатам нескольких измерений была выведена формула : return Math.round(Math.pow(A*9.15, 0.93));
Данные на narodmon.ru передаются каждые 5 минут.
osSens7.png
osSens7.png (24.04 КБ) 334 просмотра
Осталось настроить страницу на narodmon.ru. Уникальный MAC-адрес устройства мониторинга берётся из топика A01/Id.
osSens8.png
osSens8.png (83.01 КБ) 334 просмотра
В качестве награды можно любоваться графиком.
osSens9.png
osSens9.png (86.36 КБ) 334 просмотра

Ответить