Este projeto consiste na portabilidade e evolução do sistema Soft-IoT Local Storage e Soft-IoT Mapping Devices da linguagem Java para Python. A solução foi reestruturada utilizando a arquitetura Zato Project Blueprint, visando uma implantação moderna baseada em microsserviços e práticas de DevOps.
O projeto atua como um Gateway e Armazenamento Local para dispositivos IoT, orquestrando a comunicação via protocolo TATU, gerenciando um Broker MQTT interno e expondo APIs de serviço via Zato ESB.
O projeto segue a estrutura de diretórios do Zato Blueprint, separando configurações, dependências e implementação:
myproject/
├── config/
│ ├── enmasse/ # Definições de canais, segurança e conexões (YAML)
│ ├── python-reqs/ # Dependências Python (pip)
│ └── user-conf/ # Configurações .ini do Zato
└── impl/
├── scripts/ # Scripts de provisionamento (run-container.sh)
└── src/
└── services/ # Serviços Zato (Lógica de negócio em Python)
└── archives/ # Arquivos de configuração dos dispositivos IoT
O funcionamento do sistema depende de uma Imagem Docker Personalizada que integra múltiplos serviços em um único container. Abaixo estão os principais módulos que compõem a solução:
Diferente de uma instalação padrão, este projeto utiliza uma imagem Docker customizada (esb-zato-soft-iot) que adiciona funcionalidades críticas para o ambiente IoT:
- Broker MQTT (Mosquitto): Integrado diretamente no container. O Zato e os dispositivos comunicam-se localmente ou externamente através das portas
1883(TCP) e9001(WebSockets). - Extended TATU Wrapper: A biblioteca Python (
extended-tatu-wrapper) é instalada nativamente na imagem, permitindo que os serviços do Zato compreendam e construam mensagens do protocolo TATU (FLOW, GET, CONNECT). - Orquestração de Inicialização (
start_wrapper.sh): Um script bash que garante a ordem correta de subida dos serviços:- Inicia o Mosquitto em background.
- Aguarda a liberação das portas.
- Inicia o Scheduler Externo.
- Transfere o controle para o processo principal do Zato.
Um agendador externo desenvolvido em Python que roda paralelamente ao Zato.
- Função: Ler o arquivo de configuração
enmasse.yamle disparar requisições HTTP para os serviços do Zato (Jobs) conforme configurado. - Diferencial: Possui uma lógica de
wait_for_zato, garantindo que os jobs só comecem a ser disparados quando a API do Zato estiver respondendo ao/ping(status 200).
A lógica de comunicação IoT foi migrada do Java para Python, utilizando o repositório extended-tatu-wrapper. Isso permite que o Local Storage interprete payloads JSON complexos enviados pelos dispositivos virtuais (Virtual FoT Device).
O projeto é totalmente containerizado. Para iniciar o ambiente:
- Docker instalado e rodando.
- Portas
1883,8183,8184,11225,33033,35672,9001,11223,22022, livres no host.
-
Navegue até o script de execução:
cd myproject/impl/scripts -
Execute o container: O script
run-container.shfoi configurado para montar os volumes de código (src/) e configuração (enmasse.yaml) automaticamente../run-container.sh
Este comando irá parar qualquer container anterior com o mesmo nome, fazer o pull da imagem base (se necessário) e iniciar o ambiente.
Você deve ver mensagens como
[WRAPPER] Iniciando Mosquitto Broker...eZato está ONLINE! Iniciando agendamento....
Após a inicialização, você pode testar o sistema com um dispositivo virtual:
Para testar o fluxo completo, execute a versão Python do Virtual FoT Device (presente no repositório virtual-fot-device:python_version).
- Configure o dispositivo para apontar para o IP da sua máquina (onde o container Zato está rodando).
- O dispositivo enviará um
CONNECTpara o tópicodev/CONNECTIONS. - O Local Storage (Zato) deve processar e responder o dispositivo.
- Caso o dispositivo tenha uma configuração pre-existente ela será aplicada para o controle do dispositivo, caso contrário será cadastrado o dispositivo e aplicada uma configuração aleatoria dentre os padrões pre-existentes.
Este projeto é o resultado da integração e conversão dos seguintes repositórios:
- Virtual FoT Device (Java/Python):
- Origem dos dispositivos simulados. A versão Python deste dispositivo é utilizada para enviar dados a este Local Storage.
- Extended TATU Wrapper:
- Biblioteca fundamental portada para Python que permite a serialização/deserialização das mensagens IoT.
- Zato Project Blueprint:
- Base arquitetural utilizada para organizar este repositório, facilitando a gestão de configuração (Enmasse) e deploy via Docker.
- Zato ESB Services (Imagem Customizada):
- Contém os scripts
Dockerfile,start_wrapper.shecustom_scheduler.pyque permitem rodar o Zato junto com o Mosquitto.
- Contém os scripts
- Migração Java -> Python: A lógica de persistência e tratamento de mensagens que residia em classes Java (Controllers/Models) agora deve ser implementada como Serviços Zato dentro de
impl/src/services/. - Enmasse: Toda a configuração de canais REST, segurança e agendamentos deve ser feita no arquivo
config/enmasse/enmasse.yaml, que é carregado automaticamente no boot.