Контроллер wirenboard 5 не корректно загружается

Здравствуйте! вобщем проблема!!! проявляется не регулярно, но доставляетт массу неудобств. ситуация может возникнуть например при создании новых правил или при записи регистров в устройства. после этого контроллер перестаёт реагировать на любые действия связанные с правилами. после перезагрузки может начать работать нормально а может и нет. т.е. правила не работают. хотя веб интерфейс поностью доступен. по ssh доступ тоже есть. но на кнопки в веб интерфейсе и на правила никакой реакции. после нескольких перезагрузок иногда двух иногда пяти работа контроллера возобновляется реакция на правила востанавливается. вообщем как это описывать я даже незнаю. но почему отваливаются правила непонятно!!! файлл messages я выслал вам на support

Традиционно:

  1. где правила, котороые не работают?
  2. что конкретно значит “правила не работают”?

На первый взгляд на 2000 страниц логов кажется, что с таймерами что-то не то:

Jan 19 07:08:02 wirenboard daemon.info wb-rules[3489]: ERROR: [rule error] ECMAScript error: Error: error error (rc -100) 	anon  native strict preventsyield 	clearTimeout /usr/share/wb-rules-system/scripts/lib.js:225 	anon /etc/wb-rules/svet_v_razdevalke.js:47 preventsyield```

Но нужны правила, а то так это гадание на кофейной гуще.
1 лайк

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

А это лабораторный макет или уже распределенная инсталляция? Перезагрузка wb-rules и wb-mqtt-serial не помогают, только всего контроллера?

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

var timer_datchik_sveta_ms = 120 * 1000;
var timer_datchik_sveta = null;

defineRule("datchik_sveta_1", 
{
when: function () 
{
return dev["wb-gpio/EXT4_DR8"] ==0;
},
then: function()
{
if (timer_datchik_sveta)
{
clearTimeout(timer_datchik_sveta);
}
timer_datchik_sveta = setTimeout(function ()
{ 
runShellCommand("mpg123 /mnt/data/sounds/vecher.mp3");
timer_datchik_sveta = null;   
  },
timer_datchik_sveta_ms);
}
});

defineRule("datchik_sveta_0", 
{
when: function () 
{
return dev["wb-gpio/EXT4_DR8"] ==1;
},
then: function()
{
clearTimeout(timer_datchik_sveta);
}
});

var timer_razdevalka_ms = 180 * 1000;
var timer_razdevalka = null;
 
defineRule("svet_v_razdevalke_1", 
{
when: function ()
{
return dev["wb-gpio/EXT4_DR4"] ==1; 
},
then: function() 
{
      dev["wb-mrm2_47"]["Relay 2"] = 1;
var date = new Date();
var date_start = new Date(date);
date_start.setHours(23);
date_start.setMinutes(50);
var date_end = new Date(date);
date_end.setHours(17);
date_end.setMinutes(10);
if ((date > date_start) && (date < date_end)) 
{
runShellCommand("mpg123 /mnt/data/sounds/razdevalka.mp3");
}
if (timer_razdevalka)
{
clearTimeout(timer_razdevalka);
}
timer_razdevalka = setTimeout(function () 
{
      dev["wb-mrm2_47"]["Relay 2"] = 0;
runShellCommand("mpg123 /mnt/data/sounds/razdevalka_otkrita.mp3");
timer_razdevalka = null;   
},
timer_razdevalka_ms);
}
});

defineRule("svet_v_razdevalke_0", 
{
when: function ()
{
return dev["wb-gpio/EXT4_DR4"] ==0; 
},
then: function() 
{
      dev["wb-mrm2_47"]["Relay 2"] = 0;
clearTimeout(timer_razdevalka);
}
});

спасибо ещё раз за помощь!

нет!!! проблема как оказывается не исчезла. убрал те таймеры, но после перезагрузки опять не полностью загружается. выслал файл messages ещё раз на support

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

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

Правильно: “я локализовал проблему до использования таймеров. Вот код из десяти строчек, который, будучи запущенным на контроллере с свежей заводской прошивкой, вызывает проблемное поведение.”. Неправильно: “у меня иногда зависает что-то, а иногда не зависает, и вообще я не знаю. Вот вам 300 строчек плохо написанных правил без пояснений, разбирайтесь там как-нибудь”.

Надеюсь на ваше понимание.

1 лайк

Евгений я бы рад объяснить что не работает. но я незнаю. при отключении порта на котором висят большинство устройств а именно /dev/ttyAPP2 контроллер загружается нормально. затем включаю порт т.е. ставлю галочку в веб интерфейсе, перезагружаюсь и всё работает. затем перезагружаю контроллер через 10 минут, а он не стартует как надо. просто я не могу ничего включить или выключить это касается даже внутреннего speaker. при удалении всех правил ситуация не меняется. какие файлы нужно выслать где пишется логи загрузки или ещё что-нибудь???

Поэтому я и прошу от вас минимальную конфигурацию.

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

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

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

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

В общем ещё раз: чем больше вы сделайте работы сами, тем быстрее ваша проблема будет решена.

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