ULC Lab · implementação reproduzível
Laboratório: Automação de Iluminação com OpenHAB, MQTT e Grafana
Você vai implementar uma automação de iluminação simulada, integrando OpenHAB, um broker MQTT e monitoramento com Grafana, em até 2 horas. O laboratório usa VMs Linux e dispositivos simulados, sem hardware dedicado.

- Duração estimada
- 120 min
- Passos
- 13
- Validações
- 5
- Versões da documentação consultada
- OpenHAB 3.4 · Eclipse Mosquitto 2.0 · Grafana 10.0 · Telegraf 1.29 · Python 3.10
Este laboratório mostra como orquestrar automação de ambientes usando OpenHAB, MQTT e Grafana, simulando sensores e atuadores. Você aprende a integrar múltiplos protocolos, visualizar dados em tempo real e aplicar boas práticas de segurança e monitoramento em um cenário corporativo.
Topologia
Três VMs em uma rede privada: OpenHAB (192.168.56.10), Mosquitto MQTT Broker (192.168.56.11), Grafana (192.168.56.12). Um script Python simula sensores/atuadores MQTT na máquina do OpenHAB. OpenHAB publica comandos e lê estados via MQTT. Grafana monitora tópicos MQTT via Telegraf.
[Sensor/Atuador Simulado]
|
(MQTT)
|
[Mosquitto Broker 192.168.56.11]
/ \
[OpenHAB 192.168.56.10] [Telegraf]
| |
(REST) (MQTT)
| |
[Grafana 192.168.56.12]Equipamentos e software
| Item | Requisito, licença ou versão |
|---|---|
| VM Linux (OpenHAB) | 2 vCPU, 2GB RAM, Ubuntu 22.04 ou Debian 11 |
| VM Linux (Mosquitto) | 1 vCPU, 512MB RAM, Ubuntu 22.04 ou Debian 11 |
| VM Linux (Grafana/Telegraf) | 2 vCPU, 2GB RAM, Ubuntu 22.04 ou Debian 11 |
| OpenHAB | EPL-2.0 · 3.4 |
| Eclipse Mosquitto | EPL-2.0 · 2.0 |
| Grafana | AGPL-3.0 · 10.0 |
| Telegraf | MIT · 1.29 |
| Python | PSF · 3.10 |
Roteiro
- Preparar as VMs e a rede privada
Crie três VMs Linux em uma rede virtual privada (NAT ou bridge). Use endereços 192.168.56.10, 192.168.56.11 e 192.168.56.12. Isso isola o ambiente e evita conflitos.
O que você deve ver: As três VMs se pingam mutuamente.
- Instalar e configurar o Mosquitto MQTT Broker
No 192.168.56.11, instale o Mosquitto. MQTT é o padrão para integração IoT leve e interoperável.
sudo apt update && sudo apt install -y mosquitto mosquitto-clients sudo systemctl enable --now mosquittoO que você deve ver: Mosquitto rodando na porta 1883.
- Instalar o OpenHAB
No 192.168.56.10, instale o OpenHAB usando o repositório oficial. OpenHAB é a plataforma central de automação.
wget -qO - 'https://openhab.org/downloads/openhab-key.gpg' | sudo apt-key add - echo 'deb https://openhab.jfrog.io/artifactory/openhab-linuxpkg stable main' | sudo tee /etc/apt/sources.list.d/openhab.list sudo apt update && sudo apt install -y openhab sudo systemctl enable --now openhabO que você deve ver: OpenHAB disponível em http://192.168.56.10:8080
- Instalar Grafana e Telegraf
No 192.168.56.12, instale Grafana e Telegraf. Grafana permite dashboards, Telegraf coleta dados MQTT.
sudo apt update && sudo apt install -y grafana telegraf sudo systemctl enable --now grafana-server telegrafO que você deve ver: Grafana disponível em http://192.168.56.12:3000
- Configurar tópico MQTT e usuário
No Mosquitto, crie um usuário e senha para autenticação básica. Segurança mínima para evitar acesso anônimo.
sudo mosquitto_passwd -c /etc/mosquitto/passwd openhabuser # Edite /etc/mosquitto/conf.d/auth.conf e adicione: allow_anonymous false password_file /etc/mosquitto/passwd sudo systemctl restart mosquittoO que você deve ver: Mosquitto só aceita conexões autenticadas.
- Testar o broker MQTT
Teste publicação e subscrição MQTT localmente. Isso garante que o broker está funcional.
mosquitto_sub -h 127.0.0.1 -t 'test/topic' -u openhabuser -P <senha> & echo 'hello' | mosquitto_pub -h 127.0.0.1 -t 'test/topic' -u openhabuser -P <senha>O que você deve ver: Mensagem 'hello' recebida pelo subscriber.
- Configurar o binding MQTT no OpenHAB
No OpenHAB, instale o binding MQTT pela interface Paper UI (Configurações > Add-ons > Bindings > MQTT Binding). O binding conecta o OpenHAB ao broker.
O que você deve ver: MQTT Binding listado como instalado.
- Adicionar broker MQTT no OpenHAB
Adicione um broker MQTT em OpenHAB (Configurações > Things > + > MQTT Broker). Use IP 192.168.56.11, porta 1883, usuário e senha criados.
O que você deve ver: Broker MQTT aparece como ONLINE.
- Criar um Thing e Item para lâmpada MQTT
No OpenHAB, crie um Generic MQTT Thing com um canal do tipo Switch ligado ao tópico 'lab/lamp1/set' (comando) e 'lab/lamp1/state' (estado). Isso simula uma lâmpada controlável.
O que você deve ver: Thing e Item criados e visíveis no OpenHAB.
- Simular sensor/atuador MQTT com Python
Na VM OpenHAB, crie um script Python que subscribe em 'lab/lamp1/set' e publica em 'lab/lamp1/state'. Isso simula a resposta de um dispositivo real.
pip install paho-mqtt cat > lamp_sim.py <<EOF import paho.mqtt.client as mqtt broker = '192.168.56.11' user = 'openhabuser' pwd = '<senha>' state = 'OFF' def on_message(client, userdata, msg): global state if msg.topic == 'lab/lamp1/set': state = msg.payload.decode() client.publish('lab/lamp1/state', state) client = mqtt.Client() client.username_pw_set(user, pwd) client.connect(broker, 1883) client.subscribe('lab/lamp1/set') client.on_message = on_message client.loop_forever() EOF python3 lamp_sim.py &O que você deve ver: Script rodando, pronto para receber comandos.
- Controlar a lâmpada via OpenHAB
No OpenHAB, acione o Item da lâmpada pela interface. O comando será enviado via MQTT, e o estado será atualizado pelo script Python.
O que você deve ver: Ao ligar/desligar, o estado do Item muda e reflete o status enviado pelo script.
- Configurar Telegraf para coletar MQTT
No 192.168.56.12, configure Telegraf para coletar o tópico 'lab/lamp1/state' do Mosquitto. Isso permite visualizar o status da lâmpada no Grafana.
sudo nano /etc/telegraf/telegraf.conf # Adicione: [[inputs.mqtt_consumer]] servers = ["tcp://192.168.56.11:1883"] topics = ["lab/lamp1/state"] username = "openhabuser" password = "<senha>" data_format = "value" sudo systemctl restart telegrafO que você deve ver: Telegraf coleta o estado da lâmpada.
- Criar dashboard no Grafana
No Grafana, adicione o datasource InfluxDB (padrão do Telegraf) e crie um dashboard para visualizar o estado da lâmpada em tempo real.
O que você deve ver: Dashboard mostra o status ON/OFF da lâmpada.
Como saber que funcionou
| Teste | Comando | Critério |
|---|---|---|
| Testar ping entre as VMs | ping 192.168.56.11 | Resposta de todas as VMs. |
| Testar publicação MQTT do OpenHAB | Ao acionar a lâmpada, o script Python imprime o novo estado. | |
| Verificar atualização do estado no OpenHAB | O Item da lâmpada reflete o comando enviado. | |
| Checar coleta de dados no Telegraf | sudo systemctl status telegraf | Telegraf rodando sem erros. |
| Visualizar status no Grafana | Dashboard exibe ON/OFF em tempo real. |
Troubleshooting
| Sintoma | Causa provável | Correção |
|---|---|---|
| OpenHAB não conecta ao broker MQTT | Usuário/senha incorretos ou firewall bloqueando porta 1883 | Verifique credenciais e regras de firewall. |
| Script Python não recebe comandos | Broker não acessível ou tópico incorreto | Confirme IP do broker e nomes dos tópicos. |
| Telegraf não coleta dados MQTT | Configuração errada de servidor ou autenticação | Revise telegraf.conf e reinicie o serviço. |
| Dashboard do Grafana vazio | Datasource mal configurado ou dados não chegando ao InfluxDB | Verifique conexão do Grafana ao InfluxDB e logs do Telegraf. |
| Mosquitto não aceita conexões externas | bind_address restrito no Mosquitto | Edite /etc/mosquitto/mosquitto.conf para permitir 0.0.0.0 ou IP da VM. |
Segurança e hardening
- Use autenticação no Mosquitto; nunca permita anonymous em produção
- Restrinja firewall das VMs para aceitar conexões apenas das VMs do laboratório
- Altere as senhas padrão do OpenHAB e Grafana
- Não exponha portas MQTT, OpenHAB ou Grafana para a internet sem VPN ou proxy seguro
- Monitore logs de autenticação e acesso
Checklist final
Referências
- Mosquitto Documentation · OASIS (MQTT) (mqtt.org)
- Grafana Documentation · Grafana Labs (grafana.com)
- Publicado
- 09/09/2026
- Última revisão
- 09/09/2026
- Versão do conteúdo
- 1.0
- Referências
- 2 oficiais
- Revisão técnica
- redação e revisão por IA, URLs conferidas na publicação
- Status
- Atual
