# V-Fire Monitor 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 - 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. ## 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. ## Requisitos - Python 3.10+ - Conectividade com as centrais via Modbus/TCP - Acesso ao servidor Zabbix, quando a integracao estiver habilitada Instalacao: ```bash 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.