Сброс счетчиков поканально в MR6C


#1

Очень хочется сделать что-то такое…
Но по итогу прерывается связь с модулем. Пока не сделаешь service wb-mqtt-serial restart

startTicker(“Check_Shnek”, 12000);

defineRule(“Shnek Rotate”, {
when: function (){ return timers.Check_Shnek.firing; },
then: function () {
//делаем какие-то выводы и обнуляем счетчик.
dev[“wb-mr6c_1”][“Input 6 counter”] = 0;
;}
});

Неохота сохранять значения счетчика, сравнивать с предыдущим значением, помнить о переполнении счетчика…


#2

Сейчас “input 6 counter” - это read only регистр в устройстве и, соответственно, read only канал в описании драйвера modbus. Писать в него значения нельзя.

Для вашей задачи, думаю, будет лучше использовать обычные глобальные переменные в javascript.


#3

Так и буду делать… А зачем mqtt_serial вываливается при dev[“wb-mr6c_1”][“Input 6 counter”] = 0; ?
Посмотрите пожалуйста, может там что-то подправить надо?


#4

Добрый день!

А какое по вашему мнению должно быть корректное поведение?

Движок правил не знает ничего про то, какой драйвер обрабатывает данный объект dev[]. Команда на запись readonly регистра передаётся в wb-mqtt-serial, и он завершается с сообщением в логах:

апр 17 11:52:57 wirenboard-AH2M5RIF serial[10699]: FATAL: Serial protocol error: can't write to input. Stopping event loops.

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