FOTA

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

Изначально я смотрел в сторону поддержки алгоритмов типа AES, и конечно же на не дорогих МК ее нет.
Но я нашел решение.

FOTA будет, и это здорово.

Гидропоника

Допустим, я занялся гидропоникой и хочу использовать свой проект для автоматизации процессов.

Здесь я опишу возмодности проекта и что именно я буду делать на первых шагах.



И так, у меня есть модули для различных датчиков качества воды, типа такого:

Еще есть дозаторы типа (или даже проще, один двигатель, без логики):

Ну и нужен свет.




Казалось бы что проще? Берем ардуино, качаем с сайта производителя https://atlas-scientific.com документацию по протоколу, реализуем его на ардуино (либо даже берем готовую библиотеку, наверное она где-то есть)
И все делаем сами, т.е. сценарии, информирование, удаленный доступ, сбор статистики и прочее, прочее, прочее.

Но я же все эти вопросы уже решил в своем проекте.
Проект представляет из себя три ключевых узла - Java контроллер, сервер, клиент. Также есть различные собственные конечные устройства и различные шлюзы.

Для работы конкретно с вышеописанными устройствами я могу использовать мини компьютер с шиной I2C, либо любой другой компьютер с большим набором UART (например USB-UART устройства).
На этом компьютере будет работать Java контроллер, он будет выполнять все взаимодействие с устройствами, в том числе и выполнять различные сценарии. Данные контроллер будет передавать серверу, а тот их отдавать клиентам и агрегировать.

Мне незачем знать API/протокол EZO устройств, они уже реализованы в проекте (кроме дозатора, об этом позже).

Точно также обстоят дела и с другими устройствами, например управление светом, датчик открытия двери и прочее.
Теоретически я их всех могу подключить к мини компьютеру через GPIO. Но что делать с обычными компьютерами?
Можно прикупить китайских железяк и подключить их по USB к примеру.

Но я пойду другим путем. Жаль, сейчас нет железок под рукой, фото будут позже.
Я возьму решение от Dipex. Мы разработали множество различных модулей.
Среди них есть модули специально для EZO модулей, есть USB шлюз с шиной DipexBus, есть мини компьютер с платой расширения DipexBus, есть специальный модуль для диммирования светодиодных ламп со стабилизацией по току. У нас много железяк, и некоторые специально разрабатывались для данной задачи.

Да, DipexBus проприетарная, но и ее протокол мне не нужен, все в проекте. Мне не за чем работать с DIpex модулями напрямую, так же как и с EZO модулями напрямую.

В итоге, я подключаю USB-DipexBus шлюз в любой компьютер или использую мини компьютер с платой расширения I2C-DipexBus. К нему подключаю EZO Dipex модули (в любом количестве) вставляю в них EZO модули и подключаю датчики. Также на шину подключаю Dipex LED диммер, DIpex IO модули и прочее.

Вот в качестве примера (только здесь другие модули и без корпуса):
photo_2020-05-20_18-30-39.jpg

Таким образом я объединяю DipexBus'ом все свои датчики и исполнительные устройства. Шина реализована на RS485 с поддержкой до 128 устройств.

По поводу дозатора. Мы не стали использовать дозаторы от atlas-scientific, у нас обычные дозаторы (двигатель на 18 вольт) которые управляются отдельным многоканальным модулем Dipex. Библиотеки дозатора atlas-scientific в проекте нет, но его можно добавить при желании.

Теперь программная часть.

Как минимум мне нужен Java контроллер. Он будет выполнять сбор данных, управление и обработку сценариев (логика), передачу данных и событий на сервер для дальнейшей передачи этих данных клиентам, агрегации, информирования, и прочее.

Клиент - отображение показаний, управление устройствами и настройка сценариев и проекта.
Он может работать через сервер или напрямую (если клиент и контроллер находятся в локальной сети)

Т.е. регистрируюсь и описываю проект через клиента.
Здесь все достаточно просто. Dipex устройства умные, автоматически распознаются и прописываются в системе.

TODO: позже добавлю здесь видео.


Вот теперь мы добрались до API (на тот случай, если полнофункциональный клиент чем-то не угодил). Если мы не хотим использовать сервер и планируем выполнять его задачи сами, то в принципе можно реализовать на базе API свое решение и работать с контроллером напрямую (в точности как это делает клиент).

Либо можем работать через сервер, и здесь варианты:
В данном случае нам нужен итоговый результат. Т.е. показания устройств, статистика, возможность изменять налету проект и сценарии.
Все это можно сделать через аналогичный API (также использует клиент).
Сервер поддерживает несколько подключений, через которые можно использовать API:
- внутренний бинарный протокол (можно предоставить Java библиотеку с его реализацией)
- голый TCP с JSON
- HTTP с JSON
- WebSocket c JSON
Документация будет доступна после написания.

Кроме этого, управлять и собирать показания можно через так называемые точки входа - Telegram, Алиса, email, HTTP и прочее. Методы работы специфичны для каждой точки доступа. Документация также будет доступна после написания.



В общем самый тру подход на мой взгляд - это использовать Dipex модули, и три основных компонента проекта.
В этом случае будет доступен максимальный функционал почти полностью покрывающий все мои пожелания.
А если чего-то нет, то можно и доработать.

Пока все, буду обновлять по необходимости.

P.S. По поводу пожеланий, я постараюсь найти время и выполнить ваше пожелание (например написать документацию по API). Но при одном условии - Вам действительно нужна эта документация (чтобы я не писал ее в пустую сейчас)

Update 03.01.2021

Я благодарен пользователям, которые оставляют мне комментарии. Благодаря им я вижу о чем забыл сказать или о чем стоило бы повторить.

Ранее я не раз говорил, что мое решение представляет из себя конструктор, т.е. мой конечный клиент либо интегратор, либо самоделкин (DIY любитель).

Клиент, который я предоставляю, является основным инструментом для интегратора. Пользователь тоже может им пользоваться, но для пользователя он будет слишком громоздким и не совсем удобным.
Зачем пользователю такой клиент, если ему нужно просто включать свет в паре комнат?

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

Но, в рамках данной задачи (гидропоники), для специалистов я бы создал специальный веб проект, где были бы выведены многочисленные графики, сгруппированы показания, выведены специальные элементы модификации проекта (параметров устройств и сценариев).
API открытое, этим проектом может заняться сторонняя компания, а можно обратиться в Dipex Group - они могут разработать дизайн, WEB портал и разместить его в своем ЦОД'е.

Умная розетка от 'Xiaomi'

После полугода использования (очень редко и ненадолго включал через нее лампу дневного света).




Выбило пакетник на десятки ампер. Благо пакетник был не 'Xiaomi' с Wi-Fi.

В общем очееень умная розетка.
Это же надо додуматься в каждое устройство всунуть блок питания.
Да еще и Wi-Fi модуль, который сам по себе не плохо кушает.
И главное реле на 12 вольт поставить, с отдельным блоком 'питания' в виде резистора с конденсатором, который в итоге и коротнул.

Хотя главное то что? Главное чтобы пипл хавал!

Новый функционал, поддержка Меркурий230 и другое

Сегодня я реализовал новую библиотеку устройства - электросчетчика Меркурий230 от компании Инкотекс.

К сожалению у меня нет под рукой этого счетчика, поэтому код писал вслепую.
Необходима проверка на работоспособность.
А еще лучше временно дать мне доступ по TCP к этому девайсу.
Библиотека безвредна, хоть и написана вслепую.
В крайнем случае просто не пройдет опрос.

Кроме этого пофиксены мелкие и не очень баги контроллера и выложена новая версия с новыми библиотеками устройств.

Так-же в библиотеке основного протокола временно отключено сжатие, так как в алгоритме есть ошибка приводящая в некоторых случаях к временной потери соединения.
Ну и до кучи исправлены мелкие недочеты которые затронули сервер, клиент и контроллер.
Новые версии последних двух выложены на сервер.

http://5277.ru/distr/client/0.36/
http://5277.ru/distr/controller/0.7.7/

Приморский старт

Есть такая партия программа - Программа поддержки молодых проектов "Приморский старт".

Мой проект был на ней показан, даже дошли до 3-го этапа, но не прошли в финал.

Я и не надеялся на успех ввиду своего мировозрения.
И все бы ничего, но меня смущает одна вещь.

Открываем сайт https://primstart.rutechpark.ru/ и ознакамливаемся с целью программы:

Приморский край богат не только природными, но и человеческими ресурсами. За последние годы мы познакомились с многими талантливыми предпринимателями Приморья, которые проводят собственные научные исследования, находят нестандартные решения стандартных проблем, создают новые продукты и технологии, способные сделать жизнь Приморцев комфортнее, безопаснее, ярче. К сожалению, на этапе разработки у многих проектов возникают проблемы с финансированием, так как очень сложно совмещать сложную исследовательскую работу и заработок. Целью программы «Приморский старт» является поддержка молодых инновационных проектов Приморья, находящихся на начальной стадии развития, но имеющих потенциал к коммерциализации.

Обращаем внимание на выделенное.

Мне одному кажется, что здесь речь о стартапах?
Т.е. о проектах которые еще не приносят доход и нуждаются в финансировании для последующей коммерциализации.

Я присутствовал на финальном отборе и никак не мог взять в толк, почему в финал попали компании, которые имеют доход по продвигаемому проекту?
Т.е. они реально уже продают свою продукцию.

Update. А вот сслыка на новостной ресурс (на основном забыли разместить список победителей) https://www.primorsky.ru/news/227945/

Цитирую: Так, например, конструктор сайтов с искусственным интеллектом «Айгер» помогает приводить клиентов из интернета предпринимателям, которые не имеют навыков интернет-маркетинга и не умеют проектировать продающие сайты.

Как вам победитель?
Как я услышал,  у него все хорошо, есть хорошая прибыль (на волне короновируса), есть конструктор сайтов (которых и так уже десятки), но с ИИ (правда в будущем, правда не ИИ а всего лишь матрица)

Ответы на вопросы

Уважаемый vladikoms задал мне несколько вопросов, отвечаю на них здесь.

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

Просто дело в том, что я не могу выделять много времени на проект, да и задачи закрываются достаточно хаотично, так как нет фидбека. К примеру документация - описать все займет неимоверно много времени.
Но, можно было бы описать для начало то, что не понятно, но нет фидбека, не ясно что не понятно.
Точно также обстоит дело с функционалом и с библиотеками устройств.

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

Теперь вопросы:
1. Имеется ли подробная инструкция как всё запустить и настроить?

  Имеется несколько видеороликов на ютуб и статей в моем ЖЖ:
https://5277.livejournal.com/24482.html
https://5277.livejournal.com/23897.html
https://5277.livejournal.com/24066.html
https://5277.livejournal.com/23690.html

  Есть пара статей о сценариях:
https://5277.livejournal.com/26013.html
https://5277.livejournal.com/31432.html

  Кое-какая информация также есть в других моих статьях.
Если есть вопросы или необходимость к определенной документации - рад буду ответить или написать новый пост (а потом, на базе постов собрать все в документацию). Это однозначно будет полезно.

2. Как понимаю, в настоящее время облачный контроллер не функционирует?
  Даже и не знаю (причина описана выше, не востребовано),  функционал был написан, оттестирован и забыт. Возникнет проблема - просто нужен фидбек - починю.

3. Хотелось бы иметь возможность подключать к системе и опрашивать сторонние устройства по RS485. Насколько сложно самому написать такую библиотеку, при условии что протокол обмена является открытым? Например, для простого однофазного счетчика Меркурий 206.

Вот, в качестве примера:
Температурный датчик Lumel p18
http://5277.ru/distr/other/src/x0005x0001_lumelsa_p18.java
Электросчетчик СЭБ-2А
http://5277.ru/distr/other/src/x0004x0001_frunze_seb2a.java

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

Класс библиотеки устройства должен быть наследован из абстрактных классов библиотеки интерфейсов http://5277.ru/distr/interfaces_lib/c5277_interfaces.jar, в ней-же есть примеры.

По поводу написания библиотеки самому - идея не доведена до ума.
Главная проблема в том, что многие параметры устройства и его показания задаются в БД и в выше обозначенной библиотеки.
Т.е. стороннему разработчику как-то нужно объяснить системе какие параметры и показания есть у устройства.
Этот вопрос на данный момент не решен.

Но есть другой вариант взаимодействия - я готов на бесплатных началах реализовывать библиотеки устройств (конечно если они не супер сложные, над которыми придется убить далеко ни один день типа как ВКТ-7) .
Мне нужно описание протокола и/или доступ к нему (например через TCP/IP с преобразователем в RS485). А еще будет полезен рабочий пример или дамп.
Какую-то информации я смогу найти сам.
Иногда будет достаточно просто просьбы.

И это будет и мне плюсом, так как чем больше устройств в проекте - тем он привлекательней.

Еще, можно обратиться ко мне с описанием параметров и показаний устройства, я их добавлю в систему и тогда можно будет самому писать библиотеку. Но я оставляю за собой право инспекции и правок перед распространением этой библиотеки.

И потом, при разработке библиотеки кем-то со стороны не решается вопрос ее распространения.