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 på en dedikeret side.
Omfang
Ladeboksen eksponerer to lokale integrationsmekanismer:
- En lokal HTTP-server på 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 telemetri, der publiceres 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, kræver den lokale HTTP-server HTTP-godkendelse for både API-requests og statiske sider. Når laderen kører i AP-only mode, håndhæves godkendelse ikke.
De lokale HTTP-handlere sender også 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 nuværende 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 - Tællere:
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 netværksmode. 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 netværksvej er forbundet, ellers0.ipaddress: nuværende lokal IP-adresse som streng.mqtt_connected:1naar den lokale MQTT-klient er forbundet til sin broker, ellers0.free_heap: nuværende fri heap i bytes.largest_free_block: nuværende største 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: målt fase-1 strøm i ampere.amp1: samme værdi somamp.amp2: målt fase-2 strøm i ampere.amp3: målt fase-3 strøm i ampere.voltage: målt fase-1 spænding.pilot: aktuelt annonceret pilotstrøm i ampere.wh: akkumuleret energi i watt-timer.v1: målt fase-1 spænding.v2: målt fase-2 spænding.v3: målt fase-3 spænding.temp1: ekstern temperaturværdi ellerfalse, hvis sensoren ikke er gyldig.temp4: valgfri MCP9808-temperaturværdi ellerfalse, hvis utilgængelig. Kun til stede, naar sensorunderstøttelsen er kompileret ind.state: aktuel EVSE-statekode.freeram: fri heap i bytes fra EVSE telemetry-blokken.srssi: Wi-Fi RSSI i dBm.elapsed: forløbet opladningstid i sekunder for den aktuelle session.wattsec: sessionsenergi i watt-sekunder.watthour: akkumuleret energitotal i watt-timer.gfcicount: GFCI-triptæller.nogndcount: no-ground-triptæller.stuckcount: stuck-relay-triptæller.charge_rate: nuværende charge-rate værdi i ampere.ota_update:1mens en firmware OTA-opdatering kører, ellers0.time: nuværende UTC timestamp formatteret som ISO 8601, fx2026-03-10T12:34:56Z.offset: nuværende UTC offset-streng frastrftime("%z").crash_seq: sekvensnummer for den senest gemte crashlog-record.boot_count: total boot-tæller 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 største 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 nuværende crashlog-record blev gemt.
GET /config
Returnerer den aktuelle konfiguration som JSON.
Dette inkluderer både generelle settings og understøttede 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 tilføjet af
handleConfigGet() - Statiske capability-lister
- Serialiserede persistente konfigurationsfelter fra
app_config.cpp
Nogle secret fields kan være 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-størrelse 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-værdi fra$GA.offset: current-sensor offset-værdi fra$GA.amplimit: current ampacity-relateret limit-værdi læst fra token 2 af$GC. I upstream OpenEVSE-kommentarerne er dette token den hardwaremaksimale strøm.
Capability-lister
mqtt_supported_protocols: array med understøttede MQTT-transportstrenge. Aktuelt["mqtt","mqtts"].http_supported_protocols: array med understøttede HTTP-transportstrenge. Aktuelt["http","https"].nofos_network_profiles: array med understøttede NOFOS network profile labels. Aktuelt["Disabled","GSM only","GSM with fallback to Wi-Fi","Wi-Fi only","Wi-Fi 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:truenår MQTT TLS certificate validation håndhæves.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 ældre 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/netværk:
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 værdi 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 højere 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-netværk 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-brugsmønster
For en ekstern integration er det praktiske mønster:
- Læs
GET /statusfor live-state - Læs
GET /configved opstart, hvis din klient har brug for capability discovery - Skriv
POST /configfor understøttede 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 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, indpakkes eller særbehandles i dette repository.
Hvor en kommando kun er udledt af brugen og repository'et ikke indeholder den upstream protokolbeskrivelse, er det nævnt eksplicit.
Query- og statuskommandoer
$GV: hent EVSE firmwareversion og RAPI-protokolversion.$GS: hent EVSE-status. Bruges til at læse nuværende state og forløbet 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]: sæt current capacity.Vsætter en volatil current limit.Mgemmer en maksimumgrænse i EEPROM. Uden suffix behandles den som compatibility fallback for ældre controllere.$SV <millivolts>: sæt den spænding der bruges til power-beregninger.$S1 <yy> <mm> <dd> <hh> <mm> <ss>: sæt controllerens RTC-tid.$ST <start_hour> <start_minute> <end_hour> <end_minute>: sæt delay timeren.$FE: aktiver opladning / væk EVSE.$FS: sæt EVSE i sleep mode.$FD: deaktiver EVSE.$FR: genstart EVSE-controlleren.$FF <feature> <0|1>: aktiver eller deaktiver en controller-feature.0deaktiverer og1aktiverer. Understøttede feature IDs dokumenteret i dette repository erB,D,E,F,G,R,TogV.$F0 <0|1>: deaktiver eller aktiver LCD display updates.$FB <color>: sæt LCD backlight color.$FP <x> <y> <text>: tegn tekst på 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:1låser,0låser op.$SB: ryd den hårde 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 nuværende EVSE-state:
curl "http://<charger-ip>/r?json=1&rapi=\$GS"
Hent current-capacity-information:
curl "http://<charger-ip>/r?json=1&rapi=\$GC"
Sæt 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 kører 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
Understøttede 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=truehåndhæver certificate validation formqtts- Det gamle
POST /savemqtt-endpoint kan ikke sættemqtt_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 på mqtt_announce_topic:
{
"state": "connected",
"id": "<device-id>",
"name": "<hostname>",
"mqtt": "charger/nofos-1234",
"http": "http://<charger-ip>/"
}
Laderen sætter også en retained last-will message på 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 også 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: sæt 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'
Læs derefter responsen:
mosquitto_sub -h 192.168.1.10 -u mqtt-user -P mqtt-pass \
-t 'charger/nofos-1234/rapi/out'
Sæt 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-brugsmønster
For de fleste broker-baserede integrationer:
- Konfigurer MQTT gennem
POST /config - Læs det retained payload på
mqtt_announce_topicfor at finde laderen - Subscribe til
<mqtt_topic>/# - Brug
<mqtt_topic>/rapi/in/$..., når du har brug for en controller-kommandovej gennem broker
Praktisk anbefaling
Hvis du bygger en ny integration fra bunden:
- Foretræk HTTP til konfiguration og direkte queries
- Foretræk MQTT til pushed telemetry, eventstrømme og broker-styrede automationer
- Brug
POST /configi stedet for de ældre/save...-endpoints, når det er muligt