I
Добрый день.
Спасибо за интересный вопрос.
В системе 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);
}
};