Zum Hauptinhalt springen

Property-Referenz

Dieses Dokument wird aus den bereitgestellten physischen Konfigurationsvorlagen (*.properties) regeneriert. Das Original der Vorlage ist plantpulse-datalake-cli/config/templates, und das /etc/kopens/conf des Hosts wird dorthin per Bind-Mount eingebunden. Welche Vorlage an welcher Stelle gerendert wird, bestimmt ein Kapitel in config/render.map. Das Original der Ladepriorität befindet sich in plantpulse-core/src/plantpulse/core/engine/utils/PropertiesUtils.java.

Wenn Schlüssel hinzugefügt, gelöscht oder umbenannt wurden, ist die Vorlage und nicht dieses Dokument das Original. Bitte füllen Sie das Dokument nicht manuell aus, sondern extrahieren Sie es erneut aus der Vorlage. Die „Standardwerte“ in jeder Tabelle entsprechen den Angaben in der Vorlage, und ${PP_XXX} ist der Platzhalter, der beim Rendern durch den Wert der Umgebungsvariablen ersetzt wird.

Woher kommen die Werte und wohin gehen sie​

WasWoBerechtigungÄnderungsmodus
Secrets — DB-Passwörter · API-Keys/etc/kopens/plantpulse-platform.env0600bin/passwd.sh (Server-Konto ändern → Sidecar aktualisieren → Neu rendern → Neustart als ein Befehl)
Box-spezifische Werte — PP_MASTER_IP · Kafka Advertise-Adressen · Image-Tag-Pins/etc/kopens/platform.node.env0600Direkte Bearbeitung, dann bin/restart-datalake.sh
Konfiguration — Ports · Image-Tags · Locales · Datenpfade.env im Repo (.env.example nur commiten)—Direkte Bearbeitung, dann Neustart
«Zeilen» der Engine-Konfiguration — postgresql.conf Parameter, Kafka-Retention, Aster TSDB Heap/etc/kopens/conf/<파일>.template—Vorlage bearbeiten → pd config render → pd restart <서비스>
Direkte Änderungen an Konfigurationsdateien der Komponenten gehen beim nächsten Start verloren

pd start rendert die Vorlagen jedes Mal neu und überschreibt die Konfigurationspfade der Komponenten. Selbst wenn cassandra.yaml, postgresql.conf oder kafka.properties geöffnet und geändert werden, kehren sie beim nächsten Start in den ursprünglichen Zustand zurück. Änderungen müssen in der Vorlage erfolgen → Konfiguration ändern

Secrets und Node-Werte nicht in einer Datei zusammenführen

Secret-Dateien werden bei der Split-Installation auf App-Nodes kopiert, Node-Dateien dürfen nicht kopiert werden. Bei einer Zusammenführung würden PP_MASTER_IP einer Box und Image-Tag-Pins an andere Boxen gelangen. Das Format ist einheitlich gemäß VAR=값 — das Hinzufügen von export führt dazu, dass env_file: dies nicht parsen kann.

Standardverfahren für Vorlagenänderungen​

Werte am Host ändern und in den Container in pd übernehmen.

vi /etc/kopens/conf/<템플릿> # 1. 호스트의 템플릿을 고칩니다

docker exec plantpulse-datalake pd doctor # 2. 검사 (선택)
docker exec plantpulse-datalake pd config diff # 3. 무엇이 달라지는지 봅니다
docker exec plantpulse-datalake pd config render # 4. 실제로 씁니다
docker exec plantpulse-datalake pd restart <서비스> # 5. 재시작
docker exec plantpulse-datalake pd status # 6. 확인

pd config render schreibt nur die Konfigurationsdateien neu und startet die Dienste nicht neu. Bis zum Neustart liegt die neue Konfiguration nur auf der Festplatte, während der alte Prozess weiterläuft. Daher bilden Schritt 4 und 5 eine Einheit.

Ladepriorität von Konfigurationsdateien​

Webanwendungen (server / batch / cep / sql / data-gateway) suchen Konfigurationsdateien in folgender Reihenfolge. Die Implementierung erfolgt über PropertiesUtils.readExternalFirst().

  1. Verzeichnis, das als -Dpp.conf.dir Systemproperty angegeben wurde (Konstante PropertiesUtils.CONF_DIR_SYSTEM_PROPERTY = "pp.conf.dir")
  2. ${catalina.base}/../config — config/ Verzeichnis des Moduls
  3. Webapp-Classpath (Standardwerte in WAR) — Fallback

Externe Dateien werden in UTF-8 gelesen. Wenn die externe Konfiguration erfolgreich geladen wird, erscheint Folgendes im Startlog:

Properties loaded from external conf: <absolute-path>

Bei einem Fehler beim Lesen externer Dateien wird ein Error-Log erstellt und auf den Classpath zurückgegriffen (Fallback).

Auch die Logging-Konfiguration (log4j2.xml) ist über dieselbe Kette externalisiert (Self-Seeding — falls keine externe Datei vorhanden ist, wird der WAR-Standardwert einmalig in das Modul config/log4j2.xml kopiert und verwendet). Bei Anwendung erscheint Logging reconfigured from external conf: <absolute-path> im Startlog. Änderungen des Log-Levels erfolgen durch Bearbeitung des Moduls config/log4j2.xml und anschließenden Neustart, was auch bei einer WAR-Neuinstallation erhalten bleibt. Details siehe Konfigurations- und Deployment-Guide.

Achtung: Interne Webapp-Dateien (server/webapps/ROOT/WEB-INF/classes/ etc.) nicht direkt ändern — sie gehen bei einer WAR-Neuinstallation verloren.

${ENV:기본값} Ersetzung erfolgt zweimal​

Die Notationen ${PP_XXX} / ${PP_XXX:기본값} in der Vorlage werden zu zwei Zeitpunkten interpretiert.

ZeitpunktAkteurAktion
Beim Startpd config renderErsetzung durch Sidecar(plantpulse-platform.env · platform.node.env) und Container-Umgebung. Reihenfolge: Umgebungsvariable → :기본값 → Original beibehalten. Verschachtelte Placeholder nicht unterstützt
Zur LaufzeitPropertiesUtils.resolveEnvPlaceholdersInterpretation von ${ENV_VAR[:default]} für alle Werte der geladenen Properties

Das bedeutet, dass auch nach dem Deployment verbleibende ${...} durch Umgebungsvariablen des Prozesses gefüllt werden können. Dies ist der Grund, warum Docker -e VAR=... Injektionen Vorrang vor den Standardwerten der Vorlage haben.

PP_* Variablen, die nicht im Sidecar vorhanden sind (Standardwerte der Vorlage gelten)​

Die folgenden Variablen werden in der Vorlage als ${PP_XXX:기본값} referenziert, aber in der Sidecar-Datei nicht definiert. Ohne separate Injektion wird daher immer der Standardwert der Vorlage verwendet.

PP_EXTERNAL_DB_PASSWORD · PP_MAIL_SMTP_HOST · PP_MAIL_SMTP_PORT · PP_MAIL_SMTP_AUTH · PP_MAIL_SMTP_USER · PP_MAIL_SMTP_PASSWORD · PP_MAIL_SMTP_STARTTLS · PP_DIAGNOSTIC_EMAIL

PP_AI_* war in dieser Liste, ist aber jetzt funktionslos

Werte für PP_AI_OPENAI_* · PP_AI_MCP_* · PP_AI_CHAT_ENABLED werden stillschweigend ignoriert. Die Ebene, die diese Werte gelesen hat, wurde am 18.09.2026 entfernt — siehe AI-Konfiguration.

PP_STORAGE_PASSWORD · PP_METASTORE_PASSWORD waren in dieser Liste, sind aber «nicht existierende Variablen»

Weder die Vorlage noch das Sidecar referenzieren diese Namen. Die tatsächlichen Namen sind wie folgt:

WasTatsächliche Variable
Verbindung zum Zeitreihenspeicher (Aster TSDB)PP_CASSANDRA_HOST · PP_CASSANDRA_PORT · PP_CASSANDRA_USER · 🔑 PP_CASSANDRA_PASSWORD
Verbindung zum Metastore (PostgreSQL)PP_POSTGRES_HOST · PP_POSTGRES_PORT · PP_PG_USER · 🔑 PP_PG_PASSWORD

🔴 PP_MAIL_SMTP_* ist ebenfalls funktionslos. Das Original der Mail-Konfiguration ist pp.mm_config, und die Werte werden in der Konsole (/config/index) oder in der entsprechenden Tabelle geändert — Mail-Konfiguration. Grund für diesen Transfer ist, dass zusammengehörige Werte (Host · Port · Authentifizierung · Konto) nur an einer Stelle geändert werden sollen.

5 Arten der Servermanagement-Konfiguration​

Es gibt 5 Konfigurationsdateien, die durch das ConfigTemplates.SERVER_CONFIGS Array definiert und als plantpulse-server/config/ bereitgestellt werden.

#VorlageBereitstellungspfad
1plantpulse-engine.properties/plantpulse-server/config/plantpulse-engine.properties
2plantpulse-storage.properties/plantpulse-server/config/plantpulse-storage.properties
3plantpulse-mq.properties/plantpulse-server/config/plantpulse-mq.properties

Diese drei Dateien werden gemeinsam von PropertiesLoader.load() gelesen (engine/mq/storage), wodurch die Typed-Configuration Beans EngineConfig · StorageConfig · MqConfig neu aufgebaut werden.

Mail- und AI-Konfigurationen sind keine Dateien — pp.mm_config ist das Original

plantpulse-mail.properties und plantpulse-ai.properties wurden am 17.09.2026 gelöscht, und der Pfad, der alte Kopien aus dem externen Konfigurationsverzeichnis las und in Tabellen übertrug, wurde am 18.09.2026 komplett entfernt. Das bedeutet, dass selbst bei Erstellung dieser Dateien nichts gelesen wird.

Werte können nur über die Konsole und PostgreSQL pp.mm_config eingegeben werden. Die Originale der Schlüsselnamen und Standardwerte liegen in MailConfigKeys · AiConfigKeys des Codes; Schlüssel ohne Tabellenzeile werden mit dem Standardwert gelesen — die Schlüsseltabellen in den folgenden zwei Abschnitten bleiben gültig.

application.properties (Entfernt)​

application.properties wurde im Juni 2026 entfernt. Es gibt keinen Code, der diese Datei liest (0 Treffer im gesamten Repo), und bestehende Einträge wurden wie folgt übertragen:

  • Konsolenverhalten wie Thema / Homepage → Konsole System > Konfigurationsmanagement (PostgreSQL mm_config Tabelle)
  • alarm.duplicate.check.minutes → plantpulse-engine.properties Reihe (EngineConfig liest diese)

plantpulse-engine.properties​

Pfad: plantpulse-server/config/plantpulse-engine.properties · Vorlage: template/plantpulse-engine.properties

Steuert das Kernverhalten der Datenverarbeitungs-Engine.

Asynchron / Pipeline​

PropertyStandardwertErsetzungBeschreibung (Vorlagen-Kommentar)
engine.async.parallelism256—Async worker pool parallelism (total cores ~= 256)
engine.pipeline.threads36—Anzahl der Pipeline-Threads
engine.pipeline.ratelimit40000—Pipeline-Verarbeitungslimit pro Sekunde (Rate Limit)
engine.pipeline.queue.size1200000—Pipeline-Warteschlangengröße (Backpressure-Limit)
engine.pipeline.queue.o3.delay50—Zulässige Verzögerung für Out-of-Order-Daten (ms)
engine.pipeline.task.modeSINGLE—Task-Ausführungsmodus (SINGLE / PARALLEL)

NTP​

PropertyStandardwertErsetzungBeschreibung
engine.ntpdate.server.ip127.0.0.1—NTP-Server-IP
engine.ntpdate.syncfalse—NTP-Synchronisierung beim Booten

Stream / CEP​

PropertyStandardwertErsetzungBeschreibung
engine.stream.processorDIRECT—Stream-Verarbeitungsmodus (DIRECT/BUFFERED)
engine.cep.server.ip127.0.0.1${PP_CEP_HOST:127.0.0.1}CEP-Server-IP
engine.cep.server.port7400${PP_CEP_CONNECT_PORT:7400}CEP-Server-Port (automatische Ausrichtung nach Protokoll: http→7400, https→7401)
engine.cep.server.protocolhttp${PP_CEP_PROTOCOL:http}CEP-Protokoll. Standard für interne Kommunikation ist http, für verteilt/Container https
engine.cep.server.api.key(keiner)${PP_CEP_API_KEY}Für CEPClient X-API-Key Header. Muss mit CEP-Server cep.api.key übereinstimmen

Streaming-Nachrichtenübertragung​

PropertyStandardwertErsetzungBeschreibung
engine.streaming.messaging.warning.ms5000—Warnung bei Nachrichtenverzögerung (ms)
engine.streaming.messaging.timeout.ms10000—Nachrichtenübermittlungs-Timeout (ms)
engine.streaming.messaging.timeout.store.typeFILE_QUEUE—Speichermethode für Timeout-Nachrichten (FILE_QUEUE/MEMORY)
engine.streaming.messaging.timeout.recovery.typeDB—Wiederherstellungsquelle für Timeout-Nachrichten (DB/FILE)

Job-Worker-Threads​

PropertyStandardwertErsetzungBeschreibung
engine.job.thread.asset8—Anzahl der Asset-Job-Threads
engine.job.thread.point8—Anzahl der Point-Job-Threads

DDS​

PropertyStandardwertErsetzungBeschreibung
engine.dds.enabledtrue—Globale DDS-Aktivierung
engine.dds.data.tag.enabledtrue—Tag-Daten DDS-Veröffentlichung
engine.dds.data.asset.enabledtrue—Asset-Daten DDS-Veröffentlichung

Anomalieerkennung / Datenfluss​

PropertyStandardwertErsetzungBeschreibung
engine.data.anomaly.enabledfalse—Anomalieerkennung aktiviert (Anbindung an externe Dienste)
engine.data.anomaly.urlhttps://127.0.0.1:8970—URL des Dienstes zur Anomalieerkennung
engine.dataflow.classplantpulse.core.engine.pipeline.dataflow.BaseDataFlow—Implementierungsklasse des Datenflusses
engine.dataflow.server-timestamp.overridefalse—Erzwingen von Server-Zeitstempeln (true: Zeit der Erfassung, false: Original)
engine.dataflow.negative-timestamp.overridetrue—Korrektur negativer Zeitstempel
engine.factory.model.updater.classplantpulse.core.engine.model.impl.DefaultFactoryMetaModelUpdater—Factory-Metamodell-Updater
engine.event.handler.classplantpulse.core.engine.event.DefaultEventHanlder—Implementierung des Event-Handlers (Tippfehler im Klassennamen Hanlder entspricht dem tatsächlichen Klassennamen)
engine.javagc.enabledfalse—Erlaubnis für explizite System.gc() Aufrufe

Flow-Engine​

PropertyStandardwertErsetzungBeschreibung
flow.debug.execution.logfalse—INFO-Log für Knoten-Ausführung. Nur in Debugging-Sessions auf true
flow.stats.prune.interval.ms86400000—Ausführungszyklus für Counter-Bereinigung (ms, 24h). Da Aster TSDB Counter-Tabellen default_time_to_live nicht nutzen können, erfolgt Bereinigung auf App-Ebene
flow.stats.prune.hourly.days30—Aufbewahrungsdauer für hour_bucket von tm_flow_stats_hourly
flow.stats.prune.daily.days90—Aufbewahrungsdauer für day_bucket von tm_flow_stats_daily
flow.health.check.interval.ms600000—Flow-Healthcheck-Zyklus (ms, 10 Min). ERROR wenn aktuelle Zeit-Bucket errors > 0, sonst NORMAL (KST-basiert)
flow.webhook.api.keydev-webhook-19ba7a54-1132-49f2-967e-3c6f5cd989a0${PP_FLOW_WEBHOOK_API_KEY:...}Externe Webhook-Authentifizierung der Flow-Engine

Von Flow-Healthcheck verwendete Aster TSDB Tabellen: tm_flow_health_status(flow_id, hour_bucket — aktueller Zeitakkumulator), tm_flow_health_status_10m(flow_id, min10_bucket — 10-Minuten-Zeitreihe).

Edge-Healthcheck​

PropertyStandardwertErsetzungBeschreibung
edge.health.check.interval.ms600000—Edge-Healthcheck-Zyklus (ms, 10 Min)

Die Entscheidungsquelle sind die _ON / _NORMAL Flags im Aster TSDB tm_edge_status Payload. Da keine RT REST Aufrufe erfolgen, liegt die Last bei 0 und der Vorgang endet innerhalb von 1 Sekunde. Tabellen: tm_edge_health_status(edge_id, hour_bucket), tm_edge_health_status_10m(edge_id, min10_bucket).

Authentifizierung / Sicherheit​

PropertyStandardwertErsetzungBeschreibung
api.key(keiner)${PP_API_KEY}Interner API-Key der Platform (Authentifizierung Server ↔ Edge-Agent)
engine.api.v5.auth.bruteforce.enabledtrue—Brute-Force-Schutz für V5 API-Authentifizierung
engine.api.v5.auth.bruteforce.ip_limit30—Versuchslimit pro IP
engine.api.v5.auth.bruteforce.user_limit10—Versuchslimit pro Benutzer
engine.api.v5.auth.bruteforce.window.seconds60—Zählungsvorgabe (Sekunden)
engine.api.v5.trusted_proxies(Leerwert)—Trust-Proxy IP-Whitelist. Nur bei Konfiguration wird bei Vorkommen von remoteAddr in der Liste die erste IP von X-Forwarded-For als Client-IP verwendet. Wenn leer, wird nur getRemoteAddr() verwendet (Fail-Safe)
engine.session.bruteforce.enabledtrue—Brute-Force-Schutz für /login/login Browser-Sessions
engine.session.bruteforce.ip_limit30—Versuchslimit pro IP
engine.session.bruteforce.user_limit10—Versuchslimit pro Benutzer
engine.session.bruteforce.window.seconds300—Zählungsvorgabe (Sekunden)

Der Session-Brute-Force-Zähler ist Caffeine-In-Memory — Shared-Mode über mehrere Nodes (Redis) ist nicht implementiert.

API-Token​

PropertyStandardwertErsetzungBeschreibung
engine.api.token.cleanup.enabledtrue—Bereinigung abgelaufener(expires_at < now)/widerrufener(revoked_at IS NOT NULL) Token
engine.api.token.cleanup.retention_days30—Nach Ablauf dieses Zeitraums Hard-Delete aus mm_token. Einmal alle 24h (erstmalig 60s nach Boot)
engine.api.token.default_ttl_days90—Standard Ablaufzeit (Tage) bei Neuausstellung von Token. 0 = Permanenter Token. Wenn die Ausstellungsanfrage ttl_days enthält, hat dieser Wert Vorrang → API-Token ausstellen

Bestehende Token, bei denen expires_at NULL ist, bleiben permanent aktiv (Abwärtskompatibilität).


plantpulse-storage.properties​

Pfad: plantpulse-server/config/plantpulse-storage.properties · Vorlage: template/plantpulse-storage.properties

Verwaltet Verbindungen und Speicherrichtlinien für Metastore (PostgreSQL), Cache (Valkey), Zeitreihe (Aster TSDB), TSE und Data Gateway.

⚠️ In dieser Datei existieren Tippfehler in den Schlüsseln. Drei Schlüssel unterscheiden sich in der Schreibweise von dem, was der Code liest — lesen Sie unbedingt den Abschnitt Warnung zu Tippfehler-Schlüsseln.

PostgreSQL Metastore​

PropertyStandardwertErsetzungBeschreibung
metastore.driverorg.postgresql.Driver—JDBC-Treiberklasse
metastore.urljdbc:postgresql://...${PP_POSTGRES_HOST} · ${PP_POSTGRES_PORT} · ${PP_DB_NAME}Metastore JDBC-URL. Inklusive Querystring ?characterEncoding=UTF-8&reWriteBatchedInserts=true
metastore.user—${PP_PG_USER}Metastore-Konto
metastore.password—${PP_PG_PASSWORD}Metastore-Passwort

Cache (Valkey / Redis kompatibel)​

PropertyStandardwertErsetzungBeschreibung
cache.host—${PP_REDIS_HOST}Cache-Host
cache.port—${PP_REDIS_PORT}Cache-Port (internes Plaintext Valkey-Backend)
cache.password—${PP_REDIS_PASSWORD}Cache-Passwort
cache.ssl.enabledfalse—Cache-TLS. Interner Client standardmäßig redis://
cache.ssl.truststore.location/var/security/plantpulse/master/master.truststore.p12—Truststore-Pfad
cache.ssl.truststore.passwordkopens123!${PP_TLS_TRUSTSTORE_PASSWORD:kopens123!}Truststore-Passwort
cache.ssl.truststore.typePKCS12—Truststore-Typ
cache.ssl.endpoint.identification.enabledfalse—Endpunkt-Identitätsvalidierung

Die Original-Schlüsselkonstanten befinden sich in plantpulse-inmemory unter InMemoryConfigKeys.

TSE (TimeSeries Engine)​

PropertyStandardwertErsetzungBeschreibung
tse.protocolhttp${PP_TSE_PROTOCOL:http}TSE-Protokoll. Standardmäßig Plaintext-http für interne Kommunikation (2026-08)
tse.host—${PP_TSE_HOST}TSE-Host
tse.port7800${PP_TSE_CONNECT_PORT:7800}TSE-Port. Plaintext-Listener standardmäßig 7800
tse.usertse${PP_TSE_USER:tse}TSE-Konto
tse.passwordtse123!${PP_TSE_PASSWORD:tse123!}TSE-Passwort

Aster TSDB Zeitreihenspeicher​

PropertyStandardwertErsetzungBeschreibung
storage.db_typeCASSANDRA—DB-Typ. In Vorlagen-Kommentaren stehen CASSANDRA/DSE/SCYLLADB, aber aktuell wird nur CASSANDRA unterstützt
storage.db_version5.0—Nicht die Serverversion, sondern das «Funktionskompatibilitätsniveau» — siehe Hinweis unten
storage.host—${PP_CASSANDRA_HOST}Contact Point Host
storage.db_version ist 5.0, aber nodetool version wird als 6.0.0 angegeben

Beides ist korrekt. Es handelt sich nicht um zwei Werte für dasselbe.

WertWas
storage.db_version5.0Kompatibilitätsniveau, das festlegt, mit welchem Funktionssatz der Treiber spricht
Tatsächlicher Bundle-Server6.0.0apache-cassandra-timeseries-6.0.0.jar — Interner Fork von cassandra-6.0

Interpretieren Sie 5.0 nicht als «Server ist Version 5.0». Informationen zum Server finden Sie unter Zeitreihendatenbank. Ändern Sie diesen Wert nicht eigenmächtig auf 6.0 — dies verändert das Treiberverhalten.

| storage.port | 9042 | ${PP_STORAGE_PORT:9042} | Native-Protokollport | | storage.keyspace | — | ${PP_KEYSPACE} | Verwendeter Keyspace | | storage.user | — | ${PP_CASSANDRA_USER} | Verbindungskonto | | storage.password | cassandra | ${PP_STORAGE_PASSWORD:cassandra} | Passwort. PP_STORAGE_PASSWORD wird in env.sh nicht exportiert → Standardwert gilt | | storage.durable_writes | true | — | Verwendung von Commit Log (⚠️ kein lesender Code vorhanden — siehe unten) | | storage.append_columns | [] | — | Automatische Hinzufügung benutzerdefinierter Spalten | | storage.replication | { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 1 } | — | Replikationsstrategie (Standard: Single Node) | | storage.data.disk.name | — | ${PP_DATA_DISK_NAME} | Name der Datenträgerdisk |

TTL (Einheit: Tage)​

PropertyStandardwertBeschreibung
storage.tag.point.ttl62Tag-Zeitreihe Original
storage.tag.point.map.ttl1Tag-Point-Map
storage.tag.point.sampling.ttl93Tag-Sampling
storage.tag.point.snapshot.ttl93Tag-Snapshot
storage.tag.point.aggregation.ttl93Tag-Aggregation
storage.tag.point.archive.ttl365Tag-Archiv (Langzeitarchivierung)
storage.tag.blob.ttl93Tag-BLOB
storage.asset.data.ttl10Asset-Daten
storage.asset.data.sampling.ttl31Asset-Sampling

Asset-Snapshot-Zyklus​

PropertyStandardwertBeschreibung
storage.asset.data.snapshot.interval10 SECONDSAufzeichnung der Asset-Tag-Map(data_map) vor jedem Zyklus in die asset_data Reihe (Daten/Sekunde/Zeitstempel + Min/Std/Tag Grenze)

Vorlagen-Kommentar begründet dies: 1 SECONDS führte bei 121 Assets zu ca. 22K Schreibvorgängen pro Minute (ca. 4% des gesamten Aster TSDB), was zu Überlastung führte. Da Tag-Originale (sekündlich) in tm_tag_point/TSE vollständig erhalten bleiben, wurde der Asset-View-Snapshot auf 10s gesenkt (entspricht Standardwert im Code) — Reduktion der Schreibvorgänge um 90%, Erhalt der Aufzeichnungsvollständigkeit.

Dieser Wert dient als ASSET_DATA_JOB Zyklus des Schedulers. Muss im "<n> <unit>" 2-Token-Format vorliegen; Regeln siehe Scheduler-Architektur.

Interne Metastore-Synchronisation (experimentell)​

PropertyStandardwertBeschreibung
storage.internal.metastore.enabledfalseInterne Metastore-Synchronisation aktiviert
storage.internal.metastore.thread.count4Anzahl der Synchronisations-Worker-Threads
storage.internal.metastore.queue.size12000000Synchronisations-Warteschlangengröße
storage.internal.metastore.point.retation.days10Point-Aufbewahrungsdauer (⚠️ Tippfehler-Schlüssel — siehe unten)

Zeilen-Cache​

PropertyStandardwertBeschreibung
storage.asset.data.row.cache.sizeNONEZeilen-Cache für Asset-Daten (NONE/ROWS_ONLY/ALL) — ⚠️ kein lesender Code vorhanden
storage.tag.point.row.cache.sizeNONEZeilen-Cache für Tag-Points — ⚠️ kein lesender Code vorhanden

Compaction​

PropertyStandardwertBeschreibung
storage.table.compaction.strategyUCSStandardstrategie (TWCS: TimeWindow, UCS: Unified). Wird von CassandraCreateDAO gelesen (Code-Fallback ist TWCS)
storage.table.compaction.strategy.twcs.window_size1TWCS-Fenstergröße — ⚠️ kein lesender Code vorhanden
storage.table.compaction.strategy.twcs.window_unitDAYSTWCS-Fenstereinheit — ⚠️ kein lesender Code vorhanden
storage.table.compaction.strategy.ucs.scailing_parameterT8UCS-Skalierungsparameter (T8 = tiered 8 levels). Schlüssel-Rechtschreibung scailing stimmt mit Code überein
storage.table.compaction.strategy.ucs.min_sstable_size128MiBUCS minimale sstable-Größe (Code-Fallback 100MiB)
storage.table.compaction.strategy.ucs.target_sstable_size512MiBUCS Ziel-sstable-Größe
storage.table.compaction.strategy.ucs.base_shard_count8UCS Basis-Shard-Anzahl
storage.table.compaction.strategy.ucs.max_sstables_to_compact6Maximale Anzahl von sstables pro Compaction
storage.table.compaction.strategy.ucs.sstable_growth0.7UCS sstable-Steigerungsrate

Kompression / Abfrage-Limit / Backup / Data Gateway​

PropertyStandardwertErsetzungBeschreibung
storage.compresion.zstd.level3—zstd Kompressionsstufe (1~22) — ⚠️ Tippfehler-Schlüssel, siehe unten
storage.tag.point.select.limit.size1000000—Maximale Zeilenanzahl bei Select eines einzelnen Tag-Points
storage.doamin.model.changed.to.metastore.backuptrue—Metastore-Backup bei Änderung des Domänenmodells — ⚠️ Tippfehler-Schlüssel + kein lesender Code vorhanden
data.gateway.protocolhttp${PP_DATA_GATEWAY_PROTOCOL:http}Data Gateway Protokoll
data.gateway.host127.0.0.1${PP_DATA_GATEWAY_HOST:127.0.0.1}Data Gateway Host (Voraussetzung: lokale Koexistenz)
data.gateway.port5500${PP_DATA_GATEWAY_CONNECT_PORT:5500}Data Gateway Port (Code-Fallback 5501)
data.gateway.api.key—${PP_DATA_GATEWAY_API_KEY}Data Gateway API-Key

⚠️ Tippfehler-Schlüssel — Änderungen werden ignoriert​

Die folgenden 3 Schlüssel, die tatsächlich in der Vorlage existieren, weichen in der Schreibweise von dem ab, was der Code liest. Wenn ein Administrator die Werte in diesen Zeilen ändert, wird dies stillschweigend ignoriert und der Standardwert des Codes angewendet.

Schlüssel in Vorlage (Tippfehler)Schlüssel, den Code tatsächlich liestCode-StandardwertLeseposition
storage.compresion.zstd.levelstorage.compression.zstd.level3StorageConfig → CassandraCreateDAO
storage.internal.metastore.point.retation.daysstorage.internal.metastore.point.retention.days10StorageConfig → PointDAO
storage.doamin.model.changed.to.metastore.backupKeiner (kein lesender Code auch bei korrekter Schreibweise)——

Um Werte tatsächlich zu ändern, fügen Sie den Schlüssel in der Schreibweise des Codes zur selben Datei hinzu. Um beispielsweise die zstd-Stufe auf 6 zu erhöhen, muss storage.compression.zstd.level=6 eingefügt werden (nicht die Tippfehler-Zeile korrigieren, sondern eine Zeile mit korrekter Schreibweise hinzufügen). Die Tippfehler-Zeilen können ungestört bleiben, aber die Korrektur der Vorlage selbst ist die grundlegende Lösung.

Es gibt keinen Code, der storage.doamin.model.changed.to.metastore.backup in irgendeiner Schreibweise liest. Backups bei Änderungen des Domänenmodells werden nicht durch diesen Schlüssel, sondern durch MetastoreBackupDeployer (Cron 0 0 12 1 1/1 ? *, monatlich am 1. um 12:00) übernommen — siehe Scheduler-Architektur.

Storage-Schlüssel, die nicht in der Vorlage stehen, aber vom Code gelesen werden​

PropertyCode-StandardwertBeschreibung
storage.compression.zstd.typeZstdCompressorName der Kompressor-Klasse

Storage-Vorlagenschlüssel ohne lesenden Code (Änderungen wirkungslos)​

storage.durable_writes · storage.asset.data.row.cache.size · storage.tag.point.row.cache.size · storage.table.compaction.strategy.twcs.window_size · storage.table.compaction.strategy.twcs.window_unit (+ die 3 oben genannten Tippfehler-Schlüssel)

Die beiden TWCS-bezogenen Schlüssel steuern die Fenstergröße/Einheit nicht, selbst wenn sie in storage.table.compaction.strategy=TWCS geändert werden.


plantpulse-mq.properties​

Pfad: plantpulse-server/config/plantpulse-mq.properties · Vorlage: template/plantpulse-mq.properties

Verwaltet Broker-Verbindungen für Kafka / MQTT sowie DDS-Veröffentlichungstopics. Die SSOT auf Codeseite sind MqConfig (Verbindung) und UNSTopicDefaults (Topics).

Broker-Verbindung​

PropertyStandardwertErsetzungBeschreibung
mq.host—${PP_KAFKA_HOST}Broker-Host (gemeinsam für Kafka/MQTT)
mq.user—${PP_MQ_USER}Broker-Administrationskonto
mq.password—${PP_MQ_PASSWORD}Broker-Passwort
mq.kafka.port9092${PP_KAFKA_PORT:9092}Kafka-Port
mq.kafka.security.protocolSASL_PLAINTEXT—Kafka-Sicherheitsprotokoll
mq.ssl.truststore.location/var/security/plantpulse/master/master.truststore.p12—Messaging-TLS Truststore (MQTT + optional Kafka TLS)
mq.ssl.truststore.passwordkopens123!${PP_TLS_TRUSTSTORE_PASSWORD:kopens123!}Truststore-Passwort
mq.ssl.truststore.typePKCS12—Truststore-Typ
mq.ssl.endpoint.identification.algorithm(Leerwert)—Algorithmus zur Hostnamenvalidierung (Leerwert = keine Validierung)
mq.mqtt.port—${PP_MQTT_TLS_PORT}MQTT-Verbindungsport
mq.mqtt.ssl.enabledtrue—MQTT-TLS Verwendung

MqConfig liest neben den obigen Schlüsseln auch Kafka-spezifische Truststore-Overrides mq.kafka.ssl.truststore.location / .password / .type sowie mq.kafka.ssl.endpoint.identification.algorithm (nicht in der Vorlage; falls nicht vorhanden, wird mq.ssl.* verwendet).

DDS-Topics​

14 Kafka-Arten(mq.dds.kafka.topic.*) + 14 MQTT UNS-Arten(mq.dds.mqtt.topic.*) + 2 SparkplugB-Arten(mq.dds.mqtt.sparkplugb.*).

Die Gesamtheit aller Schlüssel und Standardwerte ist unter Messaging-Architektur → DDS-Veröffentlichungstopics dokumentiert. Topic-Werte sind Wire-Contracts für Kafka/MQTT und werden durch UNSTopicDefaultsContractTest als Literale fixiert, daher sind eigenmächtige Änderungen untersagt.

${PP_TOPIC_PREFIX} bestimmt gleichzeitig das Präfix der Kafka-Topics(pp-), das Root der MQTT UNS-Pfade(pp/) und die SparkplugB Gruppen-ID.


Mail-Konfiguration (pp.mm_config)​

Original: PostgreSQL pp.mm_config · Schlüssel-Original: plantpulse.core.config.MailConfigKeys. Lesende Seite: SMTPMailSender.loadMailConfig().

🔴 Die Umgebungsvariablen PP_MAIL_* sind ebenfalls funktionslos

Wie bei der AI wurden die Ersetzungsschichten für plantpulse-mail.properties und ${PP_MAIL_*} am 17.09. bis 18.09.2026 entfernt. Übermittlungen per Sidecar oder docker run -e werden stillschweigend ignoriert. Werte müssen über den Konfigurationsbildschirm(/config/index) der Konsole oder die Tabelle pp.mm_config eingegeben werden.

KonfigurationsschlüsselStandardwertBeschreibung
MAIL_SEND_ENABLEDfalseMaster-Versand-Gate. Wenn deaktiviert, wird der SMTP-Versand ohne Verbindung übersprungen und nur ein WARN protokolliert
MAIL_SMTP_HOSTsmtp-relay.brevo.comSMTP-Relay-Adresse
MAIL_SMTP_PORT587587 = STARTTLS, 465 = implizites TLS (zusammen mit MAIL_SMTP_SSL_ENABLE)
MAIL_SMTP_AUTHtrueSMTP-Login aktiviert. Wenn aktiv, aber MAIL_SMTP_USER ist leer, erfolgt kein Login
MAIL_SMTP_USER(Leerwert)SMTP-Konto. Kann vom Relay vergebenen Namen abweichen und somit anders als die Absenderadresse sein. Kann leer gespeichert werden
🔑 MAIL_SMTP_PASSWORD(Leerwert)SMTP-Passwort oder API-Key. Bei einem Login-Relay wird die Authentifizierung abgelehnt, wenn dies leer ist
MAIL_SMTP_STARTTLS_ENABLEtrueAufwertung auf STARTTLS bei Port 587
MAIL_SMTP_SSL_ENABLEfalseDirekte TLS-Verbindung wie bei Port 465. In diesem Fall wird starttls deaktiviert
MAIL_SMTP_CONNECTIONTIMEOUT10000Verbindungs-Timeout (ms). Ohne Angabe ist der JavaMail-Standard «unendliches Warten»
MAIL_SMTP_TIMEOUT10000Lese-Timeout (ms). 〃
MAIL_SMTP_WRITETIMEOUT10000Schreib-Timeout (ms). 〃
MAIL_FROM(Leerwert)Absenderadresse. Wenn leer, wird MAIL_SMTP_USER verwendet; Relay-Kontonamen sind oft keine gültigen Adressen und könnten vom Empfänger abgelehnt werden — bitte tatsächliche Adresse angeben
sms.sender.classplantpulse.core.service.support.alarm.sms.DefaultSMSSenderFQN des SMS-Versender-Implementierers. Bei Angabe einer nicht existierenden Klasse wird auf die Standardimplementierung zurückgefallen

TLS wird nur in den Versionen 1.3 und 1.2 verwendet, wobei der Name des Serverzertifikats geprüft wird.

Standardwerte enthalten keine SMTP-Zugangsdaten mehr

Die Standardwerte von MAIL_SMTP_USER · MAIL_SMTP_PASSWORD sind leere Werte. Da MAIL_SEND_ENABLED der Standard für false ist, wird kein Versand versucht, bis der Operator dies aktiviert.

Versand über Gmail SMTP-Relay​

Das SMTP-Relay von Google Workspace(smtp-relay.gmail.com) kann per IP-Adresse des sendenden Servers autorisiert werden. In diesem Fall ist kein Konto erforderlich, und der Login wird deaktiviert. Registrieren Sie zuerst die ausgehende IP dieses Servers in den SMTP-Relay-Einstellungen der Google Administrationskonsole.

KonfigurationsschlüsselWert
MAIL_SEND_ENABLEDtrue
MAIL_SMTP_HOSTsmtp-relay.gmail.com
MAIL_SMTP_PORT587
MAIL_SMTP_AUTHfalse
MAIL_SMTP_USER(leer)
MAIL_SMTP_STARTTLS_ENABLEtrue
MAIL_SMTP_SSL_ENABLEfalse
MAIL_FROMTatsächliche Adresse der Workspace-Domäne

Nach dem Speichern die Schaltfläche Neu anwenden im Konfigurationsbildschirm drücken.

Alarm-E-Mails​

  • Im Kopf der Mail wird das Produktlogo als CID-Inline-Bild mitgesendet. Es ist auch ohne Konsolenadresse sichtbar und wird nicht extern geladen.
  • Die Positionszeile der Mail beginnt beim Standort (Standort › Bereich › Linie › Anlage; Unternehmen werden nicht aufgeführt).
  • Der Link «Zum Alarm», PP_UI_CONSOLE_URL(<콘솔 주소>/alarm/view/<알람 번호>), wird bei Leerwert weggelassen, die Mail wird jedoch ansonsten normal versendet — Adresskonfiguration.
diagnostic.log.email wurde entfernt

Da es keinen lesenden Code mehr gab, wurde der Schlüssel aus der Tabelle entfernt (Produkttests verhindern, dass dieser Schlüssel erneut aufgenommen wird). Er ist wirkungslos, selbst wenn er irgendwo verbleibt.


AI-Konfiguration (pp.mm_config)​

Original: PostgreSQL pp.mm_config · Schlüssel-Original: plantpulse.core.config.AiConfigKeys. Lesende Seite: AiConfig(+ AiConfig.mcpSettings()).

🔴 Die Umgebungsvariablen PP_AI_* sind funktionslos

Das alte plantpulse-ai.properties wurde am 17.09.2026 gelöscht, und die Pfade zum Lesen dieser Datei sowie die ${PP_AI_*} Ersetzungsschicht wurden am 18.09.2026 ebenfalls entfernt. Die Angabe von Namen wie PP_AI_OPENAI_ENABLED via Sidecar oder docker run -e wird stillschweigend ignoriert — es erfolgt weder eine Fehlermeldung noch eine Warnung.

Der Grund, warum das Produkt diese Namen entfernt hat, anstatt sie «nur zur Sicherheit» zu behalten, ist, dass Namen, die vorhanden sind, aber ignoriert werden, schlimmer sind als nicht existierende Namen. Sie erwecken den Anschein, der Server sei konfiguriert, obwohl er es nicht ist.

Es gibt nur zwei Wege zur Werteingabe — über den Konfigurationsbildschirm der Konsole(/env) oder durch direkte Änderung der Tabelle pp.mm_config. Schlüssel ohne Zeilen werden mit den Standardwerten der folgenden Tabelle gelesen; beim Einfügen eines Wertes wird die Zeile erstellt.

LLM-Gateway​

PropertyStandardwertBeschreibung
ai.llm.enabledfalseGlobaler AI-Schalter. Wenn deaktiviert, sind AI-Bildschirme und Endpunkte geschlossen
ai.llm.base.urlhttps://api.openai.comOpenAI-kompatibles Gateway (LiteLLM/vLLM). Kein / am Ende anfügen
ai.llm.chat.path/v1/chat/completionsNur ändern, wenn das Gateway einen anderen Pfad verwendet
ai.llm.responses.path/v1/responses〃
🔑 ai.llm.api.key(Leerwert)Gateway-Key. Wenn leer, wird der Aufruf mit 401 abgelehnt
ai.llm.modelgpt-5-miniVom Gateway exponierter Modellname. Bei Änderung von base.url muss auch dieser Wert geändert werden
ai.llm.timeout.ms60000LLM-Aufruf-Timeout (ms)
ai.llm.max.output.tokens4000Maximale Tokenanzahl der Antwort
ai.llm.temperature-1Bei negativen Werten wird die Anfrage komplett weggelassen, um den Modellstandardwert zu nutzen
Der alte Name ai.openai.* wird nicht mehr gelesen

Das Präfix wurde zu ai.llm. geändert. Selbst wenn in pp.mm_config noch Zeilen für ai.openai.base.url vorhanden sind, wird mangels lesendem Code der Standardwert(https://api.openai.com) verwendet — dies führt dazu, dass ein konfiguriertes Gateway ignoriert wird und die Anfrage fehlerhaft an OpenAI geht. Überprüfen Sie diese Zeilen nach einem Upgrade.

Warum ist ai.llm.temperature standardmäßig negativ

Die gpt-5 Serie unterstützt keine Temperature-Werte; das Senden von Werten außer 1 führt zu 400 Unsupported value. Daher wird ein negativer Wert als «Nicht senden» definiert. Erhöhen Sie diesen Wert nur auf 0 oder mehr, wenn Sie andere Modelle hinter LiteLLM/vLLM verwenden.

Funktionsschalter​

🔴 Die Standardwerte wurden am 16.09.2026 geändert. Die einzige verbleibende AI-Funktion im Interface ist Chat, alle anderen wurden vom Produkt deaktiviert. Durch Zurücksetzen der Werte auf true kehren die Funktionen zurück, aber diese Bildschirme sind für diese Version nicht validiert.

PropertyStandardwertBeschreibung
ai.chat.enabledtrueAI-Chat-Konsole — Dies ist die einzige verbleibende AI-Funktion im Interface
ai.chat.history.ttl.days90Chat-Historienaufbewahrung (Tage). Wird als Cassandra TTL angewendet und wirkt sich nach einem Neustart ab «neuen» Nachrichten aus
ai.alarm.rca.enabledfalseAlarm RCA — Bei Aktivierung wird die AI-Ursachenanalyse in den Alarmdetails angezeigt
ai.alarm.eql.enabledfalseAlarm EQL-Assistent — Bei Aktivierung erscheint eine Entwurfs-Schaltfläche im Alarm-Konfigurationsformular
ai.uns.topic.enabledfalseUNS-Topic-Beschreibung — Bei Aktivierung wird im UNS-Baum ein Beschreibungs-Panel angezeigt
ai.result.audit.enabledfalseAI-Ergebnisaudit — Interne RCA-Komponente ohne Interface. Bei Aktivierung von RCA ebenfalls aktivieren
ai.similar.incident.enabledfalseErfassung ähnlicher Störungsnachweise — 〃
ai.similar.incident.max.items5Maximale Anzahl ähnlicher Störungen als Nachweis
ai.similar.incident.min.score40Mindestpunktzahl zur Anerkennung als ähnliche Störung
6 im August 2026 entfernte Schlüssel

3 Schlüssel aus ai.diagnostic.summary.* (AI-Zusammenfassung von Diagnoselogs) und 3 Schlüssel aus ai.operations.report.* (AI-Betriebsbericht) wurden am 25.08.2026 aus dem Produkt entfernt. Da Interface, JS und Controller ebenfalls entfernt wurden, führt eine Änderung der Werte nicht zur Wiederbelebung der Funktion. Verbleibende Einträge sind harmlos, da kein Code sie liest.

MCP​

🔴 MCP ist «unabhängig» von ai.llm.enabled. Da es für externe Clients und nicht für das Interface gedacht ist, bleibt /api/v5/mcp auch dann geöffnet, wenn das Gateway deaktiviert ist. Details unter MCP-Server.

PropertyStandardwertBeschreibung
AI_MCP_ENABLEDtrueFalls false, antwortet /api/v5/mcp mit 404
AI_MCP_ALLOWED_ORIGINS(Leerwert)Browser-Origin-Whitelist (kommagetrennt). Wenn leer, werden alle Browser-Anfragen abgelehnt und nur native Clients zugelassen
AI_MCP_TREE_MAX_NODES2000Limit für Antwortknoten des Baums — Wert ist abhängig vom Kontextfenster des Modells; bei größeren Modellen erhöhen
AI_MCP_TREE_DEFAULT_DEPTH2Standardtiefe der Baumabfrage
AI_MCP_TREE_MAX_NODE_TAGS100Limit der Tags pro Knoten
AI_MCP_TREE_ONTOLOGY_MAX_CHARS200000Limit der Zeichenzahl der Ontologie-Antwort
AI_MCP_TREE_ONTOLOGY_DEFAULT_DEPTH3Eine Stufe tiefer als die Standardtiefe des Baums — muss bis zu den Anlagenknoten mit Tag-Anzahl reichen, damit die Frage «Wie viele Tags hat diese Anlage» mit einem Standardwert beantwortet werden kann
AI_MCP_TREE_ONTOLOGY_MAX_TAGS500Gesamtbudget für Tag-Zeilen der Ontologie-Antwort (separat vom Knotenlimit). Ein Slim-Tag benötigt ca. 85B; eine vollständige Seite würde 33~56% des Kontextfensters belegen

Weitere Vorlagen​

In template/ befinden sich neben den oben genannten 5 Arten weitere Applikations- und Infrastruktur-Vorlagen. Das Original des Pfad-Mappings ist ConfigTemplates.java.

VorlageBereitstellungspfadVerwendungszweck
plantpulse-batch.properties/plantpulse-batch/config/Batch (Zeitreihen-Sync/Aggregation)
plantpulse-cep.properties/plantpulse-cep/config/CEP-Engine
plantpulse-jdbc.properties/plantpulse-data-gateway/config/Integrierte JDBC-Konfiguration
plantpulse-data-gateway.properties/plantpulse-data-gateway/config/Data Gateway Betrieb
plantpulse-warehouse.properties/plantpulse-warehouse/config/Aster TSDB → Iceberg(S3) Archiv
plantpulse-datalake-admin-api.properties/plantpulse-datalake-admin-api/config/Administrationskonsolen-API · JMX-Erfassung
plantpulse-plugin-opcua.properties/plantpulse-plugin/opc-ua/config/OPC UA Server Plugin
plantpulse-plugin-aas.properties/plantpulse-plugin/aasx-server/config/AAS V3 (aasx-server) Plugin
kafka.properties/plantpulse-messaging/kafka/config/kafka.propertiesKafka(KRaft) Broker
kafka-jaas.conf/plantpulse-messaging/kafka/config/jaas.confKafka JAAS
hivemq.xml/plantpulse-messaging/mqtt/conf/config.xmlHiveMQ Broker
plantpulse-mq-auth.properties/plantpulse-messaging/mqtt/conf/auth.propertiesHiveMQ Authentifizierungsquelle
hive-auth.properties/plantpulse-analytics/spark/conf/Hive/Analyse-Konten Authentifizierungsquelle
plantpulse-timeseries-engine.conf/plantpulse-timeseries/engine/conf/ (2 Stellen)TSE
valkey.conf · postgresql.conf · pg_hba.conf · cassandra.yaml · jvm-server.options/plantpulse-storage/...Storage
spark-env.sh · spark-defaults.conf · hive-site.xml · kyuubi-defaults.conf · gravitino-iceberg-rest-server.conf/plantpulse-analytics/...Analyse
workflow.yaml · application.yaml/plantpulse-workflow/...Temporal / Kestra

plantpulse-websocket.properties existiert nicht. Es gibt keine Konfigurationsdateien für WebSocket/STOMP. template/cluster/ ist ein Override nur für Worker-Nodes — bei Änderungen an der Master-Vorlage muss dies hier ebenfalls synchronisiert werden.

plantpulse-batch.properties​

Besteht aus Verbindungspropen (Platform/Metastore/Cache/TSE/Kafka/Aster TSDB/Spark) und Batch-Betriebseinstellungen. Achtung: Verbindungsschlüssel weichen von storage/jdbc ab — Bsp: Aster TSDB nutzt storage.db.host / storage.db.port / storage.db.keyspace (Server nutzt storage.host / storage.port / storage.keyspace).

PropertyStandardwertBeschreibung
platform.host${PP_MASTER_IP}Platform(server-web) Host
mq.port9092Kafka-Port (Literal — keine Ersetzung)
kafka.topicpp-batchBatch-Input-Topic
kafka.group.idPP-BATCH-GROUPBatch-Consumer-Gruppe
batch.timer_schedule_delay5000Batch-Timer-Zyklus (ms)
batch.thread_pool_batch_thread_size4Anzahl der Batch-Worker-Threads
batch.buffer_drain_limit_size10000Maximale Anzahl an Einträgen, die einmalig geleert werden
batch.sync.inmemory.enabledfalseIn-Memory Synchronisation
batch.sync.inmemory.ttl.minute10In-Memory Synchronisation TTL (Minuten)
batch.sync.tse.enabledtrueVerteilung an TSE
batch.sync.external.db.enabledfalseExterne DB Synchronisation
external.db.nameTIMESCALEDBExterner DB-Typ. INFLUXDB/QUESTDB Blöcke sind in der Vorlage als Kommentare vorhanden
analytics.urljdbc:spark://${PP_SPARK_HOST}:${PP_KYUUBI_PORT}/defaultSpark Thrift JDBC

plantpulse-cep.properties​

PropertyStandardwertBeschreibung
cep.backendasterZu bootendes Backend (aster · flink). Andere Werte führen zu Boot-Fehler — Backends
cep.aster.state.enabledtrueAster CEP Regelstatus (Fenster · Aggregation · laufende Muster) in cache.* Redis bewahren. Schlüssel: PP:CEP:ASTER-STATE:<문장>
cep.aster.state.snapshot_interval_ms60000Snapshot-Zyklus — maximale Statusverlust bei Crash. Bei normalem Stopp wird ein letzter Snapshot vor dem Herunterfahren erstellt
cep.async.core_pool_size32Asynchroner Core-Pool
cep.async.max_pool_size256Asynchroner Maximal-Pool
cep.async.queue_capacity50000Asynchrone Warteschlange
cep.async.keep_alive_seconds60Thread Keep-Alive
cep.async.shutdown_timeout_seconds30Graceful Shutdown Wartezeit
cep.consumer.thread_count16Consumer-Thread
cep.stream.shard_count16Anzahl der Stream-Shards
cep.stream.drain_limit_size1000Drain-Limit
cep.stream.drain_warn_ms1000Drain-Warnung (ms)
cep.monitor.initial_delay_seconds5Monitor Erstverzögerung
cep.monitor.interval_seconds1Monitor-Zyklus
cep.monitor.store_interval_seconds60Aster TSDB Speicherzyklus für Metriken
cep.api.key${PP_CEP_API_KEY}EQL-Management-Endpunkt Authentifizierung (X-API-Key)
cep.api.max_eql_text_length100000Maximale Länge des EQL-Textes (DoS-Schutz)
cep.storage.request_timeout_seconds10Aster TSDB Anfrage-Timeout
cep.storage.connect_max_retries3Verbindungs-Retry
cep.storage.ttl_seconds864000Metrik TTL (Sekunden, 10 Tage)
cep.stream.pending_idle_threshold_ms60000Pending-Idle-Schwellenwert
cep.stream.cleaner_initial_delay_ms60000Cleaner Erstverzögerung
cep.stream.cleaner_interval_ms10000Cleaner-Zyklus
cep.stream.max_clean_duration_ms30000Maximale Dauer der Reinigung
cep.stream.cleaner_max_claim_count5000Maximale Anzahl an Claims
cep.stream.ack_chunk_size500ACK-Chunk-Größe
cep.stream.max_deliveries3Ereignisse werden erst nach dieser Anzahl an Zustellversuchen in die Dead Letter Queue verschoben
cep.stream.dead_letter.retention_ms86400000Dead-Letter-Aufbewahrungsdauer (24h)
cep.stream.dead_letter.max_bytes268435456Dead-Letter Byte-Budget (256 MiB, Summe aller Shards). Bei Überschreitung werden pro Shard die ältesten Daten zuerst gelöscht

plantpulse-jdbc.properties​

Integrierte Verbindungskonfiguration für externe JDBC-Clients (SQL-Modul · Data Gateway). Präfix ist jdbc.<tech> (postgres/cassandra/spark/tse).

PropertyWertBeschreibung
jdbc.postgres.driverorg.postgresql.DriverMETA / PQL
jdbc.postgres.urljdbc:postgresql://${PP_POSTGRES_HOST}:${PP_POSTGRES_PORT}/${PP_DB_NAME}?characterEncoding=UTF-8
jdbc.cassandra.driverplantpulse.cassandra.jdbc.CassandraDriverOLTP Zeitreihe(CQL). Treiberwert dient der Konfigurationskonsistenz (funktional ungenutzt)
jdbc.cassandra.urljdbc:cassandra://${PP_CASSANDRA_HOST}:${PP_CASSANDRA_PORT}/${PP_SCHEME}
jdbc.tse.driverplantpulse.timeseries.tql.TQLDriverOTAP / TQL
jdbc.tse.urljdbc:ts://${PP_TSE_HOST}:${PP_TSE_PORT}/${PP_SCHEME}⚠️ Fixiert auf plain http(ts/7800)
jdbc.spark.driverplantpulse.spark.jdbc.SparkSQLDriverOLAP Analyse
jdbc.spark.urljdbc:spark://${PP_SPARK_HOST}:${PP_KYUUBI_PORT}/default/${PP_SCHEME}
data.gateway.api.key${PP_DATA_GATEWAY_API_KEY}Für JDBC-Aufruf-Authentifizierung

⚠️ Ändern Sie jdbc.tse.url nicht in https(tss/7801). Der TQL JDBC-Treiber verwendet den Plaintext TSE-Listener (7800). TSE-Clients sind global auf Plaintext http/7800 voreingestellt (2026-08, env.sh TSE-Abschnitt). Eine Einstellung auf tss/7801 führt zu JDBC-Verbindungsfehlern → Data-Gateway Boot-Fehler → alle /api/v1/* geben 404 aus → Analytics-Katalog ergibt 404. Daher ist dies auf ts/PP_TSE_PORT fixiert.

jdbc.spark.username ist das Analyse-Spezialkonto ${PP_ANALYTICS_USER}. Es ist vom internen Metastore-Konto des Kyuubi(PP_HIVE_*) getrennt. Als optionale Schlüssel können jdbc.<tech>.pool.initial|min|max (postgres/spark/tse) und jdbc.<tech>.query.timeout|fetch-size verwendet werden (Gesamtreferenz plantpulse-jdbc/docs/configuration.md). jdbc.cassandra.local-datacenter ist in der Vorlage auskommentiert und beträgt bei Nichtkonfiguration datacenter1.

plantpulse-data-gateway.properties​

PropertyStandardwertBeschreibung
data.gateway.api.key${PP_DATA_GATEWAY_API_KEY:ADFA-URDV-QWED-1234}API-Authentifizierungsschlüssel (Erforderlich). Dev-Standardwert muss bei Auslieferung ersetzt werden
data.gateway.rate.limit1000Maximale Anfragen pro Sekunde (basiert auf IP + API-Key)
data.gateway.slow.query.ms10000Schwellenwert für Warnung bei langsamer Abfrage (ms)
data.gateway.slow.update.ms2000Schwellenwert für Warnung bei langsamer Aktualisierung (ms)
data.gateway.async.timeout.ms60000Asynchroner Timeout (ms)

plantpulse-datalake-admin-api.properties​

Sammlung von JMX/Management-Endpunkten der Dienste basierend auf einem Single-Node(type=MASTER). Dies ist die einzige Datei, die Unterstriche(_) statt Punkte(.) in den Schlüsseln verwendet.

PropertyStandardwertBeschreibung
typeMASTERSingle-Node oder Cluster-Master
db_typeCASSANDRATyp der zu überwachenden DB
master / host${PP_MASTER_IP} / ${PP_HOST_IP}Master / Eigener Host
db_host · db_port · db_keyspace · db_username · db_password · db_replication_factor${PP_CASSANDRA_*} · 9042 · ${PP_SCHEME} · 1Aster TSDB Verbindung
tse_host · tse_port · tse_protocol · tse_username · tse_password${PP_TSE_*} · 7801 · https · tse · tse123!TSE Verbindung (Metrik-Laden)
kafka_jmx_uriservice:jmx:rmi:///jndi/rmi://${PP_KAFKA_HOST}:7299/jmxrmiKafka JMX
mqtt_jmx_uri...://${PP_MQTT_HOST}:7279/jmxrmiHiveMQ JMX
cep_jmx_uri...://${PP_HOST_IP}:6499/jmxrmiCEP JMX
datagateway_jmx_uri...://${PP_HOST_IP}:7499/jmxrmiData Gateway JMX
sql_jmx_uri...://${PP_HOST_IP}:7599/jmxrmiSQL JMX
tse_jmx_uri...://${PP_HOST_IP}:7899/jmxrmiTSE JMX
cassandra_jmx_uri...://${PP_CASSANDRA_HOST}:7199/jmxrmiAster TSDB JMX
spark_jmx_uri...://${PP_SPARK_HOST}:10010/jmxrmiSpark JMX
redis_jmx_uriredis://${PP_REDIS_HOST}:${PP_REDIS_PORT}?password=...Valkey Verbindungs-URI
redis_ssl_truststore_location / _password / _type / redis_ssl_endpoint_identification_enabledp12 · ${PP_TLS_TRUSTSTORE_PASSWORD:kopens123!} · PKCS12 · falseValkey TLS
postgres_jmx_urijdbc:postgresql://.../${PP_DB_NAME}?user=...&password=...PostgreSQL Verbindungs-URI

JMX-Port-Zusammenfassung: HiveMQ 7279, Kafka 7299, CEP 6499, Data Gateway 7499, SQL 7599, TSE 7899, Aster TSDB 7199, Spark 10010.

plantpulse-warehouse.properties​

Aster TSDB → Iceberg(S3) Archiv-Batch. In dieser Datei sind die Schlüssel in UPPER_SNAKE_CASE(UPPER_SNAKE) verfasst.

GruppeHauptschlüsselStandardwert
TemporalTEMPORAL_SERVER · TEMPORAL_TASK_QUEUE · TEMPORAL_WORKFLOW_ID · TEMPORAL_SCHEDULE_ID · OPTIMIZER_SCHEDULE_ID · OPTIMIZER_WORKFLOW_ID${PP_TEMPORAL_HOST}:${PP_TEMPORAL_PORT} · PP-S3-QUEUE · PP-S3-ARCHIVER-DAILY-WORKFLOW · PP-S3-ARCHIVER-DAILY · PP-S3-OPTIMIZER-WEEKLY · PP-S3-OPTIMIZER-WEEKLY-WORKFLOW
ZeitplanDAILY_HOUR · DAILY_MINUTE · OPTIMIZER_DAY_OF_WEEK · OPTIMIZER_HOUR · OPTIMIZER_MINUTE · TIMEZONE2 · 20 · 0(Sonntag) · 3 · 0 · ${PP_TZ}
ModusARCHIVER_MODESHELL (oder KESTRA)
KestraKESTRA_SERVER · KESTRA_NAMESPACE · KESTRA_TASK_ID · KESTRA_USER · KESTRA_PASS${PP_KESTRA_HOST}:${PP_KESTRA_PORT} · plantpulse · plantpulse-daily-s3-archiver · admin@plantpulse.io · (Leerwert)
SkriptS3_SCRIPT_DIR · S3_SCRIPT_NAME · S3_OPTIMIZER_SCRIPT_NAME${PP_HOME}/plantpulse-warehouse/s3 · archive.sh · optimize.sh
SparkSPARK_APP_NAME · SPARK_MASTER · SPARK_JAR_PATH · SPARK_DRIVER_MEMORY · SPARK_EXECUTOR_MEMORY · SPARK_EXECUTOR_CORES · SPARK_NUM_EXECUTORS · ARCHIVER_PARALLELISM · SPARK_CHECKPOINT_DIRPP-SPARK-S3-LAKEHOUSE · local[*] · .../plantpulse-warehouse-s3.jar · 2g · 4g · 4 · 3 · 4 · s3a://${PP_S3_BUCKET:-plantpulse}/spark-checkpoint/
Quelle/ZielCASSANDRA_CATALOG · CASSANDRA_DATABASE · S3_BUCKET · ICEBERG_CATALOG · ICEBERG_DATABASEcassandra · ${PP_SCHEME:pp} · ${PP_S3_BUCKET:-plantpulse} · spark_catalog · ${PP_SCHEME:pp}
OptimierungSNAPSHOT_RETENTION_DAYS · OPTIMIZER_MIN_INPUT_FILES · OPTIMIZER_TARGET_FILE_SIZE_BYTES3 · 10 · 134217728 (128MB)
TimeoutARCHIVER_WF_EXECUTION/RUN/TASK_TIMEOUT_HOURS · OPTIMIZER_WF_EXECUTION/RUN/TASK_TIMEOUT_HOURS · ACTIVITY_MAX_ATTEMPTS · ACTIVITY_TIMEOUT_HOURS · OPTIMIZER_ACTIVITY_TIMEOUT_HOURS · SCRIPT_TIMEOUT_SECONDS · OPTIMIZER_TIMEOUT_SECONDS · HEARTBEAT_INTERVAL_SECONDS12/12/12 · 8/7/12 · 3 · 12 · 8 · 21600(6h) · 25200(7h) · 60
WebWEB_SERVER_PORT9600

Messaging / Authentifizierungsquellen Vorlage​

plantpulse-mqtt.properties — HiveMQ Broker Konfiguration.

PropertyStandardwert
mqtt.host · mqtt.user · mqtt.password${PP_MQTT_HOST} · ${PP_MQ_USER} · ${PP_MQ_PASSWORD}
mqtt.port · mqtt.ssl.enabled${PP_MQTT_TLS_PORT} · true
mqtt.websocket_port8888
mqtt.data_dir/data1/pp-data/hivemq

plantpulse-mq-auth.properties — Authentifizierungsquelle, auf die die HiveMQ Security Extension(FileAuthAuthenticator) via Umgebungsvariable HIVEMQ_AUTH_FILE verweist. Schlüssel sind nur mqtt.user / mqtt.password.

hive-auth.properties — Wird von plantpulse-hive-auth(PasswordAuthenticator) gelesen. Nutzt Umgebungsvariable HIVE_AUTH_FILE oder $PP_HOME/plantpulse-analytics/spark/conf/hive-auth.properties. Besonderheit: Der Schlüsselname selbst ist ein Placeholder.

${PP_HIVE_USER}=${PP_HIVE_PASSWORD}
${PP_ANALYTICS_USER}=${PP_ANALYTICS_PASSWORD}

kafka.properties — Kafka Broker im KRaft-Modus. Hauptwerte: process.roles=broker,controller, node.id=1, num.partitions=4, 3 Listener-Arten(SASL_PLAINTEXT/CONTROLLER/SASL_SSL), sasl.enabled.mechanisms=PLAIN, super.users=User:admin, allow.everyone.if.no.acl.found=false, log.dirs=${PP_DATA_DIR}/kafka/kraft_combined_logs, log.retention.ms=3600000(1h), message.max.bytes=157286400, default.replication.factor=1, auto.create.topics.enable=true.

⚠️ log.retention.ms=3600000 = 1 Stunde. Kafka dient als Puffer; die Persistenz wird von Aster TSDB/TSE übernommen. Wenn ein Consumer länger als 1 Stunde stoppt, gehen Daten verloren.

Plugin-Vorlagen​

plantpulse-plugin-opcua.properties — PostgreSQL / Aster TSDB / Valkey / Kafka Verbindung + OPC UA Server Endpunkt.

PropertyStandardwertBeschreibung
kafka.topicpp-tag-point⚠️ Literal — Keine ${PP_TOPIC_PREFIX} Ersetzung
kafka.thread · kafka.group.id8 · opcua-plugin-group
opc.ua.server.domain · opc.ua.server.port${PP_HOST_IP} · 8007
opc.ua.server.user · password · anonymousopcua · 설치-시-변경 · false
opc.ua.server.tcp.port · tls.port${PP_OPCUA_TCP_PORT:11004} · ${PP_OPCUA_TLS_PORT:11005}
redis.thread · redis.ssl.enabled4 · false

plantpulse-plugin-aas.properties — AAS V3 Server + Kafka-Consumption Konfiguration.

PropertyStandardwertBeschreibung
aas.v3.port${PP_AAS_V3_PORT:8090}V3 HTTP-Port
kafka.topic${PP_TOPIC_PREFIX}-tag-pointEchtzeit-Tag-Point Empfang
kafka.thread · kafka.poll.count8 · 1000
group.id · auto.offset.reset · enable.auto.commitpp-plugin-aas-server · earliest · false
session.timeout.ms · auto.commit.interval.ms30000 · 1000
plugin.message.listenerplantpulse.plugin.opcua.messaging.KafkaPluginMessageListener

Die Registry/AAS-Ports von BaSyx V2 sind keine Konfiguration, sondern im Code hartcodiert — AASServer.java unter REGISTRY_PORT=4800, AAS_PORT=4801.


Engine-Schlüssel, die nicht in der Vorlage stehen, aber vom Code gelesen werden​

EngineConfig liest auch die folgenden Schlüssel. Da sie nicht in der Vorlage(plantpulse-engine.properties) stehen, gilt normalerweise der Code-Standardwert. Zur Änderung müssen die Zeilen direkt in plantpulse-server/config/plantpulse-engine.properties hinzugefügt werden.

Edge-Zeit / Status-Polling​

PropertyCode-Standardwert
edge.clock.poll.term.sec60
edge.clock.skew.threshold.ms10000
edge.clock.rtt.max.ms2000
edge.clock.autosync.enabledtrue
edge.clock.autosync.cooldown.ms600000
edge.clock.warn.cooldown.ms600000
edge.clock.skip.warn.count5
edge.status.poll.seconds30
edge.status.poll.jitter.max.ms3000

edge.clock.poll.term.sec und edge.status.poll.seconds bestimmen die Zyklen der Scheduler-Jobs — siehe Beschränkungen im Abschnitt Edge der Scheduler-Architektur.

DDS / Eventbus / Push / Buffer​

PropertyCode-Standardwert
engine.dds.queue.size80000
engine.dds.worker.threads4
engine.dds.latency.warn.ms1000
engine.eventbus.queue.capacity65536
engine.push.threads4
engine.push.queue.size10000
engine.storage.buffer.typeKAFKA
engine.streaming.timeout.backup.queue.capacity12000000

Der Code-Standardwert für engine.dds.enabled · engine.dds.data.tag.enabled · engine.dds.data.asset.enabled ist false. Da die Vorlage dies explizit als true angibt, ist es nur in der Deployment-Version aktiviert — das Löschen dieser drei Zeilen deaktiviert das DDS stillschweigend.

Job-Threads (nicht in Vorlage aufgeführt)​

PropertyCode-Standardwert
engine.job.thread.oee10
engine.job.thread.ram5
engine.job.thread.ems5
engine.job.thread.system4
engine.job.asset.slow.threshold.ms20000

⚠️ Der Code-Standardwert für engine.job.thread.point ist 4, die Vorlage gibt jedoch 8 an (engine.job.thread.asset stimmen auf beiden Seiten mit 8 überein). Das Löschen der Vorlagenzeile halbiert den Wert.

Flow-Engine (nicht in Vorlage aufgeführt)​

PropertyCode-Standardwert
flow.engine.enabledtrue
flow.executor.parallelism64
flow.executor.queue.capacity10000
flow.executor.queue.size10000
flow.executor.poll.timeout.ms50
flow.scheduler.pool.size4
flow.timer.pool.size2
flow.jdbc.trigger.pool.size2
flow.shutdown.timeout.sec5
flow.enabled.cache.ttl.ms5000
flow.webhook.auth.enabledtrue

Alarm / ISO-Metriken / OEE​

PropertyCode-Standardwert
alarm.duplicate.check.minutes10
engine.oee.debounce.ms100
iso.oee.rolling.window.minutes10
iso.ems.rolling.window.minutes10
iso.ram.rolling.window.minutes1440

Anomalieerkennungs-Details (Asset-Point / System)​

Nur sinnvoll, wenn via engine.data.anomaly.enabled=true aktiviert.

PropertyCode-Standardwert
engine.data.anomaly.asset.point.intervalMINUTE
engine.data.anomaly.asset.point.lookback.minutes14400
engine.data.anomaly.asset.point.recent.seconds600
engine.data.anomaly.asset.point.limit2100
engine.data.anomaly.asset.point.context.length2048
engine.data.anomaly.asset.point.prediction.length96
engine.data.anomaly.asset.point.score.history60
engine.data.anomaly.asset.point.threshold.k3.5
engine.data.anomaly.asset.point.threshold.min0.80
engine.data.anomaly.asset.point.threshold.max0.98
engine.data.anomaly.asset.point.topk.request5
engine.data.anomaly.asset.point.topn.report5
engine.data.anomaly.system.lookback.minutes1440
engine.data.anomaly.system.recent.seconds60
engine.data.anomaly.system.limit2100
engine.data.anomaly.system.context.length2048
engine.data.anomaly.system.pred.length96
engine.data.anomaly.system.threshold.min0.80
engine.data.anomaly.system.topk2

Nicht existierende Konfigurationen​

Die folgenden Bezeichnungen tauchen in alten Dokumenten oder externen Quellen auf, existieren aber weder in Vorlagen noch im Code. Das Hinzufügen von Konfigurationen unter diesen Namen ist wirkungslos.

GesuchtTatsächlicher Ort
storage.postgresql.*metastore.driver / metastore.url / metastore.user / metastore.password
storage.redis.*cache.host / cache.port / cache.password / cache.ssl.*
storage.cassandra.*storage.host / storage.port / storage.keyspace / storage.user / storage.password
storage.tse.*tse.protocol / tse.host / tse.port / tse.user / tse.password
storage.ttl.realtime etc.storage.tag.point.ttl / storage.asset.data.ttl etc. pro Tabelle (TTL-Abschnitt)
storage.compression.enable / .algorithmstorage.compression.zstd.level / storage.compression.zstd.type (Vorlagenzeile ist Tippfehler — Warnung zu Tippfehler-Schlüsseln)
storage.compaction.enable / .scheduleReihe storage.table.compaction.strategy (Compaction-Abschnitt)
storage.metastore.* / storage.cache.*Keine
mq.type / mq.kafka.bootstrap.servers / mq.kafka.group.idmq.host + mq.kafka.port. Consumer-Gruppe ist kein Konfigurationswert, sondern eine Code-Konstante(PP-KAFKA-POINT-GROUP etc., Messaging-Architektur)
mail.* in DateiNur an einer Stelle pp.mm_config (Transfer am 17.09.2026, Datei gelöscht)
websocket.* / plantpulse-websocket.propertiesKeine. STOMP/WebSocket im Juli 2026 außer Betrieb genommen; Browser-Push via SSE(/push/sse) — Messaging-Architektur
scheduler.enabled / scheduler.thread.count / scheduler.misfire.* / scheduler.history.*Keine. Quartz-Konfiguration in plantpulse-server-web/src/quartz.properties (WAR Classpath) — Scheduler-Architektur
engine.ntp.enable / engine.ntp.serverengine.ntpdate.sync / engine.ntpdate.server.ip
engine.cep.enable / engine.cep.host / engine.cep.portengine.cep.server.ip / engine.cep.server.port / engine.cep.server.protocol
engine.anomaly.*engine.data.anomaly.*
engine.dds.enable / engine.dds.topic.prefixengine.dds.enabled, Topic-Präfix in PP_TOPIC_PREFIX (MQ-Vorlage)
engine.async.queue.size / engine.async.timeout / engine.pipeline.batch.size / engine.timeout.* / engine.dataflow.threads / engine.dataflow.buffer.sizeKeine
PP_STOMP_* / PP_WEBSOCKET_* env VarNicht in env.sh vorhanden

Properties mit Passwörtern​

Werte, die vor der Auslieferung zwingend ersetzt werden müssen. Dev-Standardwerte sind Plaintext-Placeholder in env.sh (oder Vorlage). Bei Betrieb/Auslieferung an Kunden durch kundenindividuelle Werte oder Docker -e VAR=... / export überschreiben.

DateiSchlüssel
plantpulse-storage.propertiesmetastore.password · cache.password · cache.ssl.truststore.password · storage.password · tse.password · data.gateway.api.key
plantpulse-engine.propertiesapi.key · flow.webhook.api.key · engine.cep.server.api.key
plantpulse-mq.propertiesmq.password · mq.ssl.truststore.password
pp.mm_config (Mail)mail.smtp.password
pp.mm_config (AI)ai.llm.api.key — Fallback für alten Namen ai.openai.* wird nicht bereitgestellt
plantpulse-cep.propertiescache.password · storage.password · cep.api.key
plantpulse-batch.propertiesmetastore.password · cache.password · tse.password · mq.password · storage.db.password · analytics.password · external.db.password
plantpulse-jdbc.propertiescache.password · jdbc.postgres.password · jdbc.cassandra.password · jdbc.tse.password · jdbc.spark.password · data.gateway.api.key
plantpulse-data-gateway.propertiesdata.gateway.api.key
plantpulse-datalake-admin-api.propertiesdb_password · tse_password · redis_jmx_uri (Passwort in URL) · redis_ssl_truststore_password · postgres_jmx_uri (Passwort in URL)
plantpulse-mqtt.properties · plantpulse-mq-auth.propertiesmqtt.password
plantpulse-plugin-opcua.propertiespostgres.password · cassandra.password · redis.password · kafka.password · opc.ua.server.password
plantpulse-plugin-aas.propertiesaas.db.password · cassandra.password · kafka.password
kafka.propertiesssl.keystore.password · ssl.key.password · ssl.truststore.password
hive-auth.propertiesGesamter Wert ist ein Passwort

API-Key-Richtlinie: PP_API_KEY · PP_DATA_GATEWAY_API_KEY · PP_FLOW_WEBHOOK_API_KEY · PP_CEP_API_KEY werden als Dev-Plaintext-Standardwert-Fallback (${VAR:-<dev-default>}) beibehalten — damit Dev/Tests ohne zusätzliche Secret-Injektion booten und deployen können. Nicht auf Hardfail(:?) ändern — dies würde dazu führen, dass restart-server.sh beim Sourcing von env.sh sofort abbricht und das Deployment fehlschlägt.

Empfohlene Maßnahmen​

Secrets werden nicht in Konfigurationsdateien geschrieben. Sie werden in einer einzigen Sidecar-Datei gesammelt und als 0600 hinterlegt.

ls -l /etc/kopens/plantpulse-platform.env # 비밀 — 0600, repo 밖
ls -l /etc/kopens/platform.node.env # 이 박스 고유 값 — 0600

# 값을 바꿀 때는 파일을 열지 말고 도구를 씁니다
cd /opt/kopens/plantpulse-platform-docker
bin/passwd.sh --list # 바꿀 수 있는 키
bin/passwd.sh PP_PG_PASSWORD # 서버 계정 변경 → 사이드카 → 재렌더 → 재시작

In die gerenderten Konfigurationsdateien fließen die fertig ersetzten Werte ein; daher dürfen diese Dateien nicht in das Repository committed werden.