Добрый день! Имею регистратор импульсов wb mcm-16, подключенный по rs-485 к 1 порту wb6. Входы на регистраторе импульсов задействованы в случайном порядке.
Проблема в следующем:
никак не могу задать начальные значения каналов mcm16. Выполняю команды:
service wb-homa-gpio stop
mosquitto_pub -m 1002 -t ‘/devices/wb-gpio/controls/Counter 1’ -r
service wb-homa-gpio start
Параметр Counter 1 принимает значение 1002, но спустя некоторое время принимает старое значение. Все пакеты установлены и обновлены. Подскажите, пожалуйста, что я делаю не так? Спасибо!
Добрый день!
А причём здесь service wb-homa-gpio stop
?
В топик, который вы указали, драйвер опроса устройств по RS-485 регулярно кладёт значение из регистра WB-MCM16, поэтому ваши изменения в итоге ни на что не влияют.
Правильный способ - создать через правила виртуальное устройство, которое будет отображать значение счётчика, увеличенное на 1002.
Можете дать ссылку на соответствующий мануал? Спасибо!
Делаю так:
defineVirtualDevice("IT_GVS_45095", {
title: "IT GVS 45095",
cells: {
controls: {
type: "value",
value: 0
},
}
});
defineRule("Water_meter", {
whenChanged: "/devices/wb-mcm16_0/controls/Counter 2",
then: function (newValue, devName, cellName) {
dev["IT_GVS_45095"]["Value"] = newValue+1002;
}
});
Значение не меняется(
Буду очень благодарен за помощь.
Добрый день, Spam199,
у вас “Value” и “value”, регистр разный:
value: 0
и
["Value"] =
Поменяйте, посмотрите.
defineVirtualDevice("IT_GVS_45095", {
title: "IT GVS 45095",
cells: {
controls: {
type: "value",
value: 0
},
}
});
defineRule("Water_meter", {
whenChanged: "/devices/wb-mcm16_0/controls/Counter 2",
then: function (newValue, devName, cellName) {
dev["IT_GVS_45095"]["value"] = newValue + 1002;
}
});
Значение так и не меняется…
Да, сразу не углядел, простите, вот так в вашем случае будет правильно:
whenChanged: "wb-mcm16_0/Counter 2"
Стоп-стоп, вот еще: а как у вас устройство называется wb-mcm16_0? Проверьте в Settings, там не 0 должен быть, а десятичный modbus-адрес устройства WB-MCM-16. В web-интерфейсе вы видите увеличение значений счетчика?
В веб-интерфейсе увеличение значений происходит:
wb-mcm16_0 Counter 2 value (ro) /devices/wb-mcm16_0/controls/Counter 2 4697 OK
А вот десятичного modbus-адреса устройства не наблюдаю.
Кое что изменилось:
При значении Counter 2: 4699, создался топик
T_GVS_45095 value text /devices/IT_GVS_45095/controls/value 46991002 OK
Все бы ничего, но хотелось бы чтобы выполнялось арифметическое действие.
Разобрался. Надо было сделать преобразование типов. Итоговый скрипт:
defineVirtualDevice("IT_GVS_45095", {
title: "IT GVS 45095",
cells: {
controls: {
type: "value",
value: 0
},
}
});
defineRule("Water_meter", {
whenChanged: "wb-mcm16/Counter 2",
then: function (newValue, devName, cellName) {
CurrentValue = 1000 + parseInt(newValue);
dev["IT_GVS_45095/controls"] = CurrentValue;
}
});
Давайте назовем, во избежание путаницы, контрол количества импульсов “pulses” и запишем ваш скрипт вот так:
defineVirtualDevice("IT_GVS_45095", {
title: "IT GVS 45095",
cells: {
pulses: {
type: "value",
value: 0
},
}
});
defineRule("Water_meter", {
whenChanged: "wb-mcm16_0/Counter 2",
then: function (newValue, devName, cellName) {
dev["IT_GVS_45095"]["pulses"] = newValue+1002;
}
});
Затем в командной строке удалите ненужные топики:
mqtt-delete-retained "/devices/IT_GVS_45095/#"
и обновите web-интерфейс.