Entreprise Archictecture from FleetOptimizer #9

Closed
opened 2026-04-15 12:29:42 +00:00 by JakobNoerby · 4 comments
JakobNoerby commented 2026-04-15 12:29:42 +00:00 (Migrated from github.com)

Could you kindly share the illustration of the updated Entreprise Architecture from FleetOptimizer?

Could you kindly share the illustration of the updated Entreprise Architecture from FleetOptimizer?
janhalen commented 2026-04-16 07:39:35 +00:00 (Migrated from github.com)

The os2Fleetoptimiser (without the gps-connetor integration, which is still in development) architeture is described (from a deployment perspective) here: https://os2fleetoptimiser.github.io/OS2fleetoptimiser-docs/production.html

The architecture of the gps-connector has been vividly discussed in this issue: https://github.com/OS2sandbox/gps-connector/issues/24 and i have requested an architectural record of the final result of our discussions...

I hope this is usable for you... otherwise, lets discuss it if you have other more specific needs...

The os2Fleetoptimiser (without the gps-connetor integration, which is still in development) architeture is described (from a deployment perspective) here: https://os2fleetoptimiser.github.io/OS2fleetoptimiser-docs/production.html The architecture of the gps-connector has been vividly discussed in this issue: https://github.com/OS2sandbox/gps-connector/issues/24 and i have requested an architectural record of the final result of our discussions... I hope this is usable for you... otherwise, lets discuss it if you have other more specific needs...
andreasDroid commented 2026-04-16 08:07:26 +00:00 (Migrated from github.com)

Hi @JakobNoerby ,

We have this defined as the current architecture - still subject to minor changes and definition of exact technologies to be used.
FleetOptimiser is in this setup only an external consumer.

Image

If you prefer an editable version, I've converted it to mermaid here:

flowchart TD
  GPS-device([GPS Device])

  subgraph k8s[Kubernetes Cluster]
    LB[Load Balancer]
    Mosquitto[MQTT Broker]
    Bento[Bento]
    Redis[(Redis)]
    IoTAgent[IoT Agent JSON]
    mongoDB[(MongoDB)]
    OrionLD[Orion-LD]
    QuantumLeap[QuantumLeap]
    CrateDB[(CrateDB)]
    KeyCloak[KeyCloak]
    Traefik[Proxy / Gateway]
    Frontend[Frontend]
    APILayer[API Layer]
    ColdStorage[(Cold Storage)]
    CSE[Cold Storage Extractor]
  end

  FleetOptimiser([External consumer])
  User([User])

  GPS-device -->|Publish on own topic| LB
  LB -->|Raw MQTT| Mosquitto
  Bento -->|Subscribe raw| Mosquitto
  Bento -->|Publish normalized data| Mosquitto
  Bento -->|Lookup IMEI tenant| Redis
  IoTAgent -->|Subscribe tenant/device| Mosquitto
  IoTAgent --- mongoDB
  IoTAgent -->|NGSI-LD| OrionLD
  OrionLD -->|Device state persistence| mongoDB
  QuantumLeap -->|Subscribe| OrionLD
  QuantumLeap -->|SQL| CrateDB
  CrateDB -->|data| QuantumLeap
  mongoDB --> Redis

  CrateDB -->|Pull non-active data| CSE
  CSE -->|Store cold data| ColdStorage
  APILayer -->|Fetch cold storage| ColdStorage

  FleetOptimiser -->|Auth| KeyCloak:::green
  KeyCloak -->|org-service-token| FleetOptimiser:::green
  FleetOptimiser -->|With org-service-token| Traefik:::green
  Traefik -->|Request| QuantumLeap:::green
  QuantumLeap -->|Request tenant data| CrateDB:::green
  QuantumLeap -->|Response| Traefik:::green
  Traefik -->|Response| FleetOptimiser:::green

  User -->|Authenticate| KeyCloak:::blue
  KeyCloak -->|org-token| User:::blue
  User --> Traefik:::blue
  Traefik --> Frontend:::blue
  Frontend -->|Register new device| Traefik:::blue
  Traefik -->|Route| APILayer:::blue
  APILayer -->|Cache| Redis:::blue
  APILayer -->|Provision device| IoTAgent:::blue

  APILayer -->|Create subscription| QuantumLeap:::red
  APILayer -->|New tenant| IoTAgent:::red

  Frontend -->|Request cold data| Traefik:::orange
  Traefik -->|Route cold data req| APILayer:::orange
  APILayer --> ColdStorage:::orange
  ColdStorage -->|Serve cold data| APILayer:::orange

  classDef green color:#2e7d32,stroke:#43a047,fill:#e8f5e9
  classDef blue color:#1565c0,stroke:#1e88e5,fill:#e3f2fd
  classDef red color:#b71c1c,stroke:#e53935,fill:#ffebee
  classDef orange color:#e65100,stroke:#fb8c00,fill:#fff3e0
Hi @JakobNoerby , We have this defined as the current architecture - still subject to minor changes and definition of exact technologies to be used. FleetOptimiser is in this setup only an external consumer. <img width="2664" height="1231" alt="Image" src="https://github.com/user-attachments/assets/65b0ee17-1f26-4c38-9c0f-aeef056c51b8" /> If you prefer an editable version, I've converted it to mermaid here: ```mermaid flowchart TD GPS-device([GPS Device]) subgraph k8s[Kubernetes Cluster] LB[Load Balancer] Mosquitto[MQTT Broker] Bento[Bento] Redis[(Redis)] IoTAgent[IoT Agent JSON] mongoDB[(MongoDB)] OrionLD[Orion-LD] QuantumLeap[QuantumLeap] CrateDB[(CrateDB)] KeyCloak[KeyCloak] Traefik[Proxy / Gateway] Frontend[Frontend] APILayer[API Layer] ColdStorage[(Cold Storage)] CSE[Cold Storage Extractor] end FleetOptimiser([External consumer]) User([User]) GPS-device -->|Publish on own topic| LB LB -->|Raw MQTT| Mosquitto Bento -->|Subscribe raw| Mosquitto Bento -->|Publish normalized data| Mosquitto Bento -->|Lookup IMEI tenant| Redis IoTAgent -->|Subscribe tenant/device| Mosquitto IoTAgent --- mongoDB IoTAgent -->|NGSI-LD| OrionLD OrionLD -->|Device state persistence| mongoDB QuantumLeap -->|Subscribe| OrionLD QuantumLeap -->|SQL| CrateDB CrateDB -->|data| QuantumLeap mongoDB --> Redis CrateDB -->|Pull non-active data| CSE CSE -->|Store cold data| ColdStorage APILayer -->|Fetch cold storage| ColdStorage FleetOptimiser -->|Auth| KeyCloak:::green KeyCloak -->|org-service-token| FleetOptimiser:::green FleetOptimiser -->|With org-service-token| Traefik:::green Traefik -->|Request| QuantumLeap:::green QuantumLeap -->|Request tenant data| CrateDB:::green QuantumLeap -->|Response| Traefik:::green Traefik -->|Response| FleetOptimiser:::green User -->|Authenticate| KeyCloak:::blue KeyCloak -->|org-token| User:::blue User --> Traefik:::blue Traefik --> Frontend:::blue Frontend -->|Register new device| Traefik:::blue Traefik -->|Route| APILayer:::blue APILayer -->|Cache| Redis:::blue APILayer -->|Provision device| IoTAgent:::blue APILayer -->|Create subscription| QuantumLeap:::red APILayer -->|New tenant| IoTAgent:::red Frontend -->|Request cold data| Traefik:::orange Traefik -->|Route cold data req| APILayer:::orange APILayer --> ColdStorage:::orange ColdStorage -->|Serve cold data| APILayer:::orange classDef green color:#2e7d32,stroke:#43a047,fill:#e8f5e9 classDef blue color:#1565c0,stroke:#1e88e5,fill:#e3f2fd classDef red color:#b71c1c,stroke:#e53935,fill:#ffebee classDef orange color:#e65100,stroke:#fb8c00,fill:#fff3e0 ```
janhalen commented 2026-04-23 12:05:43 +00:00 (Migrated from github.com)

Fantastic @andreasDroid !!!

@JakobNoerby was this what you were looking for?

Fantastic @andreasDroid !!! @JakobNoerby was this what you were looking for?
JakobNoerby commented 2026-04-28 11:38:04 +00:00 (Migrated from github.com)

This was exactly what I was looking for. Thanks @andreasDroid

This was exactly what I was looking for. Thanks @andreasDroid
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
OS2/ai-heatcontrol#9
No description provided.