HALBERT — это небольшой Node.js-проект, который должен работать на Raspberry Pi . Он спроектирован так, чтобы его можно было легко использовать с использованием простых и удобных в написании модулей. Название представляет собой комбинацию компьютера HAL-9000 из фильма «2001: Космическая одиссея» и стереотипного имени дворецкого Альберта .
Халберт имеет следующие особенности:
Для начала загрузите Halbert-CLI с npm.
npm install -g halbert-cli
или с помощью пряжи.
yarn global add halbert-cli
Затем создайте новый экземпляр HALBERT, используя. Это создаст новую папку с заданным именем, а затем создаст файлы и папки по умолчанию.
halbert new < directory-name >
Затем вы можете изменить каталог на вновь созданный. После этого можно запустить систему с помощью halbert start
. ( Если процесс npm install
завершился неудачно, возможно, вам придется сделать это вручную перед запуском. )
cd < directory-name >
halbert start
Когда вы создаете новый экземпляр HALBERT, вы получаете структуру папок, подобную этой:
your-directory
halbert.config.json
modules/
node_modules/
package.json
persist
halbert.config.json — это файл конфигурации. Его особенности описаны здесь. В этом файле хранится основная конфигурация самой системы, а также всех ее модулей.
модули/ — это папка, в которую вы можете поместить свои собственные модули. Вы можете создать их самостоятельно или загрузить из других источников.
node_modules/ — папка ваших модулей NPM.
package.json — ваш файл package.json. Используется для установки halbert-core.
persist/ — используется для хранения данных, которые сохраняются при запусках системы.
Вот как выглядит пример конфигурации:
{
"device": {
"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
},
"weather": {
"openWeatherMapApiKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"server": {
"port": 3000,
"cacheTemplates": false
},
"modules": {
"switches": {
"gpio": {
"remote": 15
},
"available": [
{
"id": "desk-leds",
"name": "Desk LED",
"hotwords": ["desk led", "desk leds", "leds on the desk"],
"type": "remote",
"protocol": "intertechno",
"code": "A1"
},
{
"id": "desk-light",
"name": "Desk Light",
"hotwords": ["desk light", "desk lamp", "lamp on the desk", "light on the desk"],
"type": "remote",
"protocol": "intertechno",
"code": "A2"
}
]
},
"ifttt": {
"apiKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"webhookSecret": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
}
}
Вскоре
Модули являются основным источником логики для Халберта. Имеется несколько встроенных модулей, обеспечивающих базовую функциональность. Но основная цель этой системы — предоставить пользователям возможность создавать и делиться своими собственными модулями.
Создайте новую папку с нужным именем модуля (оно должно быть строчным и без пробелов). Внутри этой папки создайте файл index.js. Это будет ваша точка входа. Шаблонный файл index.js будет выглядеть так:
module . exports = function ( builder ) {
// Your Code in here
} ;
Объект-строитель — это утилита, которая предоставляет вам доступ к базовым системам, таким как виджеты, маршруты API, действия или триггеры.
Builder состоит из нескольких различных подобъектов.
Этот конструктор позволяет создавать аксессуары для использования в Apple Home Kit. Поскольку Халберт развертывает HomeKit-Bridge, вы можете сделать все, что вы создаете, управляемым через приложение iOS Home.
createAccessory(name, id)
-> Accessory
Создайте аксессуар и верните его. Если вы хотите узнать, как дальше работать с этими вспомогательными объектами, см. HAP-NodeJS.
getAccessories()
-> Array
Получите список зарегистрированных аксессуаров этого модуля.
Этот конструктор позволяет вам создавать действия, которые будут использоваться другими модулями, виджетами и т. д. Вы можете связывать эти вызовы.
createAction(actionId)
→ ActionBuilder
Создайте действия с предоставленным идентификатором.
setMeta(name, sentence)
-> ActionBuilder
Установите метаданные действия. Это означает название действия и предложение. Часть предложения должна вписываться в предложение « Если триггер, то [Х] ».
setCallback()
-> ActionBuilder
Установите обратный вызов для вызова действия. Обратный вызов будет снабжен input
аргументом. Например
. setCallback ( function ( input ) {
console . log ( input . temperature ) ;
} ) ;
getActions()
-> Array
Получите список действий этого модуля.
Код отформатирован с использованием JLongster's prettier.