Настройка WB-MR6C с магнитными контакторами для светодиодных ламп

Добрый день! Я новичёк.

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

Есть задача: чтобы при нажатии на выключатель (кнопка без фиксации) реле WB-MR6C (slave id 53) (name: свет) выход 2 переключался (инвентировался) и при отпускании оставался в таком положении до следующего нажатия на кнопку.

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

Объясните пожалуйста подробно, как сделать?

Настройка:

Сводка

{
“debug”: true,
“ports”: [
{
“path”: “/dev/ttyRS485-2”,
“devices”: [],
“baud_rate”: 9600,
“parity”: “N”,
“data_bits”: 8,
“stop_bits”: 2,
“poll_interval”: 10,
“enabled”: true
},
{
“path”: “/dev/ttyRS485-1”,
“devices”: [
{
“slave_id”: “43”,
“device_type”: “WB-MR6C”,
“name”: “гараж”,
“enabled”: true
},
{
“slave_id”: “53”,
“device_type”: “WB-MR6C”,
“name”: “свет”,
“enabled”: true
}
],
“baud_rate”: 9600,
“stop_bits”: 2,
“poll_interval”: 10,
“enabled”: true,
“parity”: “N”,
“data_bits”: 8
},
{
“path”: “/dev/ttyMOD1”,
“devices”: [],
“baud_rate”: 9600,
“parity”: “N”,
“data_bits”: 8,
“stop_bits”: 2,
“poll_interval”: 10,
“enabled”: false
},
{
“path”: “/dev/ttyMOD2”,
“devices”: [],
“baud_rate”: 9600,
“parity”: “N”,
“data_bits”: 8,
“stop_bits”: 2,
“poll_interval”: 10,
“enabled”: false
},
{
“path”: “/dev/ttyMOD3”,
“devices”: [],
“baud_rate”: 9600,
“parity”: “N”,
“data_bits”: 8,
“stop_bits”: 2,
“poll_interval”: 10,
“enabled”: false
}
]
}

Создаем скрипт такого вида:

defineRule("testswitch1", { //название правила
  whenChanged: "wb-gpio/EXT1_IN14", //при изменении состояния кнопки выключателя
  then: function (newValue, devName, cellName) { //выполняй следующие действия
    var cur_state = dev["wb-gpio"]["EXT2_K1"] //В переменную - текущее состояние реле (true/false)

     if (newValue > 0 ) { //Только нажатие! НЕ отпускание, когда newValue==0
    	if ( cur_state > 0 ) { //если реле вКлючено
          log.info("TestLog Info 4 Relay OFF")
	       dev["wb-gpio"]["EXT2_K1"] = false ; //установи Реле 0 
        }
        if ( cur_state == 0 ) {//если реле вЫключено
          log.info("TestLog Info 4 Relay ON")
	      dev["wb-gpio"]["EXT2_K1"] = true ; //установи Реле 1
        }
}); 

Только заменить название устройств:
“кнопка”
"wb-gpio/EXT1_IN14"
“реле”
["wb-gpio"]["EXT2_K1"]

на свои. Лучше всего скопировать из веб-интерфейса, меню “devices”

Спасибо!
Вопрос: где этот скрипт создается???
или есть возможность настройки через Веб интерфейс?

Да, прямо в веб-интерфейсе, в меню Screenshot from 2020-06-22 09-37-04
“Scripts”.

Описано: https://wirenboard.com/wiki/index.php/%D0%94%D0%B2%D0%B8%D0%B6%D0%BE%D0%BA_%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB_wb-rules

Получилось?

Цитата Получилось?

Спасибо!!! Вечером буду изучать.

Ок, замечательно. Если что будет непонятно - пишите, подскажем.
ЗЫ: при создании скриптов к имени добавляем .js

Здравствуйте,

Для этой конкретной задачи есть вариант проще - просто поменять режим работы входов (см. раздел “Режимы взаимодействия входов и реле”).
Вам нужно в регистры с 9 по 14 записать значение 0 (по умолчанию там 1). В этом случае входы 1-6 перейдут в режим работы с выключателем без фиксации.

Записать проще всего с помощью утилиты modbus_client, она есть штатно в софте WB, например так:

service wb-mqtt-serial stop
modbus_client --debug -mrtu -s2 -pnone /dev/ttyRS485-X -t0x10 -r9 -aY 0 0 0 0 0 0
service wb-mqtt-serial start

где X - номер порта RS-485, к которому подключен MR6C,
Y - адрес (slave id) модуля

1 лайк

Отлично!!! Огромное спасибо! Заработало как нужно!