Отправка данных по HTTP запросу



  • Добрый день! Подскажите каким образом я могу отправить данные клиенту по HTTP запросу, например, нужно стороннему приложению отправить значение переменной из Intrascada. Приложение формирует Get-запрос и в ответ от Intrascada получаем данный переменной



  • Добрый день.
    Спасибо за интересный вопрос.

    В системе IntraSCADA есть механизм для создания REST API проекта.

    В разделе Источники данных->REST API
    restapi001.jpg
    создаете endpoint со своим маршрутом (обязательный слеш в начале) и сами пишете обработчик.

    Созданные endpoint-ы будут доступны по адресу:

     <url сервера>/restapi/<ваш endpoint>?<ваш query string>
    

    Когда придет запрос, будет запущен созданный вами обработчик.
    Там можно не только получить данные от системы, в вашем случае значение с устройства, но и сделать какую-то обработку, сформировать ответ в нужном принимающей стороне формате.

    Шаблон обработчика сделан для получения данных пользовательских таблиц.

    Вместо этого нужно получить от системы значение свойства устройства
    Вот пример такого обработчика:
    restapi002.jpg

    /**
     * Получить текущее значение свойства устройства 
     * 
     * Пусть запрос будет такой: /restapi/device?dev=VENT1&prop=value
     * 
     *  req - request, объект запроса
     *         req.query - объект, содержащий разобранный query:  {dev:"VENT1", prop:"value"}
     * 
     *  res - response, объект ответа
     *        Результат нужно отправить, используя res.send() или res.json()
     *        При необходимости можно установить соответствующие заголовки.
     *        Например, res.json() эквивалентно 
     *           res.setHeader('Content-Type', 'application/json');
     *           res.send(JSON.stringify(result));
     * 
     *  holder - объект для доступа к данным системы. В частности, доступ к устройствам:
     *         holder.dnSet[<ID устройства>] - объект устройства
     *   
     *  debug - функция для отладки запросов - опционально
     *         Параметр - строка
     *         Когда поступит запрос, в консоли (нижнем окне) будут выводиться сообщения, переданные debug 
    */  
      module.exports = async (req, res, holder, debug) => { 
        try {
          const dev = req.query.dev;
          const prop = req.query.prop || 'value';
          if (!dev) throw {message:'Устройство не задано'}
          
          const devObj = holder.dnSet[dev]; // Найти объект устройства
          if (!devObj) throw {message:'Устройство '+dev+' не найдено!'}
          
          const value =  devObj[prop]; // Текущее значение свойства prop
          const result = { res: 1, dev, prop, value };
          res.json(result); // Вернет json
          debug(JSON.stringify(result)); // Это только для отладки - продублировать результат
          
          // Другой вариант - можно  вернуть и одно значение, но это должна быть строка!!
          // res.send(String(value)); 
         
        } catch (e) {
          debug('ERROR: '+e.message)
          res.json({ res: 0, message: e.message }); // В случае ошибки вернется status=200, но res=0
          
          // Другой вариант - можно вернуть статус ошибки, какой считаете нужным
          // res.status(500).send('Error: ' + e.message);
        }
      };
    

Log in to reply