Передача данных температуры M1W2 панель управления

Здравствуйте! У меня есть панель управления ПУ-3, там в регистрах есть внешняя температура (“Outdoor temperature”). Можете подсказать код для wb-rules, чтобы синхронизировать температуру c M1W2 второй канал с ПУ-3?

Шаблон ПУ-3 у меня такой:

{

"device_type":"TemperatureControlPanel",

"device":{

"name":"Temperature Control Panel",

"id":"temp",

"max_read_registers":0,

"channels":[

{

"name":"Current temperature",

"reg_type":"holding",

"readonly":false,

"address":0,

"type":"temperature",

"scale":0.1,

"format":"s16"

},

{

"name":"Mode",

"reg_type":"holding",

"readonly":false,

"address":3,

"type":"value",

"scale":1,

"format":"s16"

},

{

"name":"Speed Vent",

"reg_type":"holding",

"readonly":false,

"address":4,

"type":"range",

"scale":1,

"max":5

},

{

"name":"Target Temperature",

"reg_type":"holding",

"readonly":false,

"address":1,

"type":"range",

"scale":0.1,

"max":35

},

{

"name":"Power",

"reg_type":"holding",

"readonly":false,

"address":2,

"type":"switch"

},

{

"name":"Outdoor temperature",

"reg_type":"holding",

"readonly":false,

"address":9,

"type":"value",

"scale":0.1,

"format":"s16"

}

]

}

}

Заранее спасибо.

Добрый день.
Тут весь “код” - одно правило в общем случае.

defineRule("test_rule", { //имя правила test_rule
  whenChanged: "NAMESOURCE/SOURCE",
  then: function (newValue, devName, cellName) {
    dev["NAMEOFDESTINATION"]["Outdoor temperature"] = newValue;
  }
});

Исправьте имена на свои.

Спасибо за код. Действительно удалось мне передавать данные в “Outdoor temperature”, но решению моей задачи это несильно помогло, потому что в ПУ-3 outdoor temperature нигде не выводится и не управляется на самом ПУ-3((.
Моя задача достаточно простая - мне надо вывести температуру теплого пола (m1W2/External sensor 2) в current temperature на ПУ-3 и далее ею управлять, открывая реле клапанов отопления. Но я так понимаю, что надо как-то изменить шаблон ПУ-3, чтобы туда можно было в [“address”:0] записывать данные с m1w2, при этом на некоторых ПУ-3 оставить и текущий режим работы (считывание со встроенного датчика). Можете подсказать как?

Здравствуйте! Как я понял из инструкции нужно в регистре настроек EP 06 установить значение 1, тогда панель должна отображать значение температуры из регистра MODBUS HR 0. Еще есть настройка в регистре Hr 0, которая, видимо, определяет содержимое регистра MODBUS HR 0. Hr 0 нужно выставить в 1, чтобы туда можно было записывать свое значение. А дальше просто записывать значение температуры с M1W2 в MODBUS HR 0.

1 лайк

Спасибо. Сделал так и на шаг продвинулся. НО! Теперь температура обновляется ежеминутно - ту которую передаю с m1w2 (при этом она отображается на дисплеи) на собственную температуру самого ПУ (при том на экране два прочерка). И так бесконечно. В шаблоне устройства точно ничего менять не надо? 1
2

Пока сложно сказать. Возможно, что-то с ожидаемым пнелькой ПУ-3 форматом числа: например, нужно округлять температуру до десятых градуса или до единиц градусов. В шаблонах есть опция округления:

round_to — порядок, до которого будет округляться значение после всех преобразований. Например, 0.1 — округлять до десятых.

Добавьте в шаблон так:

{
"name":"Outdoor temperature",
"reg_type":"holding",
"readonly":false,
"address":9,
"type":"value",
"scale":0.1,
"format":"s16",
"round_to": 0.1
}

Я добавил. Но проблема немного в другом. Попробую второй раз описать:

  1. Я выставил параметры согласно инструкции - ЕР6-1, HR0-1,
  2. также сделал rules, где с датчика m1w2 передается температура в Current Temperature. И она передается и какое-то время показывается (скрин второй, где температура 28,25).
  3. Но секунд через 10, сама панель обновляет Current Temperature своим параметром и в WB температура становится 27,5 (скрин 1) Но притом на самой панели ПУ, температура не показывается.
  4. И так меняется постоянно.

И вот вопрос - проблема в файле конфигурации, либо проблема в работе панели.

И как лирическое отступление - я очень удивлен, что Wirenboard еще не выпускает аналогичные панели, которые подключаются по Modbus и являются просто физическим устройством на стене, благодаря которому любой пользователь в доме может видеть и регулировать температуру на WB. Из всего я нашел, только ПУ-3, которые поставил по всему дому, с радиаторами они работают прекрасно (удалось настроить), а вот с теплыми полами теперь проблема, потому что на них надо пробросить температуру теплых полов.

Вы уверены, что это делает сама панель?
Если записать значение температуры в панель только один раз, что произойдет?
Возможно, если нет обращений по Modbus панель считает, что связь с контроллером потеряна и таким образом это индицирует. Значение в панель по умолчанию будет записываться только при изменении значения топика с температурой.

Советую попробовать увеличить параметр EP 04 (MODBUS «таймаут», время через которое выставляется ошибка связи, если нет обращений к ПУ3 по MODBUS). По умолчанию стоит 5 сек. Или, например, раз в 3 секунды принудительно записывать это значение в панель, чтобы не возникала ошибка связи.

Первый проект собственной панели не удалось реализовать. Но в планах на будущее такое есть.

Изменил EP 04, разница только в том, что дольше панель показывает переданную температуру, непосредственно в wirenboarde температура также меняется на значении панели.
И вот я задумался об ошибке - потому что на всех панелях где-то раз в 10-15 сек появляется надпись ошибка 01 и пропадает. Как эту ошибку можно убрать?
И как сделать принудительную запись температуры раз в три секунды?

Что при появлении ошибки в логах wb-mqtt-serial? Есть какие-либо совпадающие по времени с отображением “ошибки” сообщения?

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

Это нужно просмотреть файл /var/log/messages? Там ошибок вроде как нет. Хотя у меня таких панелей штук 15 стоит и на всех ошибка появляется. Или где-то в другом месте надо было посмотреть?

Пример кода можете прислать?

journalctl -u wb-mqtt-serilal -f

https://wirenboard.com/wiki/How_to_write_rules#startTicker.28.29.3B

Нет никаких ошибок((

Ну все-таки сам код можете прислать, потому что не программист, а мой программист по javascript не сильно поймет, что я от него хочу.
Сейчас у меня следующий код, помогите его адаптировать, чтобы передача данных была каждые 3 секунды.
Заранее спасибо.:

defineRule("test_rule", { //имя правила test_rule
  whenChanged: "wb-m1w2_70/External Sensor 1",
  then: function (newValue, devName, cellName) {
    dev["temp_129"]["Current temperature"] = newValue;
  }
});

Попробуйте так:

//создаем таймер с интервалом срабатывания 3 секунды
var clock_interval_ms = 3000;
startTicker("clock", clock_interval_ms);

//правило, вызываемое раз в clock_interval_ms (3000 мс)
defineRule("write_data_to_panel",{
  when: function () { return timers.clock.firing; },
  then: function () {
    //лог для диагностики
	log("Write data to panel executed. Temperature =" + dev["temperature_source"]["Температура"]);
    //пишем в панель
    dev["temp_129"]["Current temperature"] = dev["wb-m1w2_70"]["External Sensor 1"];
  }
});

Можно использовать функцию startTicker или cron-правило.
Примеры есть здесь:
https://wirenboard.com/wiki/How_to_write_rules#startTicker.28.29.3B
https://wirenboard.com/wiki/How_to_write_rules#cron-.D0.BF.D1.80.D0.B0.D0.B2.D0.B8.D0.BB.D0.B0

1 лайк

Спасибо за код! Попробовал, даже время обновления поставил 100ms, но всё равно проскакивает температура самого терморегулятора на считанные доли секунды. А поскольку из-за не правильной температуры идет команда на открытие клапанов через реле, то думаю это не правильно.
Надо разобраться почему замещается температура. Попробую написать в Ситирон.

Ну то есть после написания правила что-то изменилось? Ошибка стала быстрее сбрасываться?

Да, особенно если время уменьшить до 100ms и на пользовательском уровне это не заметно, только в в панели WB видно как меняется температура. НО! Когда ошибка, сразу идет команда на реле - открытие клапанов отопления.

Значит запись температуры в панель происходит. Да, тут неплохо бы получить ответ от Citiron.
А клапанами управляет сама панель?

Еще как вариант могу предположить, что запись одного и того же значения (отсутствие изменений в регистрах) панель тоже ошибочно воспринимает как отсутствие связи с контроллером. Попробуйте для теста записывать всегда разные значения температуры: например, завести переменную и к ней после вызова функции записи прибавлять, например 1 градус. По достижении переменной значения 10 сбрасывать в ноль.

Вот ответ от Cityron - К сожалению тех. поддержку по подключению панели ПУ-3 к wirenboard осуществить не можем, т.к. в нашем распоряжении нет этого контроллера.
Информацию об Ошибке 01 ищите в справочных материалах вашего контроллера, т.к. панель только отображает информацию, это не ее собственная ошибка. Вероятнее всего это просто ошибка связи контроллера и панели.

Во вложении есть прошивка 1.9, попробуйте ее залить в панель, но перед этим сохраните старый файл в панели.