Availability для ZigBee устройств

В общем разобрался. На всякий случай отпишу тут, вдруг кому пригодится.
Вносим следующие изменения в файл /usr/share/wb-rules-system/rules/wb-zigbee2mqtt.js:

  • добавляем функцию в самом низу:
function initTrackerAvailability(ctrlName) {
  trackMqtt(base_topic + '/' + ctrlName + '/availability', function (obj) {
    JSON.parse(obj.value, function (k, v) {
      if (k != '') {
        var obj = JSON.parse(topicType);
        var ks = Object.keys(obj);
        var resultIndex = ks.indexOf(k, 0);
        if (resultIndex >= 0) {
          if (!getDevice(ctrlName).isControlExists(k)) {
            getDevice(ctrlName).addControl(k, {
              type: obj[ks[resultIndex]],
              value: v,
              readonly: true,
            });
          }
          dev[ctrlName][k] = v;
        } else {
          if (!getDevice(ctrlName).isControlExists(k)) {
            getDevice(ctrlName).addControl(k, {
              type: 'text',
              value: v,
              readonly: true,
            });
          }
          dev[ctrlName][k] = v != null ? v.toString() : '';
        }
      }
    });
  });
}

и добавляем после строчки “initTracker(v);” (в моем случае это внутри функции “trackMqtt(base_topic + ‘/bridge/devices’, function (obj) {”) вызов “initTrackerAvailability(v);”, чтобы получилось так:

          initTracker(v);
          initTrackerAvailability(v);

После этого в “Настройки => Каналы MQTT” появится топик “/devices/название_устройства/controls/state” со статусом устройства online или offline.

1 лайк