Wb6 + wb-mcm16. Начальные значения


#1

Добрый день! Имею регистратор импульсов 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, но спустя некоторое время принимает старое значение. Все пакеты установлены и обновлены. Подскажите, пожалуйста, что я делаю не так? Спасибо!


#2

Добрый день!
А причём здесь service wb-homa-gpio stop?
В топик, который вы указали, драйвер опроса устройств по RS-485 регулярно кладёт значение из регистра WB-MCM16, поэтому ваши изменения в итоге ни на что не влияют.
Правильный способ - создать через правила виртуальное устройство, которое будет отображать значение счётчика, увеличенное на 1002.


#3

Можете дать ссылку на соответствующий мануал? Спасибо!


#4

Начать стоит отсюда: https://wirenboard.com/wiki/index.php/Движок_правил_wb-rules#.D0.9F.D0.B5.D1.80.D0.B2.D0.BE.D0.B5_.D0.BF.D1.80.D0.B0.D0.B2.D0.B8.D0.BB.D0.BE_.D1.81_.D0.B2.D0.B8.D1.80.D1.82.D1.83.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D0.BC_.D1.83.D1.81.D1.82.D1.80.D0.BE.D0.B9.D1.81.D1.82.D0.B2.D0.BE.D0.BC


#5

Делаю так:

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;
  }
});

Значение не меняется(
Буду очень благодарен за помощь.


#6

Добрый день, Spam199,
у вас “Value” и “value”, регистр разный:

value: 0
и
["Value"] =

Поменяйте, посмотрите.


#7
 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;
      }
    });

Значение так и не меняется…


#8

Да, сразу не углядел, простите, вот так в вашем случае будет правильно:
whenChanged: "wb-mcm16_0/Counter 2"

Стоп-стоп, вот еще: а как у вас устройство называется wb-mcm16_0? Проверьте в Settings, там не 0 должен быть, а десятичный modbus-адрес устройства WB-MCM-16. В web-интерфейсе вы видите увеличение значений счетчика?


#9

В веб-интерфейсе увеличение значений происходит:
wb-mcm16_0 Counter 2 value (ro) /devices/wb-mcm16_0/controls/Counter 2 4697 OK

А вот десятичного modbus-адреса устройства не наблюдаю.


#10

Кое что изменилось:
При значении Counter 2: 4699, создался топик
T_GVS_45095 value text /devices/IT_GVS_45095/controls/value 46991002 OK
Все бы ничего, но хотелось бы чтобы выполнялось арифметическое действие.


#11

Разобрался. Надо было сделать преобразование типов. Итоговый скрипт:

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;
  }
});

#12

Давайте назовем, во избежание путаницы, контрол количества импульсов “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-интерфейс.