Публикация из bash контроллера не вызывает срабатывания правила

Добрый день.

Создано виртуальное устройство

defineVirtualDevice("anybodyhome", {
    cells: {
        present: {
            type: "value",
            value: 0,
        }
    }
});

При запуске строки в cli контроллера
mosquitto_pub -t "/devices/anybodyhome/controls/present" -m 0
в web-gui видно изменение значения anybodyhome/present на переданное число (и с кавычками, и без)
Однако, правило

defineRule("anybodyhome-changed", {
  whenChanged: "anybodyhome/present",                          
  then: function (newValue, devName, cellName) { .....

не срабатывает.
При попытке менять топик через dev[“anybodyhome/present”] из обработчика другого события, правило отрабатывает корректно.

При попытке прочитать в cli
mosquitto_sub -t "/devices/anybodyhome/controls/present" -C 1
всегда возвращается ноль.

Пожалуйста, подскажите, что делаю не так.

Wirenboard release wb-2104 (as stable), target wb6/stretch

Евгений

Ключ -r забыли.

не помогло

mosquitto_pub -r -t "/devices/anybodyhome/controls/present" -m 0

так же успешно переключает топик. но правило не срабатывает.

Простите за дурацкий вопрос. А запущенный в другом окне mosquitto_sub показывает изменение топика при публикации? Я Вашу версию не юзал, но часто встречал ранее не знакомые глюки при апдейте на следующую.

mosquitto_sub показывает всегда ноль, независимо от значения, видимом в web-gui

Здравствуйте! Вероятно, дело в том, что нужно публиковать сообщение в топик с суффиксом /on:

mosquitto_pub -t "/devices/anybodyhome/controls/present/on" -m 0

Добрый день

mosquitto_pub -t "/devices/anybodyhome/controls/present/on" -m 0

не переключает в GUI значение, соответственно и правило не срабатывает.

с уважением
Евгений

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

mosquitto_pub -t "/devices/anybodyhome/controls/present/on" -m 10

Изменения в топиках я бы рекомендовал отслеживать командой:

mosquitto_sub -v -t /devices/anybodyhome/controls/present/#

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

Добрый день

команда
mosquitto_pub -t "/devices/anybodyhome/controls/present/on" -m 10
не приводит к переключению значения. Соответственно, правило не срабатывает.

Команда
mosquitto_pub -t "/devices/anybodyhome/controls/present" -m 10
меняет значение, но правило молчит.

defineVirtualDevice("anybodyhome", {
    cells: {
        present: {
            type: "value",
            value: 0,
        }
    }
});

defineRule("anybodyhome-changed", {
  whenChanged: "anybodyhome/present",                      
  then: function (newValue, devName, cellName) {
    log("anybodyhome: fired, old: {}, new: {}", dev["anybodyhome/present"],newValue);
}
});

Спасибо, разобрался

defineVirtualDevice("anybodyhome", {
    cells: {
        present: {
            type: "switch",
            value: false,
          	writable: true,
            readonly: false,
        }
    }
});

Отсутсвие атрибутов readonly и writable не позволяло передать параметр

Да, все правильно. Достаточно указать readonly: false.

4 сообщения было перемещено в эту тему: Новая версия движка правил