Wiren board + arduino in rs232

image

Тоже самое, пусто.

Я, честно гоговоря не осилил логику работы вашего кода после "else"Но набросал такое:

log.info ("START!!!")
// Запуск shell-команды с выводом топиков
runShellCommand("echo -e \"bin1 1\;\" > /dev/ttyRS485-1",{
	captureOutput: true, //Захватывать stdout
	captureErrorOutput: true, //Захватывать stderr (если нужно)
	exitCallback: function (exitCode, capturedOutput, capturedErrorOutput) //Функция, в которую попадает вывод
  {
  	log("cmd output: " + capturedOutput); //строка полностью
  	log("cmd Erroroutput: " + capturedErrorOutput); //Если нужен вывод stderr
  }
})

Посмотрел, в порт отправляется “-e bin1 1;” и исправил так:

log.info ("START!!!")
// Запуск shell-команды с выводом топиков
runShellCommand("echo \"bin1 1\;\" > /dev/ttyRS485-1",{
	captureOutput: true, //Захватывать stdout
	captureErrorOutput: true, //Захватывать stderr (если нужно)
	exitCallback: function (exitCode, capturedOutput, capturedErrorOutput) //Функция, в которую попадает вывод
  {
  	log("cmd output: " + capturedOutput); //строка полностью
  	log("cmd Erroroutput: " + capturedErrorOutput); //Если нужен вывод stderr
  }
})

Естественно без символов переноса строки.

Ну и вот тут рассматривается похожее: Отправка команд на WirenBoard через USB (com порт)

Делал сначала по этой статье, позже пришлось немного отойти.

var collectPeroid = 3000;//время в миллисекундах
var portUART = “/dev/ttyRS485-1”;//порт

defineRule(“collectString”,{
when: function () { return timers.collectData.firing; },
then: function () {
var dataString = “bin1 1;”//Формируем строку
//log.info(“dataString”,dataString)

runShellCommand("echo -e "+"\""+dataString+"\""+" > "+portUART,
    {
  captureOutput: true, //Захватывать stdout
  captureErrorOutput: true, //Захватывать stderr (если нужно)
  exitCallback: function (exitCode, capturedOutput, capturedErrorOutput) //Функция, в которую попадает вывод
        {
            log("cmd output: " + capturedOutput); //строка полностью
            log("cmd Erroroutput: " + capturedErrorOutput);
          if (exitCode){log.error("При выполнении записи в порт ошибка")}
        }
     })
log("echo -e "+"\""+dataString+"\""+" > "+portUART);

}
});

startTicker(“collectData”, collectPeroid);

Снова же, скрипт вот, а в логах все пусто.
image

А в порту - что?
Ну и еще раз прощу - вставляйте код в “```”

Если бы вы подсказали, как прослушать порт, я бы с радостью вам ответил.

Я слушаю осциллографом, в нем есть анализатор.
Когда подключал микроконтроллеры - смотрел что в регистрах порта МК отладчиком, просто и удобно (не уверен что для atmega есть)

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

Добрый вечер!
Проблема найдена, в порт летело -e “bin1 1;”, лишняя -e.
Спасибо большое.

1 Like

Отлично. Я же именно про это написал тут: Wiren board + arduino in rs232 - #24 от пользователя BrainRoot

И еще вопрос, немного по-другому вопросу…

defineVirtualDevice(“Bedroom_blind”, {
title : “Bedroom_blind”,
cells : {
switch: {
type: “switch”,
value: false
},
range : {
type : “range”,
value : 90,
max : 100
}
}
});

Создал шторы, но мне нужно, чтобы минимальное значение было 80.
Рядом с max : 100, создал min : 80, не сработало.
Можно ли как то задать минимальное значение?

В интерфейсе - можно, из wb-rules значение min ceйчас не обрабатывается, но можно в интерфейс его просто опубликовать уже после создания виртуального устройства.

А есть пример того, как это сделать?

Из rules - использовать publish() или, что правильнее опрации с meta.

И еще вопрос, не совсем по теме Вопроса…
defineVirtualDevice(“Bedroom_blind”, {
title: “Bedroom_blind”,
cells: {
open: {
type: “pushbutton”
},
close: {
type: “pushbutton”
}
}
});

defineRule(“Bedroom_blind”, {
whenChanged: “Bedroom_blind/open”,
then: function () {
runShellCommand(“echo -e “srv1 80;” > /dev/ttyRS485-1”);
log(“echo -e “srv1 80;” > /dev/ttyRS485-1”);
},
{
whenChanged: “Bedroom_blind/close”,
then: function () {
runShellCommand(“echo -e “srv1 100;” > /dev/ttyRS485-1”);
log(“echo -e “srv1 100;” > /dev/ttyRS485-1”);
}
});

Можно ли реализовать два whenChange? или нужно писать два отдельных правила?

Конечно.

defineRule({
    whenChanged: ["dev1/name1", "dev2/name2", somefunc, ...],
    then: function(value, dev, name) {
        ...
    }
})

Имя устройства вызвавшего срабатывание правила - также будет передано в функцию.
Ну и еще раз хочу попросить выделять код с помощью “```”