> For the complete documentation index, see [llms.txt](https://portal-integracao.intelbras.com.br/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://portal-integracao.intelbras.com.br/cameras-and-gravadores/integracao-api-cftvip-e-mibo/cameras-e-gravadores/funcionalidades-gerais-do-dispositivo.md).

# Funcionalidades Gerais do Dispositivo

> Este guia prático cobre as APIs de **Funcionalidades Gerais** de dispositivos (câmeras/DVR/NVR), incluindo autenticação, leitura de informações do equipamento, data/hora, idioma, NTP, manutenção (reboot/factory reset), diagnóstico (CPU/memória/temperatura), atualização de firmware e assinaturas de status.

***

## Dicas & Boas Práticas <a href="#dicas-and-boas-praticas" id="dicas-and-boas-praticas"></a>

* Prefira o modo **Webhook (Push ativo)** sempre que disponível.
* Garanta que os endpoints estejam **acessíveis na internet** e respondam **HTTP 200**.
* Utilize **HTTPS** e **HTTP Digest Authentication** em todas as integrações.
* Trate corretamente **eventos, imagens, streams multipart e payloads JSON**.
* Utilize clientes que suportem **streaming HTTP contínuo** para assinaturas.
* Evite ferramentas como **Postman ou Insomnia** para eventos em tempo real.
* Substitua o usuário e a senha pelos seus dados de acesso e insira o endereço IP sem utilizar os símbolos `< >.`

***

### Visão Geral & Autenticação <a href="#visao-geral-and-autenticacao" id="visao-geral-and-autenticacao"></a>

Autenticação HTTP Digest (RFC 7616), por padrão os dispositivos de CFTVIP Intelbras Utilizam a Digest para autenticação de sessão.&#x20;

* Método: Todos os endpoints protegidos por **HTTP Digest**. Primeiro request sem `Authorization` retorna `401` com cabeçalho `WWW-Authenticate`. O cliente recalcula e reenvia com `Authorization: Digest ...`.
* Cabeçalhos comuns: `Authorization: Digest ...`, `Content-Type` quando aplicável.
* Observações: Use `curl --digest -u <user>:<pass>` ou bibliotecas que suportem Digest.

**Exemplo (curl)**:

```powershell
curl --digest -u admin:abcd1234 
  "http://<ip>/cgi-bin/magicBox.cgi?action=getLanguageCaps"
```

**Exemplo (curl)**:

```powershell
curl --digest -u admin:abcd1234 
  "http://<ip>/cgi-bin/magicBox.cgi?action=getLanguageCaps"
```

**Exemplo (Python/requests)**:

```python
import requests
from requests.auth import HTTPDigestAuth

url = "http://<ip>/cgi-bin/magicBox.cgi?action=getLanguageCaps"
r = requests.get(url, auth=HTTPDigestAuth("admin", "abcd1234"), timeout=5)
print(r.status_code, r.text)
```

**Resposta:**

```powershell
200 Languages=English,Portuguese,Spanish
```

**Erros padrão**:

* `401 Unauthorized` (falta/expiração do nonce ou credencial incorreta)
* `403 Forbidden` (digest incorreto)
* `400/404/500` com payload JSON `{ "ErrorCode": <int>, "ErrorMsg": <string> }` em alguns endpoints.

***

### Convenções Gerais <a href="#convencoes-gerais" id="convencoes-gerais"></a>

* **Base URL**: `http://<ip>` (ou `https://<ip>` se habilitado).
* **Padrões de resposta**: muitos endpoints retornam **`key=value`** em corpo `text/plain`; APIs mais novas usam **JSON**.
* **Formas de envio**:
  * `GET` com **query string** `action=...` e/ou parâmetros `key=value`.
  * `POST` com corpo **JSON** (em APIs `/cgi-bin/api/...`) ou **multipart/form-data** (upload firmware).
* **Tempo e formatação**: datas como `YYYY-M-D HH:mm:ss`.
* **Reinício automático**: algumas configurações (ex.: idioma) forçam reboot.

***

### Listar idiomas suportados&#x20;

* Método: `GET /cgi-bin/magicBox.cgi?action=getLanguageCaps`
* Parâmetros: —

**Resposta**: `Languages=<lista separada por vírgulas>`

**Exemplo (curl)**:

```powershell
curl --digest -u admin:pwd 
  "http://<ip>/cgi-bin/magicBox.cgi?action=getLanguageCaps"
# Saída: Languages=Portuguese,English,Spanish
```

### Definir idioma&#x20;

* Método: `GET /cgi-bin/configManager.cgi?action=setConfig&Language=<lang>`
* Observação: **o dispositivo reinicia automaticamente** após alterar o idioma.

**Exemplo (curl)**:

```powershell
curl --digest -u admin:pwd 
  "http://<ip>/cgi-bin/configManager.cgi?action=setConfig&Language=English"
```

***

### Obter horário atual&#x20;

* Método: `GET /cgi-bin/global.cgi?action=getCurrentTime`
* Retorno: `result=YYYY-M-D HH:mm:ss`

**Exemplo**:

```powershell
curl --digest -u admin:pwd 
  "http://<ip>/cgi-bin/global.cgi?action=getCurrentTime"
```

### Ajustar horário atual&#x20;

* Método: `GET /cgi-bin/global.cgi?action=setCurrentTime&time=<YYYY-MM-DD%20HH:mm:ss> (Retirar os "<>" antes de ajustar o fuso horário)`
* Retorno: `OK`

**Exemplo**:

```powershell
curl --digest -u admin:pwd 
  "http://<ip>/cgi-bin/global.cgi?action=setCurrentTime&time=2025-09-01%2012:34:56"
```

### Formato de data/hora e DST

* Método: via ConfigManager (`getConfig`/`setConfig`) para **Locales** (ex.: `Locales.TimeFormat`, `Locales.DSTEnable`, `Locales.DSTStart`, `Locales.DSTEnd`).

**Exemplos (get/set)**:

```powershell
# Obter formato
curl --digest -u admin:pwd 
  "http://<ip>/cgi-bin/configManager.cgi?action=getConfig&name=Locales"

# Habilitar horário de verão
```

### Configurar NTP&#x20;

* Método: `GET /cgi-bin/configManager.cgi?action=getConfig&name=NTP` (listar)
* Método: `GET /cgi-bin/configManager.cgi?action=setConfig&NTP.<Campo>=<Valor>` (ajustar)

**Exemplos**:

```powershell
# Consultar NTP atual
curl --digest -u admin:pwd 
  "http://<ip>/cgi-bin/configManager.cgi?action=getConfig&name=NTP"

# Ajustar servidor e habilitar NTP
curl --digest -u admin:pwd 
  "http://<ip>/cgi-bin/configManager.cgi?action=setConfig&NTP.Address=time.example.com&NTP.Enable=true"
```

***

### Informações do Dispositivo <a href="#informacoes-do-dispositivo" id="informacoes-do-dispositivo"></a>

Tipo (modelo exibido)

* Método: `GET /cgi-bin/magicBox.cgi?action=getDeviceType`
* Retorno: `type=<DVR|NVR|IPC|...>`

Versão de hardware&#x20;

* Método: `GET /cgi-bin/magicBox.cgi?action=getHardwareVersion`
* Retorno: `version=<xx.xx>`

Número de série&#x20;

* Método: `GET /cgi-bin/magicBox.cgi?action=getSerialNo`
* Retorno: `sn=<serial>`

Nome da máquina&#x20;

* Método: `GET /cgi-bin/magicBox.cgi?action=getMachineName`
* Retorno: `name=<nome>`

Informações do sistema (ampliadas)&#x20;

* Método: `GET /cgi-bin/magicBox.cgi?action=getSystemInfoNew`
* Retorno: várias chaves `info.*` (ex.: estratégia de sincronização de tempo, hasRTC, tempo de execução total, etc.)

Versão de software&#x20;

* Método: `GET /cgi-bin/magicBox.cgi?action=getSoftwareVersion`
* Retorno: `version=<versão, build>`

Versão de ONVIF / versão da HTTP API&#x20;

* ONVIF: `GET /cgi-bin/IntervideoManager.cgi?action=getVersion&Name=Onvif` → `version=<x.y.z>`
* HTTP API: `GET /cgi-bin/IntervideoManager.cgi?action=getVersion&Name=CGI` → `version=<x.y.z>`

Classe do dispositivo&#x20;

* Método: `GET /cgi-bin/magicBox.cgi?action=getDeviceClass`
* Retorno: `class=<HDVR|...>`

***

### Manutenção Programada & Controle de Energia <a href="#manutencao-programada-and-controle-de-energia" id="manutencao-programada-and-controle-de-energia"></a>

\[Config] Auto Maintain (reboot/shutdown/start agendados)&#x20;

* Método (listar): `GET /cgi-bin/configManager.cgi?action=getConfig&name=AutoMaintain`
* Método (ajustar): `GET /cgi-bin/configManager.cgi?action=setConfig&AutoMaintain.<Campo>=<Valor>`
* Campos: `AutoRebootDay/Hour/Minute`, `AutoShutdownDay/Hour/Minute`, `AutoStartUpDay/Hour/Minute`.

**Exemplo (set reboot diário)**:

```powershell
curl --digest -u admin:pwd 
  "http://<ip>/cgi-bin/configManager.cgi?action=setConfig&AutoMaintain.AutoRebootDay=7"
```

Reboot imediato&#x20;

* Método: `GET`` `<kbd>`/cgi-bin/magicBox.cgi?action=reboot`</kbd>
* Retorno: `OK`

Desligar (shutdown)&#x20;

* Método: `GET /cgi-bin/magicBox.cgi?action=shutdown`
* Retorno: `OK`

Restaurar de fábrica&#x20;

* Método: `GET /cgi-bin/magicBox.cgi?action=resetSystemEx[&type=0|1]`
* Observação: `type=0` redefine tudo; `type=1` preserva alguns parâmetros (sempre inclui rede/usuários).
* Retorno: `OK`

***

### Assinaturas de Status (Online/Offline) <a href="#assinaturas-de-status-online-offline" id="assinaturas-de-status-online-offline"></a>

Assinar status de canais&#x20;

* Método: `POST /cgi-bin/api/LogicDeviceManager/attachCameraState`
* Corpo JSON: `{ "channel": [1,2], "heartbeat": 10 }` (`-1` observa todos)
* Resposta: stream **multipart** alternando blocos JSON de estado e mensagens de `Heartbeat`.

**Exemplo (Python):**

```python
import requests
url = "http://<ip>/cgi-bin/api/LogicDeviceManager/attachCameraState"
payload = {"channel": [-1], "heartbeat": 10}
with requests.post(url, json=payload, auth=HTTPDigestAuth("admin","pwd"), stream=True) as r:
    for chunk in r.iter_lines():
        if chunk:
            print(chunk.decode())  # imprime blocos JSON e "Heartbeat"
```

***

### Atualização de Firmware <a href="#atualizacao-de-firmware" id="atualizacao-de-firmware"></a>

* Método: `GET /cgi-bin/upgrader.cgi?action=updateFirmwareByUrl&Url=<https|ftp://...>&checkType=0&checkSum=<md5>`
* Retorno: `OK`

Cancelar atualização&#x20;

* Método: `GET /cgi-bin/upgrader.cgi?action=cancel`
* Retorno: `OK`

Checar atualização em nuvem&#x20;

* Método: `POST /cgi-bin/api/CloudUpgrader/check`
* Corpo JSON: `{ "way": 0|1|2, "proxy": {"IP":"<ip>", "Port":8080} }`
* Retorno JSON: objeto `info` com campos como `State` (None/Regular/Emergency/Automatic), `PackageType`, `OldVersion`, `NewVersion`, etc.

***

### Exemplos rápidos (end-to-end) <a href="#exemplos-rapidos-end-to-end" id="exemplos-rapidos-end-to-end"></a>

**Obter informações principais**

```powershell
# Tipo
curl --digest -u admin:pwd "http://<ip>/cgi-bin/magicBox.cgi?action=getDeviceType"
# Versão de software
curl --digest -u admin:pwd "http://<ip>/cgi-bin/magicBox.cgi?action=getSoftwareVersion"
# Série
curl --digest -u admin:pwd "http://<ip>/cgi-bin/magicBox.cgi?action=getSerialNo"
# Vendor
curl --digest -u admin:pwd "http://<ip>/cgi-bin/magicBox.cgi?action=getVendor"
# Sistema (detalhado)
curl --digest -u admin:pwd "http://<ip>/cgi-bin/magicBox.cgi?action=getSystemInfoNew"
```

**Sincronizar data/hora manualmente**

```powershell
curl --digest -u admin:pwd 
  "http://<ip>/cgi-bin/global.cgi?action=setCurrentTime&time=2025-09-01%2016:20:00"
```

**Ajustar NTP, fuso e DST**

```powershell
# NTP
curl --digest -u admin:pwd 
  "http://<ip>/cgi-bin/configManager.cgi?action=setConfig&NTP.Enable=true&NTP.Address=time.example.com"
# Habilitar DST
curl --digest -u admin:pwd 
  "http://<ip>/cgi-bin/configManager.cgi?action=setConfig&Locales.DSTEnable=true"
```

**Reiniciar o dispositivo**

```powershell
curl --digest -u admin:pwd "http://<ip>/cgi-bin/magicBox.cgi?action=reboot"
```

**Monitorar saúde (CPU/memória)**

```powershell
curl --digest -u admin:pwd -H "Content-Type: application/json" -d '{}' \
  "http://<ip>/cgi-bin/api/magicBox/getCPUUsage"

curl --digest -u admin:pwd -H "Content-Type: application/json" -d '{}' \
  "http://<ip>/cgi-bin/api/magicBox/getMemoryInfo"
```

***

### Referências Rápidas (Resumo de Endpoints) <a href="#referencias-rapidas-resumo-de-endpoints" id="referencias-rapidas-resumo-de-endpoints"></a>

* **Idioma:**
  * `GET /cgi-bin/magicBox.cgi?action=getLanguageCaps`
  * `GET /cgi-bin/configManager.cgi?action=setConfig&Language=<lang>`
* **Data/Hora:**
  * `GET /cgi-bin/global.cgi?action=getCurrentTime`
  * `GET /cgi-bin/global.cgi?action=setCurrentTime&time=<...>`
  * `getConfig/setConfig` para `Locales.*` e `NTP.*`
* **Info do Dispositivo:**
  * `GET /cgi-bin/magicBox.cgi?action=getDeviceType|getHardwareVersion|getSerialNo|getMachineName|getSystemInfoNew|getVendor|getSoftwareVersion`
  * `GET /cgi-bin/IntervideoManager.cgi?action=getVersion&Name=Onvif|CGI`
  * `GET /cgi-bin/magicBox.cgi?action=getDeviceClass`
* **Manutenção**:
  * `getConfig/setConfig` em `AutoMaintain.*`
  * `GET /cgi-bin/magicBox.cgi?action=reboot|shutdown|resetSystemEx[&type=0|1]|getTracingCode`
* **Diagnóstico**:
  * `POST /cgi-bin/api/magicBox/getCPUUsage|getMemoryInfo`
  * `POST /cgi-bin/api/faceBoard/getTemperature`
* **Assinaturas:**
  * `POST /cgi-bin/api/LogicDeviceManager/attachCameraState`
* **Upgrade**:
  * `POST /cgi-bin/upgrader.cgi?action=uploadFirmware`
  * `GET /cgi-bin/upgrader.cgi?action=getState|updateFirmwareByUrl|cancel`
  * `POST /cgi-bin/api/CloudUpgrader/check`

***

Notas finais:&#x20;

* Alguns campos/retornos variam por modelo/firmware. Sempre valide com `getConfig` e revise respostas antes de aplicar alterações permanentes.
* Sempre valide configurações e capacidades disponíveis utilizando `getConfig`.
* Alterações em idioma, data/hora, NTP e alguns parâmetros de sistema **podem exigir reboot automático**.
* Em integrações produtivas, utilize **monitoramento contínuo** para status, CPU, memória e conectividade.
* Assinaturas de eventos retornam dados em **stream multipart**, podendo gerar múltiplos blocos por evento.
* Recomenda-se testar todas as operações em **ambiente controlado** antes de uso em produção.
* O uso adequado destas práticas garante **segurança, estabilidade, compatibilidade e confiabilidade** da integração.

***


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://portal-integracao.intelbras.com.br/cameras-and-gravadores/integracao-api-cftvip-e-mibo/cameras-e-gravadores/funcionalidades-gerais-do-dispositivo.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
