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_EASYMONITOR

Formato de escrita

application/json

Versao do contrato

protocolVersion: 1
curl "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
ItemComportamento
CodificacaoJSON UTF-8. As escritas aceitam no maximo 256 bytes de corpo.
CORSOrigem *; metodos GET, POST, OPTIONS; cabecalhos Content-Type, Authorization.
PreflightOPTIONS /api e OPTIONS /api/* retornam 204 No Content.
NomenclaturaCampos 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

MetodoEndpointFinalidade
GET/apiResumo leve de dispositivo, rede, BMS e pack.
GET/api/bms/statusTelemetria completa, identificacao e celulas.
GET/api/bms/configConfiguracoes carregadas do frame de setup.
GET/api/bms/commandsEstado da fila e resultado da ultima escrita.
POST/api/bms/commandsComandos liga/desliga de operacao.
POST/api/bms/settingsAlteracao de um parametro validado por requisicao.

GET /api

Resumo

Use 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 } }
  }
}
CaminhoTipo / unidadeDescricao
protocolVersioninteiroVersao do contrato de telemetria.
uptimeinteiro, sTempo desde a inicializacao do EasyMonitor.
data.deviceobjetoid, name, hostname, software e version.
data.networkobjetomode e ip. O modo e AP ou STA.
data.bmsobjetoonline, identidade, tipo, celulas, SOC, capacidades e alarmCode.
data.bms.packobjetovoltage em V, current em A e power em W. Corrente positiva representa a convencao reportada pela BMS.

GET /api/bms/status

Telemetria completa

Retorna 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.

GrupoCampos
Estado e bateriaonline, name, model, batteryType, cellCount, soc (%), capacityAh, remainingCapacityAh, cycles, cycleCapacityAh, stateOfHealth (%), runtimeSeconds, averageCellVoltage.
EventosdetailLogsCount, timeEnterSleepSeconds, emergencyTimeSeconds, alarmCode.
Informacoes da BMSinfo.maxCells, info.hardwareVersion, info.softwareVersion, info.serialNumber, info.manufactureDate, info.totalRuntimeSeconds, info.powerOnTimes.
Pack e celulaspack.voltage (V), pack.current (A), pack.power (W), cellsSummary.minVoltage, minCell, maxVoltage, maxCell, delta (V) e cells[].
Temperaturastemperatures.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 validado

Le 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

Operacoes

Aciona uma funcao binaria sem expor registradores Modbus brutos. Envie apenas um comando por requisicao.

{ "command": "discharge_mos", "state": false }
CampoObrigatorioValores aceitos
commandSimTexto com um dos nomes da tabela abaixo. A comparacao nao diferencia maiusculas de minusculas.
stateSimBooleano JSON true/false ou texto on, off, 1, 0.
commandstate: truestate: false
charge_mosAtiva MOS de carga.Desativa MOS de carga.
discharge_mosAtiva MOS de descarga.Desativa MOS de descarga.
balanceHabilita balanceamento.Desabilita balanceamento.
emergencyAtiva emergencia.Desativa emergencia.
display_always_onMantem display sempre ligado.Restaura o comportamento normal do display.
temperature_sensors_disabledDesabilita 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

Configuracoes

Altera 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 }
settingValor / limiteDescricao
cell_countinteiro, 1 a 24Quantidade de celulas em serie.
capacity_ah0.1 a 1000 AhCapacidade nominal do pack.
bluetooth_nametexto, 1 a 12 caracteresNome exibido no aplicativo JK.
balance_enabledon/off, true/false, 1/0Habilita ou desabilita o balanceamento.
balance_trigger_voltage0.001 a 0.500 VDiferenca entre celulas que dispara o balanceamento.
balance_start_voltage1.000 a 5.000 VTensao minima de cada celula para balancear.
max_balance_current0.000 a 10.000 ACorrente maxima de balanceamento.
cell_uvp_voltage0.000 a 5.000 VProtecao de subtensao por celula.
cell_uvpr_voltage0.000 a 5.000 VTensao de recuperacao apos subtensao.
cell_ovp_voltage0.000 a 5.000 VProtecao de sobretensao por celula.
cell_ovpr_voltage0.000 a 5.000 VTensao de recuperacao apos sobretensao.
cell_rcv_voltage0.000 a 5.000 VReferencia adicional de recuperacao da celula.
power_off_voltage0.000 a 5.000 VTensao de desligamento do BMS.
charge_otp, charge_otpr-50.0 a 120.0 CProtecao maxima e recuperacao de temperatura de carga.
charge_utp, charge_utpr-50.0 a 120.0 CProtecao minima e recuperacao de temperatura de carga.
discharge_otp, discharge_otpr-50.0 a 120.0 CProtecao maxima e recuperacao de temperatura de descarga.
mos_otp, mos_otpr-50.0 a 120.0 CProtecao 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

Confirmacao

Consulte 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 }
}
CampoInterpretacao
bmsOnlineA BMS esta respondendo a telemetria no momento da consulta.
configurationLoadedO frame de setup ja foi lido; necessario para consultar configuracoes.
pendingExiste uma escrita aguardando execucao ou ACK. Nao envie outra ate ser false.
lastCommandMensagem humana sobre a ultima escrita processada.
lastCommandOktrue somente quando a resposta Modbus recebida confirmou a escrita esperada.

Fluxo recomendado para escrita

  1. 1. Consulte GET /api/bms/commands. Prossiga somente com bmsOnline: true e pending: false.
  2. 2. Envie um POST /api/bms/commands ou POST /api/bms/settings.
  3. 3. Verifique o retorno HTTP 202.
  4. 4. Consulte GET /api/bms/commands em intervalo de 1 segundo.
  5. 5. Quando pending: false, aceite a mudanca apenas se lastCommandOk: true. Para parametros, releia GET /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

HTTPExemplo de retornoAcao 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.