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


#64

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

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

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


#65

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;

}
});

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


#66

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


#67

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

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

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


#68
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, с которым движок не знает что делать - это и не название канала, и не функция, и не массив названий или функций.

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


#69

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


#70

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


#71

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

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


#72

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

Error listing the configs: MQTT RPC request timed out


#73

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

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

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

результат 0


#74

есть еще вопрос, использую связку 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 не хотел устанавливаться ругался на зависимости.


#75

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


#76

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


#77

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

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

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


#78

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

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


#79

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


#80

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


#81

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

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


#82

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


#83

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