Нестандартные топики

  1. Как создавать топики вида server/temp и запихивать json {“unixDT”=1523233555, “id”=88888, “text”=“text”} ?
  2. Можно в скриптах получить UNIX время?
  3. Можно сохранить какое-то значение, а через час, даже после перезагрузки, ‘вспомнить’ его?

Добрый день!

  1. Как вы хотите создавать эти топики? Из своего ПО, из командной строки, из движка правил?
  2. Используйте функцию runShellCommand. Похожее использование, например, здесь: https://github.com/contactless/wb-rules-system/blob/8d8867e33260af60f4ffbff31bf996055f084cbb/rules/system.js#L27
  3. Правильно ли я понял, что вы хотите сохранить значение переменной в скрипте между перезагрузками?
  1. Я не знаю где и как вообще их возможно создавать.
    У меня контроллер настроен на бридж и кидает топики на сервер. Все остальное оборудование работает по другим правилам формирования формата топиков и хотелось контроллер привести к этим правилам.
    Как вариант конечно можно транслировать топики с переформатированием, но это запутанно и ненаглядно.
  2. Ну например, раз в час запоминаю накопленную энергию. А потом каждую минуту читаю энергию с прибора и высчитывают разницу. Ну и кидаю в топик текущее накопленное за час.
  1. Если вы хотите из стандартных топиков переложить в топики собственного формата, можете из правила выполнять publish (опять же читайте https://github.com/contactless/wb-rules). Отчасти похожая задача была здесь: Настройка процесса отправки сообщений по MQTT-мосту - посмотрите, какие там предложены решения.
  2. Вам нужны retained MQTT-сообщения - Сохранение mqtt значений при перезагрузке
1 лайк
  1. Есть описание команд runShellCommand? Так и не понятно как получить время UNIX.

Возможно Павел неправильно вас понял, попробуйте вот такой вариант: https://stackoverflow.com/questions/221294/how-do-you-get-a-timestamp-in-javascript

1 лайк

Описание есть здесь: https://github.com/contactless/wb-rules/blob/master/README.md

  1. Спасибо Andrey_Yantsen.
    Правильный ответ DT_UNIX = Math.round(Date.now()/1000)
  2. Как читать в скрипты нестандартные топики? (публиковать получилось)
  3. Хочу реализовать механизм отправки нестандартных топиков:
  • при изменении значения на delta_%
  • через каждые delta_minut
    Я так понимаю это два отдельных правила?
    Взводим какой-то глобальный таймер_1. Постоянно проверяем изменение на delta_%. Если совпадение, то публикуем и взводим таймер_1. Если изменения за delta_minut не произошло, то публикуем и взводим таймер.
    Возможно ли запоминать какието значения в “глобальных” переменных чтоб не пришлось для сохранения нужных значений публиковать лишние топики?
  1. Можно как то получить время когда опубликован топик?

Насколько я помню, в движке сценариев Wiren Board нельзя подписываться на произвольные топики. Поэтому у вас два варианта:

  1. Отправлять в топик, который соответствует соглашениям WB, т.е. в топик вида /devices//controls/ , при этом рядом должен быть retained-сообщение в топике /devices//controls//meta/type с типом данных, например “text”.

  2. Не использовать движок сценариев WB, просто написать скрипт для преобразования с нуля.

Я провел полное восстановление прошивки в контроллере. Последняя версия.
Сейчас попробовал и движок правил выдает ошибку если правило без названия.
Значит в прошивке старый движок правил? Для получения Движка правил wb-rules 2.0 надо провести обновление?

Евгений не совсем понял вашу мысль. Например, мне необходимо передать по MQTT в сервер иридиум IP eth,ppp,wlan у всех этих данных тип TEXT.

Сервер не видит эти параметры. Каким образом перевести данные из типа техт, например в string?
Подскажите пожалуйста.

Расскажите, пожалуйста, подробнее: вы пытаетесь данные из MQTT-брокера Wiren Board завести в iRidium server? Как настраиваете iRidium server и что получается?

вы пытаетесь данные из MQTT-брокера Wiren Board завести в iRidium server?
-ДА

Настраиваю как обычно, если вам знаком иридиум, ниже скрин. Но на сервере данные теги не отображаются, методом тыка понял что из-за типа данных. У иридиума нет тип данных TEXT, только String. Вот и стоит задача каким-то образом на WB конвертировать text в string чтобы сервер иридиума увидел эти топики.

изображение

данные из каких-то других топиков Wiren Board получилось завести? Пришлите для них скриншот тоже, пожалуйста

Пример ниже
изображение

изображение

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

  1. Чтобы убедиться, что дело в не в типе строки, может для EXT1_DR7 выставить тип String и проверить.
  2. Чтобы сделать топик без пробела, можете отредактировать /usr/share/wb-rules-system/rules/network.js и перезапустить wb-rules, либо создать виртуальное, в котором значение всегда такое же, как в нужном топике.