Добрый день!
хочу подключить к WB Универсальный одноплатный контроллер SYBERIA (версия 5.0) для управления вентиляционными установками. подскажите как я могу это сделать. Производитель прислал список Регистров. Устройство подключено ко второму порту RS-485 контроллера. Что-то подсказывает что нужно написать шаблон.
Добрый день. Для начала - надо к нему подключиться, проверить что регистры можно считать. С помощью https://wirenboard.com/wiki/Modbus-client например.
А потом - да, шаблон. Если что - поможем, это несложно и пример недавно выкладывали.
{
"device_type": "syberia5",
"device": {
"name": "syberia5",
"id": "syberia5",
"max_read_registers": 60,
"channels": [
{
"name": "State_0",
"type": "text",
"reg_type": "input",
"address": "2",
"format": "u16"
},
{
"name": "State_1",
"type": "text",
"reg_type": "input",
"address": "3",
"format": "u16"
},
{
"name": "Error_Code",
"type": "text",
"reg_type": "input",
"address": "4",
"format": "u16"
},
{
"name": "Error_Code_1",
"type": "text",
"reg_type": "input",
"address": "5",
"format": "u16"
},
{
"name": "Error_Code_2",
"type": "text",
"reg_type": "input",
"address": "69",
"format": "u16"
},
{
"name": "Error_Code_3",
"type": "text",
"reg_type": "input",
"address": "70",
"format": "u16"
},
{
"name": "ZagrFiltr1",
"type": "text",
"reg_type": "input",
"address": "14",
"format": "u16"
},
{
"name": "TKomn_x10_P",
"type": "temperature",
"reg_type": "input",
"address": "57",
"format": "u16",
"scale":0.1
},
{
"name": "Room_Hum_P",
"type": "humidity",
"reg_type": "input",
"address": "58",
"format": "u16"
},
{
"name": "Tkan_x10",
"type": "temperature",
"reg_type": "input",
"address": "07",
"format": "u16",
"scale":0.1
},
{
"name": "TNar_x10",
"type": "temperature",
"reg_type": "input",
"address": "11",
"format": "u16",
"scale":0.1
},
{
"name": "Fan_State_1",
"type": "value",
"reg_type": "input",
"address": "25",
"format": "u16"
},
{
"name": "Reg",
"type": "value",
"reg_type": "input",
"address": "18",
"format": "u16"
},
{
"name": "VAV",
"type": "ppm",
"reg_type": "input",
"address": "66",
"format": "u16"
},
{
"name": "A_In_VAV_Code_I3",
"type": "value",
"reg_type": "input",
"address": "34",
"format": "u16"
},
{
"name": "A_In_Rsv_I4",
"type": "value",
"reg_type": "input",
"address": "35",
"format": "u16"
},
{
"name": "A_In_VAV_I3_mV",
"type": "voltage",
"reg_type": "input",
"address": "42",
"format": "u16",
"scale": 0.001
},
{
"name": "A_In_Rsv_I4_mV",
"type": "voltage",
"reg_type": "input",
"address": "43",
"format": "u16",
"scale": 0.001
},
{
"name": "Power_Dev",
"type": "switch",
"reg_type": "holding",
"format" : "u16",
"address": "2"
},
{
"name": "Temp_Target",
"type": "range",
"reg_type": "holding",
"address": "31",
"scale": 0.1,
"max": 30
},
{
"name": "Fan_Target_1",
"type": "range",
"reg_type": "holding",
"address": "32",
"max": 10
}
]
}}
Разместите этот код в файле. syberia5.json и скопируйте файл в папку /usr/share/wb-mqtt-serial/templates
Далее обновить веб интерфейс контроллера (F5) и в списке шаблонов устройств должен появится syberia5 доступным контроллер.
Важно ! Это не финальная версия, выкладываю потому что спрашиваете. Веду доработку шаблона и по сему, use with caution…
P/S Так как у меня этот контроллер установлен в ПВУ350 (вентмашина) с VAV, вам может недоставать каких то регистров или наоборот, будут видны не нужные. Сейчас пока работает кривовато в части VAV системы. Как закончу, попрошу опубликовать шаблон на сайте GTC.
PP/S Параметр устройства Interval between register reads может понадобится откорректировать для конкретно вашей установки. Не всегда контроллер успевает ответить на частые запросы.
Сейчас попробую.
Доброго дня!
В прицепе все норм, но только не понимаю для чего функция VAV. И где достать таймер обратного отсчета для включения или выключения.
Дополнительно интересует описание ошибок например : Error_Code_1 у меня выдает 4096
А State_0 выдает 449
Ну и сюда выложите пожалуйста, добавим со ссылкой в поддерживаемые.
Хорошее описание именно VAV системы вы найдете вот в этом Видео: https://www.youtube.com/watch?v=Wb5Q1uifIcA
Таймер исполнения текущей операции находится в 0x07(07) регистре. (у меня не выведен). При правке файла учитывайте пожалуйста смещение (на самом деле 0x06 (06) вместо указанного в карте).
По кода ошибки, необходимо делать дополнительную обработку, поскольку контролер Syberia отдает обычную битовую последовательность как флаги состояния ошибок.
Для того чтобы понять какую именно ошибку выдает контроллер делаем следующее:
Берем код ошибки и вносим в windows калькулятор в виде программиста как Dec (4096). Затем меняем отображение на Bin. Получаем битовую маску: 1000000000000
Видим что у нас есть 13й бит (считаем справа налево). Остальные 0. Смотрим в карту регистров и видим:
Bit 12 – температура рекуператора больше заданной (начиная с версии 1.0.18)
Иначе говоря температура подачи воздуха больше заданной (должен на пульте гореть соответствующий индикатор.)
Насчет State_0 делаем аналогично… (111000001) 0 ,6,7,8 биты выставлены.
Смотрим в карту:
State_0 – Состояние устройства: слово 0 (битовое поле)
Bit 0 – установка включена (1) / выключена (0)
Bit 1 – переход к состоянию, указанному в «Bit 0»
Bit 2…Bit 5 – резерв
Bit 6 – режим нагрева есть (1) / нет (0)
Bit 7 – режим охлаждения есть (1) / нет (0)
Bit 8 – текущий режим работы системы: нагрев (1) / охлаждение (0)
Bit 9 – таймер на ближайшие сутки есть (1) / нет (0)
Bit 10 – таймер на ближайшую неделю есть (1) / нет (0)
Bit 11…Bit 12 – приоритеты
0 – нет
1 – влажность
2 – СО2
3 – давление
Bit 13…Bit 15 – резерв
Видим:
1 - установка включена.
6 - режим нагрева есть.
7 - режим охлаждения есть.
8 - текущий режим работы - нагрев.
Остальные регистры по образу и подобию… Очень надеюсь что описал достаточно точно для самостоятельного воспроизведения.
Обязательно. Но боюсь без спецов команды Wiren и допиливания wb_mqtt_serial не обойтись… Текущий метод хранения флагов у контроллера Syberia не нативен для wiren. Либо нет, либо я пока не разобрался как привести шаблон к пониманию формата битовой маски что применена в контроллере Cyberia. Остальные параметры без проблем всосались и работают штатно фактически по всей карте регистров.
Мужик ты крут, а не пробывал это прикидывать в HomeKit через nodered
Это несколько другой уровень абстракции нежели тот о котором идет речь в этом топике. Позднее, на базе обрабатываемых данных от MQTT конечно можно будет прикрутить и Nodered и прочие системы. Но пока, речь идет лишь о низкоуровневой интеграции исполнительного устройства и контроллера в роли “церебральной” части системы.
Обновленный шаблон для контроллера Syberia 5. Поправил пару регистров, которые отдавали некалиброванные значения.
Usage:
- Залить в /usr/share/wb-mqtt-serial/templates
- Добавить в списке устройств шаблон “Syberia5”
- … профит.
Важно: Контроллер syberia 5 адекватно работает только на скоростях 115200.
P/S Выключение вентустановки выполняется переключением “Power_ON_OFF”
сначала в “On” и затем сразу в “Off”. Пока этот баг в прошивке не исправлен, однако авторы контроллера обещали поправить.
PP/S Регистры группы “Error_Code_X” предлагается анализровать программно так как это указано выше. В Шаблоне они добавлены.
файл шаблона:
config-syberia5.json (4.5 КБ)
PPP/S Прошу администраторов форума разрешить загружать файлы *.pdf.
Карту регистров для контроллера syberia 5 загрузить не удается.
Сделаем. Может в Вики страничку завести?
Можно. Как я погляжу контроллер Syberia не очень активно меняется… На долго хватит.
Список регистров Оазис v.5.pdf (758.0 КБ)
Исправленная версия. config-syberia5.json (4.5 КБ)
Устранен баг. Исправлено отображение отрицательных значений температуры на входе в установку.
Добавлю кое-чего своего полезного, в т.ч. разбирая по дороге битовые слова.
Это для версии 3 мозгов, но, почти уверен, для 5й версии будет аналогично.
Читаем состояние приточки, в т.ч. вкл/выкл и состояние перехода между ними
defineRule("GTC_state", { //накидываем правило, которое будет менять состояние обозначенных выше контролов после парсинга значения регистра модбас
whenChanged: "GTCController/System State", //когда меняется контрол, считывающий регистр состояния приточки
then: function (newValue, devName, cellName) {
var tempOutput = parseInt(newValue,10); //для начала силой переводим строку в десятичное целое
tempOutput = tempOutput.toString(2); //переводим число в двоичную систему
while (tempOutput.length < 16) { //добиваем слева нули для полного 16-символьного слова
tempOutput = '0' + tempOutput;
}
tempOutput = tempOutput.split(''); //из 16-символьного слова делаем массив
dev["GTC_state"]["Power"] = parseInt(tempOutput[15]); //переводим состояние контроля вкл-выкл к значению бита 0 из слова (считам с конца массива)
dev["GTC_state"]["In transit"] = parseInt(tempOutput[14]); //то же самое для контрола транзита по биту 1 из слова
}
});
Разбирать ошибки можно аналогично разибирая слова на биты.
К счастью, единственный регистр обозванный битовым полем, в которой имеет какой-то смысл что-либо писать, это включить и выключить, и внутри него единственный бит незарезервиован и стоит в позиции “0”, поэтому разбирать на биты этот регистр необязательно. Он, кстати, не меняет своего значения с нуля в зависимости от того, что в него записать, но на запись реагирует адекватно.
Включаю и выключаю пока что так:
defineRule("GTC_state_set_on", { //накидываем правило, которое по кнопкам будет менять параметры приточки
whenChanged: "GTC_state/Turn ON", //при нажатии на эту кнопку
then: function (newValue, devName, cellName) {
dev["GTCController"]["Power h2"] = 1; //включаем
}
});
defineRule("GTC_state_set_off", { //накидываем правило, которое по кнопкам будет менять параметры приточки
whenChanged: "GTC_state/Turn OFF", //при нажатии на эту кнопку
then: function (newValue, devName, cellName) {
dev["GTCController"]["Power h2"] = 0; //выключаем
}
});
А так в принципе накидал для себе такой же дубовый и неэлегантный кусочек кода, который обратно из массива битов собирает значение битового слова, которое можно отправить обратно в мозги.
Интересный вариант. А вот такой способ описания в шаблоне применим для 3й версии?:
{
"name": "Status",
"type": "switch",
"reg_type": "input",
"address": "2:0:1", // нулевой бит маски в регистре 2 (регистр включения)
"format": "u16"
}, {
"name": "In progress",
"type": "switch",
"reg_type": "input",
"address": "2:1:1", // первый бит маски в регистре 2 (контроллер занят)
"format": "u16"
}
Обратите внимание на параметр “address”, где указываются через двоеточие сразу регистр:смещение в битах:длина в битах
Таким образом каждый конкретный бит маски можно сразу вывести в нужный топик.
Что же касается бага с самопроизвольным переключением регистра 3 (Power_ON_OFF) разработчики софта для контроллера syberia обещали поправить. Имхо это решение чуть проще. Менее грузит контроллер , а вывести можно фактически любой параметр состояния контроллера сразу в топик, минуя правила.
Если так работает (а я не знал, что так можно) то работает на трешке. На holding регистры запись так не сработает?
У меня сейчас одновременное и трешка, и пятерка. К пятерке пока не подключался, идет пуско-наладка всего климата (приточка, кондей, увлажнитель).
У меня вентмашина Колибри 500 с автоматикой от GTC. Так как к контролеру подключен пульт управления оазис, то правильно я понимаю что Syberia 5 к WB6 я уже не подключу так как в Modbus может быть только один мастер?