@startuml "Intelligent Data Collection" participant "Vehicle Telematics Module" as VTM participant "Broker" as iot database "Telemetry Data" as TDB participant "Vehicle Status" as vehstat database "Vehicle Model and Mapping" as VMDB participant "Intelligent Data Service" as IDS participant "Analytics Services" as AS participant "Consuming Services" as CS actor "Developer/Engineer" as DE participant "Consuming Application" DE -> IDS: Model Vehicle Data IDS -> VMDB: Store Vehicle Models DE -> IDS: Map Model to Vehicle Data Schemas (i.e. DBC) IDS -> VMDB: Store Vehicle Model and Mapping === Load Vehicle Model Mapping == IDS -> iot: Publish message PublishVehicleModelMapping alt Vehicle Connected iot -> VTM: Receive PublishVehicleModelMapping note right of VTM: The vehicle uses the mapping to abstract and transform vehicle network data to the Model. else else Vehicle Not Connected vehstat -> IDS: isVehicleSubscribedResponse (Not Subscribed) create boundary "SMS/Cellular Services" as sms IDS -> sms: Send SMS Wake up Message VTM -> iot: Connect iot -> iot: Authorization check iot -> VTM: ConnectAck iot -> vehstat: Connected vehstat -> IDS: Connected IDS -> iot: Subscribe to iot -> IDS: SUBACK IDS -> iot: Publish PublishVehicleModelMapping end iot -> VTM: Receive PublishVehicleModelMapping iot -> IDS: PUBACK == Send Vehicle Data Collection Scheme == DE -> IDS: Design Data Collection Scheme note right of IDS: These services permit identifying just the data needed\n for a specific use case and the collection intervals\n either by event or time based. alt Vehicle Connected iot -> VTM: Receive PublishDataCollectionDescriptor note right of VTM: The vehicle uses the mapping to abstract and transform vehicle network data to the Model. else else Vehicle Not Connected vehstat -> IDS: isVehicleSubscribedResponse (Not Subscribed) create boundary "SMS/Cellular Services" as sms IDS -> sms: Send SMS Wake up Message VTM -> iot: Connect iot -> iot: Authorization check iot -> VTM: ConnectAck iot -> vehstat: Connected vehstat -> IDS: Connected IDS -> iot: Subscribe to iot -> IDS: SUBACK IDS -> iot: Publish PublishDataCollectionDescriptor end iot -> VTM: Receive PublishDataCollectionDescriptor iot -> IDS: PUBACK == Publish Data From Vehicle == loop Publish as Per Collection Scheme VTM <-: Event or Interval VTM -> iot: Connect VTM -> iot: PublishData iot -> iot: Authorization check iot -> VTM: ConnectAck iot -> vehstat: Connected vehstat -> IDS: Connected VTM -> iot: PublishData iot -> IDS: Receive PublishData IDS -> TD: Store Data AS -> TD: Retrieve and Transform Data AS -> CS: Consume Data for Business Purposes end @enduml