Подключение переферии UNIEL по rs-485

попробуйте так
when: function ()
{
return [“wb-gpio/A1_IN”] ==0;
},

then: function()
{
действия
}

по знакам проверьте в инструкции по написанию правил.

defineRule(“control_both”, {
whenChanged: [“wb-gpio/A1_IN”] ==0;
then: function () {
dev[“uchm111rx_1”][“Relay 0”] = 0;
dev[“uchm111rx_1”][“Relay 1”] = 0;
dev[“uchm111rx_1”][“Relay 2”] = 0;
dev[“uchm111rx_1”][“Relay 3”] = 0;
dev[“uchm111rx_1”][“Relay 4”] = 0;
dev[“uchm111rx_1”][“Relay 5”] = 0;
dev[“uchm111rx_1”][“Relay 6”] = 0;
dev[“uchm111rx_1”][“Relay 7”] = 0;
dev[“uchm111rx_2”][“Relay 0”] = 0;
dev[“uchm111rx_2”][“Relay 1”] = 0;
dev[“uchm111rx_2”][“Relay 2”] = 0;
dev[“uchm111rx_2”][“Relay 3”] = 0;
dev[“uchm111rx_2”][“Relay 4”] = 0;
dev[“uchm111rx_2”][“Relay 5”] = 0;
dev[“uchm111rx_2”][“Relay 6”] = 0;
dev[“uchm111rx_2”][“Relay 7”] = 0;
dev[“uchm111rx_3”][“Relay 0”] = 0;
dev[“uchm111rx_3”][“Relay 1”] = 0;
dev[“uchm111rx_3”][“Relay 2”] = 0;
dev[“uchm111rx_3”][“Relay 3”] = 0;
dev[“uchm111rx_3”][“Relay 4”] = 0;
dev[“uchm111rx_3”][“Relay 5”] = 0;
dev[“uchm111rx_3”][“Relay 6”] = 0;
dev[“uchm111rx_3”][“Relay 7”] = 0;
dev[“uchm111rx_4”][“Relay 0”] = 0;
dev[“uchm111rx_4”][“Relay 1”] = 0;
dev[“uchm111rx_4”][“Relay 2”] = 0;
dev[“uchm111rx_4”][“Relay 3”] = 0;
dev[“uchm111rx_4”][“Relay 4”] = 0;
dev[“uchm111rx_4”][“Relay 5”] = 0;
dev[“uchm111rx_4”][“Relay 6”] = 0;
dev[“uchm111rx_4”][“Relay 7”] = 0;
dev[“uchm111rx_5”][“Relay 0”] = 0;
dev[“uchm111rx_5”][“Relay 1”] = 0;
dev[“uchm111rx_5”][“Relay 2”] = 0;
dev[“uchm111rx_5”][“Relay 3”] = 0;
dev[“uchm111rx_5”][“Relay 4”] = 0;
dev[“uchm111rx_5”][“Relay 5”] = 0;
dev[“uchm111rx_5”][“Relay 6”] = 0;
dev[“uchm111rx_5”][“Relay 7”] = 0;
dev[“uchm111rx_6”][“Relay 0”] = 0;
dev[“uchm111rx_6”][“Relay 1”] = 0;
dev[“uchm111rx_6”][“Relay 2”] = 0;
dev[“uchm111rx_6”][“Relay 3”] = 0;
dev[“uchm111rx_6”][“Relay 4”] = 0;
dev[“uchm111rx_6”][“Relay 5”] = 0;
dev[“uchm111rx_6”][“Relay 6”] = 0;
dev[“uchm111rx_6”][“Relay 7”] = 0;
dev[“uchm111rx_7”][“Relay 0”] = 0;
dev[“uchm111rx_7”][“Relay 1”] = 0;
dev[“uchm111rx_7”][“Relay 2”] = 0;
dev[“uchm111rx_7”][“Relay 3”] = 0;
dev[“uchm111rx_7”][“Relay 4”] = 0;
dev[“uchm111rx_7”][“Relay 5”] = 0;
dev[“uchm111rx_7”][“Relay 6”] = 0;
dev[“uchm111rx_7”][“Relay 7”] = 0;
dev[“uchm111rx_8”][“Relay 0”] = 0;
dev[“uchm111rx_8”][“Relay 1”] = 0;
dev[“uchm111rx_8”][“Relay 2”] = 0;
dev[“uchm111rx_8”][“Relay 3”] = 0;
dev[“uchm111rx_8”][“Relay 4”] = 0;
dev[“uchm111rx_8”][“Relay 5”] = 0;
dev[“uchm111rx_8”][“Relay 6”] = 0;
dev[“uchm111rx_8”][“Relay 7”] = 0;
}
});

так?

это что он типа возвратит значение 0 на А1?

за основу моего правила была взята вот такая штука

Это простейшее правило следит за контролом и устанавливает другой контрол в такое же состояние.

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

В примере датчик движения подключен к входу “сухой контакт”, контрол типа “switch”. Сирена подключена к встроеному реле Wiren Board, а лампа - через релейный блок по Modbus. Когда вход типа “сухой контакт” (выход датчика движения) замкнут, то на лампу и реле подаётся “1”, когда выключен - “0”.

Правило срабатывает каждый раз при изменении значения контрола “D1_IN” у устройства “wb-gpio”. В код правила передаётся новое значение этого контрола в виде переменной newValue.

defineRule(“motion_detector”, {
whenChanged: “wb-gpio/D1_IN”,
then: function (newValue, devName, cellName) {
dev[“wb-gpio”][“Relay_2”] = newValue;
dev[“wb-mrm2_6”][“Relay 1”] = newValue;

}
});

ну соответсвенно я реле свои подставил и значение которое необходимо

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

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

я вот вставил такой код

defineRule(“control_both”, { whenChanged: [“wb-gpio/A1_IN”] == 0,
then: function () {
dev[“uchm111rx_1”][“Relay 0”] = 0;
dev[“uchm111rx_1”][“Relay 1”] = 0;
dev[“uchm111rx_1”][“Relay 2”] = 0;
dev[“uchm111rx_1”][“Relay 3”] = 0;
dev[“uchm111rx_1”][“Relay 4”] = 0;
dev[“uchm111rx_1”][“Relay 5”] = 0;
dev[“uchm111rx_1”][“Relay 6”] = 0;
dev[“uchm111rx_1”][“Relay 7”] = 0;
dev[“uchm111rx_2”][“Relay 0”] = 0;
dev[“uchm111rx_2”][“Relay 1”] = 0;
dev[“uchm111rx_2”][“Relay 2”] = 0;
dev[“uchm111rx_2”][“Relay 3”] = 0;
dev[“uchm111rx_2”][“Relay 4”] = 0;
dev[“uchm111rx_2”][“Relay 5”] = 0;
dev[“uchm111rx_2”][“Relay 6”] = 0;
dev[“uchm111rx_2”][“Relay 7”] = 0;
dev[“uchm111rx_3”][“Relay 0”] = 0;
dev[“uchm111rx_3”][“Relay 1”] = 0;
dev[“uchm111rx_3”][“Relay 2”] = 0;
dev[“uchm111rx_3”][“Relay 3”] = 0;
dev[“uchm111rx_3”][“Relay 4”] = 0;
dev[“uchm111rx_3”][“Relay 5”] = 0;
dev[“uchm111rx_3”][“Relay 6”] = 0;
dev[“uchm111rx_3”][“Relay 7”] = 0;
dev[“uchm111rx_4”][“Relay 0”] = 0;
dev[“uchm111rx_4”][“Relay 1”] = 0;
dev[“uchm111rx_4”][“Relay 2”] = 0;
dev[“uchm111rx_4”][“Relay 3”] = 0;
dev[“uchm111rx_4”][“Relay 4”] = 0;
dev[“uchm111rx_4”][“Relay 5”] = 0;
dev[“uchm111rx_4”][“Relay 6”] = 0;
dev[“uchm111rx_4”][“Relay 7”] = 0;
dev[“uchm111rx_5”][“Relay 0”] = 0;
dev[“uchm111rx_5”][“Relay 1”] = 0;
dev[“uchm111rx_5”][“Relay 2”] = 0;
dev[“uchm111rx_5”][“Relay 3”] = 0;
dev[“uchm111rx_5”][“Relay 4”] = 0;
dev[“uchm111rx_5”][“Relay 5”] = 0;
dev[“uchm111rx_5”][“Relay 6”] = 0;
dev[“uchm111rx_5”][“Relay 7”] = 0;
dev[“uchm111rx_6”][“Relay 0”] = 0;
dev[“uchm111rx_6”][“Relay 1”] = 0;
dev[“uchm111rx_6”][“Relay 2”] = 0;
dev[“uchm111rx_6”][“Relay 3”] = 0;
dev[“uchm111rx_6”][“Relay 4”] = 0;
dev[“uchm111rx_6”][“Relay 5”] = 0;
dev[“uchm111rx_6”][“Relay 6”] = 0;
dev[“uchm111rx_6”][“Relay 7”] = 0;
dev[“uchm111rx_7”][“Relay 0”] = 0;
dev[“uchm111rx_7”][“Relay 1”] = 0;
dev[“uchm111rx_7”][“Relay 2”] = 0;
dev[“uchm111rx_7”][“Relay 3”] = 0;
dev[“uchm111rx_7”][“Relay 4”] = 0;
dev[“uchm111rx_7”][“Relay 5”] = 0;
dev[“uchm111rx_7”][“Relay 6”] = 0;
dev[“uchm111rx_7”][“Relay 7”] = 0;
dev[“uchm111rx_8”][“Relay 0”] = 0;
dev[“uchm111rx_8”][“Relay 1”] = 0;
dev[“uchm111rx_8”][“Relay 2”] = 0;
dev[“uchm111rx_8”][“Relay 3”] = 0;
dev[“uchm111rx_8”][“Relay 4”] = 0;
dev[“uchm111rx_8”][“Relay 5”] = 0;
dev[“uchm111rx_8”][“Relay 6”] = 0;
dev[“uchm111rx_8”][“Relay 7”] = 0;
}
});

в итоге вот такая ошибка, куда копать подскажите пжл!!!

Script error: Error: invalid whenChanged spec
transformWhenChangedItem lib.js:124
anon lib.js:148 preventsyield
forEach native strict preventsyield
anon lib.js:162
eval /etc/wb-rules/motion.js:68 preventsyield

defineRule("control_both", { 
    asSoonAs: function() {
        return dev["wb-gpio/A1_IN"] == 0;
   }, 
   then: function () {
       ...
   }
});

это кстати очень подробно описано в документации. Прочитайте документацию, прочитайте какой-нибудь мануал в две страницы по синтаксису Java Script и всё будет понятно.

То, что вы написали не работает, потому что в выражении

whenChanged: ["wb-gpio/A1_IN"] == 0,

кусок

["wb-gpio/A1_IN"] == 0

выполняется в момент просмотра файла. Вы даже dev там не написали, поэтому JS трактует это как выражение “массив из одного элемента со строкой “wb-gpio/A1_IN” это то же самое, что и ноль?” и вычисляет его значение (нет, не то же самое, false).

Итого, движок правил увидит такую инициализацию:

defineRule("control_both", { 
   whenChanged: false,
   then: function () {
       ...
   }
});

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

В общем мораль такая: не нужно относиться к правилам как к странным заклинаниям и не нужно пытаться перебором подобрать что-то рабочее - всё равно не подберёте. Нужно постараться понять логику того, что от вас требуют, а этого не получится, пока вы вдумчиво не прочитаете всю документацию, которая лежит тут: wb-rules/README.md at master · wirenboard/wb-rules · GitHub . Если из документации что-то не понятно - спрашивайте на форуме, вам будут рады помочь.

да, вот это очень большая проблема. найти инструкции по написанию правил я и сам нигде не могу найти. уже и java script начал изучать. подключил знающих людей, которые не один год программируют, но и они сразу не могут дать ответ. когда-нибудь я всё-таки хочу написать инструкцию, именно для чайников, для самых чайников, именно до мелочей со скобочками и точками. но пока не могу так как сам иногда бьюсь по несколько недель над какой-либо строчкой. если бы было по больше примеров то можно было бы быстрее освоить всю эту технологию. Ну а по вашему вопросу. попробуйте вместо [“wb-gpio/A1_IN”] == 0, написать
when: function ()
{
return dev[“wb-gpio/A1_IN”] == 0;
},
then: function()
{
дальнейший код
} Ну и по внимательней читайте ответы. Выше я уже Вам писал код именно в такой конфигурации. Кстати в вики это есть. почитайте их ещё раз.

Хорошо, спасибо за помощь! буду вдумчиво вчитываться. я то просто изначально писал правило из документации которую вы мне дали первый раз по ссылке выше.

Да вот поддерживаю вас на счет инструкции для чайников… потому что не “все” могут понять инструкцию… было бы очень хорошо что бы инструкция описывала крайне большее методов правил функций и на примерах все рассматривалось в том числе и синтаксис был описан… и что бы все это было в одном источнике а не по разным статьям…и вы написали выше такую конструкцию… но я поставил по другому потому что вы не написали что этот интерфейс мы указывает в device… и вот кстати на счет переменных и констант… было бы не плохо что бы был так сказать справочник по всем этим данным… что они означают… к чему относятся… как их узнать и как к ним правильно обращаться…

Я не программист… хотя занимался изучением программирования… по этому если что то не правильно написал не бейте палками… ибо я в джаве чайник

Евгений, еще вот такой вопрос… почему возникает эта ошибка? и как ее исправить?

Error listing the configs: MQTT RPC request timed out

Чет не работает этот код… сцен выключатель не реагирует… хотя должен выключать везде свет(((

Прошу помогите… может я не верно его подключаю.

от выключателя 2 провода… один на А1, второй на 5В (пробывал и на GND)

результат 0

есть еще вопрос, использую связку raspberry pi b wb5

mqtt brocker на ra pi запущен…

сам ra pi контроллер видит и команды отправляет, состояние реле на контроллер в web меняется… но физически реле не срабатывает.

уже отправлял напрямую команды с ra pi на контрроллер

mosquitto_pub -h “192.168.0.2” -t “/devices/uchm111rx_0x01/controls/Relay 2” -m “0”

состояние реле меняется. отправляю 1 тоже меняется, но реле не срабатывает.

В чем может быть причина?

P.S. вчера обновил wb-mqqt-serial файлы для обновления взял вот отсюда

pechatnovWiren Board Team26д

deb-пакет и исполняемый файл wb-mqtt-serial последняя версия на сегодняшнее число
Сделано несколько патчей, в т. ч. от Reroute

https://drive.google.com/drive/folders/0BwCO-vuJyntlVW1DSm8xTnpMdTg?usp=sharing6

до обновления не могу сказать работало это все или нет. Обновился потому что думал что исчезнет ошибка Error listing the configs: MQTT RPC request timed out, но ошибка осталась.

выполнял команды apt-get -f install, так как пакет deb wb-mqtt не хотел устанавливаться ругался на зависимости.

попробуйте mosquitto_pub -h "192.168.0.2" -t "/devices/uchm111rx_0x01/controls/Relay 2/on" -m "0"
добавить /on

Да это я пробовал все понял что так работает… теперь бы разобраться почему сам ra pi отправляет не ту команду…

я не могу создать правила, при создании правила ошибка

Error saving the file: Invalid path

и вот такой лог

Dec 20 12:23:29 wirenboard daemon.info wb-rules[29958]: INFO: [rule info] add yo
ur rules to /etc/wb-rules/
Dec 20 12:23:29 wirenboard daemon.info wb-rules[29958]: INFO: MQTT connection es
tablished
Dec 20 12:23:29 wirenboard daemon.info wb-rules[29958]: ERROR: MQTT error: Not C
onnected
Dec 20 12:23:29 wirenboard daemon.info wb-rules[29958]: ERROR: command ‘/bin/sh
-c echo 3 > /sys/class/pwm/pwmchip0/export’ failed with exit status 1

ЧТО ЭТО??? помогите пожалуйста!!!

Если необходимы какие то дополнительные данные могу дать, без проблем… а так же я настроил удаленный доступ, могу его тоже дать.

Заранее спасибо большое!

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

Понял, так и сделаю, спасибо!

Это DDM845R v3 Модуль диммерный 4х канальный , тестили Вы его в итоге? Хотим такой использовать но нужно понять как его подключить к WB и будет ли, и если будет , то на сколько корректно?

Ещё у них вышел http://www.razumdom.ru/oborudovanie_rs485/row677/8 , но его ещё в руках не держали. Запросили на тест, если всё нормально, то будем поддерживать, продавать и рекомендовать.

Тестировали, ограниченно поддерживаем. Рекомендовать не можем.

Есть может еще какие-то варианты диммирования освещения 220 В, с двухсторонней связью?