Centurio Documentația sistemului
🏛️ Arhitectura de platformă 🔑 Login
🏠 Toate modurile / core_platform / IoT & Telemetrie (Industrie 4.0)
📘

IoT & Telemetrie (Industrie 4.0)

iot core_platform 🛡️ RLS Protected

IoT & Telemetrie (Industrie 4.0) — aus Code abgeleitete Prozess- und API-Dokumentation.

Fachliche Bestimmung: Plattform- und Basisinfrastruktur: IoT & Telemetrie (Industrie 4.0) — aus Code abgeleitete Prozess- und API-Dokumentation. Erfasst alle zugehörigen Geschäftsdaten, Zustandsmodelle, Automationskaskaden und Schnittstellen zur nahtlosen Einbindung in die unternehmensweiten Wertschöpfungsprozesse.

⚡ Fluxuri de lucru

Dieses Modul folgt dem standardisierten transaktionalen CRUD- und Event-Lifecycle.

⚙️ Fachprozesse & Capabilities (System-Fachlogik)

Registrierte Fachoperationen und System-Capabilities dieses Moduls zur Steuerung von Workflows, Kaskaden und KI-Agenten.

Gesamt: 9 engine: 9
Capability & Schlüssel Fachliche Bezeichnung Ausführung / Coverage Risikostufe & Freigabe Effekte & Kaskaden
IoT-Gerät mit ERP verknüpfen capability:iot.asset.bind
Op: iot.asset.bind
Intent: bind_device_to_erp
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • iot.business_binding.created
Gerätebefehl anfordern capability:iot.device.command
Op: iot.device.command
Intent: request_command
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • iot.command.requested
Gerätebefehl freigeben capability:iot.device.command.approve
Op: iot.device.command.approve
Intent: approve_command
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • iot.command.approved
  • iot.command.executed
IoT-Geräte auflisten & erkennen capability:iot.device.discover
Op: iot.device.discover
Intent: discover_devices
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: read_only
Keine Seiteneffekte deklariert
Live-Zustand & Telemetrie lesen capability:iot.device.read
Op: iot.device.read
Intent: read_device_state
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: read_only
Keine Seiteneffekte deklariert
IoT-Gerät registrieren capability:iot.device.register
Op: iot.device.register
Intent: register_device
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • iot.device.created
Telemetrie-Historie abfragen capability:iot.metric.query
Op: iot.metric.query
Intent: query_metrics
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: read_only
Keine Seiteneffekte deklariert
Telemetriedatum erfassen capability:iot.telemetry.ingest
Op: iot.telemetry.ingest
Intent: ingest_telemetry
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: business_record
  • iot.measurement.recorded
Digitalen Zwilling einsehen capability:iot.twin.inspect
Op: iot.twin.inspect
Intent: inspect_twin
Quelle: code:capability_registry
⚙️ Engine
✓ Auto Risiko: read_only
Keine Seiteneffekte deklariert

🧠 Fachprozess-Erzählung & Dual Knowledge Architektur

Synthese aus der ideologischen Blaupause (Meta-Fachlogik / Soll), der faktischen System-Implementierung (System-Fachlogik / Ist) und No-Code Customizing für KI-Consultants.

Dual Knowledge Layer
📖

Der durchgängige Businessprozess im Detail (End-to-End Fließtext-Erzählung)

Der funktionale Ablauf von IoT & Telemetrie (Industrie 4.0) in der Plattform-Architektur

Das Modul iot erbringt zentrale Infrastruktur- und Steuerungsdienste im Monolithen. Jeder Aufruf durchläuft die zweistufige Sicherheitsarchitektur: Zunächst verifiziert der Session-Guard die Identität des Benutzers, woraufhin die PostgreSQL Row-Level-Security (RLS) aktiviert wird. Dadurch ist garantiert, dass Datenzugriffe mathematisch und physisch ausschließlich auf den authentifizierten tenant_id-Kontext beschränkt bleiben.

Mutationen und administrative Aktionen werden über transaktionale Services ausgeführt. Bei zustandsverändernden Operationen schreibt das System simultan in die betriebliche Zieltabelle und in die transaktionale Outbox. Asynchrone Worker greifen diese Signale ab und kaskadieren Ereignisse an nachgelagerte Module, ohne den synchronen HTTP-Pfad zu blockieren. Jeder Zugriff wird unveränderbar im Audit-Trail protokolliert.

🏛️

Meta-Fachlogik: Ideologische Blaupause, Soll-Weltbild & Normen

Meta-Fachlogik: Sicherheits- und Plattform-Architektur

Basiert auf den Standards ISO/IEC 27001:2022 (Informationssicherheits-Managementsysteme), den BSI IT-Grundschutz-Bausteinen (APP.3.1 Webanwendungen, SYS.1.1 Allgemeiner Server) und Art. 32 DSGVO.

  • Mandantentrennung als Primärinvariante: Keine Mandantendaten dürfen jemals ohne tenant_id-Filter geladen oder mutiert werden. Das Soll-Modell verlangt die Durchsetzung auf Datenbankebene via PostgreSQL RLS.

  • Unveränderbarkeit von Sicherheitsereignissen: Protokolldateien, Logins, Berechtigungsänderungen und Konfigurationsmutationen müssen revisionssicher und schreibgeschützt festgeschrieben werden.

⚙️

Systemische Fachlogik: Faktische Umsetzung in Centurio ERP & Capabilities

Systemische Fachlogik: Die faktische Umsetzung von IoT & Telemetrie (Industrie 4.0)

In Centurio ERP wird iot als modularer Monolith-Baustein unter app.modules.iot geführt. Die Autorisierung erfolgt über die zentrale RBAC-Engine mit Berechtigungs-Prüfung gegen Rollen und Berechtigungen. Datenänderungen lösen Outbox-Events aus, die über den PostgreSQL events-Bus verteilt werden. Idempotente Requests verhindern Replay-Angriffe und versehentliche Mehrfachausführungen.

🤖

KI-Consultant Leitfaden: Customizing- & No-Code-Konzept (Soll-Ist-Synthese)

AI Solution Architect Blueprint

KI-Consultant Blueprint: Customizing & No-Code Leitfaden für IoT & Telemetrie (Industrie 4.0)

  • No-Code Datenmodell-Erweiterung: Bei Bedarf können kundenspezifische Zusatzfelder im No-Code Customizing Studio angelegt werden.

  • Workflow-Integration: Administrative Ereignisse können als Trigger in der Canvas No-Code DAG Engine genutzt werden.

  • Sicherheitsregeln: Vor kritischen Systemänderungen sind Human-in-the-Loop Freigabegates einzurichten.

📚 Operative Prozessbegriffe & Transaktionsschnittstellen

Zentrale Fachbegriffe im Prozesszusammenhang (Operatives Modell)
Mandantenisolation (RLS)
PostgreSQL Row-Level-Security zur physischen und logischen Trennung aller Kundendaten auf Datenbankebene.
Zweistufige Authentifizierung
Strikte Trennung zwischen globalem Benutzerkonto und mandantenbezogener Rollenzuweisung (RBAC).
Transaktionale Outbox
Entkoppeltes Event-Publishing zur Vermeidung von Distributed-Transaction-Inkonsistenzen.
Revisionssicherer Audit-Trail
Lückenlose Aufzeichnung aller datenverändernden Zugriffe für Compliance und Rechnungsprüfung.
📥 Eingänge & Trigger (Inputs)
  • Systemaufrufe über REST-API oder Web-Portal
  • Hintergrund-Worker und Cron-Jobs
  • Ereignisse über den Outbox-Eventbus
📤 Ausgänge & Arbeitsergebnisse (Outputs)
  • Ausführungs- und Protokolldaten
  • Audit-Events im Revisionsjournal
  • Veränderte Systemzustände
⚡ Kaskaden & Folgeprozesse (Cascades)
  • security_event -> admin_alert: Alarmierung bei verdächtigen Zugriffen
  • config_changed -> cache_invalidation: Sofortige Aktualisierung
🛡️ Nebenprozesse & Resilienz
  • Manuelle Ausnahmebehandlung durch berechtigte Sachbearbeiter
  • Revisionssichere Protokollierung im Audit-Trail
💡 No-Code Checkliste & Praxistipps
  • Rollen- und Berechtigungsstufen exakt an Mitarbeiteraufgaben anpassen
  • Sicherheitsrichtlinien für Passwörter und Sessions aktivieren

🗄️ Modele de date & câmpuri

IotBusinessBindings iot_business_bindings RLS Aktiv
11 Câmpuri / coloane

Tabelle iot_business_bindings

Feldname Tip de date Obligatoriu Schlüssel Importanța profesională
device_id UUID Ja * FK ➔ iot_devices.id Feld device_id
twin_id UUID Nein FK ➔ iot_digital_twins.id Feld twin_id
binding_type VARCHAR(32) Ja * - Feld binding_type
target_id UUID Ja * - Feld target_id
metric_filter VARCHAR(64) Nein - Feld metric_filter
is_active BOOLEAN Ja * - Feld is_active
id UUID Nein PK Feld id
tenant_id UUID Ja * FK ➔ organizations.id Feld tenant_id
created_at DATETIME Ja * - Feld created_at
updated_at DATETIME Ja * - Feld updated_at
metadata JSONB Ja * - Feld metadata
IotCommands iot_commands RLS Aktiv
24 Câmpuri / coloane

Tabelle iot_commands

Feldname Tip de date Obligatoriu Schlüssel Importanța profesională
device_id UUID Ja * FK ➔ iot_devices.id Feld device_id
command_name VARCHAR(64) Ja * - Feld command_name
payload JSONB Ja * - Feld payload
status VARCHAR(32) Ja * - Feld status
safety_critical BOOLEAN Ja * - Feld safety_critical
requested_by_type VARCHAR(32) Ja * - Feld requested_by_type
requested_by_id UUID Nein - Feld requested_by_id
approved_by UUID Nein FK ➔ users.id Feld approved_by
approved_at DATETIME Nein - Feld approved_at
executed_at DATETIME Nein - Feld executed_at
completed_at DATETIME Nein - Feld completed_at
response_payload JSONB Nein - Feld response_payload
error_message TEXT Nein - Feld error_message
correlation_id VARCHAR(128) Nein - Feld correlation_id
idempotency_key VARCHAR(128) Nein - Feld idempotency_key
id UUID Nein PK Feld id
tenant_id UUID Ja * FK ➔ organizations.id Feld tenant_id
created_at DATETIME Ja * - Feld created_at
updated_at DATETIME Ja * - Feld updated_at
created_by UUID Nein - Feld created_by
updated_by UUID Nein - Feld updated_by
source_type VARCHAR(32) Nein - Feld source_type
source_id UUID Nein - Feld source_id
metadata JSONB Ja * - Feld metadata
IotDeviceStates iot_device_states RLS Aktiv
13 Câmpuri / coloane

Tabelle iot_device_states

Feldname Tip de date Obligatoriu Schlüssel Importanța profesională
device_id UUID Ja * FK ➔ iot_devices.id Feld device_id
current_metrics JSONB Ja * - Feld current_metrics
active_alarms JSONB Ja * - Feld active_alarms
health_score NUMERIC(4, 3) Ja * - Feld health_score
operating_status VARCHAR(32) Ja * - Feld operating_status
total_operating_hours NUMERIC(12, 2) Ja * - Feld total_operating_hours
total_cycles INTEGER Ja * - Feld total_cycles
last_telemetry_at DATETIME Nein - Feld last_telemetry_at
id UUID Nein PK Feld id
tenant_id UUID Ja * FK ➔ organizations.id Feld tenant_id
created_at DATETIME Ja * - Feld created_at
updated_at DATETIME Ja * - Feld updated_at
metadata JSONB Ja * - Feld metadata
IotDeviceTypes iot_device_types RLS Aktiv
20 Câmpuri / coloane

Tabelle iot_device_types

Feldname Tip de date Obligatoriu Schlüssel Importanța profesională
code VARCHAR(64) Ja * - Feld code
name VARCHAR(255) Ja * - Feld name
category VARCHAR(32) Ja * - Feld category
protocol VARCHAR(32) Ja * - Feld protocol
vendor VARCHAR(128) Nein - Feld vendor
model_number VARCHAR(128) Nein - Feld model_number
description TEXT Nein - Feld description
profile_schema JSONB Ja * - Feld profile_schema
supported_metrics JSONB Ja * - Feld supported_metrics
supported_commands JSONB Ja * - Feld supported_commands
is_active BOOLEAN Ja * - Feld is_active
id UUID Nein PK Feld id
tenant_id UUID Ja * FK ➔ organizations.id Feld tenant_id
created_at DATETIME Ja * - Feld created_at
updated_at DATETIME Ja * - Feld updated_at
created_by UUID Nein - Feld created_by
updated_by UUID Nein - Feld updated_by
source_type VARCHAR(32) Nein - Feld source_type
source_id UUID Nein - Feld source_id
metadata JSONB Ja * - Feld metadata
IotDevices iot_devices RLS Aktiv
22 Câmpuri / coloane

Tabelle iot_devices

Feldname Tip de date Obligatoriu Schlüssel Importanța profesională
device_identifier VARCHAR(128) Ja * - Feld device_identifier
name VARCHAR(255) Ja * - Feld name
description TEXT Nein - Feld description
device_type_id UUID Ja * FK ➔ iot_device_types.id Feld device_type_id
gateway_id UUID Nein FK ➔ iot_gateways.id Feld gateway_id
connection_id UUID Nein FK ➔ integration_connections.id Feld connection_id
status VARCHAR(32) Ja * - Feld status
protocol VARCHAR(32) Ja * - Feld protocol
auth_token_hash VARCHAR(128) Nein - Feld auth_token_hash
config JSONB Ja * - Feld config
firmware_version VARCHAR(64) Nein - Feld firmware_version
last_seen_at DATETIME Nein - Feld last_seen_at
is_active BOOLEAN Ja * - Feld is_active
id UUID Nein PK Feld id
tenant_id UUID Ja * FK ➔ organizations.id Feld tenant_id
created_at DATETIME Ja * - Feld created_at
updated_at DATETIME Ja * - Feld updated_at
created_by UUID Nein - Feld created_by
updated_by UUID Nein - Feld updated_by
source_type VARCHAR(32) Nein - Feld source_type
source_id UUID Nein - Feld source_id
metadata JSONB Ja * - Feld metadata
IotDigitalTwins iot_digital_twins RLS Aktiv
23 Câmpuri / coloane

Tabelle iot_digital_twins

Feldname Tip de date Obligatoriu Schlüssel Importanța profesională
twin_type VARCHAR(32) Ja * - Feld twin_type
name VARCHAR(255) Ja * - Feld name
description TEXT Nein - Feld description
asset_id UUID Nein FK ➔ assets.id Feld asset_id
workstation_id UUID Nein FK ➔ workstations.id Feld workstation_id
location_id UUID Nein FK ➔ locations.id Feld location_id
vehicle_id UUID Nein FK ➔ vehicles.id Feld vehicle_id
health_score NUMERIC(4, 3) Ja * - Feld health_score
aggregated_status VARCHAR(32) Ja * - Feld aggregated_status
summary_state JSONB Ja * - Feld summary_state
oee_percentage NUMERIC(5, 2) Nein - Feld oee_percentage
availability_percentage NUMERIC(5, 2) Nein - Feld availability_percentage
performance_percentage NUMERIC(5, 2) Nein - Feld performance_percentage
quality_percentage NUMERIC(5, 2) Nein - Feld quality_percentage
id UUID Nein PK Feld id
tenant_id UUID Ja * FK ➔ organizations.id Feld tenant_id
created_at DATETIME Ja * - Feld created_at
updated_at DATETIME Ja * - Feld updated_at
created_by UUID Nein - Feld created_by
updated_by UUID Nein - Feld updated_by
source_type VARCHAR(32) Nein - Feld source_type
source_id UUID Nein - Feld source_id
metadata JSONB Ja * - Feld metadata
IotEvents iot_events RLS Aktiv
23 Câmpuri / coloane

Tabelle iot_events

Feldname Tip de date Obligatoriu Schlüssel Importanța profesională
device_id UUID Ja * FK ➔ iot_devices.id Feld device_id
event_type VARCHAR(64) Ja * - Feld event_type
severity VARCHAR(16) Ja * - Feld severity
title VARCHAR(255) Ja * - Feld title
description TEXT Nein - Feld description
metric_key VARCHAR(64) Nein - Feld metric_key
metric_value NUMERIC(14, 4) Nein - Feld metric_value
threshold_value NUMERIC(14, 4) Nein - Feld threshold_value
acknowledged_at DATETIME Nein - Feld acknowledged_at
acknowledged_by UUID Nein FK ➔ users.id Feld acknowledged_by
correlation_id VARCHAR(128) Nein - Feld correlation_id
idempotency_key VARCHAR(128) Nein - Feld idempotency_key
payload JSONB Ja * - Feld payload
workflow_run_id UUID Nein - Feld workflow_run_id
id UUID Nein PK Feld id
tenant_id UUID Ja * FK ➔ organizations.id Feld tenant_id
created_at DATETIME Ja * - Feld created_at
updated_at DATETIME Ja * - Feld updated_at
created_by UUID Nein - Feld created_by
updated_by UUID Nein - Feld updated_by
source_type VARCHAR(32) Nein - Feld source_type
source_id UUID Nein - Feld source_id
metadata JSONB Ja * - Feld metadata
IotGateways iot_gateways RLS Aktiv
19 Câmpuri / coloane

Tabelle iot_gateways

Feldname Tip de date Obligatoriu Schlüssel Importanța profesională
identifier VARCHAR(128) Ja * - Feld identifier
name VARCHAR(255) Ja * - Feld name
location_id UUID Nein FK ➔ locations.id Feld location_id
protocol VARCHAR(32) Ja * - Feld protocol
status VARCHAR(32) Ja * - Feld status
ip_address VARCHAR(64) Nein - Feld ip_address
mac_address VARCHAR(64) Nein - Feld mac_address
firmware_version VARCHAR(64) Nein - Feld firmware_version
last_heartbeat_at DATETIME Nein - Feld last_heartbeat_at
config JSONB Ja * - Feld config
id UUID Nein PK Feld id
tenant_id UUID Ja * FK ➔ organizations.id Feld tenant_id
created_at DATETIME Ja * - Feld created_at
updated_at DATETIME Ja * - Feld updated_at
created_by UUID Nein - Feld created_by
updated_by UUID Nein - Feld updated_by
source_type VARCHAR(32) Nein - Feld source_type
source_id UUID Nein - Feld source_id
metadata JSONB Ja * - Feld metadata
IotMeasurements iot_measurements RLS Aktiv
17 Câmpuri / coloane

Tabelle iot_measurements

Feldname Tip de date Obligatoriu Schlüssel Importanța profesională
device_id UUID Ja * FK ➔ iot_devices.id Feld device_id
metric_key VARCHAR(64) Ja * - Feld metric_key
reading_timestamp DATETIME Ja * - Feld reading_timestamp
ingestion_timestamp DATETIME Ja * - Feld ingestion_timestamp
metric_value NUMERIC(14, 4) Nein - Feld metric_value
metric_text VARCHAR(255) Nein - Feld metric_text
unit VARCHAR(32) Nein - Feld unit
quality VARCHAR(16) Ja * - Feld quality
source_id VARCHAR(128) Nein - Feld source_id
correlation_id VARCHAR(128) Nein - Feld correlation_id
schema_version VARCHAR(16) Ja * - Feld schema_version
raw_payload JSONB Nein - Feld raw_payload
id UUID Nein PK Feld id
tenant_id UUID Ja * FK ➔ organizations.id Feld tenant_id
created_at DATETIME Ja * - Feld created_at
updated_at DATETIME Ja * - Feld updated_at
metadata JSONB Ja * - Feld metadata
IotMetricDefinitions iot_metric_definitions RLS Aktiv
22 Câmpuri / coloane

Tabelle iot_metric_definitions

Feldname Tip de date Obligatoriu Schlüssel Importanța profesională
metric_key VARCHAR(64) Ja * - Feld metric_key
name VARCHAR(255) Ja * - Feld name
physical_quantity VARCHAR(64) Ja * - Feld physical_quantity
unit VARCHAR(32) Nein - Feld unit
data_type VARCHAR(32) Ja * - Feld data_type
min_threshold NUMERIC(14, 4) Nein - Feld min_threshold
max_threshold NUMERIC(14, 4) Nein - Feld max_threshold
warning_min_threshold NUMERIC(14, 4) Nein - Feld warning_min_threshold
warning_max_threshold NUMERIC(14, 4) Nein - Feld warning_max_threshold
hysteresis NUMERIC(14, 4) Ja * - Feld hysteresis
target_domain VARCHAR(32) Ja * - Feld target_domain
description TEXT Nein - Feld description
is_active BOOLEAN Ja * - Feld is_active
id UUID Nein PK Feld id
tenant_id UUID Ja * FK ➔ organizations.id Feld tenant_id
created_at DATETIME Ja * - Feld created_at
updated_at DATETIME Ja * - Feld updated_at
created_by UUID Nein - Feld created_by
updated_by UUID Nein - Feld updated_by
source_type VARCHAR(32) Nein - Feld source_type
source_id UUID Nein - Feld source_id
metadata JSONB Ja * - Feld metadata

🔌 Puncte de inițiere (UI & API)

Art Metoda Punctul de încheiere / traseul Titel & Zweck Asigurarea
⚡ REST API GET /api/v1/iot/devices
list_devices
Semantic binding: inventory_only; mutation=False
iot
⚡ REST API GET /api/v1/iot/devices/{device_id}
get_device_detail
Semantic binding: inventory_only; mutation=False
iot
⚡ REST API GET /api/v1/iot/twins
list_digital_twins
Semantic binding: inventory_only; mutation=False
iot
⚡ REST API GET /api/v1/iot/twins/{twin_id}
get_digital_twin_detail
Semantic binding: inventory_only; mutation=False
iot
⚡ REST API GET /iot
iot_dashboard_page
Semantic binding: inventory_only; mutation=False
iot
⚡ REST API POST /api/v1/iot/bindings
create_business_binding
Semantic binding: operator_surface; mutation=True
iot
⚡ REST API POST /api/v1/iot/commands
request_device_command
Semantic binding: operator_surface; mutation=True
iot
⚡ REST API POST /api/v1/iot/commands/{command_id}/approve
approve_device_command
Semantic binding: operator_surface; mutation=True
iot
⚡ REST API POST /api/v1/iot/commands/{command_id}/reject
reject_device_command
Semantic binding: operator_surface; mutation=True
iot
⚡ REST API POST /api/v1/iot/devices
create_device
Semantic binding: operator_surface; mutation=True
iot
⚡ REST API POST /api/v1/iot/telemetry/ingest
ingest_telemetry_point
Semantic binding: operator_surface; mutation=True
iot
⚡ REST API POST /api/v1/iot/twins
create_digital_twin
Semantic binding: operator_surface; mutation=True
iot
⚡ REST API POST /api/v1/iot/webhooks/{device_identifier}
handle_iot_webhook
Semantic binding: operator_surface; mutation=True
iot

🛡️ Reglementări și respectare

Dieses Modul unterliegt folgenden gesetzlichen, regulatorischen und Revisionsstandards:

  • Încercibilitate
  • Izolarea clientului (PostgreSQL RLS)