HALBERT é um pequeno projeto Node.js, que deve ser executado no Raspberry Pi . Ele foi projetado para ser facilmente dispensável usando módulos simples e fáceis de escrever. O nome é uma combinação do computador HAL-9000 de 2001: Uma Odisséia no Espaço e o nome estereotipado do mordomo Albert .
Halbert possui os seguintes recursos:
Para começar, baixe o Halbert-CLI do npm
npm install -g halbert-cli
ou usando fio.
yarn global add halbert-cli
Em seguida, crie uma nova instância HALBERT usando. Isso criará uma nova pasta com o nome fornecido e, em seguida, criará arquivos e pastas padrão.
halbert new < directory-name >
Você pode então alterar o diretório para o recém-criado. Depois disso, você pode iniciar o sistema usando halbert start
. ( Se o processo npm install
falhou, talvez seja necessário fazer isso manualmente antes de iniciar. )
cd < directory-name >
halbert start
Ao criar uma nova instância HALBERT, você obtém uma estrutura de pastas semelhante a esta:
your-directory
halbert.config.json
modules/
node_modules/
package.json
persist
halbert.config.json - Este é o arquivo de configuração. Seus recursos estão documentados aqui. Este arquivo armazena a configuração principal do próprio sistema, mas também de todos os seus módulos.
módulos/ - Esta é a pasta onde você pode colocar seus próprios módulos. Você pode criá-los você mesmo ou baixá-los de outras fontes.
node_modules/ - Sua pasta de módulos NPM.
package.json - Seu arquivo package.json. Usado para instalar o halbert-core.
persist/ - Usado para armazenar dados que são persistentes durante as inicializações do sistema.
Esta é a aparência de um exemplo de configuração:
{
"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"
}
}
}
Em breve
Os módulos são a principal fonte de lógica do Halbert. Existem vários módulos integrados, fornecendo funcionalidade básica. Mas o principal objetivo deste sistema é que os usuários possam criar e compartilhar seus próprios módulos.
Crie uma nova pasta com o nome do módulo desejado (deve estar em letras minúsculas e sem espaços). Dentro dessa pasta, crie um arquivo index.js. Este será o seu ponto de entrada. Um arquivo index.js padrão ficaria assim:
module . exports = function ( builder ) {
// Your Code in here
} ;
O objeto construtor é um utilitário que dá acesso aos sistemas subjacentes, como widgets, rotas de API, ações ou gatilhos.
O Builder consiste em vários subobjetos diferentes.
Este construtor permite criar acessórios para serem usados pelo Home Kit da Apple. Como Halbert implanta um HomeKit-Bridge, você pode tornar controláveis as coisas que está construindo por meio do aplicativo iOS Home.
createAccessory(name, id)
-> Accessory
Crie um acessório e devolva-o. Se você quiser saber como trabalhar ainda mais com esses objetos acessórios, consulte HAP-NodeJS.
getAccessories()
-> Array
Obtenha uma lista dos acessórios registrados deste módulo.
Este construtor permite criar ações a serem usadas por outros módulos, widgets, etc. Você pode encadear essas chamadas.
createAction(actionId)
-> ActionBuilder
Crie uma ação com o ID fornecido.
setMeta(name, sentence)
-> ActionBuilder
Defina os metadados da ação. Isso significa o título da ação e a frase. A parte da frase deve caber na frase ' If trigger, then [X] '.
setCallback()
-> ActionBuilder
Defina o retorno de chamada para uma chamada de ação. O retorno de chamada será fornecido com um argumento input
. Por exemplo
. setCallback ( function ( input ) {
console . log ( input . temperature ) ;
} ) ;
getActions()
-> Array
Obtenha uma lista das ações deste módulo.
O código é formatado usando o mais bonito do JLongster.