Avanceret integration
Lokal HTTP- og MQTT-integration for egne klienter, broker-baserede flows og automationer omkring NOFOS-ladeboksen.
Avanceret integration
Alt det vigtige fra integrationsdokumentationen samlet paa en dedikeret side.
Omfang
Ladeboksen eksponerer to lokale integrationsmekanismer:
- En lokal HTTP-server paa port
80 - En MQTT-klient, som forbinder fra ladeboksen til din broker
HTTP API'et er det nemmeste sted at starte. MQTT er bedre, hvis du vil have en broker-centreret integration med telemetry skubbet ud automatisk og kommandoer leveret gennem topics.
Base URL og autentificering
Brug laderens lokale hostname eller IP-adresse:
http://nofos-<id>.local/http://<charger-ip>/
Eksemplerne i denne guide bruger:
http://<charger-ip>/
Hvis der er konfigureret web-legitimationsoplysninger, kraever den lokale HTTP-server HTTP-authentication for baade API-requests og statiske sider. Naar laderen koerer i AP-only mode, haandhaeves authentication ikke.
De lokale HTTP-handlers sender ogsaa tilladende CORS-headere:
Access-Control-Allow-Origin: *Access-Control-Allow-Headers: *Access-Control-Allow-Methods: *
HTTP-endpoints med integrationsfokus
Dette er de endpoints, som er mest nyttige til en custom integration.
GET /status
Returnerer laderens nuvaerende live-state som JSON.
Typiske felter omfatter:
- Netvaerk og connectivity:
mode,wifi_client_connected,eth_connected,net_connected,ipaddress - Service-state:
mqtt_connected,nofos_connected - Runtime-metrics:
free_heap,largest_free_block,min_free_heap - EVSE telemetry:
amp,amp1,amp2,amp3,voltage,v1,v2,v3,pilot,wh,state,temp1,temp4,srssi - Taellere:
elapsed,wattsec,watthour,gfcicount,nogndcount,stuckcount - Tid:
time,offset - OTA/debug-state:
ota_update,comm_sent,comm_success,rapi_connected
Eksempel:
curl http://<charger-ip>/status
/status feltreference
Felter inkluderes fra flere subsystemer. Nogle valgfrie felter er kun til stede, naar det relaterede subsystem har gyldige data.
mode: aktiv netvaerksmode. En afWired,STA,APellerSTA+AP.wifi_client_connected:1naar station-interface er forbundet, ellers0.eth_connected:1naar Ethernet er forbundet, ellers0.net_connected:1naar en aktiv netvaerksvej er forbundet, ellers0.ipaddress: nuvaerende lokal IP-adresse som streng.mqtt_connected:1naar den lokale MQTT-klient er forbundet til sin broker, ellers0.free_heap: nuvaerende fri heap i bytes.largest_free_block: nuvaerende stoerste sammenhaengende ledige heap-blok i bytes.min_free_heap: mindste fri heap siden boot, i bytes.comm_sent: antal RAPI-kommandoer sendt til EVSE-controlleren.comm_success: antal succesfulde RAPI-udvekslinger med EVSE-controlleren.rapi_connected:1naar gatewayen vurderer EVSE-controlleren som forbundet, ellers0.nofos_connected:1naar nofos MQTT-path er forbundet, ellers0.amp: maalt fase-1 stroem i ampere.amp1: samme vaerdi somamp.amp2: maalt fase-2 stroem i ampere.amp3: maalt fase-3 stroem i ampere.voltage: maalt fase-1 spaending.pilot: aktuelt annonceret pilotstroem i ampere.wh: akkumuleret energi i watt-timer.v1: maalt fase-1 spaending.v2: maalt fase-2 spaending.v3: maalt fase-3 spaending.temp1: ekstern temperaturvaerdi ellerfalse, hvis sensoren ikke er gyldig.temp4: valgfri MCP9808-temperaturvaerdi ellerfalse, hvis utilgaengelig. Kun til stede, naar sensorunderstoettelsen er kompileret ind.state: aktuel EVSE-statekode.freeram: fri heap i bytes fra EVSE telemetry-blokken.srssi: Wi-Fi RSSI i dBm.elapsed: forloebet opladningstid i sekunder for den aktuelle session.wattsec: sessionsenergi i watt-sekunder.watthour: akkumuleret energitotal i watt-timer.gfcicount: GFCI-triptaeller.nogndcount: no-ground-triptaeller.stuckcount: stuck-relay-triptaeller.charge_rate: nuvaerende charge-rate vaerdi i ampere.ota_update:1mens en firmware OTA-opdatering koerer, ellers0.time: nuvaerende UTC timestamp formatteret som ISO 8601, fx2026-03-10T12:34:56Z.offset: nuvaerende UTC offset-streng frastrftime("%z").crash_seq: sekvensnummer for den senest gemte crashlog-record.boot_count: total boot-taeller registreret i crashlog-storage.reset_reason: numerisk ESP reset reason-kode for seneste reboot.reset_reason_str: strengrepræsentation afreset_reason, fxpoweron,software,panicellerbrownout.prev_uptime_ms: seneste heartbeat uptime fra forrige boot, i millisekunder.prev_free_heap: senest registrerede fri heap fra forrige boot, i bytes.prev_largest_free_block: senest registrerede stoerste ledige blok fra forrige boot, i bytes.prev_min_free_heap: senest registrerede minimum fri heap fra forrige boot, i bytes.prev_unix_time: senest registrerede Unix-tid fra forrige boot.crash_recorded_unix_time: Unix-tidspunktet hvor den nuvaerende crashlog-record blev gemt.
GET /config
Returnerer den aktuelle konfiguration som JSON.
Dette inkluderer baade generelle settings og understoettede optionslister som:
mqtt_supported_protocolshttp_supported_protocolsnofos_network_profiles
Responsen er beregnet til maskinforbrug. Secret values skjules i serialiseret output.
Eksempel:
curl http://<charger-ip>/config
/config feltreference
GET /config returnerer:
- Controller- og gateway-metadata tilfoejet af
handleConfigGet() - Statiske capability-lister
- Serialiserede persistente konfigurationsfelter fra
app_config.cpp
Nogle secret fields kan vaere blanke eller redigerede i responsen, fordi endpointet serialiseres med secret-hiding aktiveret.
Controller- og gateway-metadata
firmware: EVSE-controllerens firmwarestreng rapporteret over RAPI.protocol: EVSE-controllerens RAPI-protokolversionsstreng.espflash: flashchip-stoerrelse i bytes.identifier: langt device identifier.version: gateway-firmwareversionsstreng.diodet: diode-check enabled-flag fra EVSE-controlleren.gfcit: GFCI self-test enabled-flag fra EVSE-controlleren.groundt: ground-check enabled-flag fra EVSE-controlleren.relayt: stuck-relay-check enabled-flag fra EVSE-controlleren.ventt: vent-check enabled-flag fra EVSE-controlleren.tempt: temperature-check enabled-flag fra EVSE-controlleren.service: aktivt serviceniveau som rapporteret af controlleren.scale: current-sensor scale-vaerdi fra$GA.offset: current-sensor offset-vaerdi fra$GA.amplimit: current ampacity-relateret limit-vaerdi laest fra token 2 af$GC. I upstream OpenEVSE-kommentarerne er dette token den hardwaremaksimale stroem.
Capability-lister
mqtt_supported_protocols: array med understoettede MQTT-transportstrenge. Aktuelt["mqtt","mqtts"].http_supported_protocols: array med understoettede HTTP-transportstrenge. Aktuelt["http","https"].nofos_network_profiles: array med understoettede nofos network profile labels. Aktuelt["Disabled","GSM only","GSM with fallback to WiFi","WiFi only","WiFI with fallback to GSM"].
Persistente konfigurationsfelter
ssid: konfigureret Wi-Fi SSID.pass: konfigureret Wi-Fi password. Secret field.www_username: HTTP-authentication brugernavn til den lokale webserver.www_password: HTTP-authentication password. Secret field.hostname: konfigureret enhedshostname.sntp_hostname: konfigureret SNTP-serverhostname.time_zone: konfigureret POSIX- eller udvidet timezone-streng.mqtt_server: MQTT-brokerhostname eller IP.mqtt_port: MQTT-brokerport.mqtt_topic: MQTT-basetopic brugt til telemetry og kommandoer.mqtt_user: MQTT-brugernavn.mqtt_pass: MQTT-password. Secret field.mqtt_vrms: eksternt MQTT-topic brugt som line voltage-input.mqtt_announce_topic: retained announce-topic brugt til connect/disconnect presence-payloads.nofos_network_profile: valgt nofos network profile-ID.flags: ra bitfield som gemmer flere service- og behavior-flags.mqtt_enabled:truenaar den lokale MQTT-klient er aktiveret.mqtt_reject_unauthorized:truenaar MQTT TLS certificate validation haandhaeves.sntp_enabled:truenaar SNTP time sync er aktiveret.pause_uses_disabled:truenaar pause-operationer bruger$FDi stedet for$FS.mqtt_protocol: MQTT-transportstreng. Aktueltmqttellermqtts.
POST /config
Opdaterer konfiguration med en JSON-body.
Dette er det foretrukne write-interface til custom integrationer, fordi det understoetter delvise opdateringer og eksponerer flere settings end de aeldre form-endpoints.
Typiske felter:
- HTTP auth:
www_username,www_password - MQTT:
mqtt_enabled,mqtt_protocol,mqtt_server,mqtt_port,mqtt_topic,mqtt_user,mqtt_pass,mqtt_reject_unauthorized,mqtt_vrms,mqtt_announce_topic - Charge behavior:
pause_uses_disabled - Tid/netvaerk:
sntp_enabled,time_zone,hostname,sntp_hostname,nofos_network_profile
Eksempel: aktiver MQTT
curl -X POST http://<charger-ip>/config \
-H "Content-Type: application/json" \
-d '{
"mqtt_enabled": true,
"mqtt_protocol": "mqtt",
"mqtt_server": "192.168.1.10",
"mqtt_port": 1883,
"mqtt_topic": "charger/nofos-1234",
"mqtt_user": "mqtt-user",
"mqtt_pass": "mqtt-pass",
"mqtt_reject_unauthorized": true
}'
Responses:
200med{"msg":"done"}ved succes400med{"msg":"Could not parse JSON"}ved ugyldig JSON
GET /r og GET /rapi
Sender en RAPI-kommando til EVSE-controlleren.
Brug query parameters:
rapi: kommandoen der skal sendesjson: valgfri;1,true, eller til stede uden vaerdi returnerer JSON i stedet for HTML
Eksempel:
curl "http://<charger-ip>/r?json=1&rapi=\$GS"
Succesfuld JSON-respons:
{"cmd":"$GS","ret":"$OK ..."}
Fejl-JSON-respons:
{"cmd":"$GS","error":"RAPI_RESPONSE_TIMEOUT"}
Brug dette endpoint til low-level EVSE-kommandoer, naar der ikke findes et hoejere niveau config-felt.
GET /crashlog
Returnerer nyere crash-historik som JSON.
Valgfri query-parameter:
count: antal events der skal returneres,1til10
Eksempel:
curl "http://<charger-ip>/crashlog?count=5"
GET /scan
Returnerer synlige Wi-Fi-netvaerk som JSON.
POST /apoff
Slukker access point kort tid efter requestet returnerer.
GET /reset
Nulstiller gemt konfiguration og genstarter.
GET /restart
Genstarter uden at slette konfiguration.
GET /debug
Returnerer den buffrede debug-console som plain text.
GET /evse
Returnerer den buffrede EVSE serial-console som plain text.
Anbefalet HTTP-brugsmoenster
For en ekstern integration er det praktiske moenster:
- Laes
GET /statusfor live-state - Laes
GET /configved opstart, hvis din klient har brug for capability discovery - Skriv
POST /configfor understoettede settings - Brug kun
GET /r?json=1&rapi=...til controller-kommandoer, som ikke er repræsenteret i/config
RAPI-kommando-reference for GET /r og GET /rapi
GET /r og GET /rapi videresender en ra RAPI-kommandostreng til OpenEVSE-controlleren. Firmwaren hardcoder ikke en allowlist i HTTP-handleren; den sender videre, hvad du leverer. Listen nedenfor dokumenterer de RAPI-kommandoer, der eksplicit bruges, wrappes eller special-cases i dette repository.
Hvor en kommando kun er udledt af brugen og repository'et ikke indeholder den upstream protokolbeskrivelse, er det naevnt eksplicit.
Query- og statuskommandoer
$GV: hent EVSE firmwareversion og RAPI-protokolversion.$GS: hent EVSE-status. Bruges til at laese nuvaerende state og forloebet sessionstid.$GT: hent controllerens RTC-tid.$GG: hent charging current og voltage.$GP: hent temperaturmaalinger.$GU: hent energy usage counters.$GF: hent fault counters.$GE: hent EVSE-settings, inklusive pilot current og flags.$GC: hent current-capacity-information, inklusive minimum, pilot, configured max og hardware max.$GD: hent delay timer schedule. Firmwaren emulerer ogsaa$GDi HTTP-handleren, naar den underliggende controller returnerer$NK.$GA: hent current-sensor calibration values. Udledt fra kode: token 1 er current scale og token 2 er current offset.
Konfigurations- og kontrolkommandoer
$SC <amps> [V|M]: saet current capacity.Vsaetter en volatil current limit.Mgemmer en maksimumgrænse i EEPROM. Uden suffix behandles den som compatibility fallback for aeldre controllere.$SV <millivolts>: saet den spaending der bruges til power-beregninger.$S1 <yy> <mm> <dd> <hh> <mm> <ss>: saet controllerens RTC-tid.$ST <start_hour> <start_minute> <end_hour> <end_minute>: saet delay timeren.$FE: aktiver opladning / vaek EVSE.$FS: saet EVSE i sleep mode.$FD: deaktiver EVSE.$FR: genstart EVSE-controlleren.$FF <feature> <0|1>: aktiver eller deaktiver en controller-feature.0deaktiverer og1aktiverer. Understoettede feature IDs dokumenteret i dette repository erB,D,E,F,G,R,TogV.$F0 <0|1>: deaktiver eller aktiver LCD display updates.$FB <color>: saet LCD backlight color.$FP <x> <y> <text>: tegn tekst paa LCD.$SY <interval> <current>: aktiver heartbeat supervision.$SY: send et heartbeat pulse.$SY 165: acknowledge et mistet heartbeat pulse.$F1: emuler et front-panel button press.$S4 0|1: toggle controller lock state. Udledt franofos_mqtt.cpp:1laaser,0laaser op.$SB: ryd den haarde amperage limit gemt i controllerens EEPROM. Dette beskrives eksplicit inofos_mqtt.cppsom "Wipe hard amperage limit in EEPROM."
Praktiske eksempler
Hent controller-version:
curl "http://<charger-ip>/r?json=1&rapi=\$GV"
Hent nuvaerende EVSE-state:
curl "http://<charger-ip>/r?json=1&rapi=\$GS"
Hent current-capacity-information:
curl "http://<charger-ip>/r?json=1&rapi=\$GC"
Saet current limit til 13 A:
curl "http://<charger-ip>/r?json=1&rapi=\$SC%2013"
Deaktiver EVSE:
curl "http://<charger-ip>/r?json=1&rapi=\$FD"
Genstart EVSE-controlleren:
curl "http://<charger-ip>/r?json=1&rapi=\$FR"
MQTT-overblik
Ladeboksen er en MQTT-klient. Den koerer ikke en broker lokalt. Du peger den mod din egen broker, og den vil:
- Forbinde til broker
- Publicere charger state og events
- Subscribe til udvalgte kommando- og telemetry-topics
Understoettede protokoller:
mqttmqtts
MQTT-setup
Den foretrukne setup-vej er POST /config.
Minimumskonfiguration:
{
"mqtt_enabled": true,
"mqtt_protocol": "mqtt",
"mqtt_server": "192.168.1.10",
"mqtt_port": 1883,
"mqtt_topic": "charger/nofos-1234",
"mqtt_user": "mqtt-user",
"mqtt_pass": "mqtt-pass",
"mqtt_reject_unauthorized": true
}
Noter:
mqtt_reject_unauthorized=truehaandhaever certificate validation formqtts- Det gamle
POST /savemqtt-endpoint kan ikke saettemqtt_vrmsellermqtt_announce_topic - Efter gemning af MQTT-konfiguration genstarter firmwaren MQTT-forbindelsen automatisk
MQTT-topics brugt af ladeboksen
Antag:
mqtt_topic = charger/nofos-1234mqtt_announce_topic = openevse/announce/abcd
Outbound topics publiceret af ladeboksen
Announcement topic
Ved connect publicerer laderen et retained JSON-payload paa mqtt_announce_topic:
{
"state": "connected",
"id": "<device-id>",
"name": "<hostname>",
"mqtt": "charger/nofos-1234",
"http": "http://<charger-ip>/"
}
Laderen saetter ogsaa en retained last-will message paa samme topic:
{
"state": "disconnected",
"id": "<device-id>",
"name": "<hostname>"
}
Telemetry- og event-topics
For hvert JSON-felt i et emitted event document publicerer firmwaren en MQTT-besked til:
<mqtt_topic>/<field>
Eksempler:
charger/nofos-1234/ampcharger/nofos-1234/voltagecharger/nofos-1234/statecharger/nofos-1234/pilotcharger/nofos-1234/wh
Den vigtigste periodiske publish sker hvert 30. sekund og inkluderer de standard live EVSE-felter som:
amp,amp1,amp2,amp3voltage,v1,v2,v3pilotwhstatefreeramsrssi
Yderligere event-drevne felter kan ogsaa blive publiceret, herunder:
charge_rateavailable_currentsmoothed_available_current
Inbound topics subscribed til af ladeboksen
RAPI command input
Laderen subscriber til:
<mqtt_topic>/rapi/in/#
For at sende en RAPI-kommando skal du publicere til et topic, som slutter med kommandonavnet begyndende med $.
Eksempler:
charger/nofos-1234/rapi/in/$GS
charger/nofos-1234/rapi/in/$SC
Hvis kommandoen har et argument, skal argumentet ligge i payload.
Eksempel: saet charging current til 13 A
Topic:
charger/nofos-1234/rapi/in/$SC
Payload:
13
Laderen publicerer RAPI-responsen til:
<mqtt_topic>/rapi/out
MQTT-eksempler
Subscribe til alt for en charger:
mosquitto_sub -h 192.168.1.10 -u mqtt-user -P mqtt-pass -t 'charger/nofos-1234/#'
Anmod om EVSE-state med RAPI:
mosquitto_pub -h 192.168.1.10 -u mqtt-user -P mqtt-pass \
-t 'charger/nofos-1234/rapi/in/$GS'
Laes derefter responsen:
mosquitto_sub -h 192.168.1.10 -u mqtt-user -P mqtt-pass \
-t 'charger/nofos-1234/rapi/out'
Saet current limit til 13 A:
mosquitto_pub -h 192.168.1.10 -u mqtt-user -P mqtt-pass \
-t 'charger/nofos-1234/rapi/in/$SC' \
-m '13'
Anbefalet MQTT-brugsmoenster
For de fleste broker-baserede integrationer:
- Konfigurer MQTT gennem
POST /config - Laes det retained payload paa
mqtt_announce_topicfor at discovere laderen - Subscribe til
<mqtt_topic>/# - Brug
<mqtt_topic>/rapi/in/$..., naar du har brug for en controller-kommandovej gennem broker
Praktisk anbefaling
Hvis du bygger en ny integration fra bunden:
- Foretraek HTTP til konfiguration og direkte queries
- Foretraek MQTT til pushed telemetry, eventstroemme og broker-styrede automationer
- Brug
POST /configi stedet for de aeldre/save...-endpoints, naar det er muligt