• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

domoticz и его расширение со своими устройствами.

Atom

Member
Привет. Кто нить знает плагины для расширения domoticz? И кто как свои датчики к нему подключает?

Если кому то интерена данная тема, то пишите ниже.
 

Atom

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

Совсем другой вид открывается, если прикрутить mqtt и через него подключать свои устройства. Вот именно и в этом весь вопрос. Самая головная боль: индекс реального устройства в domoticz генерируется на основе внутреннего генератора, а у устройства он может быть жестко задан на основании других свойств. Компилировать код для устройства с конкретным индексом конечно можно, но неоптимально. Так же можно делать "конвертацию" на основе скриптов lua/pytoh/bat/bash, что тоже решение, но для профи.

Например у home asistant есть плэгин, позволяющий такое делать. Может у когото свои решения, свой опыт?
 

nikolz

Well-known member
это читал. Там ни слова о разработки своих устройств, а о том как запустить на компе и подключить готовые устройства известных производителей.

Совсем другой вид открывается, если прикрутить mqtt и через него подключать свои устройства. Вот именно и в этом весь вопрос. Самая головная боль: индекс реального устройства в domoticz генерируется на основе внутреннего генератора, а у устройства он может быть жестко задан на основании других свойств. Компилировать код для устройства с конкретным индексом конечно можно, но неоптимально. Так же можно делать "конвертацию" на основе скриптов lua/pytoh/bat/bash, что тоже решение, но для профи.

Например у home asistant есть плэгин, позволяющий такое делать. Может у когото свои решения, свой опыт?
это читали:
 

Atom

Member
опять же: сначала завести устройство на domoticz, затем внести этот код в прошивку.

на 4pda еще не досмотрел, нужно месяц флейм читать о том как вытащить из сервера цвета.
Но за ссылку спасибо
 

CodeNameHawk

Moderator
Команда форума

Atom

Member
Похоже, что каждый видит то, что надеется увидеть.
Есть же там
Попятка номер 2 объяснить суть проблемы.
Смотрим в терминал и видим сообщение из топика:

domoticz/out {
"Battery" : 255,
"RSSI" : 12,
"description" : "",
"dtype" : "Light/Switch",
"hwid" : "4",
"id" : "00014052",
"idx" : 2,
"name" : "lamp",
"nvalue" : 1,
"stype" : "Switch",
"svalue1" : "0",
"switchType" : "On/Off",
"unit" : 1
}

В подобных сообщениях Domoticz сообщает нам об изменении своего состояния. Формат тела сообщения - JSON. В поле name видим название, которое мы ранее установили для switch'а в domoticz. Новое состояние свитча мы можем увидеть в поле nvalue.

Программируем собственные IoT устройства на базе Arduino-like контроллеров.
Теперь, когда MQTT-брокер доступен из сети и Domoticz публикует туда сообщение каждый раз, когда мы переключаем switch, можно заняться программированием микроконтроллера. Задача: подключиться к сети, подключиться к брокеру MQTT, подписаться на нужный топик и парсить сообщения от Domoticz, выделяя те, поле name которых совпадает с названием, захардкоженым в программу, и выполняя переключения встроенного светодиода в зависимости от нового состояния из сообщения. Впоследствии переключаться будет не встроенный светодиод, а реле, управляя каким-либо процессом.

Для реализации данного функционала я использую клон Arduino Uno, Ethernet Shield, а также Arduino-like плату на основе контроллера ESP8266, который способен подключаться к сети по WiFi. Таким образом, у меня будут две версии устройства - с подключением по Ethernet и по WiFi.

Для работы с MQTT я использовал библиотеку MQTT.h. Для парсинга JSON - ArduinoJSON.h.

Изначально, написав скетч для Arduino, я, выставив значение для буферов MQTTClient и ArduinoJSON в 500 байт и использовав преобразование входных данных в класс String, превысил мизерное количество оперативной памяти в 2 килобайта. Уменьшив размер буферов до 300 байт и использовав "сишные" строки, мне удалось уложиться в данный лимит, и даже оставить 300-400 свободных байт, но стало понятно, что модифицировать и усложнять программу, добавлять дополнительную логику в случае этой платы будет затруднительно.

Исходный код скетча Arduino + Ethernet.

Программировать ESP8266 оказалось сильно проще, так как оперативной памяти здесь на порядок больше.

Исходный код скетча для ESP8266(WiFi).

И в коде записано lamp. Но у меня подобных lamp с одинаковой прошивкой много, а в домотиксе регистрируется только единственная. Тем более видеть 'lamp' как то не солидно. Хочется видеть "Лампа в коридоре", "Лампа в кухне" и т.д. При переименовывании в домотиксе вся эта лабуда конвертируется в UTF8 и отправляется в json. А json должен парсится на устройстве, где стоит ограничение на размер payload.

Или другой пример: Управление цветной лентой зарегистрированно как цветной диммер. json конский, хотя нужно только имя, и цвета.

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

CodeNameHawk

Moderator
Команда форума
Что мешает в этом поле задать индивидуальное название?
. json конский, хотя нужно только имя, и цвета.
Для есп размер вряд ли будет проблема.
Упоминалось, что json может разбирать отдельные поля, ищите.

Неужели все разные прошивки для одних и тех же устройств прошивали.
Прошивка может быть одинаковая, а конфигурация(настройки) индивидуальные.
Иногда конфигурация может быть в коде, тогда каждое устройство прошивается "своей" прошивкой.
 
Последнее редактирование:

Atom

Member
Что то не нашел возможность показывать "description" в названиях устройств на дэшборде.

Немного поковырялся и сделал mqttbridge. Соединяется к mqtt сервису, для него составляются правила: при получении mqtt-сообщения по подходящим условиям, создать новый json по описанным в правиле данным и отправляет его на любой топик. Пока сомпилил версию для linux - arm. Как работает под виндой не проверял, но теоретически может.
 
Сверху Снизу