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

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Ответить
x13dev
Сообщения: 349
Зарегистрирован: 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 КБ) 816 просмотров
В MQTT-SN пока реализованы GPIO и Serial. TWI и EmbeddedPLC в планах.
Из новых фич:
Переменные можно переименовывать - Op7 -> RoomLight
Появились входные/выходные конвертеры.
av.jpg
av.jpg (34.19 КБ) 816 просмотров
MQTT
Для репликации топика на MQTT сервер нужно: создать в манифесте топика MQTT, и туда записать сервер, путь и маску.
MQTT.jpg
MQTT.jpg (22.24 КБ) 816 просмотров
В ioBroker нужно поставить галочку в "Использовать заплатку для Chunking:"
В "Маска для собственных значений:" прописать маску, что осылается клиенты. Например "mqtt.0.Test.*", иначе будет отсылаться ВСЁ

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

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

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

BME680

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

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

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

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

Andrey_B
Администратор
Сообщения: 3268
Зарегистрирован: 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
Сообщения: 349
Зарегистрирован: 22 окт 2012, 11:40
Откуда: Бавария

Logramm

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

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

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

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

Было решено отказаться от событийной модели вычислений в пользу синхронной. Теперь корректно обрабатываются циклы, как например у блока A01 на изображении выше. В зависимости от загрузки системы A01 выдаёт от 11 до 5 импульсов в секунду.
Все изменения независимо от объёма вычислений производятся за один тик.

x13dev
Сообщения: 349
Зарегистрирован: 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");

Ответить