API REST
Referencia completa da API Smart BMS
API HTTP para leitura de telemetria e configuracao controlada de BMS JK conectadas ao EasyMonitor. Esta pagina descreve todos os endpoints, campos, limites, respostas e falhas conhecidos pelo firmware.
Escritas sao assincronas.
Uma resposta 202 significa que o comando entrou na fila local. Consulte GET /api/bms/commands ate pending ser false e lastCommandOk informar o ACK recebido da BMS.
Inicio rapido
Base URL
http://IP_DO_EASYMONITORFormato de escrita
application/jsonVersao do contrato
protocolVersion: 1curl "http://IP_DO_EASYMONITOR/api" \
-H "Authorization: Bearer SEU_TOKEN"Autenticacao, CORS e convencoes
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 |
|---|---|
| Codificacao | JSON UTF-8. As escritas aceitam no maximo 256 bytes de corpo. |
| CORS | Origem *; metodos GET, POST, OPTIONS; cabecalhos 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 codigo de frontend publico.
Mapa de endpoints
| Metodo | Endpoint | Finalidade |
|---|---|---|
| GET | /api | Resumo leve de dispositivo, rede, BMS e pack. |
| GET | /api/bms/status | Telemetria completa, identificacao e celulas. |
| GET | /api/bms/config | Configuracoes carregadas do frame de setup. |
| GET | /api/bms/commands | Estado da fila e resultado da ultima escrita. |
| POST | /api/bms/commands | Comandos liga/desliga de operacao. |
| POST | /api/bms/settings | Alteracao de um parametro validado por requisicao. |
GET /api
ResumoUse para a tela inicial ou verificacao rapida. Para celulas, temperaturas, ciclos e identificacao 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 | Descricao |
|---|---|---|
protocolVersion | inteiro | Versao 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, celulas, SOC, capacidades e alarmCode. |
data.bms.pack | objeto | voltage em V, current em A e power em W. Corrente positiva representa a convencao reportada pela BMS. |
GET /api/bms/status
Telemetria completaRetorna os campos da BMS diretamente em data, sem um nivel intermediario data.bms. A resposta continua disponivel 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. |
| Informacoes da BMS | info.maxCells, info.hardwareVersion, info.softwareVersion, info.serialNumber, info.manufactureDate, info.totalRuntimeSeconds, info.powerOnTimes. |
| Pack e celulas | 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 sao publicados como 0. |
Formato de cada item de cells[]
{ "number": 1, "voltage": 4.134, "wireResistanceMilliOhm": 346 }number e a posicao da celula iniciando em 1; voltage esta em V; wireResistanceMilliOhm esta em miliohm (mOhm).
GET /api/bms/config
Setup validadoLe o frame de configuracao 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 }
}
}Tensoes sao publicadas em V, maxCurrent em A e valores de temperature em graus Celsius.
POST /api/bms/commands
OperacoesAciona uma funcao binaria sem expor registradores Modbus brutos. Envie apenas um comando por requisicao.
{ "command": "discharge_mos", "state": false }| Campo | Obrigatorio | Valores aceitos |
|---|---|---|
command | Sim | Texto com um dos nomes da tabela abaixo. A comparacao nao diferencia maiusculas de minusculas. |
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 emergencia. | Desativa emergencia. |
display_always_on | Mantem 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
ConfiguracoesAltera um unico parametro por requisicao. value pode ser numero JSON ou texto. Para valores decimais, envie ponto como separador, por exemplo 3.700.
{ "setting": "balance_start_voltage", "value": 3.7 }| setting | Valor / limite | Descricao |
|---|---|---|
cell_count | inteiro, 1 a 24 | Quantidade de celulas em serie. |
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 | Diferenca entre celulas que dispara o balanceamento. |
balance_start_voltage | 1.000 a 5.000 V | Tensao minima de cada celula para balancear. |
max_balance_current | 0.000 a 10.000 A | Corrente maxima de balanceamento. |
cell_uvp_voltage | 0.000 a 5.000 V | Protecao de subtensao por celula. |
cell_uvpr_voltage | 0.000 a 5.000 V | Tensao de recuperacao apos subtensao. |
cell_ovp_voltage | 0.000 a 5.000 V | Protecao de sobretensao por celula. |
cell_ovpr_voltage | 0.000 a 5.000 V | Tensao de recuperacao apos sobretensao. |
cell_rcv_voltage | 0.000 a 5.000 V | Referencia adicional de recuperacao da celula. |
power_off_voltage | 0.000 a 5.000 V | Tensao de desligamento do BMS. |
charge_otp, charge_otpr | -50.0 a 120.0 C | Protecao maxima e recuperacao de temperatura de carga. |
charge_utp, charge_utpr | -50.0 a 120.0 C | Protecao minima e recuperacao de temperatura de carga. |
discharge_otp, discharge_otpr | -50.0 a 120.0 C | Protecao maxima e recuperacao de temperatura de descarga. |
mos_otp, mos_otpr | -50.0 a 120.0 C | Protecao maxima e recuperacao da temperatura dos MOSFETs. |
Aliases sem underscore tambem sao 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 canonicos 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
ConfirmacaoConsulte 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": "Inicio do balanceamento atualizado", "lastCommandOk": true }
}| Campo | Interpretacao |
|---|---|
bmsOnline | A BMS esta respondendo a telemetria no momento da consulta. |
configurationLoaded | O frame de setup ja foi lido; necessario para consultar configuracoes. |
pending | Existe uma escrita aguardando execucao ou ACK. Nao envie outra ate ser false. |
lastCommand | Mensagem humana sobre a ultima 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 parametros, releiaGET /api/bms/config.
# Alterar inicio 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 | Acao 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 obrigatorios, tipo de state ou nome enviado. |
| 413 | {"success":false,"error":"Corpo JSON ausente ou maior que 256 bytes."} | Envie somente os dois campos necessarios e mantenha o corpo ate 256 bytes. |
| 415 | {"success":false,"error":"Content-Type deve ser application/json."} | Inclua Content-Type: application/json. |
| 409 | {"success":false,"error":"BMS indisponivel.","data":{"pending":false}} | BMS offline, frame ainda nao recebido, parametro fora do limite ou outra escrita pendente. Leia a mensagem e tente novamente depois. |
| 503 | {"success":false,"error":"Configuracao da BMS ainda nao foi carregada."} | Disponivel apenas em GET /api/bms/config. Aguarde o proximo ciclo de leitura da BMS e repita. |
Um comando desconhecido retorna 409 com Comando nao suportado. Um parametro desconhecido retorna 409 com Parametro nao suportado. Limites invalidos retornam 409 com a mensagem do validador.