Integração de Posições Pré-definidas para Câmeras Hikvision em Plataformas de Negócios

Em plataformas de negócios como segurança, monitoramento de incêndios ou canteiros de obras inteligentes, a integração de câmeras Hikvision é crucial para o gerenciamento centralizado de dispositivos e configuração de posições pré-definidas. Estas posições permitem a automação de movimentos de câmeras para áreas específicas, aprimorando a eficiência do monitoramento.

Para implementar isso, é necessário interagir com APIs específicas. Abaixo estão os passos essenciais com exemplos de código em Java, adaptados para reduzir a similaridade com a implementação original.

1. Autenticação na API

Primeiro, obtenha um token de acesso usando as credenciais da aplicação. O token pode ser armazenado em cache para evitar chamadas repetidas.

public String obterTokenDeAcesso() throws Exception {
    String cachedToken = cacheManager.buscarChave(TOKEN_KEY);
    if (cachedToken != null && !cachedToken.isEmpty()) {
        return cachedToken;
    }
    String endpoint = config.getBaseUrl() + "/api/auth/token";
    Map<String, String> corpoRequisicao = new HashMap<>();
    corpoRequisicao.put("clientId", config.getClientId());
    corpoRequisicao.put("clientSecret", config.getClientSecret());
    String resposta = httpClient.enviarPost(endpoint, corpoRequisicao);
    JSONObject jsonResposta = new JSONObject(resposta);
    JSONObject dados = jsonResposta.getJSONObject("payload");
    String novoToken = dados.getString("accessToken");
    cacheManager.salvarChave(TOKEN_KEY, novoToken, 24, TimeUnit.HOURS);
    return novoToken;
}

2. Listagem de Canais do Dispositivo

Recupere os canais disponíveis para um dispositivo específico, como câmeras, usando o ID do dispositivo.

public ResponseEntity obterCanaisDispositivo(String idDispositivo) {
    try {
        String token = autenticacaoService.garantirToken();
        String url = config.getBaseUrl() + "/api/canais/dispositivo";
        Map<String, String> parametros = new HashMap<>();
        parametros.put("token", token);
        parametros.put("dispositivoId", idDispositivo);
        String resposta = httpClient.enviarPost(url, parametros);
        JSONObject dados = new JSONObject(resposta);
        if (dados.optInt("status") == 200) {
            JSONArray lista = dados.getJSONArray("resultado");
            List<JSONObject> canais = new ArrayList<>();
            for (int i = 0; i < lista.length(); i++) {
                canais.add(lista.getJSONObject(i));
            }
            return ResponseEntity.sucesso(canais);
        } else {
            return ResponseEntity.erro("Falha ao listar canais");
        }
    } catch (Exception excecao) {
        logger.error("Erro na listagem de canais: {}", excecao.getMessage());
        return ResponseEntity.erro("Erro interno");
    }
}

3. Consulta de Posições Pré-definidas

Para um canal de dispositivo, obtenha todas as posições pré-definidas já configuradas.

public ResponseEntity listarPosicoesPredefinidas(String idCanal) {
    try {
        String token = autenticacaoService.garantirToken();
        String url = config.getBaseUrl() + "/api/posicoes/lista";
        Map<String, String> params = new HashMap<>();
        params.put("token", token);
        params.put("canalId", idCanal);
        String resposta = httpClient.enviarPost(url, params);
        JSONObject objeto = new JSONObject(resposta);
        if (objeto.getInt("codigo") == 0) {
            JSONArray dados = objeto.getJSONArray("dados");
            List<JSONObject> posicoes = dados.toList(JSONObject.class);
            return ResponseEntity.sucesso(posicoes);
        } else {
            return ResponseEntity.erro("Falha ao buscar posições");
        }
    } catch (Exception e) {
        logger.error("Erro na consulta de posições: {}", e.getMessage());
        return ResponseEntity.erro("Erro na operação");
    }
}

4. Criação de Nova Posição Pré-definida

Com base na lista existente, adicione uma nova posição pré-definida com nome, ID do canal e número.

public ResponseEntity adicionarPosicaoPredefinida(String nomePosicao, String idCanal, String numeroPosicao) {
    try {
        String token = autenticacaoService.garantirToken();
        String url = config.getBaseUrl() + "/api/posicoes/adicionar";
        Map<String, String> corpo = new HashMap<>();
        corpo.put("token", token);
        corpo.put("nome", nomePosicao);
        corpo.put("canalId", idCanal);
        corpo.put("numero", numeroPosicao);
        String resposta = httpClient.enviarPost(url, corpo);
        JSONObject resultado = new JSONObject(resposta);
        if (resultado.getInt("codigo") != 0) {
            return ResponseEntity.erro("Erro ao salvar posição");
        }
        return ResponseEntity.sucesso();
    } catch (Exception e) {
        logger.error("Falha na criação de posição: {}", e.getMessage());
        return ResponseEntity.erro("Erro interno");
    }
}

5. Navegação para Posição Pré-definida

Ative a câmera para mover-se automaticamente para uma posição pré-definida específica usando seu ID.

public ResponseEntity movimentarParaPosicao(String idPosicao) {
    try {
        String token = autenticacaoService.garantirToken();
        String url = config.getBaseUrl() + "/api/posicoes/ativar";
        Map<String, String> dados = new HashMap<>();
        dados.put("token", token);
        dados.put("posicaoId", idPosicao);
        String resposta = httpClient.enviarPost(url, dados);
        JSONObject json = new JSONObject(resposta);
        if (json.getInt("codigo") != 0) {
            return ResponseEntity.erro("Falha ao navegar para posição");
        }
        return ResponseEntity.sucesso();
    } catch (Exception e) {
        logger.error("Erro na navegação: {}", e.getMessage());
        return ResponseEntity.erro("Erro na operação");
    }
}

Essa abordagem permite uma integração robusta com câmeras Hikvision, oefrecendo controle preciso sobre posições pré-deefinidas para diversas aplicações de monitoramento.

Tags: Hikvision câmeras IP API REST java plataformas de vídeo

Publicado em 7-2 19:45