Node-RED:Создание нод/Конфигурационные ноды

Материал из Онлайн справочника
Версия от 10:16, 9 сентября 2023; Myagkij (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Конфигурационные ноды[1]

Некоторым нодам необходимо иметь общие настройки. К примеру, ноды «MQTT in» и «MQTT out» имеют общие настройки MQTT-брокера, что позволяет сгруппировать их в одно MQTT-соединение. По умолчанию конфигурационные ноды работают в глобальном контексте, и это значит, что их информацией об их состоянии могут пользоваться все потоки.

Создание конфигурационной ноды

Конфигурационная нода создается так же, как и прочие ноды. Но есть два важных отличия:

  1. В ее свойстве «category» должно стоять «config»
  2. В ее HTML-шаблоне элементы <input> имеют ID «node-config-input-<название_свойства>»

Файл «remote-server.html»

<script type="text/javascript">
    RED.nodes.registerType('remote-server',{
        category: 'config',
        defaults: {
            host: {value:"localhost",required:true},
            port: {value:1234,required:true,validate:RED.validators.number()},
        },
        label: function() {
            return this.host+":"+this.port;
        }
    });
</script>

<script type="text/x-red" data-template-name="remote-server">
    <div class="form-row">
        <label for="node-config-input-host"><i class="icon-bookmark"></i> Host</label>
        <input type="text" id="node-config-input-host">
    </div>
    <div class="form-row">
        <label for="node-config-input-port"><i class="icon-bookmark"></i> Port</label>
        <input type="text" id="node-config-input-port">
    </div>
</script>

Файл «remote-server.js»

module.exports = function(RED) {
    function RemoteServerNode(n) {
        RED.nodes.createNode(this,n);
        this.host = n.host;
        this.port = n.port;
    }
    RED.nodes.registerType("remote-server",RemoteServerNode);
}

В этом примере нода служит простым контейнером для настроек. Но здесь не задано то, как она будет вести себя в среде выполнения Node-RED.

Часто конфигурационные ноды используются, чтобы задать общие настройки для подключения к удаленной системе. В этом случае конфигурационная нода также может быть ответственна за создание соединения и то, чтобы этим соединением могли пользоваться другие ноды, использующие эту конфигурационную ноду. В таких случаях конфигурационная нода также должна обрабатывать событие «close», чтобы отключать соединение при остановке работы ноды.

Использование конфигурационной ноды

Использование конфигурационных нод обычными нодами задается путем добавления в массив «defaults» нового свойства, где атрибутом «type» служит тип нужной конфигурационной ноды.

defaults: {
   server: {value:"", type:"remote-server"},
},

Как и в случае с другими свойствами, редактор ищет в HTML-шаблоне элемент <input> с ID «node-input-<название_свойства>». Но, в отличие от других свойств, редактор заменяет элемент <input> на элемент <select>, содержащий доступные экземпляры конфигурационной ноды, а также добавляет кнопку (с карандашом) для открытия меню редактирования конфигурационной ноды.

После этого нода сможет использовать это свойство, чтобы получить доступ к конфигурационной ноде в среде выполнения Node-RED.

module.exports = function(RED) {
    function MyNode(config) {
        RED.nodes.createNode(this,config);

        // Извлекаем данные конфигурационной ноды:
        this.server = RED.nodes.getNode(config.server);

        if (this.server) {
            // Делаем что-то с:
            //  this.server.host
            //  this.server.port
        } else {
            // Конфигурационной ноды не задано
        }
    }
    RED.nodes.registerType("my-node",MyNode);
}

См.также

Внешние ссылки