Software Recriado atravez do codex

This commit is contained in:
2026-03-24 20:18:23 -03:00
parent 1c99bd9ea7
commit 54ad365b4d
12 changed files with 1489 additions and 475 deletions
+87 -27
View File
@@ -1,37 +1,97 @@
# 🔥 V-Fire Monitor - Notifier Master (v1.0)
# V-Fire Monitor
O **V-Fire Monitor** é uma solução robusta de monitoramento e gestão para centrais de alarme de incêndio da linha **Notifier (NFS-320, NFS-640, NFS-3030)**. Desenvolvido para a **Voltec**, o software atua como um gateway inteligente entre o protocolo Modbus/TCP das placas BACNET-GW-3 e o sistema de monitoramento Zabbix, oferecendo uma interface web intuitiva e um sistema de licenciamento proprietário.
Aplicacao Flask para monitoramento de centrais Notifier via Modbus/TCP, com painel web, descoberta de pontos, integracao com Zabbix e licenciamento por hardware.
---
## O que mudou nesta refatoracao
## 🚀 Funcionalidades Principais
- Persistencia JSON com escrita atomica e migracao de configuracao legada.
- Login com hash de senha em vez de senha em texto puro no arquivo de configuracao.
- Chave secreta do Flask persistida localmente, sem valor fixo no codigo.
- Validacao de payloads da API e respostas de erro consistentes.
- Logging basico para diagnostico, no lugar de falhas silenciosas.
- Polling Modbus e discovery por blocos, reduzindo chamadas individuais.
- Frontend com tratamento de erro e textos corrigidos.
- Gerador de licenca com argumentos de linha de comando e validacao de data.
* **Monitoramento Multi-Node:** Gerenciamento de múltiplas centrais simultaneamente via IP/Modbus.
* **Auto-Discovery Ultra:** Varredura automática de endereços Modbus (registradores 1-600) para identificação instantânea de dispositivos.
* **Integração Nativa Zabbix:** * Envio de **LLD (Low Level Discovery)** para autocadastro de itens.
* Monitoramento de **Status de Evento** (Alarme, Normal, Removido).
* Monitoramento de **Integridade de Comunicação** (Link de dados do ponto).
* **Gestão de Licenciamento:** * Proteção por **Hardware ID (HWID)** vinculada à máquina física.
* Controle de expiração por data com contador regressivo no painel.
* **Persistência de Dados:** Nomes personalizados de sensores são preservados no banco de dados local (`.json`), mesmo após novos scans.
* **Interface Web Profissional:** Painel em *Dark Mode* com indicadores visuais coloridos e status em tempo real.
## Estrutura
---
- `monitor.py`: entrypoint simples da aplicacao Flask.
- `vfire_monitor/__init__.py`: app factory e bootstrap da aplicacao.
- `vfire_monitor/core.py`: regras de negocio, persistencia, licenca e engine de monitoramento.
- `vfire_monitor/routes.py`: rotas web e APIs.
- `generator.py`: gerador de serial de licenca.
- `templates/`: telas do login e dashboard.
- `tests/`: suite inicial de testes automatizados.
- `config_nodes.json`: configuracao persistida da aplicacao.
- `mapa_dispositivos.json`: mapa de dispositivos descobertos.
- `license.key`: serial instalado localmente.
- `app_secret.key`: segredo de sessao gerado automaticamente na primeira execucao.
## 📂 Estrutura do Projeto
## Requisitos
* `monitor.py`: Core do sistema. Gerencia o loop de leitura Modbus, o servidor Flask e o envio de métricas via Zabbix Sender.
* `generator.py`: Ferramenta administrativa da Voltec para gerar seriais de ativação criptografados.
* `templates/`:
* `login.html`: Interface de autenticação segura.
* `index.html`: Dashboard principal com monitoramento de nós, sensores e licença.
* `config_nodes.json`: Arquivo de persistência para IPs das centrais e endereços do servidor Zabbix.
* `mapa_dispositivos.json`: Mapeamento detalhado de cada endereço Modbus e seu rótulo personalizado.
- Python 3.10+
- Conectividade com as centrais via Modbus/TCP
- Acesso ao servidor Zabbix, quando a integracao estiver habilitada
---
Instalacao:
## 🛠️ Instalação e Requisitos
### Dependências Python
```bash
pip install flask flask-login pyModbusTCP zabbix-utils cryptography
pip install -r requirements.txt
```
## Variaveis de ambiente
Veja `.env.example`.
As principais:
- `VFM_DEFAULT_PASSWORD`: senha inicial do usuario `admin` na primeira carga do sistema.
- `VFM_APP_SECRET`: opcional, substitui o segredo salvo em `app_secret.key`.
- `VFM_LICENSE_MASTER_KEY`: chave mestre do licenciamento. Em producao, use esta variavel e remova a dependencia da chave legada.
- `VFM_ENV`: use `production` para obrigar `VFM_LICENSE_MASTER_KEY` no startup.
- `VFM_LOG_LEVEL`: nivel de log, por exemplo `INFO` ou `DEBUG`.
- `PORT`: porta HTTP da aplicacao.
## Execucao
```bash
python monitor.py
```
O sistema sobe em `http://0.0.0.0:8080` por padrao.
## Geracao de licenca
Modo interativo:
```bash
python generator.py
```
Modo por argumentos:
```bash
python generator.py --hwid "UUID-DO-CLIENTE" --cliente "Cliente" --expira 2026-12-31
```
## Observacoes operacionais
- A senha do painel fica armazenada como hash em `config_nodes.json`.
- Se existir configuracao antiga com `web_password`, ela e migrada automaticamente para `web_password_hash`.
- Em ambiente de desenvolvimento, o sistema ainda aceita a chave de licenca legada embutida para manter compatibilidade.
- Em ambiente de producao (`VFM_ENV=production`), `VFM_LICENSE_MASTER_KEY` passa a ser obrigatoria e o sistema falha no startup sem ela.
- Bootstrap continua sendo carregado via CDN. Se o ambiente nao tiver acesso externo, copie os assets localmente e ajuste os templates.
## Testes
Executar:
```bash
pytest
```
## Proximos passos recomendados
- Adicionar testes cobrindo polling Modbus e integracao com Zabbix com doubles dedicados.
- Separar configuracao e logging em modulos proprios se a aplicacao continuar crescendo.
- Trocar Bootstrap via CDN por assets locais se o ambiente alvo nao tiver acesso externo.