Сниппеты



  • Сниппеты - это небольшие фрагменты кода, пригодные для повторного использования.

    В системе intraHouse можно использовать сниппеты для получения значений устройств без привязки к каналам плагинов. То есть это легковесная замена плагина.

    Данные можно получить, используя http-запрос, или запуская команду терминала, или считывая файл.

    Например, в ОС Linux многие значения можно получить просто читая файл.

    Подробнее о сниппетах можно почитать в документации

    В этой теме можно задавать вопросы по сниппетам и делиться с коллегами готовыми кодами сниппетов.



  • У устройств, которые для получения значений используют сниппеты, есть графа зависимости сниппетов. В документации об этом не написано. Для чего она? Собственно меня интересует при задании интервала запуска сниппета возможность привязки к определенному периоду, как в планировщике cron. Например, запускать каждую минуту в 0 секунд, или каждый час в 15 мин 10 секунд, или каждое воскресенье в 4.30 утра.



  • @intrahouse, @intrapro сделал сниппет для опроса канала I2C MegaD. Работает, однако поскольку никакой обработки не нужно, то может его можно сократить? Собственно вопрос к знатокам js)).

    /**
    * New snippet
    */
    
    module.exports = callback => {
    
      require('http').get('http://192.168.11.22/sec/?pt=33&scl=30&i2c_dev=htu21d', res => {
        if (res.statusCode != 200) {
          res.resume();
          callback("statusCode="+res.statusCode); // Сайт вернул статус ошибки, данные не получены
          return;
        }
    
        let rawData = '';
        res.on('data', chunk => {
          rawData += chunk;
        });
        res.on('end', () => {
          const arr = rawData;
          if (arr && arr.length>1) {
            callback(null, arr);  // Данные получены, парсинг удачен 
          } else {
            callback("Regexp вернул null");  // Данные получены, но парсинг неудачен 
          }
        });
      });
    };
    


  • @Alex_Jet Если работает, то по старому анекдоту про программиста и солнце, лучше и не трогать 🙂

    А серьезно (так понимаю, ожидается вещественное число), обработку результата можно сделать так:

    res.on('end', () => {
          const value = parseFloat(rawData);   
          callback(isNaN(value) ? "Не числовое значение "+rawData : "", value); 
    });
    

    Если придет не число, то в журнале устройства будет сообщение об ошибке



  • Пользователь @int144 написал в Сниппеты:

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

    Зависимость - это npm пакет, который может использоваться внутри сниппета (require). Если пакет не установлен, система попытается его установить. Эта возможность пока в экспериментальной стадии.

    Собственно меня интересует при задании интервала запуска сниппета возможность привязки к определенному периоду, как в планировщике cron. Например, запускать каждую минуту в 0 секунд, или каждый час в 15 мин 10 секунд, или каждое воскресенье в 4.30 утра.

    В сниппетах запуск пока только циклический, привязки к временной сетке нет.

    Каждое воскресенье в 4.30 утра легко сделать в расписании, но там сниппеты не используются, значение нужно получать с помощью сценария и присваивать его устройству: this.assign( sensor, value)

    Остальные варианты - только если очень заморочиться 🙂

    Постараемся учесть ваши пожелания в новой версии системы



  • @intrapro, Вас понял, спасибо



  • @intrapro, спасибо! Я об этом говорил. Сам уже квалификацию программиста потерял((. Причем скорее благодаря вашему продукту))) теперь будет возможность поупражняться! Однако делаю вывод, что если есть плагин, то такие простые вещи нужно делать через него. Другое дело если он что-то не поддерживает.


Log in to reply