predictive-maintenance

German Version

MongoDB für Maschinelles Lernen von Betriebsdaten bei Fahrzeugen

Um eine MongoDB-Datenbank auf Grundlage des NoSQL-Datenbankmodells für ein Projekt zur prädiktiven Wartung von Fahrzeugen zu erstellen, benötigen wir eine flexible, dokumentenbasierte Struktur. Das Modell soll in der Lage sein, verschiedene Datenarten wie Fahrzeuginformationen, Sensordaten und Wartungshistorien zu speichern. Hier ein Beispiel für die Modellierung mit den wichtigsten Collections (entsprechend den Tabellen einer relationalen Datenbank):

1. Collection: Fahrzeuge (vehicles)

{
  "_id": "12345", // eindeutige ID des Fahrzeugs (kann Fahrzeug-Seriennummer oder generierte ID sein)
  "vehicleType": "LKW",
  "model": "TruckModelX",
  "manufacturer": "TruckCo",
  "yearOfManufacture": 2018,
  "registrationNumber": "AB-123-CD",
  "sensors": [
    {
      "sensorId": "sensor_01",
      "sensorType": "temperature",
      "installationDate": "2019-02-15"
    },
    {
      "sensorId": "sensor_02",
      "sensorType": "vibration",
      "installationDate": "2019-02-15"
    }
  ],
  "maintenanceHistory": [
    {
      "date": "2023-01-10",
      "description": "Routine-Wartung",
      "cost": 200.00,
      "serviceProvider": "Werkstatt XY"
    },
    {
      "date": "2023-06-15",
      "description": "Austausch der Bremsen",
      "cost": 500.00,
      "serviceProvider": "Werkstatt XY"
    }
  ]
}

2. Collection: Sensordaten (sensorData)

{
  "_id": "1", // eindeutige ID für den Sensordateneintrag
  "sensorId": "sensor_01",
  "vehicleId": "12345",
  "timestamp": "2024-11-09T12:00:00Z",
  "value": 80.3,
  "unit": "Celsius"
}

3. Collection: Wartungsprognosen (maintenancePredictions)

{
  "_id": "56789", // eindeutige ID für die Prognose
  "vehicleId": "12345",
  "predictedIssue": "Ölwechsel erforderlich",
  "predictedDate": "2024-12-01",
  "severityLevel": "mittel",
  "recommendation": "Überprüfung durch Fachpersonal",
  "predictionModelVersion": "v1.2"
}

4. Collection: Benutzer (users) (falls Benutzerkonten benötigt werden)

{
  "_id": "user123",
  "username": "techniker01",
  "role": "Techniker",
  "email": "techniker@firma.de",
  "passwordHash": "hashed_password_here",
  "permissions": ["viewVehicles", "addSensorData", "viewPredictions"]
}

Erläuterungen zum Datenmodell

  1. Flexibilität von MongoDB: MongoDB ist dokumentenbasiert, was bedeutet, dass jede Collection Dokumente speichern kann, die flexibel strukturiert sind. Felder können verschachtelt sein, und unterschiedliche Dokumente innerhalb derselben Collection können unterschiedliche Felder enthalten.

  2. Einbettung vs. Referenzierung:
    • In der vehicles-Collection sind Sensoren als eingebettete Dokumente gespeichert, da sie direkt dem Fahrzeug zugeordnet sind und normalerweise nicht unabhängig abgerufen werden müssen.
    • Die sensorData-Collection ist als separate Collection dargestellt, da Sensordaten in großem Umfang anfallen können. Sie sind über vehicleId und sensorId mit den Fahrzeugen verknüpft.
    • Ähnliches gilt für maintenancePredictions, die mit Fahrzeugen durch vehicleId verknüpft sind.
  3. Beziehungen: MongoDB verfolgt oft einen denormalisierten Ansatz (Daten werden gemeinsam gespeichert), um schnelle Lesezugriffe zu ermöglichen. Wenn Daten jedoch separat gespeichert werden sollen (wie Sensordaten), können Referenzierungen über IDs erfolgen.

  4. Indexierung: Um die Leistung zu optimieren, sollte in MongoDB für häufig abgefragte Felder wie vehicleId, sensorId oder Zeitstempel ein Index erstellt werden.

Beispiel-Befehle zur Erstellung der Collections

Um die Collections in MongoDB anzulegen und Daten einzufügen, könnten Sie z. B. folgende MongoDB-Befehle nutzen:

Einfügen eines Fahrzeugs:

db.vehicles.insertOne({
  _id: "12345",
  vehicleType: "LKW",
  model: "TruckModelX",
  manufacturer: "TruckCo",
  yearOfManufacture: 2018,
  registrationNumber: "AB-123-CD",
  sensors: [
    { sensorId: "sensor_01", sensorType: "temperature", installationDate: "2019-02-15" },
    { sensorId: "sensor_02", sensorType: "vibration", installationDate: "2019-02-15" }
  ],
  maintenanceHistory: [
    { date: "2023-01-10", description: "Routine-Wartung", cost: 200.00, serviceProvider: "Werkstatt XY" }
  ]
});

Einfügen von Sensordaten:

db.sensorData.insertOne({
  _id: "1",
  sensorId: "sensor_01",
  vehicleId: "12345",
  timestamp: "2024-11-09T12:00:00Z",
  value: 80.3,
  unit: "Celsius"
});

Einfügen einer Wartungsprognose:

db.maintenancePredictions.insertOne({
  _id: "56789",
  vehicleId: "12345",
  predictedIssue: "Ölwechsel erforderlich",
  predictedDate: "2024-12-01",
  severityLevel: "mittel",
  recommendation: "Überprüfung durch Fachpersonal",
  predictionModelVersion: "v1.2"
});

Dieses Datenbankmodell ist flexibel, leicht erweiterbar und eignet sich gut für das Speichern von Fahrzeugdaten, Sensordaten und anderen relevanten Informationen zur prädiktiven Wartung.

Script zur Erstellung einer MongoDB

Hier ist ein Beispielskript in JavaScript, das Sie verwenden können, um eine MongoDB-Datenbank zu erstellen und die oben vorgestellten Collections mit Beispiel-Daten anzulegen. Dieses Skript nutzt die MongoDB-Shell-Syntax. Sie können es beispielsweise in der MongoDB-Shell oder mit einem Node.js-Skript ausführen.

// Verbindung zur Datenbank (wird automatisch erstellt, wenn sie nicht existiert)
use predictive_maintenance_db;

// Fahrzeuge Collection erstellen und Beispiel-Dokumente einfügen
db.vehicles.insertOne({
  _id: "12345",
  vehicleType: "LKW",
  model: "TruckModelX",
  manufacturer: "TruckCo",
  yearOfManufacture: 2018,
  registrationNumber: "AB-123-CD",
  sensors: [
    { sensorId: "sensor_01", sensorType: "temperature", installationDate: "2019-02-15" },
    { sensorId: "sensor_02", sensorType: "vibration", installationDate: "2019-02-15" }
  ],
  maintenanceHistory: [
    { date: "2023-01-10", description: "Routine-Wartung", cost: 200.00, serviceProvider: "Werkstatt XY" },
    { date: "2023-06-15", description: "Austausch der Bremsen", cost: 500.00, serviceProvider: "Werkstatt XY" }
  ]
});

// Sensordaten Collection erstellen und Beispiel-Dokumente einfügen
db.sensorData.insertOne({
  _id: "1",
  sensorId: "sensor_01",
  vehicleId: "12345",
  timestamp: "2024-11-09T12:00:00Z",
  value: 80.3,
  unit: "Celsius"
});

// Weitere Beispiel-Sensordaten hinzufügen
db.sensorData.insertOne({
  _id: "2",
  sensorId: "sensor_02",
  vehicleId: "12345",
  timestamp: "2024-11-09T12:05:00Z",
  value: 0.02,
  unit: "g" // Einheit für Vibration
});

// Wartungsprognosen Collection erstellen und Beispiel-Dokumente einfügen
db.maintenancePredictions.insertOne({
  _id: "56789",
  vehicleId: "12345",
  predictedIssue: "Ölwechsel erforderlich",
  predictedDate: "2024-12-01",
  severityLevel: "mittel",
  recommendation: "Überprüfung durch Fachpersonal",
  predictionModelVersion: "v1.2"
});

// Benutzer Collection erstellen und Beispiel-Benutzer einfügen (optional)
db.users.insertOne({
  _id: "user123",
  username: "techniker01",
  role: "Techniker",
  email: "techniker@firma.de",
  passwordHash: "hashed_password_here", // In der Praxis sollten Passwörter niemals als Klartext gespeichert werden!
  permissions: ["viewVehicles", "addSensorData", "viewPredictions"]
});

// Indexe hinzufügen (optional aber empfohlen für Performance)
db.sensorData.createIndex({ vehicleId: 1 });
db.sensorData.createIndex({ sensorId: 1 });
db.maintenancePredictions.createIndex({ vehicleId: 1 });

print("Datenbank und Collections wurden erfolgreich erstellt!");

So verwenden Sie das Skript

  1. MongoDB Shell:
    • Kopieren Sie das Skript und fügen Sie es in die MongoDB-Shell (mongosh) ein, um es auszuführen.
    • Alternativ speichern Sie es in einer .js-Datei und führen es mit folgendem Befehl aus:
      mongosh <dateiname>.js
      
  2. Node.js-Anwendung:
    • Wenn Sie Node.js verwenden, können Sie das Skript mit mongodb oder mongoose als Datenbank-Bibliothek ausführen.

Anpassungen

Zur API Schnittstelle

API_INTERFACE_FLEET.md

Datenbank Version 2

Private repository - Only those with access to this repository can view it (https://github.com/harzmann/predictive-maintenance/blob/main/docs/MONGODB_FLEET_V2.md)

Lizenz

Autor: Jörg Harzmann

Dieser Inhalt ist unter einer CC BY-NC Lizenz veröffentlicht.