Отправка данных по HTTP запросу
-
Добрый день! Подскажите каким образом я могу отправить данные клиенту по HTTP запросу, например, нужно стороннему приложению отправить значение переменной из Intrascada. Приложение формирует Get-запрос и в ответ от Intrascada получаем данный переменной
-
Добрый день.
Спасибо за интересный вопрос.В системе IntraSCADA есть механизм для создания REST API проекта.
В разделе Источники данных->REST API
создаете endpoint со своим маршрутом (обязательный слеш в начале) и сами пишете обработчик.Созданные endpoint-ы будут доступны по адресу:
<url сервера>/restapi/<ваш endpoint>?<ваш query string>
Когда придет запрос, будет запущен созданный вами обработчик.
Там можно не только получить данные от системы, в вашем случае значение с устройства, но и сделать какую-то обработку, сформировать ответ в нужном принимающей стороне формате.Шаблон обработчика сделан для получения данных пользовательских таблиц.
Вместо этого нужно получить от системы значение свойства устройства
Вот пример такого обработчика:
/** * Получить текущее значение свойства устройства * * Пусть запрос будет такой: /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); } };