Skip to main content

Environment Configuration (/ui/system/config) — Editing app.properties

This screen lets you edit the app.properties file — which holds all gateway settings (DB / MQTT / OPC-UA / site / monitoring / users, etc.) — directly from the web.

Click the Environment Configuration card on the home screen, or go to /ui/system/config.

Save behavior in container mode (2026.05+)

On save, /etc/kopens/app.properties (host bind mount) is updated and applied when the container restarts (/config/restart button or signal file /etc/kopens/host-action.request). For the HiveMQ broker, auth.properties is synchronized automatically with mqtt.server.* by the container-entrypoint on every boot — you only need to change app.properties (no manual editing of auth.properties required).

CLI change:

sudo bash /opt/kopens/install/bin/config.sh --set edge.rest.api.auth true
sudo bash /opt/kopens/install/bin/config.sh --restart

1. Screen Layout

┌─────────────────────────────────────────────────────────────┐
│ 환경 설정 [←] [💾 저장] │
├─────────────────────────────────────────────────────────────┤
│ ⚠ 주의사항 패널 (빨강) │
│ - 환경 설정 파일 수정 시 서버 재시작 필요 │
│ - 필수 키 삭제 금지 │
│ - 웹 접속 불가시 ${PE_HOME}/conf/app.properties 수동 수정 │
├─────────────────────────────────────────────────────────────┤
│ [CodeMirror 에디터 — properties 모드 / xq-dark 테마] │
│ (라인번호, 매칭 괄호, 자동 완성, 활성 라인 하이라이트) │
└─────────────────────────────────────────────────────────────┘

2. Top Actions

ButtonAction
← BackGo to /ui/main
💾 Save (blue button)POST /config/save — save the current editor content to app.properties

Toast right after saving: "Configuration complete! Restart the server to apply the changes."

⚠ The save itself takes effect immediately, but the runtime only reflects it after a restart.


3. Editor — CodeMirror

FeatureBehavior
Modetext/x-properties (KEY=VALUE format)
Themexq-dark (black background + neon keywords)
Line numbersShown on the left
Bracket matchingAuto-highlights ${...} and the like
Active lineHighlights the cursor line
Word wrapLong lines wrap automatically
Height2400px (long files at a glance)

4. Key app.properties Entries — The Ones You'll See Most

For details, see app.properties configuration. Frequently adjusted items:

CategoryKeyMeaning
Operating modedev.modeEDGE / STANDALONE / PLATFORM — usually EDGE on the edge
Site identificationedge.idGateway unique ID (EDGE_*)
site.id / site.nameSite identification
Upstream platformserver.host / server.port / server.usernamePlantPulse Platform API
server.api_key (falls back to legacy server.apikey)Token for token-based authentication (V4 setUsernameAndToken)
REST API authentication (external clients)edge.rest.api.authIf true, authentication is enforced on /api/* calls
edge.rest.api.keyAPI key sent by external clients. In production, inject it via EDGE_REST_API_KEY_FILE / EDGE_REST_API_KEY and send it in the X-API-Key header or as Authorization: Bearer. A ?api_key= query is rejected with 401
OPC-UA serveropc.ua.server.host / tcp.port / user / passwordThe gateway's built-in OPC-UA server (external SCADA connects to it)
opc.ua.server.anonymousAllow Anonymous (yes/no/true/false/on/1) — the legacy misspelled key ananymous is also accepted as a fallback (both compatible)
MQTTmqtt.enable / mqtt.server.host / port / user / password / topicHiveMQ (built-in or external)
Sparkplug Bsparkplug.enable / sparkplug.cmd.enable / group.id / edge.node.idSparkplug publishing + NCMD/DCMD command reception
DB / TTLapp.db.scheme_ddlDDL file path (default WEB-INF/db/scheme.cql — Cassandra CQL DDL)
cassandra.host / port / keyspace / edge.ttlTime series storage policy (TTL unit = days)
Monitoringmonitor.ping.targetsInternet ping target
Collection policycollector.thread.size / collector.batch.sizeCollector pool size
Securitysecurity.session.timeout.minutesWeb session timeout
Deleting a required key / typo → boot failure

If a required key such as edge.id, cassandra.host, or mqtt.server.host is missing or malformed, the startup listener will fail on the next boot. If the web UI does not come up, SSH in, edit /opt/kopens/plantpulse-edge/conf/app.properties directly, then bin/restart.sh.


5. Applying Changes After Saving

1. [💾 저장] 클릭 → 토스트 "재시작 필요"
2. 외부 SCADA / Sparkplug 수신측에 점검 공지 (다운타임 ~6초)
3. SSH 또는 시스템 메뉴 → /config/restart 호출
4. 1–2초 대기 → 화면 새로고침 → /api/v1/edge 로 새 값 확인

For a quick restart, see Restart (restart.sh) (Tomcat only, ~6 s). Items that require a full restart including DB / MQTT (e.g. the mqtt.enable toggle) need a full restart (stop.shstart.sh).


6. Common Pitfalls

SymptomCause / Resolution
Saved, but the change is not appliedNot restarted. Call bin/restart.sh
Web UI unreachable after savingRequired key deleted / typo. SSH in and recover manually
No toast right after savingCommunication error → check network / Tomcat status (bin/ps.sh)
Korean comments are garbledThe file is not UTF-8. Force UTF-8 (no BOM) in an external editor and save
The same key appears twiceThe last occurrence wins. Delete the first line

7. System Tags (auto-registered / 90000–90035)

At boot, the gateway automatically registers its own OPC (EDGE_*) and 36 system tags (TAG_<edge_id>_NNNNN) in the OPC-UA server. If an external SCADA / IIoT system subscribes to these tags, it receives the gateway's status/identity/network information directly.

7.1 Identity / Host (90000–90004)

IndexMetricTypeMeaning
90000HOSTNAMESTRINGOS hostname
90001VERSIONSTRINGGateway SW version
90002EDGE_IPSTRINGGateway's own IP
90003EDGE_NAMESTRINGGateway name
90004OPERATING_SYSTEMSTRINGOS + architecture

7.2 Network (90005–90011)

IndexMetricTypeMeaning
90005NET_1_IPSTRINGNIC 1 IP
90006NET_2_IPSTRINGNIC 2 IP
90007NET_WIFI_IPSTRINGWIFI IP
90008NET_GSM_IPSTRINGGSM modem IP
90009NET_VPN_IPSTRINGVPN (tailscale, etc.) IP
90010NET_MGNT_IPSTRINGManagement port IP
90011TEMPERATUREDOUBLECPU temperature (°C)

7.3 System / Collection / Queue (90012–90027)

IndexMetricTypeMeaning
90012CPU_USAGEDOUBLECPU %
90013MEM_USAGEDOUBLEMemory %
90014DISK_USAGEDOUBLEDisk %
90015OPC_COUNTINTNumber of registered OPCs
90016TAG_COUNTINTNumber of registered tags
90017PLC_CON_CONNECTED_COUNTINTNumber of connected OPCs
90018PLC_CON_DISCONNECTED_COUNTINTNumber of disconnected OPCs
90019PLC_SCAN_START_COUNTINTNumber of OPCs collecting normally
90020PLC_SCAN_NOT_COLLECT_COUNTINTNumber of OPCs with collection faults
90021PLC_SCAN_STOP_COUNTINTNumber of OPCs with collection stopped
90022QUEUE_SIZEINTMemory queue
90023QUEUE_DISK_SIZEINTDisk queue
90024SENDED_POINT_COUNTLONGCumulative transmitted points
90025SENDED_POINT_BYTESLONGCumulative transmitted bytes
90026MPSDOUBLEMessages per second
90027SYSTEM_ERROR_COUNTINTERROR count today

7.4 Operations / Identity (90028–90035) — new

IndexMetricTypeMeaning
90028CONNECTED_OPC_IDSSTRINGList of connected OPC IDs (comma-separated)
90029API_KEYSTRINGCurrently active REST API key
90030REGISTED_OPC_IDSSTRINGList of all registered OPC IDs
90031DISCONNECTED_OPC_IDSSTRINGList of disconnected OPC IDs
90032COLLECTING_OPC_IDSSTRINGList of OPC IDs currently collecting
90033STOPPED_OPC_IDSSTRINGList of OPC IDs with collection stopped
90034BUILD_DATESTRINGBuild date of the artifact (yyyy-MM-dd)
90035DOCKER_CONTAINER_NAMESSTRINGNames of running Docker containers (comma-separated)

All system tags are refreshed every second by SendTask. If an external SCADA subscribes to them, you can build a dashboard that shows edge status at a glance without going to the field.


8. Learn More