Система автоматизации загородного дома и ведения домашнего хозяйства «Умный загородный дом» разрабатывается для людей, которые имеют загородный дом и подсобное хозяйство в условиях небольшого бюджета и относительной отдалённости от города. Разработка ведётся с учётом того, что пользоваться системой будут люди, плохо знакомые с компьютером, это важно для пожилого населения, а для установки и настройки системы необходимы базовые навыки работы с компьютером и электротехникой [1].
Система разделяется на 2 части: ведущее устройство (компьютер) и ведомое устройство (микроконтроллер).
Для удешевления аппаратной части системы было принято решение в ведущем устройстве использовать программную платформу Node.js, которая может работать на многих операционных системах, тем самым предоставляя большой выбор устройств конечному потребителю.
Node или Node.js – программная платформа, основанная на движке V8 (транслирующем JavaScript в машинный код), превращающая JavaScript из узкоспециализированного языка в язык общего назначения. Node.js добавляет возможность JavaScript взаимодействовать с устройствами ввода-вывода через свой API (написанный на C++), подключать другие внешние библиотеки, написанные на разных языках, обеспечивая вызовы к ним из JavaScript кода [2].
Разработка ведётся модулями для масштабируемости системы. Основой программного обеспечения ведущего устройства является главный модуль системы, который имеет имя main.js и находится в корневом каталоге системы, файл со свойствами системы имеет имя config.json и находится там же.
В разработке основного модуля системы (ядра программного обеспечения ведущего устройства) используются такие шаблоны проектирования, как:
– реактор (Reactor) – шаблон, лежащий в основе асинхронной природы платформы Node.js;
– обратный вызов (Callback) – функции, вызываемые для передачи результата операции. Заменяют использование инструкции return, которая всегда выполняется синхронно;
– открытый модуль (RevealingModule) – шаблон использует возможность автоматического вызова функции для создания ограниченной области видимости и экспортирования только тех элементов, которые должны быть общедоступными;