API REST
Referência completa da API Smart BMS
API HTTP para leitura de telemetria e configuração controlada de BMS JK conectadas ao EasyMonitor. Esta página descreve todos os endpoints, campos, limites, respostas e falhas conhecidos pelo firmware.
Escritas são assíncronas.
Uma resposta 202 significa que o comando entrou na fila local. Consulte GET /api/bms/commands até pending ser false. Em UART, lastCommandOk informa o ACK recebido da BMS; em BLE, informa a entrega do quadro pela camada GATT e exige leitura posterior para conferir o valor.
Em Bluetooth JK02, alguns comandos não são validados pelo firmware da BMS, como desativar emergência, reativar sensores de temperatura e alterar o nome Bluetooth. Consulte compatibilidade Bluetooth JK02.
Início rapido
Base URL
http://IP_DO_EASYMONITORFormato de escrita
application/jsonVersão do contrato
protocolVersion: 1curl "http://IP_DO_EASYMONITOR/api" \
-H "Authorization: Bearer SEU_TOKEN"Autenticação, CORS e convenções
Todas as rotas exigem API REST ativada no EasyMonitor e o mesmo Bearer Token exibido em Dispositivo > API REST.
Authorization: Bearer SEU_TOKEN| Item | Comportamento |
|---|---|
| Codificação | JSON UTF-8. As escritas aceitam no máximo 256 bytes de corpo. |
| CORS | Origem *; métodos GET, POST, OPTIONS; cabeçalhos Content-Type, Authorization. |
| Preflight | OPTIONS /api e OPTIONS /api/* retornam 204 No Content. |
| Nomenclatura | Campos JSON usam camelCase; valores de command e setting usam snake_case. |
A API usa HTTP no dispositivo. Para acesso fora da rede local, utilize VPN ou proxy reverso com HTTPS. Nunca exponha o token em código de frontend público.
Mapa de endpoints
| Método | Endpoint | Finalidade |
|---|---|---|
| GET | /api | Resumo leve de dispositivo, rede, BMS e pack. |
| GET | /api/bms/status | Telemetria completa, identificação e células. |
| GET | /api/bms/config | Configurações carregadas do frame de setup. |
| GET | /api/bms/commands | Estado da fila e resultado da última escrita. |
| POST | /api/bms/commands | Comandos liga/desliga de operação. |
| POST | /api/bms/settings | Alteração de um parâmetro validado por requisição. |
GET /api
ResumoUse para a tela inicial ou verificação rápida. Para células, temperaturas, ciclos e identificação completa, use /api/bms/status.
{
"success": true, "protocolVersion": 1, "uptime": 583980,
"data": {
"device": { "id": "EASYM_68F29C", "name": "EasyMonitor", "hostname": "EasyMonitor", "software": "TechLabsOS Smart BMS", "version": "0.0.1" },
"network": { "mode": "STA", "ip": "192.168.1.50" },
"bms": { "online": true, "name": "EasyMonitor2", "model": "JK-BD6A24S10PD", "batteryType": "Li-ion", "cellCount": 7, "soc": 96, "capacityAh": 8, "remainingCapacityAh": 7.642, "alarmCode": 0, "pack": { "voltage": 28.926, "current": 0, "power": 0 } }
}
}| Caminho | Tipo / unidade | Descrição |
|---|---|---|
protocolVersion | inteiro | Versão do contrato de telemetria. |
uptime | inteiro, s | Tempo desde a inicializacao do EasyMonitor. |
data.device | objeto | id, name, hostname, software e version. |
data.network | objeto | mode e ip. O modo e AP ou STA. |
data.bms | objeto | online, identidade, tipo, células, SOC, capacidades e alarmCode. |
data.bms.pack | objeto | voltage em V, current em A e power em W. Corrente positiva representa a convenção reportada pela BMS. |
GET /api/bms/status
Telemetria completaRetorna os campos da BMS diretamente em data, sem um nível intermediário data.bms. A resposta continua disponível se a BMS estiver offline; nesse caso, valide data.online antes de utilizar os valores.
| Grupo | Campos |
|---|---|
| Estado e bateria | online, name, model, batteryType, cellCount, soc (%), capacityAh, remainingCapacityAh, cycles, cycleCapacityAh, stateOfHealth (%), runtimeSeconds, averageCellVoltage. |
| Eventos | detailLogsCount, timeEnterSleepSeconds, emergencyTimeSeconds, alarmCode. |
| Informações da BMS | info.maxCells, info.hardwareVersion, info.softwareVersion, info.serialNumber, info.manufactureDate, info.totalRuntimeSeconds, info.powerOnTimes. |
| Pack e células | pack.voltage (V), pack.current (A), pack.power (W), cellsSummary.minVoltage, minCell, maxVoltage, maxCell, delta (V) e cells[]. |
| Temperaturas | temperatures.mosfet, battery1 e battery2, em graus Celsius. Sensores ausentes são publicados como 0. |
Formato de cada item de cells[]
{ "number": 1, "voltage": 4.134, "wireResistanceMilliOhm": 346 }number é a posição da célula iniciando em 1; voltage está em V; wireResistanceMilliOhm está em miliohm (mOhm).
GET /api/bms/config
Setup validadoLe o frame de configuração que o EasyMonitor recebeu da BMS. A rota exige BMS online e frame de setup carregado.
{
"success": true,
"data": {
"loaded": true,
"battery": { "cellCount": 7, "capacityAh": 8, "bluetoothName": "EasyMonitor2" },
"balance": { "enabled": true, "startVoltage": 3.7, "triggerVoltage": 0.02, "maxCurrent": 0.6 },
"protections": { "cellUvpVoltage": 2.82, "cellUvprVoltage": 2.85, "cellOvpVoltage": 4.2, "cellOvprVoltage": 4.17, "cellRcvVoltage": 4.19, "powerOffVoltage": 2.8 },
"temperature": { "chargeOtp": 70, "chargeOtpr": 60, "chargeUtp": -10, "chargeUtpr": 0, "dischargeOtp": 70, "dischargeOtpr": 60, "mosOtp": 80, "mosOtpr": 70 }
}
}Tensões são publicadas em V, maxCurrent em A e valores de temperature em graus Celsius.
POST /api/bms/commands
OperaçõesAciona uma função binária sem expor registradores Modbus brutos. Envie apenas um comando por requisição.
{ "command": "discharge_mos", "state": false }| Campo | Obrigatório | Valores aceitos |
|---|---|---|
command | Sim | Texto com um dos nomes da tabela abaixo. A comparação não diferencia maiúsculas de minúsculas. |
state | Sim | Booleano JSON true/false ou texto on, off, 1, 0. |
| command | state: true | state: false |
|---|---|---|
charge_mos | Ativa MOS de carga. | Desativa MOS de carga. |
discharge_mos | Ativa MOS de descarga. | Desativa MOS de descarga. |
balance | Habilita balanceamento. | Desabilita balanceamento. |
emergency | Ativa emergência. | Desativa emergência. |
display_always_on | Mantém display sempre ligado. | Restaura o comportamento normal do display. |
temperature_sensors_disabled | Desabilita sensores de temperatura. | Habilita sensores de temperatura. |
Resposta aceita para processamento
HTTP/1.1 202 Accepted
{ "success": true, "status": "queued", "data": { "command": "discharge_mos", "state": false, "statusEndpoint": "/api/bms/commands" } }POST /api/bms/settings
ConfiguraçõesAltera um único parâmetro por requisição. value pode ser número JSON ou texto. Para valores decimais, envie ponto como separador, por exemplo 3.700.
{ "setting": "balance_start_voltage", "value": 3.7 }| setting | Valor / limite | Descrição |
|---|---|---|
cell_count | inteiro, 1 a 24 | Quantidade de células em série. |
capacity_ah | 0.1 a 1000 Ah | Capacidade nominal do pack. |
bluetooth_name | texto, 1 a 12 caracteres | Nome exibido no aplicativo JK. |
balance_enabled | on/off, true/false, 1/0 | Habilita ou desabilita o balanceamento. |
balance_trigger_voltage | 0.001 a 0.500 V | Diferença entre células que dispara o balanceamento. |
balance_start_voltage | 1.000 a 5.000 V | Tensão mínima de cada célula para balancear. |
max_balance_current | 0.000 a 10.000 A | Corrente máxima de balanceamento. |
cell_uvp_voltage | 0.000 a 5.000 V | Proteção de subtensão por célula. |
cell_uvpr_voltage | 0.000 a 5.000 V | Tensão de recuperação após subtensão. |
cell_ovp_voltage | 0.000 a 5.000 V | Proteção de sobretensão por célula. |
cell_ovpr_voltage | 0.000 a 5.000 V | Tensão de recuperação após sobretensão. |
cell_rcv_voltage | 0.000 a 5.000 V | Referência adicional de recuperação da célula. |
power_off_voltage | 0.000 a 5.000 V | Tensão de desligamento do BMS. |
charge_otp, charge_otpr | -50.0 a 120.0 C | Proteção máxima e recuperação de temperatura de carga. |
charge_utp, charge_utpr | -50.0 a 120.0 C | Proteção mínima e recuperação de temperatura de carga. |
discharge_otp, discharge_otpr | -50.0 a 120.0 C | Proteção máxima e recuperação de temperatura de descarga. |
mos_otp, mos_otpr | -50.0 a 120.0 C | Proteção máxima e recuperação da temperatura dos MOSFETs. |
Aliases sem underscore também são aceitos para compatibilidade: cellcount, capacity, blename, balanceenabled, balancetrigger, startbalance, maxbalancecurrent, celluvp, celluvpr, cellovp, cellovpr, cellrcv, poweroff, chargeotp, chargeotpr, chargeutp, chargeutpr, dischargeotp, dischargeotpr, mosotp e mosotpr. Prefira sempre os nomes canônicos da tabela.
Resposta aceita para processamento
HTTP/1.1 202 Accepted
{ "success": true, "status": "queued", "data": { "setting": "balance_start_voltage", "statusEndpoint": "/api/bms/commands" } }GET /api/bms/commands
ConfirmaçãoConsulte imediatamente depois de uma escrita e repita a leitura enquanto pending for true. Uma unica fila e usada por todas as escritas API, MQTT e interface web.
{
"success": true,
"data": { "bmsOnline": true, "configurationLoaded": true, "pending": false, "lastCommand": "Início do balanceamento atualizado", "lastCommandOk": true }
}| Campo | Interpretação |
|---|---|
bmsOnline | A BMS está respondendo a telemetria no momento da consulta. |
configurationLoaded | O frame de setup já foi lido; necessário para consultar configurações. |
pending | Existe uma escrita aguardando execução ou ACK. Não envie outra até ser false. |
lastCommand | Mensagem humana sobre a última escrita processada. |
lastCommandOk | true somente quando a resposta Modbus recebida confirmou a escrita esperada. |
Fluxo recomendado para escrita
- 1. Consulte
GET /api/bms/commands. Prossiga somente combmsOnline: trueepending: false. - 2. Envie um
POST /api/bms/commandsouPOST /api/bms/settings. - 3. Verifique o retorno HTTP
202. - 4. Consulte
GET /api/bms/commandsem intervalo de 1 segundo. - 5. Quando
pending: false, aceite a mudanca apenas selastCommandOk: true. Para parâmetros, releiaGET /api/bms/config.
# Alterar início do balanceamento e confirmar
curl -X POST "http://IP_DO_EASYMONITOR/api/bms/settings" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"setting":"balance_start_voltage","value":3.7}'
curl "http://IP_DO_EASYMONITOR/api/bms/commands" \
-H "Authorization: Bearer SEU_TOKEN"Erros e como tratar
| HTTP | Exemplo de retorno | Ação do cliente |
|---|---|---|
| 401 | {"success":false,"data":"Unauthorized, invalid token."} | Ative a API, envie Authorization: Bearer ... e confirme o token. |
| 400 | {"success":false,"error":"JSON invalido. Informe command e state."} | Corrija JSON, campos obrigatórios, tipo de state ou nome enviado. |
| 413 | {"success":false,"error":"Corpo JSON ausente ou maior que 256 bytes."} | Envie somente os dois campos necessários e mantenha o corpo até 256 bytes. |
| 415 | {"success":false,"error":"Content-Type deve ser application/json."} | Inclua Content-Type: application/json. |
| 409 | {"success":false,"error":"BMS indisponível.","data":{"pending":false}} | BMS offline, frame ainda não recebido, parâmetro fora do limite ou outra escrita pendente. Leia a mensagem e tente novamente depois. |
| 503 | {"success":false,"error":"Configuração da BMS ainda não foi carregada."} | Disponível apenas em GET /api/bms/config. Aguarde o próximo ciclo de leitura da BMS e repita. |
Um comando desconhecido retorna 409 com Comando não suportado. Um parâmetro desconhecido retorna 409 com Parâmetro não suportado. Limites inválidos retornam 409 com a mensagem do validador.