Skip to main content

app.properties Reference

All runtime settings for PlantPulse Edge. Locations:

  • Container mode (2026.05+): The actual file is on the host at /etc/kopens/conf/app.properties (bind mount, chmod 0640 root). /etc/kopens/app.properties is a symlink pointing to it — editing either one modifies the same file. If the file does not exist, it's seeded once from the image default during installation, and is never overwritten afterward (operator edits persist across image upgrades).
  • Native mode: $PE_HOME/conf/app.properties. $PE_HOME/app/plantpulse-edge-web/WEB-INF/classes/app.properties is the runtime mirror for classpath loading.

In container mode, install.sh generates a 165-line full template on first installation (16 sections + a random password for each box, 16–32 characters). The default values on this page are for reference — check the actual file inside the box for the real values in production.

Applying Changes​

# 컨테이너 모드
sudo bash /opt/kopens/install/bin/config.sh --set edge.rest.api.auth false
sudo bash /opt/kopens/install/bin/config.sh --restart

# native 모드
sudo vi /opt/kopens/plantpulse-edge/conf/app.properties
sudo /opt/kopens/plantpulse-edge/bin/restart.sh

Edge Identification / Operations​

edge.id=EDGE_00303
edge.site_id=SITE_00001
edge.ttl=30
edge.always-on=false
KeyMeaning
edge.idUnique edge ID (required, must be unique within the site)
edge.site_idSite ID — must be pre-registered on the platform
edge.ttlHeartbeat TTL (seconds)
edge.always-onWhether the collector starts immediately at boot (if false, it must be started explicitly via the UI/REST)

Administrator Account​

edge.admin_login_id=${ENV:EDGE_ADMIN_USER:admin}
edge.admin_password=${SECRET:EDGE_ADMIN_PASSWORD_HASH}

Inject the administrator password as a PBKDF2 hash via EDGE_ADMIN_PASSWORD_HASH_FILE or EDGE_ADMIN_PASSWORD_HASH.

Collector​

edge.collector.plc.thread_pool_count=4
edge.collector.plc.connection_reset_ms=0
edge.collector.plc.connection_warn_ms=1000
edge.collector.plc.address_scan_thread_warn_ms=200
edge.collector.plc.address_map_scan_thread_warn_ms=5000
KeyMeaning
thread_pool_countRead worker pool size per OPC connection
connection_reset_msAutomatic connection reset interval (0 = off)
connection_warn_msLog a WARN if connection time exceeds this value
address_scan_thread_warn_msRead time threshold for a single address
address_map_scan_thread_warn_msOverall read time threshold per cycle

Test/Demo Data​

Automatic startup of the built-in OPCUA/MODBUS simulators is not supported. Use an external plantpulse-simulator or test tags for test/demo data.

Diagnostics Transmission​

edge.diagnostic.send.enabled=true

Toggle for transmitting edge diagnostics (system metrics, etc.) to the platform.

OPC-UA Server (Publishing Own Nodes)​

opc.ua.server.domain=127.0.0.1
opc.ua.server.tcp.port=12000
opc.ua.server.tls.port=12443
opc.ua.server.user=${ENV:OPCUA_USER:edge}
opc.ua.server.password=${SECRET:OPCUA_PASSWORD}
opc.ua.server.keystore.password=${ENV:CERT_PASS:}
opc.ua.server.anonymous=yes
opc.ua.server.security.none=yes

The edge acts as its own OPC-UA server, exposing collected tags as nodes. External SCADA systems can connect as OPC-UA clients and read these nodes. anonymous=yes allows anonymous access (the old typo key ananymous is read only when the new key is absent); security.none=yes opens the unsecured (None/None) session endpoint on the TCP port. Both default to yes.

TSE (Time Series Engine)​

tse.server.host=127.0.0.1
tse.server.port=7800
tse.server.user=tse
tse.server.password=tse123!

Optional. Used when integrating with a separate time series engine (plantpulse-timeseries-engine).

MQTT Publishing​

mqtt.enable=true
mqtt.server.host=127.0.0.1
mqtt.server.port=1883
mqtt.server.user=${ENV:MQTT_USER:edge}
mqtt.server.password=${SECRET:MQTT_PASSWORD}
mqtt.server.topic=/edge/point
  • If mqtt.enable=true is enabled, MQTTQueueTransfer publishes when processing the queue.
  • All Points flow to a single topic (/edge/point).

Sparkplug B​

sparkplug.enable=false
sparkplug.group.id= # 비우면 site_id
sparkplug.edge.node.id= # 비우면 EdgeContext.id
sparkplug.device.strategy=per-opc # per-opc | single (현재 per-opc 만 구현)
sparkplug.qos=0 # DDATA 빈번 → 0 권장
sparkplug.bdseq.path= # 비우면 ./data/sparkplug/bdseq
sparkplug.alias.enable=true # Phase 2 토글 (현 무영향)
sparkplug.cmd.enable=false # Phase 3 토글 (현 무영향)

Broker connection information reuses mqtt.server.* as-is. See the Sparkplug documentation for details.

Plantpulse Server API​

server.host=192.168.0.41
server.port=80
server.ssl=false
server.username=
server.api_key=${SECRET:PLANTPULSE_SERVER_API_KEY}
server.messaging=MQTT
KeyMeaning
server.host/portPlatform API host
server.sslWhether HTTPS is used
server.api_keyPlatform API token authentication. PLANTPULSE_SERVER_API_KEY_FILE is recommended
server.messagingEither MQTT or API. If MQTT is enabled, APIQueueTransfer acts as a secondary role

Development Mode​

dev.mode=EDGE

Supports EDGE (default) and STANDALONE. PLATFORM is rejected.

Command/Event Handler / SQL Path​

app.es.scan.package=plantpulse.app
app.sql.path=classpath:resouces/sql
Typo (Compatibility Maintained)

The resouces in app.sql.path is a typo, but the directory is also kept with the same name (/WEB-INF/resouces/sql/), so it works. If you change it, you must update both.

API Usage​

api.use=true

Toggle to enable REST controllers.

Cassandra DB​

app.db.host=127.0.0.1
app.db.port=9042
app.db.username=${ENV:CASSANDRA_USER:cassandra}
app.db.password=${SECRET:CASSANDRA_PASSWORD:cassandra}
app.db.keyspace=pe
app.db.replication=1
app.db.scheme_ddl=/WEB-INF/db/scheme.cql

oltp.cassandra.driver=plantpulse.cassandra.jdbc.CassandraDriver
oltp.cassandra.url=jdbc:cassandra://127.0.0.1:9042/pe
oltp.cassandra.user=${ENV:CASSANDRA_USER:cassandra}
oltp.cassandra.password=${SECRET:CASSANDRA_PASSWORD:cassandra}
KeyMeaning
app.db.*Cassandra native driver (com.datastax.oss.driver) connection
oltp.cassandra.*JDBC adapter connection (used by some application code)
app.db.scheme_ddlPath to a DDL file to apply automatically at boot

The host/user/password must match for both.

File Upload​

file.upload.dir=/tmp/

Temporary path used by the file upload component. A separate directory is recommended for production environments.


ItemReason for Change
edge.admin_passwordInject PBKDF2 hash via EDGE_ADMIN_PASSWORD_HASH_FILE
mqtt.server.password / opc.ua.server.passwordInject via MQTT_PASSWORD_FILE / OPCUA_PASSWORD_FILE
app.db.passwordInject via CASSANDRA_PASSWORD_FILE
sparkplug.bdseq.pathAbsolute path recommended (/opt/kopens/.../data/sparkplug/bdseq)
server.host / passwordPlantpulse Platform connection information