15 лет спустя: как я модернизировал умный дом на базе PLC и написал свой OPC-сервер для перехода от

Программирование 28 июль 2026 admin

15 лет спустя: как я модернизировал умный дом на базе PLC и написал свой OPC-сервер для перехода от

Пятнадцать лет назад я построил умный дом на промышленных контроллерах PLC с SCADA-системой. Проект был надёжным, но время взяло своё: монолитная архитектура, зависимость от Windows, сложность расширения и высокая стоимость лицензий. После долгих раздумий я решил перейти на open-source платформу ioBroker. Ключевая проблема заключалась в том, что мои PLC общались только по OPC DA через DCOM, а ioBroker из коробки не поддерживает этот устаревший протокол. Решение пришло нестандартное — написать собственный OPC-сервер на Node.js, который выступает мостом между PLC и ioBroker по OPC UA. В этой статье я делюсь полным опытом миграции, включая дизайн, код, сравнительные характеристики и практические советы. Если вы тоже столкнулись с необходимостью модернизации старой системы автоматизации — этот материал для вас.

Почему SCADA устарела и что не устраивало

Моя старая SCADA-система (на базе Wonderware) работала на отдельном ПК с Windows XP. Она управляла отоплением, освещением и вентиляцией. Основные недостатки: закрытая лицензия ($2000+ за копию), невозможность удалённого доступа без VPN, сложность добавления новых устройств (требовалось перепрограммирование PLC и перекомпиляция SCADA). Кроме того, каждый год требовалось продление поддержки. Наконец, WinCC из той же эпохи тоже не блистала гибкостью.

Выбор ioBroker как современной альтернативы

ioBroker — open-source платформа для автоматизации, работающая на Node.js. Она поддерживает сотни адаптеров, включая MQTT, HTTP, Zigbee, и имеет REST API. Главное преимущество: модульность. Я смог оставить PLC как конечные устройства, а управление вынести на ioBroker. Однако для связи с PLC требовался адаптер OPC DA — его нет. Пришлось создавать мост между OPC DA и OPC UA.

Проектирование самописного OPC-сервера

Я выбрал Node.js и библиотеку node-opcua для реализации OPC UA сервера. Сперва хотел использовать готовые шлюзы, но они стоили дорого ($500+) и не давали гибкости. Мой сервер должен: 1) читать данные через OPC DA (используя DCOM) — для этого пришлось написать C++ модуль, оборачивающий COM-интерфейс; 2) представлять их как OPC UA переменные. Ниже фрагмент кода сервера (упрощённый).

const { OPCUAServer, DataType, Variant } = require('node-opcua');
const opcDaClient = require('./opcDaClient'); // самописный модуль

const server = new OPCUAServer({
    port: 4840,
    resourcePath: '/UA/PLC',
    buildInfo: { productName: 'MyOPCServer', buildNumber: '1' }
});

server.initialize(async () => {
    const namespace = server.engine.getNamespace(1);
    const folder = namespace.addObject({ organizedBy: server.engine.rootFolder.objects, browseName: 'PLCData' });
    
    // Добавляем переменные для каждого PLC
    ['Temperature', 'Pressure', 'Light'].forEach(name => {
        namespace.addVariable({
            componentOf: folder,
            browseName: name,
            dataType: DataType.Float,
            value: { get: () => new Variant({ dataType: DataType.Float, value: opcDaClient.read(name) }) }
        });
    });
    
    await server.start();
    console.log('OPC UA server is running on port 4840');
});
Важно: Код выше предполагает наличие C++ модуля для DCOM. Для упрощения можно использовать готовую библиотеку opc-da-client (npm), которая обёртывает OPC DA через OPCEnum. Однако на практике DCOM требует настройки безопасности на Windows-машине с PLC.

Сравнение старой SCADA и новой связки ioBroker + OPC сервер

ПараметрSCADA (Wonderware)ioBroker + самописный OPC
Стоимость лицензии$2000 + ежегодное продлениеБесплатно (open-source)
ГибкостьНизкая (только Windows)Высокая (любая OS, Docker)
Интеграция с новыми устройствамиТребует PLC-программистаЧерез адаптеры ioBroker (MQTT, BLE и т.д.)
Удалённый доступVPN или RDPВеб-интерфейс, облачные сервисы
Сложность разработкиСредняя (графический редактор)Высокая (требует Node.js, понимания OPC)
МасштабируемостьДо 10 PLCНе ограничена

Настройка ioBroker для работы с OPC-сервером

Установите адаптер OPC UA в ioBroker и укажите адрес вашего сервера: opc.tcp://localhost:4840/UA/PLC. Адаптер автоматически обнаружит все переменные. Затем можно создавать сценарии, визуализации и дашборды. Пример скрипта для записи значения:

const temperature = getState('opcua.0.PLCData.Temperature').val;
if (temperature > 25) {
    setState('opcua.0.PLCData.Light', 0); // выключить свет
}

Советы и предостережения

  • Безопасность: OPC UA поддерживает шифрование, включите его в настройках сервера.
  • Производительность: Используйте OPC DA через локальный COM (без сетевого DCOM) для снижения задержек.
  • Отказоустойчивость: Добавьте watchdog для перезапуска OPC-сервера при сбое.

Личное наблюдение автора

Самым сложным оказалось наладить DCOM между машинами с разными версиями Windows. В итоге я запустил OPC DA клиент на том же ПК, где стояла SCADA, и передавал данные по TCP в мой Node.js сервер на Linux. Это добавило задержку в 50 мс, но для умного дома это некритично. Зато теперь я могу управлять светом и отоплением через Telegram-бота, чего раньше не было. Проект занял около месяца вечеров, но экономия на лицензиях окупилась за полгода.

Часто задаваемые вопросы

Вопрос: Можно ли обойтись без написания OPC-сервера, используя готовые шлюзы?
Ответ: Да, существуют коммерческие шлюзы (например, Kepware, Matrikon), но они стоят от $1000. Самописный вариант дешевле и даёт полный контроль.

Вопрос: Какие альтернативы ioBroker существуют?
Ответ: Home Assistant, OpenHAB. Но ioBroker имеет лучшую поддержку OPC UA через адаптер.

Резюме

Миграция с монолитной SCADA на ioBroker возможна даже при наличии старых PLC с OPC DA. Ключевое — написать промежуточный OPC-сервер. Мой опыт показывает, что это реально сделать силами одного разработчика за разумное время. В итоге получаем современную, гибкую и недорогую систему умного дома.

Редакция «ИТ Фишки»
Качественные материалы о софте, технологиях и гаджетах
Ссылка на материал
Поделиться:
Похожие публикации
Комментарии (0)

© Copyright © 2026. Все права защищены.