Skip to main content

Introdução

O Hermes permite que você personalize comportamentos dos dispositivos e sensores usando scripts em Lua. Use esta linguagem para criar automações, reagir a eventos e comandar atuadores de forma simples e flexível.

Dica

Varios comportamentos comuns estao disponiveis apenas mudando as configuracoes através do Banshee Injector. Use scripts Lua para automacoes mais complexas ou personalizadas.

Estrutura Básica

Os principais objetos globais disponíveis são:

  • Sensor — acesso e controle dos sensores cadastrados através do Banshee
  • Device — acesso e controle dos atuadores
  • EventBus — inscrição e reação a eventos
  • Log — registros de mensagens para o console (info, erro, aviso, sucesso)
  • Utils — funções utilitárias diversas

Exemplo Prático

if false then
require("definitions")
end

-- Sincroniza bomba d’água (Device 0) e sensor de fluxo (Sensor 0)
EventBus.subscribeScalar(0, function(event)
local flowSensor = Sensor.get(0)

if flowSensor == nil then
Log.error(string.format("Erro: Sensor de fluxo com ID 0 não encontrado"))
return
end

-- Se o novo estado é 'ligado' (1), ativa e reseta o sensor
if event.value == 1 then
flowSensor:resume()
flowSensor:resetTimer()
Log.info(string.format("[%d us] Bomba LIGADA (Device %d): Sensor de fluxo ativado", event.timestamp, event.sourceId))
else
flowSensor:pause()
Log.info(string.format("[%d us] Bomba DESLIGADA (Device %d): Sensor de fluxo pausado", event.timestamp, event.sourceId))
end
end)

Log.success("Sincronização inicializada: Sensor 0 acompanha Device 0")

O que este script faz?

  • Toda vez que o atuador “bomba d’água” (ID 0) muda de estado:
    • Se ligar, retoma e reinicia o timer do sensor de fluxo
    • Se desligar, pausa o sensor
  • Exibe logs informativos para acompanhamento
  • Se o sensor não for encontrado, registra um erro

Dicas

  • Você pode acessar qualquer um dos dispositivos ou sensores definidos nas configurações alterando o ID em Device.get(ID) ou Sensor.get(ID)
  • Consulte os métodos disponíveis de cada classe nas próximas seções deste guia
Números de 64 bits

Para exibir números maiores que 32 bits (como Utils.getTime() e Utils.getTimeSinceBoot()), use a sintaxe %.0f no string.format:

-- ❌ Incorreto - causa erro no log 
Log.info(string.format("Tempo: %d ms", Utils.getTime()))

-- ✅ Correto - usa %.0f para números grandes
Log.info(string.format("Tempo: %.0f ms", Utils.getTime()))