From 67bfdef58d2e65286c2b2422e5914e8f640d1657 Mon Sep 17 00:00:00 2001 From: Enrico Walther Date: Tue, 28 Nov 2023 18:06:33 +0100 Subject: [PATCH 01/38] Add initial wheelchair assistant use case. --- docs/diagrams/wheel_chair_scenario.png | Bin 0 -> 61732 bytes .../smart_trailer_application/Cargo.toml | 16 ++ .../smart_trailer_application/Dockerfile | 71 +++++ .../smart_trailer_application/src/main.rs | 250 +++++++++++++++++ .../digital-twin-model/Cargo.toml | 17 ++ .../digital-twin-model/dtdl/trailer.json | 24 ++ .../digital-twin-model/src/lib.rs | 13 + .../digital-twin-model/src/trailer_v1.rs | 23 ++ .../digital_twin_providers/common/Cargo.toml | 13 + .../common/src/constants.rs | 33 +++ .../digital_twin_providers/common/src/lib.rs | 6 + .../common/src/utils.rs | 154 +++++++++++ .../trailer_connected_provider/Cargo.toml | 18 ++ .../trailer_connected_provider/Dockerfile | 74 +++++ .../trailer_connected_provider/src/main.rs | 110 ++++++++ .../src/trailer_connected_provider_impl.rs | 27 ++ .../trailer_properties_provider/Cargo.toml | 29 ++ .../trailer_properties_provider/Dockerfile | 74 +++++ .../trailer_properties_provider/src/main.rs | 170 ++++++++++++ .../src/trailer_properties_provider_impl.rs | 259 ++++++++++++++++++ .../digital_twin_get_provider.proto | 26 ++ .../proto_build/Cargo.toml | 17 ++ .../proto_build/build.rs | 8 + .../proto_build/src/lib.rs | 10 + .../start_trailer_applications_ankaios.sh | 113 ++++++++ .../start_trailer_applications_bluechi.sh | 112 ++++++++ 26 files changed, 1667 insertions(+) create mode 100644 docs/diagrams/wheel_chair_scenario.png create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/Cargo.toml create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/Dockerfile create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/src/main.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/Cargo.toml create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/trailer.json create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/lib.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/trailer_v1.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/Cargo.toml create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/constants.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/lib.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/utils.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/Cargo.toml create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/Dockerfile create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/src/main.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/src/trailer_connected_provider_impl.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/Cargo.toml create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/Dockerfile create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/src/main.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/src/trailer_properties_provider_impl.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/interfaces/digital_twin_get_provider.proto create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/Cargo.toml create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/build.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/src/lib.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_ankaios.sh create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_bluechi.sh diff --git a/docs/diagrams/wheel_chair_scenario.png b/docs/diagrams/wheel_chair_scenario.png new file mode 100644 index 0000000000000000000000000000000000000000..8f5ac3c7f44bea4cc5e743726f8077c5eb118c31 GIT binary patch literal 61732 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 axW1dO, +) -> Result { + // Create gRPC client. + let mut client = ManagedSubscribeClient::connect(managed_subscribe_uri.to_string()) + .await + .map_err(|err| Status::from_error(err.into()))?; + + let request = Request::new(SubscriptionInfoRequest { + entity_id: trailer_v1::trailer::trailer_weight::ID.to_string(), + constraints, + }); + + let response = client.get_subscription_info(request).await?; + + Ok(response.into_inner()) +} + +/// Receive Trailer Weight updates. +/// +/// # Arguments +/// * `broker_uri` - The broker URI. +/// * `topic` - The topic. +async fn receive_trailer_weight_updates( + broker_uri: &str, + topic: &str, +) -> Result, String> { + // Create a unique id for the client. + let client_id = format!("{MQTT_CLIENT_ID}-{}", Uuid::new_v4()); + + let create_opts = mqtt::CreateOptionsBuilder::new() + .server_uri(broker_uri) + .client_id(client_id) + .finalize(); + + let client = mqtt::Client::new(create_opts) + .map_err(|err| format!("Failed to create the client due to '{err:?}'"))?; + + let receiver = client.start_consuming(); + + // Setup task to handle clean shutdown. + let ctrlc_cli = client.clone(); + tokio::spawn(async move { + _ = signal::ctrl_c().await; + + // Tells the client to shutdown consuming thread. + ctrlc_cli.stop_consuming(); + }); + + // Last Will and Testament + let lwt = mqtt::MessageBuilder::new() + .topic("test") + .payload("Receiver lost connection") + .finalize(); + + let conn_opts = mqtt::ConnectOptionsBuilder::new_v5() + .keep_alive_interval(Duration::from_secs(30)) + .clean_session(false) + .will_message(lwt) + .finalize(); + + let _connect_response = client + .connect(conn_opts) + .map_err(|err| format!("Failed to connect due to '{err:?}")); + + let mut _subscribe_response = client + .subscribe(topic, mqtt::types::QOS_1) + .map_err(|err| format!("Failed to subscribe to topic {topic} due to '{err:?}'")); + + // Copy topic for separate thread. + let topic_string = topic.to_string(); + + let sub_handle = tokio::spawn(async move { + for msg in receiver.iter() { + if let Some(msg) = msg { + // Here we log the message received. This could be expanded to parsing the message, + // Obtaining the weight and making decisions based on the weight + // For example, adjusting body functions or powertrain of the towing vehicle. + info!("{}", msg); + } else if !client.is_connected() { + if client.reconnect().is_ok() { + _subscribe_response = client + .subscribe(topic_string.as_str(), mqtt::types::QOS_1) + .map_err(|err| { + format!("Failed to subscribe to topic {topic_string} due to '{err:?}'") + }); + } else { + break; + } + } + } + + if client.is_connected() { + debug!("Disconnecting"); + client.unsubscribe(topic_string.as_str()).unwrap(); + client.disconnect(None).unwrap(); + } + }); + + Ok(sub_handle) +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + // Setup logging. + Builder::new() + .filter(None, LevelFilter::Info) + .target(Target::Stdout) + .init(); + + info!("The Smart Trailer Application has started."); + + // Get the In-vehicle Digital Twin Uri from the service discovery system + // This could be enhanced to add retries for robustness + let invehicle_digital_twin_uri = discover_service_using_chariott( + CHARIOTT_SERVICE_DISCOVERY_URI, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, + ) + .await?; + + // Get subscription constraints. + let frequency_ms = env::args() + .find_map(|arg| { + if arg.contains(FREQUENCY_MS_FLAG) { + return Some(arg.replace(FREQUENCY_MS_FLAG, "")); + } + + None + }) + .unwrap_or_else(|| DEFAULT_FREQUENCY_MS.to_string()); + + // Retrieve the provider URI. + let mut provider_endpoint_info = None; + let mut retries: i32 = 0; + while provider_endpoint_info.is_none() { + provider_endpoint_info = match discover_digital_twin_provider_using_ibeji( + &invehicle_digital_twin_uri, + trailer_v1::trailer::trailer_weight::ID, + digital_twin_protocol::GRPC, + &[digital_twin_operation::MANAGEDSUBSCRIBE.to_string()], + ) + .await + { + Ok(response) => Some(response), + Err(status) => { + info!( + "A provider was not found in the digital twin service for id '{}' with: '{:?}'", + trailer_v1::trailer::trailer_weight::ID, + status + ); + None + } + }; + + if provider_endpoint_info.is_none() && retries < MAX_RETRIES { + info!("Retrying FindById to retrieve the properties provider endpoint in {DURATION_BETWEEN_ATTEMPTS:?}."); + sleep(DURATION_BETWEEN_ATTEMPTS).await; + retries += 1; + } else { + break; + } + } + + let managed_subscribe_uri = provider_endpoint_info.ok_or("Maximum amount of retries was reached while trying to retrieve the digital twin provider.")?.uri; + info!("The Managed Subscribe URI for the TrailerWeight property's provider is {managed_subscribe_uri}"); + + // Create constraint for the managed subscribe call. + let frequency_constraint = Constraint { + r#type: constraint_type::FREQUENCY_MS.to_string(), + value: frequency_ms.to_string(), + }; + + // Get the subscription information for a managed topic with constraints. + let subscription_info = + get_trailer_weight_subscription_info(&managed_subscribe_uri, vec![frequency_constraint]) + .await?; + + // Deconstruct subscription information. + let broker_uri = get_uri(&subscription_info.uri)?; + let topic = subscription_info.context; + info!("The broker URI for the TrailerWeight property's provider is {broker_uri}"); + + // Subscribe to topic. + let sub_handle = receive_trailer_weight_updates(&broker_uri, &topic) + .await + .map_err(|err| Status::internal(format!("{err:?}")))?; + + signal::ctrl_c().await?; + + info!("The Consumer has completed. Shutting down..."); + + // Wait for subscriber task to cleanly shutdown. + _ = sub_handle.await; + + Ok(()) +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/Cargo.toml new file mode 100644 index 0000000..132f976 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/Cargo.toml @@ -0,0 +1,17 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +[package] +name = "digital-twin-model" +version = "0.1.0" +edition = "2021" +license = "MIT" + +[dependencies] +serde = { workspace = true } +serde_derive = { workspace = true } + +[lib] +path = "src/lib.rs" +crate-type = ["lib"] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/trailer.json b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/trailer.json new file mode 100644 index 0000000..f291076 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/trailer.json @@ -0,0 +1,24 @@ +[ + { + "@context": ["dtmi:dtdl:context;3"], + "@type": "Interface", + "@id": "dtmi:sdv:Trailer;1", + "description": "Trailer used for transporting cargo", + "contents": [ + { + "@type": "Property", + "@id": "dtmi:sdv:Trailer:Weight;1", + "name": "TrailerWeight", + "description": "The weight of the trailer", + "schema": "integer" + }, + { + "@type": "Property", + "@id": "dtmi:sdv:Trailer:IsTrailerConnected;1", + "name": "IsTrailerConnected", + "description": "Is trailer connected?", + "schema": "boolean" + } + ] + } +] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/lib.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/lib.rs new file mode 100644 index 0000000..d09afad --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/lib.rs @@ -0,0 +1,13 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +pub mod trailer_v1; + +use serde_derive::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize)] +pub struct Metadata { + #[serde(rename = "$model")] + pub model: String, +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/trailer_v1.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/trailer_v1.rs new file mode 100644 index 0000000..0391b88 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/trailer_v1.rs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +// Note: This code was manually written based on the structure of the +// vehicle model in "../dtdl/trailer.json" +// In the future this code could be generated from a DTDL spec. + +pub mod trailer { + pub mod trailer_weight { + pub const ID: &str = "dtmi:sdv:Trailer:Weight;1"; + pub const NAME: &str = "TrailerWeight"; + pub const DESCRIPTION: &str = "The weight of the trailer"; + pub type TYPE = i32; + } + + pub mod is_trailer_connected { + pub const ID: &str = "dtmi:sdv:Trailer:IsTrailerConnected;1"; + pub const NAME: &str = "IsTrailerConnected"; + pub const DESCRIPTION: &str = "Is trailer connected?"; + pub type TYPE = bool; + } +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/Cargo.toml new file mode 100644 index 0000000..e9e9012 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "digital_twin_providers_common" +version = "0.1.0" +edition = "2021" +license = "MIT" + +[dependencies] +interfaces = { path = "../../../../proto_build"} +log = { workspace = true } +tonic = { workspace = true } + +[features] +containerize = [] diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/constants.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/constants.rs new file mode 100644 index 0000000..cd6803c --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/constants.rs @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +/// Supported digital twin operations. +pub mod digital_twin_operation { + pub const GET: &str = "Get"; + pub const SET: &str = "Set"; + pub const SUBSCRIBE: &str = "Subscribe"; + pub const UNSUBSCRIBE: &str = "Unsubscribe"; + pub const INVOKE: &str = "Invoke"; + pub const STREAM: &str = "Stream"; + pub const MANAGEDSUBSCRIBE: &str = "ManagedSubscribe"; +} + +// Supported digital twin protocols. +pub mod digital_twin_protocol { + pub const GRPC: &str = "grpc"; + pub const MQTT: &str = "mqtt"; +} + +pub mod chariott { + pub const INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE: &str = "sdv.ibeji"; + pub const INVEHICLE_DIGITAL_TWIN_SERVICE_NAME: &str = "invehicle_digital_twin"; + pub const INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION: &str = "1.0"; + pub const INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND: &str = "grpc+proto"; + pub const INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE: &str = "https://github.com/eclipse-ibeji/ibeji/blob/main/interfaces/digital_twin/v1/digital_twin.proto"; +} + +/// Recognized constraint types for subscribe requests. +pub mod constraint_type { + pub const FREQUENCY_MS: &str = "frequency_ms"; +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/lib.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/lib.rs new file mode 100644 index 0000000..52b4c85 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/lib.rs @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +pub mod constants; +pub mod utils; diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/utils.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/utils.rs new file mode 100644 index 0000000..04d7e2f --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/utils.rs @@ -0,0 +1,154 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +use interfaces::chariott::service_discovery::core::v1::service_registry_client::ServiceRegistryClient; +use interfaces::chariott::service_discovery::core::v1::DiscoverRequest; +use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; +use interfaces::invehicle_digital_twin::v1::{EndpointInfo, FindByIdRequest}; +use log::{debug, info}; +use tonic::{Request, Status}; + +/// Use Chariott Service Discovery to discover a service. +/// +/// # Arguments +/// * `chariott_uri` - Chariott's URI. +/// * `namespace` - The service's namespace. +/// * `name` - The service's name. +/// * `version` - The service's version. +/// # `communication_kind` - The service's communication kind. +/// # `communication_reference` - The service's communication reference. +pub async fn discover_service_using_chariott( + chariott_uri: &str, + namespace: &str, + name: &str, + version: &str, + communication_kind: &str, + communication_reference: &str, +) -> Result { + let mut client = ServiceRegistryClient::connect(chariott_uri.to_string()) + .await + .map_err(|e| Status::internal(e.to_string()))?; + + let request = Request::new(DiscoverRequest { + namespace: namespace.to_string(), + name: name.to_string(), + version: version.to_string(), + }); + + let response = client + .discover(request) + .await + .map_err(|error| Status::internal(error.to_string()))?; + + let service = response.into_inner().service.ok_or_else(|| Status::not_found("Did not find a service in Chariott with namespace '{namespace}', name '{name}' and version {version}"))?; + + if service.communication_kind != communication_kind + && service.communication_reference != communication_reference + { + return Err(Status::not_found( + "Did not find a service in Chariott with namespace '{namespace}', name '{name}' and version {version} that has communication kind '{communication_kind} and communication_reference '{communication_reference}''", + )); + } + + Ok(service.uri) +} + +/// If the 'containerize' feature is set, this function will modify the localhost URI to point to +/// the container's localhost DNS alias. Otherwise, returns the URI as a string. +/// +/// # Arguments +/// * `uri` - The uri to potentially modify. +pub fn get_uri(uri: &str) -> Result { + #[cfg(feature = "containerize")] + let uri = { + // Container env variable names. + let host_gateway_env_var: &str = "HOST_GATEWAY"; + let host_alias_env_var: &str = "LOCALHOST_ALIAS"; + + // Return an error if container env variables are not set. + let host_gateway = std::env::var(host_gateway_env_var).map_err(|err| { + Status::failed_precondition(format!( + "Unable to get environment var '{host_gateway_env_var}' with error: {err}" + )) + })?; + let host_alias = std::env::var(host_alias_env_var).map_err(|err| { + Status::failed_precondition(format!( + "Unable to get environment var '{host_alias_env_var}' with error: {err}" + )) + })?; + + uri.replace(&host_alias, &host_gateway) + }; + + Ok(uri.to_string()) +} + +/// Use Ibeji to discover the endpoint for a digital twin provider that satifies the requirements. +/// +/// # Arguments +/// * `invehicle_digitial_twin_service_uri` - In-vehicle digital twin service URI. +/// * `entity_id` - The matching entity id. +/// * `protocol` - The required protocol. +/// * `operations` - The required operations. +pub async fn discover_digital_twin_provider_using_ibeji( + invehicle_digitial_twin_service_uri: &str, + entity_id: &str, + protocol: &str, + operations: &[String], +) -> Result { + info!("Sending a find_by_id request for entity id {entity_id} to the In-Vehicle Digital Twin Service URI {invehicle_digitial_twin_service_uri}"); + + let mut client = + InvehicleDigitalTwinClient::connect(invehicle_digitial_twin_service_uri.to_string()) + .await + .map_err(|error| format!("{error}"))?; + let request = tonic::Request::new(FindByIdRequest { + id: entity_id.to_string(), + }); + let response = client + .find_by_id(request) + .await + .map_err(|error| error.to_string())?; + let response_inner = response.into_inner(); + debug!("Received the response for the find_by_id request"); + info!("response_payload: {:?}", response_inner.entity_access_info); + + match response_inner + .entity_access_info + .ok_or_else(|| "Did not find the entity".to_string())? + .endpoint_info_list + .iter() + .find(|endpoint_info| { + endpoint_info.protocol == protocol + && is_subset(operations, endpoint_info.operations.as_slice()) + }) + .cloned() + { + Some(mut result) => { + info!( + "Found a matching endpoint for entity id {entity_id} that has URI {}", + result.uri + ); + + result.uri = get_uri(&result.uri) + .map_err(|err| format!("Failed to get provider URI due to error: {err}"))?; + + Ok(result) + } + None => Err("Did not find an endpoint that met our requirements".to_string()), + } +} + +/// Is the provided subset a subset of the provided superset? +/// +/// # Arguments +/// * `subset` - The provided subset. +/// * `superset` - The provided superset. +fn is_subset(subset: &[String], superset: &[String]) -> bool { + subset.iter().all(|subset_member| { + superset + .iter() + .any(|supserset_member| subset_member == supserset_member) + }) +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/Cargo.toml new file mode 100644 index 0000000..ed42315 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "trailer_connected_provider" +version = "0.1.0" +edition = "2021" +license = "MIT" + +[dependencies] +digital-twin-model = { path = "../../digital-twin-model" } +digital_twin_providers_common = { path = "../common" } +env_logger = { workspace = true } +interfaces = { path = "../../../../proto_build"} +log = { workspace = true } +serde = { workspace = true } +serde_derive = { workspace = true } +serde_json = { workspace = true } +smart_trailer_interfaces = { path = "../../proto_build" } +tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal"] } +tonic = { workspace = true } diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/Dockerfile b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/Dockerfile new file mode 100644 index 0000000..f46e088 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/Dockerfile @@ -0,0 +1,74 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +# Comments are provided throughout this file to help you get started. +# If you need more help, visit the Dockerfile reference guide at +# https://docs.docker.com/engine/reference/builder/ + +################################################################################ +# Create a stage for building the application. + +ARG RUST_VERSION=1.72.1 +FROM docker.io/library/rust:${RUST_VERSION}-slim-bullseye AS build +ARG APP_NAME=trailer_connected_provider +WORKDIR /sdv + +COPY ./ . + +# Add Build dependencies. +RUN apt update -y && apt upgrade -y && apt install -y \ + cmake \ + libssl-dev \ + pkg-config \ + protobuf-compiler + +# Check that APP_NAME argument is valid. +RUN sanitized=$(echo "${APP_NAME}" | tr -dc '^[a-zA-Z_0-9-]+$'); \ +[ "$sanitized" = "${APP_NAME}" ] || { \ + echo "ARG 'APP_NAME' is invalid. APP_NAME='${APP_NAME}' sanitized='${sanitized}'"; \ + exit 1; \ +} + +# Build the application +RUN cargo build --release --bin "${APP_NAME}" + +# Copy the built application to working directory. +RUN cp ./target/release/"${APP_NAME}" /sdv/service + +################################################################################ +# Create a new stage for running the application that contains the minimal +# runtime dependencies for the application. This often uses a different base +# image from the build stage where the necessary files are copied from the build +# stage. +# +# The example below uses the debian bullseye image as the foundation for running the app. +# By specifying the "bullseye-slim" tag, it will also use whatever happens to be the +# most recent version of that tag when you build your Dockerfile. If +# reproducability is important, consider using a digest +# (e.g., debian@sha256:ac707220fbd7b67fc19b112cee8170b41a9e97f703f588b2cdbbcdcecdd8af57). +FROM docker.io/library/debian:bullseye-slim AS final + +# Create a non-privileged user that the app will run under. +# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user +ARG UID=10001 +RUN adduser \ + --disabled-password \ + --gecos "" \ + --home "/nonexistent" \ + --shell "/sbin/nologin" \ + --no-create-home \ + --uid "${UID}" \ + appuser +USER appuser + +WORKDIR /sdv + +# Copy the executable from the "build" stage. +COPY --from=build /sdv/service /sdv/ + +# Expose the port that the application listens on. +EXPOSE 4020 + +# What the container should run when it is started. +CMD ["/sdv/service"] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/src/main.rs new file mode 100644 index 0000000..219f2d2 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/src/main.rs @@ -0,0 +1,110 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +use digital_twin_model::trailer_v1; + +use digital_twin_providers_common::constants::chariott::{ + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, +}; +use digital_twin_providers_common::constants::{digital_twin_operation, digital_twin_protocol}; +use digital_twin_providers_common::utils::discover_service_using_chariott; +use env_logger::{Builder, Target}; +use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; +use interfaces::invehicle_digital_twin::v1::{EndpointInfo, EntityAccessInfo, RegisterRequest}; +use log::{debug, info, LevelFilter}; +use smart_trailer_interfaces::digital_twin_get_provider::v1::digital_twin_get_provider_server::DigitalTwinGetProviderServer; +use std::net::SocketAddr; +use tokio::signal; +use tonic::transport::Server; +use tonic::Status; +use trailer_connected_provider_impl::TrailerConnectedProviderImpl; + +mod trailer_connected_provider_impl; + +// TODO: These could be added in configuration +const CHARIOTT_SERVICE_DISCOVERY_URI: &str = "http://0.0.0.0:50000"; +const PROVIDER_AUTHORITY: &str = "0.0.0.0:4020"; + +/// Register the "is trailer connected" property's endpoint. +/// +/// # Arguments +/// * `invehicle_digital_twin_uri` - The In-Vehicle Digital Twin URI. +/// * `provider_uri` - The provider's URI. +async fn register_entity( + invehicle_digital_twin_uri: &str, + provider_uri: &str, +) -> Result<(), Status> { + let is_trailer_connected_endpoint_info = EndpointInfo { + protocol: digital_twin_protocol::GRPC.to_string(), + operations: vec![digital_twin_operation::GET.to_string()], + uri: provider_uri.to_string(), + context: trailer_v1::trailer::is_trailer_connected::ID.to_string(), + }; + let entity_access_info = EntityAccessInfo { + name: trailer_v1::trailer::is_trailer_connected::NAME.to_string(), + id: trailer_v1::trailer::is_trailer_connected::ID.to_string(), + description: trailer_v1::trailer::is_trailer_connected::DESCRIPTION.to_string(), + endpoint_info_list: vec![is_trailer_connected_endpoint_info], + }; + + let mut client = InvehicleDigitalTwinClient::connect(invehicle_digital_twin_uri.to_string()) + .await + .map_err(|e| Status::internal(e.to_string()))?; + let request = tonic::Request::new(RegisterRequest { + entity_access_info_list: vec![entity_access_info], + }); + let _response = client.register(request).await?; + + Ok(()) +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + // Set up logging. + Builder::new() + .filter(None, LevelFilter::Debug) + .target(Target::Stdout) + .init(); + + info!("The Provider has started."); + + let provider_uri = format!("http://{PROVIDER_AUTHORITY}"); + debug!("The Provider URI is {}", &provider_uri); + + // Setup the HTTP server. + let addr: SocketAddr = PROVIDER_AUTHORITY.parse()?; + let provider_impl = TrailerConnectedProviderImpl::default(); + let server_future = Server::builder() + .add_service(DigitalTwinGetProviderServer::new(provider_impl)) + .serve(addr); + info!("The HTTP server is listening on address '{PROVIDER_AUTHORITY}'"); + + // Get the In-vehicle Digital Twin Uri from the service discovery system + // This could be enhanced to add retries for robustness + let invehicle_digital_twin_uri = discover_service_using_chariott( + CHARIOTT_SERVICE_DISCOVERY_URI, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, + ) + .await?; + + debug!("Sending a register request to the In-Vehicle Digital Twin Service URI {invehicle_digital_twin_uri}"); + + // This could be enhanced to add retries for robustness + register_entity(&invehicle_digital_twin_uri, &provider_uri).await?; + server_future.await?; + + signal::ctrl_c() + .await + .expect("Failed to listen for control-c event"); + + info!("The Provider has completed."); + + Ok(()) +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/src/trailer_connected_provider_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/src/trailer_connected_provider_impl.rs new file mode 100644 index 0000000..8444a94 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/src/trailer_connected_provider_impl.rs @@ -0,0 +1,27 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +//! Module containing gRPC service implementation based on [`interfaces::digital_twin_get_provider.proto`]. +//! +//! Provides a gRPC endpoint for getting if the trailer is connected +use smart_trailer_interfaces::digital_twin_get_provider::v1::digital_twin_get_provider_server::DigitalTwinGetProvider; +use smart_trailer_interfaces::digital_twin_get_provider::v1::{GetRequest, GetResponse}; +use tonic::{Request, Response, Status}; + +/// Base structure for the Trailer Connected Provider gRPC service. +#[derive(Default)] +pub struct TrailerConnectedProviderImpl {} + +#[tonic::async_trait] +impl DigitalTwinGetProvider for TrailerConnectedProviderImpl { + /// This function returns the value of "is_trailer_connected" property + async fn get(&self, _request: Request) -> Result, Status> { + // For now, we assume that if this provider is active, the trailer is connected + // To expand this use case, we could simulate the trailer being disconnected as well + let get_response = GetResponse { + property_value: true, + }; + Ok(Response::new(get_response)) + } +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/Cargo.toml new file mode 100644 index 0000000..90747e7 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/Cargo.toml @@ -0,0 +1,29 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +[package] +name = "trailer_properties_provider" +version = "0.1.0" +edition = "2021" +license = "MIT" + +[dependencies] +digital-twin-model = { path = "../../digital-twin-model" } +digital_twin_providers_common = { path = "../common" } +env_logger = { workspace = true } +interfaces = { path = "../../../../proto_build"} +log = { workspace = true } +paho-mqtt = { workspace = true } +parking_lot = { workspace = true } +serde = { workspace = true } +serde_derive = { workspace = true } +serde_json = { workspace = true } +smart_trailer_interfaces = { path = "../../proto_build" } +strum = { workspace = true } +strum_macros = { workspace = true } +tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal"] } +tonic = { workspace = true } + +[features] +containerize = ["digital_twin_providers_common/containerize"] diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/Dockerfile b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/Dockerfile new file mode 100644 index 0000000..630cda5 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/Dockerfile @@ -0,0 +1,74 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +# Comments are provided throughout this file to help you get started. +# If you need more help, visit the Dockerfile reference guide at +# https://docs.docker.com/engine/reference/builder/ + +################################################################################ +# Create a stage for building the application. + +ARG RUST_VERSION=1.72.1 +FROM docker.io/library/rust:${RUST_VERSION}-slim-bullseye AS build +ARG APP_NAME=trailer_properties_provider +WORKDIR /sdv + +COPY ./ . + +# Add Build dependencies. +RUN apt update && apt upgrade -y && apt install -y \ + cmake \ + libssl-dev \ + pkg-config \ + protobuf-compiler + +# Check that APP_NAME argument is valid. +RUN sanitized=$(echo "${APP_NAME}" | tr -dc '^[a-zA-Z_0-9-]+$'); \ +[ "$sanitized" = "${APP_NAME}" ] || { \ + echo "ARG 'APP_NAME' is invalid. APP_NAME='${APP_NAME}' sanitized='${sanitized}'"; \ + exit 1; \ +} + +# Build the application +RUN cargo build --release --bin "${APP_NAME}" + +# Copy the built application to working directory. +RUN cp ./target/release/"${APP_NAME}" /sdv/service + +################################################################################ +# Create a new stage for running the application that contains the minimal +# runtime dependencies for the application. This often uses a different base +# image from the build stage where the necessary files are copied from the build +# stage. +# +# The example below uses the debian bullseye image as the foundation for running the app. +# By specifying the "bullseye-slim" tag, it will also use whatever happens to be the +# most recent version of that tag when you build your Dockerfile. If +# reproducability is important, consider using a digest +# (e.g., debian@sha256:ac707220fbd7b67fc19b112cee8170b41a9e97f703f588b2cdbbcdcecdd8af57). +FROM docker.io/library/debian:bullseye-slim AS final + +# Create a non-privileged user that the app will run under. +# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user +ARG UID=10001 +RUN adduser \ + --disabled-password \ + --gecos "" \ + --home "/nonexistent" \ + --shell "/sbin/nologin" \ + --no-create-home \ + --uid "${UID}" \ + appuser +USER appuser + +WORKDIR /sdv + +# Copy the executable from the "build" stage. +COPY --from=build /sdv/service /sdv/ + +# Expose the port that the application listens on. +EXPOSE 4030 + +# What the container should run when it is started. +CMD ["/sdv/service"] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/src/main.rs new file mode 100644 index 0000000..f8178b8 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/src/main.rs @@ -0,0 +1,170 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +mod trailer_properties_provider_impl; + +use std::net::SocketAddr; + +use digital_twin_model::trailer_v1; +use digital_twin_providers_common::constants::chariott::{ + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, +}; +use digital_twin_providers_common::constants::{digital_twin_operation, digital_twin_protocol}; +use digital_twin_providers_common::utils::discover_service_using_chariott; +use env_logger::{Builder, Target}; +use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; +use interfaces::invehicle_digital_twin::v1::{EndpointInfo, EntityAccessInfo, RegisterRequest}; +use interfaces::module::managed_subscribe::v1::managed_subscribe_callback_server::ManagedSubscribeCallbackServer; +use log::{debug, info, warn, LevelFilter}; +use tokio::signal; +use tokio::sync::watch; +use tokio::time::{sleep, Duration}; +use tonic::transport::Server; +use tonic::Status; + +use crate::trailer_properties_provider_impl::TrailerPropertiesProviderImpl; + +// TODO: These could be added in configuration +const CHARIOTT_SERVICE_DISCOVERY_URI: &str = "http://0.0.0.0:50000"; +const PROVIDER_AUTHORITY: &str = "0.0.0.0:4030"; + +const DEFAULT_MIN_INTERVAL_MS: u64 = 10000; // 10 seconds + +/// Register the trailer weight property's endpoint. +/// +/// # Arguments +/// * `invehicle_digital_twin_uri` - The In-Vehicle Digital Twin URI. +/// * `provider_uri` - The provider's URI. +async fn register_trailer_weight( + invehicle_digital_twin_uri: &str, + provider_uri: &str, +) -> Result<(), Status> { + let endpoint_info = EndpointInfo { + protocol: digital_twin_protocol::GRPC.to_string(), + operations: vec![digital_twin_operation::MANAGEDSUBSCRIBE.to_string()], + uri: provider_uri.to_string(), + context: "GetSubscriptionInfo".to_string(), + }; + + let entity_access_info = EntityAccessInfo { + name: trailer_v1::trailer::trailer_weight::NAME.to_string(), + id: trailer_v1::trailer::trailer_weight::ID.to_string(), + description: trailer_v1::trailer::trailer_weight::DESCRIPTION.to_string(), + endpoint_info_list: vec![endpoint_info], + }; + + let mut client = InvehicleDigitalTwinClient::connect(invehicle_digital_twin_uri.to_string()) + .await + .map_err(|e| Status::internal(e.to_string()))?; + let request = tonic::Request::new(RegisterRequest { + entity_access_info_list: vec![entity_access_info], + }); + let _response = client.register(request).await?; + + Ok(()) +} + +/// Start the trailer weight data stream. +/// +/// # Arguments +/// `min_interval_ms` - minimum frequency for data stream. +fn start_trailer_weight_data_stream(min_interval_ms: u64) -> watch::Receiver { + debug!("Starting the Provider's trailer weight data stream."); + let mut weight: i32 = 1000; + let (sender, reciever) = watch::channel(weight); + tokio::spawn(async move { + let mut is_weight_increasing: bool = true; + loop { + debug!( + "Recording new value for {} of {weight}", + trailer_v1::trailer::trailer_weight::ID + ); + + if let Err(err) = sender.send(weight) { + warn!("Failed to get new value due to '{err:?}'"); + break; + } + + debug!("Completed the publish request"); + + // Calculate the new weight. + // It bounces back and forth between 1000 and 2000 kilograms. + // It increases in increments of 500 to simulate a large amount of cargo being loaded + // And decreases in increments of 50 to simulate smaller deliveries being made + if is_weight_increasing { + if weight == 2000 { + is_weight_increasing = false; + weight -= 50; + } else { + weight += 500; + } + } else if weight == 1000 { + is_weight_increasing = true; + weight += 500; + } else { + weight -= 50; + } + + sleep(Duration::from_millis(min_interval_ms)).await; + } + }); + + reciever +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + // Setup logging. + Builder::new() + .filter(None, LevelFilter::Info) + .target(Target::Stdout) + .init(); + + info!("The Provider has started."); + + let provider_uri = format!("http://{PROVIDER_AUTHORITY}"); // Devskim: ignore DS137138 + + // Get the In-vehicle Digital Twin Uri from the service discovery system + // This could be enhanced to add retries for robustness + let invehicle_digital_twin_uri = discover_service_using_chariott( + CHARIOTT_SERVICE_DISCOVERY_URI, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, + ) + .await?; + + debug!("The Provider retrieved Chariott's Service Discovery URI."); + + // Start mock data stream. + let data_stream = start_trailer_weight_data_stream(DEFAULT_MIN_INTERVAL_MS); + debug!("The Provider has started the trailer weight data stream."); + + // Setup provider management cb endpoint. + let provider = TrailerPropertiesProviderImpl::new(data_stream, DEFAULT_MIN_INTERVAL_MS); + + // Start service. + let addr: SocketAddr = PROVIDER_AUTHORITY.parse()?; + let server_future = Server::builder() + .add_service(ManagedSubscribeCallbackServer::new(provider)) + .serve(addr); + + // This could be enhanced with retries for robustness + register_trailer_weight(&invehicle_digital_twin_uri, &provider_uri).await?; + debug!("The Provider has registered with Ibeji."); + + server_future.await?; + + signal::ctrl_c() + .await + .expect("Failed to listen for control-c event"); + + info!("The Provider has completed."); + + Ok(()) +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/src/trailer_properties_provider_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/src/trailer_properties_provider_impl.rs new file mode 100644 index 0000000..5ea60a1 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/src/trailer_properties_provider_impl.rs @@ -0,0 +1,259 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +use std::collections::HashMap; +use std::str::FromStr; +use std::sync::Arc; + +use interfaces::module::managed_subscribe::v1::managed_subscribe_callback_server::ManagedSubscribeCallback; +use interfaces::module::managed_subscribe::v1::{ + CallbackPayload, TopicManagementRequest, TopicManagementResponse, +}; + +use digital_twin_model::{trailer_v1, Metadata}; +use digital_twin_providers_common::utils; +use log::{debug, info, warn}; +use paho_mqtt as mqtt; +use parking_lot::RwLock; +use serde_derive::{Deserialize, Serialize}; +use strum_macros::{Display, EnumString}; +use tokio::sync::{mpsc, watch}; +use tokio::time::{sleep, Duration}; +use tonic::{Request, Response, Status}; + +const MQTT_CLIENT_ID: &str = "trailer-properties-publisher"; +const FREQUENCY_MS: &str = "frequency_ms"; + +#[derive(Debug, Serialize, Deserialize)] +struct TrailerWeightProperty { + #[serde(rename = "TrailerWeight")] + trailer_weight: trailer_v1::trailer::trailer_weight::TYPE, + #[serde(rename = "$metadata")] + metadata: Metadata, +} + +/// Actions that are returned from the Pub Sub Service. +#[derive(Clone, EnumString, Eq, Display, Debug, PartialEq)] +pub enum ProviderAction { + #[strum(serialize = "PUBLISH")] + Publish, + + #[strum(serialize = "STOP_PUBLISH")] + StopPublish, +} + +#[derive(Debug)] +pub struct TopicInfo { + topic: String, + stop_channel: mpsc::Sender, +} + +#[derive(Debug)] +pub struct TrailerPropertiesProviderImpl { + pub data_stream: watch::Receiver, + pub min_interval_ms: u64, + entity_map: Arc>>>, +} + +/// Create the JSON for the trailer weight property. +/// +/// # Arguments +/// * `trailer_weight` - The trailer weight value. +fn create_property_json(trailer_weight: i32) -> String { + let metadata = Metadata { + model: trailer_v1::trailer::trailer_weight::ID.to_string(), + }; + + let property: TrailerWeightProperty = TrailerWeightProperty { + trailer_weight, + metadata, + }; + + serde_json::to_string(&property).unwrap() +} + +/// Publish a message to a MQTT broker located. +/// +/// # Arguments +/// `broker_uri` - The MQTT broker's URI. +/// `topic` - The topic to publish to. +/// `content` - The message to publish. +fn publish_message(broker_uri: &str, topic: &str, content: &str) -> Result<(), String> { + let create_opts = mqtt::CreateOptionsBuilder::new() + .server_uri(broker_uri) + .client_id(MQTT_CLIENT_ID.to_string()) + .finalize(); + + let client = mqtt::Client::new(create_opts) + .map_err(|err| format!("Failed to create the client due to '{err:?}'"))?; + + let conn_opts = mqtt::ConnectOptionsBuilder::new() + .keep_alive_interval(Duration::from_secs(30)) + .clean_session(true) + .finalize(); + + let _connect_response = client + .connect(conn_opts) + .map_err(|err| format!("Failed to connect due to '{err:?}")); + + let msg = mqtt::Message::new(topic, content, mqtt::types::QOS_1); + if let Err(err) = client.publish(msg) { + return Err(format!("Failed to publish message due to '{err:?}")); + } + + if let Err(err) = client.disconnect(None) { + warn!("Failed to disconnect from topic '{topic}' on broker {broker_uri} due to {err:?}"); + } + + Ok(()) +} + +impl TrailerPropertiesProviderImpl { + /// Initializes provider with entities relevant to itself. + /// + /// # Arguments + /// * `data_stream` - Receiver for data stream for entity. + /// * `min_interval_ms` - The frequency of the data coming over the data stream. + pub fn new(data_stream: watch::Receiver, min_interval_ms: u64) -> Self { + // Initialize entity map. + let mut entity_map = HashMap::new(); + + // Insert entry for entity id's associated with provider. + entity_map.insert( + trailer_v1::trailer::trailer_weight::ID.to_string(), + Vec::new(), + ); + + // Create new instance. + TrailerPropertiesProviderImpl { + data_stream, + min_interval_ms, + entity_map: Arc::new(RwLock::new(entity_map)), + } + } + + /// Handles the 'PUBLISH' action from the callback. + /// + /// # Arguments + /// `payload` - Payload sent with the 'PUBLISH' action. + pub fn handle_publish_action(&self, payload: CallbackPayload) { + // Get payload information. + let topic = payload.topic; + let constraints = payload.constraints; + let min_interval_ms = self.min_interval_ms; + + // This should not be empty. + let mut subscription_info = payload.subscription_info.unwrap(); + + subscription_info.uri = utils::get_uri(&subscription_info.uri).unwrap(); + + // Create stop publish channel. + let (sender, mut reciever) = mpsc::channel(10); + + // Create topic info. + let topic_info = TopicInfo { + topic: topic.clone(), + stop_channel: sender, + }; + + // Record new topic in entity map. + { + let mut entity_lock = self.entity_map.write(); + let get_result = entity_lock.get_mut(&payload.entity_id); + get_result.unwrap().push(topic_info); + } + + let data_stream = self.data_stream.clone(); + + // Start thread for new topic. + tokio::spawn(async move { + // Get constraints information. + let mut frequency_ms = min_interval_ms; + + for constraint in constraints { + if constraint.r#type == *FREQUENCY_MS { + frequency_ms = u64::from_str(&constraint.value).unwrap(); + }; + } + + loop { + // See if we need to shutdown. + if reciever.try_recv() == Err(mpsc::error::TryRecvError::Disconnected) { + info!("Shutdown thread for {topic}."); + return; + } + + // Get data from stream at the current instant. + let data = *data_stream.borrow(); + let content = create_property_json(data); + let broker_uri = subscription_info.uri.clone(); + + // Publish message to broker. + info!( + "Publish to {topic} for {} with value {data}", + trailer_v1::trailer::trailer_weight::NAME + ); + + if let Err(err) = publish_message(&broker_uri, &topic, &content) { + warn!("Publish failed due to '{err:?}'"); + break; + } + + debug!("Completed publish to {topic}."); + + // Sleep for requested amount of time. + sleep(Duration::from_millis(frequency_ms)).await; + } + }); + } + + /// Handles the 'STOP_PUBLISH' action from the callback. + /// + /// # Arguments + /// `payload` - Payload sent with the 'STOP_PUBLISH' action. + pub fn handle_stop_publish_action(&self, payload: CallbackPayload) { + let topic_info: TopicInfo; + + let mut entity_lock = self.entity_map.write(); + let get_result = entity_lock.get_mut(&payload.entity_id); + + let topics = get_result.unwrap(); + + // Check to see if topic exists. + if let Some(index) = topics.iter_mut().position(|t| t.topic == payload.topic) { + // Remove topic. + topic_info = topics.swap_remove(index); + + // Stop publishing to removed topic. + drop(topic_info.stop_channel); + } else { + warn!("No topic found matching {}", payload.topic); + } + } +} + +#[tonic::async_trait] +impl ManagedSubscribeCallback for TrailerPropertiesProviderImpl { + /// Callback for a provider, will process a provider action. + /// + /// # Arguments + /// * `request` - The request with the action and associated payload. + async fn topic_management_cb( + &self, + request: Request, + ) -> Result, Status> { + let inner = request.into_inner(); + let action = inner.action; + let payload = inner.payload.unwrap(); + + let provider_action = ProviderAction::from_str(&action).unwrap(); + + match provider_action { + ProviderAction::Publish => Self::handle_publish_action(self, payload), + ProviderAction::StopPublish => Self::handle_stop_publish_action(self, payload), + } + + Ok(Response::new(TopicManagementResponse {})) + } +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/interfaces/digital_twin_get_provider.proto b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/interfaces/digital_twin_get_provider.proto new file mode 100644 index 0000000..9f252ea --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/interfaces/digital_twin_get_provider.proto @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +// Digital Twin "Get" Provider definition +// +// The protobuf definitions for a Digital Twin Provider which only supports synchronous +// "Get" operation + +syntax = "proto3"; +package digital_twin_get_provider; + +// The service entry point to the Digital Twin Get Provider. This simple provider has one method +// to get the property +service DigitalTwinGetProvider { + // Method which gets the value of the specified property + rpc Get (GetRequest) returns (GetResponse); +} + +message GetRequest { + string entity_id = 1; +} + +message GetResponse { + bool property_value = 1; +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/Cargo.toml new file mode 100644 index 0000000..716307c --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/Cargo.toml @@ -0,0 +1,17 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +[package] +name = "smart_trailer_interfaces" +version = "0.1.0" +edition = "2021" +license = "MIT" + +[dependencies] +prost = { workspace = true } +tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } +tonic = { workspace = true } + +[build-dependencies] +tonic-build = { workspace = true } diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/build.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/build.rs new file mode 100644 index 0000000..771678c --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/build.rs @@ -0,0 +1,8 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +fn main() -> Result<(), Box> { + tonic_build::compile_protos("../interfaces/digital_twin_get_provider.proto")?; + Ok(()) +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/src/lib.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/src/lib.rs new file mode 100644 index 0000000..a9f07e7 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/src/lib.rs @@ -0,0 +1,10 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +pub mod digital_twin_get_provider { + pub mod v1 { + #![allow(clippy::derive_partial_eq_without_eq)] + tonic::include_proto!("digital_twin_get_provider"); + } +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_ankaios.sh b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_ankaios.sh new file mode 100644 index 0000000..694e614 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_ankaios.sh @@ -0,0 +1,113 @@ +#!/bin/bash +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +set -e + +# This script requires jq and grpcurl to be installed +# These are included in the ankaios devcontainer, but if you want to run it outside +# you could add the commands to install them here +# Check if grpcurl is installed +if !command -v grpcurl &> /dev/null +then + echo "grpcurl could not be found; please install it and run again" + exit 1 +fi + +# Check if jq is installed +if !command -v jq &> /dev/null +then + echo "jq could not be found; please install it and run again" + exit 1 +fi + +# Get the directory of where the script is located +# All relative paths will be in relation to this +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +# The Ibeji gRPC server address +SERVER="0.0.0.0:5010" + +# The Ibeji FindById gRPC service and method +SERVICE="invehicle_digital_twin.InvehicleDigitalTwin" +METHOD="FindById" + +# The request body: The IsTrailerConnected signal +BODY='{"id":"dtmi:sdv:Trailer:IsTrailerConnected;1"}' + +PROTO_PATH="${SCRIPT_DIR}/../../../interfaces/invehicle_digital_twin/v1" +PROTO="invehicle_digital_twin.proto" + +EXPECTED_PROTOCOL="grpc" +EXPECTED_OPERATION="get" + +# Call FindById in a loop until something is returned +while true; do + STATUS=0 + OUTPUT=$(grpcurl -import-path $PROTO_PATH -proto $PROTO -plaintext -d "$BODY" $SERVER $SERVICE/$METHOD 2>&1) || STATUS=$? + + # Check if the output contains entityAccessInfo (the response from Ibeji when a provider is found) + if echo "$OUTPUT" | grep -iq "EntityAccessInfo" + then + echo "The FindById call was successful. Output:" + echo "$OUTPUT" + break + else + echo "Provider not found. Status Code '$STATUS' Error '$OUTPUT'" + echo "The trailer is not connected. Retrying..." + sleep 5 + fi +done + +# Parse the output as a JSON object using jq and extract the endpoints +ENDPOINTS=$(echo $OUTPUT | jq -c '.entityAccessInfo.endpointInfoList[]') + +# Loop through each endpoint +for ENDPOINT in $ENDPOINTS +do + # Check if protocol is what we expect + if [[ $(echo $ENDPOINT | jq -r '.protocol' | tr '[:upper:]' '[:lower:]') == $EXPECTED_PROTOCOL ]] + then + OPERATIONS=$(echo $ENDPOINT | jq -r '.operations[]') + # Loop through each operation and check if this endpoint supports the expected operation + for OPERATION in $OPERATIONS + do + if [[ $(echo $OPERATION | tr '[:upper:]' '[:lower:]') == $EXPECTED_OPERATION ]] + then + URI=$(echo $ENDPOINT | jq -r '.uri') + CONTEXT=$(echo $ENDPOINT | jq -r '.context') + + # We need the authority for the server, so remove the http:// + get_server=$(echo "$URI" | sed 's/http:\/\///g') + + # Call get for the "trailer connected provider" to check if it's connected + GET_PROTO_PATH="${SCRIPT_DIR}/../interfaces" + GET_PROTO="digital_twin_get_provider.proto" + GET_SERVER=$get_server + GET_SERVICE="digital_twin_get_provider.DigitalTwinGetProvider" + GET_METHOD="Get" + GET_OUTPUT=$(grpcurl -import-path $GET_PROTO_PATH -proto $GET_PROTO -plaintext $GET_SERVER $GET_SERVICE/$GET_METHOD 2>&1) + + # For now, this always returns true, this can be expanded to simulate connecting and disconnecting the trailer + if [[ $(echo $GET_OUTPUT | jq -r '.propertyValue') ]] + then + echo "Trailer is connected! Starting workloads to manage it" + + # Start up the other workloads using podman + CFG_PROVIDER=$'image: sdvblueprint.azurecr.io/sdvblueprint/in-vehicle-stack/trailer_properties_provider:0.1.0\ncommandOptions: ["--network", "host", "--name", "trailer_properties_provider"]' + CFG_APP=$'image: sdvblueprint.azurecr.io/sdvblueprint/in-vehicle-stack/smart_trailer_application:0.1.0\ncommandOptions: ["--network", "host", "--name", "smart_trailer_application"]' + + ank run workload trailer_properties_provider --runtime podman --config "$CFG_PROVIDER" --agent agent_A + ank run workload smart_trailer_application --runtime podman --config "$CFG_APP" --agent agent_A + + echo "Called Ankaios to start the Trailer Properties Digital Twin Provider and Smart Trailer Application" + echo "Check Ankaios status with 'ank get workloads'" + exit 0 + fi + fi + done + fi +done +# We didn't find an endpoint which satisfied our conditions +exit 1 \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_bluechi.sh b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_bluechi.sh new file mode 100644 index 0000000..7089d7e --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_bluechi.sh @@ -0,0 +1,112 @@ +#!/bin/bash +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +set -e + +# This script requires jq and grpcurl to be installed +# These are included in the bluechi devcontainer, but if you want to run it outside +# you could add the commands to install them here +# Check if grpcurl is installed +if !command -v grpcurl &> /dev/null +then + echo "grpcurl could not be found; please install it and run again" + exit 1 +fi + +# Check if jq is installed +if !command -v jq &> /dev/null +then + echo "jq could not be found; please install it and run again" + exit 1 +fi + +# Get the directory of where the script is located +# All relative paths will be in relation to this +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +# The Ibeji gRPC server address +SERVER="0.0.0.0:5010" + +# The Ibeji FindById gRPC service and method +SERVICE="invehicle_digital_twin.InvehicleDigitalTwin" +METHOD="FindById" + +# The request body: The IsTrailerConnected signal +BODY='{"id":"dtmi:sdv:Trailer:IsTrailerConnected;1"}' + +PROTO_PATH="${SCRIPT_DIR}/../../../interfaces/invehicle_digital_twin/v1" +PROTO="invehicle_digital_twin.proto" + +EXPECTED_PROTOCOL="grpc" +EXPECTED_OPERATION="get" + +# Call FindById in a loop until something is returned +while true; do + STATUS=0 + OUTPUT=$(grpcurl -import-path $PROTO_PATH -proto $PROTO -plaintext -d "$BODY" $SERVER $SERVICE/$METHOD 2>&1) || STATUS=$? + + # Check if the output contains entityAccessInfo (the response from Ibeji when a provider is found) + if echo "$OUTPUT" | grep -iq "EntityAccessInfo" + then + echo "The FindById call was successful. Output:" + echo "$OUTPUT" + break + else + echo "Provider not found. Status Code '$STATUS' Error '$OUTPUT'" + echo "The trailer is not connected. Retrying..." + sleep 5 + fi +done + +# Parse the output as a JSON object using jq and extract the endpoints +ENDPOINTS=$(echo $OUTPUT | jq -c '.entityAccessInfo.endpointInfoList[]') + +# Loop through each endpoint +for ENDPOINT in $ENDPOINTS +do + # Check if protocol is what we expect + if [[ $(echo $ENDPOINT | jq -r '.protocol' | tr '[:upper:]' '[:lower:]') == $EXPECTED_PROTOCOL ]] + then + OPERATIONS=$(echo $ENDPOINT | jq -r '.operations[]') + # Loop through each operation and check if this endpoint supports the expected operation + for OPERATION in $OPERATIONS + do + if [[ $(echo $OPERATION | tr '[:upper:]' '[:lower:]') == $EXPECTED_OPERATION ]] + then + URI=$(echo $ENDPOINT | jq -r '.uri') + CONTEXT=$(echo $ENDPOINT | jq -r '.context') + + # We need the authority for the server, so remove the http:// + get_server=$(echo "$URI" | sed 's/http:\/\///g') + + # Call get for the "trailer connected provider" to check if it's connected + GET_PROTO_PATH="${SCRIPT_DIR}/../interfaces" + GET_PROTO="digital_twin_get_provider.proto" + GET_SERVER=$get_server + GET_SERVICE="digital_twin_get_provider.DigitalTwinGetProvider" + GET_METHOD="Get" + GET_OUTPUT=$(grpcurl -import-path $GET_PROTO_PATH -proto $GET_PROTO -plaintext $GET_SERVER $GET_SERVICE/$GET_METHOD 2>&1) + + # For now, this always returns true, this can be expanded to simulate connecting and disconnecting the trailer + if [[ $(echo $GET_OUTPUT | jq -r '.propertyValue') ]] + then + echo "Trailer is connected! Starting workloads to manage it" + + # The service.kube and service.yml files for these two services are included in the BlueChi devcontainer + # See /etc/containers/systemd for these files + # Start up the other workloads using systemctl + systemctl start trailer-properties + systemctl start smart-trailer + + echo "Called systemctl to start the Trailer Properties Digital Twin Provider and Smart Trailer Application" + echo "Check systemctl status with 'systemctl status trailer-properties' and 'systemctl status smart-trailer' for status" + exit 0 + fi + fi + done + fi +done +# We didn't find an endpoint which satisfied our conditions +exit 1 \ No newline at end of file From 633516229f5c0a06d63896e0639a655cba3e162b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kilian=20K=C3=B6ppchen?= <373318+stubb@users.noreply.github.com> Date: Tue, 28 Nov 2023 20:24:32 +0100 Subject: [PATCH 02/38] Adopt modell for wheelchair assistant use case Replace trailer by car digital twin modell. --- .../digital-twin-model/dtdl/car.json | 54 +++++++++++++++++++ .../digital-twin-model/dtdl/trailer.json | 24 --------- .../digital-twin-model/src/car_v1.rs | 51 ++++++++++++++++++ .../digital-twin-model/src/lib.rs | 2 +- .../digital-twin-model/src/trailer_v1.rs | 23 -------- 5 files changed, 106 insertions(+), 48 deletions(-) create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/car.json delete mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/trailer.json create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs delete mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/trailer_v1.rs diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/car.json b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/car.json new file mode 100644 index 0000000..3d5730f --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/car.json @@ -0,0 +1,54 @@ +[ + { + "@context": [ + "dtmi:dtdl:context;3" + ], + "@type": "Interface", + "@id": "dtmi:sdv:Car;1", + "description": "The car used by a wheelchair driver", + "contents": [ + { + "@type": "Property", + "@id": "dtmi:sdv:Car:IsDoorOpen;1", + "name": "IsDoorOpen", + "description": "Is door open?", + "schema": "boolean" + }, + { + "@type": "Property", + "@id": "dtmi:sdv:Car:IsSteeringwheelInAssistPosition;1", + "name": "IsSteeringwheelInAssistPosition", + "description": "Is steering wheel in assist position?", + "schema": "boolean" + }, + { + "@type": "Property", + "@id": "dtmi:sdv:Car:IsCarRunning;1", + "name": "IsCarRunning", + "description": "Is car running?", + "schema": "boolean" + }, + { + "@type": "Property", + "@id": "dtmi:sdv:Car:IsSeatInAssistPosition;1", + "name": "IsSeatInAssistPosition", + "description": "Is seat in assist position?", + "schema": "boolean" + }, + { + "@type": "Property", + "@id": "dtmi:sdv:Car:IsCarUnlocked;1", + "name": "IsCarUnlocked", + "description": "Is car unlocked?", + "schema": "boolean" + }, + { + "@type": "Property", + "@id": "dtmi:sdv:Car:WheelchairDistance;1", + "name": "WheelchairDistance", + "description": "Distance of wheelchair to car in cm", + "schema": "integer" + } + ] + } +] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/trailer.json b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/trailer.json deleted file mode 100644 index f291076..0000000 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/trailer.json +++ /dev/null @@ -1,24 +0,0 @@ -[ - { - "@context": ["dtmi:dtdl:context;3"], - "@type": "Interface", - "@id": "dtmi:sdv:Trailer;1", - "description": "Trailer used for transporting cargo", - "contents": [ - { - "@type": "Property", - "@id": "dtmi:sdv:Trailer:Weight;1", - "name": "TrailerWeight", - "description": "The weight of the trailer", - "schema": "integer" - }, - { - "@type": "Property", - "@id": "dtmi:sdv:Trailer:IsTrailerConnected;1", - "name": "IsTrailerConnected", - "description": "Is trailer connected?", - "schema": "boolean" - } - ] - } -] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs new file mode 100644 index 0000000..0a38bfc --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs @@ -0,0 +1,51 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +// Note: This code was manually written based on the structure of the +// vehicle model in "../dtdl/car.json" +// In the future this code could be generated from a DTDL spec. + +pub mod car { + pub mod is_car_door_open { + pub const ID: &str = "dtmi:sdv:Car:IsDoorOpen;1"; + pub const NAME: &str = "IsDoorOpen"; + pub const DESCRIPTION: &str = "Is door open?"; + pub type TYPE = bool; + } + + pub mod is_car_steeringwheel_in_assist_position { + pub const ID: &str = "dtmi:sdv:Car:IsSteeringwheelInAssistPosition;1"; + pub const NAME: &str = "IsSteeringwheelInAssistPosition"; + pub const DESCRIPTION: &str = "Is steering wheel in assist position?"; + pub type TYPE = bool; + } + + pub mod is_car_running { + pub const ID: &str = "dtmi:sdv:Car:IsCarRunning;1"; + pub const NAME: &str = "IsCarRunning"; + pub const DESCRIPTION: &str = "Is car running?"; + pub type TYPE = bool; + } + + pub mod is_car_seat_in_assist_position { + pub const ID: &str = "dtmi:sdv:Car:IsSeatInAssistPosition;1"; + pub const NAME: &str = "IsSeatInAssistPosition"; + pub const DESCRIPTION: &str = "Is seat in assist position?"; + pub type TYPE = bool; + } + + pub mod is_car_unlocked { + pub const ID: &str = "dtmi:sdv:Car:IsCarUnlocked;1"; + pub const NAME: &str = "IsCarUnlocked"; + pub const DESCRIPTION: &str = "Is car unlocked?"; + pub type TYPE = bool; + } + + pub mod car_wheelchair_distance { + pub const ID: &str = "dtmi:sdv:Car:WheelchairDistance;1"; + pub const NAME: &str = "WheelchairDistance"; + pub const DESCRIPTION: &str = "Distance of wheelchair to car in cm"; + pub type TYPE = i32; + } +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/lib.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/lib.rs index d09afad..ce89701 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/lib.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/lib.rs @@ -2,7 +2,7 @@ // Licensed under the MIT license. // SPDX-License-Identifier: MIT -pub mod trailer_v1; +pub mod car_v1; use serde_derive::{Deserialize, Serialize}; diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/trailer_v1.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/trailer_v1.rs deleted file mode 100644 index 0391b88..0000000 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/trailer_v1.rs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -// Note: This code was manually written based on the structure of the -// vehicle model in "../dtdl/trailer.json" -// In the future this code could be generated from a DTDL spec. - -pub mod trailer { - pub mod trailer_weight { - pub const ID: &str = "dtmi:sdv:Trailer:Weight;1"; - pub const NAME: &str = "TrailerWeight"; - pub const DESCRIPTION: &str = "The weight of the trailer"; - pub type TYPE = i32; - } - - pub mod is_trailer_connected { - pub const ID: &str = "dtmi:sdv:Trailer:IsTrailerConnected;1"; - pub const NAME: &str = "IsTrailerConnected"; - pub const DESCRIPTION: &str = "Is trailer connected?"; - pub type TYPE = bool; - } -} From 68ad7334e96ee38e3adfdc864b315da9396c3a36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kilian=20K=C3=B6ppchen?= <373318+stubb@users.noreply.github.com> Date: Tue, 28 Nov 2023 21:28:31 +0100 Subject: [PATCH 03/38] Add wheelchair assistant state Add the state to the twin modell with states init, open, hold and drive --- .../digital-twin-model/dtdl/car.json | 7 +++++++ .../digital-twin-model/src/car_v1.rs | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/car.json b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/car.json index 3d5730f..5690c6a 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/car.json +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/car.json @@ -48,6 +48,13 @@ "name": "WheelchairDistance", "description": "Distance of wheelchair to car in cm", "schema": "integer" + }, + { + "@type": "Property", + "@id": "dtmi:sdv:Car:WheelchairAssistantState;1", + "name": "WheelchairAssistantState", + "description": "Wheelchair assistant state. One of INIT, OPEN, HOLD, DRIVE", + "schema": "enum" } ] } diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs index 0a38bfc..8820bf0 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs @@ -6,6 +6,13 @@ // vehicle model in "../dtdl/car.json" // In the future this code could be generated from a DTDL spec. +enum WheelchairAssistantState { + INIT, + OPEN, + HOLD, + DRIVE +} + pub mod car { pub mod is_car_door_open { pub const ID: &str = "dtmi:sdv:Car:IsDoorOpen;1"; @@ -48,4 +55,11 @@ pub mod car { pub const DESCRIPTION: &str = "Distance of wheelchair to car in cm"; pub type TYPE = i32; } + + pub mod car_wheelchair_assistant_state { + pub const ID: &str = "dtmi:sdv:Car:WheelchairAssistantState;1"; + pub const NAME: &str = "WheelchairAssistantState"; + pub const DESCRIPTION: &str = "Wheelchair assistant state. One of INIT, OPEN, HOLD, DRIVE"; + pub type TYPE = WheelchairAssistantState; + } } From 2a39a2011780f9cfc7d325ebf0e078f31207c5b5 Mon Sep 17 00:00:00 2001 From: Enrico Walther Date: Tue, 28 Nov 2023 13:11:32 +0100 Subject: [PATCH 04/38] Add wheelchair scenario documentation. --- README.md | 37 ++++++++++++++++-- docs/diagrams/wheel_chair_scenario.png | Bin 61732 -> 0 bytes .../diagrams/wheel_assistant_states.png | Bin 0 -> 67596 bytes .../diagrams/wheel_chair_scenario.png | Bin 0 -> 152344 bytes 4 files changed, 34 insertions(+), 3 deletions(-) delete mode 100644 docs/diagrams/wheel_chair_scenario.png create mode 100644 docs/wheelchair_assistant_use_case/diagrams/wheel_assistant_states.png create mode 100644 docs/wheelchair_assistant_use_case/diagrams/wheel_chair_scenario.png diff --git a/README.md b/README.md index 9e455a5..70cd381 100644 --- a/README.md +++ b/README.md @@ -50,15 +50,46 @@ The first diagrams in the [Eclipse Ankaios](./eclipse-ankaios/README.md) and [Ec The in-vehicle-stack is started with Eclipse Chariott, Ibeji, Agemo, Freyja, and an Eclipse Mosquitto MQTT broker inside the orchestrator environment. -#### Dynamic Orchestration +##### Dynamic Orchestration This use case demonstrates a simple example of dynamic orchestration. A [script](./in-vehicle-stack/scenarios/smart_trailer_use_case/scripts/) (one implemented for each orchestrator) will be run to monitor Ibeji and detect when the trailer is connected. The script will continuously poll for the "Trailer Connected" Digital Twin Provider, and print "NotFound" until it is started. You can simulate the trailer being connected to the vehicle by starting the ["Trailer Connected" Digital Twin Provider](./in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/). This provider will register itself with Ibeji, the script will detect this change, and start up the ["Trailer Properties" Digital Twin Provider](./in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/) and the [Smart Trailer Application](./in-vehicle-stack/scenarios/smart_trailer_use_case/applications/smart_trailer_application/). This shows a simple example of reacting to an event in the vehicle by starting up other workloads. -#### Trailer Applications +##### Trailer Applications The Trailer Properties Provider supports the ManagedSubscribe operation so that the Smart Trailer Application can specify that it wants to receive the `TrailerWeight` property's value every 10 seconds. Using the provided configuration, Freyja is configured to sync the `TrailerWeight` every 3 seconds to a mocked cloud endpoint (which will log the signal data on standard output). See the [Cloud Connectivity Doc](./docs/in-vehicle-stack/azure-cloud-connection.md) for instructions to synchronize signals to an Azure Digital Twins instance in the cloud. The [Digital Twin Model](./in-vehicle-stack/scenarios/smart_trailer_use_case/digital-twin-model/dtdl/trailer.json) defines the digital twin model for the trailer, which is used as a reference for the Digital Twin Providers and Applications. -#### Run the use case +##### Run the use case Once you've chosen an orchestrator and gone through their environment setup steps, please refer to [Ankaios's Dev Environment README](./eclipse-ankaios/README.md#startup-check-before-development) or [BlueChi's Dev Environment README](./eclipse-bluechi/README.md#running-the-smart-trailer-example-with-bluechis-devcontainer) for instructions on running this scenario. +#### Wheelchair Assistant Scenario Overview + +This system demonstrates a full driving scenario, starting from arriving at the car, getting in ,driving, getting out and leaving the car with maximum support from automation software. +The system detects that a person with special abilities arrives at the car and then provides complete support to them by personalizing to their individual needs. + + - When a person approaches the car, the car lowers itself, opens the front and the back doors. The seat and the steering wheel get adjusted in order for the person to get in. + - A mechanical setting (ramp or a crane) can be used for getting the wheelchair inside the car. + - Once the person gets in, the seat and the steering gets adjusted back for driving, while closing the backdoor. + - On reaching destination, the car is lowered. As the backdoor opens,the wheelchair is retrieved. + - The seats and steering get adjusted for the person to get out of the car. Once they"re out, everything gets readjusted to normal position. + +##### Ankaios as Orchestrator + +Ankaois is developed specifically for automotive use cases. It's independant of communication frameworks like SOME/IP, DDS or REST API. +It also does not depend on systemd or any specific systems and can be started with any init system. +With this it's possible to dynamically startup an application that is only required in a particular situation. Since Ankaios supports ASPICE processes, it can be used widely by leading car manufacturers. +For these reasons Ankaios fits in perfectly for the wheelchair scenario. + +##### Dynamic Orchestration +This use case demonstrates a more complex example of dynamic orchestration. + +A [script](./in-vehicle-stack/scenarios/smart_trailer_use_case/scripts/) (one implemented for each orchestrator) will be run to monitor Ibeji and detect when the trailer is connected. The script will continuously poll for the "Trailer Connected" Digital Twin Provider, and print "NotFound" until it is started. You can simulate the trailer being connected to the vehicle by starting the ["Trailer Connected" Digital Twin Provider](./in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/). This provider will register itself with Ibeji, the script will detect this change, and start up the ["Trailer Properties" Digital Twin Provider](./in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/) and the [Smart Trailer Application](./in-vehicle-stack/scenarios/smart_trailer_use_case/applications/smart_trailer_application/). This shows a simple example of reacting to an event in the vehicle by starting up other workloads. + + +##### The Wheelchair Applications +Wheelchair Assistant Application: + + +##### Run the use case +TBD + #### Hack Challenge - Extend the use case Take a look at the source code for the Digital Twin Model, Digital Twin Providers, and Applications used in this example and add to them or use them as a reference to create your own! See the [references](#useful-references-for-creating-and-enhancing-sample-scenarios) to help guide you as well. diff --git a/docs/diagrams/wheel_chair_scenario.png b/docs/diagrams/wheel_chair_scenario.png deleted file mode 100644 index 8f5ac3c7f44bea4cc5e743726f8077c5eb118c31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61732 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 axW1dOz2!en#NGRPQ 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 Date: Wed, 29 Nov 2023 11:17:36 +0100 Subject: [PATCH 05/38] Add wheelchairdistancestate --- .../digital-twin-model/dtdl/car.json | 7 +++++++ .../digital-twin-model/src/car_v1.rs | 9 ++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/car.json b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/car.json index 5690c6a..6234252 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/car.json +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/car.json @@ -49,6 +49,13 @@ "description": "Distance of wheelchair to car in cm", "schema": "integer" }, + { + "@type": "Property", + "@id": "dtmi:sdv:Car:WheelchairDistanceState;1", + "name": "WheelchairDistanceState", + "description": "Distance of wheelchair to car near = true and far = false", + "schema": "boolean" + }, { "@type": "Property", "@id": "dtmi:sdv:Car:WheelchairAssistantState;1", diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs index 8820bf0..2a33fa4 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs @@ -56,10 +56,17 @@ pub mod car { pub type TYPE = i32; } + pub mod car_wheelchair_distance_state { + pub const ID: &str = "dtmi:sdv:Car:WheelchairDistanceState;1"; + pub const NAME: &str = "WheelchairDistanceState"; + pub const DESCRIPTION: &str = "Distance of wheelchair to car near = true and far = false"; + pub type TYPE = bool; + } + pub mod car_wheelchair_assistant_state { pub const ID: &str = "dtmi:sdv:Car:WheelchairAssistantState;1"; pub const NAME: &str = "WheelchairAssistantState"; pub const DESCRIPTION: &str = "Wheelchair assistant state. One of INIT, OPEN, HOLD, DRIVE"; pub type TYPE = WheelchairAssistantState; - } + } } From 065d1a074ef7ea5c08c99956b344dde8ed6545fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kilian=20K=C3=B6ppchen?= <373318+stubb@users.noreply.github.com> Date: Wed, 29 Nov 2023 14:35:49 +0100 Subject: [PATCH 06/38] Update in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs Co-authored-by: Shreyanair21 <152274925+Shreyanair21@users.noreply.github.com> --- .../digital-twin-model/src/car_v1.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs index 2a33fa4..2898707 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs @@ -52,7 +52,7 @@ pub mod car { pub mod car_wheelchair_distance { pub const ID: &str = "dtmi:sdv:Car:WheelchairDistance;1"; pub const NAME: &str = "WheelchairDistance"; - pub const DESCRIPTION: &str = "Distance of wheelchair to car in cm"; + pub const DESCRIPTION: &str = "Distance of wheelchair to car in metres"; pub type TYPE = i32; } From a8832383a7ff520e20e98448f6338e697f63f0c4 Mon Sep 17 00:00:00 2001 From: Enrico Walther Date: Tue, 28 Nov 2023 18:06:33 +0100 Subject: [PATCH 07/38] Add add wheelchair provider. --- in-vehicle-stack/Cargo.toml | 76 ++--- .../smart_trailer_application/src/main.rs | 2 +- .../digital-twin-model/Cargo.toml | 2 +- .../digital-twin-model/src/car_v1.rs | 23 +- .../digital-twin-model/src/lib.rs | 2 +- .../car_off_provider/Cargo.toml | 18 ++ .../car_off_provider/Dockerfile | 74 +++++ .../src/car_off_provider_impl.rs | 26 ++ .../car_off_provider/src/main.rs | 110 ++++++++ .../car_on_provider/Cargo.toml | 18 ++ .../car_on_provider/Dockerfile | 74 +++++ .../src/car_on_provider_impl.rs | 26 ++ .../car_on_provider/src/main.rs | 110 ++++++++ .../carkey_lock_provider/Cargo.toml | 18 ++ .../carkey_lock_provider/Dockerfile | 74 +++++ .../src/carkey_lock_provider_impl.rs | 27 ++ .../carkey_lock_provider/src/main.rs | 110 ++++++++ .../carkey_unlock_provider/Cargo.toml | 18 ++ .../carkey_unlock_provider/Dockerfile | 74 +++++ .../src/carkey_unlock_provider_impl.rs | 26 ++ .../carkey_unlock_provider/src/main.rs | 110 ++++++++ .../digital_twin_providers/common/Cargo.toml | 2 +- .../common/src/constants.rs | 2 +- .../digital_twin_providers/common/src/lib.rs | 2 +- .../common/src/utils.rs | 2 +- .../Cargo.toml | 29 ++ .../Dockerfile | 74 +++++ .../src/main.rs | 158 +++++++++++ ...chair_distance_decreasing_provider_impl.rs | 259 ++++++++++++++++++ .../Cargo.toml | 29 ++ .../Dockerfile | 74 +++++ .../src/main.rs | 157 +++++++++++ ...chair_distance_increasing_provider_impl.rs | 259 ++++++++++++++++++ .../digital_twin_get_provider.proto | 2 +- .../proto_build/Cargo.toml | 2 +- .../proto_build/build.rs | 2 +- .../proto_build/src/lib.rs | 2 +- 37 files changed, 2021 insertions(+), 52 deletions(-) create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/Cargo.toml create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/Dockerfile create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/src/car_off_provider_impl.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/src/main.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider/Cargo.toml create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider/Dockerfile create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider/src/car_on_provider_impl.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider/src/main.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider/Cargo.toml create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider/Dockerfile create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider/src/carkey_lock_provider_impl.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider/src/main.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider/Cargo.toml create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider/Dockerfile create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider/src/carkey_unlock_provider_impl.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider/src/main.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/Cargo.toml create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/Dockerfile create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/main.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_provider_impl.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/Cargo.toml create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/Dockerfile create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/main.rs create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/wheelchair_distance_increasing_provider_impl.rs diff --git a/in-vehicle-stack/Cargo.toml b/in-vehicle-stack/Cargo.toml index 2e1fb78..5ff8427 100644 --- a/in-vehicle-stack/Cargo.toml +++ b/in-vehicle-stack/Cargo.toml @@ -1,33 +1,43 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# SPDX-License-Identifier: MIT - -[workspace] - -members = [ - # in-vehicle-stack interfaces - "proto_build", - - # smart_trailer_use_case - "scenarios/smart_trailer_use_case/applications/smart_trailer_application", - "scenarios/smart_trailer_use_case/digital_twin_providers/common", - "scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider", - "scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider", - "scenarios/smart_trailer_use_case/proto_build", -] - -[workspace.dependencies] -env_logger= "0.10.0" -log = "0.4.20" -paho-mqtt = "0.12" -parking_lot = "0.12.1" -prost = "0.12.1" -serde = "1.0.190" -serde_derive = "1.0.163" -serde_json = "^1.0" -strum = "0.25" -strum_macros = "0.25.1" -tokio = "1.29.1" -tonic = "0.10.2" -tonic-build = "0.10.2" -uuid = "1.2.2" +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +[workspace] + +members = [ + # in-vehicle-stack interfaces + "proto_build", + + # smart_trailer_use_case + "scenarios/smart_trailer_use_case/applications/smart_trailer_application", + "scenarios/smart_trailer_use_case/digital_twin_providers/common", + "scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider", + "scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider", + "scenarios/smart_trailer_use_case/proto_build", + + # wheelchair_assistant_use_case + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/common", + "scenarios/wheelchair_assistant_use_case/proto_build", + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider", + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider", + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider", + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider", + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider", + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider", +] + +[workspace.dependencies] +env_logger= "0.10.0" +log = "0.4.20" +paho-mqtt = "0.12" +parking_lot = "0.12.1" +prost = "0.12.1" +serde = "1.0.190" +serde_derive = "1.0.163" +serde_json = "^1.0" +strum = "0.25" +strum_macros = "0.25.1" +tokio = "1.29.1" +tonic = "0.10.2" +tonic-build = "0.10.2" +uuid = "1.2.2" diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/src/main.rs index 222ed3b..fd42272 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/src/main.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/src/main.rs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. +// Copyright (c) IAV GmbH. // Licensed under the MIT license. // SPDX-License-Identifier: MIT diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/Cargo.toml index 132f976..042dbd2 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/Cargo.toml +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/Cargo.toml @@ -3,7 +3,7 @@ # SPDX-License-Identifier: MIT [package] -name = "digital-twin-model" +name = "wheelchair_digital_twin_model" version = "0.1.0" edition = "2021" license = "MIT" diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs index 2898707..a283f3f 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. +// Copyright (c) IAV GmbH. // Licensed under the MIT license. // SPDX-License-Identifier: MIT @@ -6,18 +6,12 @@ // vehicle model in "../dtdl/car.json" // In the future this code could be generated from a DTDL spec. -enum WheelchairAssistantState { - INIT, - OPEN, - HOLD, - DRIVE -} - pub mod car { pub mod is_car_door_open { pub const ID: &str = "dtmi:sdv:Car:IsDoorOpen;1"; pub const NAME: &str = "IsDoorOpen"; pub const DESCRIPTION: &str = "Is door open?"; + pub type TYPE = bool; } @@ -25,6 +19,7 @@ pub mod car { pub const ID: &str = "dtmi:sdv:Car:IsSteeringwheelInAssistPosition;1"; pub const NAME: &str = "IsSteeringwheelInAssistPosition"; pub const DESCRIPTION: &str = "Is steering wheel in assist position?"; + pub type TYPE = bool; } @@ -32,6 +27,7 @@ pub mod car { pub const ID: &str = "dtmi:sdv:Car:IsCarRunning;1"; pub const NAME: &str = "IsCarRunning"; pub const DESCRIPTION: &str = "Is car running?"; + pub type TYPE = bool; } @@ -39,6 +35,7 @@ pub mod car { pub const ID: &str = "dtmi:sdv:Car:IsSeatInAssistPosition;1"; pub const NAME: &str = "IsSeatInAssistPosition"; pub const DESCRIPTION: &str = "Is seat in assist position?"; + pub type TYPE = bool; } @@ -46,6 +43,7 @@ pub mod car { pub const ID: &str = "dtmi:sdv:Car:IsCarUnlocked;1"; pub const NAME: &str = "IsCarUnlocked"; pub const DESCRIPTION: &str = "Is car unlocked?"; + pub type TYPE = bool; } @@ -53,6 +51,7 @@ pub mod car { pub const ID: &str = "dtmi:sdv:Car:WheelchairDistance;1"; pub const NAME: &str = "WheelchairDistance"; pub const DESCRIPTION: &str = "Distance of wheelchair to car in metres"; + pub type TYPE = i32; } @@ -60,13 +59,21 @@ pub mod car { pub const ID: &str = "dtmi:sdv:Car:WheelchairDistanceState;1"; pub const NAME: &str = "WheelchairDistanceState"; pub const DESCRIPTION: &str = "Distance of wheelchair to car near = true and far = false"; + pub type TYPE = bool; } pub mod car_wheelchair_assistant_state { + pub enum WheelchairAssistantState { + INIT, + OPEN, + HOLD, + DRIVE, + } pub const ID: &str = "dtmi:sdv:Car:WheelchairAssistantState;1"; pub const NAME: &str = "WheelchairAssistantState"; pub const DESCRIPTION: &str = "Wheelchair assistant state. One of INIT, OPEN, HOLD, DRIVE"; + pub type TYPE = WheelchairAssistantState; } } diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/lib.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/lib.rs index ce89701..14151a8 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/lib.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/lib.rs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. +// Copyright (c) IAV GmbH. // Licensed under the MIT license. // SPDX-License-Identifier: MIT diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/Cargo.toml new file mode 100644 index 0000000..52a8a2b --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "car_off_provider" +version = "0.1.0" +edition = "2021" +license = "MIT" + +[dependencies] +wheelchair_digital_twin_model= { path = "../../digital-twin-model" } +wheelchair_digital_twin_providers_common = { path = "../common" } +env_logger = { workspace = true } +interfaces = { path = "../../../../proto_build"} +log = { workspace = true } +serde = { workspace = true } +serde_derive = { workspace = true } +serde_json = { workspace = true } +wheelchair_assistant_interfaces = { path = "../../proto_build" } +tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal"] } +tonic = { workspace = true } diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/Dockerfile b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/Dockerfile new file mode 100644 index 0000000..c819302 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/Dockerfile @@ -0,0 +1,74 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +# Comments are provided throughout this file to help you get started. +# If you need more help, visit the Dockerfile reference guide at +# https://docs.docker.com/engine/reference/builder/ + +################################################################################ +# Create a stage for building the application. + +ARG RUST_VERSION=1.72.1 +FROM docker.io/library/rust:${RUST_VERSION}-slim-bullseye AS build +ARG APP_NAME=car_off_provider +WORKDIR /sdv + +COPY ./ . + +# Add Build dependencies. +RUN apt update -y && apt upgrade -y && apt install -y \ + cmake \ + libssl-dev \ + pkg-config \ + protobuf-compiler + +# Check that APP_NAME argument is valid. +RUN sanitized=$(echo "${APP_NAME}" | tr -dc '^[a-zA-Z_0-9-]+$'); \ +[ "$sanitized" = "${APP_NAME}" ] || { \ + echo "ARG 'APP_NAME' is invalid. APP_NAME='${APP_NAME}' sanitized='${sanitized}'"; \ + exit 1; \ +} + +# Build the application +RUN cargo build --release --bin "${APP_NAME}" + +# Copy the built application to working directory. +RUN cp ./target/release/"${APP_NAME}" /sdv/service + +################################################################################ +# Create a new stage for running the application that contains the minimal +# runtime dependencies for the application. This often uses a different base +# image from the build stage where the necessary files are copied from the build +# stage. +# +# The example below uses the debian bullseye image as the foundation for running the app. +# By specifying the "bullseye-slim" tag, it will also use whatever happens to be the +# most recent version of that tag when you build your Dockerfile. If +# reproducability is important, consider using a digest +# (e.g., debian@sha256:ac707220fbd7b67fc19b112cee8170b41a9e97f703f588b2cdbbcdcecdd8af57). +FROM docker.io/library/debian:bullseye-slim AS final + +# Create a non-privileged user that the app will run under. +# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user +ARG UID=10001 +RUN adduser \ + --disabled-password \ + --gecos "" \ + --home "/nonexistent" \ + --shell "/sbin/nologin" \ + --no-create-home \ + --uid "${UID}" \ + appuser +USER appuser + +WORKDIR /sdv + +# Copy the executable from the "build" stage. +COPY --from=build /sdv/service /sdv/ + +# Expose the port that the application listens on. +EXPOSE 4020 + +# What the container should run when it is started. +CMD ["/sdv/service"] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/src/car_off_provider_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/src/car_off_provider_impl.rs new file mode 100644 index 0000000..2247774 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/src/car_off_provider_impl.rs @@ -0,0 +1,26 @@ +// Copyright (c) IAV GmbH. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +//! Module containing gRPC service implementation based on [`interfaces::digital_twin_get_provider.proto`]. +//! +//! Provides a gRPC endpoint for getting if the cars ignition is off +use wheelchair_assistant_interfaces::digital_twin_get_provider::v1::digital_twin_get_provider_server::DigitalTwinGetProvider; +use wheelchair_assistant_interfaces::digital_twin_get_provider::v1::{GetRequest, GetResponse}; +use tonic::{Request, Response, Status}; + +/// Base structure for the Car ignition off Provider gRPC service. +#[derive(Default)] +pub struct CarOffProviderImpl {} + +#[tonic::async_trait] +impl DigitalTwinGetProvider for CarOffProviderImpl { + /// This function returns the value of "is_car_off" property + async fn get(&self, _request: Request) -> Result, Status> { + // For now, we assume that if this provider is active, if the cars ignition is off + let get_response = GetResponse { + property_value: false, + }; + Ok(Response::new(get_response)) + } +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/src/main.rs new file mode 100644 index 0000000..323d253 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/src/main.rs @@ -0,0 +1,110 @@ +// Copyright (c) IAV GmbH. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +use wheelchair_digital_twin_model::car_v1; + +use wheelchair_digital_twin_providers_common::constants::chariott::{ + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, +}; +use wheelchair_digital_twin_providers_common::constants::{digital_twin_operation, digital_twin_protocol}; +use wheelchair_digital_twin_providers_common::utils::discover_service_using_chariott; +use env_logger::{Builder, Target}; +use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; +use interfaces::invehicle_digital_twin::v1::{EndpointInfo, EntityAccessInfo, RegisterRequest}; +use log::{debug, info, LevelFilter}; +use wheelchair_assistant_interfaces::digital_twin_get_provider::v1::digital_twin_get_provider_server::DigitalTwinGetProviderServer; +use std::net::SocketAddr; +use tokio::signal; +use tonic::transport::Server; +use tonic::Status; +use car_off_provider_impl::CarOffProviderImpl; + +mod car_off_provider_impl; + +// TODO: These could be added in configuration +const CHARIOTT_SERVICE_DISCOVERY_URI: &str = "http://0.0.0.0:50000"; +const PROVIDER_AUTHORITY: &str = "0.0.0.0:4040"; + +/// Register the "is_car_off" property's endpoint. +/// +/// # Arguments +/// * `invehicle_digital_twin_uri` - The In-Vehicle Digital Twin URI. +/// * `provider_uri` - The provider's URI. +async fn register_entity( + invehicle_digital_twin_uri: &str, + provider_uri: &str, +) -> Result<(), Status> { + let is_car_off_endpoint_info = EndpointInfo { + protocol: digital_twin_protocol::GRPC.to_string(), + operations: vec![digital_twin_operation::GET.to_string()], + uri: provider_uri.to_string(), + context: car_v1::car::is_car_running::ID.to_string(), + }; + let entity_access_info = EntityAccessInfo { + name: car_v1::car::is_car_running::NAME.to_string(), + id: car_v1::car::is_car_running::ID.to_string(), + description: car_v1::car::is_car_running::DESCRIPTION.to_string(), + endpoint_info_list: vec![is_car_off_endpoint_info], + }; + + let mut client = InvehicleDigitalTwinClient::connect(invehicle_digital_twin_uri.to_string()) + .await + .map_err(|e| Status::internal(e.to_string()))?; + let request = tonic::Request::new(RegisterRequest { + entity_access_info_list: vec![entity_access_info], + }); + let _response = client.register(request).await?; + + Ok(()) +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + // Set up logging. + Builder::new() + .filter(None, LevelFilter::Debug) + .target(Target::Stdout) + .init(); + + info!("The Provider CarOff has started."); + + let provider_uri = format!("http://{PROVIDER_AUTHORITY}"); + debug!("The Provider URI is {}", &provider_uri); + + // Setup the HTTP server. + let addr: SocketAddr = PROVIDER_AUTHORITY.parse()?; + let provider_impl = CarOffProviderImpl::default(); + let server_future = Server::builder() + .add_service(DigitalTwinGetProviderServer::new(provider_impl)) + .serve(addr); + info!("The HTTP server is listening on address '{PROVIDER_AUTHORITY}'"); + + // Get the In-vehicle Digital Twin Uri from the service discovery system + // This could be enhanced to add retries for robustness + let invehicle_digital_twin_uri = discover_service_using_chariott( + CHARIOTT_SERVICE_DISCOVERY_URI, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, + ) + .await?; + + debug!("Sending a register request to the In-Vehicle Digital Twin Service URI {invehicle_digital_twin_uri}"); + + // This could be enhanced to add retries for robustness + register_entity(&invehicle_digital_twin_uri, &provider_uri).await?; + server_future.await?; + + signal::ctrl_c() + .await + .expect("Failed to listen for control-c event"); + + info!("The Provider has completed."); + + Ok(()) +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider/Cargo.toml new file mode 100644 index 0000000..b648457 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "car_on_provider" +version = "0.1.0" +edition = "2021" +license = "MIT" + +[dependencies] +wheelchair_digital_twin_model= { path = "../../digital-twin-model" } +wheelchair_digital_twin_providers_common = { path = "../common" } +env_logger = { workspace = true } +interfaces = { path = "../../../../proto_build"} +log = { workspace = true } +serde = { workspace = true } +serde_derive = { workspace = true } +serde_json = { workspace = true } +wheelchair_assistant_interfaces = { path = "../../proto_build" } +tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal"] } +tonic = { workspace = true } diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider/Dockerfile b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider/Dockerfile new file mode 100644 index 0000000..bacef1f --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider/Dockerfile @@ -0,0 +1,74 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +# Comments are provided throughout this file to help you get started. +# If you need more help, visit the Dockerfile reference guide at +# https://docs.docker.com/engine/reference/builder/ + +################################################################################ +# Create a stage for building the application. + +ARG RUST_VERSION=1.72.1 +FROM docker.io/library/rust:${RUST_VERSION}-slim-bullseye AS build +ARG APP_NAME=car_on_provider +WORKDIR /sdv + +COPY ./ . + +# Add Build dependencies. +RUN apt update -y && apt upgrade -y && apt install -y \ + cmake \ + libssl-dev \ + pkg-config \ + protobuf-compiler + +# Check that APP_NAME argument is valid. +RUN sanitized=$(echo "${APP_NAME}" | tr -dc '^[a-zA-Z_0-9-]+$'); \ +[ "$sanitized" = "${APP_NAME}" ] || { \ + echo "ARG 'APP_NAME' is invalid. APP_NAME='${APP_NAME}' sanitized='${sanitized}'"; \ + exit 1; \ +} + +# Build the application +RUN cargo build --release --bin "${APP_NAME}" + +# Copy the built application to working directory. +RUN cp ./target/release/"${APP_NAME}" /sdv/service + +################################################################################ +# Create a new stage for running the application that contains the minimal +# runtime dependencies for the application. This often uses a different base +# image from the build stage where the necessary files are copied from the build +# stage. +# +# The example below uses the debian bullseye image as the foundation for running the app. +# By specifying the "bullseye-slim" tag, it will also use whatever happens to be the +# most recent version of that tag when you build your Dockerfile. If +# reproducability is important, consider using a digest +# (e.g., debian@sha256:ac707220fbd7b67fc19b112cee8170b41a9e97f703f588b2cdbbcdcecdd8af57). +FROM docker.io/library/debian:bullseye-slim AS final + +# Create a non-privileged user that the app will run under. +# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user +ARG UID=10001 +RUN adduser \ + --disabled-password \ + --gecos "" \ + --home "/nonexistent" \ + --shell "/sbin/nologin" \ + --no-create-home \ + --uid "${UID}" \ + appuser +USER appuser + +WORKDIR /sdv + +# Copy the executable from the "build" stage. +COPY --from=build /sdv/service /sdv/ + +# Expose the port that the application listens on. +EXPOSE 4020 + +# What the container should run when it is started. +CMD ["/sdv/service"] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider/src/car_on_provider_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider/src/car_on_provider_impl.rs new file mode 100644 index 0000000..3fb32e0 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider/src/car_on_provider_impl.rs @@ -0,0 +1,26 @@ +// Copyright (c) IAV GmbH. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +//! Module containing gRPC service implementation based on [`interfaces::digital_twin_get_provider.proto`]. +//! +//! Provides a gRPC endpoint for getting if the cars ignition is on +use wheelchair_assistant_interfaces::digital_twin_get_provider::v1::digital_twin_get_provider_server::DigitalTwinGetProvider; +use wheelchair_assistant_interfaces::digital_twin_get_provider::v1::{GetRequest, GetResponse}; +use tonic::{Request, Response, Status}; + +/// Base structure for the Car ignition on Provider gRPC service. +#[derive(Default)] +pub struct CarOnProviderImpl {} + +#[tonic::async_trait] +impl DigitalTwinGetProvider for CarOnProviderImpl { + /// This function returns the value of "is_car_on" property + async fn get(&self, _request: Request) -> Result, Status> { + // For now, we assume that if this provider is active, if the cars ignition is on + let get_response = GetResponse { + property_value: true, + }; + Ok(Response::new(get_response)) + } +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider/src/main.rs new file mode 100644 index 0000000..8c29fbb --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider/src/main.rs @@ -0,0 +1,110 @@ +// Copyright (c) IAV GmbH. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +use wheelchair_digital_twin_model::car_v1; + +use wheelchair_digital_twin_providers_common::constants::chariott::{ + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, +}; +use wheelchair_digital_twin_providers_common::constants::{digital_twin_operation, digital_twin_protocol}; +use wheelchair_digital_twin_providers_common::utils::discover_service_using_chariott; +use env_logger::{Builder, Target}; +use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; +use interfaces::invehicle_digital_twin::v1::{EndpointInfo, EntityAccessInfo, RegisterRequest}; +use log::{debug, info, LevelFilter}; +use wheelchair_assistant_interfaces::digital_twin_get_provider::v1::digital_twin_get_provider_server::DigitalTwinGetProviderServer; +use std::net::SocketAddr; +use tokio::signal; +use tonic::transport::Server; +use tonic::Status; +use car_on_provider_impl::CarOnProviderImpl; + +mod car_on_provider_impl; + +// TODO: These could be added in configuration +const CHARIOTT_SERVICE_DISCOVERY_URI: &str = "http://0.0.0.0:50000"; +const PROVIDER_AUTHORITY: &str = "0.0.0.0:4030"; + +/// Register the "is_car_on" property's endpoint. +/// +/// # Arguments +/// * `invehicle_digital_twin_uri` - The In-Vehicle Digital Twin URI. +/// * `provider_uri` - The provider's URI. +async fn register_entity( + invehicle_digital_twin_uri: &str, + provider_uri: &str, +) -> Result<(), Status> { + let is_car_on_endpoint_info = EndpointInfo { + protocol: digital_twin_protocol::GRPC.to_string(), + operations: vec![digital_twin_operation::GET.to_string()], + uri: provider_uri.to_string(), + context: car_v1::car::is_car_running::ID.to_string(), + }; + let entity_access_info = EntityAccessInfo { + name: car_v1::car::is_car_running::NAME.to_string(), + id: car_v1::car::is_car_running::ID.to_string(), + description: car_v1::car::is_car_running::DESCRIPTION.to_string(), + endpoint_info_list: vec![is_car_on_endpoint_info], + }; + + let mut client = InvehicleDigitalTwinClient::connect(invehicle_digital_twin_uri.to_string()) + .await + .map_err(|e| Status::internal(e.to_string()))?; + let request = tonic::Request::new(RegisterRequest { + entity_access_info_list: vec![entity_access_info], + }); + let _response = client.register(request).await?; + + Ok(()) +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + // Set up logging. + Builder::new() + .filter(None, LevelFilter::Debug) + .target(Target::Stdout) + .init(); + + info!("The Provider CarOn has started."); + + let provider_uri = format!("http://{PROVIDER_AUTHORITY}"); + debug!("The Provider URI is {}", &provider_uri); + + // Setup the HTTP server. + let addr: SocketAddr = PROVIDER_AUTHORITY.parse()?; + let provider_impl = CarOnProviderImpl::default(); + let server_future = Server::builder() + .add_service(DigitalTwinGetProviderServer::new(provider_impl)) + .serve(addr); + info!("The HTTP server is listening on address '{PROVIDER_AUTHORITY}'"); + + // Get the In-vehicle Digital Twin Uri from the service discovery system + // This could be enhanced to add retries for robustness + let invehicle_digital_twin_uri = discover_service_using_chariott( + CHARIOTT_SERVICE_DISCOVERY_URI, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, + ) + .await?; + + debug!("Sending a register request to the In-Vehicle Digital Twin Service URI {invehicle_digital_twin_uri}"); + + // This could be enhanced to add retries for robustness + register_entity(&invehicle_digital_twin_uri, &provider_uri).await?; + server_future.await?; + + signal::ctrl_c() + .await + .expect("Failed to listen for control-c event"); + + info!("The Provider has completed."); + + Ok(()) +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider/Cargo.toml new file mode 100644 index 0000000..2927a62 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "carkey_lock_provider" +version = "0.1.0" +edition = "2021" +license = "MIT" + +[dependencies] +wheelchair_digital_twin_model= { path = "../../digital-twin-model" } +wheelchair_digital_twin_providers_common = { path = "../common" } +env_logger = { workspace = true } +interfaces = { path = "../../../../proto_build"} +log = { workspace = true } +serde = { workspace = true } +serde_derive = { workspace = true } +serde_json = { workspace = true } +wheelchair_assistant_interfaces = { path = "../../proto_build" } +tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal"] } +tonic = { workspace = true } diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider/Dockerfile b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider/Dockerfile new file mode 100644 index 0000000..1cd0a8f --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider/Dockerfile @@ -0,0 +1,74 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +# Comments are provided throughout this file to help you get started. +# If you need more help, visit the Dockerfile reference guide at +# https://docs.docker.com/engine/reference/builder/ + +################################################################################ +# Create a stage for building the application. + +ARG RUST_VERSION=1.72.1 +FROM docker.io/library/rust:${RUST_VERSION}-slim-bullseye AS build +ARG APP_NAME=carkey_lock_provider +WORKDIR /sdv + +COPY ./ . + +# Add Build dependencies. +RUN apt update -y && apt upgrade -y && apt install -y \ + cmake \ + libssl-dev \ + pkg-config \ + protobuf-compiler + +# Check that APP_NAME argument is valid. +RUN sanitized=$(echo "${APP_NAME}" | tr -dc '^[a-zA-Z_0-9-]+$'); \ +[ "$sanitized" = "${APP_NAME}" ] || { \ + echo "ARG 'APP_NAME' is invalid. APP_NAME='${APP_NAME}' sanitized='${sanitized}'"; \ + exit 1; \ +} + +# Build the application +RUN cargo build --release --bin "${APP_NAME}" + +# Copy the built application to working directory. +RUN cp ./target/release/"${APP_NAME}" /sdv/service + +################################################################################ +# Create a new stage for running the application that contains the minimal +# runtime dependencies for the application. This often uses a different base +# image from the build stage where the necessary files are copied from the build +# stage. +# +# The example below uses the debian bullseye image as the foundation for running the app. +# By specifying the "bullseye-slim" tag, it will also use whatever happens to be the +# most recent version of that tag when you build your Dockerfile. If +# reproducability is important, consider using a digest +# (e.g., debian@sha256:ac707220fbd7b67fc19b112cee8170b41a9e97f703f588b2cdbbcdcecdd8af57). +FROM docker.io/library/debian:bullseye-slim AS final + +# Create a non-privileged user that the app will run under. +# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user +ARG UID=10001 +RUN adduser \ + --disabled-password \ + --gecos "" \ + --home "/nonexistent" \ + --shell "/sbin/nologin" \ + --no-create-home \ + --uid "${UID}" \ + appuser +USER appuser + +WORKDIR /sdv + +# Copy the executable from the "build" stage. +COPY --from=build /sdv/service /sdv/ + +# Expose the port that the application listens on. +EXPOSE 4020 + +# What the container should run when it is started. +CMD ["/sdv/service"] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider/src/carkey_lock_provider_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider/src/carkey_lock_provider_impl.rs new file mode 100644 index 0000000..6515942 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider/src/carkey_lock_provider_impl.rs @@ -0,0 +1,27 @@ +// Copyright (c) IAV GmbH. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +//! Module containing gRPC service implementation based on [`interfaces::digital_twin_get_provider.proto`]. +//! +//! Provides a gRPC endpoint for getting if the car key is locked +use wheelchair_assistant_interfaces::digital_twin_get_provider::v1::digital_twin_get_provider_server::DigitalTwinGetProvider; +use wheelchair_assistant_interfaces::digital_twin_get_provider::v1::{GetRequest, GetResponse}; +use tonic::{Request, Response, Status}; + +/// Base structure for the Carkey lock Provider gRPC service. +#[derive(Default)] +pub struct CarkeyLockProviderImpl {} + +#[tonic::async_trait] +impl DigitalTwinGetProvider for CarkeyLockProviderImpl { + /// This function returns the value of "is_car_locked" property + async fn get(&self, _request: Request) -> Result, Status> { + // For now, we assume that if this provider is active, the car is locked + + let get_response = GetResponse { + property_value: false, + }; + Ok(Response::new(get_response)) + } +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider/src/main.rs new file mode 100644 index 0000000..fa22b36 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider/src/main.rs @@ -0,0 +1,110 @@ +// Copyright (c) IAV GmbH. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +use wheelchair_digital_twin_model::car_v1; + +use wheelchair_digital_twin_providers_common::constants::chariott::{ + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, +}; +use wheelchair_digital_twin_providers_common::constants::{digital_twin_operation, digital_twin_protocol}; +use wheelchair_digital_twin_providers_common::utils::discover_service_using_chariott; +use env_logger::{Builder, Target}; +use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; +use interfaces::invehicle_digital_twin::v1::{EndpointInfo, EntityAccessInfo, RegisterRequest}; +use log::{debug, info, LevelFilter}; +use wheelchair_assistant_interfaces::digital_twin_get_provider::v1::digital_twin_get_provider_server::DigitalTwinGetProviderServer; +use std::net::SocketAddr; +use tokio::signal; +use tonic::transport::Server; +use tonic::Status; +use carkey_lock_provider_impl::CarkeyLockProviderImpl; + +mod carkey_lock_provider_impl; + +// TODO: These could be added in configuration +const CHARIOTT_SERVICE_DISCOVERY_URI: &str = "http://0.0.0.0:50000"; +const PROVIDER_AUTHORITY: &str = "0.0.0.0:4020"; + +/// Register the "is_car_locked" property's endpoint. +/// +/// # Arguments +/// * `invehicle_digital_twin_uri` - The In-Vehicle Digital Twin URI. +/// * `provider_uri` - The provider's URI. +async fn register_entity( + invehicle_digital_twin_uri: &str, + provider_uri: &str, +) -> Result<(), Status> { + let is_car_locked_endpoint_info = EndpointInfo { + protocol: digital_twin_protocol::GRPC.to_string(), + operations: vec![digital_twin_operation::GET.to_string()], + uri: provider_uri.to_string(), + context: car_v1::car::is_car_unlocked::ID.to_string(), + }; + let entity_access_info = EntityAccessInfo { + name: car_v1::car::is_car_unlocked::NAME.to_string(), + id: car_v1::car::is_car_unlocked::ID.to_string(), + description: car_v1::car::is_car_unlocked::DESCRIPTION.to_string(), + endpoint_info_list: vec![is_car_locked_endpoint_info], + }; + + let mut client = InvehicleDigitalTwinClient::connect(invehicle_digital_twin_uri.to_string()) + .await + .map_err(|e| Status::internal(e.to_string()))?; + let request = tonic::Request::new(RegisterRequest { + entity_access_info_list: vec![entity_access_info], + }); + let _response = client.register(request).await?; + + Ok(()) +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + // Set up logging. + Builder::new() + .filter(None, LevelFilter::Debug) + .target(Target::Stdout) + .init(); + + info!("The Provider CarKeyLock has started."); + + let provider_uri = format!("http://{PROVIDER_AUTHORITY}"); + debug!("The Provider URI is {}", &provider_uri); + + // Setup the HTTP server. + let addr: SocketAddr = PROVIDER_AUTHORITY.parse()?; + let provider_impl = CarkeyLockProviderImpl::default(); + let server_future = Server::builder() + .add_service(DigitalTwinGetProviderServer::new(provider_impl)) + .serve(addr); + info!("The HTTP server is listening on address '{PROVIDER_AUTHORITY}'"); + + // Get the In-vehicle Digital Twin Uri from the service discovery system + // This could be enhanced to add retries for robustness + let invehicle_digital_twin_uri = discover_service_using_chariott( + CHARIOTT_SERVICE_DISCOVERY_URI, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, + ) + .await?; + + debug!("Sending a register request to the In-Vehicle Digital Twin Service URI {invehicle_digital_twin_uri}"); + + // This could be enhanced to add retries for robustness + register_entity(&invehicle_digital_twin_uri, &provider_uri).await?; + server_future.await?; + + signal::ctrl_c() + .await + .expect("Failed to listen for control-c event"); + + info!("The Provider has completed."); + + Ok(()) +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider/Cargo.toml new file mode 100644 index 0000000..ef7ad1c --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "carkey_unlock_provider" +version = "0.1.0" +edition = "2021" +license = "MIT" + +[dependencies] +wheelchair_digital_twin_model= { path = "../../digital-twin-model" } +wheelchair_digital_twin_providers_common = { path = "../common" } +env_logger = { workspace = true } +interfaces = { path = "../../../../proto_build"} +log = { workspace = true } +serde = { workspace = true } +serde_derive = { workspace = true } +serde_json = { workspace = true } +wheelchair_assistant_interfaces = { path = "../../proto_build" } +tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal"] } +tonic = { workspace = true } diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider/Dockerfile b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider/Dockerfile new file mode 100644 index 0000000..9183d04 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider/Dockerfile @@ -0,0 +1,74 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +# Comments are provided throughout this file to help you get started. +# If you need more help, visit the Dockerfile reference guide at +# https://docs.docker.com/engine/reference/builder/ + +################################################################################ +# Create a stage for building the application. + +ARG RUST_VERSION=1.72.1 +FROM docker.io/library/rust:${RUST_VERSION}-slim-bullseye AS build +ARG APP_NAME=carkey_unlock_provider +WORKDIR /sdv + +COPY ./ . + +# Add Build dependencies. +RUN apt update -y && apt upgrade -y && apt install -y \ + cmake \ + libssl-dev \ + pkg-config \ + protobuf-compiler + +# Check that APP_NAME argument is valid. +RUN sanitized=$(echo "${APP_NAME}" | tr -dc '^[a-zA-Z_0-9-]+$'); \ +[ "$sanitized" = "${APP_NAME}" ] || { \ + echo "ARG 'APP_NAME' is invalid. APP_NAME='${APP_NAME}' sanitized='${sanitized}'"; \ + exit 1; \ +} + +# Build the application +RUN cargo build --release --bin "${APP_NAME}" + +# Copy the built application to working directory. +RUN cp ./target/release/"${APP_NAME}" /sdv/service + +################################################################################ +# Create a new stage for running the application that contains the minimal +# runtime dependencies for the application. This often uses a different base +# image from the build stage where the necessary files are copied from the build +# stage. +# +# The example below uses the debian bullseye image as the foundation for running the app. +# By specifying the "bullseye-slim" tag, it will also use whatever happens to be the +# most recent version of that tag when you build your Dockerfile. If +# reproducability is important, consider using a digest +# (e.g., debian@sha256:ac707220fbd7b67fc19b112cee8170b41a9e97f703f588b2cdbbcdcecdd8af57). +FROM docker.io/library/debian:bullseye-slim AS final + +# Create a non-privileged user that the app will run under. +# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user +ARG UID=10001 +RUN adduser \ + --disabled-password \ + --gecos "" \ + --home "/nonexistent" \ + --shell "/sbin/nologin" \ + --no-create-home \ + --uid "${UID}" \ + appuser +USER appuser + +WORKDIR /sdv + +# Copy the executable from the "build" stage. +COPY --from=build /sdv/service /sdv/ + +# Expose the port that the application listens on. +EXPOSE 4020 + +# What the container should run when it is started. +CMD ["/sdv/service"] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider/src/carkey_unlock_provider_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider/src/carkey_unlock_provider_impl.rs new file mode 100644 index 0000000..b21732f --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider/src/carkey_unlock_provider_impl.rs @@ -0,0 +1,26 @@ +// Copyright (c) IAV GmbH. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +//! Module containing gRPC service implementation based on [`interfaces::digital_twin_get_provider.proto`]. +//! +//! Provides a gRPC endpoint for getting if the car key is unlocked +use wheelchair_assistant_interfaces::digital_twin_get_provider::v1::digital_twin_get_provider_server::DigitalTwinGetProvider; +use wheelchair_assistant_interfaces::digital_twin_get_provider::v1::{GetRequest, GetResponse}; +use tonic::{Request, Response, Status}; + +/// Base structure for the Carkey Unlock Provider gRPC service. +#[derive(Default)] +pub struct CarkeyUnlockProviderImpl {} + +#[tonic::async_trait] +impl DigitalTwinGetProvider for CarkeyUnlockProviderImpl { + /// This function returns the value of "is_car_unlocked" property + async fn get(&self, _request: Request) -> Result, Status> { + // For now, we assume that if this provider is active, the car is unlocked + let get_response = GetResponse { + property_value: true, + }; + Ok(Response::new(get_response)) + } +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider/src/main.rs new file mode 100644 index 0000000..806eb2c --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider/src/main.rs @@ -0,0 +1,110 @@ +// Copyright (c) IAV GmbH. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +use wheelchair_digital_twin_model::car_v1; + +use wheelchair_digital_twin_providers_common::constants::chariott::{ + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, +}; +use wheelchair_digital_twin_providers_common::constants::{digital_twin_operation, digital_twin_protocol}; +use wheelchair_digital_twin_providers_common::utils::discover_service_using_chariott; +use env_logger::{Builder, Target}; +use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; +use interfaces::invehicle_digital_twin::v1::{EndpointInfo, EntityAccessInfo, RegisterRequest}; +use log::{debug, info, LevelFilter}; +use wheelchair_assistant_interfaces::digital_twin_get_provider::v1::digital_twin_get_provider_server::DigitalTwinGetProviderServer; +use std::net::SocketAddr; +use tokio::signal; +use tonic::transport::Server; +use tonic::Status; +use carkey_unlock_provider_impl::CarkeyUnlockProviderImpl; + +mod carkey_unlock_provider_impl; + +// TODO: These could be added in configuration +const CHARIOTT_SERVICE_DISCOVERY_URI: &str = "http://0.0.0.0:50000"; +const PROVIDER_AUTHORITY: &str = "0.0.0.0:4010"; + +/// Register the "is_car_unlocked" property's endpoint. +/// +/// # Arguments +/// * `invehicle_digital_twin_uri` - The In-Vehicle Digital Twin URI. +/// * `provider_uri` - The provider's URI. +async fn register_entity( + invehicle_digital_twin_uri: &str, + provider_uri: &str, +) -> Result<(), Status> { + let is_car_unlocked_endpoint_info = EndpointInfo { + protocol: digital_twin_protocol::GRPC.to_string(), + operations: vec![digital_twin_operation::GET.to_string()], + uri: provider_uri.to_string(), + context: car_v1::car::is_car_unlocked::ID.to_string(), + }; + let entity_access_info = EntityAccessInfo { + name: car_v1::car::is_car_unlocked::NAME.to_string(), + id: car_v1::car::is_car_unlocked::ID.to_string(), + description: car_v1::car::is_car_unlocked::DESCRIPTION.to_string(), + endpoint_info_list: vec![is_car_unlocked_endpoint_info], + }; + + let mut client = InvehicleDigitalTwinClient::connect(invehicle_digital_twin_uri.to_string()) + .await + .map_err(|e| Status::internal(e.to_string()))?; + let request = tonic::Request::new(RegisterRequest { + entity_access_info_list: vec![entity_access_info], + }); + let _response = client.register(request).await?; + + Ok(()) +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + // Set up logging. + Builder::new() + .filter(None, LevelFilter::Debug) + .target(Target::Stdout) + .init(); + + info!("The Provider CarKeyUnlock has started."); + + let provider_uri = format!("http://{PROVIDER_AUTHORITY}"); + debug!("The Provider URI is {}", &provider_uri); + + // Setup the HTTP server. + let addr: SocketAddr = PROVIDER_AUTHORITY.parse()?; + let provider_impl = CarkeyUnlockProviderImpl::default(); + let server_future = Server::builder() + .add_service(DigitalTwinGetProviderServer::new(provider_impl)) + .serve(addr); + info!("The HTTP server is listening on address '{PROVIDER_AUTHORITY}'"); + + // Get the In-vehicle Digital Twin Uri from the service discovery system + // This could be enhanced to add retries for robustness + let invehicle_digital_twin_uri = discover_service_using_chariott( + CHARIOTT_SERVICE_DISCOVERY_URI, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, + ) + .await?; + + debug!("Sending a register request to the In-Vehicle Digital Twin Service URI {invehicle_digital_twin_uri}"); + + // This could be enhanced to add retries for robustness + register_entity(&invehicle_digital_twin_uri, &provider_uri).await?; + server_future.await?; + + signal::ctrl_c() + .await + .expect("Failed to listen for control-c event"); + + info!("The Provider has completed."); + + Ok(()) +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/Cargo.toml index e9e9012..2365bc0 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/Cargo.toml +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "digital_twin_providers_common" +name = "wheelchair_digital_twin_providers_common" version = "0.1.0" edition = "2021" license = "MIT" diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/constants.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/constants.rs index cd6803c..d65dcff 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/constants.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/constants.rs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. +// Copyright (c) IAV GmbH. // Licensed under the MIT license. // SPDX-License-Identifier: MIT diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/lib.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/lib.rs index 52b4c85..8a3df1c 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/lib.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/lib.rs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. +// Copyright (c) IAV GmbH. // Licensed under the MIT license. // SPDX-License-Identifier: MIT diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/utils.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/utils.rs index 04d7e2f..c2b431d 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/utils.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/common/src/utils.rs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. +// Copyright (c) IAV GmbH. // Licensed under the MIT license. // SPDX-License-Identifier: MIT diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/Cargo.toml new file mode 100644 index 0000000..f509519 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/Cargo.toml @@ -0,0 +1,29 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +[package] +name = "wheelchair_distance_decreasing_provider" +version = "0.1.0" +edition = "2021" +license = "MIT" + +[dependencies] +wheelchair_digital_twin_model= { path = "../../digital-twin-model" } +wheelchair_digital_twin_providers_common = { path = "../common" } +env_logger = { workspace = true } +interfaces = { path = "../../../../proto_build"} +log = { workspace = true } +paho-mqtt = { workspace = true } +parking_lot = { workspace = true } +serde = { workspace = true } +serde_derive = { workspace = true } +serde_json = { workspace = true } +wheelchair_assistant_interfaces = { path = "../../proto_build" } +strum = { workspace = true } +strum_macros = { workspace = true } +tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal"] } +tonic = { workspace = true } + +[features] +containerize = ["wheelchair_digital_twin_providers_common/containerize"] diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/Dockerfile b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/Dockerfile new file mode 100644 index 0000000..ee8ebe0 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/Dockerfile @@ -0,0 +1,74 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +# Comments are provided throughout this file to help you get started. +# If you need more help, visit the Dockerfile reference guide at +# https://docs.docker.com/engine/reference/builder/ + +################################################################################ +# Create a stage for building the application. + +ARG RUST_VERSION=1.72.1 +FROM docker.io/library/rust:${RUST_VERSION}-slim-bullseye AS build +ARG APP_NAME=wheelchair_distance_decreasing_provider +WORKDIR /sdv + +COPY ./ . + +# Add Build dependencies. +RUN apt update && apt upgrade -y && apt install -y \ + cmake \ + libssl-dev \ + pkg-config \ + protobuf-compiler + +# Check that APP_NAME argument is valid. +RUN sanitized=$(echo "${APP_NAME}" | tr -dc '^[a-zA-Z_0-9-]+$'); \ +[ "$sanitized" = "${APP_NAME}" ] || { \ + echo "ARG 'APP_NAME' is invalid. APP_NAME='${APP_NAME}' sanitized='${sanitized}'"; \ + exit 1; \ +} + +# Build the application +RUN cargo build --release --bin "${APP_NAME}" + +# Copy the built application to working directory. +RUN cp ./target/release/"${APP_NAME}" /sdv/service + +################################################################################ +# Create a new stage for running the application that contains the minimal +# runtime dependencies for the application. This often uses a different base +# image from the build stage where the necessary files are copied from the build +# stage. +# +# The example below uses the debian bullseye image as the foundation for running the app. +# By specifying the "bullseye-slim" tag, it will also use whatever happens to be the +# most recent version of that tag when you build your Dockerfile. If +# reproducability is important, consider using a digest +# (e.g., debian@sha256:ac707220fbd7b67fc19b112cee8170b41a9e97f703f588b2cdbbcdcecdd8af57). +FROM docker.io/library/debian:bullseye-slim AS final + +# Create a non-privileged user that the app will run under. +# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user +ARG UID=10001 +RUN adduser \ + --disabled-password \ + --gecos "" \ + --home "/nonexistent" \ + --shell "/sbin/nologin" \ + --no-create-home \ + --uid "${UID}" \ + appuser +USER appuser + +WORKDIR /sdv + +# Copy the executable from the "build" stage. +COPY --from=build /sdv/service /sdv/ + +# Expose the port that the application listens on. +EXPOSE 4030 + +# What the container should run when it is started. +CMD ["/sdv/service"] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/main.rs new file mode 100644 index 0000000..301c668 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/main.rs @@ -0,0 +1,158 @@ +// Copyright (c) IAV GmbH. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +mod wheelchair_distance_decreasing_provider_impl; + +use std::net::SocketAddr; + +use wheelchair_digital_twin_model::car_v1; +use wheelchair_digital_twin_providers_common::constants::chariott::{ + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, +}; +use wheelchair_digital_twin_providers_common::constants::{digital_twin_operation, digital_twin_protocol}; +use wheelchair_digital_twin_providers_common::utils::discover_service_using_chariott; +use env_logger::{Builder, Target}; +use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; +use interfaces::invehicle_digital_twin::v1::{EndpointInfo, EntityAccessInfo, RegisterRequest}; +use interfaces::module::managed_subscribe::v1::managed_subscribe_callback_server::ManagedSubscribeCallbackServer; +use log::{debug, info, warn, LevelFilter}; +use tokio::signal; +use tokio::sync::watch; +use tokio::time::{sleep, Duration}; +use tonic::transport::Server; +use tonic::Status; + +use crate::wheelchair_distance_decreasing_provider_impl::WheelchairDistanceDecreasingProviderImpl; + +// TODO: These could be added in configuration +const CHARIOTT_SERVICE_DISCOVERY_URI: &str = "http://0.0.0.0:50000"; +const PROVIDER_AUTHORITY: &str = "0.0.0.0:4050"; + +const DEFAULT_MIN_INTERVAL_MS: u64 = 10; + +/// Register the wheelchair distance property's endpoint. +/// +/// # Arguments +/// * `invehicle_digital_twin_uri` - The In-Vehicle Digital Twin URI. +/// * `provider_uri` - The provider's URI. +async fn register_wheelchair_distance_decreasing( + invehicle_digital_twin_uri: &str, + provider_uri: &str, +) -> Result<(), Status> { + let endpoint_info = EndpointInfo { + protocol: digital_twin_protocol::GRPC.to_string(), + operations: vec![digital_twin_operation::MANAGEDSUBSCRIBE.to_string()], + uri: provider_uri.to_string(), + context: "GetSubscriptionInfo".to_string(), + }; + + let entity_access_info = EntityAccessInfo { + name: car_v1::car::car_wheelchair_distance::NAME.to_string(), + id: car_v1::car::car_wheelchair_distance::ID.to_string(), + description: car_v1::car::car_wheelchair_distance::DESCRIPTION.to_string(), + endpoint_info_list: vec![endpoint_info], + }; + + let mut client = InvehicleDigitalTwinClient::connect(invehicle_digital_twin_uri.to_string()) + .await + .map_err(|e| Status::internal(e.to_string()))?; + let request = tonic::Request::new(RegisterRequest { + entity_access_info_list: vec![entity_access_info], + }); + let _response = client.register(request).await?; + + Ok(()) +} + +/// Start the wheelchair distance decreasing data stream. +/// +/// # Arguments +/// `min_interval_ms` - minimum frequency for data stream. +fn start_wheelchair_distance_decreasing_data_stream(min_interval_ms: u64) -> watch::Receiver { + debug!("Starting the Provider's wheelchair distance data stream."); + let mut distance: i32 = 700; + let (sender, receiver) = watch::channel(distance); + tokio::spawn(async move { + loop { + debug!( + "Recording new value for {} of {distance}", + car_v1::car::car_wheelchair_distance::ID + ); + + if let Err(err) = sender.send(distance) { + warn!("Failed to get new value due to '{err:?}'"); + break; + } + + debug!("Completed the publish request"); + + // Calculate the new distance. + // it decreases in increments of 1 to simulate smaller distances + // Start from 700 cm away from the car and come closer by 1 cm every 10 ms -> 1 m/second. + if distance>0 { + distance-=1 + } + + sleep(Duration::from_millis(min_interval_ms)).await; + } + }); + + receiver +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + // Setup logging. + Builder::new() + .filter(None, LevelFilter::Info) + .target(Target::Stdout) + .init(); + + info!("The Provider has started."); + + let provider_uri = format!("http://{PROVIDER_AUTHORITY}"); // Devskim: ignore DS137138 + + // Get the In-vehicle Digital Twin Uri from the service discovery system + // This could be enhanced to add retries for robustness + let invehicle_digital_twin_uri = discover_service_using_chariott( + CHARIOTT_SERVICE_DISCOVERY_URI, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, + ) + .await?; + + debug!("The Provider retrieved Chariott's Service Discovery URI."); + + // Start mock data stream. + let data_stream = start_wheelchair_distance_decreasing_data_stream(DEFAULT_MIN_INTERVAL_MS); + debug!("The Provider has started the wheelchair distance decreasing data stream."); + + // Setup provider management cb endpoint. + let provider = WheelchairDistanceDecreasingProviderImpl::new(data_stream, DEFAULT_MIN_INTERVAL_MS); + + // Start service. + let addr: SocketAddr = PROVIDER_AUTHORITY.parse()?; + let server_future = Server::builder() + .add_service(ManagedSubscribeCallbackServer::new(provider)) + .serve(addr); + + // This could be enhanced with retries for robustness + register_wheelchair_distance_decreasing(&invehicle_digital_twin_uri, &provider_uri).await?; + debug!("The Provider has registered with Ibeji."); + + server_future.await?; + + signal::ctrl_c() + .await + .expect("Failed to listen for control-c event"); + + info!("The Provider has completed."); + + Ok(()) +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_provider_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_provider_impl.rs new file mode 100644 index 0000000..7e8709d --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_provider_impl.rs @@ -0,0 +1,259 @@ +// Copyright (c) IAV GmbH. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +use std::collections::HashMap; +use std::str::FromStr; +use std::sync::Arc; + +use interfaces::module::managed_subscribe::v1::managed_subscribe_callback_server::ManagedSubscribeCallback; +use interfaces::module::managed_subscribe::v1::{ + CallbackPayload, TopicManagementRequest, TopicManagementResponse, +}; + +use wheelchair_digital_twin_model::{car_v1, Metadata}; +use wheelchair_digital_twin_providers_common::utils; +use log::{debug, info, warn}; +use paho_mqtt as mqtt; +use parking_lot::RwLock; +use serde_derive::{Deserialize, Serialize}; +use strum_macros::{Display, EnumString}; +use tokio::sync::{mpsc, watch}; +use tokio::time::{sleep, Duration}; +use tonic::{Request, Response, Status}; + +const MQTT_CLIENT_ID: &str = "wheelchair-distance-decreasing-publisher"; +const FREQUENCY_MS: &str = "frequency_ms"; + +#[derive(Debug, Serialize, Deserialize)] +struct WheelchairDistanceProperty { + #[serde(rename = "WheelchairDistance")] + wheelchair_distance: car_v1::car::car_wheelchair_distance::TYPE, + #[serde(rename = "$metadata")] + metadata: Metadata, +} + +/// Actions that are returned from the Pub Sub Service. +#[derive(Clone, EnumString, Eq, Display, Debug, PartialEq)] +pub enum ProviderAction { + #[strum(serialize = "PUBLISH")] + Publish, + + #[strum(serialize = "STOP_PUBLISH")] + StopPublish, +} + +#[derive(Debug)] +pub struct TopicInfo { + topic: String, + stop_channel: mpsc::Sender, +} + +#[derive(Debug)] +pub struct WheelchairDistanceDecreasingProviderImpl { + pub data_stream: watch::Receiver, + pub min_interval_ms: u64, + entity_map: Arc>>>, +} + +/// Create the JSON for the wheelchair distance property. +/// +/// # Arguments +/// * `wheelchair_distance` - The wheelchair distance value. +fn create_property_json(wheelchair_distance: i32) -> String { + let metadata = Metadata { + model: car_v1::car::car_wheelchair_distance::ID.to_string(), + }; + + let property: WheelchairDistanceProperty = WheelchairDistanceProperty { + wheelchair_distance, + metadata, + }; + + serde_json::to_string(&property).unwrap() +} + +/// Publish a message to a MQTT broker located. +/// +/// # Arguments +/// `broker_uri` - The MQTT broker's URI. +/// `topic` - The topic to publish to. +/// `content` - The message to publish. +fn publish_message(broker_uri: &str, topic: &str, content: &str) -> Result<(), String> { + let create_opts = mqtt::CreateOptionsBuilder::new() + .server_uri(broker_uri) + .client_id(MQTT_CLIENT_ID.to_string()) + .finalize(); + + let client = mqtt::Client::new(create_opts) + .map_err(|err| format!("Failed to create the client due to '{err:?}'"))?; + + let conn_opts = mqtt::ConnectOptionsBuilder::new() + .keep_alive_interval(Duration::from_secs(30)) + .clean_session(true) + .finalize(); + + let _connect_response = client + .connect(conn_opts) + .map_err(|err| format!("Failed to connect due to '{err:?}")); + + let msg = mqtt::Message::new(topic, content, mqtt::types::QOS_1); + if let Err(err) = client.publish(msg) { + return Err(format!("Failed to publish message due to '{err:?}")); + } + + if let Err(err) = client.disconnect(None) { + warn!("Failed to disconnect from topic '{topic}' on broker {broker_uri} due to {err:?}"); + } + + Ok(()) +} + +impl WheelchairDistanceDecreasingProviderImpl { + /// Initializes provider with entities relevant to itself. + /// + /// # Arguments + /// * `data_stream` - Receiver for data stream for entity. + /// * `min_interval_ms` - The frequency of the data coming over the data stream. + pub fn new(data_stream: watch::Receiver, min_interval_ms: u64) -> Self { + // Initialize entity map. + let mut entity_map = HashMap::new(); + + // Insert entry for entity id's associated with provider. + entity_map.insert( + car_v1::car::car_wheelchair_distance::ID.to_string(), + Vec::new(), + ); + + // Create new instance. + WheelchairDistanceDecreasingProviderImpl { + data_stream, + min_interval_ms, + entity_map: Arc::new(RwLock::new(entity_map)), + } + } + + /// Handles the 'PUBLISH' action from the callback. + /// + /// # Arguments + /// `payload` - Payload sent with the 'PUBLISH' action. + pub fn handle_publish_action(&self, payload: CallbackPayload) { + // Get payload information. + let topic = payload.topic; + let constraints = payload.constraints; + let min_interval_ms = self.min_interval_ms; + + // This should not be empty. + let mut subscription_info = payload.subscription_info.unwrap(); + + subscription_info.uri = utils::get_uri(&subscription_info.uri).unwrap(); + + // Create stop publish channel. + let (sender, mut reciever) = mpsc::channel(10); + + // Create topic info. + let topic_info = TopicInfo { + topic: topic.clone(), + stop_channel: sender, + }; + + // Record new topic in entity map. + { + let mut entity_lock = self.entity_map.write(); + let get_result = entity_lock.get_mut(&payload.entity_id); + get_result.unwrap().push(topic_info); + } + + let data_stream = self.data_stream.clone(); + + // Start thread for new topic. + tokio::spawn(async move { + // Get constraints information. + let mut frequency_ms = min_interval_ms; + + for constraint in constraints { + if constraint.r#type == *FREQUENCY_MS { + frequency_ms = u64::from_str(&constraint.value).unwrap(); + }; + } + + loop { + // See if we need to shutdown. + if reciever.try_recv() == Err(mpsc::error::TryRecvError::Disconnected) { + info!("Shutdown thread for {topic}."); + return; + } + + // Get data from stream at the current instant. + let data = *data_stream.borrow(); + let content = create_property_json(data); + let broker_uri = subscription_info.uri.clone(); + + // Publish message to broker. + info!( + "Publish to {topic} for {} with value {data}", + car_v1::car::car_wheelchair_distance::NAME + ); + + if let Err(err) = publish_message(&broker_uri, &topic, &content) { + warn!("Publish failed due to '{err:?}'"); + break; + } + + debug!("Completed publish to {topic}."); + + // Sleep for requested amount of time. + sleep(Duration::from_millis(frequency_ms)).await; + } + }); + } + + /// Handles the 'STOP_PUBLISH' action from the callback. + /// + /// # Arguments + /// `payload` - Payload sent with the 'STOP_PUBLISH' action. + pub fn handle_stop_publish_action(&self, payload: CallbackPayload) { + let topic_info: TopicInfo; + + let mut entity_lock = self.entity_map.write(); + let get_result = entity_lock.get_mut(&payload.entity_id); + + let topics = get_result.unwrap(); + + // Check to see if topic exists. + if let Some(index) = topics.iter_mut().position(|t| t.topic == payload.topic) { + // Remove topic. + topic_info = topics.swap_remove(index); + + // Stop publishing to removed topic. + drop(topic_info.stop_channel); + } else { + warn!("No topic found matching {}", payload.topic); + } + } +} + +#[tonic::async_trait] +impl ManagedSubscribeCallback for WheelchairDistanceDecreasingProviderImpl { + /// Callback for a provider, will process a provider action. + /// + /// # Arguments + /// * `request` - The request with the action and associated payload. + async fn topic_management_cb( + &self, + request: Request, + ) -> Result, Status> { + let inner = request.into_inner(); + let action = inner.action; + let payload = inner.payload.unwrap(); + + let provider_action = ProviderAction::from_str(&action).unwrap(); + + match provider_action { + ProviderAction::Publish => Self::handle_publish_action(self, payload), + ProviderAction::StopPublish => Self::handle_stop_publish_action(self, payload), + } + + Ok(Response::new(TopicManagementResponse {})) + } +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/Cargo.toml new file mode 100644 index 0000000..c9c0f49 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/Cargo.toml @@ -0,0 +1,29 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +[package] +name = "wheelchair_distance_increasing_provider" +version = "0.1.0" +edition = "2021" +license = "MIT" + +[dependencies] +wheelchair_digital_twin_model= { path = "../../digital-twin-model" } +wheelchair_digital_twin_providers_common = { path = "../common" } +env_logger = { workspace = true } +interfaces = { path = "../../../../proto_build"} +log = { workspace = true } +paho-mqtt = { workspace = true } +parking_lot = { workspace = true } +serde = { workspace = true } +serde_derive = { workspace = true } +serde_json = { workspace = true } +wheelchair_assistant_interfaces = { path = "../../proto_build" } +strum = { workspace = true } +strum_macros = { workspace = true } +tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal"] } +tonic = { workspace = true } + +[features] +containerize = ["wheelchair_digital_twin_providers_common/containerize"] diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/Dockerfile b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/Dockerfile new file mode 100644 index 0000000..0875016 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/Dockerfile @@ -0,0 +1,74 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +# Comments are provided throughout this file to help you get started. +# If you need more help, visit the Dockerfile reference guide at +# https://docs.docker.com/engine/reference/builder/ + +################################################################################ +# Create a stage for building the application. + +ARG RUST_VERSION=1.72.1 +FROM docker.io/library/rust:${RUST_VERSION}-slim-bullseye AS build +ARG APP_NAME=wheelchair_distance_increasing_provider +WORKDIR /sdv + +COPY ./ . + +# Add Build dependencies. +RUN apt update && apt upgrade -y && apt install -y \ + cmake \ + libssl-dev \ + pkg-config \ + protobuf-compiler + +# Check that APP_NAME argument is valid. +RUN sanitized=$(echo "${APP_NAME}" | tr -dc '^[a-zA-Z_0-9-]+$'); \ +[ "$sanitized" = "${APP_NAME}" ] || { \ + echo "ARG 'APP_NAME' is invalid. APP_NAME='${APP_NAME}' sanitized='${sanitized}'"; \ + exit 1; \ +} + +# Build the application +RUN cargo build --release --bin "${APP_NAME}" + +# Copy the built application to working directory. +RUN cp ./target/release/"${APP_NAME}" /sdv/service + +################################################################################ +# Create a new stage for running the application that contains the minimal +# runtime dependencies for the application. This often uses a different base +# image from the build stage where the necessary files are copied from the build +# stage. +# +# The example below uses the debian bullseye image as the foundation for running the app. +# By specifying the "bullseye-slim" tag, it will also use whatever happens to be the +# most recent version of that tag when you build your Dockerfile. If +# reproducability is important, consider using a digest +# (e.g., debian@sha256:ac707220fbd7b67fc19b112cee8170b41a9e97f703f588b2cdbbcdcecdd8af57). +FROM docker.io/library/debian:bullseye-slim AS final + +# Create a non-privileged user that the app will run under. +# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user +ARG UID=10001 +RUN adduser \ + --disabled-password \ + --gecos "" \ + --home "/nonexistent" \ + --shell "/sbin/nologin" \ + --no-create-home \ + --uid "${UID}" \ + appuser +USER appuser + +WORKDIR /sdv + +# Copy the executable from the "build" stage. +COPY --from=build /sdv/service /sdv/ + +# Expose the port that the application listens on. +EXPOSE 4030 + +# What the container should run when it is started. +CMD ["/sdv/service"] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/main.rs new file mode 100644 index 0000000..e504316 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/main.rs @@ -0,0 +1,157 @@ +// Copyright (c) IAV GmbH. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +mod wheelchair_distance_increasing_provider_impl; + +use std::net::SocketAddr; + +use wheelchair_digital_twin_model::car_v1; +use wheelchair_digital_twin_providers_common::constants::chariott::{ + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, +}; +use digital_twin_providers_common::constants::{digital_twin_operation, digital_twin_protocol}; +use digital_twin_providers_common::utils::discover_service_using_chariott; +use env_logger::{Builder, Target}; +use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; +use interfaces::invehicle_digital_twin::v1::{EndpointInfo, EntityAccessInfo, RegisterRequest}; +use interfaces::module::managed_subscribe::v1::managed_subscribe_callback_server::ManagedSubscribeCallbackServer; +use log::{debug, info, warn, LevelFilter}; +use tokio::signal; +use tokio::sync::watch; +use tokio::time::{sleep, Duration}; +use tonic::transport::Server; +use tonic::Status; + +use crate::wheelchair_distance_increasing_provider_impl::WheelchairDistanceIncreasingProviderImpl; + +// TODO: These could be added in configuration +const CHARIOTT_SERVICE_DISCOVERY_URI: &str = "http://0.0.0.0:50000"; +const PROVIDER_AUTHORITY: &str = "0.0.0.0:4060"; + +const DEFAULT_MIN_INTERVAL_MS: u64 = 10; + +/// Register the wheelchair distance property's endpoint. +/// +/// # Arguments +/// * `invehicle_digital_twin_uri` - The In-Vehicle Digital Twin URI. +/// * `provider_uri` - The provider's URI. +async fn register_wheelchair_distance( + invehicle_digital_twin_uri: &str, + provider_uri: &str, +) -> Result<(), Status> { + let endpoint_info = EndpointInfo { + protocol: digital_twin_protocol::GRPC.to_string(), + operations: vec![digital_twin_operation::MANAGEDSUBSCRIBE.to_string()], + uri: provider_uri.to_string(), + context: "GetSubscriptionInfo".to_string(), + }; + + let entity_access_info = EntityAccessInfo { + name: car_v1::car::car_wheelchair_distance::NAME.to_string(), + id: car_v1::car::car_wheelchair_distance::ID.to_string(), + description: car_v1::car::car_wheelchair_distance::DESCRIPTION.to_string(), + endpoint_info_list: vec![endpoint_info], + }; + + let mut client = InvehicleDigitalTwinClient::connect(invehicle_digital_twin_uri.to_string()) + .await + .map_err(|e| Status::internal(e.to_string()))?; + let request = tonic::Request::new(RegisterRequest { + entity_access_info_list: vec![entity_access_info], + }); + let _response = client.register(request).await?; + + Ok(()) +} + +/// Start the wheelchair distance data stream. Add 1 cm every 10 ms, so make 1 m per second. +/// +/// # Arguments +/// `min_interval_ms` - minimum frequency for data stream. +fn start_wheelchair_distance_increasing_data_stream(min_interval_ms: u64) -> watch::Receiver { + debug!("Starting the Provider's wheelchair distance increasing data stream."); + let mut distance: i32 = 0; + let (sender, receiver) = watch::channel(distance); + tokio::spawn(async move { + loop { + debug!( + "Recording new value for {} of {distance}", + car_v1::car::car_wheelchair_distance::ID + ); + + if let Err(err) = sender.send(distance) { + warn!("Failed to get new value due to '{err:?}'"); + break; + } + + debug!("Completed the publish request"); + + // Calculate the new distance, it increases by 1 m every second, until it is 10 m. + // This function simulates the person going away from the car. + if distance < 1000 { + distance += 1; + } + + sleep(Duration::from_millis(min_interval_ms)).await; + } + }); + + receiver +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + // Setup logging. + Builder::new() + .filter(None, LevelFilter::Info) + .target(Target::Stdout) + .init(); + + info!("The Provider has started."); + + let provider_uri = format!("http://{PROVIDER_AUTHORITY}"); // Devskim: ignore DS137138 + + // Get the In-vehicle Digital Twin Uri from the service discovery system + // This could be enhanced to add retries for robustness + let invehicle_digital_twin_uri = discover_service_using_chariott( + CHARIOTT_SERVICE_DISCOVERY_URI, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, + ) + .await?; + + debug!("The Provider retrieved Chariott's Service Discovery URI."); + + // Start mock data stream. + let data_stream = start_wheelchair_distance_increasing_data_stream(DEFAULT_MIN_INTERVAL_MS); + debug!("The Provider has started the wheelchair distance increasing data stream."); + + // Setup provider management cb endpoint. + let provider = WheelchairDistanceIncreasingProviderImpl::new(data_stream, DEFAULT_MIN_INTERVAL_MS); + + // Start service. + let addr: SocketAddr = PROVIDER_AUTHORITY.parse()?; + let server_future = Server::builder() + .add_service(ManagedSubscribeCallbackServer::new(provider)) + .serve(addr); + + // This could be enhanced with retries for robustness + register_wheelchair_distance(&invehicle_digital_twin_uri, &provider_uri).await?; + debug!("The Provider has registered with Ibeji."); + + server_future.await?; + + signal::ctrl_c() + .await + .expect("Failed to listen for control-c event"); + + info!("The Provider has completed."); + + Ok(()) +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/wheelchair_distance_increasing_provider_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/wheelchair_distance_increasing_provider_impl.rs new file mode 100644 index 0000000..2ecfa3e --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/wheelchair_distance_increasing_provider_impl.rs @@ -0,0 +1,259 @@ +// Copyright (c) IAV GmbH. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +use std::collections::HashMap; +use std::str::FromStr; +use std::sync::Arc; + +use interfaces::module::managed_subscribe::v1::managed_subscribe_callback_server::ManagedSubscribeCallback; +use interfaces::module::managed_subscribe::v1::{ + CallbackPayload, TopicManagementRequest, TopicManagementResponse, +}; + +use wheelchair_digital_twin_model::{car_v1, Metadata}; +use wheelchair_digital_twin_providers_common::utils; +use log::{debug, info, warn}; +use paho_mqtt as mqtt; +use parking_lot::RwLock; +use serde_derive::{Deserialize, Serialize}; +use strum_macros::{Display, EnumString}; +use tokio::sync::{mpsc, watch}; +use tokio::time::{sleep, Duration}; +use tonic::{Request, Response, Status}; + +const MQTT_CLIENT_ID: &str = "wheelchair-distance-increasing-publisher"; +const FREQUENCY_MS: &str = "frequency_ms"; + +#[derive(Debug, Serialize, Deserialize)] +struct WheelchairDistanceProperty { + #[serde(rename = "WheelchairDistance")] + wheelchair_distance: car_v1::car::car_wheelchair_distance::TYPE, + #[serde(rename = "$metadata")] + metadata: Metadata, +} + +/// Actions that are returned from the Pub Sub Service. +#[derive(Clone, EnumString, Eq, Display, Debug, PartialEq)] +pub enum ProviderAction { + #[strum(serialize = "PUBLISH")] + Publish, + + #[strum(serialize = "STOP_PUBLISH")] + StopPublish, +} + +#[derive(Debug)] +pub struct TopicInfo { + topic: String, + stop_channel: mpsc::Sender, +} + +#[derive(Debug)] +pub struct WheelchairDistanceIncreasingProviderImpl { + pub data_stream: watch::Receiver, + pub min_interval_ms: u64, + entity_map: Arc>>>, +} + +/// Create the JSON for the wheelchair distance property. +/// +/// # Arguments +/// * `wheelchair_distance` - The wheelchair distance value. +fn create_property_json(wheelchair_distance: i32) -> String { + let metadata = Metadata { + model: car_v1::car::car_wheelchair_distance::ID.to_string(), + }; + + let property: WheelchairDistanceProperty = WheelchairDistanceProperty { + wheelchair_distance, + metadata, + }; + + serde_json::to_string(&property).unwrap() +} + +/// Publish a message to a MQTT broker located. +/// +/// # Arguments +/// `broker_uri` - The MQTT broker's URI. +/// `topic` - The topic to publish to. +/// `content` - The message to publish. +fn publish_message(broker_uri: &str, topic: &str, content: &str) -> Result<(), String> { + let create_opts = mqtt::CreateOptionsBuilder::new() + .server_uri(broker_uri) + .client_id(MQTT_CLIENT_ID.to_string()) + .finalize(); + + let client = mqtt::Client::new(create_opts) + .map_err(|err| format!("Failed to create the client due to '{err:?}'"))?; + + let conn_opts = mqtt::ConnectOptionsBuilder::new() + .keep_alive_interval(Duration::from_secs(30)) + .clean_session(true) + .finalize(); + + let _connect_response = client + .connect(conn_opts) + .map_err(|err| format!("Failed to connect due to '{err:?}")); + + let msg = mqtt::Message::new(topic, content, mqtt::types::QOS_1); + if let Err(err) = client.publish(msg) { + return Err(format!("Failed to publish message due to '{err:?}")); + } + + if let Err(err) = client.disconnect(None) { + warn!("Failed to disconnect from topic '{topic}' on broker {broker_uri} due to {err:?}"); + } + + Ok(()) +} + +impl WheelchairDistanceIncreasingProviderImpl { + /// Initializes provider with entities relevant to itself. + /// + /// # Arguments + /// * `data_stream` - Receiver for data stream for entity. + /// * `min_interval_ms` - The frequency of the data coming over the data stream. + pub fn new(data_stream: watch::Receiver, min_interval_ms: u64) -> Self { + // Initialize entity map. + let mut entity_map = HashMap::new(); + + // Insert entry for entity id's associated with provider. + entity_map.insert( + car_v1::car::car_wheelchair_distance::ID.to_string(), + Vec::new(), + ); + + // Create new instance. + WheelchairDistanceIncreasingProviderImpl { + data_stream, + min_interval_ms, + entity_map: Arc::new(RwLock::new(entity_map)), + } + } + + /// Handles the 'PUBLISH' action from the callback. + /// + /// # Arguments + /// `payload` - Payload sent with the 'PUBLISH' action. + pub fn handle_publish_action(&self, payload: CallbackPayload) { + // Get payload information. + let topic = payload.topic; + let constraints = payload.constraints; + let min_interval_ms = self.min_interval_ms; + + // This should not be empty. + let mut subscription_info = payload.subscription_info.unwrap(); + + subscription_info.uri = utils::get_uri(&subscription_info.uri).unwrap(); + + // Create stop publish channel. + let (sender, mut reciever) = mpsc::channel(10); + + // Create topic info. + let topic_info = TopicInfo { + topic: topic.clone(), + stop_channel: sender, + }; + + // Record new topic in entity map. + { + let mut entity_lock = self.entity_map.write(); + let get_result = entity_lock.get_mut(&payload.entity_id); + get_result.unwrap().push(topic_info); + } + + let data_stream = self.data_stream.clone(); + + // Start thread for new topic. + tokio::spawn(async move { + // Get constraints information. + let mut frequency_ms = min_interval_ms; + + for constraint in constraints { + if constraint.r#type == *FREQUENCY_MS { + frequency_ms = u64::from_str(&constraint.value).unwrap(); + }; + } + + loop { + // See if we need to shutdown. + if reciever.try_recv() == Err(mpsc::error::TryRecvError::Disconnected) { + info!("Shutdown thread for {topic}."); + return; + } + + // Get data from stream at the current instant. + let data = *data_stream.borrow(); + let content = create_property_json(data); + let broker_uri = subscription_info.uri.clone(); + + // Publish message to broker. + info!( + "Publish to {topic} for {} with value {data}", + car_v1::car::car_wheelchair_distance::NAME + ); + + if let Err(err) = publish_message(&broker_uri, &topic, &content) { + warn!("Publish failed due to '{err:?}'"); + break; + } + + debug!("Completed publish to {topic}."); + + // Sleep for requested amount of time. + sleep(Duration::from_millis(frequency_ms)).await; + } + }); + } + + /// Handles the 'STOP_PUBLISH' action from the callback. + /// + /// # Arguments + /// `payload` - Payload sent with the 'STOP_PUBLISH' action. + pub fn handle_stop_publish_action(&self, payload: CallbackPayload) { + let topic_info: TopicInfo; + + let mut entity_lock = self.entity_map.write(); + let get_result = entity_lock.get_mut(&payload.entity_id); + + let topics = get_result.unwrap(); + + // Check to see if topic exists. + if let Some(index) = topics.iter_mut().position(|t| t.topic == payload.topic) { + // Remove topic. + topic_info = topics.swap_remove(index); + + // Stop publishing to removed topic. + drop(topic_info.stop_channel); + } else { + warn!("No topic found matching {}", payload.topic); + } + } +} + +#[tonic::async_trait] +impl ManagedSubscribeCallback for WheelchairDistanceIncreasingProviderImpl { + /// Callback for a provider, will process a provider action. + /// + /// # Arguments + /// * `request` - The request with the action and associated payload. + async fn topic_management_cb( + &self, + request: Request, + ) -> Result, Status> { + let inner = request.into_inner(); + let action = inner.action; + let payload = inner.payload.unwrap(); + + let provider_action = ProviderAction::from_str(&action).unwrap(); + + match provider_action { + ProviderAction::Publish => Self::handle_publish_action(self, payload), + ProviderAction::StopPublish => Self::handle_stop_publish_action(self, payload), + } + + Ok(Response::new(TopicManagementResponse {})) + } +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/interfaces/digital_twin_get_provider.proto b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/interfaces/digital_twin_get_provider.proto index 9f252ea..5cd026a 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/interfaces/digital_twin_get_provider.proto +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/interfaces/digital_twin_get_provider.proto @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. +// Copyright (c) IAV GmbH. // Licensed under the MIT license. // SPDX-License-Identifier: MIT diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/Cargo.toml index 716307c..534d288 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/Cargo.toml +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/Cargo.toml @@ -3,7 +3,7 @@ # SPDX-License-Identifier: MIT [package] -name = "smart_trailer_interfaces" +name = "wheelchair_assistant_interfaces" version = "0.1.0" edition = "2021" license = "MIT" diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/build.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/build.rs index 771678c..042b23b 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/build.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/build.rs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. +// Copyright (c) IAV GmbH. // Licensed under the MIT license. // SPDX-License-Identifier: MIT diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/src/lib.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/src/lib.rs index a9f07e7..e486da2 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/src/lib.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/proto_build/src/lib.rs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. +// Copyright (c) IAV GmbH. // Licensed under the MIT license. // SPDX-License-Identifier: MIT From 9a5928e58795e2dcb18a5cd13fa379f219a0443b Mon Sep 17 00:00:00 2001 From: "Enrico Walther (IAV)" Date: Wed, 29 Nov 2023 18:46:13 +0100 Subject: [PATCH 08/38] Update digital dwin model. --- .../digital-twin-model/dtdl/car.json | 2 +- .../digital-twin-model/src/car_v1.rs | 10 ++-------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/car.json b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/car.json index 6234252..4bd68f5 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/car.json +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/dtdl/car.json @@ -61,7 +61,7 @@ "@id": "dtmi:sdv:Car:WheelchairAssistantState;1", "name": "WheelchairAssistantState", "description": "Wheelchair assistant state. One of INIT, OPEN, HOLD, DRIVE", - "schema": "enum" + "schema": "integer" } ] } diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs index a283f3f..1911b7a 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital-twin-model/src/car_v1.rs @@ -64,16 +64,10 @@ pub mod car { } pub mod car_wheelchair_assistant_state { - pub enum WheelchairAssistantState { - INIT, - OPEN, - HOLD, - DRIVE, - } pub const ID: &str = "dtmi:sdv:Car:WheelchairAssistantState;1"; pub const NAME: &str = "WheelchairAssistantState"; - pub const DESCRIPTION: &str = "Wheelchair assistant state. One of INIT, OPEN, HOLD, DRIVE"; + pub const DESCRIPTION: &str = "Wheelchair assistant state. One of INIT=1, OPEN=2, HOLD=3, DRIVE=4"; - pub type TYPE = WheelchairAssistantState; + pub type TYPE = i32; } } From e7bc7af546bfd85491cb8d3892e752ccb0e6e934 Mon Sep 17 00:00:00 2001 From: DennisHa95 <152274887+DennisHa95@users.noreply.github.com> Date: Wed, 29 Nov 2023 19:50:40 +0100 Subject: [PATCH 09/38] Update README.md --- README.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 70cd381..789a649 100644 --- a/README.md +++ b/README.md @@ -60,19 +60,13 @@ The Trailer Properties Provider supports the ManagedSubscribe operation so that Once you've chosen an orchestrator and gone through their environment setup steps, please refer to [Ankaios's Dev Environment README](./eclipse-ankaios/README.md#startup-check-before-development) or [BlueChi's Dev Environment README](./eclipse-bluechi/README.md#running-the-smart-trailer-example-with-bluechis-devcontainer) for instructions on running this scenario. #### Wheelchair Assistant Scenario Overview +In this scenario we try to provide a handicapped person an easier access to a vehicle and thus more mobility. Our system detects that a handicapped person with a wheelchair is approaching a vehicle and aims to provide complete support by personalizing to the individual needs of the user. The system demonstrates a full driving scenario from arriving at the car to reaching the desired destination with maximum support from automation software. -This system demonstrates a full driving scenario, starting from arriving at the car, getting in ,driving, getting out and leaving the car with maximum support from automation software. -The system detects that a person with special abilities arrives at the car and then provides complete support to them by personalizing to their individual needs. - - - When a person approaches the car, the car lowers itself, opens the front and the back doors. The seat and the steering wheel get adjusted in order for the person to get in. - - A mechanical setting (ramp or a crane) can be used for getting the wheelchair inside the car. - - Once the person gets in, the seat and the steering gets adjusted back for driving, while closing the backdoor. - - On reaching destination, the car is lowered. As the backdoor opens,the wheelchair is retrieved. - - The seats and steering get adjusted for the person to get out of the car. Once they"re out, everything gets readjusted to normal position. +A signal is raised to the orchestrator to start up the necessary providers and applications to manage the wheelchair as well as to make adjustments inside the car. These include a Digital Twin Provider, which exposes signals from the wheelchair to higher-level applications, and a Wheelchair Assistant application, which makes use of and reacts to these signals. In order to start our orchestra, the tools we use are: Eclipse Chariott, Ibeji, Agemo, Freyja, and an Eclipse Mosquitto MQTT broker. ##### Ankaios as Orchestrator -Ankaois is developed specifically for automotive use cases. It's independant of communication frameworks like SOME/IP, DDS or REST API. +Ankaios is developed specifically for automotive use cases. It's independant of communication frameworks like SOME/IP, DDS or REST API. It also does not depend on systemd or any specific systems and can be started with any init system. With this it's possible to dynamically startup an application that is only required in a particular situation. Since Ankaios supports ASPICE processes, it can be used widely by leading car manufacturers. For these reasons Ankaios fits in perfectly for the wheelchair scenario. @@ -83,9 +77,14 @@ This use case demonstrates a more complex example of dynamic orchestration. A [script](./in-vehicle-stack/scenarios/smart_trailer_use_case/scripts/) (one implemented for each orchestrator) will be run to monitor Ibeji and detect when the trailer is connected. The script will continuously poll for the "Trailer Connected" Digital Twin Provider, and print "NotFound" until it is started. You can simulate the trailer being connected to the vehicle by starting the ["Trailer Connected" Digital Twin Provider](./in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/). This provider will register itself with Ibeji, the script will detect this change, and start up the ["Trailer Properties" Digital Twin Provider](./in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/) and the [Smart Trailer Application](./in-vehicle-stack/scenarios/smart_trailer_use_case/applications/smart_trailer_application/). This shows a simple example of reacting to an event in the vehicle by starting up other workloads. -##### The Wheelchair Applications -Wheelchair Assistant Application: +##### The Wheelchair Assistant Applications +This application takes care of the software implementation corresponding to the person arriving at the car, getting in ,driving, getting out and leaving the car. + - When a person approaches the car, the car lowers itself, opens the front and the back doors. The seat and the steering wheel get adjusted in order for the person to get in. + - A mechanical setting (ramp or a crane) can be used for getting the wheelchair inside the car. + - Once the person gets in, the seat and the steering gets adjusted back for driving, while closing the backdoor. + - On reaching destination, the car is lowered. As the backdoor opens,the wheelchair is retrieved. + - The seats and steering get adjusted for the person to get out of the car. Once they"re out, everything gets readjusted to normal position. ##### Run the use case TBD From c1221f6e23fb037cf56178176686b94a231e5c39 Mon Sep 17 00:00:00 2001 From: "Sreelan Nair, Sreya (TD-M)" Date: Tue, 28 Nov 2023 21:01:56 +0100 Subject: [PATCH 10/38] implemented Carkey Lock/Unlock provider --- .../Cargo.toml | 6 ++--- .../Dockerfile | 2 +- .../src/carkey_lock_unlock_provider_impl.rs | 27 +++++++++++++++++++ .../src/main.rs | 26 +++++++++--------- .../src/trailer_connected_provider_impl.rs | 27 ------------------- 5 files changed, 44 insertions(+), 44 deletions(-) rename in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/{trailer_connected_provider => carkey_lock_unlock_provider}/Cargo.toml (81%) rename in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/{trailer_connected_provider => carkey_lock_unlock_provider}/Dockerfile (98%) create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/src/carkey_lock_unlock_provider_impl.rs rename in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/{trailer_connected_provider => carkey_lock_unlock_provider}/src/main.rs (80%) delete mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/src/trailer_connected_provider_impl.rs diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/Cargo.toml similarity index 81% rename from in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/Cargo.toml rename to in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/Cargo.toml index ed42315..b0df308 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/Cargo.toml +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/Cargo.toml @@ -1,7 +1,7 @@ [package] -name = "trailer_connected_provider" +name = "carkey_lock_unlock" version = "0.1.0" -edition = "2021" +edition = "2023" license = "MIT" [dependencies] @@ -13,6 +13,6 @@ log = { workspace = true } serde = { workspace = true } serde_derive = { workspace = true } serde_json = { workspace = true } -smart_trailer_interfaces = { path = "../../proto_build" } +wheelchair_assistant_interfaces = { path = "../../proto_build" } tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal"] } tonic = { workspace = true } diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/Dockerfile b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/Dockerfile similarity index 98% rename from in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/Dockerfile rename to in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/Dockerfile index f46e088..13c98a8 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/Dockerfile +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/Dockerfile @@ -11,7 +11,7 @@ ARG RUST_VERSION=1.72.1 FROM docker.io/library/rust:${RUST_VERSION}-slim-bullseye AS build -ARG APP_NAME=trailer_connected_provider +ARG APP_NAME=carkey_lock_unlock_provider WORKDIR /sdv COPY ./ . diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/src/carkey_lock_unlock_provider_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/src/carkey_lock_unlock_provider_impl.rs new file mode 100644 index 0000000..ffbac3a --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/src/carkey_lock_unlock_provider_impl.rs @@ -0,0 +1,27 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +//! Module containing gRPC service implementation based on [`interfaces::digital_twin_get_provider.proto`]. +//! +//! Provides a gRPC endpoint for getting if the car key is unlocked +use wheelchair_assistant_interfaces::digital_twin_get_provider::v1::digital_twin_get_provider_server::DigitalTwinGetProvider; +use wheelchair_assistant_interfaces::digital_twin_get_provider::v1::{GetRequest, GetResponse}; +use tonic::{Request, Response, Status}; + +/// Base structure for the Carkey lock/Unlock Provider gRPC service. +#[derive(Default)] +pub struct CarkeyLockUnlockProviderImpl {} + +#[tonic::async_trait] +impl DigitalTwinGetProvider for CarkeyLockUnlockProviderImpl { + /// This function returns the value of "is_car_unlocked" property + async fn get(&self, _request: Request) -> Result, Status> { + // For now, we assume that if this provider is active, the car is unlocked + // To expand this use case, we could simulate the car being locked as well + let get_response = GetResponse { + property_value: true, + }; + Ok(Response::new(get_response)) + } +} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/src/main.rs similarity index 80% rename from in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/src/main.rs rename to in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/src/main.rs index 219f2d2..31506c4 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/src/main.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/src/main.rs @@ -2,7 +2,7 @@ // Licensed under the MIT license. // SPDX-License-Identifier: MIT -use digital_twin_model::trailer_v1; +use digital_twin_model::car_v1; use digital_twin_providers_common::constants::chariott::{ INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, @@ -15,20 +15,20 @@ use env_logger::{Builder, Target}; use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; use interfaces::invehicle_digital_twin::v1::{EndpointInfo, EntityAccessInfo, RegisterRequest}; use log::{debug, info, LevelFilter}; -use smart_trailer_interfaces::digital_twin_get_provider::v1::digital_twin_get_provider_server::DigitalTwinGetProviderServer; +use wheelchair_assistant_interfaces::digital_twin_get_provider::v1::digital_twin_get_provider_server::DigitalTwinGetProviderServer; use std::net::SocketAddr; use tokio::signal; use tonic::transport::Server; use tonic::Status; -use trailer_connected_provider_impl::TrailerConnectedProviderImpl; +use carkey_lock_unlock_provider_impl::CarkeyLockUnlockProviderImpl; -mod trailer_connected_provider_impl; +mod carkey_lock_unlock_provider_impl; // TODO: These could be added in configuration const CHARIOTT_SERVICE_DISCOVERY_URI: &str = "http://0.0.0.0:50000"; const PROVIDER_AUTHORITY: &str = "0.0.0.0:4020"; -/// Register the "is trailer connected" property's endpoint. +/// Register the "is_car_unlocked" property's endpoint. /// /// # Arguments /// * `invehicle_digital_twin_uri` - The In-Vehicle Digital Twin URI. @@ -37,17 +37,17 @@ async fn register_entity( invehicle_digital_twin_uri: &str, provider_uri: &str, ) -> Result<(), Status> { - let is_trailer_connected_endpoint_info = EndpointInfo { + let is_car_unlocked_endpoint_info = EndpointInfo { protocol: digital_twin_protocol::GRPC.to_string(), operations: vec![digital_twin_operation::GET.to_string()], uri: provider_uri.to_string(), - context: trailer_v1::trailer::is_trailer_connected::ID.to_string(), + context: car_v1::car::is_car_unlocked::ID.to_string(), }; let entity_access_info = EntityAccessInfo { - name: trailer_v1::trailer::is_trailer_connected::NAME.to_string(), - id: trailer_v1::trailer::is_trailer_connected::ID.to_string(), - description: trailer_v1::trailer::is_trailer_connected::DESCRIPTION.to_string(), - endpoint_info_list: vec![is_trailer_connected_endpoint_info], + name: car_v1::trailer::is_car_unlocked::NAME.to_string(), + id: car_v1::trailer::is_car_unlocked::ID.to_string(), + description: car_v1::trailer::is_car_unlocked::DESCRIPTION.to_string(), + endpoint_info_list: vec![is_car_unlocked_endpoint_info], }; let mut client = InvehicleDigitalTwinClient::connect(invehicle_digital_twin_uri.to_string()) @@ -69,14 +69,14 @@ async fn main() -> Result<(), Box> { .target(Target::Stdout) .init(); - info!("The Provider has started."); + info!("The Provider CarKeyLockUnlock has started."); let provider_uri = format!("http://{PROVIDER_AUTHORITY}"); debug!("The Provider URI is {}", &provider_uri); // Setup the HTTP server. let addr: SocketAddr = PROVIDER_AUTHORITY.parse()?; - let provider_impl = TrailerConnectedProviderImpl::default(); + let provider_impl = CarkeyLockUnlockProviderImpl::default(); let server_future = Server::builder() .add_service(DigitalTwinGetProviderServer::new(provider_impl)) .serve(addr); diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/src/trailer_connected_provider_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/src/trailer_connected_provider_impl.rs deleted file mode 100644 index 8444a94..0000000 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_connected_provider/src/trailer_connected_provider_impl.rs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -//! Module containing gRPC service implementation based on [`interfaces::digital_twin_get_provider.proto`]. -//! -//! Provides a gRPC endpoint for getting if the trailer is connected -use smart_trailer_interfaces::digital_twin_get_provider::v1::digital_twin_get_provider_server::DigitalTwinGetProvider; -use smart_trailer_interfaces::digital_twin_get_provider::v1::{GetRequest, GetResponse}; -use tonic::{Request, Response, Status}; - -/// Base structure for the Trailer Connected Provider gRPC service. -#[derive(Default)] -pub struct TrailerConnectedProviderImpl {} - -#[tonic::async_trait] -impl DigitalTwinGetProvider for TrailerConnectedProviderImpl { - /// This function returns the value of "is_trailer_connected" property - async fn get(&self, _request: Request) -> Result, Status> { - // For now, we assume that if this provider is active, the trailer is connected - // To expand this use case, we could simulate the trailer being disconnected as well - let get_response = GetResponse { - property_value: true, - }; - Ok(Response::new(get_response)) - } -} From 536c006f52c4c5202faac00394d052c00cd985a3 Mon Sep 17 00:00:00 2001 From: anonym Date: Wed, 29 Nov 2023 10:02:52 +0100 Subject: [PATCH 11/38] Added car ignition on and car ignition off provider. --- .../car_off_provider/src/car_off_provider_impl.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/src/car_off_provider_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/src/car_off_provider_impl.rs index 2247774..b8adf6f 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/src/car_off_provider_impl.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider/src/car_off_provider_impl.rs @@ -1,4 +1,4 @@ -// Copyright (c) IAV GmbH. +// Copyright (c) Microsoft Corporation. // Licensed under the MIT license. // SPDX-License-Identifier: MIT From c804e1619cb28b0f2204bec1980303e0abc3facf Mon Sep 17 00:00:00 2001 From: "Sreelan Nair, Sreya (TD-M)" Date: Wed, 29 Nov 2023 10:10:28 +0100 Subject: [PATCH 12/38] providers for CAR lock and Unlock added --- .../carkey_lock_unlock_provider/Cargo.toml | 18 --- .../carkey_lock_unlock_provider/Dockerfile | 74 ------------ .../src/carkey_lock_unlock_provider_impl.rs | 27 ----- .../carkey_lock_unlock_provider/src/main.rs | 110 ------------------ 4 files changed, 229 deletions(-) delete mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/Cargo.toml delete mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/Dockerfile delete mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/src/carkey_lock_unlock_provider_impl.rs delete mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/src/main.rs diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/Cargo.toml deleted file mode 100644 index b0df308..0000000 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "carkey_lock_unlock" -version = "0.1.0" -edition = "2023" -license = "MIT" - -[dependencies] -digital-twin-model = { path = "../../digital-twin-model" } -digital_twin_providers_common = { path = "../common" } -env_logger = { workspace = true } -interfaces = { path = "../../../../proto_build"} -log = { workspace = true } -serde = { workspace = true } -serde_derive = { workspace = true } -serde_json = { workspace = true } -wheelchair_assistant_interfaces = { path = "../../proto_build" } -tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal"] } -tonic = { workspace = true } diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/Dockerfile b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/Dockerfile deleted file mode 100644 index 13c98a8..0000000 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/Dockerfile +++ /dev/null @@ -1,74 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# SPDX-License-Identifier: MIT - -# Comments are provided throughout this file to help you get started. -# If you need more help, visit the Dockerfile reference guide at -# https://docs.docker.com/engine/reference/builder/ - -################################################################################ -# Create a stage for building the application. - -ARG RUST_VERSION=1.72.1 -FROM docker.io/library/rust:${RUST_VERSION}-slim-bullseye AS build -ARG APP_NAME=carkey_lock_unlock_provider -WORKDIR /sdv - -COPY ./ . - -# Add Build dependencies. -RUN apt update -y && apt upgrade -y && apt install -y \ - cmake \ - libssl-dev \ - pkg-config \ - protobuf-compiler - -# Check that APP_NAME argument is valid. -RUN sanitized=$(echo "${APP_NAME}" | tr -dc '^[a-zA-Z_0-9-]+$'); \ -[ "$sanitized" = "${APP_NAME}" ] || { \ - echo "ARG 'APP_NAME' is invalid. APP_NAME='${APP_NAME}' sanitized='${sanitized}'"; \ - exit 1; \ -} - -# Build the application -RUN cargo build --release --bin "${APP_NAME}" - -# Copy the built application to working directory. -RUN cp ./target/release/"${APP_NAME}" /sdv/service - -################################################################################ -# Create a new stage for running the application that contains the minimal -# runtime dependencies for the application. This often uses a different base -# image from the build stage where the necessary files are copied from the build -# stage. -# -# The example below uses the debian bullseye image as the foundation for running the app. -# By specifying the "bullseye-slim" tag, it will also use whatever happens to be the -# most recent version of that tag when you build your Dockerfile. If -# reproducability is important, consider using a digest -# (e.g., debian@sha256:ac707220fbd7b67fc19b112cee8170b41a9e97f703f588b2cdbbcdcecdd8af57). -FROM docker.io/library/debian:bullseye-slim AS final - -# Create a non-privileged user that the app will run under. -# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user -ARG UID=10001 -RUN adduser \ - --disabled-password \ - --gecos "" \ - --home "/nonexistent" \ - --shell "/sbin/nologin" \ - --no-create-home \ - --uid "${UID}" \ - appuser -USER appuser - -WORKDIR /sdv - -# Copy the executable from the "build" stage. -COPY --from=build /sdv/service /sdv/ - -# Expose the port that the application listens on. -EXPOSE 4020 - -# What the container should run when it is started. -CMD ["/sdv/service"] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/src/carkey_lock_unlock_provider_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/src/carkey_lock_unlock_provider_impl.rs deleted file mode 100644 index ffbac3a..0000000 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/src/carkey_lock_unlock_provider_impl.rs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -//! Module containing gRPC service implementation based on [`interfaces::digital_twin_get_provider.proto`]. -//! -//! Provides a gRPC endpoint for getting if the car key is unlocked -use wheelchair_assistant_interfaces::digital_twin_get_provider::v1::digital_twin_get_provider_server::DigitalTwinGetProvider; -use wheelchair_assistant_interfaces::digital_twin_get_provider::v1::{GetRequest, GetResponse}; -use tonic::{Request, Response, Status}; - -/// Base structure for the Carkey lock/Unlock Provider gRPC service. -#[derive(Default)] -pub struct CarkeyLockUnlockProviderImpl {} - -#[tonic::async_trait] -impl DigitalTwinGetProvider for CarkeyLockUnlockProviderImpl { - /// This function returns the value of "is_car_unlocked" property - async fn get(&self, _request: Request) -> Result, Status> { - // For now, we assume that if this provider is active, the car is unlocked - // To expand this use case, we could simulate the car being locked as well - let get_response = GetResponse { - property_value: true, - }; - Ok(Response::new(get_response)) - } -} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/src/main.rs deleted file mode 100644 index 31506c4..0000000 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_unlock_provider/src/main.rs +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -use digital_twin_model::car_v1; - -use digital_twin_providers_common::constants::chariott::{ - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, - INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, -}; -use digital_twin_providers_common::constants::{digital_twin_operation, digital_twin_protocol}; -use digital_twin_providers_common::utils::discover_service_using_chariott; -use env_logger::{Builder, Target}; -use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; -use interfaces::invehicle_digital_twin::v1::{EndpointInfo, EntityAccessInfo, RegisterRequest}; -use log::{debug, info, LevelFilter}; -use wheelchair_assistant_interfaces::digital_twin_get_provider::v1::digital_twin_get_provider_server::DigitalTwinGetProviderServer; -use std::net::SocketAddr; -use tokio::signal; -use tonic::transport::Server; -use tonic::Status; -use carkey_lock_unlock_provider_impl::CarkeyLockUnlockProviderImpl; - -mod carkey_lock_unlock_provider_impl; - -// TODO: These could be added in configuration -const CHARIOTT_SERVICE_DISCOVERY_URI: &str = "http://0.0.0.0:50000"; -const PROVIDER_AUTHORITY: &str = "0.0.0.0:4020"; - -/// Register the "is_car_unlocked" property's endpoint. -/// -/// # Arguments -/// * `invehicle_digital_twin_uri` - The In-Vehicle Digital Twin URI. -/// * `provider_uri` - The provider's URI. -async fn register_entity( - invehicle_digital_twin_uri: &str, - provider_uri: &str, -) -> Result<(), Status> { - let is_car_unlocked_endpoint_info = EndpointInfo { - protocol: digital_twin_protocol::GRPC.to_string(), - operations: vec![digital_twin_operation::GET.to_string()], - uri: provider_uri.to_string(), - context: car_v1::car::is_car_unlocked::ID.to_string(), - }; - let entity_access_info = EntityAccessInfo { - name: car_v1::trailer::is_car_unlocked::NAME.to_string(), - id: car_v1::trailer::is_car_unlocked::ID.to_string(), - description: car_v1::trailer::is_car_unlocked::DESCRIPTION.to_string(), - endpoint_info_list: vec![is_car_unlocked_endpoint_info], - }; - - let mut client = InvehicleDigitalTwinClient::connect(invehicle_digital_twin_uri.to_string()) - .await - .map_err(|e| Status::internal(e.to_string()))?; - let request = tonic::Request::new(RegisterRequest { - entity_access_info_list: vec![entity_access_info], - }); - let _response = client.register(request).await?; - - Ok(()) -} - -#[tokio::main] -async fn main() -> Result<(), Box> { - // Set up logging. - Builder::new() - .filter(None, LevelFilter::Debug) - .target(Target::Stdout) - .init(); - - info!("The Provider CarKeyLockUnlock has started."); - - let provider_uri = format!("http://{PROVIDER_AUTHORITY}"); - debug!("The Provider URI is {}", &provider_uri); - - // Setup the HTTP server. - let addr: SocketAddr = PROVIDER_AUTHORITY.parse()?; - let provider_impl = CarkeyLockUnlockProviderImpl::default(); - let server_future = Server::builder() - .add_service(DigitalTwinGetProviderServer::new(provider_impl)) - .serve(addr); - info!("The HTTP server is listening on address '{PROVIDER_AUTHORITY}'"); - - // Get the In-vehicle Digital Twin Uri from the service discovery system - // This could be enhanced to add retries for robustness - let invehicle_digital_twin_uri = discover_service_using_chariott( - CHARIOTT_SERVICE_DISCOVERY_URI, - INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, - INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, - INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, - ) - .await?; - - debug!("Sending a register request to the In-Vehicle Digital Twin Service URI {invehicle_digital_twin_uri}"); - - // This could be enhanced to add retries for robustness - register_entity(&invehicle_digital_twin_uri, &provider_uri).await?; - server_future.await?; - - signal::ctrl_c() - .await - .expect("Failed to listen for control-c event"); - - info!("The Provider has completed."); - - Ok(()) -} From e4c6a9e5d185d0c12d9fe8a1455be36b1c8ef2d6 Mon Sep 17 00:00:00 2001 From: "Sreelan Nair, Sreya (TD-M)" Date: Wed, 29 Nov 2023 11:27:15 +0100 Subject: [PATCH 13/38] added providers for wheelchair distance decreasing --- .../trailer_properties_provider/Cargo.toml | 29 -- .../trailer_properties_provider/Dockerfile | 74 ----- .../trailer_properties_provider/src/main.rs | 170 ------------ .../src/trailer_properties_provider_impl.rs | 0 .../src/trailer_properties_provider_impl.rs | 259 ++++++++++++++++++ 5 files changed, 259 insertions(+), 273 deletions(-) delete mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/Cargo.toml delete mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/Dockerfile delete mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/src/main.rs rename in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/{trailer_properties_provider => wheelchair_distance_decreasing_provider}/src/trailer_properties_provider_impl.rs (100%) create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/trailer_properties_provider_impl.rs diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/Cargo.toml deleted file mode 100644 index 90747e7..0000000 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/Cargo.toml +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# SPDX-License-Identifier: MIT - -[package] -name = "trailer_properties_provider" -version = "0.1.0" -edition = "2021" -license = "MIT" - -[dependencies] -digital-twin-model = { path = "../../digital-twin-model" } -digital_twin_providers_common = { path = "../common" } -env_logger = { workspace = true } -interfaces = { path = "../../../../proto_build"} -log = { workspace = true } -paho-mqtt = { workspace = true } -parking_lot = { workspace = true } -serde = { workspace = true } -serde_derive = { workspace = true } -serde_json = { workspace = true } -smart_trailer_interfaces = { path = "../../proto_build" } -strum = { workspace = true } -strum_macros = { workspace = true } -tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal"] } -tonic = { workspace = true } - -[features] -containerize = ["digital_twin_providers_common/containerize"] diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/Dockerfile b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/Dockerfile deleted file mode 100644 index 630cda5..0000000 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/Dockerfile +++ /dev/null @@ -1,74 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# SPDX-License-Identifier: MIT - -# Comments are provided throughout this file to help you get started. -# If you need more help, visit the Dockerfile reference guide at -# https://docs.docker.com/engine/reference/builder/ - -################################################################################ -# Create a stage for building the application. - -ARG RUST_VERSION=1.72.1 -FROM docker.io/library/rust:${RUST_VERSION}-slim-bullseye AS build -ARG APP_NAME=trailer_properties_provider -WORKDIR /sdv - -COPY ./ . - -# Add Build dependencies. -RUN apt update && apt upgrade -y && apt install -y \ - cmake \ - libssl-dev \ - pkg-config \ - protobuf-compiler - -# Check that APP_NAME argument is valid. -RUN sanitized=$(echo "${APP_NAME}" | tr -dc '^[a-zA-Z_0-9-]+$'); \ -[ "$sanitized" = "${APP_NAME}" ] || { \ - echo "ARG 'APP_NAME' is invalid. APP_NAME='${APP_NAME}' sanitized='${sanitized}'"; \ - exit 1; \ -} - -# Build the application -RUN cargo build --release --bin "${APP_NAME}" - -# Copy the built application to working directory. -RUN cp ./target/release/"${APP_NAME}" /sdv/service - -################################################################################ -# Create a new stage for running the application that contains the minimal -# runtime dependencies for the application. This often uses a different base -# image from the build stage where the necessary files are copied from the build -# stage. -# -# The example below uses the debian bullseye image as the foundation for running the app. -# By specifying the "bullseye-slim" tag, it will also use whatever happens to be the -# most recent version of that tag when you build your Dockerfile. If -# reproducability is important, consider using a digest -# (e.g., debian@sha256:ac707220fbd7b67fc19b112cee8170b41a9e97f703f588b2cdbbcdcecdd8af57). -FROM docker.io/library/debian:bullseye-slim AS final - -# Create a non-privileged user that the app will run under. -# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user -ARG UID=10001 -RUN adduser \ - --disabled-password \ - --gecos "" \ - --home "/nonexistent" \ - --shell "/sbin/nologin" \ - --no-create-home \ - --uid "${UID}" \ - appuser -USER appuser - -WORKDIR /sdv - -# Copy the executable from the "build" stage. -COPY --from=build /sdv/service /sdv/ - -# Expose the port that the application listens on. -EXPOSE 4030 - -# What the container should run when it is started. -CMD ["/sdv/service"] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/src/main.rs deleted file mode 100644 index f8178b8..0000000 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/src/main.rs +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -mod trailer_properties_provider_impl; - -use std::net::SocketAddr; - -use digital_twin_model::trailer_v1; -use digital_twin_providers_common::constants::chariott::{ - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, - INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, -}; -use digital_twin_providers_common::constants::{digital_twin_operation, digital_twin_protocol}; -use digital_twin_providers_common::utils::discover_service_using_chariott; -use env_logger::{Builder, Target}; -use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; -use interfaces::invehicle_digital_twin::v1::{EndpointInfo, EntityAccessInfo, RegisterRequest}; -use interfaces::module::managed_subscribe::v1::managed_subscribe_callback_server::ManagedSubscribeCallbackServer; -use log::{debug, info, warn, LevelFilter}; -use tokio::signal; -use tokio::sync::watch; -use tokio::time::{sleep, Duration}; -use tonic::transport::Server; -use tonic::Status; - -use crate::trailer_properties_provider_impl::TrailerPropertiesProviderImpl; - -// TODO: These could be added in configuration -const CHARIOTT_SERVICE_DISCOVERY_URI: &str = "http://0.0.0.0:50000"; -const PROVIDER_AUTHORITY: &str = "0.0.0.0:4030"; - -const DEFAULT_MIN_INTERVAL_MS: u64 = 10000; // 10 seconds - -/// Register the trailer weight property's endpoint. -/// -/// # Arguments -/// * `invehicle_digital_twin_uri` - The In-Vehicle Digital Twin URI. -/// * `provider_uri` - The provider's URI. -async fn register_trailer_weight( - invehicle_digital_twin_uri: &str, - provider_uri: &str, -) -> Result<(), Status> { - let endpoint_info = EndpointInfo { - protocol: digital_twin_protocol::GRPC.to_string(), - operations: vec![digital_twin_operation::MANAGEDSUBSCRIBE.to_string()], - uri: provider_uri.to_string(), - context: "GetSubscriptionInfo".to_string(), - }; - - let entity_access_info = EntityAccessInfo { - name: trailer_v1::trailer::trailer_weight::NAME.to_string(), - id: trailer_v1::trailer::trailer_weight::ID.to_string(), - description: trailer_v1::trailer::trailer_weight::DESCRIPTION.to_string(), - endpoint_info_list: vec![endpoint_info], - }; - - let mut client = InvehicleDigitalTwinClient::connect(invehicle_digital_twin_uri.to_string()) - .await - .map_err(|e| Status::internal(e.to_string()))?; - let request = tonic::Request::new(RegisterRequest { - entity_access_info_list: vec![entity_access_info], - }); - let _response = client.register(request).await?; - - Ok(()) -} - -/// Start the trailer weight data stream. -/// -/// # Arguments -/// `min_interval_ms` - minimum frequency for data stream. -fn start_trailer_weight_data_stream(min_interval_ms: u64) -> watch::Receiver { - debug!("Starting the Provider's trailer weight data stream."); - let mut weight: i32 = 1000; - let (sender, reciever) = watch::channel(weight); - tokio::spawn(async move { - let mut is_weight_increasing: bool = true; - loop { - debug!( - "Recording new value for {} of {weight}", - trailer_v1::trailer::trailer_weight::ID - ); - - if let Err(err) = sender.send(weight) { - warn!("Failed to get new value due to '{err:?}'"); - break; - } - - debug!("Completed the publish request"); - - // Calculate the new weight. - // It bounces back and forth between 1000 and 2000 kilograms. - // It increases in increments of 500 to simulate a large amount of cargo being loaded - // And decreases in increments of 50 to simulate smaller deliveries being made - if is_weight_increasing { - if weight == 2000 { - is_weight_increasing = false; - weight -= 50; - } else { - weight += 500; - } - } else if weight == 1000 { - is_weight_increasing = true; - weight += 500; - } else { - weight -= 50; - } - - sleep(Duration::from_millis(min_interval_ms)).await; - } - }); - - reciever -} - -#[tokio::main] -async fn main() -> Result<(), Box> { - // Setup logging. - Builder::new() - .filter(None, LevelFilter::Info) - .target(Target::Stdout) - .init(); - - info!("The Provider has started."); - - let provider_uri = format!("http://{PROVIDER_AUTHORITY}"); // Devskim: ignore DS137138 - - // Get the In-vehicle Digital Twin Uri from the service discovery system - // This could be enhanced to add retries for robustness - let invehicle_digital_twin_uri = discover_service_using_chariott( - CHARIOTT_SERVICE_DISCOVERY_URI, - INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, - INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, - INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, - ) - .await?; - - debug!("The Provider retrieved Chariott's Service Discovery URI."); - - // Start mock data stream. - let data_stream = start_trailer_weight_data_stream(DEFAULT_MIN_INTERVAL_MS); - debug!("The Provider has started the trailer weight data stream."); - - // Setup provider management cb endpoint. - let provider = TrailerPropertiesProviderImpl::new(data_stream, DEFAULT_MIN_INTERVAL_MS); - - // Start service. - let addr: SocketAddr = PROVIDER_AUTHORITY.parse()?; - let server_future = Server::builder() - .add_service(ManagedSubscribeCallbackServer::new(provider)) - .serve(addr); - - // This could be enhanced with retries for robustness - register_trailer_weight(&invehicle_digital_twin_uri, &provider_uri).await?; - debug!("The Provider has registered with Ibeji."); - - server_future.await?; - - signal::ctrl_c() - .await - .expect("Failed to listen for control-c event"); - - info!("The Provider has completed."); - - Ok(()) -} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/src/trailer_properties_provider_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/trailer_properties_provider_impl.rs similarity index 100% rename from in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/trailer_properties_provider/src/trailer_properties_provider_impl.rs rename to in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/trailer_properties_provider_impl.rs diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/trailer_properties_provider_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/trailer_properties_provider_impl.rs new file mode 100644 index 0000000..5ea60a1 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/trailer_properties_provider_impl.rs @@ -0,0 +1,259 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +use std::collections::HashMap; +use std::str::FromStr; +use std::sync::Arc; + +use interfaces::module::managed_subscribe::v1::managed_subscribe_callback_server::ManagedSubscribeCallback; +use interfaces::module::managed_subscribe::v1::{ + CallbackPayload, TopicManagementRequest, TopicManagementResponse, +}; + +use digital_twin_model::{trailer_v1, Metadata}; +use digital_twin_providers_common::utils; +use log::{debug, info, warn}; +use paho_mqtt as mqtt; +use parking_lot::RwLock; +use serde_derive::{Deserialize, Serialize}; +use strum_macros::{Display, EnumString}; +use tokio::sync::{mpsc, watch}; +use tokio::time::{sleep, Duration}; +use tonic::{Request, Response, Status}; + +const MQTT_CLIENT_ID: &str = "trailer-properties-publisher"; +const FREQUENCY_MS: &str = "frequency_ms"; + +#[derive(Debug, Serialize, Deserialize)] +struct TrailerWeightProperty { + #[serde(rename = "TrailerWeight")] + trailer_weight: trailer_v1::trailer::trailer_weight::TYPE, + #[serde(rename = "$metadata")] + metadata: Metadata, +} + +/// Actions that are returned from the Pub Sub Service. +#[derive(Clone, EnumString, Eq, Display, Debug, PartialEq)] +pub enum ProviderAction { + #[strum(serialize = "PUBLISH")] + Publish, + + #[strum(serialize = "STOP_PUBLISH")] + StopPublish, +} + +#[derive(Debug)] +pub struct TopicInfo { + topic: String, + stop_channel: mpsc::Sender, +} + +#[derive(Debug)] +pub struct TrailerPropertiesProviderImpl { + pub data_stream: watch::Receiver, + pub min_interval_ms: u64, + entity_map: Arc>>>, +} + +/// Create the JSON for the trailer weight property. +/// +/// # Arguments +/// * `trailer_weight` - The trailer weight value. +fn create_property_json(trailer_weight: i32) -> String { + let metadata = Metadata { + model: trailer_v1::trailer::trailer_weight::ID.to_string(), + }; + + let property: TrailerWeightProperty = TrailerWeightProperty { + trailer_weight, + metadata, + }; + + serde_json::to_string(&property).unwrap() +} + +/// Publish a message to a MQTT broker located. +/// +/// # Arguments +/// `broker_uri` - The MQTT broker's URI. +/// `topic` - The topic to publish to. +/// `content` - The message to publish. +fn publish_message(broker_uri: &str, topic: &str, content: &str) -> Result<(), String> { + let create_opts = mqtt::CreateOptionsBuilder::new() + .server_uri(broker_uri) + .client_id(MQTT_CLIENT_ID.to_string()) + .finalize(); + + let client = mqtt::Client::new(create_opts) + .map_err(|err| format!("Failed to create the client due to '{err:?}'"))?; + + let conn_opts = mqtt::ConnectOptionsBuilder::new() + .keep_alive_interval(Duration::from_secs(30)) + .clean_session(true) + .finalize(); + + let _connect_response = client + .connect(conn_opts) + .map_err(|err| format!("Failed to connect due to '{err:?}")); + + let msg = mqtt::Message::new(topic, content, mqtt::types::QOS_1); + if let Err(err) = client.publish(msg) { + return Err(format!("Failed to publish message due to '{err:?}")); + } + + if let Err(err) = client.disconnect(None) { + warn!("Failed to disconnect from topic '{topic}' on broker {broker_uri} due to {err:?}"); + } + + Ok(()) +} + +impl TrailerPropertiesProviderImpl { + /// Initializes provider with entities relevant to itself. + /// + /// # Arguments + /// * `data_stream` - Receiver for data stream for entity. + /// * `min_interval_ms` - The frequency of the data coming over the data stream. + pub fn new(data_stream: watch::Receiver, min_interval_ms: u64) -> Self { + // Initialize entity map. + let mut entity_map = HashMap::new(); + + // Insert entry for entity id's associated with provider. + entity_map.insert( + trailer_v1::trailer::trailer_weight::ID.to_string(), + Vec::new(), + ); + + // Create new instance. + TrailerPropertiesProviderImpl { + data_stream, + min_interval_ms, + entity_map: Arc::new(RwLock::new(entity_map)), + } + } + + /// Handles the 'PUBLISH' action from the callback. + /// + /// # Arguments + /// `payload` - Payload sent with the 'PUBLISH' action. + pub fn handle_publish_action(&self, payload: CallbackPayload) { + // Get payload information. + let topic = payload.topic; + let constraints = payload.constraints; + let min_interval_ms = self.min_interval_ms; + + // This should not be empty. + let mut subscription_info = payload.subscription_info.unwrap(); + + subscription_info.uri = utils::get_uri(&subscription_info.uri).unwrap(); + + // Create stop publish channel. + let (sender, mut reciever) = mpsc::channel(10); + + // Create topic info. + let topic_info = TopicInfo { + topic: topic.clone(), + stop_channel: sender, + }; + + // Record new topic in entity map. + { + let mut entity_lock = self.entity_map.write(); + let get_result = entity_lock.get_mut(&payload.entity_id); + get_result.unwrap().push(topic_info); + } + + let data_stream = self.data_stream.clone(); + + // Start thread for new topic. + tokio::spawn(async move { + // Get constraints information. + let mut frequency_ms = min_interval_ms; + + for constraint in constraints { + if constraint.r#type == *FREQUENCY_MS { + frequency_ms = u64::from_str(&constraint.value).unwrap(); + }; + } + + loop { + // See if we need to shutdown. + if reciever.try_recv() == Err(mpsc::error::TryRecvError::Disconnected) { + info!("Shutdown thread for {topic}."); + return; + } + + // Get data from stream at the current instant. + let data = *data_stream.borrow(); + let content = create_property_json(data); + let broker_uri = subscription_info.uri.clone(); + + // Publish message to broker. + info!( + "Publish to {topic} for {} with value {data}", + trailer_v1::trailer::trailer_weight::NAME + ); + + if let Err(err) = publish_message(&broker_uri, &topic, &content) { + warn!("Publish failed due to '{err:?}'"); + break; + } + + debug!("Completed publish to {topic}."); + + // Sleep for requested amount of time. + sleep(Duration::from_millis(frequency_ms)).await; + } + }); + } + + /// Handles the 'STOP_PUBLISH' action from the callback. + /// + /// # Arguments + /// `payload` - Payload sent with the 'STOP_PUBLISH' action. + pub fn handle_stop_publish_action(&self, payload: CallbackPayload) { + let topic_info: TopicInfo; + + let mut entity_lock = self.entity_map.write(); + let get_result = entity_lock.get_mut(&payload.entity_id); + + let topics = get_result.unwrap(); + + // Check to see if topic exists. + if let Some(index) = topics.iter_mut().position(|t| t.topic == payload.topic) { + // Remove topic. + topic_info = topics.swap_remove(index); + + // Stop publishing to removed topic. + drop(topic_info.stop_channel); + } else { + warn!("No topic found matching {}", payload.topic); + } + } +} + +#[tonic::async_trait] +impl ManagedSubscribeCallback for TrailerPropertiesProviderImpl { + /// Callback for a provider, will process a provider action. + /// + /// # Arguments + /// * `request` - The request with the action and associated payload. + async fn topic_management_cb( + &self, + request: Request, + ) -> Result, Status> { + let inner = request.into_inner(); + let action = inner.action; + let payload = inner.payload.unwrap(); + + let provider_action = ProviderAction::from_str(&action).unwrap(); + + match provider_action { + ProviderAction::Publish => Self::handle_publish_action(self, payload), + ProviderAction::StopPublish => Self::handle_stop_publish_action(self, payload), + } + + Ok(Response::new(TopicManagementResponse {})) + } +} From 69b6ba0e0e750a0a40eba1b21ba8199d4b3afa95 Mon Sep 17 00:00:00 2001 From: "Sreelan Nair, Sreya (TD-M)" Date: Wed, 29 Nov 2023 11:43:52 +0100 Subject: [PATCH 14/38] added the provider impl file for Distance decreasing --- ...=> wheelchair_distance_decreasing_impl.rs} | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) rename in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/{trailer_properties_provider_impl.rs => wheelchair_distance_decreasing_impl.rs} (90%) diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/trailer_properties_provider_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/wheelchair_distance_decreasing_impl.rs similarity index 90% rename from in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/trailer_properties_provider_impl.rs rename to in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/wheelchair_distance_decreasing_impl.rs index 5ea60a1..f9189e7 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/trailer_properties_provider_impl.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/wheelchair_distance_decreasing_impl.rs @@ -11,7 +11,7 @@ use interfaces::module::managed_subscribe::v1::{ CallbackPayload, TopicManagementRequest, TopicManagementResponse, }; -use digital_twin_model::{trailer_v1, Metadata}; +use digital_twin_model::{car_v1, Metadata}; use digital_twin_providers_common::utils; use log::{debug, info, warn}; use paho_mqtt as mqtt; @@ -22,13 +22,13 @@ use tokio::sync::{mpsc, watch}; use tokio::time::{sleep, Duration}; use tonic::{Request, Response, Status}; -const MQTT_CLIENT_ID: &str = "trailer-properties-publisher"; +const MQTT_CLIENT_ID: &str = "wheelchair-distance-decreasing-publisher"; const FREQUENCY_MS: &str = "frequency_ms"; #[derive(Debug, Serialize, Deserialize)] struct TrailerWeightProperty { - #[serde(rename = "TrailerWeight")] - trailer_weight: trailer_v1::trailer::trailer_weight::TYPE, + #[serde(rename = "WheelchairDistanceDecreasing")] + trailer_weight: car_v1::car::wheelchair_distance_decreasing::TYPE, #[serde(rename = "$metadata")] metadata: Metadata, } @@ -50,7 +50,7 @@ pub struct TopicInfo { } #[derive(Debug)] -pub struct TrailerPropertiesProviderImpl { +pub struct WheelchairDistanceDecreasingProviderImpl { pub data_stream: watch::Receiver, pub min_interval_ms: u64, entity_map: Arc>>>, @@ -62,11 +62,11 @@ pub struct TrailerPropertiesProviderImpl { /// * `trailer_weight` - The trailer weight value. fn create_property_json(trailer_weight: i32) -> String { let metadata = Metadata { - model: trailer_v1::trailer::trailer_weight::ID.to_string(), + model: car_v1::car::wheelchair_distance_decreasing::ID.to_string(), }; - let property: TrailerWeightProperty = TrailerWeightProperty { - trailer_weight, + let property: WheelchairDistanceDecreasingProperty = WheelchairDistanceDecreasingProperty { + wheelchair_distance_decreasing, metadata, }; @@ -109,7 +109,7 @@ fn publish_message(broker_uri: &str, topic: &str, content: &str) -> Result<(), S Ok(()) } -impl TrailerPropertiesProviderImpl { +impl WheelchairDistanceDecreasingProviderImpl { /// Initializes provider with entities relevant to itself. /// /// # Arguments @@ -121,12 +121,12 @@ impl TrailerPropertiesProviderImpl { // Insert entry for entity id's associated with provider. entity_map.insert( - trailer_v1::trailer::trailer_weight::ID.to_string(), + car_v1::car::wheelchair_distance_decreasing::ID.to_string(), Vec::new(), ); // Create new instance. - TrailerPropertiesProviderImpl { + WheelchairDistanceDecreasingProviderImpl { data_stream, min_interval_ms, entity_map: Arc::new(RwLock::new(entity_map)), @@ -192,7 +192,7 @@ impl TrailerPropertiesProviderImpl { // Publish message to broker. info!( "Publish to {topic} for {} with value {data}", - trailer_v1::trailer::trailer_weight::NAME + car_v1::car::wheelchair_distance_decreasing::NAME ); if let Err(err) = publish_message(&broker_uri, &topic, &content) { @@ -234,7 +234,7 @@ impl TrailerPropertiesProviderImpl { } #[tonic::async_trait] -impl ManagedSubscribeCallback for TrailerPropertiesProviderImpl { +impl ManagedSubscribeCallback for WheelchairDistanceDecreasingProviderImpl { /// Callback for a provider, will process a provider action. /// /// # Arguments From 7cb8e8468fc9f325abf7b94f95c44b4d3eda8bb2 Mon Sep 17 00:00:00 2001 From: "Sreelan Nair, Sreya (TD-M)" Date: Wed, 29 Nov 2023 11:46:33 +0100 Subject: [PATCH 15/38] renamed files --- .../src/wheelchair_distance_decreasing_impl.rs | 0 .../src/trailer_properties_provider_impl.rs | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/{wheelchair_distance_increasing_provider => wheelchair_distance_decreasing_provider}/src/wheelchair_distance_decreasing_impl.rs (100%) rename in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/{wheelchair_distance_decreasing_provider => wheelchair_distance_increasing_provider}/src/trailer_properties_provider_impl.rs (100%) diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/wheelchair_distance_decreasing_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_impl.rs similarity index 100% rename from in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/wheelchair_distance_decreasing_impl.rs rename to in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_impl.rs diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/trailer_properties_provider_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/trailer_properties_provider_impl.rs similarity index 100% rename from in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/trailer_properties_provider_impl.rs rename to in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/trailer_properties_provider_impl.rs From 6811ff9ca36927d647d633de8588193829b9a4f8 Mon Sep 17 00:00:00 2001 From: "Sreelan Nair, Sreya (TD-M)" Date: Wed, 29 Nov 2023 13:14:10 +0100 Subject: [PATCH 16/38] final changes --- ...hair_distance_decreasing_impl_provider.rs} | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) rename in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/{wheelchair_distance_decreasing_impl.rs => wheelchair_distance_decreasing_impl_provider.rs} (92%) diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_impl_provider.rs similarity index 92% rename from in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_impl.rs rename to in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_impl_provider.rs index f9189e7..5f1db43 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_impl.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_impl_provider.rs @@ -26,9 +26,9 @@ const MQTT_CLIENT_ID: &str = "wheelchair-distance-decreasing-publisher"; const FREQUENCY_MS: &str = "frequency_ms"; #[derive(Debug, Serialize, Deserialize)] -struct TrailerWeightProperty { - #[serde(rename = "WheelchairDistanceDecreasing")] - trailer_weight: car_v1::car::wheelchair_distance_decreasing::TYPE, +struct WheelchairDistanceProperty { + #[serde(rename = "WheelchairDistance")] + wheelchair_distance: car_v1::car::wheelchair_distance::TYPE, #[serde(rename = "$metadata")] metadata: Metadata, } @@ -56,17 +56,17 @@ pub struct WheelchairDistanceDecreasingProviderImpl { entity_map: Arc>>>, } -/// Create the JSON for the trailer weight property. +/// Create the JSON for the wheelchair distance property. /// /// # Arguments -/// * `trailer_weight` - The trailer weight value. -fn create_property_json(trailer_weight: i32) -> String { +/// * `wheelchair_distance` - The wheelchair distance value. +fn create_property_json(wheelchair_distance: i32) -> String { let metadata = Metadata { - model: car_v1::car::wheelchair_distance_decreasing::ID.to_string(), + model: car_v1::car::wheelchair_distance::ID.to_string(), }; - let property: WheelchairDistanceDecreasingProperty = WheelchairDistanceDecreasingProperty { - wheelchair_distance_decreasing, + let property: WheelchairDistanceProperty = WheelchairDistanceProperty { + wheelchair_distance, metadata, }; @@ -121,7 +121,7 @@ impl WheelchairDistanceDecreasingProviderImpl { // Insert entry for entity id's associated with provider. entity_map.insert( - car_v1::car::wheelchair_distance_decreasing::ID.to_string(), + car_v1::car::wheelchair_distance::ID.to_string(), Vec::new(), ); @@ -192,7 +192,7 @@ impl WheelchairDistanceDecreasingProviderImpl { // Publish message to broker. info!( "Publish to {topic} for {} with value {data}", - car_v1::car::wheelchair_distance_decreasing::NAME + car_v1::car::wheelchair_distance::NAME ); if let Err(err) = publish_message(&broker_uri, &topic, &content) { From 87b6ba5ecd29e18283ca07e9dac011689c6a7f2e Mon Sep 17 00:00:00 2001 From: DennisHa95 Date: Wed, 29 Nov 2023 13:24:23 +0100 Subject: [PATCH 17/38] Added wheelchair_distance_increasing provider. --- .../src/trailer_properties_provider_impl.rs | 259 ------------------ 1 file changed, 259 deletions(-) delete mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/trailer_properties_provider_impl.rs diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/trailer_properties_provider_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/trailer_properties_provider_impl.rs deleted file mode 100644 index 5ea60a1..0000000 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/trailer_properties_provider_impl.rs +++ /dev/null @@ -1,259 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -use std::collections::HashMap; -use std::str::FromStr; -use std::sync::Arc; - -use interfaces::module::managed_subscribe::v1::managed_subscribe_callback_server::ManagedSubscribeCallback; -use interfaces::module::managed_subscribe::v1::{ - CallbackPayload, TopicManagementRequest, TopicManagementResponse, -}; - -use digital_twin_model::{trailer_v1, Metadata}; -use digital_twin_providers_common::utils; -use log::{debug, info, warn}; -use paho_mqtt as mqtt; -use parking_lot::RwLock; -use serde_derive::{Deserialize, Serialize}; -use strum_macros::{Display, EnumString}; -use tokio::sync::{mpsc, watch}; -use tokio::time::{sleep, Duration}; -use tonic::{Request, Response, Status}; - -const MQTT_CLIENT_ID: &str = "trailer-properties-publisher"; -const FREQUENCY_MS: &str = "frequency_ms"; - -#[derive(Debug, Serialize, Deserialize)] -struct TrailerWeightProperty { - #[serde(rename = "TrailerWeight")] - trailer_weight: trailer_v1::trailer::trailer_weight::TYPE, - #[serde(rename = "$metadata")] - metadata: Metadata, -} - -/// Actions that are returned from the Pub Sub Service. -#[derive(Clone, EnumString, Eq, Display, Debug, PartialEq)] -pub enum ProviderAction { - #[strum(serialize = "PUBLISH")] - Publish, - - #[strum(serialize = "STOP_PUBLISH")] - StopPublish, -} - -#[derive(Debug)] -pub struct TopicInfo { - topic: String, - stop_channel: mpsc::Sender, -} - -#[derive(Debug)] -pub struct TrailerPropertiesProviderImpl { - pub data_stream: watch::Receiver, - pub min_interval_ms: u64, - entity_map: Arc>>>, -} - -/// Create the JSON for the trailer weight property. -/// -/// # Arguments -/// * `trailer_weight` - The trailer weight value. -fn create_property_json(trailer_weight: i32) -> String { - let metadata = Metadata { - model: trailer_v1::trailer::trailer_weight::ID.to_string(), - }; - - let property: TrailerWeightProperty = TrailerWeightProperty { - trailer_weight, - metadata, - }; - - serde_json::to_string(&property).unwrap() -} - -/// Publish a message to a MQTT broker located. -/// -/// # Arguments -/// `broker_uri` - The MQTT broker's URI. -/// `topic` - The topic to publish to. -/// `content` - The message to publish. -fn publish_message(broker_uri: &str, topic: &str, content: &str) -> Result<(), String> { - let create_opts = mqtt::CreateOptionsBuilder::new() - .server_uri(broker_uri) - .client_id(MQTT_CLIENT_ID.to_string()) - .finalize(); - - let client = mqtt::Client::new(create_opts) - .map_err(|err| format!("Failed to create the client due to '{err:?}'"))?; - - let conn_opts = mqtt::ConnectOptionsBuilder::new() - .keep_alive_interval(Duration::from_secs(30)) - .clean_session(true) - .finalize(); - - let _connect_response = client - .connect(conn_opts) - .map_err(|err| format!("Failed to connect due to '{err:?}")); - - let msg = mqtt::Message::new(topic, content, mqtt::types::QOS_1); - if let Err(err) = client.publish(msg) { - return Err(format!("Failed to publish message due to '{err:?}")); - } - - if let Err(err) = client.disconnect(None) { - warn!("Failed to disconnect from topic '{topic}' on broker {broker_uri} due to {err:?}"); - } - - Ok(()) -} - -impl TrailerPropertiesProviderImpl { - /// Initializes provider with entities relevant to itself. - /// - /// # Arguments - /// * `data_stream` - Receiver for data stream for entity. - /// * `min_interval_ms` - The frequency of the data coming over the data stream. - pub fn new(data_stream: watch::Receiver, min_interval_ms: u64) -> Self { - // Initialize entity map. - let mut entity_map = HashMap::new(); - - // Insert entry for entity id's associated with provider. - entity_map.insert( - trailer_v1::trailer::trailer_weight::ID.to_string(), - Vec::new(), - ); - - // Create new instance. - TrailerPropertiesProviderImpl { - data_stream, - min_interval_ms, - entity_map: Arc::new(RwLock::new(entity_map)), - } - } - - /// Handles the 'PUBLISH' action from the callback. - /// - /// # Arguments - /// `payload` - Payload sent with the 'PUBLISH' action. - pub fn handle_publish_action(&self, payload: CallbackPayload) { - // Get payload information. - let topic = payload.topic; - let constraints = payload.constraints; - let min_interval_ms = self.min_interval_ms; - - // This should not be empty. - let mut subscription_info = payload.subscription_info.unwrap(); - - subscription_info.uri = utils::get_uri(&subscription_info.uri).unwrap(); - - // Create stop publish channel. - let (sender, mut reciever) = mpsc::channel(10); - - // Create topic info. - let topic_info = TopicInfo { - topic: topic.clone(), - stop_channel: sender, - }; - - // Record new topic in entity map. - { - let mut entity_lock = self.entity_map.write(); - let get_result = entity_lock.get_mut(&payload.entity_id); - get_result.unwrap().push(topic_info); - } - - let data_stream = self.data_stream.clone(); - - // Start thread for new topic. - tokio::spawn(async move { - // Get constraints information. - let mut frequency_ms = min_interval_ms; - - for constraint in constraints { - if constraint.r#type == *FREQUENCY_MS { - frequency_ms = u64::from_str(&constraint.value).unwrap(); - }; - } - - loop { - // See if we need to shutdown. - if reciever.try_recv() == Err(mpsc::error::TryRecvError::Disconnected) { - info!("Shutdown thread for {topic}."); - return; - } - - // Get data from stream at the current instant. - let data = *data_stream.borrow(); - let content = create_property_json(data); - let broker_uri = subscription_info.uri.clone(); - - // Publish message to broker. - info!( - "Publish to {topic} for {} with value {data}", - trailer_v1::trailer::trailer_weight::NAME - ); - - if let Err(err) = publish_message(&broker_uri, &topic, &content) { - warn!("Publish failed due to '{err:?}'"); - break; - } - - debug!("Completed publish to {topic}."); - - // Sleep for requested amount of time. - sleep(Duration::from_millis(frequency_ms)).await; - } - }); - } - - /// Handles the 'STOP_PUBLISH' action from the callback. - /// - /// # Arguments - /// `payload` - Payload sent with the 'STOP_PUBLISH' action. - pub fn handle_stop_publish_action(&self, payload: CallbackPayload) { - let topic_info: TopicInfo; - - let mut entity_lock = self.entity_map.write(); - let get_result = entity_lock.get_mut(&payload.entity_id); - - let topics = get_result.unwrap(); - - // Check to see if topic exists. - if let Some(index) = topics.iter_mut().position(|t| t.topic == payload.topic) { - // Remove topic. - topic_info = topics.swap_remove(index); - - // Stop publishing to removed topic. - drop(topic_info.stop_channel); - } else { - warn!("No topic found matching {}", payload.topic); - } - } -} - -#[tonic::async_trait] -impl ManagedSubscribeCallback for TrailerPropertiesProviderImpl { - /// Callback for a provider, will process a provider action. - /// - /// # Arguments - /// * `request` - The request with the action and associated payload. - async fn topic_management_cb( - &self, - request: Request, - ) -> Result, Status> { - let inner = request.into_inner(); - let action = inner.action; - let payload = inner.payload.unwrap(); - - let provider_action = ProviderAction::from_str(&action).unwrap(); - - match provider_action { - ProviderAction::Publish => Self::handle_publish_action(self, payload), - ProviderAction::StopPublish => Self::handle_stop_publish_action(self, payload), - } - - Ok(Response::new(TopicManagementResponse {})) - } -} From 776efff9a736a938dd413e354b7bd7eb9eae2220 Mon Sep 17 00:00:00 2001 From: DennisHa95 Date: Wed, 29 Nov 2023 14:29:27 +0100 Subject: [PATCH 18/38] Adjusted connection providers to digital twins, first check code providers for variable name errors. --- .../src/wheelchair_distance_decreasing_impl_provider.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_impl_provider.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_impl_provider.rs index 5f1db43..17259cd 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_impl_provider.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_impl_provider.rs @@ -28,7 +28,7 @@ const FREQUENCY_MS: &str = "frequency_ms"; #[derive(Debug, Serialize, Deserialize)] struct WheelchairDistanceProperty { #[serde(rename = "WheelchairDistance")] - wheelchair_distance: car_v1::car::wheelchair_distance::TYPE, + wheelchair_distance: car_v1::car::car_wheelchair_distance::TYPE, #[serde(rename = "$metadata")] metadata: Metadata, } @@ -62,7 +62,7 @@ pub struct WheelchairDistanceDecreasingProviderImpl { /// * `wheelchair_distance` - The wheelchair distance value. fn create_property_json(wheelchair_distance: i32) -> String { let metadata = Metadata { - model: car_v1::car::wheelchair_distance::ID.to_string(), + model: car_v1::car::car_wheelchair_distance::ID.to_string(), }; let property: WheelchairDistanceProperty = WheelchairDistanceProperty { @@ -121,7 +121,7 @@ impl WheelchairDistanceDecreasingProviderImpl { // Insert entry for entity id's associated with provider. entity_map.insert( - car_v1::car::wheelchair_distance::ID.to_string(), + car_v1::car::car_wheelchair_distance::ID.to_string(), Vec::new(), ); @@ -192,7 +192,7 @@ impl WheelchairDistanceDecreasingProviderImpl { // Publish message to broker. info!( "Publish to {topic} for {} with value {data}", - car_v1::car::wheelchair_distance::NAME + car_v1::car::car_wheelchair_distance::NAME ); if let Err(err) = publish_message(&broker_uri, &topic, &content) { From 70b4f679101edcb064bd55da4fceb9f6ff1e3617 Mon Sep 17 00:00:00 2001 From: Eduard Rogozhkin Date: Wed, 29 Nov 2023 12:09:35 +0100 Subject: [PATCH 19/38] application wheelchair distance added --- .../smart_trailer_application/src/main.rs | 103 +++++++++++++++--- 1 file changed, 90 insertions(+), 13 deletions(-) diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/src/main.rs index fd42272..b1911be 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/src/main.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/src/main.rs @@ -4,7 +4,7 @@ use std::env; -use digital_twin_model::trailer_v1; +use digital_twin_model::car_v1; use digital_twin_providers_common::constants::chariott::{ INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, @@ -30,7 +30,7 @@ use tonic::{Request, Status}; use uuid::Uuid; const FREQUENCY_MS_FLAG: &str = "freq_ms="; -const MQTT_CLIENT_ID: &str = "smart-trailer-consumer"; +const MQTT_CLIENT_ID: &str = "wheelchair-distance-consumer"; // TODO: These could be added in configuration const CHARIOTT_SERVICE_DISCOVERY_URI: &str = "http://0.0.0.0:50000"; @@ -42,14 +42,16 @@ const MAX_RETRIES: i32 = 10; // for demo purposes we will retry a maximum of 10 // By default we will wait 5 seconds between retry attempts const DURATION_BETWEEN_ATTEMPTS: Duration = Duration::from_secs(5); +let mut state_distance: bool = false; + /// Get trailer weight's subscription information from managed subscribe endpoint. /// /// # Arguments /// * `managed_subscribe_uri` - The managed subscribe URI. /// * `constraints` - Constraints for the managed topic. -async fn get_trailer_weight_subscription_info( +async fn get_wheelchair_distance_subscription_info( managed_subscribe_uri: &str, - constraints: Vec, + constraints: Vec ) -> Result { // Create gRPC client. let mut client = ManagedSubscribeClient::connect(managed_subscribe_uri.to_string()) @@ -57,7 +59,7 @@ async fn get_trailer_weight_subscription_info( .map_err(|err| Status::from_error(err.into()))?; let request = Request::new(SubscriptionInfoRequest { - entity_id: trailer_v1::trailer::trailer_weight::ID.to_string(), + entity_id: car_v1::car::car_wheelchair_distance::ID.to_string(), constraints, }); @@ -71,7 +73,7 @@ async fn get_trailer_weight_subscription_info( /// # Arguments /// * `broker_uri` - The broker URI. /// * `topic` - The topic. -async fn receive_trailer_weight_updates( +async fn receive_car_wheelchair_distance_updates( broker_uri: &str, topic: &str, ) -> Result, String> { @@ -126,7 +128,17 @@ async fn receive_trailer_weight_updates( // Here we log the message received. This could be expanded to parsing the message, // Obtaining the weight and making decisions based on the weight // For example, adjusting body functions or powertrain of the towing vehicle. + let distance = msg["WheelchairDistance"]; + info!("{}", distance); info!("{}", msg); + + if distance <= 200 { + info!("Near!"); + state_distance = true; + } else { + info!("Far!"); + state_distance = false; + } } else if !client.is_connected() { if client.reconnect().is_ok() { _subscribe_response = client @@ -150,6 +162,66 @@ async fn receive_trailer_weight_updates( Ok(sub_handle) } +/// Register the wheelchair distance property's endpoint. +/// +/// # Arguments +/// * `invehicle_digital_twin_uri` - The In-Vehicle Digital Twin URI. +/// * `provider_uri` - The provider's URI. +async fn provider_register_wheelchair_distance( + invehicle_digital_twin_uri: &str, + provider_uri: &str, +) -> Result<(), Status> { + let endpoint_info = EndpointInfo { + protocol: digital_twin_protocol::GRPC.to_string(), + operations: vec![digital_twin_operation::MANAGEDSUBSCRIBE.to_string()], + uri: provider_uri.to_string(), + context: "GetSubscriptionInfo".to_string(), + }; + + let entity_access_info = EntityAccessInfo { + name: car_v1::car::car_wheelchair_distance_state::NAME.to_string(), + id: car_v1::car::car_wheelchair_distance_state::ID.to_string(), + description: car_v1::car::car_wheelchair_distance_state::DESCRIPTION.to_string(), + endpoint_info_list: vec![endpoint_info], + }; + + let mut client = InvehicleDigitalTwinClient::connect(invehicle_digital_twin_uri.to_string()) + .await + .map_err(|e| Status::internal(e.to_string()))?; + let request = tonic::Request::new(RegisterRequest { + entity_access_info_list: vec![entity_access_info], + }); + let _response = client.register(request).await?; + + Ok(()) +} + +/// Start the wheelchair distance data stream. +/// +/// # Arguments +/// `min_interval_ms` - minimum frequency for data stream. +fn provider_start_wheelchair_distance_data_stream() { + debug!("Starting the Provider's wheelchair distance data stream."); + + let (sender, reciever) = watch::channel(state_distance); + tokio::spawn(async move { + + loop { + debug!( + "Recording new value for {} of {state_distance}", + car_v1::car::car_wheelchair_distance_state::ID + ); + + if let Err(err) = sender.send(state_distance) { + warn!("Failed to get new value due to '{err:?}'"); + break; + } + + debug!("Completed the publish request"); + } + }); +} + #[tokio::main] async fn main() -> Result<(), Box> { // Setup logging. @@ -160,6 +232,8 @@ async fn main() -> Result<(), Box> { info!("The Smart Trailer Application has started."); + const PROVIDER_AUTHORITY: &str = "0.0.0.0:4030"; + let provider_uri = format!("http://{PROVIDER_AUTHORITY}"); // Get the In-vehicle Digital Twin Uri from the service discovery system // This could be enhanced to add retries for robustness let invehicle_digital_twin_uri = discover_service_using_chariott( @@ -189,7 +263,7 @@ async fn main() -> Result<(), Box> { while provider_endpoint_info.is_none() { provider_endpoint_info = match discover_digital_twin_provider_using_ibeji( &invehicle_digital_twin_uri, - trailer_v1::trailer::trailer_weight::ID, + car_v1::car::IsCarUnlocked::ID, digital_twin_protocol::GRPC, &[digital_twin_operation::MANAGEDSUBSCRIBE.to_string()], ) @@ -199,7 +273,7 @@ async fn main() -> Result<(), Box> { Err(status) => { info!( "A provider was not found in the digital twin service for id '{}' with: '{:?}'", - trailer_v1::trailer::trailer_weight::ID, + car_v1::car::IsCarUnlocked::ID, status ); None @@ -216,7 +290,7 @@ async fn main() -> Result<(), Box> { } let managed_subscribe_uri = provider_endpoint_info.ok_or("Maximum amount of retries was reached while trying to retrieve the digital twin provider.")?.uri; - info!("The Managed Subscribe URI for the TrailerWeight property's provider is {managed_subscribe_uri}"); + info!("The Managed Subscribe URI for the IsCarUnlocked property's provider is {managed_subscribe_uri}"); // Create constraint for the managed subscribe call. let frequency_constraint = Constraint { @@ -226,21 +300,24 @@ async fn main() -> Result<(), Box> { // Get the subscription information for a managed topic with constraints. let subscription_info = - get_trailer_weight_subscription_info(&managed_subscribe_uri, vec![frequency_constraint]) + get_car_wheelchair_distance_subscription_info(&managed_subscribe_uri, vec![frequency_constraint]) .await?; // Deconstruct subscription information. let broker_uri = get_uri(&subscription_info.uri)?; let topic = subscription_info.context; - info!("The broker URI for the TrailerWeight property's provider is {broker_uri}"); + info!("The broker URI for the IsCarUnlocked property's provider is {broker_uri}"); // Subscribe to topic. - let sub_handle = receive_trailer_weight_updates(&broker_uri, &topic) + let sub_handle = receive_car_wheelchair_distance_updates(&broker_uri, &topic) .await .map_err(|err| Status::internal(format!("{err:?}")))?; - + provider_start_wheelchair_distance_data_stream(); signal::ctrl_c().await?; + provider_register_wheelchair_distance(&invehicle_digital_twin_uri, &provider_uri).await?; + debug!("The Provider has registered with Ibeji."); + info!("The Consumer has completed. Shutting down..."); // Wait for subscriber task to cleanly shutdown. From 3313df935870a184501e777e59b0d91dca93fe02 Mon Sep 17 00:00:00 2001 From: Eduard Rogozhkin Date: Wed, 29 Nov 2023 12:31:39 +0100 Subject: [PATCH 20/38] rename application folder and auxiliaries --- .../Cargo.toml | 2 +- .../Dockerfile | 2 +- .../src/main.rs | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/{smart_trailer_application => wheelchair_distance_application}/Cargo.toml (93%) rename in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/{smart_trailer_application => wheelchair_distance_application}/Dockerfile (98%) rename in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/{smart_trailer_application => wheelchair_distance_application}/src/main.rs (100%) diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/Cargo.toml similarity index 93% rename from in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/Cargo.toml rename to in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/Cargo.toml index c5c2185..30a81e1 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/Cargo.toml +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "smart_trailer_application" +name = "wheelchair_distance_application" version = "0.1.0" edition = "2021" license = "MIT" diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/Dockerfile b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/Dockerfile similarity index 98% rename from in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/Dockerfile rename to in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/Dockerfile index e2fb53d..262da08 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/Dockerfile +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/Dockerfile @@ -11,7 +11,7 @@ ARG RUST_VERSION=1.72.1 FROM docker.io/library/rust:${RUST_VERSION}-slim-bullseye AS build -ARG APP_NAME=smart_trailer_application +ARG APP_NAME=wheelchair_distance_application WORKDIR /sdv COPY ./ . diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/src/main.rs similarity index 100% rename from in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/smart_trailer_application/src/main.rs rename to in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/src/main.rs From 52761de17446db1985b77574be72bac8934b2fb0 Mon Sep 17 00:00:00 2001 From: Eduard Rogozhkin Date: Wed, 29 Nov 2023 13:38:43 +0100 Subject: [PATCH 21/38] the remains of the trailer removed --- .../wheelchair_distance_application/src/main.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/src/main.rs index b1911be..0fd73b0 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/src/main.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/src/main.rs @@ -44,7 +44,7 @@ const DURATION_BETWEEN_ATTEMPTS: Duration = Duration::from_secs(5); let mut state_distance: bool = false; -/// Get trailer weight's subscription information from managed subscribe endpoint. +/// Get wheelchair distance subscription information from managed subscribe endpoint. /// /// # Arguments /// * `managed_subscribe_uri` - The managed subscribe URI. @@ -68,7 +68,7 @@ async fn get_wheelchair_distance_subscription_info( Ok(response.into_inner()) } -/// Receive Trailer Weight updates. +/// Receive wheelchair distance updates. /// /// # Arguments /// * `broker_uri` - The broker URI. @@ -197,9 +197,6 @@ async fn provider_register_wheelchair_distance( } /// Start the wheelchair distance data stream. -/// -/// # Arguments -/// `min_interval_ms` - minimum frequency for data stream. fn provider_start_wheelchair_distance_data_stream() { debug!("Starting the Provider's wheelchair distance data stream."); @@ -230,7 +227,7 @@ async fn main() -> Result<(), Box> { .target(Target::Stdout) .init(); - info!("The Smart Trailer Application has started."); + info!("The Wheelchair Distance Application has started."); const PROVIDER_AUTHORITY: &str = "0.0.0.0:4030"; let provider_uri = format!("http://{PROVIDER_AUTHORITY}"); From 986dd9c1e074730bc2543c7b1f1ced0ba13bdb74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kilian=20K=C3=B6ppchen?= <373318+stubb@users.noreply.github.com> Date: Wed, 29 Nov 2023 20:27:36 +0100 Subject: [PATCH 22/38] Fix some compiler errors --- in-vehicle-stack/Cargo.toml | 1 + .../Cargo.toml | 5 +- .../src/main.rs | 52 ++++++++++++------- 3 files changed, 38 insertions(+), 20 deletions(-) diff --git a/in-vehicle-stack/Cargo.toml b/in-vehicle-stack/Cargo.toml index 5ff8427..fe7a424 100644 --- a/in-vehicle-stack/Cargo.toml +++ b/in-vehicle-stack/Cargo.toml @@ -24,6 +24,7 @@ members = [ "scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider", "scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider", "scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider", + "scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application", ] [workspace.dependencies] diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/Cargo.toml index 30a81e1..b7bcd23 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/Cargo.toml +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/Cargo.toml @@ -5,8 +5,9 @@ edition = "2021" license = "MIT" [dependencies] -digital-twin-model = { path = "../../digital-twin-model" } -digital_twin_providers_common = { path = "../../digital_twin_providers/common" } +wheelchair_digital_twin_model = { path = "../../digital-twin-model" } +wheelchair_digital_twin_providers_common = { path = "../../digital_twin_providers/common" } +wheelchair_distance_decreasing_provider = { path = "../../digital_twin_providers/wheelchair_distance_decreasing_provider"} env_logger= { workspace = true } log = { workspace = true } interfaces = { path = "../../../../proto_build"} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/src/main.rs index 0fd73b0..8e1fd17 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/src/main.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/src/main.rs @@ -4,16 +4,16 @@ use std::env; -use digital_twin_model::car_v1; -use digital_twin_providers_common::constants::chariott::{ +use wheelchair_digital_twin_model::car_v1; +use wheelchair_digital_twin_providers_common::constants::chariott::{ INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, }; -use digital_twin_providers_common::constants::{ +use wheelchair_digital_twin_providers_common::constants::{ constraint_type, digital_twin_operation, digital_twin_protocol, }; -use digital_twin_providers_common::utils::{ +use wheelchair_digital_twin_providers_common::utils::{ discover_digital_twin_provider_using_ibeji, discover_service_using_chariott, get_uri, }; use env_logger::{Builder, Target}; @@ -21,13 +21,18 @@ use interfaces::module::managed_subscribe::v1::managed_subscribe_client::Managed use interfaces::module::managed_subscribe::v1::{ Constraint, SubscriptionInfoRequest, SubscriptionInfoResponse, }; -use log::{debug, info, LevelFilter}; +use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; +use interfaces::invehicle_digital_twin::v1::{EndpointInfo, EntityAccessInfo, RegisterRequest}; +use log::{debug, info, warn, LevelFilter}; use paho_mqtt as mqtt; use tokio::signal; use tokio::task::JoinHandle; use tokio::time::{sleep, Duration}; use tonic::{Request, Status}; +use tokio::sync::watch; use uuid::Uuid; +use serde::{Deserialize}; +use wheelchair_distance_decreasing_provider::WheelchairDistanceProperty; const FREQUENCY_MS_FLAG: &str = "freq_ms="; const MQTT_CLIENT_ID: &str = "wheelchair-distance-consumer"; @@ -42,14 +47,15 @@ const MAX_RETRIES: i32 = 10; // for demo purposes we will retry a maximum of 10 // By default we will wait 5 seconds between retry attempts const DURATION_BETWEEN_ATTEMPTS: Duration = Duration::from_secs(5); -let mut state_distance: bool = false; +use std::sync::atomic::AtomicBool; +static STATE_DISTANCE: AtomicBool = AtomicBool::new(false); /// Get wheelchair distance subscription information from managed subscribe endpoint. /// /// # Arguments /// * `managed_subscribe_uri` - The managed subscribe URI. /// * `constraints` - Constraints for the managed topic. -async fn get_wheelchair_distance_subscription_info( +async fn get_car_wheelchair_distance_subscription_info( managed_subscribe_uri: &str, constraints: Vec ) -> Result { @@ -128,16 +134,19 @@ async fn receive_car_wheelchair_distance_updates( // Here we log the message received. This could be expanded to parsing the message, // Obtaining the weight and making decisions based on the weight // For example, adjusting body functions or powertrain of the towing vehicle. - let distance = msg["WheelchairDistance"]; + + // TODO: move interfaces into global package + let msg_des: wheelchair_distance_decreasing_provider::WheelchairDistanceProperty = serde_json::from_str(&msg).unwrap(); + let distance = msg_des.WheelchairDistance; info!("{}", distance); info!("{}", msg); if distance <= 200 { info!("Near!"); - state_distance = true; + STATE_DISTANCE.store(true, Ordering::Relaxed); } else { info!("Far!"); - state_distance = false; + STATE_DISTANCE.store(false, Ordering::Relaxed); } } else if !client.is_connected() { if client.reconnect().is_ok() { @@ -200,16 +209,23 @@ async fn provider_register_wheelchair_distance( fn provider_start_wheelchair_distance_data_stream() { debug!("Starting the Provider's wheelchair distance data stream."); - let (sender, reciever) = watch::channel(state_distance); + let (sender, reciever) = watch::channel(STATE_DISTANCE.load(Ordering::Relaxed)); tokio::spawn(async move { loop { - debug!( - "Recording new value for {} of {state_distance}", - car_v1::car::car_wheelchair_distance_state::ID - ); + if STATE_DISTANCE.load(Ordering::Relaxed) == true { + debug!( + "Recording new value for {} of true", + car_v1::car::car_wheelchair_distance_state::ID + ); + } else { + debug!( + "Recording new value for {} of false", + car_v1::car::car_wheelchair_distance_state::ID + ); + } - if let Err(err) = sender.send(state_distance) { + if let Err(err) = sender.send(STATE_DISTANCE.load(Ordering::Relaxed)) { warn!("Failed to get new value due to '{err:?}'"); break; } @@ -260,7 +276,7 @@ async fn main() -> Result<(), Box> { while provider_endpoint_info.is_none() { provider_endpoint_info = match discover_digital_twin_provider_using_ibeji( &invehicle_digital_twin_uri, - car_v1::car::IsCarUnlocked::ID, + car_v1::car::is_car_unlocked::ID, digital_twin_protocol::GRPC, &[digital_twin_operation::MANAGEDSUBSCRIBE.to_string()], ) @@ -270,7 +286,7 @@ async fn main() -> Result<(), Box> { Err(status) => { info!( "A provider was not found in the digital twin service for id '{}' with: '{:?}'", - car_v1::car::IsCarUnlocked::ID, + car_v1::car::is_car_unlocked::ID, status ); None From 446cecf4b803504f896a2b153d70d16870736f95 Mon Sep 17 00:00:00 2001 From: DennisHa95 <152274887+DennisHa95@users.noreply.github.com> Date: Wed, 29 Nov 2023 21:58:36 +0100 Subject: [PATCH 23/38] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 789a649..6b45ba7 100644 --- a/README.md +++ b/README.md @@ -74,8 +74,10 @@ For these reasons Ankaios fits in perfectly for the wheelchair scenario. ##### Dynamic Orchestration This use case demonstrates a more complex example of dynamic orchestration. -A [script](./in-vehicle-stack/scenarios/smart_trailer_use_case/scripts/) (one implemented for each orchestrator) will be run to monitor Ibeji and detect when the trailer is connected. The script will continuously poll for the "Trailer Connected" Digital Twin Provider, and print "NotFound" until it is started. You can simulate the trailer being connected to the vehicle by starting the ["Trailer Connected" Digital Twin Provider](./in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/). This provider will register itself with Ibeji, the script will detect this change, and start up the ["Trailer Properties" Digital Twin Provider](./in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/) and the [Smart Trailer Application](./in-vehicle-stack/scenarios/smart_trailer_use_case/applications/smart_trailer_application/). This shows a simple example of reacting to an event in the vehicle by starting up other workloads. +At the beginning the car is parked and in the init state when the person arrives at the parking lot. While approaching, the person unlocks the car and it switches to the open state in which the door is unlocked. In order to simulate this, Digital Twin Provider "carkey_unlock_provider" sends the signal to set the cars state to open. Another Digital Twin Provider "wheelchair_distance_decreasing_provider" simulates the approaching process. Meanwhile a [script](./in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/) will be run to monitor Ibeji and detect when the handicapped person is approaching the vehicle. The script will continuously monitor the wheelchair distance from the vehicle and based on the distance read, automatic configuration of the car starts to make the entry experience as effortless as possible. This automatic configuration is implemented by the [Wheelchair Assistant Application](./in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/). Through this application, the front and back doors open up, the steering wheel adjusts to a higher position and the driver seat is adjusted to the back and lowered. Once this is done, the car is in Hold state and ready to be turned on which is simulated by the "car_on_provider". Once the driver enters and turns on the ignition, the doors close and steering wheel and seat go back to their default state. Once the person arrives at the desired destination, the described process takes place in the reverse way to make sure they leave the car comfortably. This process is achieved by the "car_off_provider", "wheelchair_distance_increasing_provider" and the "car_lock_provider". +Every action and state change through transition is uploaded to the cloud through Freyja cloud syncronization and can be visualized by Azure. +All our services are registered by Chariott. ##### The Wheelchair Assistant Applications @@ -87,7 +89,7 @@ This application takes care of the software implementation corresponding to the - The seats and steering get adjusted for the person to get out of the car. Once they"re out, everything gets readjusted to normal position. ##### Run the use case -TBD + #### Hack Challenge - Extend the use case Take a look at the source code for the Digital Twin Model, Digital Twin Providers, and Applications used in this example and add to them or use them as a reference to create your own! See the [references](#useful-references-for-creating-and-enhancing-sample-scenarios) to help guide you as well. From 8becf92380bbe6ed140063785e2a482345ccbb1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kilian=20K=C3=B6ppchen?= <373318+stubb@users.noreply.github.com> Date: Wed, 29 Nov 2023 21:24:30 +0100 Subject: [PATCH 24/38] Fix errors of integrating providers with app --- in-vehicle-stack/Cargo.toml | 20 +++++++------- .../Cargo.toml | 6 +++-- .../src/main.rs | 26 ++++++++++++++----- ...chair_distance_decreasing_impl_provider.rs | 1 + ...chair_distance_decreasing_provider_impl.rs | 1 + 5 files changed, 35 insertions(+), 19 deletions(-) diff --git a/in-vehicle-stack/Cargo.toml b/in-vehicle-stack/Cargo.toml index fe7a424..7522650 100644 --- a/in-vehicle-stack/Cargo.toml +++ b/in-vehicle-stack/Cargo.toml @@ -15,16 +15,16 @@ members = [ "scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider", "scenarios/smart_trailer_use_case/proto_build", - # wheelchair_assistant_use_case - "scenarios/wheelchair_assistant_use_case/digital_twin_providers/common", - "scenarios/wheelchair_assistant_use_case/proto_build", - "scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider", - "scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider", - "scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider", - "scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider", - "scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider", - "scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider", - "scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application", + # wheelchair_assistant_use_case + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/common", + "scenarios/wheelchair_assistant_use_case/proto_build", + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider", + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider", + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider", + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider", + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider", + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider", + "scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application", ] [workspace.dependencies] diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/Cargo.toml index b7bcd23..76650bf 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/Cargo.toml +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/Cargo.toml @@ -7,11 +7,13 @@ license = "MIT" [dependencies] wheelchair_digital_twin_model = { path = "../../digital-twin-model" } wheelchair_digital_twin_providers_common = { path = "../../digital_twin_providers/common" } -wheelchair_distance_decreasing_provider = { path = "../../digital_twin_providers/wheelchair_distance_decreasing_provider"} env_logger= { workspace = true } log = { workspace = true } interfaces = { path = "../../../../proto_build"} paho-mqtt = { workspace = true } tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal"] } tonic = { workspace = true } -uuid = { workspace = true, features = ["v4", "fast-rng", "macro-diagnostics"] } \ No newline at end of file +uuid = { workspace = true, features = ["v4", "fast-rng", "macro-diagnostics"] } +serde = { workspace = true } +serde_derive = { workspace = true } +serde_json = { workspace = true } \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/src/main.rs index 8e1fd17..f256754 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/src/main.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application/src/main.rs @@ -3,8 +3,9 @@ // SPDX-License-Identifier: MIT use std::env; +use std::str; -use wheelchair_digital_twin_model::car_v1; +use wheelchair_digital_twin_model::{car_v1, Metadata}; use wheelchair_digital_twin_providers_common::constants::chariott::{ INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, @@ -16,6 +17,7 @@ use wheelchair_digital_twin_providers_common::constants::{ use wheelchair_digital_twin_providers_common::utils::{ discover_digital_twin_provider_using_ibeji, discover_service_using_chariott, get_uri, }; + use env_logger::{Builder, Target}; use interfaces::module::managed_subscribe::v1::managed_subscribe_client::ManagedSubscribeClient; use interfaces::module::managed_subscribe::v1::{ @@ -31,8 +33,8 @@ use tokio::time::{sleep, Duration}; use tonic::{Request, Status}; use tokio::sync::watch; use uuid::Uuid; -use serde::{Deserialize}; -use wheelchair_distance_decreasing_provider::WheelchairDistanceProperty; +use serde_derive::{Deserialize, Serialize}; +use std::sync::atomic::{AtomicBool, Ordering}; const FREQUENCY_MS_FLAG: &str = "freq_ms="; const MQTT_CLIENT_ID: &str = "wheelchair-distance-consumer"; @@ -47,9 +49,18 @@ const MAX_RETRIES: i32 = 10; // for demo purposes we will retry a maximum of 10 // By default we will wait 5 seconds between retry attempts const DURATION_BETWEEN_ATTEMPTS: Duration = Duration::from_secs(5); -use std::sync::atomic::AtomicBool; + static STATE_DISTANCE: AtomicBool = AtomicBool::new(false); +#[derive(Debug, Serialize, Deserialize)] +#[serde(tag="type")] +struct WheelchairDistanceProperty { + #[serde(rename = "WheelchairDistance")] + wheelchair_distance: car_v1::car::car_wheelchair_distance::TYPE, + #[serde(rename = "$metadata")] + metadata: Metadata, +} + /// Get wheelchair distance subscription information from managed subscribe endpoint. /// /// # Arguments @@ -136,8 +147,9 @@ async fn receive_car_wheelchair_distance_updates( // For example, adjusting body functions or powertrain of the towing vehicle. // TODO: move interfaces into global package - let msg_des: wheelchair_distance_decreasing_provider::WheelchairDistanceProperty = serde_json::from_str(&msg).unwrap(); - let distance = msg_des.WheelchairDistance; + let payload_str = msg.payload_str(); + let msg_des: WheelchairDistanceProperty = serde_json::from_str(&payload_str).unwrap(); + let distance = msg_des.wheelchair_distance; info!("{}", distance); info!("{}", msg); @@ -209,7 +221,7 @@ async fn provider_register_wheelchair_distance( fn provider_start_wheelchair_distance_data_stream() { debug!("Starting the Provider's wheelchair distance data stream."); - let (sender, reciever) = watch::channel(STATE_DISTANCE.load(Ordering::Relaxed)); + let (sender, _receiver) = watch::channel(STATE_DISTANCE.load(Ordering::Relaxed)); tokio::spawn(async move { loop { diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_impl_provider.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_impl_provider.rs index 17259cd..bc0391f 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_impl_provider.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_impl_provider.rs @@ -26,6 +26,7 @@ const MQTT_CLIENT_ID: &str = "wheelchair-distance-decreasing-publisher"; const FREQUENCY_MS: &str = "frequency_ms"; #[derive(Debug, Serialize, Deserialize)] +#[serde(tag="type")] struct WheelchairDistanceProperty { #[serde(rename = "WheelchairDistance")] wheelchair_distance: car_v1::car::car_wheelchair_distance::TYPE, diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_provider_impl.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_provider_impl.rs index 7e8709d..92ae6b1 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_provider_impl.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider/src/wheelchair_distance_decreasing_provider_impl.rs @@ -26,6 +26,7 @@ const MQTT_CLIENT_ID: &str = "wheelchair-distance-decreasing-publisher"; const FREQUENCY_MS: &str = "frequency_ms"; #[derive(Debug, Serialize, Deserialize)] +#[serde(tag="type")] struct WheelchairDistanceProperty { #[serde(rename = "WheelchairDistance")] wheelchair_distance: car_v1::car::car_wheelchair_distance::TYPE, From 9e022b86d1e5d43d1c8e479a88f7233fcc4bdb4f Mon Sep 17 00:00:00 2001 From: Eduard Rogozhkin Date: Wed, 29 Nov 2023 12:28:54 +0100 Subject: [PATCH 25/38] template for the wheelchair_assistant_application added --- .../Cargo.toml | 16 ++ .../Dockerfile | 71 +++++ .../src/main.rs | 250 ++++++++++++++++++ 3 files changed, 337 insertions(+) create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/Cargo.toml create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/Dockerfile create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/Cargo.toml new file mode 100644 index 0000000..86f45e7 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "wheelchair_assistant_application" +version = "0.1.0" +edition = "2021" +license = "MIT" + +[dependencies] +digital-twin-model = { path = "../../digital-twin-model" } +digital_twin_providers_common = { path = "../../digital_twin_providers/common" } +env_logger= { workspace = true } +log = { workspace = true } +interfaces = { path = "../../../../proto_build"} +paho-mqtt = { workspace = true } +tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal"] } +tonic = { workspace = true } +uuid = { workspace = true, features = ["v4", "fast-rng", "macro-diagnostics"] } \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/Dockerfile b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/Dockerfile new file mode 100644 index 0000000..65bbcc2 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/Dockerfile @@ -0,0 +1,71 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +# Comments are provided throughout this file to help you get started. +# If you need more help, visit the Dockerfile reference guide at +# https://docs.docker.com/engine/reference/builder/ + +################################################################################ +# Create a stage for building the application. + +ARG RUST_VERSION=1.72.1 +FROM docker.io/library/rust:${RUST_VERSION}-slim-bullseye AS build +ARG APP_NAME=wheelchair_assistant_application +WORKDIR /sdv + +COPY ./ . + +# Add Build dependencies. +RUN apt update && apt upgrade -y && apt install -y \ + cmake \ + libssl-dev \ + pkg-config \ + protobuf-compiler + +# Check that APP_NAME argument is valid. +RUN sanitized=$(echo "${APP_NAME}" | tr -dc '^[a-zA-Z_0-9-]+$'); \ +[ "$sanitized" = "${APP_NAME}" ] || { \ + echo "ARG 'APP_NAME' is invalid. APP_NAME='${APP_NAME}' sanitized='${sanitized}'"; \ + exit 1; \ +} + +# Build the application +RUN cargo build --release --bin "${APP_NAME}" + +# Copy the built application to working directory. +RUN cp ./target/release/"${APP_NAME}" /sdv/service + +################################################################################ +# Create a new stage for running the application that contains the minimal +# runtime dependencies for the application. This often uses a different base +# image from the build stage where the necessary files are copied from the build +# stage. +# +# The example below uses the debian bullseye image as the foundation for running the app. +# By specifying the "bullseye-slim" tag, it will also use whatever happens to be the +# most recent version of that tag when you build your Dockerfile. If +# reproducability is important, consider using a digest +# (e.g., debian@sha256:ac707220fbd7b67fc19b112cee8170b41a9e97f703f588b2cdbbcdcecdd8af57). +FROM docker.io/library/debian:bullseye-slim AS final + +# Create a non-privileged user that the app will run under. +# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user +ARG UID=10001 +RUN adduser \ + --disabled-password \ + --gecos "" \ + --home "/nonexistent" \ + --shell "/sbin/nologin" \ + --no-create-home \ + --uid "${UID}" \ + appuser +USER appuser + +WORKDIR /sdv + +# Copy the executable from the "build" stage. +COPY --from=build /sdv/service /sdv/ + +# What the container should run when it is started. +CMD ["/sdv/service"] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs new file mode 100644 index 0000000..222ed3b --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs @@ -0,0 +1,250 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. +// SPDX-License-Identifier: MIT + +use std::env; + +use digital_twin_model::trailer_v1; +use digital_twin_providers_common::constants::chariott::{ + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, +}; +use digital_twin_providers_common::constants::{ + constraint_type, digital_twin_operation, digital_twin_protocol, +}; +use digital_twin_providers_common::utils::{ + discover_digital_twin_provider_using_ibeji, discover_service_using_chariott, get_uri, +}; +use env_logger::{Builder, Target}; +use interfaces::module::managed_subscribe::v1::managed_subscribe_client::ManagedSubscribeClient; +use interfaces::module::managed_subscribe::v1::{ + Constraint, SubscriptionInfoRequest, SubscriptionInfoResponse, +}; +use log::{debug, info, LevelFilter}; +use paho_mqtt as mqtt; +use tokio::signal; +use tokio::task::JoinHandle; +use tokio::time::{sleep, Duration}; +use tonic::{Request, Status}; +use uuid::Uuid; + +const FREQUENCY_MS_FLAG: &str = "freq_ms="; +const MQTT_CLIENT_ID: &str = "smart-trailer-consumer"; + +// TODO: These could be added in configuration +const CHARIOTT_SERVICE_DISCOVERY_URI: &str = "http://0.0.0.0:50000"; + +const DEFAULT_FREQUENCY_MS: u64 = 10000; // 10 seconds + +// Constants used for retry logic +const MAX_RETRIES: i32 = 10; // for demo purposes we will retry a maximum of 10 times + // By default we will wait 5 seconds between retry attempts +const DURATION_BETWEEN_ATTEMPTS: Duration = Duration::from_secs(5); + +/// Get trailer weight's subscription information from managed subscribe endpoint. +/// +/// # Arguments +/// * `managed_subscribe_uri` - The managed subscribe URI. +/// * `constraints` - Constraints for the managed topic. +async fn get_trailer_weight_subscription_info( + managed_subscribe_uri: &str, + constraints: Vec, +) -> Result { + // Create gRPC client. + let mut client = ManagedSubscribeClient::connect(managed_subscribe_uri.to_string()) + .await + .map_err(|err| Status::from_error(err.into()))?; + + let request = Request::new(SubscriptionInfoRequest { + entity_id: trailer_v1::trailer::trailer_weight::ID.to_string(), + constraints, + }); + + let response = client.get_subscription_info(request).await?; + + Ok(response.into_inner()) +} + +/// Receive Trailer Weight updates. +/// +/// # Arguments +/// * `broker_uri` - The broker URI. +/// * `topic` - The topic. +async fn receive_trailer_weight_updates( + broker_uri: &str, + topic: &str, +) -> Result, String> { + // Create a unique id for the client. + let client_id = format!("{MQTT_CLIENT_ID}-{}", Uuid::new_v4()); + + let create_opts = mqtt::CreateOptionsBuilder::new() + .server_uri(broker_uri) + .client_id(client_id) + .finalize(); + + let client = mqtt::Client::new(create_opts) + .map_err(|err| format!("Failed to create the client due to '{err:?}'"))?; + + let receiver = client.start_consuming(); + + // Setup task to handle clean shutdown. + let ctrlc_cli = client.clone(); + tokio::spawn(async move { + _ = signal::ctrl_c().await; + + // Tells the client to shutdown consuming thread. + ctrlc_cli.stop_consuming(); + }); + + // Last Will and Testament + let lwt = mqtt::MessageBuilder::new() + .topic("test") + .payload("Receiver lost connection") + .finalize(); + + let conn_opts = mqtt::ConnectOptionsBuilder::new_v5() + .keep_alive_interval(Duration::from_secs(30)) + .clean_session(false) + .will_message(lwt) + .finalize(); + + let _connect_response = client + .connect(conn_opts) + .map_err(|err| format!("Failed to connect due to '{err:?}")); + + let mut _subscribe_response = client + .subscribe(topic, mqtt::types::QOS_1) + .map_err(|err| format!("Failed to subscribe to topic {topic} due to '{err:?}'")); + + // Copy topic for separate thread. + let topic_string = topic.to_string(); + + let sub_handle = tokio::spawn(async move { + for msg in receiver.iter() { + if let Some(msg) = msg { + // Here we log the message received. This could be expanded to parsing the message, + // Obtaining the weight and making decisions based on the weight + // For example, adjusting body functions or powertrain of the towing vehicle. + info!("{}", msg); + } else if !client.is_connected() { + if client.reconnect().is_ok() { + _subscribe_response = client + .subscribe(topic_string.as_str(), mqtt::types::QOS_1) + .map_err(|err| { + format!("Failed to subscribe to topic {topic_string} due to '{err:?}'") + }); + } else { + break; + } + } + } + + if client.is_connected() { + debug!("Disconnecting"); + client.unsubscribe(topic_string.as_str()).unwrap(); + client.disconnect(None).unwrap(); + } + }); + + Ok(sub_handle) +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + // Setup logging. + Builder::new() + .filter(None, LevelFilter::Info) + .target(Target::Stdout) + .init(); + + info!("The Smart Trailer Application has started."); + + // Get the In-vehicle Digital Twin Uri from the service discovery system + // This could be enhanced to add retries for robustness + let invehicle_digital_twin_uri = discover_service_using_chariott( + CHARIOTT_SERVICE_DISCOVERY_URI, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, + INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, + INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, + INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, + ) + .await?; + + // Get subscription constraints. + let frequency_ms = env::args() + .find_map(|arg| { + if arg.contains(FREQUENCY_MS_FLAG) { + return Some(arg.replace(FREQUENCY_MS_FLAG, "")); + } + + None + }) + .unwrap_or_else(|| DEFAULT_FREQUENCY_MS.to_string()); + + // Retrieve the provider URI. + let mut provider_endpoint_info = None; + let mut retries: i32 = 0; + while provider_endpoint_info.is_none() { + provider_endpoint_info = match discover_digital_twin_provider_using_ibeji( + &invehicle_digital_twin_uri, + trailer_v1::trailer::trailer_weight::ID, + digital_twin_protocol::GRPC, + &[digital_twin_operation::MANAGEDSUBSCRIBE.to_string()], + ) + .await + { + Ok(response) => Some(response), + Err(status) => { + info!( + "A provider was not found in the digital twin service for id '{}' with: '{:?}'", + trailer_v1::trailer::trailer_weight::ID, + status + ); + None + } + }; + + if provider_endpoint_info.is_none() && retries < MAX_RETRIES { + info!("Retrying FindById to retrieve the properties provider endpoint in {DURATION_BETWEEN_ATTEMPTS:?}."); + sleep(DURATION_BETWEEN_ATTEMPTS).await; + retries += 1; + } else { + break; + } + } + + let managed_subscribe_uri = provider_endpoint_info.ok_or("Maximum amount of retries was reached while trying to retrieve the digital twin provider.")?.uri; + info!("The Managed Subscribe URI for the TrailerWeight property's provider is {managed_subscribe_uri}"); + + // Create constraint for the managed subscribe call. + let frequency_constraint = Constraint { + r#type: constraint_type::FREQUENCY_MS.to_string(), + value: frequency_ms.to_string(), + }; + + // Get the subscription information for a managed topic with constraints. + let subscription_info = + get_trailer_weight_subscription_info(&managed_subscribe_uri, vec![frequency_constraint]) + .await?; + + // Deconstruct subscription information. + let broker_uri = get_uri(&subscription_info.uri)?; + let topic = subscription_info.context; + info!("The broker URI for the TrailerWeight property's provider is {broker_uri}"); + + // Subscribe to topic. + let sub_handle = receive_trailer_weight_updates(&broker_uri, &topic) + .await + .map_err(|err| Status::internal(format!("{err:?}")))?; + + signal::ctrl_c().await?; + + info!("The Consumer has completed. Shutting down..."); + + // Wait for subscriber task to cleanly shutdown. + _ = sub_handle.await; + + Ok(()) +} From 8782e3f57431b06a82f8c0b6df82bc38a5a3018e Mon Sep 17 00:00:00 2001 From: Eduard Rogozhkin Date: Wed, 29 Nov 2023 16:32:13 +0100 Subject: [PATCH 26/38] wheelchair assistant logic added --- .../src/main.rs | 245 ++++++++++++++++-- 1 file changed, 229 insertions(+), 16 deletions(-) diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs index 222ed3b..96adc29 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs @@ -4,7 +4,7 @@ use std::env; -use digital_twin_model::trailer_v1; +use digital_twin_model::car_v1; use digital_twin_providers_common::constants::chariott::{ INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, @@ -30,7 +30,7 @@ use tonic::{Request, Status}; use uuid::Uuid; const FREQUENCY_MS_FLAG: &str = "freq_ms="; -const MQTT_CLIENT_ID: &str = "smart-trailer-consumer"; +const MQTT_CLIENT_ID: &str = "wheelchair-assistant-consumer"; // TODO: These could be added in configuration const CHARIOTT_SERVICE_DISCOVERY_URI: &str = "http://0.0.0.0:50000"; @@ -42,14 +42,18 @@ const MAX_RETRIES: i32 = 10; // for demo purposes we will retry a maximum of 10 // By default we will wait 5 seconds between retry attempts const DURATION_BETWEEN_ATTEMPTS: Duration = Duration::from_secs(5); -/// Get trailer weight's subscription information from managed subscribe endpoint. +let mut door_open: bool = false; +let mut steering_wheel_up: bool = false; +let mut driver_seat_back: bool = false; + +/// Get car adjustment subscription information from managed subscribe endpoint. /// /// # Arguments /// * `managed_subscribe_uri` - The managed subscribe URI. /// * `constraints` - Constraints for the managed topic. -async fn get_trailer_weight_subscription_info( +async fn get_car_adjust_subscription_info( managed_subscribe_uri: &str, - constraints: Vec, + constraints: Vec ) -> Result { // Create gRPC client. let mut client = ManagedSubscribeClient::connect(managed_subscribe_uri.to_string()) @@ -57,7 +61,7 @@ async fn get_trailer_weight_subscription_info( .map_err(|err| Status::from_error(err.into()))?; let request = Request::new(SubscriptionInfoRequest { - entity_id: trailer_v1::trailer::trailer_weight::ID.to_string(), + entity_id: car_v1::car::car_wheelchair_assistant_state::ID.to_string(), constraints, }); @@ -66,12 +70,12 @@ async fn get_trailer_weight_subscription_info( Ok(response.into_inner()) } -/// Receive Trailer Weight updates. +/// Receive car adjustment updates. /// /// # Arguments /// * `broker_uri` - The broker URI. /// * `topic` - The topic. -async fn receive_trailer_weight_updates( +async fn receive_car_adjust_updates( broker_uri: &str, topic: &str, ) -> Result, String> { @@ -126,7 +130,21 @@ async fn receive_trailer_weight_updates( // Here we log the message received. This could be expanded to parsing the message, // Obtaining the weight and making decisions based on the weight // For example, adjusting body functions or powertrain of the towing vehicle. + // PSEUDO IMPLEMENTATION ###################################################################### + let new_state = msg["car_wheelchair_assistant_state"]; + info!("{}", new_state); info!("{}", msg); + + if new_state == "HOLD" { + info!("Adjusting the car!"); + door_open = true; + steering_wheel_up = true; + driver_seat_back = true; + } else { + info!("No need to rearrange"); + } + + // ############################################################################################ } else if !client.is_connected() { if client.reconnect().is_ok() { _subscribe_response = client @@ -150,6 +168,177 @@ async fn receive_trailer_weight_updates( Ok(sub_handle) } +/// Register the car seat adjustment property's endpoint. +/// +/// # Arguments +/// * `invehicle_digital_twin_uri` - The In-Vehicle Digital Twin URI. +/// * `provider_uri` - The provider's URI. +async fn provider_register_seat_adjustment( + invehicle_digital_twin_uri: &str, + provider_uri: &str, +) -> Result<(), Status> { + let endpoint_info = EndpointInfo { + protocol: digital_twin_protocol::GRPC.to_string(), + operations: vec![digital_twin_operation::MANAGEDSUBSCRIBE.to_string()], + uri: provider_uri.to_string(), + context: "GetSubscriptionInfo".to_string(), + }; + + let entity_access_info = EntityAccessInfo { + name: car_v1::car::is_car_seat_in_assist_position::NAME.to_string(), + id: car_v1::car::is_car_seat_in_assist_position::ID.to_string(), + description: car_v1::car::is_car_seat_in_assist_position::DESCRIPTION.to_string(), + endpoint_info_list: vec![endpoint_info], + }; + + let mut client = InvehicleDigitalTwinClient::connect(invehicle_digital_twin_uri.to_string()) + .await + .map_err(|e| Status::internal(e.to_string()))?; + let request = tonic::Request::new(RegisterRequest { + entity_access_info_list: vec![entity_access_info], + }); + let _response = client.register(request).await?; + + Ok(()) +} + +/// Register the car door adjustment property's endpoint. +/// +/// # Arguments +/// * `invehicle_digital_twin_uri` - The In-Vehicle Digital Twin URI. +/// * `provider_uri` - The provider's URI. +async fn provider_register_door_adjustment( + invehicle_digital_twin_uri: &str, + provider_uri: &str, +) -> Result<(), Status> { + let endpoint_info = EndpointInfo { + protocol: digital_twin_protocol::GRPC.to_string(), + operations: vec![digital_twin_operation::MANAGEDSUBSCRIBE.to_string()], + uri: provider_uri.to_string(), + context: "GetSubscriptionInfo".to_string(), + }; + + let entity_access_info = EntityAccessInfo { + name: car_v1::car::is_car_door_open::NAME.to_string(), + id: car_v1::car::is_car_door_open::ID.to_string(), + description: car_v1::car::is_car_door_open::DESCRIPTION.to_string(), + endpoint_info_list: vec![endpoint_info], + }; + + let mut client = InvehicleDigitalTwinClient::connect(invehicle_digital_twin_uri.to_string()) + .await + .map_err(|e| Status::internal(e.to_string()))?; + let request = tonic::Request::new(RegisterRequest { + entity_access_info_list: vec![entity_access_info], + }); + let _response = client.register(request).await?; + + Ok(()) +} + +/// Register the car steering wheel adjustment property's endpoint. +/// +/// # Arguments +/// * `invehicle_digital_twin_uri` - The In-Vehicle Digital Twin URI. +/// * `provider_uri` - The provider's URI. +async fn provider_register_steering_wheel_adjustment( + invehicle_digital_twin_uri: &str, + provider_uri: &str, +) -> Result<(), Status> { + let endpoint_info = EndpointInfo { + protocol: digital_twin_protocol::GRPC.to_string(), + operations: vec![digital_twin_operation::MANAGEDSUBSCRIBE.to_string()], + uri: provider_uri.to_string(), + context: "GetSubscriptionInfo".to_string(), + }; + + let entity_access_info = EntityAccessInfo { + name: car_v1::car::is_car_steeringwheel_in_assist_position::NAME.to_string(), + id: car_v1::car::is_car_steeringwheel_in_assist_position::ID.to_string(), + description: car_v1::car::is_car_steeringwheel_in_assist_position::DESCRIPTION.to_string(), + endpoint_info_list: vec![endpoint_info], + }; + + let mut client = InvehicleDigitalTwinClient::connect(invehicle_digital_twin_uri.to_string()) + .await + .map_err(|e| Status::internal(e.to_string()))?; + let request = tonic::Request::new(RegisterRequest { + entity_access_info_list: vec![entity_access_info], + }); + let _response = client.register(request).await?; + + Ok(()) +} + +/// Start the seat adjustment data stream. +fn provider_start_seat_adjustment_data_stream() { + debug!("Starting the Provider's seat adjustment data stream."); + + let (sender, reciever) = watch::channel(driver_seat_back); + tokio::spawn(async move { + + loop { + debug!( + "Recording new value for {} of {state_distance}", + car_v1::car::is_car_seat_in_assist_position::ID + ); + + if let Err(err) = sender.send(driver_seat_back) { + warn!("Failed to get new value due to '{err:?}'"); + break; + } + + debug!("Completed the publish request"); + } + }); +} + +/// Start the door adjustment data stream. +fn provider_start_door_adjustment_data_stream() { + debug!("Starting the Provider's door adjustment data stream."); + + let (sender, reciever) = watch::channel(door_open); + tokio::spawn(async move { + + loop { + debug!( + "Recording new value for {} of {state_distance}", + car_v1::car::is_car_door_open::ID + ); + + if let Err(err) = sender.send(door_open) { + warn!("Failed to get new value due to '{err:?}'"); + break; + } + + debug!("Completed the publish request"); + } + }); +} + +/// Start the steering wheel adjustment data stream. +fn provider_start_steering_wheel_adjustment_data_stream() { + debug!("Starting the Provider's steering wheel adjustment data stream."); + + let (sender, reciever) = watch::channel(steering_wheel_up); + tokio::spawn(async move { + + loop { + debug!( + "Recording new value for {} of {state_distance}", + car_v1::car::is_car_steeringwheel_in_assist_position::ID + ); + + if let Err(err) = sender.send(steering_wheel_up) { + warn!("Failed to get new value due to '{err:?}'"); + break; + } + + debug!("Completed the publish request"); + } + }); +} + #[tokio::main] async fn main() -> Result<(), Box> { // Setup logging. @@ -158,8 +347,12 @@ async fn main() -> Result<(), Box> { .target(Target::Stdout) .init(); - info!("The Smart Trailer Application has started."); + info!("The Wheelchair Assistant Application has started."); + const PROVIDER_AUTHORITY_SEAT: &str = "0.0.0.0:4070"; + const PROVIDER_AUTHORITY_DOOR: &str = "0.0.0.0:4080"; + const PROVIDER_AUTHORITY_STEER: &str = "0.0.0.0:4090"; + let provider_uri; // Get the In-vehicle Digital Twin Uri from the service discovery system // This could be enhanced to add retries for robustness let invehicle_digital_twin_uri = discover_service_using_chariott( @@ -189,7 +382,7 @@ async fn main() -> Result<(), Box> { while provider_endpoint_info.is_none() { provider_endpoint_info = match discover_digital_twin_provider_using_ibeji( &invehicle_digital_twin_uri, - trailer_v1::trailer::trailer_weight::ID, + car_v1::car::car_wheelchair_assistant_state::ID, digital_twin_protocol::GRPC, &[digital_twin_operation::MANAGEDSUBSCRIBE.to_string()], ) @@ -199,7 +392,7 @@ async fn main() -> Result<(), Box> { Err(status) => { info!( "A provider was not found in the digital twin service for id '{}' with: '{:?}'", - trailer_v1::trailer::trailer_weight::ID, + car_v1::car::car_wheelchair_assistant_state::ID, status ); None @@ -216,7 +409,7 @@ async fn main() -> Result<(), Box> { } let managed_subscribe_uri = provider_endpoint_info.ok_or("Maximum amount of retries was reached while trying to retrieve the digital twin provider.")?.uri; - info!("The Managed Subscribe URI for the TrailerWeight property's provider is {managed_subscribe_uri}"); + info!("The Managed Subscribe URI for the IsCarUnlocked property's provider is {managed_subscribe_uri}"); // Create constraint for the managed subscribe call. let frequency_constraint = Constraint { @@ -226,25 +419,45 @@ async fn main() -> Result<(), Box> { // Get the subscription information for a managed topic with constraints. let subscription_info = - get_trailer_weight_subscription_info(&managed_subscribe_uri, vec![frequency_constraint]) + get_car_adjust_subscription_info(&managed_subscribe_uri, vec![frequency_constraint]) .await?; // Deconstruct subscription information. let broker_uri = get_uri(&subscription_info.uri)?; let topic = subscription_info.context; - info!("The broker URI for the TrailerWeight property's provider is {broker_uri}"); + info!("The broker URI for the car_wheelchair_assistant_state property's provider is {broker_uri}"); // Subscribe to topic. - let sub_handle = receive_trailer_weight_updates(&broker_uri, &topic) + let sub_handle = receive_car_adjust_updates(&broker_uri, &topic) .await .map_err(|err| Status::internal(format!("{err:?}")))?; + + provider_start_seat_adjustment_data_stream(); signal::ctrl_c().await?; + provider_uri = format!("http://{PROVIDER_AUTHORITY_SEAT}"); + provider_register_seat_adjustment(&invehicle_digital_twin_uri, &provider_uri).await?; + debug!("The Provider Seat has registered with Ibeji."); + + provider_start_door_adjustment_data_stream(); + signal::ctrl_c().await?; + + provider_uri = format!("http://{PROVIDER_AUTHORITY_DOOR}"); + provider_register_door_adjustment(&invehicle_digital_twin_uri, &provider_uri).await?; + debug!("The Provider Door has registered with Ibeji."); + + provider_start_steering_wheel_adjustment_data_stream(); + signal::ctrl_c().await?; + + provider_uri = format!("http://{PROVIDER_AUTHORITY_STEER}"); + provider_register_steering_wheel_adjustment(&invehicle_digital_twin_uri, &provider_uri).await?; + debug!("The Provider SteeringWheel has registered with Ibeji."); + info!("The Consumer has completed. Shutting down..."); // Wait for subscriber task to cleanly shutdown. _ = sub_handle.await; Ok(()) -} +} \ No newline at end of file From f4637ca107c4827047cd92eb2eabae4f8c3f6aaa Mon Sep 17 00:00:00 2001 From: Eduard Rogozhkin Date: Wed, 29 Nov 2023 16:40:59 +0100 Subject: [PATCH 27/38] missed changes from the previous --- .../applications/wheelchair_assistant_application/src/main.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs index 96adc29..0012047 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs @@ -128,9 +128,8 @@ async fn receive_car_adjust_updates( for msg in receiver.iter() { if let Some(msg) = msg { // Here we log the message received. This could be expanded to parsing the message, - // Obtaining the weight and making decisions based on the weight + // Obtaining the wheelchair assistant state and making decisions based on the weight // For example, adjusting body functions or powertrain of the towing vehicle. - // PSEUDO IMPLEMENTATION ###################################################################### let new_state = msg["car_wheelchair_assistant_state"]; info!("{}", new_state); info!("{}", msg); @@ -144,7 +143,6 @@ async fn receive_car_adjust_updates( info!("No need to rearrange"); } - // ############################################################################################ } else if !client.is_connected() { if client.reconnect().is_ok() { _subscribe_response = client From 19e60211408c3ae58c821fe1b218374ddb521bfd Mon Sep 17 00:00:00 2001 From: DennisHa95 <152274887+DennisHa95@users.noreply.github.com> Date: Thu, 30 Nov 2023 09:33:55 +0100 Subject: [PATCH 28/38] Update README.md --- README.md | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/README.md b/README.md index 6b45ba7..a0056e2 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ The Trailer Properties Provider supports the ManagedSubscribe operation so that Once you've chosen an orchestrator and gone through their environment setup steps, please refer to [Ankaios's Dev Environment README](./eclipse-ankaios/README.md#startup-check-before-development) or [BlueChi's Dev Environment README](./eclipse-bluechi/README.md#running-the-smart-trailer-example-with-bluechis-devcontainer) for instructions on running this scenario. #### Wheelchair Assistant Scenario Overview -In this scenario we try to provide a handicapped person an easier access to a vehicle and thus more mobility. Our system detects that a handicapped person with a wheelchair is approaching a vehicle and aims to provide complete support by personalizing to the individual needs of the user. The system demonstrates a full driving scenario from arriving at the car to reaching the desired destination with maximum support from automation software. +In this scenario we try to provide a handicapped person an easier access to a vehicle and thus more mobility. Just as musicians in an orchestra must work together and communicate effectively to create beautiful music, various systems and technologies must work seamlessly together to provide complete support to the handicapped person. Our system detects that a handicapped person with a wheelchair is approaching a vehicle and aims to provide complete support by personalizing to the individual needs of the user. The system demonstrates a full driving scenario from arriving at the car to reaching the desired destination with maximum support from automation software. A signal is raised to the orchestrator to start up the necessary providers and applications to manage the wheelchair as well as to make adjustments inside the car. These include a Digital Twin Provider, which exposes signals from the wheelchair to higher-level applications, and a Wheelchair Assistant application, which makes use of and reacts to these signals. In order to start our orchestra, the tools we use are: Eclipse Chariott, Ibeji, Agemo, Freyja, and an Eclipse Mosquitto MQTT broker. @@ -81,15 +81,6 @@ All our services are registered by Chariott. ##### The Wheelchair Assistant Applications -This application takes care of the software implementation corresponding to the person arriving at the car, getting in ,driving, getting out and leaving the car. - - When a person approaches the car, the car lowers itself, opens the front and the back doors. The seat and the steering wheel get adjusted in order for the person to get in. - - A mechanical setting (ramp or a crane) can be used for getting the wheelchair inside the car. - - Once the person gets in, the seat and the steering gets adjusted back for driving, while closing the backdoor. - - On reaching destination, the car is lowered. As the backdoor opens,the wheelchair is retrieved. - - The seats and steering get adjusted for the person to get out of the car. Once they"re out, everything gets readjusted to normal position. - -##### Run the use case - #### Hack Challenge - Extend the use case Take a look at the source code for the Digital Twin Model, Digital Twin Providers, and Applications used in this example and add to them or use them as a reference to create your own! See the [references](#useful-references-for-creating-and-enhancing-sample-scenarios) to help guide you as well. From e2dc660f97d9a49900e7e3c7c5dc7bb236da9266 Mon Sep 17 00:00:00 2001 From: DennisHa95 <152274887+DennisHa95@users.noreply.github.com> Date: Thu, 30 Nov 2023 09:36:22 +0100 Subject: [PATCH 29/38] Create Wheelchair assistant application Readme document --- docs/Wheelchair assistant application | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 docs/Wheelchair assistant application diff --git a/docs/Wheelchair assistant application b/docs/Wheelchair assistant application new file mode 100644 index 0000000..64235aa --- /dev/null +++ b/docs/Wheelchair assistant application @@ -0,0 +1,7 @@ +#### The Wheelchair Assistant Applications +This application takes care of the software implementation corresponding to the person arriving at the car, getting in ,driving, getting out and leaving the car. + - When a person approaches the car, the car lowers itself, opens the front and the back doors. The seat and the steering wheel get adjusted in order for the person to get in. + - A mechanical setting (ramp or a crane) can be used for getting the wheelchair inside the car. + - Once the person gets in, the seat and the steering gets adjusted back for driving, while closing the backdoor. + - On reaching destination, the car is lowered. As the backdoor opens,the wheelchair is retrieved. + - The seats and steering get adjusted for the person to get out of the car. Once they"re out, everything gets readjusted to normal position. From 2df16caf4edbd473cbdbcb23705733efece445b0 Mon Sep 17 00:00:00 2001 From: DennisHa95 <152274887+DennisHa95@users.noreply.github.com> Date: Thu, 30 Nov 2023 09:46:16 +0100 Subject: [PATCH 30/38] Update README.md: deleted Additional Information --- README.md | 209 +----------------------------------------------------- 1 file changed, 1 insertion(+), 208 deletions(-) diff --git a/README.md b/README.md index a0056e2..5c3be18 100644 --- a/README.md +++ b/README.md @@ -1,64 +1,3 @@ - -# Maestro Challenge 🚗💻🎶 -- [About](#about) -- [Sample Scenarios](#sample-scenarios) - - [Provided Sample Scenario](#provided-sample-scenario) - - [Other Sample Scenarios](#other-sample-scenarios) -- [Useful References for Creating and Enhancing Sample Scenarios](#useful-references-for-creating-and-enhancing-sample-scenarios) - - [In-Vehicle Stack](#in-vehicle-stack) - - [General](#general) - - [Eclipse Ankaios](#eclipse-ankaios) -- [Getting Started](#getting-started) - - [Need to know](#need-to-know) - - [Prebuilt Container Images](#prebuilt-container-images) - - [Eclipse Ankaios Orchestrator](#eclipse-ankaios-orchestrator) - - [Eclipse BlueChi Orchestrator](#eclipse-bluechi-orchestrator) - - [Azure Subscription](#azure-subscription) -- [In-Vehicle Software Stack Overview](#in-vehicle-software-stack-overview) -- [Projects Involved](#projects-involved) - - [In-Vehicle Software Stack](#in-vehicle-software-stack) - - [In-Vehicle Software Orchestrators](#in-vehicle-software-orchestrators) -- [Hack Coaches](#hack-coaches) - -**Do you want to be the next maestro of the next generation of vehicle software? The time is now!** - -Imagine yourself as the **maestro**. You are not just writing code. You are composing a masterpiece that will drive the future of transportation. Your work will ensure that every component, from the engine control unit to the infotainment system, works in perfect harmony. So, step up to the podium, take a deep breath, and let your creativity flow. The stage is set for you to become the maestro of in-vehicle software 🚗💻🎶. - -**Come hack with us!** - -![Maestro](docs/diagrams/orchestra_picture.jpg) ->Photo by Manuel Nägeli. - -## About - -We supply an in-vehicle stack with software orchestrators. Your assignment is to utilize our in-vehicle stack and software orchestrators to construct your own scenario or replicate the scenarios provided in our [Sample Scenarios](#sample-scenarios). - -The tech stack in this challenge showcases complex in-vehicle services and workloads, utilizing the vehicle’s computing resources and capabilities, as well as other in-vehicle applications. - -Enjoy the process of bringing your vision to life! - -## Sample Scenarios - -Here is a list of potential scenarios your team could develop. Feel free to invent your own scenarios too. Let your creativity shine ☀️ and have fun! - -### Provided Sample Scenario - -#### Smart Trailer Scenario Overview -The system detects that a smart trailer is being connected to the vehicle. A signal is raised to the orchestrator to start up the necessary providers and applications to manage the smart trailer. These include a Digital Twin Provider, which exposes signals from the trailer to higher-level applications, and a Smart Trailer application, which consumes these signals. The provided smart trailer application prints the value of a property it subscribes to, the `TrailerWeight`. - -The first diagrams in the [Eclipse Ankaios](./eclipse-ankaios/README.md) and [Eclipse BlueChi](./eclipse-bluechi/README.md) depict this provided sample scenario. - -The in-vehicle-stack is started with Eclipse Chariott, Ibeji, Agemo, Freyja, and an Eclipse Mosquitto MQTT broker inside the orchestrator environment. - -##### Dynamic Orchestration -This use case demonstrates a simple example of dynamic orchestration. A [script](./in-vehicle-stack/scenarios/smart_trailer_use_case/scripts/) (one implemented for each orchestrator) will be run to monitor Ibeji and detect when the trailer is connected. The script will continuously poll for the "Trailer Connected" Digital Twin Provider, and print "NotFound" until it is started. You can simulate the trailer being connected to the vehicle by starting the ["Trailer Connected" Digital Twin Provider](./in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/). This provider will register itself with Ibeji, the script will detect this change, and start up the ["Trailer Properties" Digital Twin Provider](./in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/) and the [Smart Trailer Application](./in-vehicle-stack/scenarios/smart_trailer_use_case/applications/smart_trailer_application/). This shows a simple example of reacting to an event in the vehicle by starting up other workloads. - -##### Trailer Applications -The Trailer Properties Provider supports the ManagedSubscribe operation so that the Smart Trailer Application can specify that it wants to receive the `TrailerWeight` property's value every 10 seconds. Using the provided configuration, Freyja is configured to sync the `TrailerWeight` every 3 seconds to a mocked cloud endpoint (which will log the signal data on standard output). See the [Cloud Connectivity Doc](./docs/in-vehicle-stack/azure-cloud-connection.md) for instructions to synchronize signals to an Azure Digital Twins instance in the cloud. The [Digital Twin Model](./in-vehicle-stack/scenarios/smart_trailer_use_case/digital-twin-model/dtdl/trailer.json) defines the digital twin model for the trailer, which is used as a reference for the Digital Twin Providers and Applications. - -##### Run the use case -Once you've chosen an orchestrator and gone through their environment setup steps, please refer to [Ankaios's Dev Environment README](./eclipse-ankaios/README.md#startup-check-before-development) or [BlueChi's Dev Environment README](./eclipse-bluechi/README.md#running-the-smart-trailer-example-with-bluechis-devcontainer) for instructions on running this scenario. - #### Wheelchair Assistant Scenario Overview In this scenario we try to provide a handicapped person an easier access to a vehicle and thus more mobility. Just as musicians in an orchestra must work together and communicate effectively to create beautiful music, various systems and technologies must work seamlessly together to provide complete support to the handicapped person. Our system detects that a handicapped person with a wheelchair is approaching a vehicle and aims to provide complete support by personalizing to the individual needs of the user. The system demonstrates a full driving scenario from arriving at the car to reaching the desired destination with maximum support from automation software. @@ -80,150 +19,4 @@ Every action and state change through transition is uploaded to the cloud throug All our services are registered by Chariott. ##### The Wheelchair Assistant Applications - - -#### Hack Challenge - Extend the use case -Take a look at the source code for the Digital Twin Model, Digital Twin Providers, and Applications used in this example and add to them or use them as a reference to create your own! See the [references](#useful-references-for-creating-and-enhancing-sample-scenarios) to help guide you as well. - -When developing new workloads to run in the orchestrator environments, it is recommended to: -1. Write the code for your workload in the language of your choice. -1. Build a container image for it. -1. Push it to a container registry. You can create an [Azure Container Registry](./docs/azure/azure_container_registry_instructions.md#aditional-information) with your [Azure Subscription](./docs/azure/azure_code_redeem_instructions.md) -1. Follow the orchestrator-specific instructions for plugging your container image into the environments. - - If you are using Eclipse Ankaios, please see [Workload Development](./eclipse-ankaios/README.md#workload-development) section. - - If you are using Eclipse BlueChi, please see the [Managing Workloads](./eclipse-bluechi/README.md#managing-workloads) section. - -Here are a few suggested ways to extend this use case, but feel free to use your imagination to come up with your own as well! - -- Extend the smart trailer application to adjust some body control or powertrain functions based on the weight of the trailer to ensure a smooth trip. - -- Create a web UI that displays the signals which are synced to the cloud. - -- Create your own application which leverages vehicle signals to implement a different use case, such as a data collector. - -### Other Sample Scenarios -- Leverage OpenAI to enhance the vehicle’s user experience. You could develop an application that uses OpenAI’s GPT model to power an in-vehicle virtual assistant. - -- Consider using OpenAI to enhance our software orchestrators, effectively creating intelligent orchestrators! OpenAI could optimize workload placements across compute nodes and/or cloud based on factors such compute usage, memory usage, network coverage, and latency. - -- Create a web user interface application, such as a dashboard, that displays the various workloads' health. - -## Useful References for Creating and Enhancing Sample Scenarios - -This section offers guidance for creating a new sample scenario or extending the [Provided Sample Scenario](#provided-sample-scenario). While it does not provide a comprehensive list of resources, it aims to steer you in the right direction. If this section does not provide the guidance you need, please refer to the respective project’s documentation. See [Projects Involved](#projects-involved) for the project links. - -### In-Vehicle Stack -If you are using the [In-Vehicle Stack](./in-vehicle-stack/README.md), these references may be useful. - -- [How do I override a configuration file for a service in the in-vehicle stack?](./docs/in-vehicle-stack/config-overrides.md) -- What is Chariott's default Service Discovery's URI? - > The default URI for the Service Discovery is `http://0.0.0.0:50000`. Please see Chariott's FAQ for more info on [Service Discovery](#chariott). -- After I pushed a newly created image to my container registry, how do I get the orchestrator to start my container image? - > If you are using Eclipse Ankaios, please see [Workload Development](./eclipse-ankaios/README.md#workload-development) section. If you are using Eclipse BlueChi, please see the [Managing Workloads](./eclipse-bluechi/README.md#managing-workloads) section. -- After I created a new component or edited an existing component, why should I push its image to a container registry? - > Pushing an image to the container registry is the recommended approach because it enables the orchestrators to easily reference that image, pull it from the container registry and run it as a container. -- After I decided which orchestrator to use, why should I use run its devcontainer using VSCode? - > Running the devcontainer environment through VSCode offers an interactive approach for development. However, this is just a suggestion. You also have the option to use a devcontainer without VSCode. The devcontainer environment guarantees that you have the necessary tools to interact with each orchestrator and the in-vehicle software stack. While you can choose to develop on your local machine, you would need to install the required tools yourself. Please see [Install additional software](https://code.visualstudio.com/docs/devcontainers/create-dev-container#_install-additional-software) if you wish to install additional software into your VSCode devcontainer. -- After I edited the configuration file of a service, what should I do next? - > You will need to restart the smart trailer scenario. If you are using Eclipse Ankaios, please see [Workload Development](./eclipse-ankaios/README.md#workload-development) section. If you are using Eclipse BlueChi, please see the [Managing Workloads](./eclipse-bluechi/README.md#managing-workloads) section. - -### General -This section contains general references that may provide guidance to the scenario you choose. - -#### Configuration Files -- [Which configuration files can I override?](./docs/in-vehicle-stack/config-overrides.md#how-to-override-configuration-for-in-vehicle-stack-containers) - -#### Ibeji -- [How do I create an in-vehicle digital twin model?](https://github.com/eclipse-ibeji/ibeji/blob/main/docs/tutorials/in_vehicle_model/README.md) - > This helps you construct or enhance an in-vehicle digital twin model, and enables you to reference your in-vehicle digital twin model in your code. -- [How do I create a digital twin provider or add additional capabilities to an existing provider?](https://github.com/eclipse-ibeji/ibeji/blob/main/docs/tutorials/provider/README.md) - > A digital twin provider exposes a subset of the in-vehicle's hardware capabilities. This enables digital twin consumers to utilize that subset. Also you may find that you want to add additional capabilities, such as a new in-vehicle signal, to an existing digital twin provider. When you add new capabilities to a provider, such as a new in-vehicle signal, you will need to update the mapping client's configuration or the mapping service that you are using with Freyja. See the [Freyja FAQ](#freyja) for more details. Please see the digital twin provider [smart trailer properties' source code](./in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/src/main.rs) for a digital twin provider example. - - [How do I build a container image for my digital twin provider?](https://github.com/eclipse-ibeji/ibeji/blob/main/samples/container/README.md#provider) - > You will need to build a container image if you are updating the smart trailer digital twin provider's source code or creating your own digital twin provider. - - [If my digital twin provider is running in a container, how do I override its configuration file?](https://github.com/eclipse-ibeji/ibeji/blob/main/samples/container/README.md#run) - > You do not need to rebuild the container image if you are overriding your digital twin provider's configuration file. - - [How do I use the Managed Subscribe module?](https://github.com/eclipse-ibeji/ibeji/blob/main/samples/managed_subscribe/README.md) - > Using the Managed Subscribe module and dynamic topics in your digital twin provider allows your digital twin consumers to specify the frequency at which they want to receive updates. Please see the digital twin provider [smart trailer properties' source code](./in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/src/main.rs) for an example. -- [How do I create a digital twin consumer?](https://github.com/eclipse-ibeji/ibeji/blob/main/docs/tutorials/consumer/README.md) - > A digital twin consumer is a software entity that interfaces with the digital representation of the in-vehicle hardware components. Please see the digital twin consumer [smart trailer application's source code](./in-vehicle-stack/scenarios/smart_trailer_use_case/applications/smart_trailer_application/src/main.rs) for a digital twin consumer example. - - [How do I build a container image for my digital twin consumer?](https://github.com/eclipse-ibeji/ibeji/blob/main/samples/container/README.md#consumer) - > You will need to build a container image if you are updating the smart trailer digital twin consumer's source code or creating your own digital twin consumer. - - [If my digital twin consumer is running in a container, how do I override its configuration file?](./docs/in-vehicle-stack/config-overrides.md) - > You do not need to rebuild the container image if you are overriding your digital twin consumer's configuration file. - -#### Chariott -- [How can I use the Service Discovery to register and discover other applications/services?](https://github.com/eclipse-chariott/chariott/blob/main/service_discovery/README.md) - > An application can utilize Chariott's Service Discovery to register with the system and enable other applications to discover it through the Service Discovery system. This can also be used to discover other components in the in-vehicle-stack like Ibeji. - -#### Freyja -- [How do I configure new mappings for Freyja's in-memory mapping client?](https://github.com/eclipse-ibeji/freyja/blob/main/mapping_clients/in_memory_mock_mapping_client/README.md) - > Adding a new in-vehicle signal requires you to configure a new mapping for that in-vehicle signal. -- [How do I override the mapping configuration?](https://github.com/eclipse-ibeji/freyja/blob/main/docs/config-overrides.md) -- [How do I sync in-vehicle signals to the cloud?](./docs/in-vehicle-stack/azure-cloud-connection.md) - > You may want to sync your in-vehicle signals to a cloud digital representation of your in-vehicle. - -### Eclipse Ankaios - -- [Quickstart](https://eclipse-ankaios.github.io/ankaios/0.2/usage/quickstart/) -- [User documentation](https://eclipse-ankaios.github.io/ankaios/0.2/) -- [Working with the startup configuration](https://eclipse-ankaios.github.io/ankaios/0.2/reference/startup-configuration/) -- [Architecture](https://eclipse-ankaios.github.io/ankaios/0.2/architecture/) -- [Control interface examples](https://github.com/eclipse-ankaios/ankaios/tree/v0.2.0-rc1/examples) -- [Suggestions for improvement & Feedback](https://github.com/eclipse-ankaios/ankaios/discussions) - -## Getting Started - -Please note that it is not necessary to use both software orchestrators. You can choose either one to implement your scenario. - -### Need to know -- You need basic knowledge about containerization technologies and tools (e.g. Docker, Podman), but if you have not dealt with it yet, don't worry, just check out a little tutorial (https://docs.docker.com/get-started/) to get a basic understanding of containers and you are prepared. -- Basic skills to deal with distributed systems - -### Prebuilt Container Images - -Please see the instructions on the [Azure Container Registry documentation](./docs/azure/azure_container_registry_instructions.md) for pulling prebuilt container images for the in-vehicle software stack. - -### Eclipse Ankaios Orchestrator - -If you have decided to use Ankaios, you will find an easy to use development environment in the subfolder [eclipse-ankaios](./eclipse-ankaios/README.md), -which you can use for all maestro challenges. - -### Eclipse BlueChi Orchestrator - -If you have decided to use BlueChi, you will find an easy to use development environment in the subfolder [eclipse-bluechi](./eclipse-bluechi/README.md), -which you can use for all maestro challenges. - -### Azure Subscription - -Please see the [SDV Hackathon Azure Pass Code Instructions](./docs/azure/azure_code_redeem_instructions.md) for redeeming an Azure pass code if you are interested in using resources on Azure. - -## In-Vehicle Software Stack Overview - -The in-vehicle stack comprises Eclipse Ibeji, Eclipse Agemo, Eclipse Freyja, and Eclipse Chariott. This stack enables a universal vehicle model to be used across different vehicles, dynamic management of vehicle signal topics for publishing and subscribing, synchronization of in-vehicle signals to a cloud-based digital twin, and the development of applications without the need for specific knowledge about the location of the resources they use. - -We provide two software orchestrators, Ankaios and BlueChi, to orchestrate the in-vehicle stack. Feel free to choose either for this hackathon challenge. - -## Projects Involved - -### In-Vehicle Software Stack -- [Eclipse Agemo](https://github.com/eclipse-chariott/Agemo): Agemo incorporates a Pub Sub Service, a [gRPC](https://grpc.io/docs/what-is-grpc/introduction/) service that facilitates publish/subscribe operations for in-vehicle applications, including but not limited to Eclipse Ibeji and Eclipse Chariott. This service has the capability to register with Chariott, enhancing its discoverability by other applications such as Eclipse Ibeji. It offers dynamic creation and management of topics. - -- [Eclipse Chariott](https://github.com/eclipse-chariott/chariott): Chariott operates as a [gRPC](https://grpc.io/docs/what-is-grpc/introduction/) service, offering a unified interface for application interaction. Chariott enables [Service Discovery](https://github.com/eclipse-chariott/chariott/blob/main/service_discovery/README.md), allowing provider applications to promote their capabilities by registering with Chariott’s service registry. Consumer applications in need of specific resources and capabilities can discover them via Chariott’s service registry. - -- [Eclipse Freyja](https://github.com/eclipse-ibeji/freyja/): Freyja enables seamless synchronization between the vehicle’s digital twin and its cloud-based digital twin. This synchronization allows for a consistent and unified digital representation of the vehicle across both platforms. - -- [Eclipse Ibeji](https://github.com/eclipse-ibeji/ibeji): Ibeji is designed with the goal of enabling a digital depiction of the vehicle’s state and capabilities. It achieves this through an adaptable, open, and dynamic architecture that provides access to the vehicle’s hardware, sensors, and capabilities. This extensible framework allows for a comprehensive and accurate representation of the vehicle’s current status and potential functionalities. - -### In-Vehicle Software Orchestrators -- [Eclipse Ankaios](https://eclipse-ankaios.github.io/ankaios): Ankaios provides workload and container orchestration for automotive High Performance Computing (HPC) software . While it can be used for various fields of applications, it is developed from scratch for automotive use cases and provides a slim yet powerful solution to manage containerized applications. It supports various container runtimes with Podman as the first one, but other container runtimes and even native applications can be supported. Eclipse Ankaios is independent of existing communication frameworks like SOME/IP, DDS, or REST API. - -- [Eclipse BlueChi](https://github.com/containers/bluechi): BlueChi is a systemd service controller intended for multi-node environments with a predefined number of nodes and with a focus on highly regulated ecosystems such as those requiring functional safety. Potential use cases can be found in domains such as transportation, where services need to be controlled across different edge devices and where traditional orchestration tools are not compliant with regulatory requirements. - -## Hack Coaches -Who can be contacted for this challenge for questions. (Slack-handle) - -- Eclipse Agemo, Chariott, Ibeji and Freyja: Jordan Chiu (Slack handle: @Jordan Chiu) -- Eclipse Agemo, Chariott, Ibeji and Freyja: Filipe Prezado (Slack handle: @fprezado) -- Eclipse Ankaios: Chatree Akasarn (Slack handle: @Chatree Akasarn) -- Eclipse Ankaios: Oliver Klapper (Slack handle: @Oliver Klapper) -- Eclipse BlueChi: Leonardo Rossetti (Slack handle: @Leonardo Rossetti) + An explanation of the Wheelchair Assistant Applications can be found in [Wheelchair Assistant Application](./in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/). From e349525c93252912bdb92be284d9c5148c221831 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kilian=20K=C3=B6ppchen?= <373318+stubb@users.noreply.github.com> Date: Thu, 30 Nov 2023 09:51:58 +0100 Subject: [PATCH 31/38] Integrate assistant --- in-vehicle-stack/Cargo.toml | 1 + .../wheelchair_assistant_application/Cargo.toml | 4 ++-- .../wheelchair_assistant_application/src/main.rs | 8 ++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/in-vehicle-stack/Cargo.toml b/in-vehicle-stack/Cargo.toml index 7522650..d5ade98 100644 --- a/in-vehicle-stack/Cargo.toml +++ b/in-vehicle-stack/Cargo.toml @@ -25,6 +25,7 @@ members = [ "scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider", "scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider", "scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application", + "scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application", ] [workspace.dependencies] diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/Cargo.toml index 86f45e7..e591528 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/Cargo.toml +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/Cargo.toml @@ -5,8 +5,8 @@ edition = "2021" license = "MIT" [dependencies] -digital-twin-model = { path = "../../digital-twin-model" } -digital_twin_providers_common = { path = "../../digital_twin_providers/common" } +wheelchair_digital_twin_model = { path = "../../digital-twin-model" } +wheelchair_digital_twin_providers_common = { path = "../../digital_twin_providers/common" } env_logger= { workspace = true } log = { workspace = true } interfaces = { path = "../../../../proto_build"} diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs index 0012047..377bd0a 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs @@ -4,16 +4,16 @@ use std::env; -use digital_twin_model::car_v1; -use digital_twin_providers_common::constants::chariott::{ +use wheelchair_digital_twin_model::{car_v1, Metadata}; +use wheelchair_digital_twin_providers_common::constants::chariott::{ INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, }; -use digital_twin_providers_common::constants::{ +use wheelchair_digital_twin_providers_common::constants::{ constraint_type, digital_twin_operation, digital_twin_protocol, }; -use digital_twin_providers_common::utils::{ +use wheelchair_digital_twin_providers_common::utils::{ discover_digital_twin_provider_using_ibeji, discover_service_using_chariott, get_uri, }; use env_logger::{Builder, Target}; From 9bd5bb8ebaede9414cbed39555a100ac2fa7507b Mon Sep 17 00:00:00 2001 From: DennisHa95 <152274887+DennisHa95@users.noreply.github.com> Date: Thu, 30 Nov 2023 09:53:08 +0100 Subject: [PATCH 32/38] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 5c3be18..896fef1 100644 --- a/README.md +++ b/README.md @@ -20,3 +20,9 @@ All our services are registered by Chariott. ##### The Wheelchair Assistant Applications An explanation of the Wheelchair Assistant Applications can be found in [Wheelchair Assistant Application](./in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/). + + ##### State machine overview + + ##### Architecture + + From afc02ca025e898077fdf3d379aa396775f72ae03 Mon Sep 17 00:00:00 2001 From: Eduard Rogozhkin Date: Thu, 30 Nov 2023 09:56:45 +0100 Subject: [PATCH 33/38] Add new python UI app --- .../wheelchair_assistant_demo.py | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application_demo_gui/wheelchair_assistant_demo.py diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application_demo_gui/wheelchair_assistant_demo.py b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application_demo_gui/wheelchair_assistant_demo.py new file mode 100644 index 0000000..bfb39b2 --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application_demo_gui/wheelchair_assistant_demo.py @@ -0,0 +1,93 @@ +""" +This is a simple GUI that demonstrates the functionality +of the Wheelchair Assistant Application. It simulates the general workflow of the application as follows. + +You start it by pushing START Button. The virtual car is now in a neutral stand. +By pushing the KEY Button you unlock the car and then with a Scale you can simulate +the distance measurement from the car to the handicap driver. +If the distance drops below 2 m the certain car equipment (door, steering wheel, seat) are being adjusted +to facilitate access to the car. +By pushing START THE CAR Button the equipment is being readjusted for the comfort driving. +""" + + +from tkinter import * + + +def switch_key(): + global lock_switch + + # Determine is on or off + if not lock_switch: + my_label.config(text="The Car is unlocked", fg="green") + Key_Button.config(text='KEY') + lock_switch = True + else: + my_label.config(text="The Car is locked", fg="grey") + Key_Button.config(text='KEY') + lock_switch = False + + +def switch_car(): + global lock_switch, car_on, dist_value + if not car_on: + if lock_switch and int(dist_value.get()) < 1: + switch_key() + seat_label.config(text='Seat: readjusted', fg='blue') + door_label.config(text='Door: closed', fg='blue') + steering_wheel_label.config(text='Steering Wheel: readjusted', fg='blue') + Start_Button.config(text='STOP THE CAR') + car_on = True + else: + switch_key() + seat_label.config(text='Seat: adjusted', fg='green') + door_label.config(text='Door: opened', fg='green') + steering_wheel_label.config(text='Steering Wheel: adjusted', fg='green') + Start_Button.config(text='START THE CAR') + car_on = False + + +def switch_distance(val): + global lock_switch + + if lock_switch and int(val) <= 2: + seat_label.config(text='Seat: adjusted', fg='green') + door_label.config(text='Door: opened', fg='green') + steering_wheel_label.config(text='Steering Wheel: adjusted', fg='green') + else: + seat_label.config(text='Seat: neutral', fg='grey') + door_label.config(text='Door: closed', fg='grey') + steering_wheel_label.config(text='Steering Wheel: neutral', fg='grey') + + +lock_switch = True +car_on = False + +top = Tk() +top.geometry("1000x600") +# top.config(background='lightblue') + +my_label = Label(top, fg="grey", font=("Helvetica", 20)) +my_label.place(x=100, y=50) + +seat_label = Label(top,text='Seat', fg='grey', font=('Helvetica', 20)) +seat_label.place(x=600, y=50) + +door_label = Label(top,text='Door', fg='grey', font=('Helvetica', 20)) +door_label.place(x=600, y=100) + +steering_wheel_label = Label(top,text='Steering_Wheel', fg='grey', font=('Helvetica', 20)) +steering_wheel_label.place(x=600, y=150) + +dist_value = IntVar() +distance = Scale(top, orient='horizontal', from_=10, to=0, resolution=2, length=200, + label='Distance to car (m)', command=switch_distance, font=('Helvetica', 15), variable=dist_value) +distance.set(500) +distance.place(x=100, y=200) + +Key_Button = Button(top, text ="START", width=15, height=4, font=("Helvetica", 10), command=switch_key) +Key_Button.place(x=150, y=100) + +Start_Button = Button(top, text ="START THE CAR", width=15, height=4, font=("Helvetica", 10), command=switch_car) +Start_Button.place(x=150, y=400) +top.mainloop() From c8d4aa087888660bf193704e14a80b6225dd0d7f Mon Sep 17 00:00:00 2001 From: "Enrico Walther (IAV)" Date: Wed, 29 Nov 2023 22:24:23 +0100 Subject: [PATCH 34/38] Scripts. --- .../build_wheelchair_assistant_container.sh | 16 +++ .../src/main.rs | 4 +- .../start_trailer_applications_ankaios.sh | 113 ------------------ .../start_trailer_applications_bluechi.sh | 112 ----------------- ...t_wheelchair_assistant_provider_ankaios.sh | 30 +++++ 5 files changed, 48 insertions(+), 227 deletions(-) create mode 100755 in-vehicle-stack/build_wheelchair_assistant_container.sh delete mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_ankaios.sh delete mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_bluechi.sh create mode 100755 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_wheelchair_assistant_provider_ankaios.sh diff --git a/in-vehicle-stack/build_wheelchair_assistant_container.sh b/in-vehicle-stack/build_wheelchair_assistant_container.sh new file mode 100755 index 0000000..4a2dc1e --- /dev/null +++ b/in-vehicle-stack/build_wheelchair_assistant_container.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +# Deklariere das Array +PROVIDER_CONTAINERS=( + "car_off_provider" + "car_on_provider" + "carkey_lock_provider" + "carkey_unlock_provider" + "wheelchair_distance_decreasing_provider" + "wheelchair_distance_increasing_provider" +) + +# Iterate over provider containers to build +for CONTAINER in "${PROVIDER_CONTAINERS[@]}"; do + podman build -t sdvblueprint.azurecr.io/sdvblueprint/in-vehicle-stack/${CONTAINER}:0.1.0 -f "scenarios/wheelchair_assistant_use_case/digital_twin_providers/${CONTAINER}/Dockerfile" . +done diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/main.rs index e504316..4c6c45c 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/main.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/main.rs @@ -12,8 +12,8 @@ use wheelchair_digital_twin_providers_common::constants::chariott::{ INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, }; -use digital_twin_providers_common::constants::{digital_twin_operation, digital_twin_protocol}; -use digital_twin_providers_common::utils::discover_service_using_chariott; +use wheelchair_digital_twin_providers_common::constants::{digital_twin_operation, digital_twin_protocol}; +use wheelchair_digital_twin_providers_common::utils::discover_service_using_chariott; use env_logger::{Builder, Target}; use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; use interfaces::invehicle_digital_twin::v1::{EndpointInfo, EntityAccessInfo, RegisterRequest}; diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_ankaios.sh b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_ankaios.sh deleted file mode 100644 index 694e614..0000000 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_ankaios.sh +++ /dev/null @@ -1,113 +0,0 @@ -#!/bin/bash -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# SPDX-License-Identifier: MIT - -set -e - -# This script requires jq and grpcurl to be installed -# These are included in the ankaios devcontainer, but if you want to run it outside -# you could add the commands to install them here -# Check if grpcurl is installed -if !command -v grpcurl &> /dev/null -then - echo "grpcurl could not be found; please install it and run again" - exit 1 -fi - -# Check if jq is installed -if !command -v jq &> /dev/null -then - echo "jq could not be found; please install it and run again" - exit 1 -fi - -# Get the directory of where the script is located -# All relative paths will be in relation to this -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) - -# The Ibeji gRPC server address -SERVER="0.0.0.0:5010" - -# The Ibeji FindById gRPC service and method -SERVICE="invehicle_digital_twin.InvehicleDigitalTwin" -METHOD="FindById" - -# The request body: The IsTrailerConnected signal -BODY='{"id":"dtmi:sdv:Trailer:IsTrailerConnected;1"}' - -PROTO_PATH="${SCRIPT_DIR}/../../../interfaces/invehicle_digital_twin/v1" -PROTO="invehicle_digital_twin.proto" - -EXPECTED_PROTOCOL="grpc" -EXPECTED_OPERATION="get" - -# Call FindById in a loop until something is returned -while true; do - STATUS=0 - OUTPUT=$(grpcurl -import-path $PROTO_PATH -proto $PROTO -plaintext -d "$BODY" $SERVER $SERVICE/$METHOD 2>&1) || STATUS=$? - - # Check if the output contains entityAccessInfo (the response from Ibeji when a provider is found) - if echo "$OUTPUT" | grep -iq "EntityAccessInfo" - then - echo "The FindById call was successful. Output:" - echo "$OUTPUT" - break - else - echo "Provider not found. Status Code '$STATUS' Error '$OUTPUT'" - echo "The trailer is not connected. Retrying..." - sleep 5 - fi -done - -# Parse the output as a JSON object using jq and extract the endpoints -ENDPOINTS=$(echo $OUTPUT | jq -c '.entityAccessInfo.endpointInfoList[]') - -# Loop through each endpoint -for ENDPOINT in $ENDPOINTS -do - # Check if protocol is what we expect - if [[ $(echo $ENDPOINT | jq -r '.protocol' | tr '[:upper:]' '[:lower:]') == $EXPECTED_PROTOCOL ]] - then - OPERATIONS=$(echo $ENDPOINT | jq -r '.operations[]') - # Loop through each operation and check if this endpoint supports the expected operation - for OPERATION in $OPERATIONS - do - if [[ $(echo $OPERATION | tr '[:upper:]' '[:lower:]') == $EXPECTED_OPERATION ]] - then - URI=$(echo $ENDPOINT | jq -r '.uri') - CONTEXT=$(echo $ENDPOINT | jq -r '.context') - - # We need the authority for the server, so remove the http:// - get_server=$(echo "$URI" | sed 's/http:\/\///g') - - # Call get for the "trailer connected provider" to check if it's connected - GET_PROTO_PATH="${SCRIPT_DIR}/../interfaces" - GET_PROTO="digital_twin_get_provider.proto" - GET_SERVER=$get_server - GET_SERVICE="digital_twin_get_provider.DigitalTwinGetProvider" - GET_METHOD="Get" - GET_OUTPUT=$(grpcurl -import-path $GET_PROTO_PATH -proto $GET_PROTO -plaintext $GET_SERVER $GET_SERVICE/$GET_METHOD 2>&1) - - # For now, this always returns true, this can be expanded to simulate connecting and disconnecting the trailer - if [[ $(echo $GET_OUTPUT | jq -r '.propertyValue') ]] - then - echo "Trailer is connected! Starting workloads to manage it" - - # Start up the other workloads using podman - CFG_PROVIDER=$'image: sdvblueprint.azurecr.io/sdvblueprint/in-vehicle-stack/trailer_properties_provider:0.1.0\ncommandOptions: ["--network", "host", "--name", "trailer_properties_provider"]' - CFG_APP=$'image: sdvblueprint.azurecr.io/sdvblueprint/in-vehicle-stack/smart_trailer_application:0.1.0\ncommandOptions: ["--network", "host", "--name", "smart_trailer_application"]' - - ank run workload trailer_properties_provider --runtime podman --config "$CFG_PROVIDER" --agent agent_A - ank run workload smart_trailer_application --runtime podman --config "$CFG_APP" --agent agent_A - - echo "Called Ankaios to start the Trailer Properties Digital Twin Provider and Smart Trailer Application" - echo "Check Ankaios status with 'ank get workloads'" - exit 0 - fi - fi - done - fi -done -# We didn't find an endpoint which satisfied our conditions -exit 1 \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_bluechi.sh b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_bluechi.sh deleted file mode 100644 index 7089d7e..0000000 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_bluechi.sh +++ /dev/null @@ -1,112 +0,0 @@ -#!/bin/bash -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# SPDX-License-Identifier: MIT - -set -e - -# This script requires jq and grpcurl to be installed -# These are included in the bluechi devcontainer, but if you want to run it outside -# you could add the commands to install them here -# Check if grpcurl is installed -if !command -v grpcurl &> /dev/null -then - echo "grpcurl could not be found; please install it and run again" - exit 1 -fi - -# Check if jq is installed -if !command -v jq &> /dev/null -then - echo "jq could not be found; please install it and run again" - exit 1 -fi - -# Get the directory of where the script is located -# All relative paths will be in relation to this -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) - -# The Ibeji gRPC server address -SERVER="0.0.0.0:5010" - -# The Ibeji FindById gRPC service and method -SERVICE="invehicle_digital_twin.InvehicleDigitalTwin" -METHOD="FindById" - -# The request body: The IsTrailerConnected signal -BODY='{"id":"dtmi:sdv:Trailer:IsTrailerConnected;1"}' - -PROTO_PATH="${SCRIPT_DIR}/../../../interfaces/invehicle_digital_twin/v1" -PROTO="invehicle_digital_twin.proto" - -EXPECTED_PROTOCOL="grpc" -EXPECTED_OPERATION="get" - -# Call FindById in a loop until something is returned -while true; do - STATUS=0 - OUTPUT=$(grpcurl -import-path $PROTO_PATH -proto $PROTO -plaintext -d "$BODY" $SERVER $SERVICE/$METHOD 2>&1) || STATUS=$? - - # Check if the output contains entityAccessInfo (the response from Ibeji when a provider is found) - if echo "$OUTPUT" | grep -iq "EntityAccessInfo" - then - echo "The FindById call was successful. Output:" - echo "$OUTPUT" - break - else - echo "Provider not found. Status Code '$STATUS' Error '$OUTPUT'" - echo "The trailer is not connected. Retrying..." - sleep 5 - fi -done - -# Parse the output as a JSON object using jq and extract the endpoints -ENDPOINTS=$(echo $OUTPUT | jq -c '.entityAccessInfo.endpointInfoList[]') - -# Loop through each endpoint -for ENDPOINT in $ENDPOINTS -do - # Check if protocol is what we expect - if [[ $(echo $ENDPOINT | jq -r '.protocol' | tr '[:upper:]' '[:lower:]') == $EXPECTED_PROTOCOL ]] - then - OPERATIONS=$(echo $ENDPOINT | jq -r '.operations[]') - # Loop through each operation and check if this endpoint supports the expected operation - for OPERATION in $OPERATIONS - do - if [[ $(echo $OPERATION | tr '[:upper:]' '[:lower:]') == $EXPECTED_OPERATION ]] - then - URI=$(echo $ENDPOINT | jq -r '.uri') - CONTEXT=$(echo $ENDPOINT | jq -r '.context') - - # We need the authority for the server, so remove the http:// - get_server=$(echo "$URI" | sed 's/http:\/\///g') - - # Call get for the "trailer connected provider" to check if it's connected - GET_PROTO_PATH="${SCRIPT_DIR}/../interfaces" - GET_PROTO="digital_twin_get_provider.proto" - GET_SERVER=$get_server - GET_SERVICE="digital_twin_get_provider.DigitalTwinGetProvider" - GET_METHOD="Get" - GET_OUTPUT=$(grpcurl -import-path $GET_PROTO_PATH -proto $GET_PROTO -plaintext $GET_SERVER $GET_SERVICE/$GET_METHOD 2>&1) - - # For now, this always returns true, this can be expanded to simulate connecting and disconnecting the trailer - if [[ $(echo $GET_OUTPUT | jq -r '.propertyValue') ]] - then - echo "Trailer is connected! Starting workloads to manage it" - - # The service.kube and service.yml files for these two services are included in the BlueChi devcontainer - # See /etc/containers/systemd for these files - # Start up the other workloads using systemctl - systemctl start trailer-properties - systemctl start smart-trailer - - echo "Called systemctl to start the Trailer Properties Digital Twin Provider and Smart Trailer Application" - echo "Check systemctl status with 'systemctl status trailer-properties' and 'systemctl status smart-trailer' for status" - exit 0 - fi - fi - done - fi -done -# We didn't find an endpoint which satisfied our conditions -exit 1 \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_wheelchair_assistant_provider_ankaios.sh b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_wheelchair_assistant_provider_ankaios.sh new file mode 100755 index 0000000..63a0a8a --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_wheelchair_assistant_provider_ankaios.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +set -e + +# Deklariere das Array +#PROVIDER_CONTAINERS=( +# "car_off_provider" +# "car_on_provider" +# "carkey_lock_provider" +# "carkey_unlock_provider" +# "wheelchair_distance_decreasing_provider" +# "wheelchair_distance_increasing_provider" +#) + +PROVIDER_CONTAINERS=( + "car_off_provider" +) + +# Get the directory of where the script is located +# All relative paths will be in relation to this +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +# Iterate over provider containers to build +for CONTAINER in "${PROVIDER_CONTAINERS[@]}"; do + CFG_PROVIDER="image: sdvblueprint.azurecr.io/sdvblueprint/in-vehicle-stack/--${CONTAINER}:0.1.0\ncommandOptions: [\"--network\", \"host\", \"--name\", \"${CONTAINER}\"]" + ank run workload ${CONTAINER} --runtime podman --config "$CFG_PROVIDER" --agent agent_A +done From 9a04b7a2b50251a330e3876a225b43bb3168e184 Mon Sep 17 00:00:00 2001 From: "Enrico Walther (IAV)" Date: Wed, 29 Nov 2023 22:24:23 +0100 Subject: [PATCH 35/38] Add scripts and fix minor building issues. --- .../build_wheelchair_assistant_container.sh | 16 +++ .../src/main.rs | 4 +- .../start_trailer_applications_ankaios.sh | 113 ------------------ .../start_trailer_applications_bluechi.sh | 112 ----------------- ...t_wheelchair_assistant_provider_ankaios.sh | 30 +++++ 5 files changed, 48 insertions(+), 227 deletions(-) create mode 100755 in-vehicle-stack/build_wheelchair_assistant_container.sh delete mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_ankaios.sh delete mode 100644 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_bluechi.sh create mode 100755 in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_wheelchair_assistant_provider_ankaios.sh diff --git a/in-vehicle-stack/build_wheelchair_assistant_container.sh b/in-vehicle-stack/build_wheelchair_assistant_container.sh new file mode 100755 index 0000000..4a2dc1e --- /dev/null +++ b/in-vehicle-stack/build_wheelchair_assistant_container.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +# Deklariere das Array +PROVIDER_CONTAINERS=( + "car_off_provider" + "car_on_provider" + "carkey_lock_provider" + "carkey_unlock_provider" + "wheelchair_distance_decreasing_provider" + "wheelchair_distance_increasing_provider" +) + +# Iterate over provider containers to build +for CONTAINER in "${PROVIDER_CONTAINERS[@]}"; do + podman build -t sdvblueprint.azurecr.io/sdvblueprint/in-vehicle-stack/${CONTAINER}:0.1.0 -f "scenarios/wheelchair_assistant_use_case/digital_twin_providers/${CONTAINER}/Dockerfile" . +done diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/main.rs index e504316..4c6c45c 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/main.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider/src/main.rs @@ -12,8 +12,8 @@ use wheelchair_digital_twin_providers_common::constants::chariott::{ INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, }; -use digital_twin_providers_common::constants::{digital_twin_operation, digital_twin_protocol}; -use digital_twin_providers_common::utils::discover_service_using_chariott; +use wheelchair_digital_twin_providers_common::constants::{digital_twin_operation, digital_twin_protocol}; +use wheelchair_digital_twin_providers_common::utils::discover_service_using_chariott; use env_logger::{Builder, Target}; use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; use interfaces::invehicle_digital_twin::v1::{EndpointInfo, EntityAccessInfo, RegisterRequest}; diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_ankaios.sh b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_ankaios.sh deleted file mode 100644 index 694e614..0000000 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_ankaios.sh +++ /dev/null @@ -1,113 +0,0 @@ -#!/bin/bash -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# SPDX-License-Identifier: MIT - -set -e - -# This script requires jq and grpcurl to be installed -# These are included in the ankaios devcontainer, but if you want to run it outside -# you could add the commands to install them here -# Check if grpcurl is installed -if !command -v grpcurl &> /dev/null -then - echo "grpcurl could not be found; please install it and run again" - exit 1 -fi - -# Check if jq is installed -if !command -v jq &> /dev/null -then - echo "jq could not be found; please install it and run again" - exit 1 -fi - -# Get the directory of where the script is located -# All relative paths will be in relation to this -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) - -# The Ibeji gRPC server address -SERVER="0.0.0.0:5010" - -# The Ibeji FindById gRPC service and method -SERVICE="invehicle_digital_twin.InvehicleDigitalTwin" -METHOD="FindById" - -# The request body: The IsTrailerConnected signal -BODY='{"id":"dtmi:sdv:Trailer:IsTrailerConnected;1"}' - -PROTO_PATH="${SCRIPT_DIR}/../../../interfaces/invehicle_digital_twin/v1" -PROTO="invehicle_digital_twin.proto" - -EXPECTED_PROTOCOL="grpc" -EXPECTED_OPERATION="get" - -# Call FindById in a loop until something is returned -while true; do - STATUS=0 - OUTPUT=$(grpcurl -import-path $PROTO_PATH -proto $PROTO -plaintext -d "$BODY" $SERVER $SERVICE/$METHOD 2>&1) || STATUS=$? - - # Check if the output contains entityAccessInfo (the response from Ibeji when a provider is found) - if echo "$OUTPUT" | grep -iq "EntityAccessInfo" - then - echo "The FindById call was successful. Output:" - echo "$OUTPUT" - break - else - echo "Provider not found. Status Code '$STATUS' Error '$OUTPUT'" - echo "The trailer is not connected. Retrying..." - sleep 5 - fi -done - -# Parse the output as a JSON object using jq and extract the endpoints -ENDPOINTS=$(echo $OUTPUT | jq -c '.entityAccessInfo.endpointInfoList[]') - -# Loop through each endpoint -for ENDPOINT in $ENDPOINTS -do - # Check if protocol is what we expect - if [[ $(echo $ENDPOINT | jq -r '.protocol' | tr '[:upper:]' '[:lower:]') == $EXPECTED_PROTOCOL ]] - then - OPERATIONS=$(echo $ENDPOINT | jq -r '.operations[]') - # Loop through each operation and check if this endpoint supports the expected operation - for OPERATION in $OPERATIONS - do - if [[ $(echo $OPERATION | tr '[:upper:]' '[:lower:]') == $EXPECTED_OPERATION ]] - then - URI=$(echo $ENDPOINT | jq -r '.uri') - CONTEXT=$(echo $ENDPOINT | jq -r '.context') - - # We need the authority for the server, so remove the http:// - get_server=$(echo "$URI" | sed 's/http:\/\///g') - - # Call get for the "trailer connected provider" to check if it's connected - GET_PROTO_PATH="${SCRIPT_DIR}/../interfaces" - GET_PROTO="digital_twin_get_provider.proto" - GET_SERVER=$get_server - GET_SERVICE="digital_twin_get_provider.DigitalTwinGetProvider" - GET_METHOD="Get" - GET_OUTPUT=$(grpcurl -import-path $GET_PROTO_PATH -proto $GET_PROTO -plaintext $GET_SERVER $GET_SERVICE/$GET_METHOD 2>&1) - - # For now, this always returns true, this can be expanded to simulate connecting and disconnecting the trailer - if [[ $(echo $GET_OUTPUT | jq -r '.propertyValue') ]] - then - echo "Trailer is connected! Starting workloads to manage it" - - # Start up the other workloads using podman - CFG_PROVIDER=$'image: sdvblueprint.azurecr.io/sdvblueprint/in-vehicle-stack/trailer_properties_provider:0.1.0\ncommandOptions: ["--network", "host", "--name", "trailer_properties_provider"]' - CFG_APP=$'image: sdvblueprint.azurecr.io/sdvblueprint/in-vehicle-stack/smart_trailer_application:0.1.0\ncommandOptions: ["--network", "host", "--name", "smart_trailer_application"]' - - ank run workload trailer_properties_provider --runtime podman --config "$CFG_PROVIDER" --agent agent_A - ank run workload smart_trailer_application --runtime podman --config "$CFG_APP" --agent agent_A - - echo "Called Ankaios to start the Trailer Properties Digital Twin Provider and Smart Trailer Application" - echo "Check Ankaios status with 'ank get workloads'" - exit 0 - fi - fi - done - fi -done -# We didn't find an endpoint which satisfied our conditions -exit 1 \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_bluechi.sh b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_bluechi.sh deleted file mode 100644 index 7089d7e..0000000 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_trailer_applications_bluechi.sh +++ /dev/null @@ -1,112 +0,0 @@ -#!/bin/bash -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# SPDX-License-Identifier: MIT - -set -e - -# This script requires jq and grpcurl to be installed -# These are included in the bluechi devcontainer, but if you want to run it outside -# you could add the commands to install them here -# Check if grpcurl is installed -if !command -v grpcurl &> /dev/null -then - echo "grpcurl could not be found; please install it and run again" - exit 1 -fi - -# Check if jq is installed -if !command -v jq &> /dev/null -then - echo "jq could not be found; please install it and run again" - exit 1 -fi - -# Get the directory of where the script is located -# All relative paths will be in relation to this -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) - -# The Ibeji gRPC server address -SERVER="0.0.0.0:5010" - -# The Ibeji FindById gRPC service and method -SERVICE="invehicle_digital_twin.InvehicleDigitalTwin" -METHOD="FindById" - -# The request body: The IsTrailerConnected signal -BODY='{"id":"dtmi:sdv:Trailer:IsTrailerConnected;1"}' - -PROTO_PATH="${SCRIPT_DIR}/../../../interfaces/invehicle_digital_twin/v1" -PROTO="invehicle_digital_twin.proto" - -EXPECTED_PROTOCOL="grpc" -EXPECTED_OPERATION="get" - -# Call FindById in a loop until something is returned -while true; do - STATUS=0 - OUTPUT=$(grpcurl -import-path $PROTO_PATH -proto $PROTO -plaintext -d "$BODY" $SERVER $SERVICE/$METHOD 2>&1) || STATUS=$? - - # Check if the output contains entityAccessInfo (the response from Ibeji when a provider is found) - if echo "$OUTPUT" | grep -iq "EntityAccessInfo" - then - echo "The FindById call was successful. Output:" - echo "$OUTPUT" - break - else - echo "Provider not found. Status Code '$STATUS' Error '$OUTPUT'" - echo "The trailer is not connected. Retrying..." - sleep 5 - fi -done - -# Parse the output as a JSON object using jq and extract the endpoints -ENDPOINTS=$(echo $OUTPUT | jq -c '.entityAccessInfo.endpointInfoList[]') - -# Loop through each endpoint -for ENDPOINT in $ENDPOINTS -do - # Check if protocol is what we expect - if [[ $(echo $ENDPOINT | jq -r '.protocol' | tr '[:upper:]' '[:lower:]') == $EXPECTED_PROTOCOL ]] - then - OPERATIONS=$(echo $ENDPOINT | jq -r '.operations[]') - # Loop through each operation and check if this endpoint supports the expected operation - for OPERATION in $OPERATIONS - do - if [[ $(echo $OPERATION | tr '[:upper:]' '[:lower:]') == $EXPECTED_OPERATION ]] - then - URI=$(echo $ENDPOINT | jq -r '.uri') - CONTEXT=$(echo $ENDPOINT | jq -r '.context') - - # We need the authority for the server, so remove the http:// - get_server=$(echo "$URI" | sed 's/http:\/\///g') - - # Call get for the "trailer connected provider" to check if it's connected - GET_PROTO_PATH="${SCRIPT_DIR}/../interfaces" - GET_PROTO="digital_twin_get_provider.proto" - GET_SERVER=$get_server - GET_SERVICE="digital_twin_get_provider.DigitalTwinGetProvider" - GET_METHOD="Get" - GET_OUTPUT=$(grpcurl -import-path $GET_PROTO_PATH -proto $GET_PROTO -plaintext $GET_SERVER $GET_SERVICE/$GET_METHOD 2>&1) - - # For now, this always returns true, this can be expanded to simulate connecting and disconnecting the trailer - if [[ $(echo $GET_OUTPUT | jq -r '.propertyValue') ]] - then - echo "Trailer is connected! Starting workloads to manage it" - - # The service.kube and service.yml files for these two services are included in the BlueChi devcontainer - # See /etc/containers/systemd for these files - # Start up the other workloads using systemctl - systemctl start trailer-properties - systemctl start smart-trailer - - echo "Called systemctl to start the Trailer Properties Digital Twin Provider and Smart Trailer Application" - echo "Check systemctl status with 'systemctl status trailer-properties' and 'systemctl status smart-trailer' for status" - exit 0 - fi - fi - done - fi -done -# We didn't find an endpoint which satisfied our conditions -exit 1 \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_wheelchair_assistant_provider_ankaios.sh b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_wheelchair_assistant_provider_ankaios.sh new file mode 100755 index 0000000..63a0a8a --- /dev/null +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_wheelchair_assistant_provider_ankaios.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT license. +# SPDX-License-Identifier: MIT + +set -e + +# Deklariere das Array +#PROVIDER_CONTAINERS=( +# "car_off_provider" +# "car_on_provider" +# "carkey_lock_provider" +# "carkey_unlock_provider" +# "wheelchair_distance_decreasing_provider" +# "wheelchair_distance_increasing_provider" +#) + +PROVIDER_CONTAINERS=( + "car_off_provider" +) + +# Get the directory of where the script is located +# All relative paths will be in relation to this +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +# Iterate over provider containers to build +for CONTAINER in "${PROVIDER_CONTAINERS[@]}"; do + CFG_PROVIDER="image: sdvblueprint.azurecr.io/sdvblueprint/in-vehicle-stack/--${CONTAINER}:0.1.0\ncommandOptions: [\"--network\", \"host\", \"--name\", \"${CONTAINER}\"]" + ank run workload ${CONTAINER} --runtime podman --config "$CFG_PROVIDER" --agent agent_A +done From 468339f97acc21156130802536e92e8035b9c2cf Mon Sep 17 00:00:00 2001 From: "Enrico Walther (IAV)" Date: Thu, 30 Nov 2023 10:46:56 +0100 Subject: [PATCH 36/38] Cleanup. --- .../.devcontainer/devcontainer.json | 13 - eclipse-bluechi/README.md | 232 ---------------- in-vehicle-stack/Cargo.toml | 27 +- .../build_wheelchair_assistant_container.sh | 9 + .../smart_trailer_application/Cargo.toml | 16 -- .../smart_trailer_application/Dockerfile | 71 ----- .../smart_trailer_application/src/main.rs | 250 ----------------- .../digital-twin-model/Cargo.toml | 17 -- .../digital-twin-model/dtdl/trailer.json | 24 -- .../digital-twin-model/src/lib.rs | 13 - .../digital-twin-model/src/trailer_v1.rs | 23 -- .../digital_twin_providers/common/Cargo.toml | 13 - .../common/src/constants.rs | 33 --- .../digital_twin_providers/common/src/lib.rs | 6 - .../common/src/utils.rs | 154 ----------- .../trailer_connected_provider/Cargo.toml | 18 -- .../trailer_connected_provider/Dockerfile | 74 ----- .../trailer_connected_provider/src/main.rs | 110 -------- .../src/trailer_connected_provider_impl.rs | 27 -- .../trailer_properties_provider/Cargo.toml | 29 -- .../trailer_properties_provider/Dockerfile | 74 ----- .../trailer_properties_provider/src/main.rs | 170 ------------ .../src/trailer_properties_provider_impl.rs | 259 ------------------ .../digital_twin_get_provider.proto | 26 -- .../proto_build/Cargo.toml | 17 -- .../proto_build/build.rs | 8 - .../proto_build/src/lib.rs | 10 - .../start_trailer_applications_ankaios.sh | 113 -------- .../start_trailer_applications_bluechi.sh | 112 -------- .../.gitignore | 1 - .../Cargo.toml | 19 -- .../Dockerfile | 22 -- .../ankaios_resource_statistics_app/README.md | 61 ----- .../src/commands.rs | 14 - .../src/main.rs | 32 --- .../src/resource_statistic_job.rs | 71 ----- .../src/routes.rs | 11 - .../trailer_connected_provider/Dockerfile | 74 ----- .../start_trailer_applications_ankaios.sh | 97 ------- ...t_wheelchair_assistant_provider_ankaios.sh | 19 +- 40 files changed, 29 insertions(+), 2340 deletions(-) delete mode 100644 eclipse-bluechi/.devcontainer/devcontainer.json delete mode 100644 eclipse-bluechi/README.md delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/applications/smart_trailer_application/Cargo.toml delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/applications/smart_trailer_application/Dockerfile delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/applications/smart_trailer_application/src/main.rs delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/digital-twin-model/Cargo.toml delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/digital-twin-model/dtdl/trailer.json delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/digital-twin-model/src/lib.rs delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/digital-twin-model/src/trailer_v1.rs delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/common/Cargo.toml delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/common/src/constants.rs delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/common/src/lib.rs delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/common/src/utils.rs delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/Cargo.toml delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/Dockerfile delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/src/main.rs delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/src/trailer_connected_provider_impl.rs delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/Cargo.toml delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/Dockerfile delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/src/main.rs delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/src/trailer_properties_provider_impl.rs delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/interfaces/digital_twin_get_provider.proto delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/proto_build/Cargo.toml delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/proto_build/build.rs delete mode 100644 in-vehicle-stack/scenarios/smart_trailer_use_case/proto_build/src/lib.rs delete mode 100755 in-vehicle-stack/scenarios/smart_trailer_use_case/scripts/start_trailer_applications_ankaios.sh delete mode 100755 in-vehicle-stack/scenarios/smart_trailer_use_case/scripts/start_trailer_applications_bluechi.sh delete mode 100644 scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/.gitignore delete mode 100644 scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/Cargo.toml delete mode 100644 scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/Dockerfile delete mode 100644 scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/README.md delete mode 100644 scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/src/commands.rs delete mode 100644 scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/src/main.rs delete mode 100644 scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/src/resource_statistic_job.rs delete mode 100644 scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/src/routes.rs delete mode 100644 scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/Dockerfile delete mode 100755 scenarios/smart_trailer_use_case/scripts/start_trailer_applications_ankaios.sh rename {in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts => scenarios/wheelchair_assistant_use_case}/start_wheelchair_assistant_provider_ankaios.sh (66%) diff --git a/eclipse-bluechi/.devcontainer/devcontainer.json b/eclipse-bluechi/.devcontainer/devcontainer.json deleted file mode 100644 index 49bcb1a..0000000 --- a/eclipse-bluechi/.devcontainer/devcontainer.json +++ /dev/null @@ -1,13 +0,0 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the -// README at: https://github.com/devcontainers/templates/tree/main/src/rust -{ - "name": "autosd", - "privileged": true, - "image": "sdvblueprint.azurecr.io/sdvblueprint/eclipse-bluechi/devenv:latest", - "overrideCommand": false, - "mounts": [ - "source=${localWorkspaceFolder}/../in-vehicle-stack,target=/workspaces/app/in-vehicle-stack,type=bind" - ], - "workspaceMount": "source=${localWorkspaceFolder},target=/workspaces/app/,type=bind", - "workspaceFolder": "/workspaces/app/" -} \ No newline at end of file diff --git a/eclipse-bluechi/README.md b/eclipse-bluechi/README.md deleted file mode 100644 index cb2a046..0000000 --- a/eclipse-bluechi/README.md +++ /dev/null @@ -1,232 +0,0 @@ -# Eclipse BlueChi - -![Smart trailer blueprint](../docs/diagrams/bluechi.png) - -Upstream documentation: - -BlueChi is a systemd controller that adds a thin layer to enable multi-node -workload management and cross-node dependencies. - -It can handle various workloads such as containers, virtual machines or -applications running on bare metal. To run containers under systemd in an -optimal way it uses Podman's Quadlet implementation. This also enables the usage -of Kubernetes resource definitions to define the workload. - -## Links - -* [BlueChi documentation](https://bluechi.readthedocs.io/en/latest/) -* [BlueChi CLI - documentation]() -* [Podman](https://docs.podman.io/en/latest/) -* [Podman and Quadlet](https://www.redhat.com/sysadmin/quadlet-podman) - -## Prerequisites - -* A container runtime such as [Docker](https://docs.docker.com/get-docker/) or [Podman](https://podman.io/docs/installation) - * Note: non linux machines need to run docker/podman machine. - -## Development Environment - -There are two development environments mentioned in the next section that provide the following components: - -* Eclipse Chariott -* Eclipse Agemo -* Eclipse Ibeji -* Eclipse Freyja -* Eclipse BlueChi -* systemd -* Podman -* Quadlet - -All services are accessible via `localhost:$port`. - -## Two Development Environments - -It is strongly recommended that you use the devcontainer with VSCode. - -NOTE: You can build the development environment image yourself in case you are having trouble running it from this repository: https://github.com/odra/eclipse-bluechi-hackathon-image - -## Run the devcontainer with VSCode - -### Prerequisite -* Ensure that the [Remote Development extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack) installed in VSCode - -* Upstream documentation: - * - * https://github.com/devcontainers/cli - -The following steps below uses the VSCode devcontainer extension. If you prefer, you can use [VSCode's devcontainer's CLI](https://github.com/devcontainers/cli) instead. - -1. Login to the Azure's container registry to allow VSCode to pull the devcontainer image: - ```shell - docker login sdvblueprint.azurecr.io - ``` -1. You can use the VSCode devcontainer extension to start your containerized development environment. - ```shell - cd /maestro-challenge/eclipse-bluechi - code . - ``` - -1. VSCode detects automatically that a `.devcontainer` folder exists inside this subfolder. Please confirm the dialog to reopen VSCode inside the devcontainer. Afterwards, open a new terminal inside the devcontainer in VSCode. - -## Run the devcontainer without VSCode - -Upstream documentation: - -1. Login to the Azure's container registry: - ```shell - docker login sdvblueprint.azurecr.io - ``` - -1. Start the devcontainer by running: - ```sh - docker run \ - -d \ - --privileged \ - --name autosd-eclipse \ - -v /maestro-challenge/in-vehicle-stack:/workspaces/app/in-vehicle-stack \ - --workdir /workspaces/app \ - sdvblueprint.azurecr.io/sdvblueprint/eclipse-bluechi/devenv:latest - ``` - - Ensure to replace `` with your own value. - -1. Enter into the devcontainer and interact with BlueChi: - ```sh - docker exec -it autosd-eclipse /bin/bash - bluechictl list-units - ``` - -## Bootstrapping - -You need to bootstrap all the Eclipse services once you got your eclipse-bluechi devcontainer running. - -### Starting all the services -1. Inside your devcontainer, you will need to login to Azure's container registry to pull all required images: - ```sh - podman login \ - --username \ - --password \ - sdvblueprint.azurecr.io - ``` - -2. Then it is time to start all services which can be done by executing the bootstrap script: - ```sh - $ bluechi-env-bootstrap - ``` -The above command will pull all the required images and start all services. - -### Cleanup -1. There is also a script to stop all services: - ```sh - $ bluechi-env-cleanup - ``` -Keep in mind that stopping services will purge all the containers that are related to such services as well. - -Both the `bluechi-env-bootstrap` and `bluechi-env-cleaup` scripts are located in `/usr/local/bin/` in case you are interested in checking them out. - -## Managing Workloads - -This section describes how to deploy and perform administrative's tasks using -systemd and BlueChi. - -### Deploying Applications - -BlueChi relies on three components to handle containerized applications: - -* systemd -* Quadlet -* Podman - -Application definitions are stored in `/etc/containers/systemd`. An application -needs two essential files: - -* `{SERVICE_NAME}.kube`: Used by systemd to point to a Kubernetes resource definition - containing the workload definition. - - Example of `freyja.kube`: - ```kube - # https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html - [Kube] - Yaml=freyja.yml - - # Commented to disable the service to automatically start - # [Install] - # WantedBy=default.target - ``` -* `{SERVICE_NAME}.yaml`: A Kubernetes resource definition (either `v1.Pod` or - `apps/v1.Deployment`) that describes the workload. - - Example of `freyja.yml`: - ```yaml - --- - apiVersion: apps/v1 - kind: Deployment - metadata: - labels: - app: freyja - name: freyja - spec: - replicas: 1 - selector: - matchLabels: - app: freyja - template: - metadata: - labels: - app: freyja - spec: - hostNetwork: true - containers: - - name: local - image: sdvblueprint.azurecr.io/sdvblueprint/eclipse-freyja/local-with-ibeji:0.1.0 - imagePullPolicy: IfNotPresent - ``` - -If you edit the source code of a component then build and push an image of it to your container registry, you will need to edit the corresponding `{SERVICE_NAME}.yaml` file in the `/etc/containers/systemd` directory. The value of the `image` field in the `{SERVICE_NAME}.yaml` file should point to the image in your container registry. - -Creating, changing or updating a file in `/etc/containers/systemd` requires you to run `systemctl daemon-reload` afterwards to generate the corresponding systemd unit files in -`/run/systemd/generator`. - -### Service Lifecycle - -Services can be managed by using `systemctl`, systemd's administrative CLI. - -Starting, stopping, restarting services is as easy as: - -* `systemctl stop {SERVICE_NAME}` -* `systemctl start {SERVICE_NAME}` -* `systemctl restart {SERVICE_NAME}` - -> Make sure to run `systemctl daemon-reload` in case something changed in either Quadlet or systemd unit files. - -### Monitoring and Logs - -BlueChi's CLI (`bluechictl`), can be used to retrieve information from -managed nodes: -. - -#### Using Systemctl - -Simply run `systemctl status {SERVICE_NAME}` where `{SERVICE_NAME}` is the name of your .kube file. - -#### Using journalctl - -This is valid for any systemd defined service, simply run `journalctl -xeu {SERVICE_NAME}` - -#### Podman - -You can also list all active containers by running `podman ps` and then `podman logs {CONTAINER_NAME_OR_ID}` to -get logs from the container using podman. Replace `{CONTAINER_NAME_OR_ID}` with the container's name or ID. - -## Running the Smart Trailer Example with BlueChi's devcontainer -Inside of the [devcontainer](#two-development-environments): -1. Follow the instructions in [Starting All the Services](#starting-all-the-services) to start up the in-vehicle stack. -1. Run the script `start_trailer_applications_bluechi.sh` to monitor for the trailer to be connected. It can be found at `in-vehicle-stack/scenarios/smart_trailer_use_case/scripts/start_trailer_applications_bluechi.sh`. -1. In another terminal window inside the devcontainer, start the `trailer-connected` service to simulate the trailer being connected: - ```shell - systemctl start trailer-connected - ``` -1. Verify the output in the terminal window of the `start_trailer_applications_bluechi.sh` script. You should see that two more services were started in response to the trailer being connected. -1. Use [Monitoring and Logs](#monitoring-and-logs) to check that the `smart-trailer` service is now receiving the value of the trailer weight every 10 seconds. -1. When you are ready to clean up, use the cleanup script mentioned in [Cleanup](#cleanup). diff --git a/in-vehicle-stack/Cargo.toml b/in-vehicle-stack/Cargo.toml index 7522650..3e59dab 100644 --- a/in-vehicle-stack/Cargo.toml +++ b/in-vehicle-stack/Cargo.toml @@ -8,23 +8,16 @@ members = [ # in-vehicle-stack interfaces "proto_build", - # smart_trailer_use_case - "scenarios/smart_trailer_use_case/applications/smart_trailer_application", - "scenarios/smart_trailer_use_case/digital_twin_providers/common", - "scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider", - "scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider", - "scenarios/smart_trailer_use_case/proto_build", - - # wheelchair_assistant_use_case - "scenarios/wheelchair_assistant_use_case/digital_twin_providers/common", - "scenarios/wheelchair_assistant_use_case/proto_build", - "scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider", - "scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider", - "scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider", - "scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider", - "scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider", - "scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider", - "scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application", + # wheelchair_assistant_use_case + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/common", + "scenarios/wheelchair_assistant_use_case/proto_build", + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_off_provider", + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/car_on_provider", + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_lock_provider", + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/carkey_unlock_provider", + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_decreasing_provider", + "scenarios/wheelchair_assistant_use_case/digital_twin_providers/wheelchair_distance_increasing_provider", + "scenarios/wheelchair_assistant_use_case/applications/wheelchair_distance_application", ] [workspace.dependencies] diff --git a/in-vehicle-stack/build_wheelchair_assistant_container.sh b/in-vehicle-stack/build_wheelchair_assistant_container.sh index 4a2dc1e..9287292 100755 --- a/in-vehicle-stack/build_wheelchair_assistant_container.sh +++ b/in-vehicle-stack/build_wheelchair_assistant_container.sh @@ -10,7 +10,16 @@ PROVIDER_CONTAINERS=( "wheelchair_distance_increasing_provider" ) +APPLICATION_CONTAINERS=( + "wheelchair_distance_application" +) + # Iterate over provider containers to build for CONTAINER in "${PROVIDER_CONTAINERS[@]}"; do podman build -t sdvblueprint.azurecr.io/sdvblueprint/in-vehicle-stack/${CONTAINER}:0.1.0 -f "scenarios/wheelchair_assistant_use_case/digital_twin_providers/${CONTAINER}/Dockerfile" . done + +# Iterate over provider containers to build +for CONTAINER in "${APPLICATION_CONTAINERS[@]}"; do + podman build -t sdvblueprint.azurecr.io/sdvblueprint/in-vehicle-stack/${CONTAINER}:0.1.0 -f "scenarios/wheelchair_assistant_use_case/applications/${CONTAINER}/Dockerfile" . +done \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/applications/smart_trailer_application/Cargo.toml b/in-vehicle-stack/scenarios/smart_trailer_use_case/applications/smart_trailer_application/Cargo.toml deleted file mode 100644 index c5c2185..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/applications/smart_trailer_application/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "smart_trailer_application" -version = "0.1.0" -edition = "2021" -license = "MIT" - -[dependencies] -digital-twin-model = { path = "../../digital-twin-model" } -digital_twin_providers_common = { path = "../../digital_twin_providers/common" } -env_logger= { workspace = true } -log = { workspace = true } -interfaces = { path = "../../../../proto_build"} -paho-mqtt = { workspace = true } -tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal"] } -tonic = { workspace = true } -uuid = { workspace = true, features = ["v4", "fast-rng", "macro-diagnostics"] } \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/applications/smart_trailer_application/Dockerfile b/in-vehicle-stack/scenarios/smart_trailer_use_case/applications/smart_trailer_application/Dockerfile deleted file mode 100644 index 440e072..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/applications/smart_trailer_application/Dockerfile +++ /dev/null @@ -1,71 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# SPDX-License-Identifier: MIT - -# Comments are provided throughout this file to help you get started. -# If you need more help, visit the Dockerfile reference guide at -# https://docs.docker.com/engine/reference/builder/ - -################################################################################ -# Create a stage for building the application. - -ARG RUST_VERSION=1.72.1 -FROM docker.io/library/rust:${RUST_VERSION}-slim-bullseye AS build -ARG APP_NAME=smart_trailer_application -WORKDIR /sdv - -COPY ./ . - -# Add Build dependencies. -RUN apt update && apt upgrade -y && apt install -y \ - cmake \ - libssl-dev \ - pkg-config \ - protobuf-compiler - -# Check that APP_NAME argument is valid. -RUN sanitized=$(echo "${APP_NAME}" | tr -dc '^[a-zA-Z_0-9-]+$'); \ -[ "$sanitized" = "${APP_NAME}" ] || { \ - echo "ARG 'APP_NAME' is invalid. APP_NAME='${APP_NAME}' sanitized='${sanitized}'"; \ - exit 1; \ -} - -# Build the application -RUN cargo build --release --bin "${APP_NAME}" - -# Copy the built application to working directory. -RUN cp ./target/release/"${APP_NAME}" /sdv/service - -################################################################################ -# Create a new stage for running the application that contains the minimal -# runtime dependencies for the application. This often uses a different base -# image from the build stage where the necessary files are copied from the build -# stage. -# -# The example below uses the debian bullseye image as the foundation for running the app. -# By specifying the "bullseye-slim" tag, it will also use whatever happens to be the -# most recent version of that tag when you build your Dockerfile. If -# reproducability is important, consider using a digest -# (e.g., debian@sha256:ac707220fbd7b67fc19b112cee8170b41a9e97f703f588b2cdbbcdcecdd8af57). -FROM docker.io/library/debian:bullseye-slim AS final - -# Create a non-privileged user that the app will run under. -# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user -ARG UID=10001 -RUN adduser \ - --disabled-password \ - --gecos "" \ - --home "/nonexistent" \ - --shell "/sbin/nologin" \ - --no-create-home \ - --uid "${UID}" \ - appuser -USER appuser - -WORKDIR /sdv - -# Copy the executable from the "build" stage. -COPY --from=build /sdv/service /sdv/ - -# What the container should run when it is started. -CMD ["/sdv/service"] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/applications/smart_trailer_application/src/main.rs b/in-vehicle-stack/scenarios/smart_trailer_use_case/applications/smart_trailer_application/src/main.rs deleted file mode 100644 index 222ed3b..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/applications/smart_trailer_application/src/main.rs +++ /dev/null @@ -1,250 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -use std::env; - -use digital_twin_model::trailer_v1; -use digital_twin_providers_common::constants::chariott::{ - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, - INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, -}; -use digital_twin_providers_common::constants::{ - constraint_type, digital_twin_operation, digital_twin_protocol, -}; -use digital_twin_providers_common::utils::{ - discover_digital_twin_provider_using_ibeji, discover_service_using_chariott, get_uri, -}; -use env_logger::{Builder, Target}; -use interfaces::module::managed_subscribe::v1::managed_subscribe_client::ManagedSubscribeClient; -use interfaces::module::managed_subscribe::v1::{ - Constraint, SubscriptionInfoRequest, SubscriptionInfoResponse, -}; -use log::{debug, info, LevelFilter}; -use paho_mqtt as mqtt; -use tokio::signal; -use tokio::task::JoinHandle; -use tokio::time::{sleep, Duration}; -use tonic::{Request, Status}; -use uuid::Uuid; - -const FREQUENCY_MS_FLAG: &str = "freq_ms="; -const MQTT_CLIENT_ID: &str = "smart-trailer-consumer"; - -// TODO: These could be added in configuration -const CHARIOTT_SERVICE_DISCOVERY_URI: &str = "http://0.0.0.0:50000"; - -const DEFAULT_FREQUENCY_MS: u64 = 10000; // 10 seconds - -// Constants used for retry logic -const MAX_RETRIES: i32 = 10; // for demo purposes we will retry a maximum of 10 times - // By default we will wait 5 seconds between retry attempts -const DURATION_BETWEEN_ATTEMPTS: Duration = Duration::from_secs(5); - -/// Get trailer weight's subscription information from managed subscribe endpoint. -/// -/// # Arguments -/// * `managed_subscribe_uri` - The managed subscribe URI. -/// * `constraints` - Constraints for the managed topic. -async fn get_trailer_weight_subscription_info( - managed_subscribe_uri: &str, - constraints: Vec, -) -> Result { - // Create gRPC client. - let mut client = ManagedSubscribeClient::connect(managed_subscribe_uri.to_string()) - .await - .map_err(|err| Status::from_error(err.into()))?; - - let request = Request::new(SubscriptionInfoRequest { - entity_id: trailer_v1::trailer::trailer_weight::ID.to_string(), - constraints, - }); - - let response = client.get_subscription_info(request).await?; - - Ok(response.into_inner()) -} - -/// Receive Trailer Weight updates. -/// -/// # Arguments -/// * `broker_uri` - The broker URI. -/// * `topic` - The topic. -async fn receive_trailer_weight_updates( - broker_uri: &str, - topic: &str, -) -> Result, String> { - // Create a unique id for the client. - let client_id = format!("{MQTT_CLIENT_ID}-{}", Uuid::new_v4()); - - let create_opts = mqtt::CreateOptionsBuilder::new() - .server_uri(broker_uri) - .client_id(client_id) - .finalize(); - - let client = mqtt::Client::new(create_opts) - .map_err(|err| format!("Failed to create the client due to '{err:?}'"))?; - - let receiver = client.start_consuming(); - - // Setup task to handle clean shutdown. - let ctrlc_cli = client.clone(); - tokio::spawn(async move { - _ = signal::ctrl_c().await; - - // Tells the client to shutdown consuming thread. - ctrlc_cli.stop_consuming(); - }); - - // Last Will and Testament - let lwt = mqtt::MessageBuilder::new() - .topic("test") - .payload("Receiver lost connection") - .finalize(); - - let conn_opts = mqtt::ConnectOptionsBuilder::new_v5() - .keep_alive_interval(Duration::from_secs(30)) - .clean_session(false) - .will_message(lwt) - .finalize(); - - let _connect_response = client - .connect(conn_opts) - .map_err(|err| format!("Failed to connect due to '{err:?}")); - - let mut _subscribe_response = client - .subscribe(topic, mqtt::types::QOS_1) - .map_err(|err| format!("Failed to subscribe to topic {topic} due to '{err:?}'")); - - // Copy topic for separate thread. - let topic_string = topic.to_string(); - - let sub_handle = tokio::spawn(async move { - for msg in receiver.iter() { - if let Some(msg) = msg { - // Here we log the message received. This could be expanded to parsing the message, - // Obtaining the weight and making decisions based on the weight - // For example, adjusting body functions or powertrain of the towing vehicle. - info!("{}", msg); - } else if !client.is_connected() { - if client.reconnect().is_ok() { - _subscribe_response = client - .subscribe(topic_string.as_str(), mqtt::types::QOS_1) - .map_err(|err| { - format!("Failed to subscribe to topic {topic_string} due to '{err:?}'") - }); - } else { - break; - } - } - } - - if client.is_connected() { - debug!("Disconnecting"); - client.unsubscribe(topic_string.as_str()).unwrap(); - client.disconnect(None).unwrap(); - } - }); - - Ok(sub_handle) -} - -#[tokio::main] -async fn main() -> Result<(), Box> { - // Setup logging. - Builder::new() - .filter(None, LevelFilter::Info) - .target(Target::Stdout) - .init(); - - info!("The Smart Trailer Application has started."); - - // Get the In-vehicle Digital Twin Uri from the service discovery system - // This could be enhanced to add retries for robustness - let invehicle_digital_twin_uri = discover_service_using_chariott( - CHARIOTT_SERVICE_DISCOVERY_URI, - INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, - INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, - INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, - ) - .await?; - - // Get subscription constraints. - let frequency_ms = env::args() - .find_map(|arg| { - if arg.contains(FREQUENCY_MS_FLAG) { - return Some(arg.replace(FREQUENCY_MS_FLAG, "")); - } - - None - }) - .unwrap_or_else(|| DEFAULT_FREQUENCY_MS.to_string()); - - // Retrieve the provider URI. - let mut provider_endpoint_info = None; - let mut retries: i32 = 0; - while provider_endpoint_info.is_none() { - provider_endpoint_info = match discover_digital_twin_provider_using_ibeji( - &invehicle_digital_twin_uri, - trailer_v1::trailer::trailer_weight::ID, - digital_twin_protocol::GRPC, - &[digital_twin_operation::MANAGEDSUBSCRIBE.to_string()], - ) - .await - { - Ok(response) => Some(response), - Err(status) => { - info!( - "A provider was not found in the digital twin service for id '{}' with: '{:?}'", - trailer_v1::trailer::trailer_weight::ID, - status - ); - None - } - }; - - if provider_endpoint_info.is_none() && retries < MAX_RETRIES { - info!("Retrying FindById to retrieve the properties provider endpoint in {DURATION_BETWEEN_ATTEMPTS:?}."); - sleep(DURATION_BETWEEN_ATTEMPTS).await; - retries += 1; - } else { - break; - } - } - - let managed_subscribe_uri = provider_endpoint_info.ok_or("Maximum amount of retries was reached while trying to retrieve the digital twin provider.")?.uri; - info!("The Managed Subscribe URI for the TrailerWeight property's provider is {managed_subscribe_uri}"); - - // Create constraint for the managed subscribe call. - let frequency_constraint = Constraint { - r#type: constraint_type::FREQUENCY_MS.to_string(), - value: frequency_ms.to_string(), - }; - - // Get the subscription information for a managed topic with constraints. - let subscription_info = - get_trailer_weight_subscription_info(&managed_subscribe_uri, vec![frequency_constraint]) - .await?; - - // Deconstruct subscription information. - let broker_uri = get_uri(&subscription_info.uri)?; - let topic = subscription_info.context; - info!("The broker URI for the TrailerWeight property's provider is {broker_uri}"); - - // Subscribe to topic. - let sub_handle = receive_trailer_weight_updates(&broker_uri, &topic) - .await - .map_err(|err| Status::internal(format!("{err:?}")))?; - - signal::ctrl_c().await?; - - info!("The Consumer has completed. Shutting down..."); - - // Wait for subscriber task to cleanly shutdown. - _ = sub_handle.await; - - Ok(()) -} diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital-twin-model/Cargo.toml b/in-vehicle-stack/scenarios/smart_trailer_use_case/digital-twin-model/Cargo.toml deleted file mode 100644 index 3f6e8dd..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital-twin-model/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# SPDX-License-Identifier: MIT - -[package] -name = "digital-twin-model" -version = "0.1.0" -edition = "2021" -license = "MIT" - -[dependencies] -serde = { workspace = true } -serde_derive = { workspace = true } - -[lib] -path = "src/lib.rs" -crate-type = ["lib"] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital-twin-model/dtdl/trailer.json b/in-vehicle-stack/scenarios/smart_trailer_use_case/digital-twin-model/dtdl/trailer.json deleted file mode 100644 index 43aa1ab..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital-twin-model/dtdl/trailer.json +++ /dev/null @@ -1,24 +0,0 @@ -[ - { - "@context": ["dtmi:dtdl:context;3"], - "@type": "Interface", - "@id": "dtmi:sdv:Trailer;1", - "description": "Trailer used for transporting cargo", - "contents": [ - { - "@type": "Property", - "@id": "dtmi:sdv:Trailer:Weight;1", - "name": "TrailerWeight", - "description": "The weight of the trailer", - "schema": "integer" - }, - { - "@type": "Property", - "@id": "dtmi:sdv:Trailer:IsTrailerConnected;1", - "name": "IsTrailerConnected", - "description": "Is trailer connected?", - "schema": "boolean" - } - ] - } -] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital-twin-model/src/lib.rs b/in-vehicle-stack/scenarios/smart_trailer_use_case/digital-twin-model/src/lib.rs deleted file mode 100644 index d09afad..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital-twin-model/src/lib.rs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -pub mod trailer_v1; - -use serde_derive::{Deserialize, Serialize}; - -#[derive(Debug, Serialize, Deserialize)] -pub struct Metadata { - #[serde(rename = "$model")] - pub model: String, -} diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital-twin-model/src/trailer_v1.rs b/in-vehicle-stack/scenarios/smart_trailer_use_case/digital-twin-model/src/trailer_v1.rs deleted file mode 100644 index 0391b88..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital-twin-model/src/trailer_v1.rs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -// Note: This code was manually written based on the structure of the -// vehicle model in "../dtdl/trailer.json" -// In the future this code could be generated from a DTDL spec. - -pub mod trailer { - pub mod trailer_weight { - pub const ID: &str = "dtmi:sdv:Trailer:Weight;1"; - pub const NAME: &str = "TrailerWeight"; - pub const DESCRIPTION: &str = "The weight of the trailer"; - pub type TYPE = i32; - } - - pub mod is_trailer_connected { - pub const ID: &str = "dtmi:sdv:Trailer:IsTrailerConnected;1"; - pub const NAME: &str = "IsTrailerConnected"; - pub const DESCRIPTION: &str = "Is trailer connected?"; - pub type TYPE = bool; - } -} diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/common/Cargo.toml b/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/common/Cargo.toml deleted file mode 100644 index e9e9012..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/common/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "digital_twin_providers_common" -version = "0.1.0" -edition = "2021" -license = "MIT" - -[dependencies] -interfaces = { path = "../../../../proto_build"} -log = { workspace = true } -tonic = { workspace = true } - -[features] -containerize = [] diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/common/src/constants.rs b/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/common/src/constants.rs deleted file mode 100644 index 99c5508..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/common/src/constants.rs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -/// Supported digital twin operations. -pub mod digital_twin_operation { - pub const GET: &str = "Get"; - pub const SET: &str = "Set"; - pub const SUBSCRIBE: &str = "Subscribe"; - pub const UNSUBSCRIBE: &str = "Unsubscribe"; - pub const INVOKE: &str = "Invoke"; - pub const STREAM: &str = "Stream"; - pub const MANAGEDSUBSCRIBE: &str = "ManagedSubscribe"; -} - -// Supported digital twin protocols. -pub mod digital_twin_protocol { - pub const GRPC: &str = "grpc"; - pub const MQTT: &str = "mqtt"; -} - -pub mod chariott { - pub const INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE: &str = "sdv.ibeji"; - pub const INVEHICLE_DIGITAL_TWIN_SERVICE_NAME: &str = "invehicle_digital_twin"; - pub const INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION: &str = "1.0"; - pub const INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND: &str = "grpc+proto"; - pub const INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE: &str = "https://github.com/eclipse-ibeji/ibeji/blob/main/interfaces/digital_twin/v1/digital_twin.proto"; -} - -/// Recognized constraint types for subscribe requests. -pub mod constraint_type { - pub const FREQUENCY_MS: &str = "frequency_ms"; -} diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/common/src/lib.rs b/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/common/src/lib.rs deleted file mode 100644 index 00cd99c..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/common/src/lib.rs +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -pub mod constants; -pub mod utils; diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/common/src/utils.rs b/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/common/src/utils.rs deleted file mode 100644 index 04d7e2f..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/common/src/utils.rs +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -use interfaces::chariott::service_discovery::core::v1::service_registry_client::ServiceRegistryClient; -use interfaces::chariott::service_discovery::core::v1::DiscoverRequest; -use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; -use interfaces::invehicle_digital_twin::v1::{EndpointInfo, FindByIdRequest}; -use log::{debug, info}; -use tonic::{Request, Status}; - -/// Use Chariott Service Discovery to discover a service. -/// -/// # Arguments -/// * `chariott_uri` - Chariott's URI. -/// * `namespace` - The service's namespace. -/// * `name` - The service's name. -/// * `version` - The service's version. -/// # `communication_kind` - The service's communication kind. -/// # `communication_reference` - The service's communication reference. -pub async fn discover_service_using_chariott( - chariott_uri: &str, - namespace: &str, - name: &str, - version: &str, - communication_kind: &str, - communication_reference: &str, -) -> Result { - let mut client = ServiceRegistryClient::connect(chariott_uri.to_string()) - .await - .map_err(|e| Status::internal(e.to_string()))?; - - let request = Request::new(DiscoverRequest { - namespace: namespace.to_string(), - name: name.to_string(), - version: version.to_string(), - }); - - let response = client - .discover(request) - .await - .map_err(|error| Status::internal(error.to_string()))?; - - let service = response.into_inner().service.ok_or_else(|| Status::not_found("Did not find a service in Chariott with namespace '{namespace}', name '{name}' and version {version}"))?; - - if service.communication_kind != communication_kind - && service.communication_reference != communication_reference - { - return Err(Status::not_found( - "Did not find a service in Chariott with namespace '{namespace}', name '{name}' and version {version} that has communication kind '{communication_kind} and communication_reference '{communication_reference}''", - )); - } - - Ok(service.uri) -} - -/// If the 'containerize' feature is set, this function will modify the localhost URI to point to -/// the container's localhost DNS alias. Otherwise, returns the URI as a string. -/// -/// # Arguments -/// * `uri` - The uri to potentially modify. -pub fn get_uri(uri: &str) -> Result { - #[cfg(feature = "containerize")] - let uri = { - // Container env variable names. - let host_gateway_env_var: &str = "HOST_GATEWAY"; - let host_alias_env_var: &str = "LOCALHOST_ALIAS"; - - // Return an error if container env variables are not set. - let host_gateway = std::env::var(host_gateway_env_var).map_err(|err| { - Status::failed_precondition(format!( - "Unable to get environment var '{host_gateway_env_var}' with error: {err}" - )) - })?; - let host_alias = std::env::var(host_alias_env_var).map_err(|err| { - Status::failed_precondition(format!( - "Unable to get environment var '{host_alias_env_var}' with error: {err}" - )) - })?; - - uri.replace(&host_alias, &host_gateway) - }; - - Ok(uri.to_string()) -} - -/// Use Ibeji to discover the endpoint for a digital twin provider that satifies the requirements. -/// -/// # Arguments -/// * `invehicle_digitial_twin_service_uri` - In-vehicle digital twin service URI. -/// * `entity_id` - The matching entity id. -/// * `protocol` - The required protocol. -/// * `operations` - The required operations. -pub async fn discover_digital_twin_provider_using_ibeji( - invehicle_digitial_twin_service_uri: &str, - entity_id: &str, - protocol: &str, - operations: &[String], -) -> Result { - info!("Sending a find_by_id request for entity id {entity_id} to the In-Vehicle Digital Twin Service URI {invehicle_digitial_twin_service_uri}"); - - let mut client = - InvehicleDigitalTwinClient::connect(invehicle_digitial_twin_service_uri.to_string()) - .await - .map_err(|error| format!("{error}"))?; - let request = tonic::Request::new(FindByIdRequest { - id: entity_id.to_string(), - }); - let response = client - .find_by_id(request) - .await - .map_err(|error| error.to_string())?; - let response_inner = response.into_inner(); - debug!("Received the response for the find_by_id request"); - info!("response_payload: {:?}", response_inner.entity_access_info); - - match response_inner - .entity_access_info - .ok_or_else(|| "Did not find the entity".to_string())? - .endpoint_info_list - .iter() - .find(|endpoint_info| { - endpoint_info.protocol == protocol - && is_subset(operations, endpoint_info.operations.as_slice()) - }) - .cloned() - { - Some(mut result) => { - info!( - "Found a matching endpoint for entity id {entity_id} that has URI {}", - result.uri - ); - - result.uri = get_uri(&result.uri) - .map_err(|err| format!("Failed to get provider URI due to error: {err}"))?; - - Ok(result) - } - None => Err("Did not find an endpoint that met our requirements".to_string()), - } -} - -/// Is the provided subset a subset of the provided superset? -/// -/// # Arguments -/// * `subset` - The provided subset. -/// * `superset` - The provided superset. -fn is_subset(subset: &[String], superset: &[String]) -> bool { - subset.iter().all(|subset_member| { - superset - .iter() - .any(|supserset_member| subset_member == supserset_member) - }) -} diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/Cargo.toml b/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/Cargo.toml deleted file mode 100644 index ed42315..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "trailer_connected_provider" -version = "0.1.0" -edition = "2021" -license = "MIT" - -[dependencies] -digital-twin-model = { path = "../../digital-twin-model" } -digital_twin_providers_common = { path = "../common" } -env_logger = { workspace = true } -interfaces = { path = "../../../../proto_build"} -log = { workspace = true } -serde = { workspace = true } -serde_derive = { workspace = true } -serde_json = { workspace = true } -smart_trailer_interfaces = { path = "../../proto_build" } -tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal"] } -tonic = { workspace = true } diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/Dockerfile b/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/Dockerfile deleted file mode 100644 index d553ece..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/Dockerfile +++ /dev/null @@ -1,74 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# SPDX-License-Identifier: MIT - -# Comments are provided throughout this file to help you get started. -# If you need more help, visit the Dockerfile reference guide at -# https://docs.docker.com/engine/reference/builder/ - -################################################################################ -# Create a stage for building the application. - -ARG RUST_VERSION=1.72.1 -FROM docker.io/library/rust:${RUST_VERSION}-slim-bullseye AS build -ARG APP_NAME=trailer_connected_provider -WORKDIR /sdv - -COPY ./ . - -# Add Build dependencies. -RUN apt update -y && apt upgrade -y && apt install -y \ - cmake \ - libssl-dev \ - pkg-config \ - protobuf-compiler - -# Check that APP_NAME argument is valid. -RUN sanitized=$(echo "${APP_NAME}" | tr -dc '^[a-zA-Z_0-9-]+$'); \ -[ "$sanitized" = "${APP_NAME}" ] || { \ - echo "ARG 'APP_NAME' is invalid. APP_NAME='${APP_NAME}' sanitized='${sanitized}'"; \ - exit 1; \ -} - -# Build the application -RUN cargo build --release --bin "${APP_NAME}" - -# Copy the built application to working directory. -RUN cp ./target/release/"${APP_NAME}" /sdv/service - -################################################################################ -# Create a new stage for running the application that contains the minimal -# runtime dependencies for the application. This often uses a different base -# image from the build stage where the necessary files are copied from the build -# stage. -# -# The example below uses the debian bullseye image as the foundation for running the app. -# By specifying the "bullseye-slim" tag, it will also use whatever happens to be the -# most recent version of that tag when you build your Dockerfile. If -# reproducability is important, consider using a digest -# (e.g., debian@sha256:ac707220fbd7b67fc19b112cee8170b41a9e97f703f588b2cdbbcdcecdd8af57). -FROM docker.io/library/debian:bullseye-slim AS final - -# Create a non-privileged user that the app will run under. -# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user -ARG UID=10001 -RUN adduser \ - --disabled-password \ - --gecos "" \ - --home "/nonexistent" \ - --shell "/sbin/nologin" \ - --no-create-home \ - --uid "${UID}" \ - appuser -USER appuser - -WORKDIR /sdv - -# Copy the executable from the "build" stage. -COPY --from=build /sdv/service /sdv/ - -# Expose the port that the application listens on. -EXPOSE 4020 - -# What the container should run when it is started. -CMD ["/sdv/service"] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/src/main.rs b/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/src/main.rs deleted file mode 100644 index 219f2d2..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/src/main.rs +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -use digital_twin_model::trailer_v1; - -use digital_twin_providers_common::constants::chariott::{ - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, - INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, -}; -use digital_twin_providers_common::constants::{digital_twin_operation, digital_twin_protocol}; -use digital_twin_providers_common::utils::discover_service_using_chariott; -use env_logger::{Builder, Target}; -use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; -use interfaces::invehicle_digital_twin::v1::{EndpointInfo, EntityAccessInfo, RegisterRequest}; -use log::{debug, info, LevelFilter}; -use smart_trailer_interfaces::digital_twin_get_provider::v1::digital_twin_get_provider_server::DigitalTwinGetProviderServer; -use std::net::SocketAddr; -use tokio::signal; -use tonic::transport::Server; -use tonic::Status; -use trailer_connected_provider_impl::TrailerConnectedProviderImpl; - -mod trailer_connected_provider_impl; - -// TODO: These could be added in configuration -const CHARIOTT_SERVICE_DISCOVERY_URI: &str = "http://0.0.0.0:50000"; -const PROVIDER_AUTHORITY: &str = "0.0.0.0:4020"; - -/// Register the "is trailer connected" property's endpoint. -/// -/// # Arguments -/// * `invehicle_digital_twin_uri` - The In-Vehicle Digital Twin URI. -/// * `provider_uri` - The provider's URI. -async fn register_entity( - invehicle_digital_twin_uri: &str, - provider_uri: &str, -) -> Result<(), Status> { - let is_trailer_connected_endpoint_info = EndpointInfo { - protocol: digital_twin_protocol::GRPC.to_string(), - operations: vec![digital_twin_operation::GET.to_string()], - uri: provider_uri.to_string(), - context: trailer_v1::trailer::is_trailer_connected::ID.to_string(), - }; - let entity_access_info = EntityAccessInfo { - name: trailer_v1::trailer::is_trailer_connected::NAME.to_string(), - id: trailer_v1::trailer::is_trailer_connected::ID.to_string(), - description: trailer_v1::trailer::is_trailer_connected::DESCRIPTION.to_string(), - endpoint_info_list: vec![is_trailer_connected_endpoint_info], - }; - - let mut client = InvehicleDigitalTwinClient::connect(invehicle_digital_twin_uri.to_string()) - .await - .map_err(|e| Status::internal(e.to_string()))?; - let request = tonic::Request::new(RegisterRequest { - entity_access_info_list: vec![entity_access_info], - }); - let _response = client.register(request).await?; - - Ok(()) -} - -#[tokio::main] -async fn main() -> Result<(), Box> { - // Set up logging. - Builder::new() - .filter(None, LevelFilter::Debug) - .target(Target::Stdout) - .init(); - - info!("The Provider has started."); - - let provider_uri = format!("http://{PROVIDER_AUTHORITY}"); - debug!("The Provider URI is {}", &provider_uri); - - // Setup the HTTP server. - let addr: SocketAddr = PROVIDER_AUTHORITY.parse()?; - let provider_impl = TrailerConnectedProviderImpl::default(); - let server_future = Server::builder() - .add_service(DigitalTwinGetProviderServer::new(provider_impl)) - .serve(addr); - info!("The HTTP server is listening on address '{PROVIDER_AUTHORITY}'"); - - // Get the In-vehicle Digital Twin Uri from the service discovery system - // This could be enhanced to add retries for robustness - let invehicle_digital_twin_uri = discover_service_using_chariott( - CHARIOTT_SERVICE_DISCOVERY_URI, - INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, - INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, - INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, - ) - .await?; - - debug!("Sending a register request to the In-Vehicle Digital Twin Service URI {invehicle_digital_twin_uri}"); - - // This could be enhanced to add retries for robustness - register_entity(&invehicle_digital_twin_uri, &provider_uri).await?; - server_future.await?; - - signal::ctrl_c() - .await - .expect("Failed to listen for control-c event"); - - info!("The Provider has completed."); - - Ok(()) -} diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/src/trailer_connected_provider_impl.rs b/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/src/trailer_connected_provider_impl.rs deleted file mode 100644 index 8444a94..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/src/trailer_connected_provider_impl.rs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -//! Module containing gRPC service implementation based on [`interfaces::digital_twin_get_provider.proto`]. -//! -//! Provides a gRPC endpoint for getting if the trailer is connected -use smart_trailer_interfaces::digital_twin_get_provider::v1::digital_twin_get_provider_server::DigitalTwinGetProvider; -use smart_trailer_interfaces::digital_twin_get_provider::v1::{GetRequest, GetResponse}; -use tonic::{Request, Response, Status}; - -/// Base structure for the Trailer Connected Provider gRPC service. -#[derive(Default)] -pub struct TrailerConnectedProviderImpl {} - -#[tonic::async_trait] -impl DigitalTwinGetProvider for TrailerConnectedProviderImpl { - /// This function returns the value of "is_trailer_connected" property - async fn get(&self, _request: Request) -> Result, Status> { - // For now, we assume that if this provider is active, the trailer is connected - // To expand this use case, we could simulate the trailer being disconnected as well - let get_response = GetResponse { - property_value: true, - }; - Ok(Response::new(get_response)) - } -} diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/Cargo.toml b/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/Cargo.toml deleted file mode 100644 index 90747e7..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/Cargo.toml +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# SPDX-License-Identifier: MIT - -[package] -name = "trailer_properties_provider" -version = "0.1.0" -edition = "2021" -license = "MIT" - -[dependencies] -digital-twin-model = { path = "../../digital-twin-model" } -digital_twin_providers_common = { path = "../common" } -env_logger = { workspace = true } -interfaces = { path = "../../../../proto_build"} -log = { workspace = true } -paho-mqtt = { workspace = true } -parking_lot = { workspace = true } -serde = { workspace = true } -serde_derive = { workspace = true } -serde_json = { workspace = true } -smart_trailer_interfaces = { path = "../../proto_build" } -strum = { workspace = true } -strum_macros = { workspace = true } -tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal"] } -tonic = { workspace = true } - -[features] -containerize = ["digital_twin_providers_common/containerize"] diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/Dockerfile b/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/Dockerfile deleted file mode 100644 index ea2059c..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/Dockerfile +++ /dev/null @@ -1,74 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# SPDX-License-Identifier: MIT - -# Comments are provided throughout this file to help you get started. -# If you need more help, visit the Dockerfile reference guide at -# https://docs.docker.com/engine/reference/builder/ - -################################################################################ -# Create a stage for building the application. - -ARG RUST_VERSION=1.72.1 -FROM docker.io/library/rust:${RUST_VERSION}-slim-bullseye AS build -ARG APP_NAME=trailer_properties_provider -WORKDIR /sdv - -COPY ./ . - -# Add Build dependencies. -RUN apt update && apt upgrade -y && apt install -y \ - cmake \ - libssl-dev \ - pkg-config \ - protobuf-compiler - -# Check that APP_NAME argument is valid. -RUN sanitized=$(echo "${APP_NAME}" | tr -dc '^[a-zA-Z_0-9-]+$'); \ -[ "$sanitized" = "${APP_NAME}" ] || { \ - echo "ARG 'APP_NAME' is invalid. APP_NAME='${APP_NAME}' sanitized='${sanitized}'"; \ - exit 1; \ -} - -# Build the application -RUN cargo build --release --bin "${APP_NAME}" - -# Copy the built application to working directory. -RUN cp ./target/release/"${APP_NAME}" /sdv/service - -################################################################################ -# Create a new stage for running the application that contains the minimal -# runtime dependencies for the application. This often uses a different base -# image from the build stage where the necessary files are copied from the build -# stage. -# -# The example below uses the debian bullseye image as the foundation for running the app. -# By specifying the "bullseye-slim" tag, it will also use whatever happens to be the -# most recent version of that tag when you build your Dockerfile. If -# reproducability is important, consider using a digest -# (e.g., debian@sha256:ac707220fbd7b67fc19b112cee8170b41a9e97f703f588b2cdbbcdcecdd8af57). -FROM docker.io/library/debian:bullseye-slim AS final - -# Create a non-privileged user that the app will run under. -# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user -ARG UID=10001 -RUN adduser \ - --disabled-password \ - --gecos "" \ - --home "/nonexistent" \ - --shell "/sbin/nologin" \ - --no-create-home \ - --uid "${UID}" \ - appuser -USER appuser - -WORKDIR /sdv - -# Copy the executable from the "build" stage. -COPY --from=build /sdv/service /sdv/ - -# Expose the port that the application listens on. -EXPOSE 4030 - -# What the container should run when it is started. -CMD ["/sdv/service"] \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/src/main.rs b/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/src/main.rs deleted file mode 100644 index f8178b8..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/src/main.rs +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -mod trailer_properties_provider_impl; - -use std::net::SocketAddr; - -use digital_twin_model::trailer_v1; -use digital_twin_providers_common::constants::chariott::{ - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, - INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, -}; -use digital_twin_providers_common::constants::{digital_twin_operation, digital_twin_protocol}; -use digital_twin_providers_common::utils::discover_service_using_chariott; -use env_logger::{Builder, Target}; -use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; -use interfaces::invehicle_digital_twin::v1::{EndpointInfo, EntityAccessInfo, RegisterRequest}; -use interfaces::module::managed_subscribe::v1::managed_subscribe_callback_server::ManagedSubscribeCallbackServer; -use log::{debug, info, warn, LevelFilter}; -use tokio::signal; -use tokio::sync::watch; -use tokio::time::{sleep, Duration}; -use tonic::transport::Server; -use tonic::Status; - -use crate::trailer_properties_provider_impl::TrailerPropertiesProviderImpl; - -// TODO: These could be added in configuration -const CHARIOTT_SERVICE_DISCOVERY_URI: &str = "http://0.0.0.0:50000"; -const PROVIDER_AUTHORITY: &str = "0.0.0.0:4030"; - -const DEFAULT_MIN_INTERVAL_MS: u64 = 10000; // 10 seconds - -/// Register the trailer weight property's endpoint. -/// -/// # Arguments -/// * `invehicle_digital_twin_uri` - The In-Vehicle Digital Twin URI. -/// * `provider_uri` - The provider's URI. -async fn register_trailer_weight( - invehicle_digital_twin_uri: &str, - provider_uri: &str, -) -> Result<(), Status> { - let endpoint_info = EndpointInfo { - protocol: digital_twin_protocol::GRPC.to_string(), - operations: vec![digital_twin_operation::MANAGEDSUBSCRIBE.to_string()], - uri: provider_uri.to_string(), - context: "GetSubscriptionInfo".to_string(), - }; - - let entity_access_info = EntityAccessInfo { - name: trailer_v1::trailer::trailer_weight::NAME.to_string(), - id: trailer_v1::trailer::trailer_weight::ID.to_string(), - description: trailer_v1::trailer::trailer_weight::DESCRIPTION.to_string(), - endpoint_info_list: vec![endpoint_info], - }; - - let mut client = InvehicleDigitalTwinClient::connect(invehicle_digital_twin_uri.to_string()) - .await - .map_err(|e| Status::internal(e.to_string()))?; - let request = tonic::Request::new(RegisterRequest { - entity_access_info_list: vec![entity_access_info], - }); - let _response = client.register(request).await?; - - Ok(()) -} - -/// Start the trailer weight data stream. -/// -/// # Arguments -/// `min_interval_ms` - minimum frequency for data stream. -fn start_trailer_weight_data_stream(min_interval_ms: u64) -> watch::Receiver { - debug!("Starting the Provider's trailer weight data stream."); - let mut weight: i32 = 1000; - let (sender, reciever) = watch::channel(weight); - tokio::spawn(async move { - let mut is_weight_increasing: bool = true; - loop { - debug!( - "Recording new value for {} of {weight}", - trailer_v1::trailer::trailer_weight::ID - ); - - if let Err(err) = sender.send(weight) { - warn!("Failed to get new value due to '{err:?}'"); - break; - } - - debug!("Completed the publish request"); - - // Calculate the new weight. - // It bounces back and forth between 1000 and 2000 kilograms. - // It increases in increments of 500 to simulate a large amount of cargo being loaded - // And decreases in increments of 50 to simulate smaller deliveries being made - if is_weight_increasing { - if weight == 2000 { - is_weight_increasing = false; - weight -= 50; - } else { - weight += 500; - } - } else if weight == 1000 { - is_weight_increasing = true; - weight += 500; - } else { - weight -= 50; - } - - sleep(Duration::from_millis(min_interval_ms)).await; - } - }); - - reciever -} - -#[tokio::main] -async fn main() -> Result<(), Box> { - // Setup logging. - Builder::new() - .filter(None, LevelFilter::Info) - .target(Target::Stdout) - .init(); - - info!("The Provider has started."); - - let provider_uri = format!("http://{PROVIDER_AUTHORITY}"); // Devskim: ignore DS137138 - - // Get the In-vehicle Digital Twin Uri from the service discovery system - // This could be enhanced to add retries for robustness - let invehicle_digital_twin_uri = discover_service_using_chariott( - CHARIOTT_SERVICE_DISCOVERY_URI, - INVEHICLE_DIGITAL_TWIN_SERVICE_NAMESPACE, - INVEHICLE_DIGITAL_TWIN_SERVICE_NAME, - INVEHICLE_DIGITAL_TWIN_SERVICE_VERSION, - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_KIND, - INVEHICLE_DIGITAL_TWIN_SERVICE_COMMUNICATION_REFERENCE, - ) - .await?; - - debug!("The Provider retrieved Chariott's Service Discovery URI."); - - // Start mock data stream. - let data_stream = start_trailer_weight_data_stream(DEFAULT_MIN_INTERVAL_MS); - debug!("The Provider has started the trailer weight data stream."); - - // Setup provider management cb endpoint. - let provider = TrailerPropertiesProviderImpl::new(data_stream, DEFAULT_MIN_INTERVAL_MS); - - // Start service. - let addr: SocketAddr = PROVIDER_AUTHORITY.parse()?; - let server_future = Server::builder() - .add_service(ManagedSubscribeCallbackServer::new(provider)) - .serve(addr); - - // This could be enhanced with retries for robustness - register_trailer_weight(&invehicle_digital_twin_uri, &provider_uri).await?; - debug!("The Provider has registered with Ibeji."); - - server_future.await?; - - signal::ctrl_c() - .await - .expect("Failed to listen for control-c event"); - - info!("The Provider has completed."); - - Ok(()) -} diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/src/trailer_properties_provider_impl.rs b/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/src/trailer_properties_provider_impl.rs deleted file mode 100644 index 5ea60a1..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_properties_provider/src/trailer_properties_provider_impl.rs +++ /dev/null @@ -1,259 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -use std::collections::HashMap; -use std::str::FromStr; -use std::sync::Arc; - -use interfaces::module::managed_subscribe::v1::managed_subscribe_callback_server::ManagedSubscribeCallback; -use interfaces::module::managed_subscribe::v1::{ - CallbackPayload, TopicManagementRequest, TopicManagementResponse, -}; - -use digital_twin_model::{trailer_v1, Metadata}; -use digital_twin_providers_common::utils; -use log::{debug, info, warn}; -use paho_mqtt as mqtt; -use parking_lot::RwLock; -use serde_derive::{Deserialize, Serialize}; -use strum_macros::{Display, EnumString}; -use tokio::sync::{mpsc, watch}; -use tokio::time::{sleep, Duration}; -use tonic::{Request, Response, Status}; - -const MQTT_CLIENT_ID: &str = "trailer-properties-publisher"; -const FREQUENCY_MS: &str = "frequency_ms"; - -#[derive(Debug, Serialize, Deserialize)] -struct TrailerWeightProperty { - #[serde(rename = "TrailerWeight")] - trailer_weight: trailer_v1::trailer::trailer_weight::TYPE, - #[serde(rename = "$metadata")] - metadata: Metadata, -} - -/// Actions that are returned from the Pub Sub Service. -#[derive(Clone, EnumString, Eq, Display, Debug, PartialEq)] -pub enum ProviderAction { - #[strum(serialize = "PUBLISH")] - Publish, - - #[strum(serialize = "STOP_PUBLISH")] - StopPublish, -} - -#[derive(Debug)] -pub struct TopicInfo { - topic: String, - stop_channel: mpsc::Sender, -} - -#[derive(Debug)] -pub struct TrailerPropertiesProviderImpl { - pub data_stream: watch::Receiver, - pub min_interval_ms: u64, - entity_map: Arc>>>, -} - -/// Create the JSON for the trailer weight property. -/// -/// # Arguments -/// * `trailer_weight` - The trailer weight value. -fn create_property_json(trailer_weight: i32) -> String { - let metadata = Metadata { - model: trailer_v1::trailer::trailer_weight::ID.to_string(), - }; - - let property: TrailerWeightProperty = TrailerWeightProperty { - trailer_weight, - metadata, - }; - - serde_json::to_string(&property).unwrap() -} - -/// Publish a message to a MQTT broker located. -/// -/// # Arguments -/// `broker_uri` - The MQTT broker's URI. -/// `topic` - The topic to publish to. -/// `content` - The message to publish. -fn publish_message(broker_uri: &str, topic: &str, content: &str) -> Result<(), String> { - let create_opts = mqtt::CreateOptionsBuilder::new() - .server_uri(broker_uri) - .client_id(MQTT_CLIENT_ID.to_string()) - .finalize(); - - let client = mqtt::Client::new(create_opts) - .map_err(|err| format!("Failed to create the client due to '{err:?}'"))?; - - let conn_opts = mqtt::ConnectOptionsBuilder::new() - .keep_alive_interval(Duration::from_secs(30)) - .clean_session(true) - .finalize(); - - let _connect_response = client - .connect(conn_opts) - .map_err(|err| format!("Failed to connect due to '{err:?}")); - - let msg = mqtt::Message::new(topic, content, mqtt::types::QOS_1); - if let Err(err) = client.publish(msg) { - return Err(format!("Failed to publish message due to '{err:?}")); - } - - if let Err(err) = client.disconnect(None) { - warn!("Failed to disconnect from topic '{topic}' on broker {broker_uri} due to {err:?}"); - } - - Ok(()) -} - -impl TrailerPropertiesProviderImpl { - /// Initializes provider with entities relevant to itself. - /// - /// # Arguments - /// * `data_stream` - Receiver for data stream for entity. - /// * `min_interval_ms` - The frequency of the data coming over the data stream. - pub fn new(data_stream: watch::Receiver, min_interval_ms: u64) -> Self { - // Initialize entity map. - let mut entity_map = HashMap::new(); - - // Insert entry for entity id's associated with provider. - entity_map.insert( - trailer_v1::trailer::trailer_weight::ID.to_string(), - Vec::new(), - ); - - // Create new instance. - TrailerPropertiesProviderImpl { - data_stream, - min_interval_ms, - entity_map: Arc::new(RwLock::new(entity_map)), - } - } - - /// Handles the 'PUBLISH' action from the callback. - /// - /// # Arguments - /// `payload` - Payload sent with the 'PUBLISH' action. - pub fn handle_publish_action(&self, payload: CallbackPayload) { - // Get payload information. - let topic = payload.topic; - let constraints = payload.constraints; - let min_interval_ms = self.min_interval_ms; - - // This should not be empty. - let mut subscription_info = payload.subscription_info.unwrap(); - - subscription_info.uri = utils::get_uri(&subscription_info.uri).unwrap(); - - // Create stop publish channel. - let (sender, mut reciever) = mpsc::channel(10); - - // Create topic info. - let topic_info = TopicInfo { - topic: topic.clone(), - stop_channel: sender, - }; - - // Record new topic in entity map. - { - let mut entity_lock = self.entity_map.write(); - let get_result = entity_lock.get_mut(&payload.entity_id); - get_result.unwrap().push(topic_info); - } - - let data_stream = self.data_stream.clone(); - - // Start thread for new topic. - tokio::spawn(async move { - // Get constraints information. - let mut frequency_ms = min_interval_ms; - - for constraint in constraints { - if constraint.r#type == *FREQUENCY_MS { - frequency_ms = u64::from_str(&constraint.value).unwrap(); - }; - } - - loop { - // See if we need to shutdown. - if reciever.try_recv() == Err(mpsc::error::TryRecvError::Disconnected) { - info!("Shutdown thread for {topic}."); - return; - } - - // Get data from stream at the current instant. - let data = *data_stream.borrow(); - let content = create_property_json(data); - let broker_uri = subscription_info.uri.clone(); - - // Publish message to broker. - info!( - "Publish to {topic} for {} with value {data}", - trailer_v1::trailer::trailer_weight::NAME - ); - - if let Err(err) = publish_message(&broker_uri, &topic, &content) { - warn!("Publish failed due to '{err:?}'"); - break; - } - - debug!("Completed publish to {topic}."); - - // Sleep for requested amount of time. - sleep(Duration::from_millis(frequency_ms)).await; - } - }); - } - - /// Handles the 'STOP_PUBLISH' action from the callback. - /// - /// # Arguments - /// `payload` - Payload sent with the 'STOP_PUBLISH' action. - pub fn handle_stop_publish_action(&self, payload: CallbackPayload) { - let topic_info: TopicInfo; - - let mut entity_lock = self.entity_map.write(); - let get_result = entity_lock.get_mut(&payload.entity_id); - - let topics = get_result.unwrap(); - - // Check to see if topic exists. - if let Some(index) = topics.iter_mut().position(|t| t.topic == payload.topic) { - // Remove topic. - topic_info = topics.swap_remove(index); - - // Stop publishing to removed topic. - drop(topic_info.stop_channel); - } else { - warn!("No topic found matching {}", payload.topic); - } - } -} - -#[tonic::async_trait] -impl ManagedSubscribeCallback for TrailerPropertiesProviderImpl { - /// Callback for a provider, will process a provider action. - /// - /// # Arguments - /// * `request` - The request with the action and associated payload. - async fn topic_management_cb( - &self, - request: Request, - ) -> Result, Status> { - let inner = request.into_inner(); - let action = inner.action; - let payload = inner.payload.unwrap(); - - let provider_action = ProviderAction::from_str(&action).unwrap(); - - match provider_action { - ProviderAction::Publish => Self::handle_publish_action(self, payload), - ProviderAction::StopPublish => Self::handle_stop_publish_action(self, payload), - } - - Ok(Response::new(TopicManagementResponse {})) - } -} diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/interfaces/digital_twin_get_provider.proto b/in-vehicle-stack/scenarios/smart_trailer_use_case/interfaces/digital_twin_get_provider.proto deleted file mode 100644 index b11b28e..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/interfaces/digital_twin_get_provider.proto +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -// Digital Twin "Get" Provider definition -// -// The protobuf definitions for a Digital Twin Provider which only supports synchronous -// "Get" operation - -syntax = "proto3"; -package digital_twin_get_provider; - -// The service entry point to the Digital Twin Get Provider. This simple provider has one method -// to get the property -service DigitalTwinGetProvider { - // Method which gets the value of the specified property - rpc Get (GetRequest) returns (GetResponse); -} - -message GetRequest { - string entity_id = 1; -} - -message GetResponse { - bool property_value = 1; -} diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/proto_build/Cargo.toml b/in-vehicle-stack/scenarios/smart_trailer_use_case/proto_build/Cargo.toml deleted file mode 100644 index 716307c..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/proto_build/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# SPDX-License-Identifier: MIT - -[package] -name = "smart_trailer_interfaces" -version = "0.1.0" -edition = "2021" -license = "MIT" - -[dependencies] -prost = { workspace = true } -tokio = { workspace = true, features = ["macros", "rt-multi-thread"] } -tonic = { workspace = true } - -[build-dependencies] -tonic-build = { workspace = true } diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/proto_build/build.rs b/in-vehicle-stack/scenarios/smart_trailer_use_case/proto_build/build.rs deleted file mode 100644 index 771678c..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/proto_build/build.rs +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -fn main() -> Result<(), Box> { - tonic_build::compile_protos("../interfaces/digital_twin_get_provider.proto")?; - Ok(()) -} diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/proto_build/src/lib.rs b/in-vehicle-stack/scenarios/smart_trailer_use_case/proto_build/src/lib.rs deleted file mode 100644 index a9f07e7..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/proto_build/src/lib.rs +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT license. -// SPDX-License-Identifier: MIT - -pub mod digital_twin_get_provider { - pub mod v1 { - #![allow(clippy::derive_partial_eq_without_eq)] - tonic::include_proto!("digital_twin_get_provider"); - } -} diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/scripts/start_trailer_applications_ankaios.sh b/in-vehicle-stack/scenarios/smart_trailer_use_case/scripts/start_trailer_applications_ankaios.sh deleted file mode 100755 index 694e614..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/scripts/start_trailer_applications_ankaios.sh +++ /dev/null @@ -1,113 +0,0 @@ -#!/bin/bash -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# SPDX-License-Identifier: MIT - -set -e - -# This script requires jq and grpcurl to be installed -# These are included in the ankaios devcontainer, but if you want to run it outside -# you could add the commands to install them here -# Check if grpcurl is installed -if !command -v grpcurl &> /dev/null -then - echo "grpcurl could not be found; please install it and run again" - exit 1 -fi - -# Check if jq is installed -if !command -v jq &> /dev/null -then - echo "jq could not be found; please install it and run again" - exit 1 -fi - -# Get the directory of where the script is located -# All relative paths will be in relation to this -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) - -# The Ibeji gRPC server address -SERVER="0.0.0.0:5010" - -# The Ibeji FindById gRPC service and method -SERVICE="invehicle_digital_twin.InvehicleDigitalTwin" -METHOD="FindById" - -# The request body: The IsTrailerConnected signal -BODY='{"id":"dtmi:sdv:Trailer:IsTrailerConnected;1"}' - -PROTO_PATH="${SCRIPT_DIR}/../../../interfaces/invehicle_digital_twin/v1" -PROTO="invehicle_digital_twin.proto" - -EXPECTED_PROTOCOL="grpc" -EXPECTED_OPERATION="get" - -# Call FindById in a loop until something is returned -while true; do - STATUS=0 - OUTPUT=$(grpcurl -import-path $PROTO_PATH -proto $PROTO -plaintext -d "$BODY" $SERVER $SERVICE/$METHOD 2>&1) || STATUS=$? - - # Check if the output contains entityAccessInfo (the response from Ibeji when a provider is found) - if echo "$OUTPUT" | grep -iq "EntityAccessInfo" - then - echo "The FindById call was successful. Output:" - echo "$OUTPUT" - break - else - echo "Provider not found. Status Code '$STATUS' Error '$OUTPUT'" - echo "The trailer is not connected. Retrying..." - sleep 5 - fi -done - -# Parse the output as a JSON object using jq and extract the endpoints -ENDPOINTS=$(echo $OUTPUT | jq -c '.entityAccessInfo.endpointInfoList[]') - -# Loop through each endpoint -for ENDPOINT in $ENDPOINTS -do - # Check if protocol is what we expect - if [[ $(echo $ENDPOINT | jq -r '.protocol' | tr '[:upper:]' '[:lower:]') == $EXPECTED_PROTOCOL ]] - then - OPERATIONS=$(echo $ENDPOINT | jq -r '.operations[]') - # Loop through each operation and check if this endpoint supports the expected operation - for OPERATION in $OPERATIONS - do - if [[ $(echo $OPERATION | tr '[:upper:]' '[:lower:]') == $EXPECTED_OPERATION ]] - then - URI=$(echo $ENDPOINT | jq -r '.uri') - CONTEXT=$(echo $ENDPOINT | jq -r '.context') - - # We need the authority for the server, so remove the http:// - get_server=$(echo "$URI" | sed 's/http:\/\///g') - - # Call get for the "trailer connected provider" to check if it's connected - GET_PROTO_PATH="${SCRIPT_DIR}/../interfaces" - GET_PROTO="digital_twin_get_provider.proto" - GET_SERVER=$get_server - GET_SERVICE="digital_twin_get_provider.DigitalTwinGetProvider" - GET_METHOD="Get" - GET_OUTPUT=$(grpcurl -import-path $GET_PROTO_PATH -proto $GET_PROTO -plaintext $GET_SERVER $GET_SERVICE/$GET_METHOD 2>&1) - - # For now, this always returns true, this can be expanded to simulate connecting and disconnecting the trailer - if [[ $(echo $GET_OUTPUT | jq -r '.propertyValue') ]] - then - echo "Trailer is connected! Starting workloads to manage it" - - # Start up the other workloads using podman - CFG_PROVIDER=$'image: sdvblueprint.azurecr.io/sdvblueprint/in-vehicle-stack/trailer_properties_provider:0.1.0\ncommandOptions: ["--network", "host", "--name", "trailer_properties_provider"]' - CFG_APP=$'image: sdvblueprint.azurecr.io/sdvblueprint/in-vehicle-stack/smart_trailer_application:0.1.0\ncommandOptions: ["--network", "host", "--name", "smart_trailer_application"]' - - ank run workload trailer_properties_provider --runtime podman --config "$CFG_PROVIDER" --agent agent_A - ank run workload smart_trailer_application --runtime podman --config "$CFG_APP" --agent agent_A - - echo "Called Ankaios to start the Trailer Properties Digital Twin Provider and Smart Trailer Application" - echo "Check Ankaios status with 'ank get workloads'" - exit 0 - fi - fi - done - fi -done -# We didn't find an endpoint which satisfied our conditions -exit 1 \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/smart_trailer_use_case/scripts/start_trailer_applications_bluechi.sh b/in-vehicle-stack/scenarios/smart_trailer_use_case/scripts/start_trailer_applications_bluechi.sh deleted file mode 100755 index 7089d7e..0000000 --- a/in-vehicle-stack/scenarios/smart_trailer_use_case/scripts/start_trailer_applications_bluechi.sh +++ /dev/null @@ -1,112 +0,0 @@ -#!/bin/bash -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# SPDX-License-Identifier: MIT - -set -e - -# This script requires jq and grpcurl to be installed -# These are included in the bluechi devcontainer, but if you want to run it outside -# you could add the commands to install them here -# Check if grpcurl is installed -if !command -v grpcurl &> /dev/null -then - echo "grpcurl could not be found; please install it and run again" - exit 1 -fi - -# Check if jq is installed -if !command -v jq &> /dev/null -then - echo "jq could not be found; please install it and run again" - exit 1 -fi - -# Get the directory of where the script is located -# All relative paths will be in relation to this -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) - -# The Ibeji gRPC server address -SERVER="0.0.0.0:5010" - -# The Ibeji FindById gRPC service and method -SERVICE="invehicle_digital_twin.InvehicleDigitalTwin" -METHOD="FindById" - -# The request body: The IsTrailerConnected signal -BODY='{"id":"dtmi:sdv:Trailer:IsTrailerConnected;1"}' - -PROTO_PATH="${SCRIPT_DIR}/../../../interfaces/invehicle_digital_twin/v1" -PROTO="invehicle_digital_twin.proto" - -EXPECTED_PROTOCOL="grpc" -EXPECTED_OPERATION="get" - -# Call FindById in a loop until something is returned -while true; do - STATUS=0 - OUTPUT=$(grpcurl -import-path $PROTO_PATH -proto $PROTO -plaintext -d "$BODY" $SERVER $SERVICE/$METHOD 2>&1) || STATUS=$? - - # Check if the output contains entityAccessInfo (the response from Ibeji when a provider is found) - if echo "$OUTPUT" | grep -iq "EntityAccessInfo" - then - echo "The FindById call was successful. Output:" - echo "$OUTPUT" - break - else - echo "Provider not found. Status Code '$STATUS' Error '$OUTPUT'" - echo "The trailer is not connected. Retrying..." - sleep 5 - fi -done - -# Parse the output as a JSON object using jq and extract the endpoints -ENDPOINTS=$(echo $OUTPUT | jq -c '.entityAccessInfo.endpointInfoList[]') - -# Loop through each endpoint -for ENDPOINT in $ENDPOINTS -do - # Check if protocol is what we expect - if [[ $(echo $ENDPOINT | jq -r '.protocol' | tr '[:upper:]' '[:lower:]') == $EXPECTED_PROTOCOL ]] - then - OPERATIONS=$(echo $ENDPOINT | jq -r '.operations[]') - # Loop through each operation and check if this endpoint supports the expected operation - for OPERATION in $OPERATIONS - do - if [[ $(echo $OPERATION | tr '[:upper:]' '[:lower:]') == $EXPECTED_OPERATION ]] - then - URI=$(echo $ENDPOINT | jq -r '.uri') - CONTEXT=$(echo $ENDPOINT | jq -r '.context') - - # We need the authority for the server, so remove the http:// - get_server=$(echo "$URI" | sed 's/http:\/\///g') - - # Call get for the "trailer connected provider" to check if it's connected - GET_PROTO_PATH="${SCRIPT_DIR}/../interfaces" - GET_PROTO="digital_twin_get_provider.proto" - GET_SERVER=$get_server - GET_SERVICE="digital_twin_get_provider.DigitalTwinGetProvider" - GET_METHOD="Get" - GET_OUTPUT=$(grpcurl -import-path $GET_PROTO_PATH -proto $GET_PROTO -plaintext $GET_SERVER $GET_SERVICE/$GET_METHOD 2>&1) - - # For now, this always returns true, this can be expanded to simulate connecting and disconnecting the trailer - if [[ $(echo $GET_OUTPUT | jq -r '.propertyValue') ]] - then - echo "Trailer is connected! Starting workloads to manage it" - - # The service.kube and service.yml files for these two services are included in the BlueChi devcontainer - # See /etc/containers/systemd for these files - # Start up the other workloads using systemctl - systemctl start trailer-properties - systemctl start smart-trailer - - echo "Called systemctl to start the Trailer Properties Digital Twin Provider and Smart Trailer Application" - echo "Check systemctl status with 'systemctl status trailer-properties' and 'systemctl status smart-trailer' for status" - exit 0 - fi - fi - done - fi -done -# We didn't find an endpoint which satisfied our conditions -exit 1 \ No newline at end of file diff --git a/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/.gitignore b/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/.gitignore deleted file mode 100644 index 2f7896d..0000000 --- a/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/.gitignore +++ /dev/null @@ -1 +0,0 @@ -target/ diff --git a/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/Cargo.toml b/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/Cargo.toml deleted file mode 100644 index 698c842..0000000 --- a/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/Cargo.toml +++ /dev/null @@ -1,19 +0,0 @@ -[package] -name = "resource_statistics" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -anyhow = "1" -actix-web = "4.4.0" -tokio = { version = "1.24.2", features = ["sync", "io-util", "rt-multi-thread", "macros"] } -tokio-util = "0.7.4" -tokio-stream = "0.1.1" -async-process = "2.0.0" -serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0" -env_logger = "0.10" -log = "0.4" -lazy_static = "1.4.0" diff --git a/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/Dockerfile b/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/Dockerfile deleted file mode 100644 index d410565..0000000 --- a/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -FROM docker.io/alpine:3.18.4 as compile -ENV PATH="/root/.cargo/bin:${PATH}" - -RUN apk update && apk add --update-cache \ - curl \ - # Development tools - protobuf \ - protobuf-dev \ - protoc \ - build-base \ - && curl --proto '=https' --tlsv1.2 -sS https://sh.rustup.rs | sh -s -- -y > /dev/null \ - && rm -rf /var/cache/apk/* - -COPY . /workspaces/build -WORKDIR /workspaces/build -RUN cargo build --release - -# stage prod -FROM docker.io/alpine:3.18.4 -COPY --from=compile /workspaces/build/target/release/resource_statistics /usr/local/bin/resource_statistics -RUN chmod +x /usr/local/bin/resource_statistics -ENTRYPOINT ["/usr/local/bin/resource_statistics"] \ No newline at end of file diff --git a/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/README.md b/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/README.md deleted file mode 100644 index 611e092..0000000 --- a/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/README.md +++ /dev/null @@ -1,61 +0,0 @@ -# Resource Monitoring Workload - -For challenges requiring resource usage statistics a workload application is provided that provides you some initial resource statistic values of the host the workload is running on. The statistics can be accessed via a REST API as JSON. - -This image is public available: - -```shell -docker pull ghcr.io/eclipse-ankaios/maestro_resource_monitor:0.1.0 -``` - -The image url is already pre-configured in the [initial startup state](../../../eclipse-ankaios/config/startupState.yaml) of Ankaios. -So, if you select a challenge requiring the statistics please uncomment the config part in the initial startup state to enable this workload and start Ankaios again. - -## Request the resource usage statistic - -To fetch the resource usage statistics execute the following command: - -```shell -curl -sL localhost:25555 -``` - -## Extend with custom resource usage values - -The workload app is designed for easily adding new resource statistic values. Depending on your input for the OpenAI model you can adapt the commands fetching the resource statistic values from the host namespace. - -Open the file `src/commands.rs` and adapt existing commands or add a new command: - -```rust - pub static ref COMMANDS: HashMap<&'static str, &'static str> = { - HashMap::from([ - // ... - ("new-resource-statistic", "command for new resource statistic value") - ]) - }; -``` - -The commands are automatically executed and the values inserted into the json response. - -After you have added commands for fetching resource usage statistics you must build a new version of the container image and -publish it to a container registry of your choice. Afterwards you must replace the initial image url in the [initial startup state](../../../eclipse-ankaios/config/startupState.yaml) of Ankaios. - -## Build - -Replace `` in the following command with a registry you have access to and build the resource monitor workload: - -```shell -docker run --rm --privileged multiarch/qemu-user-static --reset -p yes -docker buildx create --name mybuilder --driver docker-container --bootstrap -docker buildx use mybuilder -docker buildx build -t /maestro_resource_monitor: --platform linux/amd64,linux/arm64 . -``` - -**Note:** Make sure that the image is public available (without authentication) or log in into the registry before starting the workload with Ankaios. - -## Run - -You can also run the workload without Ankaios for testing, by running it with the following command and settings: - -```shell -docker run --rm -d --name resource_monitor --privileged --network host --pid host --name resource_monitor -p 25555:25555 /maestro_resource_monitor: -``` \ No newline at end of file diff --git a/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/src/commands.rs b/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/src/commands.rs deleted file mode 100644 index 95cf727..0000000 --- a/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/src/commands.rs +++ /dev/null @@ -1,14 +0,0 @@ -use std::collections::HashMap; - -lazy_static::lazy_static! { - pub static ref COMMANDS: HashMap<&'static str, &'static str> = { - HashMap::from([ - ("cpu-usage", "awk '/cpu / {CPU=($2+$4)*100/($2+$4+$5)} END {printf(\"%.1f\", CPU)}' /proc/stat"), // CPU usage in % - ("cpu-usage-user", "awk '/cpu / {CPU=($2)*100/($2+$4+$5)} END {printf(\"%.1f\", CPU)}' /proc/stat"), // CPU usage user in % - ("cpu-usage-system", "awk '/cpu / {CPU=($4)*100/($2+$4+$5)} END {printf(\"%.1f\", CPU)}' /proc/stat"), // CPU usage system in % - ("memory-usage", "awk '/MemTotal/ {TOT=$2} /MemFree/ {FREE=$2} END {printf(\"%.1f\", FREE/TOT * 100)}' /proc/meminfo"), // memory usage in % - ("cores", "awk '/siblings/ {printf(\"%u\", $3); exit}' /proc/cpuinfo"), // amount of cores - ("memory-total", "awk '/MemTotal/ {printf(\"%u\", $2/1024)}' /proc/meminfo"), // total memory in KiB - ]) - }; -} diff --git a/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/src/main.rs b/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/src/main.rs deleted file mode 100644 index c162089..0000000 --- a/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/src/main.rs +++ /dev/null @@ -1,32 +0,0 @@ -use actix_web::{web, App, HttpServer}; -use std::net::SocketAddr; - -mod resource_statistic_job; -mod routes; -mod commands; - -use resource_statistic_job::init_resource_statistic_cache; - -#[actix_web::main] -async fn main() -> anyhow::Result<()> { - env_logger::init_from_env(env_logger::Env::new().default_filter_or("info")); - - let socket_address = - std::env::var("RESOURCE_STATISTICS_API_SOCKET").unwrap_or("0.0.0.0:25555".to_string()); - let socket_address: SocketAddr = socket_address.parse()?; - - let (item_cache, cache_sweep_handle, cache_sweep_cancel) = init_resource_statistic_cache(); - HttpServer::new(move || { - App::new() - .service(routes::statistics) - .app_data(web::Data::from(item_cache.clone())) - }) - .workers(2) - .bind((socket_address.ip(), socket_address.port()))? - .run() - .await?; - - cache_sweep_cancel.cancel(); - cache_sweep_handle.await.unwrap(); - Ok(()) -} diff --git a/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/src/resource_statistic_job.rs b/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/src/resource_statistic_job.rs deleted file mode 100644 index e13e871..0000000 --- a/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/src/resource_statistic_job.rs +++ /dev/null @@ -1,71 +0,0 @@ -use crate::commands::COMMANDS; -use async_process::Command; -use std::collections::HashMap; -use std::sync::{Arc, Mutex}; -use std::time::Duration; -use tokio::{task::JoinHandle, time::sleep}; -use tokio_util::sync::CancellationToken; - -pub type ItemCache = Mutex>>; - -pub fn init_resource_statistic_cache() -> (Arc, JoinHandle<()>, CancellationToken) { - let cache = Arc::new(ItemCache::default()); - - let cache_sweep_cancel = CancellationToken::new(); - ( - cache.clone(), - tokio::spawn(fetch_statistics(cache, cache_sweep_cancel.clone())), - cache_sweep_cancel, - ) -} - -async fn exec_command(cmd: &str) -> anyhow::Result { - let result = Command::new("sh").args(["-c", cmd]).output().await?; - Ok(String::from_utf8(result.stdout)?) -} - -async fn fetch_statistics(cache: Arc, stop_signal: CancellationToken) { - let host = exec_command("hostname") - .await - .unwrap_or("unknown".to_string()) - .strip_suffix('\n') - .unwrap() - .to_owned(); - - loop { - for (typ, cmd) in COMMANDS.iter() { - match Command::new("sh").args(["-c", cmd]).output().await { - Ok(result) => { - let output_stdout = String::from_utf8(result.stdout).unwrap(); - - match cache.lock().unwrap().entry(host.clone()) { - std::collections::hash_map::Entry::Vacant(new_value) => { - log::debug!("Inserting new resource statistic value '{}' with value '{}' for new host '{}'", typ, output_stdout, host); - let mut new_map = HashMap::new(); - new_map.insert(typ.to_string(), output_stdout); - new_value.insert(new_map); - } - std::collections::hash_map::Entry::Occupied(existing_value) => { - log::debug!("Inserting new resource statistic value '{}' with value '{}' for existing host '{}'", typ, output_stdout, host); - existing_value - .into_mut() - .insert(typ.to_string(), output_stdout); - } - } - } - Err(err) => log::error!("{}", err), - } - } - - tokio::select! { - _ = sleep(Duration::from_secs(5)) => { - continue; - } - - _ = stop_signal.cancelled() => { - log::info!("gracefully shutting down resource statistics job"); - break; - } - }; - } -} diff --git a/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/src/routes.rs b/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/src/routes.rs deleted file mode 100644 index fa4a7b2..0000000 --- a/scenarios/intelligent_orchestrator_use_case/ankaios_resource_statistics_app/src/routes.rs +++ /dev/null @@ -1,11 +0,0 @@ -use crate::resource_statistic_job::ItemCache; -use actix_web::{get, web, HttpResponse, Responder}; - -#[get("/")] -pub(crate) async fn statistics(cache: web::Data) -> impl Responder { - match cache.lock() { - Ok(entry) => HttpResponse::Ok().json(&*entry), - Err(_) => HttpResponse::InternalServerError() - .body("failed to request the resource statistics on the host."), - } -} diff --git a/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/Dockerfile b/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/Dockerfile deleted file mode 100644 index d553ece..0000000 --- a/scenarios/smart_trailer_use_case/digital_twin_providers/trailer_connected_provider/Dockerfile +++ /dev/null @@ -1,74 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# SPDX-License-Identifier: MIT - -# Comments are provided throughout this file to help you get started. -# If you need more help, visit the Dockerfile reference guide at -# https://docs.docker.com/engine/reference/builder/ - -################################################################################ -# Create a stage for building the application. - -ARG RUST_VERSION=1.72.1 -FROM docker.io/library/rust:${RUST_VERSION}-slim-bullseye AS build -ARG APP_NAME=trailer_connected_provider -WORKDIR /sdv - -COPY ./ . - -# Add Build dependencies. -RUN apt update -y && apt upgrade -y && apt install -y \ - cmake \ - libssl-dev \ - pkg-config \ - protobuf-compiler - -# Check that APP_NAME argument is valid. -RUN sanitized=$(echo "${APP_NAME}" | tr -dc '^[a-zA-Z_0-9-]+$'); \ -[ "$sanitized" = "${APP_NAME}" ] || { \ - echo "ARG 'APP_NAME' is invalid. APP_NAME='${APP_NAME}' sanitized='${sanitized}'"; \ - exit 1; \ -} - -# Build the application -RUN cargo build --release --bin "${APP_NAME}" - -# Copy the built application to working directory. -RUN cp ./target/release/"${APP_NAME}" /sdv/service - -################################################################################ -# Create a new stage for running the application that contains the minimal -# runtime dependencies for the application. This often uses a different base -# image from the build stage where the necessary files are copied from the build -# stage. -# -# The example below uses the debian bullseye image as the foundation for running the app. -# By specifying the "bullseye-slim" tag, it will also use whatever happens to be the -# most recent version of that tag when you build your Dockerfile. If -# reproducability is important, consider using a digest -# (e.g., debian@sha256:ac707220fbd7b67fc19b112cee8170b41a9e97f703f588b2cdbbcdcecdd8af57). -FROM docker.io/library/debian:bullseye-slim AS final - -# Create a non-privileged user that the app will run under. -# See https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user -ARG UID=10001 -RUN adduser \ - --disabled-password \ - --gecos "" \ - --home "/nonexistent" \ - --shell "/sbin/nologin" \ - --no-create-home \ - --uid "${UID}" \ - appuser -USER appuser - -WORKDIR /sdv - -# Copy the executable from the "build" stage. -COPY --from=build /sdv/service /sdv/ - -# Expose the port that the application listens on. -EXPOSE 4020 - -# What the container should run when it is started. -CMD ["/sdv/service"] \ No newline at end of file diff --git a/scenarios/smart_trailer_use_case/scripts/start_trailer_applications_ankaios.sh b/scenarios/smart_trailer_use_case/scripts/start_trailer_applications_ankaios.sh deleted file mode 100755 index 82d65f6..0000000 --- a/scenarios/smart_trailer_use_case/scripts/start_trailer_applications_ankaios.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/bin/bash -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. -# SPDX-License-Identifier: MIT - -set -e -# This script requires jq and grpcurl to be installed -# The commands for this can be added here - -# Get the directory of where the script is located -# All relative paths will be in relation to this -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) - -# The Ibeji gRPC server address -SERVER="0.0.0.0:5010" - -# The Ibeji FindById gRPC service and method -SERVICE="invehicle_digital_twin.InvehicleDigitalTwin" -METHOD="FindById" - -# The request body: The IsTrailerConnected signal -BODY='{"id":"dtmi:sdv:Trailer:IsTrailerConnected;1"}' - -PROTO_PATH="${SCRIPT_DIR}/../../../in-vehicle-stack/interfaces/invehicle_digital_twin/v1" -PROTO="invehicle_digital_twin.proto" - -EXPECTED_PROTOCOL="grpc" -EXPECTED_OPERATION="get" - -# Call FindById in a loop until something is returned -while true; do - OUTPUT=$(grpcurl -import-path $PROTO_PATH -proto $PROTO -plaintext -d "$BODY" $SERVER $SERVICE/$METHOD 2>&1) - - # Check if the output contains entityAccessInfo (the response from Ibeji when a provider is found) - if echo "$OUTPUT" | grep -iq "EntityAccessInfo" - then - echo "The FindById call was successful. Output:" - echo "$OUTPUT" - break - else - echo "Provider not found: $OUTPUT" - echo "The trailer is not connected. Retrying..." - sleep 5 - fi -done - -# Parse the output as a JSON object using jq and extract the endpoints -ENDPOINTS=$(echo $OUTPUT | jq -c '.entityAccessInfo.endpointInfoList[]') - -# Loop through each endpoint -for ENDPOINT in $ENDPOINTS -do - # Check if protocol is what we expect - if [[ $(echo $ENDPOINT | jq -r '.protocol' | tr '[:upper:]' '[:lower:]') == $EXPECTED_PROTOCOL ]] - then - OPERATIONS=$(echo $ENDPOINT | jq -r '.operations[]') - # Loop through each operation and check if this endpoint supports the expected operation - for OPERATION in $OPERATIONS - do - if [[ $(echo $OPERATION | tr '[:upper:]' '[:lower:]') == $EXPECTED_OPERATION ]] - then - URI=$(echo $ENDPOINT | jq -r '.uri') - CONTEXT=$(echo $ENDPOINT | jq -r '.context') - - # We need the authority for the server, so remove the http:// - get_server=$(echo "$URI" | sed 's/http:\/\///g') - - # Call get for the "trailer connected provider" to check if it's connected - GET_PROTO_PATH="${SCRIPT_DIR}/../interfaces" - GET_PROTO="digital_twin_get_provider.proto" - GET_SERVER=$get_server - GET_SERVICE="digital_twin_get_provider.DigitalTwinGetProvider" - GET_METHOD="Get" - GET_OUTPUT=$(grpcurl -import-path $GET_PROTO_PATH -proto $GET_PROTO -plaintext $GET_SERVER $GET_SERVICE/$GET_METHOD 2>&1) - - # For now, this always returns true, this can be expanded to simulate connecting and disconnecting the trailer - if [[ $(echo $GET_OUTPUT | jq -r '.propertyValue') ]] - then - echo "Trailer is connected! Starting workloads to manage it" - - # Start up the other workloads using podman - CFG_PROVIDER=$'image: localhost/trailer_properties_provider_ank:latest\ncommandOptions: ["--network", "host", "--name", "trailer_properties_provider"]' - CFG_APP=$'image: localhost/smart_trailer_application_ank:latest\ncommandOptions: ["--network", "host", "--name", "smart_trailer_application"]' - - ank run workload trailer_properties_provider --runtime podman --config "$CFG_PROVIDER" --agent agent_A - ank run workload smart_trailer_application --runtime podman --config "$CFG_APP" --agent agent_A - - echo "Called Ankaios to start the Trailer Properties Digital Twin Provider and Smart Trailer Application" - echo "Check Ankaios status with 'ank get workloads'" - exit 0 - fi - fi - done - fi -done -# We didn't find an endpoint which satisfied our conditions -exit 1 \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_wheelchair_assistant_provider_ankaios.sh b/scenarios/wheelchair_assistant_use_case/start_wheelchair_assistant_provider_ankaios.sh similarity index 66% rename from in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_wheelchair_assistant_provider_ankaios.sh rename to scenarios/wheelchair_assistant_use_case/start_wheelchair_assistant_provider_ankaios.sh index 63a0a8a..1593b98 100755 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/start_wheelchair_assistant_provider_ankaios.sh +++ b/scenarios/wheelchair_assistant_use_case/start_wheelchair_assistant_provider_ankaios.sh @@ -6,14 +6,14 @@ set -e # Deklariere das Array -#PROVIDER_CONTAINERS=( -# "car_off_provider" -# "car_on_provider" -# "carkey_lock_provider" -# "carkey_unlock_provider" -# "wheelchair_distance_decreasing_provider" -# "wheelchair_distance_increasing_provider" -#) +PROVIDER_CONTAINERS=( + "car_off_provider" + "car_on_provider" + "carkey_lock_provider" + "carkey_unlock_provider" + "wheelchair_distance_decreasing_provider" + "wheelchair_distance_increasing_provider" +) PROVIDER_CONTAINERS=( "car_off_provider" @@ -26,5 +26,6 @@ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) # Iterate over provider containers to build for CONTAINER in "${PROVIDER_CONTAINERS[@]}"; do CFG_PROVIDER="image: sdvblueprint.azurecr.io/sdvblueprint/in-vehicle-stack/--${CONTAINER}:0.1.0\ncommandOptions: [\"--network\", \"host\", \"--name\", \"${CONTAINER}\"]" - ank run workload ${CONTAINER} --runtime podman --config "$CFG_PROVIDER" --agent agent_A + echo "${CFG_PROVIDER}" + ank run workload ${CONTAINER} --runtime podman --config "$CFG_PROVIDER" --agent agent_A done From 7a20352bd1757d933b522a4f7818ec549ad2facd Mon Sep 17 00:00:00 2001 From: "Enrico Walther (IAV)" Date: Thu, 30 Nov 2023 10:59:36 +0100 Subject: [PATCH 37/38] Add images to readme. --- README.md | 7 ++++++- .../orchester.png | Bin 0 -> 987099 bytes 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 docs/wheelchair_assistant_use_case/orchester.png diff --git a/README.md b/README.md index 896fef1..4756407 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,9 @@ With this it's possible to dynamically startup an application that is only requi For these reasons Ankaios fits in perfectly for the wheelchair scenario. ##### Dynamic Orchestration + +![orchester.png](docs%2Fwheelchair_assistant_use_case%2Forchester.png) + This use case demonstrates a more complex example of dynamic orchestration. At the beginning the car is parked and in the init state when the person arrives at the parking lot. While approaching, the person unlocks the car and it switches to the open state in which the door is unlocked. In order to simulate this, Digital Twin Provider "carkey_unlock_provider" sends the signal to set the cars state to open. Another Digital Twin Provider "wheelchair_distance_decreasing_provider" simulates the approaching process. Meanwhile a [script](./in-vehicle-stack/scenarios/wheelchair_assistant_use_case/scripts/) will be run to monitor Ibeji and detect when the handicapped person is approaching the vehicle. The script will continuously monitor the wheelchair distance from the vehicle and based on the distance read, automatic configuration of the car starts to make the entry experience as effortless as possible. This automatic configuration is implemented by the [Wheelchair Assistant Application](./in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/). Through this application, the front and back doors open up, the steering wheel adjusts to a higher position and the driver seat is adjusted to the back and lowered. Once this is done, the car is in Hold state and ready to be turned on which is simulated by the "car_on_provider". Once the driver enters and turns on the ignition, the doors close and steering wheel and seat go back to their default state. Once the person arrives at the desired destination, the described process takes place in the reverse way to make sure they leave the car comfortably. This process is achieved by the "car_off_provider", "wheelchair_distance_increasing_provider" and the "car_lock_provider". @@ -23,6 +26,8 @@ All our services are registered by Chariott. ##### State machine overview +![wheel_assistant_states.png](docs%2Fwheelchair_assistant_use_case%2Fdiagrams%2Fwheel_assistant_states.png) + ##### Architecture - +![wheel_chair_scenario.png](docs%2Fwheelchair_assistant_use_case%2Fdiagrams%2Fwheel_chair_scenario.png) \ No newline at end of file diff --git a/docs/wheelchair_assistant_use_case/orchester.png b/docs/wheelchair_assistant_use_case/orchester.png new file mode 100644 index 0000000000000000000000000000000000000000..eeba177bb6ed1495fe50979d19f608e18cf5e98f GIT binary patch literal 987099 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 z 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 Dpg#l&nywTWN&Q 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

IT9OEqL)Bu0%XPjaA?m%iG<;iezsn8F?()* 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 z zFEsVh2)I~lR>kz=Bk350&GzOQ~ zgmQ?1+4m4IsH`6YD$eev$5|ghdoG|OpA8vVJ5I)q;pJSU5(EXiOi4gQL?IAFtT>VY zsViJ1QLYQZ2-Q@YhW8->P;rPUt1Q%{|2>I#VSUylLRc8O$&SWd{O0c8k>;^t-;&VLewg*$b-MH2Q4kJl?Xkl4~)zS zbtoqOcI4#XjiYpgZ{TEYwlyc%*#kpQIfJ2}z7gyw2p{%rX6F+RAe-KzT4vBa6AQ>E z+91~t#X zl3`Ftc}*25GmIBW_H|PyWhn2IHbLNk<`XN9Q(Rq5uW3O#jqbXbB?3n%1SY*bNqTw` z)D)LdUsD}6Rqb8GhmIrAbzCopo6CnRo%Fc&h8y|F$L8b8&=+v;o(}H$)jj@i(X#E5D$*7s-Vde-i7Be^thSec=Y9yq|wL;n`BN>Bo~k zk|>U$(?P&aCr?{%ADt)+&BioMdK3LTy6~SY1tu3)GODhIs_JTX_x18(^LDo8leiQC z66Jg73KUTiNLqwWzNVV4jxO&1<3kwehtHNC!2AP=t_fDJdV|%kt!KgMvsk_6H4<%| zn93wTLud-6JWA|1M@>7HH{V#viskV7mKKf~Q^cg<^(0e+h?zBP-{+9dn3UmB=10h< z1G*i_mSl#`qDquuuxaOhUTJJ*cwISD8U}OJq*0tOZX^??jKMG!j_cFb_7-y|SFmaQ z8k+V%!R*AWF}hIpF>U7;bAAR3M1`*}>w;ifNM$J8m4Q1Wo&KOx>ZAsk3B zO}!uwJv37Fz%_XXN%!7O>;HLIe7HA)(tM-}{W?I>pH49Ul=(dPhx@$fKKrPd- zSn}K=mMwW1Hgy2@H0l(bbh?&C=P|;VpLUCVAz74dw0>D>chuJ*KOY3j~&WfYk-qYq5PVfi%c>DGREz4#vj*jrIIjJt~Q>cJRYa6v<#Kcp)y&rfnwjD zes*Le-B@&E;ag=O6)r9s63q=6OfLvXIQ<0%I?VS8RJi^e^y-iYAIfl({y-vRLl}%4 zIg*l+qW5ji-}&SpyxxJYxbMFE*tKgn0g}rvznl>xh87rlHQ?72g39myYg9pR=PQY& zS;!!d=7T16_HAm$$!UxoIgxcwzeIN9c5?gnGN@)SMrAE|EVeZ6X6>4_tX}g9eZ3vH z1jH#PN-vd8fbaC7lSZQmgocy?gBYvUtmBUF{ggX?_#J9%E6`1wuAWZfR+OxhL(_Gf zzz^S}9m?Rpm%>7zNpoQT6dFh^0Ch-qg?3O;@O~BYp^AZlI6@T=xRQungeEQS`q{5& zZfXTr@zq6Pd8v)aT zJ!#y1c~l;RtqRfCUI_M!aQD^@_(N!iN-qkEVE|>5?|~hA6TGz_;*+K@=PS2EaV=;$ zNbIHixd+K?UP6uLpo;(`loc1Tr(+MKyF-#kJNOK$BW?c?0N}{+!DL=&2V86Az>K2; z?BX(XD~g}XgX`gDvRGx6pu(JE(=d@j5O{^WY}0^j3O9Gau~iT#!t7B(GdDXH4;P2t z1XduiO`VkQ;iKV5Mb7h43S#j%bybx#^>(1LIU*G$Xu`s_3{-a~BWKU%{EN;*w?gZI z*I#>!FMi=B)~{WMZrFwSM0Ich*W_Uv-T`E|adRWL-~K)B_`$7MLc>=+f$w9R5zakh zJ`erkPDY9dAFUg~C?Tm-F1l^8tJ3C`efwCqeigsH?SJ^nt+%jX?(v*>{K>3Z{W=f- zwmbT_E*e1ehwF&eguj;o?_$5<&79;#3ZOJ z;mu?>OS<;K;K4LZ9*gSf;Kx7sAsy}Qp=43Y!aC}M6d$Y;K!%%_VdG@;TzmDkWHWd1 ziEA$AhA-a8_rH4wK`M(z!0_TY(~6_SWsZI?kLP&Q7sDXSVoYTqCd@7c|yp+l&M#J~wKHJ$qUA+&GVflj25d@e|2TvEICvSI6Pf*?()rdYPI zk(oR95G`2*(HO_iJB051tl5?)4($YIbqR_q(wTkrLr_<9eVI_FhB*=SJrXVsL_n8t)U@a#E7C|Dxy*H zuE&a{udpeXAc>8SG0?Pvz(d1B=gmEP`NIF)Mk0}5+wSJD`PU9aBpzgf1sZ{pA%6r_&!1ljkIF%BC?qbejo>)0VyG3>Es<3Q`gajjvwgUb=O_I^wLr? z*$kSdAp^xhw`CUqD|(9Pn2NnX#^}Hb#veN`ETBs#U8vanA9WW*BvP#`$M5XZmzncJ0FLO)^Lm z3`(VV?Qeg_iw{wVZ`vIi-w@7w}ooQn&vK7YfF zeC5ku=FHPiL$^ZBcC<3i{L@ci>GDNv*uD*{DABrl`h`i-D#q6|a!!ghxg7eo7V1XS zGJeWzijx}my|A95S6W#xy_!#4ay2I%dlaj7cag*-i^3NXvNB7n8=zB!Wfx;c%Bd(R zqpEHQ)uq*FuEKZn^rm~*x37hs{sdvJK%r|=>OHTqA#{YMs2fyEX;mde9p-)Pbhhnm z=8a98v0M+sFc~&-1QRAq;FQxp$`#jL&F}90JvV&*I)3%5|7Fy$dX7EnDB4=uc=VAc z+27W|{eSvB{pl3H{oNn<H@~`@8$N#>lP6E)`s+VK23fSt); zb!IRNg{KGf0|_*+%20M0rWM2MPabkVD}<8odaoRi{lD9-p?wH9@`}m|h71|Phg1E( z^8;3_T*0G{K8g$iuKLu~Tz>iG?~M$;-4meT+NSFwByW)DfdJPd=;&hUk{5B5htzfM z`2HQ#2!mN;#xZT$bYy828+Pnr#Ty&g*T0_}2_i^}Fpy-ZLSuAk8AL5I-CeXONlF9D zv{5p2*m&rnKjQ^Ce)z-hF?et-)fIwtE`=ZX1fg(f!2RDZ5D)r$Y!aG!y8@s90{pjD z)xsD;Bodlq{^ie)@YEAegBx)C@pHN9rke=d0Nv6dFWIFe$^umjM#HkhbE61Pp>4Fn#tcF1g@r?*IK`{POO**|KRbU=bkE zMZlD4llbgsE<#B-`-~HL=z%+dEQ9Oo`1G|`BMRV<3PMG0*tw@5xrNppi;0>UOf5j_ zCT>n*8#eSgc&&ZtPM8!abdbIxv~^MMCiV;e5L&42l>*!Vq(O6Yg6(aPudLy+FW(9c z;~>)yW}5WUXJ}dR0)u1*I|wiXfvy5f>0Oxcu~-ZY3*3NQDvd8Co}uI66A-f1u7cv~O4>{V z`covkdNJyUpc?|E86;hgj4#Paunj>?SqV+qCbGRc^t2IwKnH1pVL95b?> z`rba~7R9OQZl^fNp*xDv#YIdUIfR$myLt85e{jjO|DbBj6wbZ+TIQbm5pMnVSJ`vL z<^1KJ3;FBAkMg(2o?_wCix@R*DCeF2QLexEGUoo`d$6sMHy`;sJ!{vI?d>OHd#vc} z;Vtsa7&;0}jmIDU6Hol(F#$==@(^p8kId1&I7npbINBQ~f-(|&P z4>P5*nyV)_&=B!R$Q~Rr*cO;Mhgd3upXj8VDAAZnBo;>n4o)h8m$T{K@+QN^9!;@s zlk4e6l-U&dr9=XkC_aHEP`ZYu8F-E)X2wYcl78i}d4Gbp{=NuJQ@Fmz!sk{n_r&Fl z9yN^9J~Eq$6Gl>36{D_dB4t{X#NGsIwxGH+hDh#b>-tq3KYJcuyy<#Mio^M`UAtPi z_rV8o9Ea0RKZ)b#j;6O`7;9hJ!}5OE-znk!O~Y(5CoDyd7$Y? zl>^OS{DkrJ_orxY>qco&`ZLhfC1_jLLSK3VUI4llq1uIp5}P_p!}k@PsgN-;&@h!w zu~~#IiV;$vDd=)?v@~T2=x53LHmtucW%!U%CXE@+Nyi<_w4)|*;d!TU_PO(Ut8oW! zZffLrKfjgV-WBD=ep`O zp5NccPk;6kmMmUO((|wi&AzFHij6~`Dj%QfLBmOU7O|o#Y%5N-KQ*AxQR=<#{r`q1 z$Kb((88?2+zXj?k6&kE&GkL!Mz3;QXbq|#lwVZpwITV#f4tsLnv6g6W#}N*go@${a z#23(=X7keJEPVPo7A|_3ZQZ>{3~J0cAG!20W=uPdWvkZk{K6+_Y}<>5MG+pQBx%5B zIFj*2#Z0Rkj8#-jqYrO%w~-GVbTdLepT!UY&+`bR;<3N~1Ise_?(N@U@Su7OGrHgvWqs0}0~dW2a< zEj50UK0;q26N4g3(9J0Ex?ybYOR{hK7LJ=fjjWqQX&|r)5V|6eKCYL?4Z?F@xpFyM zw{8J^F23M=>Z&V|QX+(gi@??hI{>$pzFkWQ^1CQ2HE_Hf%COL-4jBX4+<~78RiL^a zdeuox#*OCveFnmoV?tkFw~wXL2Zil?~fA z^T)sZnFZ6Q^O;L7VERqhLuZ2iS6}79XBV=zzm%nC)kIM0wVQH(KzpjZb_gY7*eHuXa; zNj|HQPW0gg7Md!CcnQf|j@sfPYK!7Hy*&(*P|~uS3Hd%s@hB;dl5srpZXO>&-V1Pa zgH#Y2NBSz_cZb7ViQ$hdjWN}MRg=bpmb6iG$u2=k#pG$B!rGHV&r{5`W!vsD9$|lOiF61 zA!>n?C>fCVC5;`eIMtPSMjY4iK#PRLnI;R(Cb+&J=^Y(U886 zrW-Wx-OKNO^LzR_dN6boQ-Uo$BETS1XHIPmd-t|b={w|bkqD9rkM6=gZ0b;CY7Crg&T$}KnFNcG@4&N%xV=AJm8!IfnU9XyEk z))o$z@W~GhUJ6wJ0r2rvK#5VzwV%75DbuGhba(?o!QSRQ>}_sl&5BiQ+O&z5mX?sH z1~e65*->&?=aA?v4MVdSIbsxF`{t+k(oLUb#foJtUi>o8Kf8?1j@|-TKxk;ELc>F$ zEBqkC8KRidoHl;}M;|kl(UZq8 zWx{C2R95lYqD9>N`5W-0pkdTl61(>xeThJ0)25A_aq34&r&3f@SMZt7f0mnW`aEC# z)-56Gk@K*2@26qdaNc-pJ2}Tg*A09b0VR21_kNrwpX0>YbGYL2t1%2{7+O!$jy-JL zwV$Gr3W{6}J@Al9!?26Vc+lJ3ODdZoop(TJc%CF9vjciSi7br4I3PqQLndVW#Cy6pt7MRW;!QEkl=c!w~%ZC%>S%c^{2iH*?Ru zf8xy3&f%u7e3cu%cq17v&HnZdqy!lVb~o?ihd=oRQWM;M`*(O`#ti=Q@LzfEx#!us zy^-zPcH#yK(~M$R5h9TYx@B_t)%6aHg<7wNP1utMv#L4!+I-J8B|tO zQeR&m%BMeMN9y}NhHmoWi!ZWx$zn82F1_?p<}XX%>UwqO2~roB6mcogANjztwN6H5$6 z+a}|RVw4&>nia64yN#8dDfakTJR$`0pw3H5g{BD{$K!zq{y=+MJ3su<9ZZ}!ma?J> zQcecnm-t>T6rH>e^Z)in{eX9sEPw^#zhod1iA2a{^8EH!zh!^Z9uPX;`sUY}aojQJ zIuIzN>*MAfCXJuK;zf(drZbpUc#jJeg6biHp@Z+SwY`JQsRT(+GT4YPSdTEYD2{7D zKRy@&OOFy*QIhc(O?};T_jJ)uFtBHsno(G-*qr`9TjLqgbm#;x%L3f3->flJCNw3-m%nb90cJJ z;Xa8EI5wSa8Md`}>`1{G*MFI+)6WT$!h$SpTFv$+|3tK{iFiJb48XDma>zpv$nzna z0p9`3A6Uz^BT&E*0N}{+;Spt1gtMn9N72&N1A!Mx`|~btDub?7kxnKNN}?Gd+-Dgk znS2gB7Xpc&a|i;ToFmD4xzM~!3euiW)V83e3YuHVcXv_bI_R3h)k0IPKG!4b2aK<= z7*tt?6}52N_hUFyFe5gWX@!B^NFpXIU%HOPi(d{Gm2ha5z;nU{K!qvIhZb<^ZN;5Z z8oF+=e}4xzed((_{mjGoL1C>jbWZ=oW&Guj4>H(K)8|UYnL6dJOH8+L(i!3?j%#RO z{LnGXbUn6aeYPd?ta|!c9)D~h!;hZMN6){2Yp%J9^Uptv6{}b9>XIdN@7PUOcN@R^ z!#ym1VIk*#EdO^aN2ly%@u%97jq0P==KiVI?~`tJ0z*+lM)%jQ*@c!pV}vr&szUJjkMvl!9IY zQZjU2?ok2#fNMk%@feAWN2)Kwpz0w^o^TXqVDQ$u4K(iE%GQ;C=BUaA#C64lk+pPm zr@8K?TS+TP9!16ruznTn>c>*V%Fqvc;UR}0{=l;2h7uU5BC@2Aj z=Y8sxMaFYz%jMVsv=Pq8=A|UiJkS&;&7IG!w|twqb7z4i!c;d+5Gcjo);1!grF{Go zSMt=8i|Om@M=RWmvas}p?%P`EHa{?Kd4n3R#*Lo?eWTNfYs*h%BSf z83If$i!iyhnP^8BQ;?*9V#^@qfnEwjCdC*%b_nAdhSRxbEB>qdNaeG1`ic%0w77+j zgH#qy&P6#A69a+7&8LVVsf^iJ!es7Ilep@0H&D?ql!cE!&F5~sp7z8BHmu)C+%gz8 zd?*V(GLO0QPGrV6zkr*|vwYPW7C-ek>sGGh^p9OkHqn7e9#4ij#~Ko$g`0gKeRM-7 z@cl!WufoGDBuGV3w3r*OxsImIjdXQ%^107_j*ne+CfE=Jpqp^~tjVAt(|--?)~(}- zC!XZl=U!lUb8}emONC_^1pa~1A%UkH?!E6mK7PfyG&Iz3$)y)^?z!jj%F8Qx^pPid z{`u$V?&?FKqfiJ0e&A46R?79)UrSL@2#zZG!J7XAQCE>jq@V!^5Sk!ReyDBG#JiO9 zhc@bm0|ZJQNHkD|5e5SvrE|H`0SE- z(&*&y3#_dgIPU?)=R4;A4{v#d2)_@ZnJ6X0W;w_e9xR>EwZVMX^H=zX{r&?0NXQB+ zAV8qwDK7+7aY^^IV`>p>JHoeb`5IsU=1l{R@Zp;^W?gV0GhbWHJ->T^ir!vIip$97 z^GM&vR3^#(G-YLFw6?bMjjw*4b*o?FySIFcQBx;C#AL$QNyLme1R9zFfsh13&?gQ2 zz~HGZ+i7fV=eP;uId10BG{3cz$6j2)#@+1%b}1QOl6LdBzDIYmYhYiLg}veJO`|H@ zQ{I8JA3%9(U_%WEI7ss8hgJU`K11q?k)U3*)2_|Yf1=9*GgtX;|K*VnTA)z$28?FpGvDM2&%<=ww!e|!-QB~kUAyq|9!2qDB36`$9Yc>q7&NkmhaP*0L{E}f)nGhjh9>xa!i~)n^VS3bd8+>hm|!)c7V5QVcV78gLnI3r3e3jEGwdu{CVprP$Wl(v#td9edaS?8T-} zl;UX?C<9#sUxqP?N`;R9mJ#9UXP%>}X%BbbeHZiQpFmmM1|`Tk`Ors31{j7JHk|6P z!Vakvkw}EnqEe!I5r!skrAIcOrnkQrsT8`Q9j-9@fGIKu{@pN4f*^Ffe|q8bJoV&L z;7jJ6d{tnk~lrSM-Gi1&t?6-RvOdo^drzT3rz_$6rRc*Co~Bob$aZXUn1+q=G)yB3y*cu` zdrf^tizqpb(h8FXF8mkLo@5^_cXtX#2@ zd^#J(jwt_-*}D%W2MVN*&~$7&#^S}VaQ9sga{UcgVcURi(lCA!qN;`^-JPUtgCsUp zfuu?o#Nu&0&!H%rBI#z?pGq&J1?+WqD@x8!TD(I_oy9W7Mb-eD<@~a`R1} z=IQ9zkBOuw(asO<_z^vyyn?UYaytt)Y~W{i z-bqJq50=o$1wNV)MFszUb)pTh0pW0+PADA{rB&F&YH?B$&z8`a1xryqvVyFU#!Z#* z%+g(K+zze*@miCXR2r>6W(*tv03ZNKL_t(O&a{a~*MAg6 zafh*EM^Zd$IK^h13y+%4F{fX`*0HYssO2)W71--b40%hzVIs zb1V2cVkm}})-r#{U`F6DL^;%Dk~CCTP&Q~VEq%R|4ynPeFqk}VEMphc6RR{a^%(19 z9}8dJM{CBT%?s#OkVyCcKkU7CfL&G9{{Pwgl-s74%%t}~dO{!+2_*EYA__>8rYPVG zDhO6onj){DA|gl=RHQehCV@Z-X{7hbB$;0Co!jpzdw>5pcP0rSg8KgR`*Hr8+{~SO z&)IwJwVvl$&mx;~@wGz;h+z}MAdDb{OLfSisx*paS5W9|=lLgJVA#xAtlhC27n2E- z58{F^e2#oyA1hb9!$W_3ghw8En1g2@%xPzQj-w7ah-2r@B_7Z4_><3b))Q>sb`-jUC_mzM@`5M6+wVNZr`7T3BWXMwBvBlxQTrCqRVl5lWbV^9)rS_(Bi^q z3q$L`)wIZ3#>&GSbcfl_YZMPS(|&ksxv->0MBKaUG6K$Qww8$PP| z-&^GLM->5vO>0{hr<{5wi{4twu(Aq1Gja^4pL9B_-hQ3yF1VDsNEtPD7@1CD_&()j zwWMW)?b&Yp>U#3M?PxTH5GdsZ$d42QgC+hYL+agAn55mXwJhbm)nC1WjskO$CvZ$&uFh#6rglG^ei!o>JX95T7 z0iZ?(V@*pVTz2huS-NRED;6zdXw49+qa}2A_XN{b>@dDGK$s{5Pdxn;4O_Nw}F2=Fvf)} zWTFqhvztUu7AKb@<7t|JT|g2mmAbTkE2$#yyL87p5Vk}p^#Sd_QAAly(+q%1U!jG>lqQi-jIx+dCZ9oT4`CSi{|36_ z`wGL*ltiL5?%2aUzr6>q;8R;y&rfgsDHY`W&G#6TX#6qPwg}|f3 zloCgIRM(UwUpWz*iwP-AzTYw zh1ZqA%tP1;+W7m=jD6XEAq|8Gh<-$IHERJz1e`GO_BeehL1VX~YSL_uzxq0;s0#eW zS{rEj+k^N!)>G>AVJom?0Oq0tU8EAh=QUlA?d#WYU}qadt3C!H_UZL00PyMcPcOT; zS^F}1Mvk38?|UtzT6@8B>FwyE&YnRmW+Ak~l;Ar)zUxz4TS?=fO6cpva|?K`2VuK7 zt^}kq@uk9*GEfvCAn)Sm^O&XxTFwkXUnWaBpCfEUDYb1XVm2M=6sfij2E|HoOd~KJ zR35$yt<7y9t>DnyulWC0hiLz6!Mtg$z;zWr_`y$@cg$R-PalorYHI5TGwaCXc=frz z@NU5)DJ>=ps$)$e0iKHp85COE$SFZVNJ=+vr{3|X8#|6UbEZ={qK2}nK}2nf>X1*2 zERo6(vUV6lhQ$~)WeB_0ZKh{qBjIF@4&_% z@OAFE>rXy`}g4+=l9_(iB7L5*YZ_ifv0ZraIVV=9?Degq|M zgeZA*S&r!BDx$ecmcP`^5)b-3$n5UL!Q!N&Cy|ZCkhv_i!|Q1@6-s$TYzW~H3Mq0r zMc6Q@mNpm$BVrCYrAhf=lGu2WA#}xRNVj$26bfkHXX>QMoO;T!L@FzSFB`L&_xTgS zITVOfXxYuW9dGl(qE&3|&NFh@NJfqtk2XyI8j8-a!A7?=hOA3m5LeE)mQ zo;@9KP+q`*3Tfi{1zJ0I6E3%LREoY#7lm9OhKvL)4*Mq4fchw>a`n;AP@2|&^SUoV zNkKZDp*7Kt+X+LeD>g(wkFU20Qqg{hAin58jxDw~oC6PbD3XR(HlVCU{u!qFJMCE4B8!Q^q{ zIs3p%Y1pxq7higo4QqC=@QrJkaKKn*%$Uj48MB!(dIX774^ziYXYPZ)=E`qe%x~}c z6Z79%%FtPCn%X9{Qy}vP` zz35|DzrEi%Go3M+iYE9Om5>tJu}B8_WnQQbI#dA1BT|hD**m zi>1##$)@=W2`9Q495PVR2yR^+%lEXBudC;fQ;uil-yQ|eLAXV@T7H6?DHLdjv(Gt$ zAOHBr^z|jkWU?5BB$Z0@{qKLD#qYcmw0sE3l~;X(gAX|b<@@+bp|y|WI4GrXT^FSk z>2w;;D^MsDa9xk~)>cfz#&un~x_Vfky@^@B&9YgpArU*eeg4Av>`tJYus;jGG z>eQ*YuEvlb(#Sr5hI}}ov3AX7?!WH=l+ql3+%a5y(ZvJz*$kOQ^pOFLhVuMic6;81 zt{ze?J9+Vyzw`8Suae06ibD^bOu1Q#x2hAlBY`X*3X9gTb#n{NO=+T)A>vrrGE9|%Qld!07!gfQKy$W$ zUyK<6V5blQ3V9z(Mrdwn<;p9rrr^3vCZDb}q|7L1fBhRUZbDG}$JHD~eUL=Z;WrOmN zGB~3wB+>HHfRcAT{Coi~n*&P(jFkvX#e5;jDmOUQl@IZ5ymXR?=cBd4m5{?=>z*cN z)mP(s9)@KB9{Kh*B4fv4+96115T1|lppeZK1DK02te|B<%a82_Di8=E$vbH*GfFm> zavYHP~4^6GDM z+pRyNs=6K#wIGv)u!-yD!PD5~r3@{JFm&i>);B%M{C~X8F^3(_oS8H5YX>3LZDnoa z9yV;=#QA5P$Mx6#4>#U$10~TI3zw~6^tg$<_0A&NIy!K*2viWC&>%2i(t_gO2VBCm zk)bb_WAnx~UfI~j(TA6F%&Fsn_&G`}9|V~A*vdf&2$_m#$iyUs6fsiKQkJjZ%!-yCe4w{GiIZ^| zK4cX560IDBRWcweY1*}eJ8%CTFFw17o+J#etRfbU(6VD2;gT?xo1-jjpe;c<>#()a zp<$21noWxkk&#^X)r%>wDuqx9zH73pxt04Kf1KBry-T++DTK<<+DCduFeBGAIR4mU z_@8U8;MkMq0UoaM0%;r?AD>hvMYtqF&dm`H894bYT56QmYVFF)UU>l`ly+edH84UCl%?wHOgaD(TRaaA*g1q%s(V zJcEHLRdpOVYy{=WZid(f6;=pKdE|3RLK4ElBkAPm>Fs3pqzf56YbLu}T3Ph=Lca3V zi}~?&|3lN(Exh=*r)k>RKv!D_2TnMUqvp&Y4gP6FYE)%1Po0{d5mPj z;fFu`DW0df=37@0i3Vc~rG!Cs!uT_`&4!?tTTq`vHIf2may;+u6{}+2@?kwk=yR49Vq}U&g#+KC`zD zk{|rr`(BRYvv$q8Vhe%)FXz4oZ2%e}3~W10M_XIb@mUdxmD0FtH$S}Vb~?`dBHuXc zT#lY~D6c>ED24Vt3>rC(^{!+`KFx)fTm$tr=x3fpYmMu>LB-bp-KE+K0>OYXLW{i$ zoBnRlaKvU%T?KXZ75gb2PCxx5mMvR??>QKz&50)+%dy8DJ@ER6MbiG6*7AK!tfwHA za=GT}YxvWj9>Fjy9LEdf>B8FwV6g|v-??)R<@y`0<9pxzA&FEHAq2J+MhOE~6~Hrt zFJu~6qMW=3tJbaK-F52#1H+8ak6x=H11`-_(Qwx#Xr>9;g&aL+w|puMe=NI1$@zxGuI4XVX=i$JL%2Z}qRpAgUn^yOLm%0ixd;wg5uHd0bs z%bDk0#@LC|XlUwS;oD33&UN2mSMzpy`{267{m7H?=Nz}#akw9lpS1^ihpL^>Sy@XuX#rHj=6~@;=%cLMM z1~yF-Lzy3G4!swHQTwd(VvO-LWtHW;_VQ~y@s}qNggAQM(Oi1j#R#ntR+0MlCCwYQ zuz2YTMvgy_KR);nJ9g}3$>L?KS-qU*<~<-oRM`GML;_UuRw{A*xF%`RYAnGNV_i0UXpA&2?BQR+{MaO zD*(y7qmNL;$2ic%o2j36CCcT&aA1MCC z-m^()5SZYH@e+#G<`g|?XiH0u{K^GbM;#N?4l0Yc=oK2@c!4@Ujn4NGmV0B0ff4AH zlmrD~OstecSI2JLz8)flbTAM6(@6lI0sx<0A0Gq=&SN#edgXwobe#4=8cOXz#;6ta zw1RRmOo3PM$>tq|VNp<;WFZ$s0_8&{i zM%C2GM8YD=t5>wghB>*3e(eQSCdZk1_2N;FqUOM zHe)~Z{KFXxtvv(=p66kiHt#H6%=zbD!ZXi2LAV4CnSBtJ6~=WPdhzK6LOO`?wgjj6 z_E|vtK9gq7p>{Vtw<>`6X*<`UAnnaQM~Rs8n; z`)JF0XkiQ_aK*`s{k91I{ON0ZAg^D>-~}1#>5iqO_!% z&SZ!@Afgd`UxMpWU0F$GStV*#Yd$#jU@ZhM9m%Q~1bV+Jx7rL#B5 zTZ@;m`n?TESqx3S!m><;j~L2ljy#+hGp6z7v%f_B;5yQo6v8kFg+j$uCdm7FGHwn> zIT(h4C2hJoI`Q0M-?0o@RTvmYB>zRBFF)dyV1{rYii;61_96H7#hHj;RyfQNu^QY= z7A0J)kV)3|$g42nzH+uSDH@t`EZ+tlKxH=0!BLZ$gKWkP3Q;S25q=-Btj00~+LR%YokNn~%H*(4` zC$MbACK~tb;_&Iy88`MI7Oz@PPqLd>S&V3Dm`5Leh-HgbaQ*jhW$f4kx$P%EW>k4C z|9jKVs3b%wP+K*GV=wqJPrmsoZ>(KH(zLkwzPp$?VjLv}m{2>EWeeV7Nc~`@--B;C|Z$)FmTJPx7)!V*F-VstGxeD`{`ZrsJ1wd-+3VBMT9qyzc8Y2iAG z+its?RG-iHuKyMlH9@%ZRKV&Udf0gGyYCJ!VzN8DB(z$s`7G#)NI?jokAv$;}@w`Loj~yFi!i%rTp&BUvc}>e`WsK zRa|}U`OLfi2P}L3B@%gu1&bCiblPN2IOAk~{m8>)vN@*BI+){6IF{x;jjUX;gq=IK zpgjkC7lnz`fjOmRhRAtdu*al@lm=2oXl`o7bzMwLWAyK9B$FmhDjIT1wDQPjGeNt) zV8A!w{j=GG-~%U0|F$kKw+P!23=zU}B)N=V1XM&Z2Jh|Z?l)k&^x_NIy<;c8`~AI? zgen8jz%Y@%Mv6cpjS>SB<+Uhw*=vdRoq>cqct5x3imnD!AVQgev>I9LElqnxAB!h+yX84#m2vBBKj-|W7B+3#0#aZ|P(q;fURyiY*BC+~tx`HV(p+-sx4GxH zck$UX4hd>9!!JHVO>bYCMQ_aqCyiUkU>Oo8mnRyDQBo47ZPzxm76YJH(0cTr^%n~v zie4ZZrCko5J&o#`(xMAH`!N0=%v|;*ZG?gsUwnh7pLiN6C8wW$I;Wg`O2CW;L*;R@ z8Eh*OJUnecCQsY?EzE!YO&WH#5g9p&S%)8wYgoLtZZqp1c!A!go#b*IoHp-B4jDCq zH*-K zFV>Y|I+9$vKtiY4C?q>`85{+Eu~$6UBEkN2eGRghI|`H5mL6{Y$;d03%VuvJbq6%s4S?8 zPo4ih1pq$1KK?aOh7=1x$ZKeg_tNJVkTDxf9UyeM4EbaqUPTPUFbJCw9POihh*p;G zHEGTlP}u^dR+y~gp@hIAFbz~nQ9X1h9f-g*Fdj!HQ$!*)M$nF zoW@%(z6^;tUZMxPwi<*a?|S&2LI{mO5A?UGe^aVhtoCp{g=L1BzhEI(U41S0K5z#I z&pwo)wS#GC-ANdWbik*efDjg8Ly#4a_Z+_P<#YMpJMW^ptcr#$TY35Q1w8)vCzJ@lLA1COoS93RI&Q zW5EF>Agu^7D?-YL)vY}&X-%?DK?Bf3n7m~ou(2`OxO^i`tM*V^Ta5}^6kLyWtJZSs z9Y1I3rfn#roU%wIwY7tpFn%(1l`*Pg1~vsYY~Da=S%jkwI*7VqBeBARdFHicxUv+} zjIe0&4wkOiK~6b{h=Dc?tZ0~$NJ-Fl?75hh!7aDk#Hpv9jA;dgW-{G}>$%vW2-*^8 zL*U_($|lJ>1zbN6T}lm3HsIpeSK|3GS~NZxd?zUg=+%-;(blZYGZ<;daFitE=kP59 zzsBb8?=`b#$rkoF(A*7)z5x4AX0k*qn=vIOL;WOXvViGJ6q1xQ$z#wipe>cBDV<@; zyyH0atj|(6buw{JF>c%#>PC+#u5lj<4tR?84O=<%!0BA_&2O`A>lUuM<{H+mejG!< zVMiaqIcIzhghNBac1laiSn&4StoZWTTz|ujoOt4?T>iDonG&g>WA$e2ghRBll4H*P z3WUQf+pvbL@33gyN>;2}#qd}S^JX5(lJ+f>weLoihAFIGgPSifW8xI5>?od6lnt+A z{J~Sv5rceKPEgQFR@9*!T zepm#{wDDCIAtYrLVam#f;kX{km!Ht}e{X?lnq~k(>HPsBDf{)B`k(y1-iP}Zcv=M$ z3X~Cy)6@IJ{STG%@9*N@+_DFagCT89Qxw}U1X9B2QKLBGs5wlUIECrcr%_)&m{B8! zv0=jo&OYnQw6(V&g&BM&<>God&b{Dl4xe){x8Hs{ufFhiF8Ri1p|85S*mi|*FWqU6^g@9Dt6 zt@!=?pq;w_03ZNKL_t)2Ezq9NjvYI2U57|0il^NoHF;7%JL}JUH2WCLI&Sw!Qa+wri)53G|c)qvK zXZi0)i?!A$&qq^WULx&FLhVTCX(=zd0 zH*j+ITx`n(UqRj@wPh#oy!8$ZyW4P;M1;d^Y-nV~%k$~zO^{Eg33&;IkYV=7C>NeK zlxS%R<-p7_F73AFuxX=M^3E>0T5{NVi&e{-N%W;z@$U1yw>n3v*xEkGgt7G%3@fu3 zS7I?X7Gi`Hk0C7qwe62nd;QL@e-M{t1^L(O}W!!hqgS@-+ zU2HSLWtV=9*|QG84CY=!Uyk+ftmer_pJ3g4YtUwh1e%kNKA!Wxd^V>ZcMOJhQHee_ zy!1MMfAr6EtzJ%*DN&wF+I4C7Tv{m5ilz%mk}$qu1?Im>@3rdGE+Jts*fbbz7>qLv zDg{X2NBBOKz>qt zItodjLU)dk4(_Fv8f6qG@2L-02O$(VKA0ttlJvIai1$EKH>4|SIQzQmVc2j83D~@f zjZZy9v}GG5ZfYRD^&eBBIAIVo3LdChq-X|O+S0r(UE`1Ja>iwPe{ z!vFmHmN}+8NU%~F)Zu-1o958V*Rl|qTySjl?TL%?Yr63gX ze4akn!Bg~4@($*Ze&WLaeGCS{+}W@l;n6=m!j#X<;u{xynTbP3QP!KJJQikWPYa!B zLYNGdrBqc{u)4E}^Upnx+kf*LYO1Pe+_8smfBV}kUbYw?%~ASj)~?;i;Rnq^xSC<( z#xbmB2&`Gh^LO7(PfI5Y-rK-ytu1t!7DQqcqGb>k$dJub3tnN;;2|77^+1joHwxL) z!$C7<(!8?+;sqjDWc6OLVt<|RpZFJPEs(-QYZD)XG!6xFbmvU6(!#YY3cdv2=h%5i zbI2jHxc!b_GXJglNW-S!TI7&)VIc8|;IPJp1LM%)`wXqBWJkJ}jR{zP5>^rc65uWtgmA`wp?NL`N*_ScphCOeUM5w=2PnY15fBc?{#m zkK)Lq4#TtpMpOumG$h*5MMg*Bq5nKRoatBgT)y)dei&<1Smp zx|d!5fZsZ9TY_4ZftixfS92SeAj~dlc{xD#PDazeSv0$|<33&70&> zeN-7SHg~sDA1lYod(>Ceu=(B9l!R<{CfZ4lEaQe>|B6FrA52+kj6_e8b51^$ljj~q ztRzfdK1E|^2T#8;pVe#E^Y@pZ3+KPdowwe_|33Bz zFN}YeM9iY9ekz9^cQTD_J#25-jgTQ$E?L5Zcm9&kA9oao&N+&6K7S_XoOc#I9dVYg zT+Ov`>s1uR~?4BzpKym26NM;bIYx6-hqk!jPXU>1!GJq1Gs4`%S-`Tzi+xVI%A zOB(!7PZJ?N@$()zx{f>V{9n#L?;^JEY(yY2O@ZeL)IM_hj{@)q&ar_hBSlDCNR(8_ zqAEaZRrG%^0v9?^2pCfC{p=#}u24#UVmYm5Z_yqOMHxGGEOm8tA6oo>9JX9w?C0k5 zg)@(5_wGh+x#bS};(b_F6e;@)S-2Z5!1vJ+DV zYxmK={F$ZizKha67k%}s%$#u`T7fSFzMBtvr3*eZw=@5lmw4vY1+3cKKzG(b2}wGa z#v)7}g(V=YvkWow98{Cziu0yWQT8UHJj+k7Jrt2`ptZq6=u&zMaMPV{QR24KxTX`^ z>%;)6Y#3i>Fs!nK!KDVHsw{?-7*t9{nQ+0;qC$pEy{x`?yyqXh81pzXpBKs6~Os=xUEIQzM%sPtt3 z1DBMRvSz~u?tl0pP#&}9%;w^+UX1K#gi;>Azw7tB^4!bRRSx2;^Dg4ZBaUYIn$`T} z!AE%G?#I~i#xUl zTAKNY0}?-nba=5PKr31RMMf=%h8z4(~V6h23ZVT43q}pX*78%WGT}| zjU&6OgJpYOCs!R|eRl(kcCN%j<7*G$NisUiww>GPZf(YNb5xXC46Uu8sysxZH%@z3 zAKh7K_9Zogr*Q72-(bb^{G3|U@AJ|ZdP@?;e3$+_P+ zN~L2lX37*u7g)VyIiPU-V0@8bn8e*2uIC~Ro2;LwJ(VSbL9bt+xvQ7Tt_UU$RqZxM zR!`yR@zd~k_pr0Cm3%hKj_o^0^mH=5dN6li_XDC46M8!#CScSEZn)wqe)Z79-1*yk zcy0bGG@jMSFYmaG&z^of!ZZVeK&8-1{@c@tvfiFHj0HFMVxUlbQ z@?(CuuC6XZA(JUnrZ8#Jft+x{aU6HTJO&M_8u%NlRyXj<%dfFwnP2Fjr3_^uYcD*aHu<=*`7+sXQ7k!hl<^v4NEqq|lP^^BhX-F~<%$BEH)oK(!P=$ksl{Wg z4YLlcVpM%K;aHe(NKhW}iIAd1B#G!8GG72Q0_PVG;v%Ez|LtZ5tQ3y2qiG0CCG{j5~d*A(?vX;M%otnywl&r6DWC{JelGs z<%DYz)q$s#76yiZYGRbzA$DzVAeG7hiW5&hsW=EjVHlx6_p7=fvz=7eW~yQu;dvO^ zLii!*&68=#5bh`RjG|Oc8buG1_u*Ij8XbFKa;-U9c6!9qu&V%LPd$+_=Uou|pS})y zUU{0nRZAG`WiWgn?!1S|)uqHj zHfdiGE-%OL%uv85TVitVh39kK%|An#CfQ_~?|ti9o`2yvzz!xJI0}T#x|OTh)!4{k z6UMXbi6>eA+N+cmJWe|8G-6X`@{dF>sg>`bwHL^;w4k@Gg@w(nSXyCY(}Ba%mUb#v zZlZc;JFjiqP8^GZ*xRipJ{0+s|HhK=@rx&@E+XNs7c^TK8qA_ZPbkfbRqxTbtDz`a zhUrHiMy#fq_cm=H*V6@=EPkedij>joDVDn)GTTQUGe`ooG0?;z@e%lhFbFB1A!Q{D zEsK&!rg>|_QZ~k$X{84+f?2mka4Ci>oT%h zuxZC89(w3Lx;l37^h=LpTbfA|4&>x{r?6*R3r8L~hq@uvxFV0ITy)XGUuli6HPvMm zNNM0`MORl>fT)`$K3-rE><4{@J-t1_&p~z^Y_$GLL-KDgSRsPu7cGoppQlFJVT4;i zYZnKBLp9s9rbBxOCCL)OwQZC(F++m;AH9#iJ#rr}J^Tn=6xeRswC8;Gv?gguWogoo z0AkT7y&jC4Jdq#YaSM^5b!=Lb5O`FIdh=gOr>@dPG z*w)iZyrqLVqoy$K&_h_W=q*~>+VKhcl><{RHE;|4qI_2iNNb-$z;Vz^jwq5&Qq*S? zOlyx*DPtTmV=Ccrm=|Aq9s{3BPw?`czolmP4vcswvFdWlrcYw*b=Pt2HP>*^0aLm7 zoBzYEox8dC;;-?eA6(D3uKRl6vnKdwrrjU2NC@V8OG5_Fx2PWv+6lxbs!&6r5czyQ zNTg%{SZUpF%p~@6%!XjplH)j-W+2^9^!4$rZ(Yq-E;^rK!-o(K+n5r1;(fgI;wwD= z!YeFZyo^Mm4=0~5wg(s=nq+U=ww0YbcT!hBYk-9xHlm7CzVJELY~MvT>0p(G@biks zh9;8fH0S~m(hSMDjP35kUO1l(FFcPPR8Qpr2XfFCz5t^~V~-lj`RAO;87G~<-=2Ai zAKiKzt*vdKT$Gml_BZ!1dGb^)x#V0#(SIWvHmR$t3kn0@!}Gik*IkEW@PW=P+cTMv}I~G6T@n^MmOPrePor831X;zo*1MU#ssgTBWq`eZ{zO<2d~A zBLHw*jbVLo<%&y5g&B+p>)}-dG6Oh~nr*rS}H`lpEOd3MtvVaTAwa zbOqbKdp(I{8(X$)2{x+l;$(9u&jsJ3r>hgs%_4CB`*5u^a9xkuK{d>teF))jn0+T0 z?7zAK=ZCR;b8e@?;6LggBLIrO;+s(tz ztYE|TJopuqsSq>D9441(4lIYUWd@_GN(h-*92KWf$Y2VE8S*hr4>KeYQ3(Z!>XD?g zf>tfrtg^&$DPR_R*#A|KlxW2OiS+KfD|q=IuP|}y0hq#|wyK)$?rwbc7Wm2tjHZpE z|Hgj6s1P6TxYdEfo$m*p8FhndSulSQPdxTGI6mi`^CiA?!fB9(m9M?U!k6D*!k7cO z{O4b%wX=(#{_Iwsc=2Vrv%Q3iZDgIQhbWL%SxUnd965OgbapYMqk{uVN+`8$GD5N& z!LCAqcy|idaj*=NWG)*x>H}lPkL9wjUCyiX7x2#f`D}MmB%D0MWr*>Wm6SRjLP1EH z3>{P#5IG@>`kFBue&mq=SQtTzh)98KCb8=+EUyH$IQSrrKI8Mev1KE@ z>ApaPfW%XNu_-keK5;^#Qxx+S}t-bn}q zNFfkHmtF-yL=hA}h$y`mDJmAQqaOqXL6oM1ZXiGciWEcWBqXGeo=w@l`}Dia%3@3;1RI#;gegSX!0p$G1x?1xx2brf^? z=u$UesZIMqyVtWqz|xH?$qX9B`%Md3*s+Lq6cQ`am57ytK@)ZdszM@6)bH#_7cEni zQ7BSO-2X5RJMuXGe8=xN@PNHJ@x*=cDw8?k%ZDN@O;s`lzF_=LW2vp}ho?(~gpnwg ziL0na;@EZ%TvRTVP%6Nf5Yz2#9rs@tW60<8pf$o4pZn5CVWObdGT1;eC}SIijmENU zI#n4Do3401eIW>x#y1tbu7JkIHJp9UIm~?Mepcnmn58QjHfS(r$Z*O^k#=2%4C>Fc zefDA0=+TVdZ4dU|e?P*&FHg9mtJ${~4S_ z^td#)G53Lo`SJBXAXlAWmtA*d;j(oIX)}4sJ{)u4!88mX!W$pF&!Y7!xbGhi;%h^b z?~|jI{vemPcWSQ~LC)rSGi4@Jd1*DAr$kuoxqT)aR7^(1qloqTlcaZmegqxtH zE5~hj-oZbgc#=V>8V1=ZR=xTvT8LPgTyN)tqhg1ZzQJ!y68cCBEMp9g z<6w+o@scHc>szPu&2OGbzq$+(Xz$GN)KfEg=pT>p;=foRuiSOyFnfRx=*e`dQ;vA*|vsA1<_MsWT0SF&vRYF4dm#At(btk`Mg<3~ql z8`oZUHU0W!FiPW!1b*ZJjO$2nTw2z)f%1Wfa{c+lS2CU-Nf0U~PMXN>yYK#~v4^ib zTq{8sv`G?SQX%?cv9G?4EmBJbyk-UY-^VNh?X& z^H{lb38`d2g?1LGl~lqSs#_fT?NUc}WIqbNVdaW;o_T%_FTV#1RzrKx0M1x~Afz_s zbKF7W`NB{L8t0KLwn9fMRszx~aBaxcN=RE#9B4@hB@~k=OOiK+sT*r=#@~Jgq^T)1xVK+ z2o#|(c+#-CvxOBMCF(~GrDkA%x)v{|>HVeD^sl3$4b8<;1W-VqL~x6k>a)#;5D00b zN%Qu~l^9_Nr6#Zqha7nrm;dm3gqtKRmH5&1Kja?|JrtqFT9HhosCY#LkAwaRZWj!X)d6TVNS%0v}RVHAO1#u8a9yP8WczK9L$SM%=c|K;W%-cPAqp(EFb z?OG@)Y3^!6c|HUC_op0m;fFpNO{gPbAxpSO>5xvv%KutXC={b!Ln&iX%J>P46S>aL zP9leN3-xKlv~75BjWJk`1%4N9SfU?>8ba!vG&nBBa)JI9ggPWJni3j?B#<_aogxS| zGiN-@X@9+olfLwIW<2yDjlSZ-A}cfK`TKq2uWBDN(-KP_8F?NIP=S2jVc07O}zK$3?6^v3I6-u zd`>>&OisP{yOeF0TYh&3Gah}42WLOYoVQ+Js_UF|Sk81g6*nH0NEnZl{Z zevzZTbUOKsZM=HxV#-*A$XHNOf8;dw1q4hSP=qGL$D)l28+D0xd{dYn)*yF8C@o;4Q{1E$Lp`di~oir58|Bj&!DVIT=xANX>G}K=NbUfh^P>@s>+<}Y2y!bJ=4$|X|RByq8%jUz4Wz$aNM zkky8rQVH6dH&AG6W%;dtp!2min0W5Fu=iek>4f9)jpm&1o=+G?{pih2?VNG?nLIu7 zpNtth1Pz>h_SsCIKAn}TmPbj{Hddzlc50hGmBzkp8(a7LdR6SNz3v*?+H(BuZx2Lk z^pXAGvEZ4J1iFG{Bzx_(2WOmqDkq$HG{Z*>#uggGNKoHQ;k>l-o3wY$ofAYi= zPtnz0A`A_d)IETLPzr@2RN*#j8fdN2Mp2WgVak*#)Yn@*Ik4CS1lUd>x_dsQ;edmt za?LeYarIR{AfIph)Ns-eL^iaxAeV0iBd~XH3R_yd`PTc~^s}2O77Lv9?Qe74l~+av@{n zTFD0$JfaG%)B)*%LueR1l3n-SgTeh=itVdewSF<-oDGaA4Q0cU1dqM=7XN*_m5p6s zoFSCMBu*lY7lwrRbd@*I+?->;KI73@i((_B%8;;uDsVGEKR3$YgdHV;0<|Ic?ZdE!I{4;amZk3GTk$DU-_y43`Lv}_#hGcaAn z-UCOmdqX`FMhs@us9~fBH!y6Uy}*)G?KYnFs%k17ovdry$l6>pooJG>o&nYU=qly$ zjZY$x!PgoU_>34e5-B3dt%DEPjeV#7j<>#dI``gtKeL{AmbT^!LmTR8EOgNM(hIl^ z{V-vfFCKY#{2<0`AtwOUMX>IDOko{vQpIy^Lx+doR6-O$xUr*YAIngr-y3gfdUP5P z4pbza8@p(0h1L=j8|pdi+vj3`;ppfrYinfH!+$}qSU^8rM(7yqR8iNcg+K}ifeU4W z-(IGxIRsB)<07PmkP4|SjMDgBMZ%^Q>>U8W4gg@s*tQCH_r0u%)WEySeniAJ0ymRk z@YvC8n7ecRVQJ43x%d;`VAR^pK!|HB`V$po&j zQ3`}MxY!6n5(sup)^fsbqd0WT0QMeTPo>mCXQxkXZY>C(JtpqKqzSw8>~k}bLdNvJ z-mAzEiOscjw&OZ3J~6wXr#@n~2$VkG^RPP*Rk5WMghnB?Lt9rXk`$T>g9Z$szN#My zH$z)fBS|-fu)qsE2K67rf1aAns^zP(L?ZTsj{jcK-NqpSivUf4VQKqX>`n`fA?Qi= zETnMI0*nsPu@ZjYK-m}_yER15@|R9Lh23`@!v*JGfC;+j-;gELWefqH?}H_=97%Oe z9c8bG(h5aH_tz>G#j-S@u$>5asg%l;O8Lln%!*nfthkJ8Ok_J&E_o3EU`bTiCvg*s zzSdydTvikssWmASLy|V5Yg1GyMWtMzgd$U)BAu+O*%Z)ga$ z!j%a^1&-yQmBVi1#*=R>_}&Nj$G;!ug*h*fZKx*DJ|~=fGM8L&IlJw?D>dm96b;QC8(EoaqK!OCSRc!H z*}Mx{#EF~ZQd zQ2oW@Iq!RC^XlC9cxJ{6y#D%|%$v7}{SF+DRthP*_vhB9HX466lEg3eV?$Puh-q14(%O}{}fcm)0G264ne`*Fkp`*GSa z$8g<^H}U?WrD&zlI=1hMRq3@+NU?1pnv@c)%8VE}jER$W@0MY}5^QppZ9Oo(Yi`BDY~fN?A)z)1$Km-GUf?&sy^D*^JBL&P60T(Ge$&`Qr`sA#I}}#Yyz)Kj9F0v7SMs6UTtIa}Qp93>w(M!Q{7Asv zNO01ilBo6ys}>ttTR;u0X4m7tMEbbnq8C>RgwH%e)2p)?CwxpL#ImFA$Zp#|goV&H zgpxwLM|)!#sUtCJLwx5Ojbqs)q`)--FPHC4D9!d2Rd$RW0Kos7BepN~fX=dq5D_IX z5J_qV4P}F)K?Hy%EhMf<(p3r(T4Tl5%c*`@G9yP&Y-+=Fl`tO2w2P-D76#jBbix5b zoWb=lY#=OO3e9b_EL=qOsF8?%)hH=2N+6sJOIk~e=`Y#ykb_wC!t>x2@YG2IHF(S>O~QUr;usGMyYZ0Il`);0!95(WX^KIc4cx%C&+B$E`&9zXiwPr2*X z+XzvZP!J%og+>J)4vG{3lhVUEW$y`0t|>Elu!VFxNrXAFG9>I=i>*pHscLMgsjaFZ zS12Qp2&1465MaeyCQ`lcc0TB)SVn!|rVj}6nZsET_RNb$_KJszD9{o{5*T8Jg2J+s zJoC?|sI9AI&wci$xvPWrj&?qL{{xmT{D2h;7ext<=_U@#O=_C58<2{-9wF*)4|U{$ zEwQ&a(2cawJ+?S*{Jk)WEu=&l2bmebmrgyMSu-rPCV_74bDJKCgrE5+K7NVxbF z52X~!fD|^`5ZMNyv4lmorW&L`NJCpk69|Q{oVY!pR|`kV2*J)5y{Nk9c@dP}CxI81 z#wb4uK5RQi;^Kx!(;cnJO)cAmh%>H$gpt%s#jdq!YAlazwZrHGr!nR5V;M1SH|iP& z(bd&OYjYzVxi0=QXAaN2_zJ5wwt=!)w|Y6Ryz&ZXo^}e?{rHF6b=&PMU%8T3UwDaw zk2#vq5?F~0D)g}2B=5cb9@kuVJze=C4i*j;Ha31-VU|*06pYgvqU*^_7{x9_d z>Y@Z91eq2z`$bwR9VlXfJ0rKa=gr4}U`87RHX7(8;LYM1JkP^Npo~wJ1Q}`JgbGK4 zRstg=w&jr3njl}K*wjRo2Y4Y)wwm)V_%1KZnoV=ddLDoLDfZic{HLn*e>w{!0yMQT zF*RLB?0{`7MrtKv{f?-w+qUgqCpi&=Pq8IsrBWf0NHBQN5C9q*o4EJ>e{km=f2Ogq zG2WAIT*<7&=cA(6Ev;{hi|#olboUnml#2S&H*BnM!Nosg@#;LwSFWO**CeW|>FDa< zEF1UaQ@G}` z%Xx3%avqxg5U$9gEy4Q>7IW5F=kmmp50Od3H@DpHQRJVw&#zZVw zW43`!(ECn~CFob1;)d(5B-h!>tXa?ZiYW?#5E1)H8^fp(JMo*}{ECxKJrZ;oN-Oaj z-^a~ufQ?N!8*&88H_}`d*g8X3M?n9vyOTZfiyS&_Do_3WE-wGcPnq%fa~LB~0z#sF zER6Wr-hcX3;`_D`3MoJdb{)SH<98dgNf(U#SlCN{%B<*3zEVA2H-_38$<!waGJEC>-ktk4fBMyLSn}UD z*?H6`4m;^Z0#euD;4Rhz~u`8YaqeGrxaH?m^rSlPmJ&pyplk3Poo`Rgba z(*(jI>$-IMkT7}rlcNDae<5i{Garp6!RodW3znDJvn~&XC}ES9CXsN#3nMEKHx(UX z1&j8zk|i4qFSRJ%L(oZASeAn=y9IhB(uhr; zF!4#hTK3%k!hj`A)Cyx+vACpz4h{GG@o&t3Z9cWsan-q(v)hPW_+ZfjZolh69(wfe z*eL3$XJqXF28|fTxT(8v#Nmgs_k<}V>Z+inlNQ?|m8oH4%SPUt_Xf-ExraC3oe#wh zcE+%~Q^%l0boTgFwam-s*jVZyCj_1`XdQhvtu$@T&0PQe>zIE3bS}Q|d`>;}%T(8Z z4&dPZr!aMoNz8igd7ggeS!U1v7fsFUIcV=`jNfA%2!)aon*z{8u=Y*dVhgFN_>2iH z=nSbegDaygB&=9jQS{LoG2QWLyfKXvwR{u=tKTb7Xa-RYL#FP_*fUOt;e(-4g1NJp z_wd~eql_sVw6Q@cgf!T$#AuDM9grDJYe;8fj#3d^OOTW{(nz$BNG(w+Ael^(kQN;+ ztz;@?sETbqtnOHGhZ?{R0AR=XRCHP+sQ~3LjOoQTUF8Zjbq$b+#XY+6w5(i>v-gBZ zsa+dF4URPU!jP(~p_t8r=i}##kgnbY%@#spC0umMK@RDUwk;@@V9gq2xdL@jkfyaH zlr{w|SeeT)cJy%QUju6zDR;F~sCX2$A~Y5TiIfVXKL6@XWJM$pQlgaN!iz587r*=& zwqh1a0CJMr&up&BOGJ&*h0v+O40+b4{ov14DQNm}Q z7f>ve;}0mdnA@Sl1~PW+SSpoDl$?p)eIjI}H(+(EbW0h5azQ|)QXy@@VbiAa;oSeQ z;gqWSZ2oMgoGsj0>oK_Zo8`Lfkqe94tGuHS%Tr4UNQM|k8{ZzPn0 z5EqAqOO|lKC71H-e`b@;WVq_*H!=D6qk1vAxDQ=xg(V|Bhl7tggh%)OC%^seZ>g)V z=fVpw#IYmMIz%rsu_@O|AuMn9>}}f~FhnfKmE~5n(fELkMU8Z^Djp&zlN2HnkrEct z1d-cAt_U?5RH1+!MgmBaCr{+i!wzD`%x8IK=Chpn%`=#==TJV24zV#&8u zJ2rud*4!t-FMfYFiAI1|A8eXIDxzGkXqf%i*Mx zzr@H9!?vm*VGD;3m#*aYTW@Fb#ED$+z4JK#+>4n0;DZdv)^OQ(zQ=h#_&&I>aKQ)M z{m4T!x3qBJ{`+&t!Czq5-~kXCumx|tG=~T7yq7or`z9Z*UyY5;r~yMsnlwArWKe;} z>eda^O3BV?hmq+dR=LDR9gx$|LWO1n56ymu`Xk4(Q_VnV|RNp@*{Sy?Io1 zv@<}3)a#JYwpdmyuqM|`J3d8|zzC}+7VWv&jO6|IKj6IcF6OSg?%~1<&*PM@9FKIM zs@CEwUq6PUPB@0&{PKUf>1RLTkb@76f2_M)Qi5PT?Tv3yo$w-tuToI9Fl%!-UM&1) zeaxPXMG{31mBWFYVD-Wlnp>gdfIVh6CYv)74B;`#9Q(oQsT( zqDdhzIs$gXwhGOw^H7nvwm@nk)@1zg0}G^`BuJ%buY{~^YGat+-9u;XDE;pM0CtRR zxtfTmU&&+`bhpkfSZM?^wio`S%qecd{0_nrV~LZc$Ta}A*})C?FvYjp-nCA`jd z?15>(M#=cRa4d{A6hnncB%)0k1kl!j$>*_j9Y$!31W(E+(e7+#SWOkl5re5LUxo=I zF~MaUn(?AqD@H`NS>5+{H%0xkGCGYh*s&+5CmgDMz5>#4Op;yd94j9g;5kshH zs7E*nq?JT@<*2vn|0g4wFPA_oRH1+lRWCCm40{e`&8K8<+dN{rpon{BMI=t9v_oD0 zksN-=Q9M24aXwt}29U#cYOpPL3)fh!!pO$WL<;@}87blt^^3Z$i|aZR3Pn0QJCL%w z4JK01?(UiG4jId(673!B@!z+lH~eLnUBvkpoP+0uQKDnZo@CD$gB4R6`vx+;ACU!Y zB46H{u5Ra@d2e#|&A)^Gbs#ilX`zH5jg7>LXuZNk*pgur_TsQ8!2pz>D6pd zf(YExK8x0@<^7e5aD>IhS6s$1#~<69{P$UUD+XVLHV9#;?^nmqZ@PK2Dp<^ZiCF;Y zL=vTf&)n{#feur`LI5r)1ZmqQ5hyGb;2^Pu!V)U3>{<~uQCL*UK3N1*LTYOhoN&Sk zJUR0j8rQDp*=J`nez$L7C+zLoKN!(tTP5N)D=8$~lbc38*%~1Qwq^Hf0BB-Q_}=6{ zLZ4vzKc3)%3ofFgqYK+kf{}#ELkedTot3S6f3c}LeHi!%*QQWvfm8!yCLTcEb4XS7 zr&6iV*|vtTV-re&N}F^l%a)BJpIkjMvBrZCYytpA z8UT8m*UV_M$y*K|F_54C{3epg3{O1%BwA@IzDG8l2MjIc2i736=!xVG) zO>0prmSdI`5gP(TUSM^F)RMwcB}`{04_|c^lh>ZZxbwfq%|E_|wnC1VUV8_vZ7dPl zw+h5ITkVb+GloMCIb_?PeN68j*lhC)AvgKIZlERz6baYjSkxC~Cf(owfd?HF&>B@8EMVCtD1gZcJZ z-{rvl_UDbcbJ(zSDGO%J!p;@g)vlrv23Q^K)T5Y0f&?BrCpC^J(;q=YSSD!58~ZDSi~wIxf7MV3$^AcbXF2+PI@o6rw>DTZhq z$3ZE@8*jYEcfRvBcip`YS6p!^#~ynqMnX0VBX=5x<2dYhz`i|+yCvd=-_`{bI~G%0 zTZ+3oUFh)1H5*(X>_lWq+p{ma0XSnK24gqFLJRN&EgzQYY=KSzg@HBfd&d930f$9r zbmI!jGaf-KUO=5~W6B;vgi)(&4DeeBWU2<$DcQKZ6E6?0ba3q`#hb z{P-s~kV?Y*_m^_sxfk=+>u;l?x^P5I)M12B>X58(8D?9YGI&bEW#kl z{A|Y|41!Or8E#)1CpQb!b?@<_Elxh=>vVOr@XX9d(Ygp!uJ~}s^}$wJ zp%HO~I-=f6OX4^-VW=pV%XnTH$BkM9x~m5Ch=4_QjGpIFEEHqkT(LzlY4-E8X>Du9 z^E|Xxc%DxXs0e@yqE>`34150heu(S3*p|&cQzvu7_b;cmzJ_ddHQGd)07`&kyCg-o z%};MDL8)9Oku*qKGGyow&OGy*2w`*IJrD5JlfFt#Ln=B1(h2IE!H{%VyyOEeIR6s< z^Wv+d5>-^Z5UCvyb}YsyF|nGn?*%|WAT^mx72iAOEWZ7{@8Z^GA}4^48J2DJtU=#E zKL`}AYxjubNgI?>xR#63+g(KJ!w`r}Cj}abzzG#;$B-}z5%{=nL<U{BIdjAx{vFwy&+2eEten+v7H1`e|+*Uq9&{@Ka1FGUmC!5 zFky-Q!v}Kp4L5S+iAQqYm3OdkRgP@!V6+$DCX@In1x?Ec!T^nm!Brd2HzWduiy`H@ zXo5&)!HXPIw1$K>3=ABc<`&+$=dVl|GMq1;bR5sWK9@W0!sXtx001BWNklr2u4F9K>~>=dx-WTm31As?KXChAgl-~egze1(g}-N$8h(}H}kbjg1x?V zCYN9GUFI*igsz;2)K#%!Z7sb=!zN$fg)Jb?no`ZU-!YMJPMj+73!1jHaxtt9ex z?>kb7=nXPyIQP7>_+ar8X3m_A@0C9_`3F$SLr9li?@nv8mHlkh|L*&w`}a+lusf3` z?SU;pNas_jdiUS^0I&S}KO~bGrr-AfhaYkn7hQe{Qx856Pbf}2<5XUL`4uia?|i;| z(n+jX@*#h`?RH+D^BQYct>TwA{gUY;M$xY-%`UYyOsK2Hb`zL%73*4C$(8dANx4*a zZlp?;sdW@edAPnI;g?DJFc7G6Y-$4s504!1)LYHuD;0Jd6*4dzVuym1m1X_<4XoNw zVOb-rsK7!bP1I755?@4|5)s4h+kA8j&_?4*iDj8s(;*VBG{QuTxlKS9`H=vdWm%iK zszfn_6LS+&R+3C2jq9WlI>pPg{)6--9qZfq*V^Y9+OI!{9eg~?7A$5+?LfYK(#Zs2 z5ht0TxvP^Wr_W^8i_fw6gZB`$Q%i+$Db2`CiXpaSxDbp~inQ0v%4et3Ad+A_w2+jO zX+A6!nWu8(NfC+&^wbIzL3}^<0UA*#6}5vZrFr?~mw4~pcRB3v!@1~^i#hm^J*jVK zV9<~uj2<_($12+r3dqy7>RlSDHRwtt-dBRcIuFZ_j#b&c`94{3pFy6jslUc4mK=V!r%#G zu#`g>(>`6-1}!Q1A?ey$I_vvGM;-znt5n8SI`#l{(Y{Y8BxMQf1D~2PV<@@_s3_KN zY-a4PyOQ_A$bQOrgsO}biEfaS-kz{c1C&or3ZlxQA+o*e-_W0{uD+7XulOE9!tCc? z;i@aIW5I$CkW!L#sv=}kD5N6^0)ee1qn&Eb{=zgS+s*7!lcP4%hSKc_LZsGMhRB!O zkpw|Ig|!Q)?N|$=hB0B{c!mraNJ~o_LbI6|;73$VwkHV^0xPz?Qc7o5ibL{Ie(L@zpTJ`Vsu(r3XV%>tvNJ~o+T;PBm}tfe458LY3o3pYFGxkzU2U)|iP9P!S6{o6%P zCG#O%fB6;6m@$K;%U6+bs!*Z9kqL~Ju>@Jv!>Wvld%a_BzhiOISHHrAS6oKJpaH1R zM195LlY`~Wzjj@FQwD^N*2Bd1XIg!>^vlFzcoJ}opvrZr77|wnxR${d8cRgfV{I%# z12|43hhite7K9ZTHF_t84x_a6JtmA7NFgxqXMKhIgg~U zaFU6rqUI@Z90*DgEz=Jey3;7`{_|}dariVUz(G^TFn{U4$(1tLwL>wYAJPRYT}QC$ zL-K_-LdznQDJs6EN`SziRS@;VmwiwMZP^H85P?P%3S^|9>w`sXeDq-kU3ob_`QbIp zdF3_czyA(WY8bdQ<%9~4R$3-Xi~Hk zyC@;Sb_inI)P$1!;ijMS>xmOMYTx}h`rre3^r`0}u`O+(#il3L=5wNz!glOPB-FC8 z9fwm+`3f~PsgL1K$dA0klnM#MEt72-3s!bpG>T0SKZEM?_Y5A=kE^e|l$Fa@vFL*j z@B%MlKYb#2BQbsMsBWMkJ~%&@B0@JiB$ZBZ+;K;f$+|>(8m7l4bMxoUXqY`~Ht)`R zkNx(U#=CRh=AeD1@rz&ooH2Xsf&s3)_;OyD@eFs|`A5z=>st`Q)QJ-rHEJYQC#nBx&hV?PgKFqH)DW?tkD> z=Dqw5HDno>uH&dL9L_gR{VEg2kK>6a9_OCF-pliIU!rC}9nZh|3NOF@Ht#NYp9)2) z>0&qqruB!z#}8z;`Xp|?NTN`|$|)#mbkL3;x>&BEO(<4N#oVBaMl9N~B8%HN7BNJu zqP`4(Anu<{ z4rZ@f%}AZ6&TT``MyNd!eeXS?(S8*0+ocxRup9>O!N^g=7(HqT^WJ+e-Xfo;h)G;A zHwG0(3AvDV9JK0>n2#taMyrU1ww1m;qNl#IDL`QQz90sW#6#1c#I$cDDI8w^*NfDq zU8?#IBuHji)6zydU4?WkGU*KIY!$=Cj3HHD57I(7F2X3XX_r(g#jkGpEpNQ_F8_1p zH)-f!#b5q%Cr{3JJQja+(W;w@+Z$+^?n;j6E}|)rf)kEEmg}$kKEsC%it1=W^a?b8 zhV|AOR`uS_s?fYG#OixwJb7PlGGutF;TV7vg1}CNv5iXhPwWdCQ7U|R8v#U zm@zx^{-RY>%08=Bu4VrNCT*(=;O9P67-C5ar33uHCkO(J25Ci!kutEZv57zb`EGvs zi(hZzS^jAYC4>Z%!k~L9EmBHCA$B&Ep?PI}0E#elVL=~jc zXkQcLE0{t+7--r8k2VZ`eCTSUDT)Zh%5@a@+iiDn)g5HMOWDtwJ_8!l<=YEIluDy|Ckm!1TY}%jFkc$eG_bJ-)xA;>Gw~#&O`(z1gsGHS1eCDVIF*r95l= zGDDmcZqjArx-}%FqTWf7(Tc3Cv5dje5eLE*kOcazh?o)Ab3cmMapIHKM(AGE`99#cLLps;`ntNvx>E=g zI=0OG^u48xMu!>|Dl&;QRp~SXQgz@#kgu@ty+!Hea1Onw=6QYQhf4_+Y6h zRIL&qT*^V3b+%+>tIr#qoh(J+*)^n68SWg(P}&P&!V>7unAHX2Fo zUQ;;y>T6-pa0mlfIG^|bejkZ-t4K>5VFD}>35RP-5(b*2<$y`jwzic@4lM0pA>;Pf zs3ka%5|zx*l}NG33wX8Q@hXB9)^I9yJ0S-Sqsa$tcWYDa@C4ie0PGmsmH=B&DOd0V zP@YFp8;YLKfDxluT3roYImqQmTQ;7Ca*U!|CPvd;7b}~MJfS-}(S0ggaq@wJkT_lkAG=pjfP&I5M`86A$qa9PJ z;HJ_b9WZ4O4#J3@{{QW<9acK(9Y5~a6ZzRqKVrhf$U5iGcRj$(H~oq=YgQBWUZpWw zMAm#ds{Xh}Fv_my%tQ9)h!Hi|8{ej`Hiu(%5sGlrU{XkQ+~y#Kf?_AZ%EdT)9Ko<5 zJ8|^k2QlxhcW7MOyvYUFT|M7!Z3AKTRQQE-u!QKTqDmPt4f-beDvap-iBuM^T#Pu_ zTT@wuO~n56M}uw{x6hfyOZGH~z^{`jZggYqMm2nK|ty1Eu2tjOZd zD3sBlBc*>G7qNv9=rBZzh`Hi87P)+xN~PGN3$Z!vaPt7RSSS$071W4b@limDwdLe} z+$Yu&+qO_Ts^HC>{SxB_*3nUccRpCj2dnR)v8|nrMW2FiaO@-rX;YQ9$!3#${TpZS zm9KxDnxUh>mPje_!+>$S?#3H$F5uPwzQNmXy-U8-f^A70rv_oksJB#`I55yXpH~Uh z!}zdGG!I7}eh5Fm@du3CX#`;$ZrGxa+>-bxL}=?CDjmYY_ZN_`9gMK>KBG-nWI5Sg zVbHiDq9sZJQfO?Wv7|&;5+nXU_TD?nuBz_;f9<``Ik(N7o=kct34s*pEp&tj2uPG7 zf(lqs>CLsYrGAWZx+GKjaGq;_x_xF!;rlbJD;PZRd zZ{@7T3Tsv}_nx-*=kxx&i$GX0`uehzyKZ>CzKe)CSOQY<1eS`?+uKKDV>1}`82}h; zdc?m6XbzV|rBWrtVzIEN6B3M|cGVjG@P~W&^{;JbFHJ=Zr)GGbcFw?3OR` z$m1_jzp0U$%4#N!C}Y-?1$4IVVD;mF!&$WwzmTD=w}9)pSWx!1%_TD$!K`}#n)+F_6BpN&0ylVv8>*)6{Hq2G$p@9LU|hriPukP0ria3PDHe3nNaeFClBy;ua^ z=G`*;1~3}qqqQL(cR1(VvzaiV246>?DMCr47}lH)?7es0eHSa1FURW(gXN}AKaj_s zUCidj2ClgLWBl>wzsApJIc(lsgfQfaITB6`e4o7q-c$(|C@brsIXm(w4z}5hY zI$)&hBDBlVm18K+c9S+Pfix7Nh}sx}Qe#LHPX7}^AdNrm{c`M9mlj4*t~W#58nS*p7__ZY;0;K&_3fuDM!sd zlvxMQ=Jfd|gC*Hqzlk+_RS&4Cu2IJ2Cy4w*zO*GQS$ z2bK>B1-5~B06u76qhpnHTP3{IxSm=BT_kZ5NnAfb=rDmw?>2am!}j4J$-{tW%z)>R zW2exTVf@4?qy`mE9+0EEV;g?aMc8rBG5of6{0@k@QJE)$J#8ouu_UE$K_Nxc`feIF zX?m1E%$d$fSA7;H%>dUx>t?pz^Lwlfb<}7;6!0yBJ*Z05BvNstET^rmg+dQVAA~SS zsgXKB1D?=iZHIPSvCa#4Iq$Io#WqG$D4R;@fk&ZZ0UdpA7;!k@xwJn4U_St`|9Hny zEdx<=xgzxEvlvn+J4UWIL#tn;rlJBWE1{zYas}G9Hc&CDhCZ)|F&ZO69k5I!NS2n- zClnNmMX^NlB7Ip)hPi z)>KqfFn#&~%$_}uBtx^$+$@eaKHgmSoz}ftY~ON zp~&J=B!-V2N+Ixww+YZ@$F=QE_ z!{;?({KaDlv^NYKisH^dBO_|!oP%d_-L>E1z=NlvBig@;o`X=kul8w6?&#>DcFkHm zKR{V>pEvk$>5zl&&-jG#djz4eqovVG;8}`(Wz(NXkS$H}^z+YiU{whReDGXw9P*hw z&CPB2L4Z&(+S|H^fUf^90bOAR^X;pvs~I(ROenn(f<=q|#b-Zr6wgX3S_C?ZHV0R&eClvw3OBDsq`DL9vL}yqWVCoWUh09>&u@`w2Uq zdz$+0PRg(d12Yxv4J{PN;}B9mYZ57>wCK^ALN>>kc#@>=vvKiaMoySO<)=T%?KfP@ zGtWFjroVu%11zcVbb(uL`4NX4I*+4{K7_yzP}aLgZ$eN|Vze0q{`P5m7NOI2gioR* zR8&@wN+pIS$R=Dd1Tu1bcS2xUg(@J0L%}Oh2owc05{+-5TT41TLjjxCj!vF^;%Sb* zU?CI7j$y-&7Cfomkw_Q#et5nnpl0MKIy<|_=W{^WUSBU`!go#UP*%8mqZ2uV?Sgu1 zvCG{N;r%KrSA6@LZ?JxS9UC@mh<=Cvzxmb;?tW4#wDy=Zc`An=`aZM)AvBf{6pAj| ziiOGMA~b3hLh#U^9_E)n{WZP^V<(K~BOm@S+Zr3W@7_Q1@{2Ff+_0ThudgI2V)S)% zBQ;o-Am`RYGu@%+Tm9%FvxV|7SZMJv;9cV_Y3O4rl6GtPBz?T-_hsLrP zl0Ye7`vD?=B7&TR-T>O&A{pBuhoKjT90>##LMyZ_5yA>VQ(^G(*}*2&47+cGm4SFS zH7W$Yi;|ksk~lLCm<+ZA;o=4!zVV{Zk_b649MHSf4>pRFOi*c+lJwH_Z*S%4MgQV~ zdmrNUH&)X{mIRd?G<`0gI`0BzOq{}R?z)RV|NUXw`+Irnxy8I*yNW&vWQD**Q|2Tn z@$yWOiWA09=JbOr8I>p?3mJ+=(IwM3fk#3YQAUFjc*-K5E~C|?ShBsIdJI~m7&Cez zPC8B9)~y6)NP_d$#)iYE|0)8F1wsmZA8aSaq=}Qs2ar+_=HGOY&uk~5{BRx51_a$M zCLj6y4Mfk%0mDQwxZa}$(pTWc=-rxS$0m=Q0k^V-`5(KC*!=n6IMCKg=iR@f_30;= zVDcmr8W)4HL=?vh*f!Eh(^l6`t~>l{QVhf%ON`LCQqUW7XiFqn;|pHuE3n)MwlfM- zegG8*&Bv=6jpgL&ECdWyuX2C;zaIeDf4pM_JkU@9O>G_Y=CZg>4DvbbxPw>l$t7Z_ zvEvEqTR_Cgb#^hr^D%B7Vm3zDXh)E9H5H@A&=*fZdppIB4#v-%LUYW)b7JUh7VY_A zKC}|(SOUt*pk)(e13EU;GGWSiOezMpMcxA`9gGR+4?IRrn@npu1(`1B>Z007(CC|R zgI6I9Oh%K^JvFLA>>L%REP>}15K;sH0X{J1u0htdAXfxy%J-qc07=$0j1-9?l zfZF~hsj0J=GG-)`MvrEtswE$UOPP=oFEU9oZ`(lbzBvrCul?}fB%B1*Rn>g*Q&&)0 zmgImblbJGg65T!R?A?3dqZK~vewxp4|*WhXdo6c;@$UjXV}`>AX!z(hd+HOwY3|0{K=<6Q_o<)WmpdV2`CxE z_svi`y0MVPUOg`mwE;#Rl{OR0wMI^ z9xlZ2XLSG|4P^_n=T74M3(w+5H}60PhQQ>_62)yV$PWkm-tlADQKrhE)1!CoMt=UwUvcjq2hZd6jK{K#Ep+B!LK;pO zVKIA51;&zOVkv6-6^|}o&$<>kaPkDk&YVYVjo78E@w*gf=LOab-3;6Jm|Rg#K4-|{;s=_d znv3Fv3I{WGEOz^@wUHFM}Q1DYmzf7!V+96Y8oA zgRbntymK6k=N5nh%1Us>6_<0{ZMR`rg4VVUe*Uvx@r$4TflN;y2pz`E3_h|x5{*|Z zQU-kbg7f&q1!t0d;Q^{;17)!+*x4`@U@rg|8xK|Jq0n4Us=JXydOYu&JBPpgV=)>N z>Y)Z4(s%0U-`(xDZHpj~c!eU3J9cpQ-FGo<+7ymD@=*Hvdl@sTnggayp|mtfEM|w2 z0Y9VyS5>6A<)-VIJ9iE@-uy%AYHM+|gKax_p1;Qp{VlWF&0C||S`7ID3>KezEg1-# zIjJ;%`}+e(oyW*rWa?-_AjSBUq)G^lbB6AZ4m2usYznD&0xUa>X(|*7A;s`rHmtty zff%6h>AeJP_WoG0awThOYbg#ywCyB8kYL+rWpImvL^9233(li@)L5Q->M?G(@rN|@ z_VU2P53_dddgAdUUcnpsw|kIRnDC_xH);V&3W|P~nbW87<2!F>{`|wkVSyTILU$Rr z@6*xP*i2t0J1Eh>?Blf@j4=#$K%ATIFqMN+Aa2QpIgDbG^QJVIF4XsbvZw{;RfFS{^QUZ ze)F4q`R3QZPNu&ffwN0{D|ZIoBC0Y*hT3s$!Yp-nXuUb>Xd+Ko&}I*hFnGc=g%_TC zmizC2fZElyIQVqAeN6KlCX;1UcZ$XLJ;WK)=W*fL3;5%o|B7GqcDhH47A@wNzxXX* z{>o?hKbs?MBz=8_VehFPwl-Q|CrDIQ(-V(Cb{#~Fr2r2@QAqMakrR>tiA#XS(A3mK zuA_$%qe2dnAH1UnfYt$0+PJRA_U+r4HgyKs{`_9AauS7Qg>h>_C?pmp2!SRg?a)s& zW=9(6kewq3fkZ>F%bsH*&kp6lm7n_rTQ|4yr~4m{;@#A{Yd-(&W9WBl-(~EW(VTbY znIuy2L6bpU@Ss13Eo0c0f}G21FD&KDU;ZWyTbrmzSMc3yzr%ua&Y*ioBj=oXI-mW_ zClFGyY28M?_Qfx={NA595`taYl@N<`kdkyf%KmL)`>(+ARl~>Z(&_vVbM*7>b z^im`stk--YX}2s^Yj1n-$2qw!oBP@Y!8>F8nOx%?8X-T7i75O6TfEJk`s}d2! zV~3H(NTek&+6`G9+JBqtymv91Lw|P=dL|Kfm^NiHW5+R) z%_lZuB)-^Eu51s%W7KIdLATX@^oQ9f9wZU;+?g@0E_5%R>k9XLr z1Sk_4gq$#aG^ym-JoRQB%eL-dYc@l_E>b8Ykd^``4xR_Oesn&MN+m?FiRJIWjU73#(`& zEDA=WM%KWD@vv<(t(!NIj;Dr}N1tI$i+soCf2b>wTzcupxZ{pHu`NM;{Wk8n<4*3q z_kMEy9!LvIr7%Wfj2*$48jMd$*?jTiAK_bW?6$JlwQ97`J6ulx!SQr8MqRZN~8>y?S=e5_~ zV8Xa@Oq@7|@e{_9PA3>uQ^VMiHB6o~nQ7Ceq2dzTf{$IYkW)`OnSVX=4B!05)wH*F zf(cNTMd0t6ud8?7z}`ZZA$9=-cAGjy`;WKNgi{VRaMEY!A@HePw-T+raEhx%#PDzs zfx!qxWmRQVz-pun5hHDMMByEpxI0b)V*(0=JjVDtGf4JWNXiJM*MkxOqzY-+gUem; zj`!)UH}zeA5KzcxBO}M1&44fg(zp<4Gyyf$RlNVq|6)VkdM^F+XIQ&_E!TeMdjuFP zrJ{+O2;IxY?&oL*%@PGl7^D(t<8#_6CvnrwKj4rBz zg@%p#z3s3KM4k{JrNF`>p_15EimpNiGpYt^svsSQiWKj=a3LOsM!)7Xz zX-@yZX`FW2323?R3PiD!$=SOHcOA##r$4=&v(7$~_Vx@v{_&ms_{TqqQWO%QvDDsx zBw8Ykg@pp6aJ?ew5!GDt?XPmx7e0vkT+|vfDY!nkFjAX)*a~bj1$9d_| z=Wsi0YD&_KPgl{>+sXrX|A{Yu=mXg0Wvp6X#}mt6q7x4*ohDXD(a_S&_wKlbc?Zwt zzrS@g2Ol(jsJpaOm;xiyq^heq--t_%jIAqRY9Ch^JB$9i6#PlxjQ=o;uBn-s71b2GGj#Q2`03sEv9WFgsgf$ba`jbw^b;4*w_z>IUU;7O zFIxvOJZlC=9)BG7Kkz4NUti4+ZoY-lqsGwi%1Sy9 zJ(TR$X0~><(}_k4g)x$xmSh7#H-Zi+=q5nMZPK=+O8Uec3tt<0jbOVGtoAjv6loxa zCmf1FxK4)KUPw_g#UBS`E9Ys8y2BpY*Ir7CK(zb>M z4v|Z~pn$Cv$`_1CmXUN*=BV$Q~Faw!JgM+7>7oZ4epukgIeblYYQ&SqJp}jzTAjlHKAj#rW zX423cXYJNHntHOd7>HYN;dvisMcr0jef$|VHMil*7zR7^OxTzGLum+#v@~r;Llkug zx!wk(?58B2fUG9hT>uZ%@Yl(*5W)}Bkc>bC0^v&VQ?#w_prr{iHk8jgh-1F+8JIE} z$inLNY<=KfoUI$FOeIi}*HRFK2CueK*gB5e?bE)k7sm?$23r}V9*~CkWNnLj%VDJl zFXS}qNYX7vpeD{GG4pWpsS)_bM*2YDqTMVpQ8pOf8Mog;g1Z0M4*={xhK$)nRQ)HY!R!Z1f;VsDCLa6e;}}C! zB!jPuAQRyvKGHlp+UIj0|2W^d@^WZfN6TxEqq2>}6GgxeQOUQ}k;4>tw~s*GMMf zq*8IJtE;gE%sKdAPCDsC4m#){X3m;Uyu@Pc=yE=K=|V=2tl_u+^LrkD@=3CNnLT7L z%e`Wth+Tky-L(Gf4h+bh9D)b#xd3wbfsEn}gJ|+^p~5m3jiw}3iijd2!&+g0Y8&d) z24x4fppY+6EEaJbXAfpP@4zq_&;gq$r~AF$jzl;?^F0?KcTZ{1UJfNCmW1l+3TDrq z%-9KIXlrdFlh31tjN%!?f2V}C%k+PU0xkpu#to-+GBgZ5`NR|X-uJI%)~u-cH{kgm zN)E)Cy|)cfV`C$kzDyW5_Z~4R2FN8E@T2q*VZv!i%!-lo4XzU-F>yS^V`wGO!eFIK zIN}56(B~>{xbqKe-_g!t$Is{6SAUhtDlwRzx$g{x;VbsLJLf|Wo5!Jt&EwTqSMk-a zex2n@UqwnA8NK^&J6np_RG6^&$4Fc}q!EmtJdy8R|KEK4qvwKwTu+g;tJkt|!+I|K z;JL`Sgw{^z=>^w=sw$5Ez?oDyX`X!S8El!vu`CP@sdS2bf1dXCPF{Kab=v(bMFf3) zohTV65sz`{M=$4dpZgpK&6&ANx2MBKBkzV0Re2A)vYL;5`Kz4wp$~HHx36Z=Ll4s# z_;mL5Fr}E}o_p@&o9CXzhZmm9>KoS*42u#K*mU>waoJ^`;biyXDH+gbaZqukO(%!jtUjrIBBRFM=@EBZ5L7b09!dBvp2Lk4U3IRK| z?%<8rR`L3(H`(6YOkfO^mF0{YHHy>Ed_S{h&BSuRmQHjNhMr+tDZC)SR$<`W5l2qr zicen3e}DTXlxCOp`#;eh49U?fe6G6uGEP6{IG%g@d2+7D!~>_I{Q~P(yhih?RrEMX z$oVW=w}Ex**KyGJS$yn^S91BMFNVHu?)t^g*t}^or=N2!1U}EaxRkGa>uTCsS~%{M z6M1v#GM2A=jR$^zFP)8T?AW}W?_F~}6{E&LPlmS5Tj|)kmBSC71sgWd+uDRL489N) z1BI40E}8;{oc1Z^a%62qx6)LLP%zQy25by`YVm0!MUK$8$an!rD+Ih{=u#=7{}^Pv z?fV)n2fZ#dabYofbPdOzcml-2VN9;jk8Q_7G2yT@9%VGP5D2$GzPmsnXX6w-RxVl2 zPwxCJ8@4x)Q32DYOl8g?2V>hH9gFHQ6)e1DA*(m8rD4hQNXrg=HAE=I)W(DWKafbL zSg_zMrcIx~s+G%G{Me&(pI?NAKDh13wRI`kZl1;s8*qCUpvv|){`&!d{l~i=5hsnok)bNIQoz&$$8*Nyaje?hNNwpx zwvR5SbK?%&wVP<4It6EBCAKZ`{V4WK`veGT#*L?O#VTm)!p?cbg(6e*kSfIBF%s$6 zc$P$zl~6u$5%J? z$Xg}EX@lJ+wn7LjrSOA*K>OTyovg-;@Ze?7B|TW8w zPCe;Fjyd)y=FOXfib+mB`B-Mpo6DTv{f>toe2DtZ_2jbI=z&sLDx??>7~z>=W=y+I zvnAl009#t2!#ZFrMNtQPh#!>0%!G#h2B`rnOmh$eA0ooJQ4q$1Rg_gyT|E+MER>dL z-w&HUDMJGtH3T#ib1s4Jg&D&JY^g%yvjH!LT?`At)POKf(6($gY^a04i&7&Le&Ay% zC)C>iTQ_jm7y%JU6Vz_kNJdz=(HJDF()0#Z8zV*5p!ojf55VTJi-rey^T@TRb2g*uOb_E(6;(DmMwac zLQ^xAWl=q4GBb}mf!W6$#kQVqmcP7?UeAR@icyoMq2n=X>+5-Q<0gvH_mWC--nr-S z{Tsf|%$d``KwqXvM@I+6T#+HJ;||09zxBC z3bY85AO;w!!5-kvof2N9y@%MkeLrkl;0HdNHf=%xo*%jGtLPhO2b?mf979lAjY;%k z`h7~`aV)YpIMMzX3^r9U0!lDcV$r&>9=9(C7+l{Eodn+&^BhQmP=KVntDCJ`w@@e? zODwM5Qnq4@K?j;0+jlT#)M$idvuRyDPd>JYmtK5@+S+wAHa3Sba+oMK4}Sj3U$J1p zS$yvEpJnEOQ$lLL3}XbP3Rk@F&mjx2OD?&H=bw9(zd!mYiqOMC46>TuODTZHvK7AX zV%awH=N(R}81RQ5{e*u!{tTn0P2u(|lO+{&_NU&Qnk z`QDFjrL=l1GNC#;0Vw!t3eeuYbOWVo9D` z@3|ejq?Csreu(b&CMHZ9jS?Dc#hjxL<2QHxmfP<9DSx={0a`kGv797E2gGa(x0qw{ zq_O<>cdq6mmwXTbba!3I%dcF-4{y1XS6+D?kl4OJn>-qgXDKq4qNZvRvnGz`=pzp2 ztPh;cKc9M>8*jUloaZ4)01{t^rh7vi8oe7hyX!z?kNcYmKzo#?li~b9X$UeDi)~bv z06K=()rp^lmn+CD;CAKLGH5 z4+Jow%3TSF2}ue_#|4!$$8p%$akv}m`Q;tIf!+?fRO>q~s}qnEIJ`7#zQTEs&SK14QG!1vuSL*DqIrqk?v z-e%bOhb64Q(lBr841}-Qv~3Ih1b9e-o!9^aR588Fx$Hc(9>@`vMk19(pbe>#G^0n3 zMrcXODIu53knPVRl){SH_+AJISWyF}lm!Zczz-)K?_ze5PL~2!s9)83sQDjoyVn2V z1y)&jK@lYc)zy^*8b0`;v$^MLi1bc6vPctlvyrZLw+BNIY`1paq?BlyIyfzq|+etBK2&xd| zeHSa0rnEW@Bdd1S6*l@$ zKCy(aeC2CwSYL}$iO44+I%BhYfgWfN+locf7(0y2vK)-3L3>K=HQ$A9-bs=GQkcJ@rVYu{ke?_Orfrd<^O!h(GMhJV;m=E6M2{QCoFh*r zUY??)qKvkt4m1{7-)HT%dNvnZF~sprk?P87uDk9#%$PonhyU^@k3RZ18`iI(~U=X3Ah9^t{e?%}@Q|DMg8 zH}l}%|IDcuEabRjk73bsi%BLcaNQ8_070NV9)IEq4w-!bpS$Wxl!08KK+=xy^;4&# z^-8|Sd$eua{Pp3#;(I>FpKt=l9eXSzYf2+En*&7wBPUQf?LhjMZz5p}M8PMiVwk`n z7@|r`d^B0g(Nts8*U^oy-H<7^mxXiaxE=wf#UgLKu?k~85p#^V?qN) zOA`12!rC1eudH^s^|l|-(b2(6ue^j~+Z4S*1X}FNp>}zHG@chq|BgEPXs-L_H(C3{ zv;6JBhv_JQJ))oIUwoPEt5;I8V+$9abOO2lK2~n6rB_s<%F0>3Y#BFy>jvVMVbP<1 zrK7c-q7|cd!)C6#^$zMc@8E<}Pvq<0{3g#l{S-a9Jf4QW{vwS#T3KIP$00J#jbHi} zwXd&W!NL!5{-qa?oH&k2N6lmT*7ZEOfn5cCR*e&f(-irB`-#sVx{ z;Ip;ENL=AOyb=-K%jr{GgNAXlB;nOmd zTZOf_dH22RPNu}6Pm6>|k{AG4@VXEphr$Eb#_jj8{DF~D_}NBB`-Cr1frZFhxP6LE zYg=gVhHTPigG2At4+_8qLU3$u(cUoKYi6`17OB z(v>VFmg}Xc0%Tf+?!?ljXbhD#qoKSC+A{RFc2MPMEK4BF&L(d{2<%vlk>kd*Iu?We zeuD09O0=L*)c7VWM2zsz0&+o-vQ!F2jfB=F{Gf=$!;0K}y}@QyMyIp$3g8E!6Y#+Y z&E^YNT}7dwdHnH5x&Hbas9m!WDPnk@j*Up zPm$lWl$dG7junx*7=5PLEw*S+&9{j7?<(@zidlx9TrYm>Hmr%g%sprpQ>ILzsjUTD z+IZT1Z*KlT#e%cX;v|pYRjO6}^6baZr)%jM8}pp)); zi4>9&E5>mL&1KHSX*~Il$9aAGS{licN8uYWtT6T8qFEZA^k9V&5@U!b;`n)wcsz;g z`UovZssyF!1UaXG9gkrIbar=>$@W7`;%b*<65{a$j^pfAw3iU!b1n>w7%?Ke&q5HG z0LO}9+cpKy#RLKGr6J&+8W1BDLdWnm#F8m=U>H$d%1t+2%SS)_S4|8K8qybhgpZ z-AU)#Rh*bNoOZDU(%2Y1=?5DZ#qnEOL z=}VY+j8s(_H{ASP)?Tol#>SS=gicumL4XvJwzg*e{NO_@IO7Z^%$!1E7@K1!b5pTz z_xIfZKmetsrL?rR@W>;N(4Wh*xqb`NrcC9Wb5BP~3se$H%Bh?0OjyUqrP|_g9 zZr|7S42~_BFsYR9e*YTYf7+R0j4CRc{=c_GVaryOmZtgAmp;$2^XK#U-4C#%H$%UZ zVq5JR`d)vD%AlA3N+cMcPO^B@Dq7KW8IKApj)TYTKfVPYNp<-MtVAhW`tqFn;mc|5 z?!ynDX5<8ti8yU-ZDey;eES;86DdZ;(%kWz-!bNxd7wOS0!CF#<wqfeTvB<#1?ds;hN#l6moCDatt)2iU@~zNFUr=41X3gub@xv#d zVbP*RG`BUPg+@w?z={n@5v@p=^iCrmp~F;+J%M#1VhRilSp*)C#T46-qJSj?P-t^G7N`t%F%MwWB>7d{OK&IrHZmO3{7qs*9-agZr1S;pz43XzMN_lci*QK~8Hj#=wY?(Aq=3tDT^) zmqbY=g@KW0)PQOr8@S{wAYBS=ZFt)o2|9X+r%Q1yn_`4g2U6qefWVeG)uV6&fwoLU z=aZOW^SrlOG?ff9-9Pe?i>a&}!9DlLXM88M=olTSVc9T=9rx{{{GW&-~|2vHk}7iert;dw4@K8J0GPr`A>9mNgbyOvLV z@=IvFr&f3%q%s1kgd~-W^TjWGg>%ncz`?U8febwkqzY5W-|OlBu1tWAjxIVnI&cFQ zTiV28aSFx4KCXUpr~gwjT=!JebQjUI=ks*LHP{}A9B3=_N-z%fZ*E}qiWM9>`$%4V zW)a7qI-3IynT#=@jgKYl_x@V!!U7n$?m`G$*CpY^c=p-n_}bUL!TPoJVKkfp+lk}( z?k+K#GA!&PR)A1~v17+GZ{9qz`8;dZt);4>f@{9|4K6)@LHPI9t>w-8?iUhWUG_3v0=Bs>8#MF~rcHNj*@#7G-WiXY!Jg(u2z;ERgXbF%ioT*tXD*Az37y@I zkLMQISYOYU`fXTt94Qn|EKa`YMeLRsMI&kPJznW(!prn<{>%fIG-fop)@|fB)bY}` z21=K$VBWW`hH29w8RLl4PYd1(8ur98i6Dfj*9AzbYttQg962xRCKZZMet$KH8I z=~b2c|Fic#=e%Wl$)xv$Kzc}Mfsl~UML zO(=mB(mQFBnPhsOcjj%U?EU-WoS95WfFO9+x@+aEl@&5%GVgodv-f_U=i7uq8X48` z3L!&gmgg&W@2=)^pZhZR{`qbuP8@f{A*7H3KM3zzU40Fo{g0b??bVg6TfYi}M!cs1 zKycW92fojlXP(JfXPt#CbjT@(_Q24S4+x}2qDY7s!v+tdwJXJ@#%8)mkd;X~+gcc0 zR?KxD|0H>7(b3b*-kLYqxqC0^Y=Fi>SvDKjt>;(2{w;rf;C^%*%1t zr0xe)4x+?;Lt<&XXkAF~bD?hi{hEWR(B0j!EN0J{!G|xq1mA@5yq(?cxY{S^ulzJd zyA)bB>@Tb2%#P+)VOq(`?(L={^{#gq+dFC8Wo-q}( zaRU#0_j@!oG;sYFzeLd)r;|Z8&pk=Y z>X#W4_*j9#mykE%|27C5D}l~Q>h^XJWFcvV=s!SSNqU_)4F!d~p7wY>7b5?iR6uM9 zi79hQjGRtKAh2Wr=@gci#cOY%yM8w`?}L0dkVXifo~}*;ACz^h`9C%QICj1B24ds@ zrM4wL73)SLMk;xlkF~M;~@cBhkIp^dl{QmJ}tT@n&RaB0MCo!c(#6}Jw zzkLhdfod9eY-QMxdE})a5FwpDJU}c`o<~7J0aR4Lp1shMqIt&~6jziYDk?*_F%1Mh zfeesNjM3vJvpcqmoR`AJgxjD1WBdW!h9kUN9dOb~b6L1>5ih;;3U}Z07uKxZf^8=- zT7(&@GNP78C}Z4;p#q-|o_RVy{L;0E-tDx%`~ZHMSjX8K<1a*&jHUS##zvV#HA5wu9^C=;`iZ)A|j(_~J_}Te^(4juz6HUbb%C zOk+b6>(*}M+H0@lBUgNwf+W}$OrJT9!9yze$Kwyt+`Jzl6aCF;_`8270xKkW6R^3h zhU9C@_{>FDaLQ>XvF@oFIx_8HPL0thp%6mgn~-AnRtPvELIo z{>B)B$g?08i_z8H4Mt;($IKa%_{KLrOHpwt-}vT_c;vAsdCwfRBX|NFvcU?84gwsd zaJ^i3yG3{xuKw6ZS^e5N{&>#=Sg|;+tI>hRvBJP!*LSfk$!nZBzJ6c)Yxu3S*{e&|wUc`i%({T!h0SW$c*BwkAH;hr0g*;Zbmx6dK zs=o}O+JpsU^o$E2=EPXFdL3W>(${%o z`)&}i{ixX5tC|A@v_zxCoKR>HBW79T-4r&ON(_VJ36e5FQO2X8ww6Ru zAsIhQI&kp=kF3%7mP27-A(@^GI>=C3RE+UGa-Iv?;OAY?p^Dqc0AB{A6&wf@DYu)Q zn^$qp*l{eFGKu1@ZYtWl$h^9eH-7vxj{oM@;kdDU{afE)$#YA&@w1=dQ=htldGqG+ z?6c4E$lo93^Pm3;?QQLZJ`*-AnGWu|{{d#qIgvBYI6Zu7j+E|T!nGzUdLWBt$#pR{UUpN;fLB-*N7oSH{V=EFX{3fRalBF1@khB&^EOIC`nj)nsM=(CH zXfpv0amG}ZvA?B(o!u!~vB?u6yk>x@-H{j${eSLT=YgiZy@lGE15BPgF{Be?5Rs3M z6oT#RcT&A^A7dv>;K?VJ;%X;k4r(8vWYoAs`$yzi(Jxuh0wYW))sRWnyuP0Q`rTdJ z{)->ug!U}aYYNQ{rIZ*A-Q5{htaz3G`R`kKYRPL{bkW5KtkBEjkdM*4O_P6g!?|hG zW>8X6g!W-qb35H4iEC_>?-K)JGDdRvST?ry@J8CBp3q3qN7B>TL0xZ#4_y2K9{k$_ zY~Q^n^ee(A2=V}I-?EnPesf)P?pSz$Yd~s`7?3C6_TT)H<0g#Zq;uxt8yCk&VzF=p z_wP5}!0x^Kxc9!lA*F>j3O8aF8WE!U2S@A!A`OM^|GWhtg+Sng3DB+^8b$_QG&d5F z8Pa>xxEY}l7Q_n_AGr7eMvWVamM-1t9z2~7qbijM_eJedoK(bnTM4SGsjq3IJ(u7w zOJ3rSPd!7ACvb4EiSg(YOL**wXBb~RjLoM%&&ST6$INLH5PNHg)$S+O(n8msJrvD3 zk*;(P9vXwi-o1PI=GVW$>Wj|fLm#?`@e@W#%ck1KGTw*%-#pU%>E7FNdNM z$n?O9SJ?T)-x;QJB!q{j4X#ia8IaeIj9Cc3h=!Ujl&^4nT9dB1PX66i3Wl5MS6@=JRV0?t*;1x*J@L>c>LN<%r)`pdH!(8^h396AG0$d?T zlnjRADrifAG#DfBO&{ShM)IVAe-P-LShnsGJ?nW4rV$9f~3>s8H zeN)STf=s^qf1Z$n8TcLwO#)3EmjYmDBFTiwleqNStGM*vJ`PTlZS^Jq^W>AK@$c7P zOYQzTUVZgd?pb^{Yu9a{t*xDvD_7Fg+)P`03-jln&dgcUPzvG+3uO)TT7QRZX(jNq zq$%ISjB`$B{0WnZ<y-fAAf$UMAFO3o9J1n7595>~ob38N(`a`xgVA^l(tr+L`8= z=U(Eu7hd8|i|^;An{MFZOD>|kB8~t`iYrMZ3TbO=A)C#HMt*NY_3cAwUDpjGu_8od z!h~^*7+Hm{C7Dbw+W+Tc9giBL3VaL!PRyaWxNtz_9zI9k{r~Hmur0Nr6peMU+b~toMj6zG+Z#gdvxZ0t*LUA1n-azOjd|e)St{-n1DZoI?vp zBT=z9K|UR#Wq||~rNc)sXYL%%oPR0{=by^#sS}7tH@|fJ2oad*!Q`u1>7L zr76|Tk`*i2l6PqUTq{Yp5EvbRijnXYmg`XojE*H3Uz}u6VF`Auh;HMsXV)%@MjcPG zxQJZf)85`rnt-(LB2zw&)>L3qnM-5599evF1PBwuMUlnA^?d>he5FVs$ZMNUlcROt zc6PMZapCxJoIGq8iLM@YzVs3%9_NG`K0#2|MD>nceC|KK$fk{3`Nc1OK~bT@6<1u& z+`03(^(VJ+|NRfr+uMyT60F&{f$x9shdlDg!xR)JLmGQuHntjon#n%7MmYHTSC{~5 z4f(uBeO)6vcGPhE@nf)L2=omdF$gagV5Eg02FVI?Do);56vg6L_{8xUZWk~@DJ&En zIg4B}NxPS2ZF?*GeN74*k04?Iy}Pq59*^PqF1vT_;(`kn9=1LBz3|e~Y7>%5~&2rg!|9oP2ij6h<$580N6bF#MAuSb)R7Ni4%{o7i+YZtY5#8c-+C)5RW@Z zVTH|a@cx>x*mjZ$6OIF*xvi6(2lkUS9=2V8@A)K!jfp!{Oq<5CS6-&o2xLhyxr`>z zAcW0>k3GWQpLzssd>q>erE@|fL~xM()39v*3*I z43`m0O9zwIujR8;!-(Nwd&_p}Mu6ba#rbR151~eg$vWMz)U`L8@V)LZ4%YX>D6sw?=|I+^Zg&ff%|0F4#u_`E^S<~S+lTS*W$CY_=Pmt1QNnd;5ZycbBL$o1DV0h;~$>yTo4Xo7o;1aNEsaO^so ztu|ah@{q%|&q+LVR@a2kM-chGNGXT`%0Q8T8&4j|+=(N&_nBpEu5ASEqY6q0GC*e< zt1F8tE5=w+yc2Rh^YJf#9wtu=Pjo+eVSx$t54Hdi8u4MnurY(VdfZ3($VV?@@!~)8 z^V@#OzJ2>?Zf@k6XO_^@+fGq&f{7C+ptUBK%N=#ID~ z)k=j1gvG_hj2<)kuvI^3NGU(R{T8g4%|9Mrg7HHmrI|CQbH=>6Ty@RI89jOsjuRO> zM^teWdFCJ0Gx%QLgM@4b)~tD*yqCjL@o3q|quSXH8;bN(R_*?glt2*xJ+4cyG~{Kd zr_be6Oqnx{6H4N2+_-|5R&S@J+r`g5&5mu``RK>5X2zUJtY7^)C8Y((Ai5_)V2nJB zq4CdX#HA1i%{k4R84?;}3>K26mJV*c^>$uezJgdRNj~rOM`#%&Mks?i!3l-%>eTfhTy4qo1HCrEhl+FYDNyZ$ub~Wes36=%p1+2GBBW z8t`0jY?SX&s&fn{;PiqD#@H}49x{LGGrgp&B&{i*vf~OUC@LlEY0`lqi@{bB5u_Q0 zVs=?2bE*n)JKJdP?4`{MNRy`(Xe3Swi(VZnTM>~jgG|zj$1A-lHg4L;X+@Qsd))Di z9aTcZ>eVz>*HGHh#&8nUp}6O+zfgCeg-btl31=@_#F()|_}v}1bJbNJ;}<`_ou{7s z2MWonufEEUZut?n-Tu>qnx%mVzYZHS8L>5t41c|Emk66ciA_aC1!tadF2DWto!ox= zEff}k_5+0WvEz}BSlduKn9A{!S-*TeB^5pu1Pnql#<3{%JhZe4;trj$7|%EFXAK^8 zB*;k{sWk!@jP;fS)*~`@`~ag3b@g?qs8$$w?b}z&-yeOH`EyTae_cb=5NU+4kwOkg z^*Fl9-LhjeHa4kb*X9WO zheT^H0xI-D30>e*pXuW6M;>Cq3I>O7CGk=FzCV?pr#JK8D)@#136KKm?2j2%s9riWBEM@EMusGGJz5L z-AUxkn;97LkguEmUtuvGNR7Y?j~gSyBF$K6*MKahvn$V2Pd?8QQdB4yR|50L7cnKF zm_2A1aXU{;^kV4kXWHOfcpb23XO12X-SIe=-h4C6oC(s0R4d(2JdC$xEtT5CG8)UW z$ps-p)3F^KZAiDI$+v6b8kEpT14>IWN^&5UUTi*ez3EV;pD(lTC#87zC(ul$F5@ofMeHNHJ)MEXw+ItEMW~e zdJo-v43G<8^~P=Jcp;M~kEU2aLL3Z}JE=@C;bV(QH;)ZA2MmO&CTc` zg;=pYZ60;So(>d}0KY1EWx!lBnQA zXD;C6d1t|%8mQTau>_)`Jk(T3VCY~NTnY&r6|>M1Vk(q~#9}s|`qaO3?m6di&pr3? zkH`K&Pj5FJ9j$ELx`hc7CXi02Nu^Q;^`LKe?ir0#3avG%Y!CnW>t9kZY!F}k{Ple9 z%U@vEuAMym@ZZRISuA5?A}ZZKd-*{Yh=rNeLJ@P4_ZRoim6jfDK6ciTF)03sAr{{lViH8gTA4^#j z7Z>;6V~mb;wVI(L2JzFM-oix}e-I^Xh7TXc*s-G-G$?tHO6Nx?xdanMZEAEF@zXbd zd7GigdqF&<1m7$XbyffXAOJ~3K~&dxo*(|)K!?THVHTf9ca;>C0+5P6gQx`wMPpy&p9b!_^KSlp?|mp0Lu-LjPJfz*31L78Bo$+h=gdWmIBos{rp}th z;2}kLJ>Asq+s}~cC*WuSK_2RB+4YZpbDBt7^n?dfLky0y$JDrN5Y z<0!Qf6sQ<+nLrtXZ7H64<^`U4<{5?z8OrD}BbhOM23LOcBmC)4ce7>FCT_gpQ`FQ{ zbH^QbaPGNhvuNQ$L`)InT~y5ZUplJ~Qt?NQ7|h2$b`{rL{Yg$Zei~o+(npb&>NoI0 z2=E0Y2T^dsiKGjjV1IiDWmQA*GXbKwl;+MZT-&D6O0cSIZ*K^7q;)Y2m|#E z_4s}$J7WM#PDnu}t7&X(V(8Ez2oVkg4EkTiYjN`~lXGH!9_UB6=I&iynur^w}U zytd*cvbhwL7P7f|A6h8}4XWUjQ%+^Vgb55DJcK|0`Cc||+CZQMf$zUXjN(Cpxaczz z1{`eicqnPJeC;~!y7w>qzi)g6EhJJXlnRHpBG4>4cM)Ix>KFOJ_iv%IE01l($op@4 z=8SxY^JTywrJo8Q-us5%_ebAl>XccWd%<}G7*g2~`8Ohzt$KN%LCFNM-W=)r17uqh z6qQ%e+vRbfp_@PzAjwkTBx!GLV#Au%6efx==?qB}0*?`sMl)mhP}Z$m%bLc$8a=A2Kpy|$JShIcuYu9h?mvUJ`;UlnxjWn9~9`hsL^3UdA z5l>&ydd@lLP+nHSpur<3FDXZBA3v9-IBpZ9TIgxn&DOQ6sNGY?b8C871#B$u;?mh8 znOIpukrfcvIb;wAzkqF<>&OD#w#{)1=QHNA4?)5KorATnv-{a+DedSW5fU=-O=y-Y zCD_u&WIZ|?bQtR_!&+SnN#3$(ix;vsty$su>?KA@4TAVEk~8PyjGIP2SqcH@Og9B? z7k~H8C)@(LI-REjyUun z76L2^hwg$EGajOW7`zQlQ@pUfu<(p;BqEhxPZik3t>bhGNCYWgNq2K zxhTes8P0!x|LdH+Z~;$0{RA^-PG#7T!B`U3zP^V2`)WfvoAIM%e*~&$bR+WlJW5Jz z8N(RGx4!-zDoV?^?wZT^f8YN$tJbcddiPFj70TG&sYp5GUcBi85ZXp-Kceeud_R<& zDCv;P`uy;FKjNXkJ<3mR{ZB5sXd#7(B3j)>5Fy%Sy(xC8Pk&leRK(V8yJ>D}MhL;A zY`oBkK0=gJ}oG=AWtq>38&gRfQlE*~u1^IlI%F0TLDoas7Hs|vDJO9ASl`FaIvdcK{ymKfjE4?J*xRJet5f($-s z8KcY1(`#&WL7cp2=%}w}$Iea6pMNsfeDq4ztzE^_Pd`pg?LMA+Y6&MyoJO*wn5^%G zh*&<4Z!C-wNXI%1DI3^$h=X73|4l@x6@7nCDv52`M_@L{eir&mFRtRQJO6|cp}Tt! znEvNjYl*ZRCQX^nC6|AM8MEh5HEbA8BEjGai$@>+2ai1RH%gKTZvV+GOdUNKdOK;~ zzJ=xk^=#XlR5q(_mLLJ*KekP{Ye zE@WR+l_$};ZU$GB($w5aL1{4>3ln51047=%6Kxol%b>eE$XXUg8LEmBj7%0$FrtLk z_D0swLtYmQh_(xvY5|Y~TJXsN?LFNr+qjl9rk#XSQH4DyMbO-WKoPSG@B@$LrZ$?J zT3EemC4czC@0l@eI)7e#4-Y>0Ag7;x8aX$^t+(FF?Afy^t1L&w983^WZ~F(xj!h8w z2pRjAnPTSiFn;`a%F4@m{<#>oGnL~yE zwr!Emd+gh{kDA&8OdLOwe%nL=HT4JR&1YF~?joklp21^JKS_{xaionD0;w%@WB_9ZXXE-lzqtKZt4sQ9i&tdTfvHccHiLQpadYSzamu%Va%h8!50>PxO*`tpE{Sb&zTo}UKZe^CB%yo zTz%cgNTpKz{PsKO=<30eNjx3;mk6N_vg_VvAZgyN@qeeY`A9&D&V!602@Pz|UbujX z6DE-J!p1u=B8;omiexNKSu938o5yWxV9(|qRK&|rRw3v(apO>`EP6c`h0osVt=L!; zT1loIKbZ?JSirgG%wx>xVbs>t^5b9rmS>i(K*W+{^FDzJSyvJpX%zXK2Sy?-ffiAX z;vd|veFIWBp>u>#5r<#*KUV|qpE+u|#KE&vN`($I8V@1kNEM^Jyp)SBUc@=)Enwk- zxl~n@A_#pUl+Y-XhI}WaJD_GaJ6Dh9ug|XF;b&H|+l7V>*!IE!E}vV;qT@;#p8$GX znzq%`&>DG42L<@CV>|uEYDya{DG^#AEqT;#`~8T4AFz7W zDzq^;$|i9Aa3T)GkeI+@+>kMR=ZjzC#FJ*RW6w5b44ndwMSO4tcG4lp`UFy;F}x?1 zr+D)aKq7=sIB)jIWxAlV9)?V0^vI!9mKU?5dcaiPgc@jbls`(Mag3pafJrLOnL~#$ z)c5fA?j_sSiJ!?)Y9HuIavL&5O&1|UM$GG}NhJ0`l%$gcf4jmgy>i!4B7&!CH zQy4#CB(9fXmwi?17gvv0(NZM%x7-?JflWG!i;GXLy3Y=NEI5Y z^=W-Y2=L-ZI?dMRCc3*i06|q%6;)ML5o%%x-sRxvp9fT;lm{uW9cMrh65$6@5_mpJ zIBeTm&83_K|Y^F`vKBO^4T1|pAQEHfo9n7;aqjqm3;Ds>q(S2TzKJyEL*mW zD?fTAS6p#9cir^|3Ja6{#&z$g(%6LZuM>F5!KJ)xg4i;4r|pZ9Ff7Kr(*( z7=H4TTR8XJbGYxmKVb+$y>{dk5g5ozLskd)IFXJqVAF;*R9A1~k`J84@h48>_=zKF zJFpio)y>P#zDPq|H_hF7YU^96*9Ed!KGsC~;J%{=ni{6EBn>cyy>A1dT-KNd7b)`teZGQdegFL(B zAM|vzg0i@^xQzS$`)82JvcIm5SGR8G>DM=~2j~$tX=5EUX3#-201Ywta^R#`f(r%@ z;$%O~aJLuZ=E(GW~3d931q(G?aa6vx?_N|O-+-w=&+!{^Nx8iPce1U&)*5vNPQ-?nTf87n65 z#3?N+B^US+L&C>sL!f=qnO?wU)0Qoqa`I_B|J*a&bkj}z?svcAwO3bi@4ff(`LBFo zz#=msL{yOeixzTZ)T_0|vLt0?2`;+mLLPqTF&Y|jj2IJTEJSB@TXP$=8#b}(A5XEV zv7L%^n&owMG!qVSI?0psAeHMNO_IMp{{odK&f*i-f0C=Nx|)0bcsKX|`2jX<-->M| z2!f;YE6GQx9F2_)Y}&Yy31dh0_s~W|S5FE%9>d3Q?geM??eBe?U;g@6)HT%idsGOa z!Zmyp>!c5T4zwole58FSBTOM^X=$N)Uo|J4GzX)@m_mU(%mDCxDQK0VySqDjEPRxR z7<-%_IhUfM1VV;>BvPu#g!%2xukcoduJQ)c z=iINMw!Vq){_qw?kGhkIlScNJbABY{DlRVMx_`Td_RbXleaGEo^DaVIQKQLGL>a%& zmz1FawGimQ=eWrenK$orge~apN)rS+^l&kfgym3PR7yOSfVwt1>pJOe?qP5JKK3-X zv#Y*|OwPr!EaFCxEGS}F`CtlT1&kd(iR(XoJu}ao4Ymt-jIK=Zh3|ZYwEZhySh|kD zvhij3v+N+Ohl~v6p+Ur+3ruLb7iCr)p~8O8Bm6_oP(Sdap_PNtKIff(KHvV%w>WXm zSS%S1kRZVKvN+NO-3ysc{Czvwzj+f4+jp{Y`)<~5+C#Sw-9T0)$OTz`|5_Udn&J90 zPM{=}qPotI5l|OsF1h)7m^C%**m|?{zVZ_7>((+j2uLW2kOobFWrxqA$wPZ%h9Dg( zNJB3s3t!lD*>N`c@Jcq%PLi}(Rgf&Bc-A~(6Hla@1Ti~-bkhvB13GtY!ri$7diR42 zLgUG|U?_!77y-8ZFUMAnUB?Ch|M#zeQ0|=uw(sv?{Tu5UH}e!0jj-vjjH3=xMnu_C zY(BK`RJOjcgNK%{rgHQcuA4iaf`}F@g^v*q0!0yU`Uyjs{-dw*@T;4-Z|in8H#QNg z8jBYd*hUM4lxS&FHEtBWuUnAH)3I+4BiuBxq$K0|pbeI^ke-k4rpTo_-?izC5CYHl zBb|9j+4I~y7EmB;=FFVMC$7DY*Ve7$OSgQFljfhsUl!aM;z<>QvC2wtyTH<+{?-!j zt?1K7_9M zNJy2orNjF5D|zm@=a53;`Z;93%gozrJ+%oiTB2+RDGiMcb$sJn-{!#w@8iasKTSj9 z0eMT@=bqFqNGi-xRA+{r&3f{9I_}Zi(D=fV$s5i zw7?N9-6*v7P)bo!4V7#{&xc1T}5c#lN?`?O*f zFD_llPk#I}R<2k>HkTtHjiVB1Au(E@b$~&mu&8ZmW6RFHyuN80KmGYFjGH))U;g@6 zyuADs{`R-O@%68Nm6*Nn;MW(M7v+eDlkCa7_talWAL@cR?yqoOtFGOM}&6Cm8FcWEMs+dFQs-l z>sD{0KAj_t<_AByl^L_AGh@~)&cEmb3>h_|U;5&C;dAkBFWa^wYV&}!332fL{N;fM zS@z%PwE}$%xrdt?#35Njvf(YS)0E;BTNL(S&CX|hI=6kW+0O8mKQe%{fd=?azh>?im z{(Luw>u0$6=9{_ap1XMb@yDsHt>%w^{3BOfaXCXrjX+3=(c#)hgab7pL`ZjiKRp19 z3SIOixE>@5;JQy-$o* zjy}twz>tCj_Dk-&A;C!fcbo$n%bJs zI>&?yHFRu`29=hitGShi+5?<0>3B|>JsU@bhRVtkh`7yhlO{%N5{Dr0j)0=~C9LRv z1U-mk6Jp@`6&O@3&dL?5S-ki@zVq#`<2Vw8JZSDHBtu3F=X0O`486T+{&@F&2r2Pg z`rYf_pGNj523*mZER@0o0Wl}e!m}1~^2u{TZwX(64mIS1O3SD$9gH*v-zv zHMH05M>#gD_iQJnHDhN^Vfe^VXg^OySqU?zPvfLh<}zsbC5uZ${q>Osl=KlsMI177WN=|%Irgp&{J!RYAjo5g#S*x# z%hgw3$$$R%TMQpkis~a(1{(Yfmd-*?6EyFje#?4xY^i41^7X9RQbS9xrbR!Xn$-LwV3kZujfB zJ61rZiC8?2pYH~t(a1xRwIl~?(ca!Po)7l_k~-_yb!-6efA;EIIGzEgxPsC4+~769d1OY-1yim!(J)lhxsbRZ4~M zJ#<$uZcF34KAg1H5v5L{lqB!wk!XsXLMqEDm^EiMi|@aWm)ESoC7^VFEe8%XGje<> z6qF$g%g8H>I044<-L7N{QDDV(P!HDE~xJW z*l5a;j8HMEq@>vQ@Karo?I9^+IL0IJ!-=*KAzDE`O#;9-WcD}Ulno-cavkyGPXL*O znC}1l`VKc~DHIA{Yo31kdG_q78GvHEi-cPfpxr#S6C++w!sZQ|`O)`p<@a~q&Zlnr z4C~f!=B1^ty@gisXw0N^bcpmtVTP#>18HTR@A1ixU&{}^_e};>Ipnp8qN)r!0Lvnh zr5yY$Lsg4Kb8{;?2*3o47%_}QJcbYu=-_{i0nm3JlvFs5;$RX(Sab=c*s@^{N?S` zR@X9p%2cFn;5{}$#u#iRsIIOio6DeNydV8PbSWKq5Fms?8=o`h&*R3MKFRtGJNWw7 zzQ*p|yU{v83a7u2&_?1KaD^amz&9G<28=2xr!w7v*VPTug1{%+lfv!DbK;x{EI4%% zJ2JhjdSfe@oX5+rtmN@0mhi;W&v5BSE@$%8X-u6uHH=K`XYT6IHM>v08AVox_Rlh8 z!9==mDP=#38rpq@X(t9jXIGZr-+2!~Ai*;PQXpiU1@jkj)z#N={PdG)Y3<~pzdyvt z5ySZKhd)45b1Tc9dz|&FUO`DspaXKb9G0EH&u6*wp2eJh)*Zx$kE159X+@GjV-pEI z2R!Q*Py~zy78EBqCFxMo+DuYtWDuf}N`z7&p#x%0j8s=Q-9pjO8!&s8MY$=Urnwdm z7c2UQTRPimbIP$ik3>Gl@Uk+Jb^_n;4drRRN2M)D0=6X)fx!fQ?tGzNj3Jzf5C}9O zB{pOTIC#dx3N+b#HarU~6*7*DB$+G9fW#^Z2o(jn940E~mTGkWF`U_u@NQw{8u8{PW#>2~&Q> z!bNBD>)-x2d-v2Ll@mVWecm_&vdM+f{m$wl%F;D~kKga*Bm0|Vg`lOm4JjqXMRE4- zX=KlyYJ$Mv*cLi)kAive_O$tE2LH)~{d7j;&jnx8N)W zRg{KXfHasW-gfTkr&3&;q_;PFSb-q=O+DXqwwZ(fFT6)!j6`ctcAUk3{xb^~&gZPN zP7T)wApjES0Q~TLy7A`gso8&k=a;?=!ogBDUZDSX3sSB7la7i@%2}{r0VO46wD+{( z=Y0~fIOQc}loyqNRs_DJdg~sZeR)0W-e{m{e;psa_9I;JwJ*_;>meUVPCM;1wC_zgwv*nyncDTQv2o2> z9({fr)$JksCy0iuNg#(IMR?W)PK*O?o`*N>r!yI6kW65YuH^jB+z6Ew;lJP0$^NC! zlHRtRkq8Pb5i(IDWnQKS9Bq+m%OgDttqev;v~uXNnRK2KCw8pCJ2n6~cD;4; zA7(Dna{d6U>!-OBUJSMrC4 zp5ll9@d1V+v5Xxykx{uN2!W$A38z=U_-oGOZ?9Ez-wQ9%l2Yi>G7@DKxH`a%6~VA^ z(AEJR%^cXWld3a^Vi|$26j})+nrw3mG&F*Kmj{$KNF>@1a0yTdj-ND{LFE-lDf!c1 z@25M}9V+RRL(Se=)~?;e$Z?AxUPjsQ33SwMLw2_iiz)Decf893k-Nh-_C7YY(EZJU zjPhUN#-n5J7Rp-dVEAxOI^{&BO*w&0+jfLnVaLL_MD}HGQJ@$V)$1-c9>b7KC@5sG z6Gvy$=xiEW34Ce54~^k0W1^lU6p1)})WY5r-K$|Vn{(49AYGRIq2;GM?zr|tT-anl^~5qiU37`tz<-0Fo2Jg0v+LV zi~sxpb#?8a6G*3kNs}gX-L==U=g;0W@)vn>$r7rnD*2DkT!%DymM{GWFTd~@ zr_Nc;%I4T>r^W@!0=o?@i$nrUWPrbb>P7($e0x_qMeE{tM+odJAC+kN^oJ5Xc0X9Vebg$+j#@@*v3?kIuaJ zUTfVKdrKY?GC=7o?>G8*kaW&IYp?Y@zvnmn=t27Wd+^;fVHBLfU^_GGU7!pcGGQxu9CBP3yD zF*0!v4=or?=ma1P%4j5pBYk}Yr83sm5L7~Z-^CiJ1eX58N9pKTgzG_n-yowSxp;rm zU|&TfY^^^1b3B8Nf4T-)UfDjiX%O3O!9Z6Ln!0@8?BKB9HJP|#>8?K#I(Fg8_m(m)1S< z<c@!S@^e%E(6xUG{aE5ND2 zOE<9g%B#Vap{5#ADXg(ESQHfr!-$}gi@hyeOIj+d@X*4bTnB}qeO416`Ov$W7%A|> zAN?FhRww6U0`D0)T}!-j?RUoewRZY>i9=n?uK)^8#aRsy#w-NuQBzgT?H|02`bIC7 z&|<-qQ6>kaBhbH(XzwLd-(Bj27ZpFZuhEZTbYjRo>p*V)- zg<_fcEzSJV9e;$}umQXb6UA#=iP-nb zp1HRs_fO$bEEHq*q5YMG<=N{j0C4t-D-eT7jLahCp*^1nk01QNEV$ zuYZT(iE(N&H5e43lO{cP0i|7Apb|i_L2TwJV<2!ep4$Bz+27Ek)P4KpEKgPs_C{oupP9uTMej8hI2X$^`1F*y=9 z2};u5-bN;qiHmC`v4Q5*DG2fJaEPa6GjM3Ol9bg5V-i_~K%yA9Wk zse+L)M2V-xf9JUrzi)ZkU)=k>``Em7d)zpkF|Ch*36tC^gT%p84w2Tl7E;QglrQt} z!;f;&+BFOh4dW<}6DLNfuWNW+=8V7cfRJ$L=uuvH;YFlyl1aB6^7o(p-`w(!Jxq=aP>i5F ze4Meay|GUH+~suc*~`lH>-gi3|0%!w?sxN(A3ex-zI``e{^!q=8$8BeeDY68Ri(i3 zA+ikh_j9nfo3+}eJq#Z2<2&E{8b5yEM~n{-;CLytF<7mp8yg*# z86S)2IX=iatJm_$Ti(i+?c3PCuM=G^5i2ia4uWe9Gl0bcuA0@%oUllZiSR}2^lU{; zU3G-S(XnI0(aCYTOPa2V2EU4`+A2Ca=98(ej(@h02&=J5P;%4sMG^%J6iPIE9#t}K z%48*=%1@J4;6|2;(J{Z)iljhvroq3{AW_#jqrsM^ulK1*w$?;i<2VT`2*t?QM50d@ zJiqA$Hg0;6Yp%MCQ>yvX*eI{p1aK(5cp@tLxBZzun8=QsJ-pS_p0YuD1(-+NkG&dZ%y@t;qgN5f+iJpJTzbiDr^ z7#kZ1uUd5;)>hcLYX?C&j_5<^B*sp1@g=L7J9j=;Uhx$7eD8h^9q46pa*{Bt5Cjnp z9u|?r3mS~pI8xy%he9sL?%gA_%xGd}+l+WgTR~UXJ}$ZB60D752&0I^7&J;8=l?6G z+=^nMM5PjvNjXdw%hXn-Vf6N2lh zlSXth22XFi=?#41lYh?N{@veEE|)-LUV48{q3i!9)9hDbeN|Vdx#_0sX>F^UenJ~- z8W54;=;6cc-L``R-MxJ4z6aT}?*NgFn3ZlID4k$m=PrW7og5wRW#;1fq~~=Ih%`pT z@|1F=Oc*JIP^5&yPq{H;$FT^lu~y@H4oep=;NySxVa7&Ac;?xy7;8Z|vDc4@8G|NX zWWNTB#Qa)oO9Lye4oHp;&);}XqWNf0zolhsu@M(WEiuOqd4qGvbCb=rH)*x3AOM7su!P6P~C(P zf>acs#)rut+zCC~p>l%Q$~8Krj+3ug=UOab7*Z~msjaU*YXoo>062TSVsj`h0kH?b zNWM&jAe4fhi30aL{tV}R;0juZr^2xuKqPMNap`=~Y`Esq6@2vvkMXUaJj{y4AK>Cy zij1A28z=K=nZ)t{^?(oDyu6L-kG!A%@uhDtbm$1RGurWmq;b}4j#bq{rNrde2-XBR zeg;B=(gr0Bxsel4F1+rI^wdmaVWAv`Y}vkzFbGi6MOuqQpl!VAl*2N|jvdGI90)yV zn~SPyKnoXRDha*sq`BAYrG38A|5w%^%Xz}?F5Ja8&^lulix)0r%jR8J=@9AgRU1f~ zSOa-NP;Dh`RMF^oI0!-=#WZLskx5{)w5RISPR7_s;t7l^U5Es^?jwvo^cYPGXTgd^ zvG&;WQAu*($ni;@d1e!Zd=XEk&?X`>5htD7UmHa~rYpv?jZi~vZ3~AFALip9{}f-j z^9y|HQ=eq(*3JCuXrK zYB_)K-gh#8#iAJCu$CZ~!xV~SYJ5TsC0#jXS{<_-YHRD+wX=)K+$0Fa>eZ`hX=x!> z$Wv8S8&e7Gf7i*RIGuJFyLKy;V&C2a{PdxpVlg<%Kh3FrYAwVX+1P5{BC)!NkHo_w zD+a%*nx~$7l3U)siO#OQ8+1qd1mDn;f@ZvL5f? zKJNeFPf(tqPQYY-kf3ms{w>24`VaHd0|#kZzLd}X&(G1?*2o9`=zUzg>Kwj%=a?giu2sHB{CXq3?U%_ApvnjskIUv#jeZGJ^eg8 zx9z62xs^*VzJzP9yNaL`@cr+9m+#&CZTk8S5mZWGA|C$vkJ5@j_;NsbpQ>@E#6S=WrH_St`^lZ8tyqRDm1L?K0^k;0wMk)P^O&h%LET#ra=bQHzwUA%lFZi&}I80uty zKlyApu16G>x#ynman%)<#aoU@a_*#fNh|i6&w<2bQzX$BCW<)R-9zWDJ#5*yk-fWi zvS-&WhQ>yyBu};!uw>y(uD#>}<~CRJrfb%*aBd?)BHSt;$_hPEVYH}dTX7YS zz0k|QKHNo3eKkA#yVyM#5vp`-`(qWlQs(Rb_b%@E@OxRld^z{s|GgNHkY_O3&II`q z?S)bfm13EnKJ*Z8f5+RXua75pOP4Lf^)l?;yO-W0$636vJ-%C05-b68<}~uI_q~;M z>n`NS-}){OeE<6l934kUm!gT#LdF9K8&9qglA)m??!5CqsH)9y%{5msvuy@gn8=PI zmEn?0F9e{F&tow}+VI=Zw@abO=L-Zu0K~o}##&T7iU%N{FHn=toaR?Ey+re6_CCLb zd9&NO?6NDkaP8&1t@AAudX6*SYs3pGWGQl(3S%ZBB4*k|(`*ErOy-lCODFMk%B5Jy zbLUsS%7*nzi!dw3#q8bRX*D(19ap8^4ber9qk;$-MbBc!h%u zJbfSIT`jD6>$~vhtR%1wM!KLP%0*2WR)7?~?;~9oghDt98wKbnK)Qm3i`)5=Kl>oZ zhmO;KWQ4ecaS~I45S2Cg(K0G>uy|B( znXrmuz#&Jns~FISWQAnh< zi1G1J1_lP1(YEMpi+2_PID5VFiKU2uTm-{oS%h*CDut<%Jh`)zhn}CqEf;q%Lx@C6 zc#^B-T0vUC8!o$mC%5jSv!|bL{OBQ;ee`Br1u8Nz?4N9Anh0s)sgR4HQ3~F$pb`Ji zKg_@V;0d}%#?ZAHyy`lrZ-=4dFfxWL6_GWm>9{r*OC^_$4N2^;e}G#N>&z>a3Yq|A zJq#L8c^DlRi(weCZ{I#fM{+bZrJ=qJo30~55?OG5iz8fR3@IHj+_RtdAV*_eGs~7N z!c~gE*lEY>*TOUK1*EN|&UHx3ShpHQ8l_aM0~Fv$k+|A3ol0<;PCm&SR+W%+PH^PK z7n%6^Ocr*uL#CR@YLrlD1Eb>;Y}>knz?2cVO!?%>m&-kTr2-+*_s7DIkT5EdN~L)8 zk;l3F+xPIXzxV?__OXxAeXy7A?w*$b3wFwdStJEt0&qxcNEt(wt^gqsik8}D?z;2e zsn4Wfd;)C)>Kz+1P0}fl@XRw$Q{Pa-@(Y#`mco}z`iwTD(`oka-ygpUsaU&qHOfu-9U?9 zg(F-h!+;a{NwNcFhHS)}-gF~7wr^$o&aHg%6QAUhpZPSGu3z_?ZBJ6s-Q7(#n?*@C zF8E(FsvrS}n{IqFOV63d!j8qnx?lyuL87Om+tUVGR*IM&iJ@d7${~0NoMN6=PZ&&a(={9T|G#?=A3A)1JMQ=}S6y}q=bd*B|LdL)#qG5{rm--KW7%yRDp@&3GW=i{g+*{| zQV7R8z94pDmq<`BuFIqvXAo7VajVnhOIZrVJWD$k@zj$(p4Fs*YHP??gNWki*A)_F z4CSywl_z4ld!R)6!VCq{ zhgEA=@O$rlALpOHg60~J;r?z4qXQi18fN~?Dtt;%DpQ`A^p4qsKU0pebCty4a zdB!O*P6!lmsh}~!iK7f7!SSR0?AmdFhK2@QH%%0Vukf5roe>E@ARROnIy*b*?d@gd zst%-pS?#l!J7*5Zj}NnT>sA&nY6l@vCVBrlLOKq@T2?Nd&HUfHnWllmJom^1{Be#S8$D^1`*N(sGiwm>D<<5p1_(?~ z$z#^bl~-+G!GgJzbrDY~BrrKX&O;AA#Iw(Cq`InsVkw|xEDj3k8KO#=C5xBv-rsv8 z3~#3;>Zf%47#vs(jk9o5;Q1*Gl0vCKxlqIn6n-T{D2XFu_Zy*NW{D0%(iw+KE?dL9 z-*YSf{4ZaMJrS%trFAi{Uc)5sUs|xInFPE#05#?HAd_}U;<9k=TxxxQ2^jB$-On)g z;d_>Fh;Zblw6w zx9uaBw@g^eV=rvvQ@K2iRX$K*a_dIy@DO#v;&>r})iHo>6j+yHwuA}5K@j0k5-!KJ zp-)J9rJ#$56Es2N0;(6SMYVJ=8H6ZdNmokbj&-BEw?N?-P>S=2h5Ndhgu}zb3=Ite zX90k-0KnPnHI>P_0_9weFbs*D8cfP%tQ7Lyho9ksb33T1OXfya#1qA2(wjjsugT-) z8?K=L8~3ttS114Xfp$K6%UV)S%mQ$eIdn_{h?_u}L`OL|TsJ$zoDbc^=fC*~PjvUw zR?|ZDtR>`!#$aHC?4d)r_0@PHF2k1~zSxyw7x?H5mRS0Y20$VB)KR=ANaY^B%2%{XX z?-1w;Q3S$Cqk}xga9c)*1mYkBhZ>(i<6a1 zCf^IS@$5_|XV1uS#s%wfr*MTA;YEEQ;OR%k1x-L$QFg<|TzrRJpSmDgh51!#qG4Y6&kCB@gXU)0GXmVYOK@J~i^#qyx1TC?@IgMIVEez>Y9HW``Eg4@ktEHBz!Z?}= zI+_AF?8$jh7@h`{77GQG#fyxIyUc z>!Yi)ixn%*NwmF!bX6t>r9DNqn16{tD>e^}Qv;-w({hB~-d>)5;z>3>{R~3`gEZ9F zvt&sJH{7tEl#O`c>tAEI`ydz2%W%%Zxm+Qq$Yq{s)AM@lx zKjqeIFJMu9n%v>T^mPp|ISJ(eWDqAdENF*@846D|b7;)+@Zm8E2m;{|hB2s8D&{%T ze}pAVmQY<&L!nrR_Ylqqf|#a+pFH5g(11+S-*=QpAAOYb&;Kw0GiSE3>iqLLeE6q4 z_w2LW`g?CiSP?6Yj7BJnD=faJsT?@W@KcX5qqm#4G}JTdRoGPy**I~6<9Jx#!Gx9| z&^R*9q3%9{AfhHyOW`eLYHL&Eb9t7Xvy8gBI!Yx&5SFooOcq8FD3s&GXMPyQ0Jl87 zBz;M$%&Q*qg8sgKcJJEF)z@5(R1%EFaolO+SI2e9<#TlH-_IpiY)IA)XcO_{A3w5&oJqX`a^r;LM&_+SP1+;cx~y75M?y7~&Nm9eKtvL>ezOV+Ml!}Zr*!?*6fXL`NIpRGg)d3rRV zIa6$%&~Ai8DHVUe2@yiZ_agzyjfqgo$7st`I7*}gTu;%|RFCJV*rmy8Fp^E1UZA(P z7lC53SWHeRi6Eq0$+EP)jX!+Ptu)O@QP{bS#%KWPRWq{lDVp1tAQrD7C*=8ubXrrxv0^)2tX_02r}>~lQw=th)~2;qQytsonqREDK9XRx5f%Yw=bn&()bwAqn*~4CJy%<$CD{S6TQl3YZIWxr9Pb@vzQy3t`bZnQkO{QO6h@6XK((LePq4wco_j#%8peX6@3&P|BlRP4mnq zI+o4jywxk?f?mX#$_EY~qj}a$qR`+u9-)ZP!lIN+COjTPgF|fIycsDK%a$#rt!*aS zBy0<-nV6V}W1*z{Z%J4ZLg2a%p6A6eVgWq(;7|Ga!;dDi4EeI|-V&(BrHKmbYudP> zeGUu45VtsqQG&Wm6_reyww23x*XKS?+w2xDTfd%fed}A~#>VLH>yIZ`EsfJ_@yvqy zwd_qjJv|tsaS~?E>pEZ@56?|e381U1D`t{}7SC1GrfSGX6|7C-21(*46JSkBg>nSG zbaBg)uu?>i4|2uIWgH$H;Hiz<>B~-X?nP@U50A6=;9dr{?V+}@o;NM;$)0!s03ZNK zL_t)Wi7O+DJ)7wn&$D$RPUpV-yqUc9=38iQt>fWeKEaNAzt6IDmvHN?x3YZoYWx{Z zAPf!F9!uxXhQcIHR3ylcldf;XO?)=SMn~!E?>%KY=Oi1}>Csa{c~~PrmvK`WD&-=z zbv3MAdl}bVcP(#xGH!-+%=;0-L5SF>QWD{#SzM#&Xz+1M zBe<#zzQxISXeE$N?EH_8$P_>qB{P*nhteoL##}c;v0SF_*a+DzPZO20oMTH^;)uEh z0$PJ27iL^ikzsyq8bukIf^rCWhUyldc}^XocO02a_jNSI^f51suNq^pVTg_*l;coW zS4X5{7FeN}pI-T~|A@j8y|e*LerPe5=Rju{E6zJ7*6bT72Nm#K(k)FmX`ey}RqpAp zK^q*+V@4>~myXpP^&NxpMsm{^qYg2WbaP5rk&!&_RCMf0(uz4P1P| zY8JJ%Gkmy@@`)^4_V;lABac$lmVKQ)6er<)?mQlN?l4au-HaRg1ZOlIVH9%ix#u!x&K!2_-hBp081K&~y+ah*oC1gnL#0w- z$BrG8%HXGsX_P5_c zdwUzd{KXTz@WK`*vJ-fIHICy{34T;SaO>`;Ri2&Enb&jl#q8(zw=OGj*8U z2>rH1=(v=EN~}${iP+9gouRRA)Awo^8P4+MFW<@93)fKJ*gzPDxNdw#M^S|9x>#%Z z)Tchh)z@Cf$ml4?jvZrUWQ6QQjwlMLR4RmFM6pt$TnaG8FgP@Xjv`8>629-pak4>( zMI)p^N{FHgj^oCLe8!-4fRrwgE+;^pCJX|M)o2|c&`9Nx9UI|^r=OztXdgz{S;pKhuBL&8@FjOwF zt$&=+}8s2*OS~lhW6)u-cluHqW0^BP6=2>`EHR!PzF_=Ql#jCIp zex1v6fiTPPp{=wmTg~G6^H{TX1-*U8lSA}X-m8s2BOgJPqwuUnDhOPMqP0xu08hoY zQWH;u{VB6IzeurZlKGdmL$d%UMeB)Xc5FJ#V4=ji_q>m$x4sE{1;jMHsWsKwR?FMp zeluHM*n)#1&}AHXvOqkQH2U&QYeM0-XSnE!h%hP=MFo7nipL&#lF$FsSNZg3KENkG z`57L6;&J+VdSX4F@}`I2%0y&L#0(^L7+R3b1?H6VwB*v{RY0@rfiToB?cnlxvr(SH zX>SH0(NeI#yPp#idB(COT;tJc=w~l2|b~aDuOW^_z@m#}LE@NH6y~JPg&8SgV@Y(9p!f za*5j97&XdLF_uawShR3H*M8;`c&pAKQgHnZ*K)@lALgI__vabQjx#uXf`+C>5cbys z07|7YyLRo2wV}U;Z^DeWHqO6b4dpVtxMdp_;!J4)Dc>O~S5Vea5(2D6C&?2Y0w1Up z3q(~exv zkG%VxY~Qj4$McBtl@L30XmXbgM} zsd!sgj*N}N6Vpj04Sp$LPD=4R3!50#0bVF66$Asaj(VM?()k>}-}Y$Q|4(~)v$ ziYm;gQaDKJ-2iNetp@3V&Ol~<73a@d&WxR1bdOntm;(F+G9g3T>4{r1c}x;Fq!8FJ zWO8znR4PqXCWGs^n|xhS6SU$Z{Vd#*W$ z+R6!hT|nvx;pA{?Lqw7zSgaHnEjk|s1CQox;-BxxbhNRA#Gq_LrzS+i!bYv&GZ z67edgz~wWHLr((;EP$rB_b|tg9cTW6b^;Bv=gz@(Q|#WohfSL{aq}%V5?MiHG$Ml1 z*bpOo_pHgZlh1wN_Cm7pe1Vs13?^LQn}Kyi6_H5eO~NMvzLS7#SJiQ=j|{ z4_|#1OO`BQ$>Jp}T(X$vmIl_ZU&Z?MtN7DD{Sdu<$N2o`|DC(;`Zh|+*bzTz3l; z)DQ##V3%K`M{Qe2x$s%ldQ~Lz(tW4Og!_pAY=*HLP1uN3i*Ra)-837gmrOtf_z=C*Rvi zX7MU$n~y6Tj1!Sb`Bb8iN+qQ1MYx`abmHtPB^64!XdO@Sq0HKgR`SkwzKt*b`(0Q9 zlyc*wq*F|jBdsyoB!b5>QYtRIXbqqH+~3mGxu3uM%x5tgqR1vzs;_pPtZ@|~b$*(I zFFeKtB@Nx%ar47?MndQ@ma`0MmwnlQ{bkEIaYSpBNz*xejIx3SYtJV&XD)mDkMrWz zgXoGyR7zxwX3g@ML_v{xGn&|Ys6g4kz@Z+{CBg%H5ZOVLjEDqi8LP_#l2Se(EXB1( zq!g23#2}UdS8-T{?AK*RsfVg2+$HA_Ha1Yg;M#!lv0kFC9WdMlb{IrCsau_2t37mZ znV1-7*RJiXUVF}2_y4m1z}f57U^8XGGjPG;dahZ!l6#-oig2p2jz{EHGccLu2aj!J zdB-g*tvYpZ89!Yq5!Zef&P{R4wO4TW&mQ5Ktvi_6QpLyLd=(x}Y|EAmfaP?35JQPV z#o5*p#quin`#*jc|CkN9w`(^AYp^3(#t-$;+R%uPz!po8%Yu%6D_P4gxkbuj$DTdh za`TlStDv?O$FEDwuvF}>ET>Gb&iGzyUOLGZ=CmS1T2AJrpF*b-7Ch-tEi~oh`{6`4 zvZI65YgY2$PacVIkoxISRoKLK5U{O#7nst$D!K>6bc18YHOHNlcq6>AeSeI z48{gTx=h(-@fQL&&jU3{ba)77*~QGPX`rEIF-`A(Csey}l9RD0Bc>U+2Fp!1-^3Tc z_#X@&J%R6}&_Q%s^Z)vZR$Q@Kd3vs~zz=FMSY zM-vD4_jBmbAq0{LLl8wsrEslDX!8b*B?LlZK+6#x%CWefk9A!NL5a?ThgjP&o5gKy ztX#a1O-J|f%?BPQ0@@^8w6KkfXVuUq@}$ZYnrw-(XX#i_$KqK{ELtvjY)?OrZrjde zB>B`QKgL^bc{2wNA75^lNqZTRU7HMNbPJWOPe3i|qb zD3$Uk*PVVYrkv>I6i^~!>g~dX3wZlG-p18eU%}c7*U;1u=iDPDQ55@M2qAG@@LVVU zER%H+gb`sFqK!cqixsg8K{b{oGg?XM02@_es}}_}s>I=dN}wdMxt3#*CZyH{U*&05 z5z*urQm2{adDM8CF%wW_iY#c#z<3$Q2FPrYcF#rYFlH!ZK-MVIZ5}qQG3_2pmM@^A zV=ga__a%GgsfJtPRo7UgHTgmwx8jn{q)DgKgkeM!CAsy}loOeND*80rna=%P$zJOa z8CbJ=HG%Z#Sb83V$B$7cmw-A9psl5l%W?0$_p*KaPHwp2I^OxaxAN_8evA9=`5yOt z^KK3wILN@UKDKRso`$MgX0$X>>-#i%8D`F(ixZaV*|nG5ljX!;0T#D464f@bfA9pA z$t=|wSiNE~vsyiZ;Ym{ABqjjqJ0L0$dFarg7^c{?ua{@{9HE3n`W`0nTrff+E%f#E zQe6Y*oO>>hKKdxy#?I$cp4-xj7>J&_OQ!;SLZBl+dB?==NrOV2eMsg^EQb2X_WO5=QvBFNLGFc~y@J+$xZ@HeM&%K+&cil&;@8fEP8)^KCrZJVGN~RbyMWk|K z!*&y#0k0bj5s{5>HI%~w2fMl{70Q%~A-?ZZU7f+&Bn>7RQLE&LGSjQ=Bs0re@KP={ zHB|t#wYK1#V#aC#tu<0fR1zu-P%a0QN+p6I!gW0M?c0w^Gys)Kh1F|T(to6fo!hoj z%4SK|)>2bj%MI6GP0yZf9NO1OCgrhc_Dp{Nmg{-T)oV!?j&S1n2k?gvlPZkjryWo( zT9>I!2}ZL+l#d-Iwdf+GD-jmbzDqHTV?Bc)B6K5s=_l-!IO(*nf#ZmG3BNI^d zRh$20Z=bR?RyttI)4ya@(c#>TK^cK51n6v$QW1*AWuzDo0i|SR?&>?vOiz=pN^xv> zg6^(vwslTWj+K=tpe+r#O2m8)J6sDn40 zGcPts#>ATJq`4JBU}X|TBfw2gow>E}*MD&<4NjJ?eCZwvpl!PF|W^P>D3qkXEa16i57YI@n3SspZp;$^;J+m4>#RHNv0_m14Ig}Z!k{mkr12A zB}lmdp$%fX+m8>6C}Hd>Lrl>H0 zq0osG;PjcYMA=wsA(DIUNJ&At^fWZGPmQp#Tx5j}x!M!7yNS*(jHvZJsD;^=w?TUV zqbG2d%^-Vtm>Jh@KwSL?P&*4$Odqf^KCV=f{@_Z%y!q{Xn*2`+Lhkh|KX-vuHl0pyq%5DZRC4*e;*Nv zxByFjlZ)l%b<4QCu9nd!H`AOmq)UQAWXRRklb+e080IS|2H<;O4aUaW>xn{^< z*98D1T1t$zluG64B1<9Brh*h68arL+dc+RfDPSfkmSk#}mrhYz%Aulwh>*|gVZ#GD=ltuxz5rP4IEG}F=)>+emJ7)^;+c_2w{OY(mw^C6{*#p0r^LQPK? zPp7)e*!CKw6lGmZ)S-sivs$UHg8tsa1VIpckqC#9jflzt)d*VCRRlr6sLoQtC5I-U z3dgM`tt6FFfM3->FxhogohsA z#N}6B$7Sm`kZD=OoTUx%p69~4b?dnOLm!~4b3X?U^>O0Z$n?#0ltZXXT(D{d@4xN6 ztXXpbYcE`lqZHPH4&sPAZQ=;nDey{LG5x&BL<_Bhh_F&ZVNs5x9BLFUbp$MKnnlJA z6In$R8Qjn!9AeF`1u0#KAj$<4CZVz2gR~;0D-@K$1_4fFP^AJwD|}-y-*bs!E{$})Vsc)!5N@!|nrL}no zUkGN@*HOsliGTnNCSv!FJ$TCJPyhVm9NNE^Puy__V<(1KwDeqR8yb1%+ulm0RHU`O zmg}!vPtV?cJb3rr9NDvrvEF`aB~)9O(*o_yjm(_ySo5TZs_m6j78So6oSZyTo^&pWtA=ng9<10V4j~m5KM+e7=CSuwlb`?!NnO zP7IGDgu=)qEkRgL3p16c7Ul|9_>7N?)3vvY8*jQAgJtoexmaQQ!Y(VDQ3y_A3zpIsc-NJhI2?Q@MMOXN`d*cHS8~GWIj)bL#QND>X_wW6j3EY z3QJuogO7u&1%v(l9PhJqZr{a2KmI9Sy7MmH`TOtUgSX$#AAj^+n5fJrKJn?e*^*A2 zfRfY#=Ct$ZwALg3omM6(5Ed7QVj)jY_u+&op%ZCN>|3K;2W2hmue^$Te|R6|auAaeS5@c#_c`a5r_VDzGm|ozR1!i7 zEz&^&!NQ7*xQhGJRevh>Ro1e0VOK?ERaV8q+RLg4Hb4=9grbyC(vwLtlj;5G_qpYq z-yipxNkCB9UH6|K_n*A-N-}w#d(S=R`~7@BB{G_N5TG5^Xqf~74f9srnAnT>oH3>b zB0xz9qZ&)Q7xA7e|B1qEjSqk1D)Oz(q|+HHl`=vInwwkbT+~TtM+ccqmX?+l(wQ{* zrY2IUG|8kDAN@*TOw`c&n+1&ENC$fz#p#gqOCynRa9wAi#ocuJiHF}y9TN(3>yKvL zy0utQ%&PGIkV>78l zGv!)!VNmm@Se(MdrL4RxV6cJz7+TnVB+kp@$1lo`SI7okb%Rra#Bm_a7q?JI-Lx_#T?XaFm&lAb%=}7SY_r3`oI(+ua--7KsFozCdC2VFN`U6Bk z!@lpYE21{U$o%NU7&~|Eqy0HYft|(4wNsKwq=^WF5S+LUkmf0({pP!G6YC;%oH%y) zY!^>I@zw&QFeqJv=|d1!Si7c=<-JQ87#NEw%{q$FY8^Iyrg+kp*Z9@M`scv1m`OEJ zT$UqgOSX*;A;*R|E0-a!JhR!slQJ+UAi=27M*^q0-C_9dBYJe~X zN!_pGx-J1RQ{?q;dkqIhC;9g;{yS1z7~e-43kaX#BAwTk%0`S{NEp-+!jQ{m*!K9N zeC%Uaaora`%RhhMpV_u`7msh>8tVm-7!z+bBSQySwCp6hSN2f;!wzI!5jbgVTR}b# zN>ZDgqck-`M|&%@HKC-y_;sQ%;>1%1NV}0!`YG z3PV&FVoZb)lE{)&Etl5brC>{r^yQnU*f%xj>Fn$zo6SA}zxj(EwK%+LM@Pme7YiUV z4O*aTH2+8BJ($BsxsVdqBoUUN9@Xes)Pad$>myqULJwOc;>acmmIj5U)lQJLTn?2g z3=t3@m?Y#-6wvEt$t99Zcs~6`&_7*7|9Ug8d(nAx+bK@(T}5T)QD%X*grx2T6l!(C z(kxv$JB|+x1N_hmFRkF;_ebNmJdY7ymHnOf+PaV_#aOE|M<1!tar2}d1&Dxdo7 z=lG8w{etVicN0gg=;OTSoyFh&?IoPF=_J-2wU)1b`8vwwkbV0H*uHZYBO_zX%}k>Z zbT8`Q#TUPjuC7)Z11)?%TmTylvSF0jkPSQq5+ejSj)jRrj1JL_eOsVO18F2O)Ugdg zC|GC(RpWIHLI@?1KaZ=1V7VZ`%_zKDfMq}g9wM^wy)r5#NHxb4b+2B>4q|uo`H!ix zE+k^WtyV3Ps+MR0 zhM)c7m&{I%VS6Pmdj9#m?L8j^%ZXES!hnhWyZF)TYLo zYZI-hEPkoN-d($R{7@MmXf`l|MTL;fj}$p(b%|s9T1g8B+mVF6q%fx_g;^fhIm>@; zp5T#Mf?4uJ%p2T^C!AlqcJE?fpvdW`olZ|r4-=Dx_*ulcsPV*lUgK^+9`TaLK)3=E zuzOcO)k;Vr9iQ@>PCbRMUVj6RZ{N$WZoQqCU3wm^%~|S>X6ms$-1yC}lRUVGa~5}y z%_S)g%@GC>SvSR;iJQt+ge05Ip`(aU*Dz5?QYrGeH0f-DTIdt`0g;eQ zjZO0DPkn~3ed$Yl>C0c@EpPn??%uqan{WCVTASD)@Gsf0o;1acbnGG0-``KMSf-^V zhi*g)V+?-H!$~CQ>Fyy6Lbh+;#)`G8pK#9(`w)r47^elK9aPeespB#Z?vp}b8$sT2 znXFfdw2u%bW~qo6(2=e}H_j`CCX;aZ$UlFOzO}3Q$G3lwAN}a3@tnC~Ab6Ph7*D}n z*Cmli;y5;mM3PiGMJky@S(1EnhR%*Qv@x`|x6|6%N>fu49UXB)+}74YQ@)Aje15?Q z(RCdx`*47h)xbF#;Hw@4zZflB`UVkUn^^ zM~ATjLKCMT)+2*<(>P6S(9r1HNK+qgr9DG&GQ7~-O6Ejy1=8lNQX(VGNs6A7gs@BK45lMlQBNc z0)`D#FjRrjdPKV9v#hn1Tq0ztB^j@jn50~>43#iK0jYYGXrP}| zP$N0dj4=Wcg@hH*wYcsNrAt*v#tn=KoBl9jP*{{y22>uFufsIAE=aDPuK9oVdKLiq|NAf+(! z*E2jd$z3~!=(%${Z@F+i?RFAPgfj4S?xzulGtzT8hYx)CO_VWwS+@`t+v?+s0#=zP0dsp8QMd)H%C)`F?~Hf{5GmDL>cCrS}|Hvu2hJk za6$VWkHBJJzz7ceEa}5p3ns?0#lzsWV_fs zG(u|eh0wMEbQWP{L5C>fshbvYu`oC?&TwIlOiKstoy|P=rI&K!@9tuB+crRABOBh{ zProhCQ%RqyQI0`?c&*HOb2K$IVahh&yy4rNb=En&^pY3xp7&kJTi^b6W@o2~l!L~? zi)+ldH;p$lgg0F!vA6~)i*gWADa_G(+&b2- zSdAOjFgipMKR0oleK`l`3{y_I;mHDK;Au%Kq=9SpJ3Y zc7W;MXuTN6Ir=N(FCuqxN$w`ZQY615V zG6{@4`Z#NIX-@9$VXft2E$icfp+iV4wvEoQ=fFPN>u|=pES)(Ep)AVEWlE>`@dLYf zaHL4Z$uV20bFypGmTv;#5cz(**CH4gous9^ms}wrkx0_o-NM(u^DVypgYR;}2`BM4 zFS(2tUHoDeFHUp(F)KLcm=#n5Ll7AfjwGsRTsv-n>mdZ8j@`C}Zn$`hm~|rrdcmaZ zNRO8I@&k`TVK%1WFWj?`v;`?E1kc9=VeINnEFXze78{h|z#tm?pphD33vewg6sAzc z5D*15EXT&E0H?`Bu2Q61*D&b z;`OI5W!Xfb&q*hp#8v-#6>~FF7@>(|yrJ6){A!t?Qej2UQhK_&NoKOKMmLN|c{MU# zl_kv?R3gtUzr2~7e{v&t-1!%Pkxf?zVLb8a^-s# z9O2s*brFUEuYcLatX2WTzrB@q8PSxnsrglQ?;T<9z8Ngw_+@QuXl^ETV3^@Tl{#?$ z2(;Zdi=AA?nzl}?KrlL4Vqj9RW!D&Y?3v<_2SprWzw)QPQG569Wq5d)o~1dK_x7^& zksS^15)mguSWXfwIq!Vd^ zuuk3giF8D@QXrjjNM%#hW<7`?n@JH#n4X=bI9KBJuXzJW`+I!opFhGQTX!%xFoY%q zBQQeziTNQ%#7xF*t8LjB1BV7<)4aB}rr1o<7>qVJt_w=g(lFoKym<>R{+pLHxb{y0 zgwFrBHqewNnNBfhG`6MCzQ#6!G?KQY!)O>%i~RWGn0O>3>=c$QF(^VEpu-Xuzwjme z{i|Qg!JYfL`KFr*8}XwY0Rk9f2!c8R2Cwc>EEXFPpuvKZy=knR`Swdn8{4vwN}-fO zNl7A^q^-4;_KsE(i3F~bB%96ByL=gaeSIwI?ji_7(y0_}ZEdu+wE-HXB>8lbWYUTc zC$A2LSqdWqOzwS{D4fKtPos1VI}A`d#6+fHrWg-Rz$P>ip~}&*_GHq_j|P<>iUMq- zh;)D>8jPthq#D$*1BFy3W;_WMFJLLLh~u(d*QHvm64vwrD56aa#>~ssj4?Qt!`gML z*|1?fhX#lF`7dtfjc@wDJpcL6=ep~@$iV|+_|cz_v=v9x#h@wRF<92*bVN>6>FCXq zw?lkpNjjRIlpvHAt0Rj8(;?-CG_QhYtWaT5CQV1$q052JWR_AQPYI~{hGI3OSgkWU zRU-`I_`szJi|WDMB%%B8Fo_aiF^)fO_e0%mXKV2 zG%DMQtQ+bx6L`b>VeCMhQu7Q3Ku

o|j1&1ZSOj2G@V-3#?w(_ZL?8&tA_00MCK| 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ُA_xswk2w!J?jSX69x|SE|ev=lI3X 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 z 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 OpnvJIc9Eui_`d;1@82Z= literal 0 HcmV?d00001 From ba8c5568a5c672581bad2c510493b18e1eefeaa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kilian=20K=C3=B6ppchen?= <373318+stubb@users.noreply.github.com> Date: Thu, 30 Nov 2023 12:03:29 +0100 Subject: [PATCH 38/38] Fix building assistant --- .../Cargo.toml | 5 +- .../src/main.rs | 75 ++++++++++++------- 2 files changed, 51 insertions(+), 29 deletions(-) diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/Cargo.toml b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/Cargo.toml index e591528..0d36000 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/Cargo.toml +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/Cargo.toml @@ -13,4 +13,7 @@ interfaces = { path = "../../../../proto_build"} paho-mqtt = { workspace = true } tokio = { workspace = true, features = ["macros", "rt-multi-thread", "signal"] } tonic = { workspace = true } -uuid = { workspace = true, features = ["v4", "fast-rng", "macro-diagnostics"] } \ No newline at end of file +uuid = { workspace = true, features = ["v4", "fast-rng", "macro-diagnostics"] } +serde = { workspace = true } +serde_derive = { workspace = true } +serde_json = { workspace = true } \ No newline at end of file diff --git a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs index 377bd0a..4f30322 100644 --- a/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs +++ b/in-vehicle-stack/scenarios/wheelchair_assistant_use_case/applications/wheelchair_assistant_application/src/main.rs @@ -21,13 +21,18 @@ use interfaces::module::managed_subscribe::v1::managed_subscribe_client::Managed use interfaces::module::managed_subscribe::v1::{ Constraint, SubscriptionInfoRequest, SubscriptionInfoResponse, }; -use log::{debug, info, LevelFilter}; +use interfaces::invehicle_digital_twin::v1::invehicle_digital_twin_client::InvehicleDigitalTwinClient; +use interfaces::invehicle_digital_twin::v1::{EndpointInfo, EntityAccessInfo, RegisterRequest}; +use log::{debug, info, warn, LevelFilter}; use paho_mqtt as mqtt; use tokio::signal; use tokio::task::JoinHandle; use tokio::time::{sleep, Duration}; use tonic::{Request, Status}; +use tokio::sync::watch; use uuid::Uuid; +use serde_derive::{Deserialize, Serialize}; +use std::sync::atomic::{AtomicBool, Ordering}; const FREQUENCY_MS_FLAG: &str = "freq_ms="; const MQTT_CLIENT_ID: &str = "wheelchair-assistant-consumer"; @@ -42,9 +47,18 @@ const MAX_RETRIES: i32 = 10; // for demo purposes we will retry a maximum of 10 // By default we will wait 5 seconds between retry attempts const DURATION_BETWEEN_ATTEMPTS: Duration = Duration::from_secs(5); -let mut door_open: bool = false; -let mut steering_wheel_up: bool = false; -let mut driver_seat_back: bool = false; +static door_open: AtomicBool = AtomicBool::new(false); +static steering_wheel_up: AtomicBool = AtomicBool::new(false); +static driver_seat_back: AtomicBool = AtomicBool::new(false); + +#[derive(Debug, Serialize, Deserialize)] +#[serde(tag="type")] +struct WheelchairAssistantStateProperty { + #[serde(rename = "WheelchairAssistantState")] + car_wheelchair_assistant_state: car_v1::car::car_wheelchair_assistant_state::TYPE, + #[serde(rename = "$metadata")] + metadata: Metadata, +} /// Get car adjustment subscription information from managed subscribe endpoint. /// @@ -130,15 +144,17 @@ async fn receive_car_adjust_updates( // Here we log the message received. This could be expanded to parsing the message, // Obtaining the wheelchair assistant state and making decisions based on the weight // For example, adjusting body functions or powertrain of the towing vehicle. - let new_state = msg["car_wheelchair_assistant_state"]; + let payload_str = msg.payload_str(); + let msg_des: WheelchairAssistantStateProperty = serde_json::from_str(&payload_str).unwrap(); + let new_state = msg_des.car_wheelchair_assistant_state; info!("{}", new_state); info!("{}", msg); - if new_state == "HOLD" { + if new_state == 3 { //HOLD info!("Adjusting the car!"); - door_open = true; - steering_wheel_up = true; - driver_seat_back = true; + door_open.store(true, Ordering::Relaxed); + steering_wheel_up.store(true, Ordering::Relaxed); + driver_seat_back.store(true, Ordering::Relaxed); } else { info!("No need to rearrange"); } @@ -272,16 +288,17 @@ async fn provider_register_steering_wheel_adjustment( fn provider_start_seat_adjustment_data_stream() { debug!("Starting the Provider's seat adjustment data stream."); - let (sender, reciever) = watch::channel(driver_seat_back); + let (sender, reciever) = watch::channel(driver_seat_back.load(Ordering::Relaxed)); tokio::spawn(async move { loop { debug!( - "Recording new value for {} of {state_distance}", - car_v1::car::is_car_seat_in_assist_position::ID + "Recording new value for {} of {}", + car_v1::car::is_car_seat_in_assist_position::ID, + driver_seat_back.load(Ordering::Relaxed) ); - if let Err(err) = sender.send(driver_seat_back) { + if let Err(err) = sender.send(driver_seat_back.load(Ordering::Relaxed)) { warn!("Failed to get new value due to '{err:?}'"); break; } @@ -295,16 +312,17 @@ fn provider_start_seat_adjustment_data_stream() { fn provider_start_door_adjustment_data_stream() { debug!("Starting the Provider's door adjustment data stream."); - let (sender, reciever) = watch::channel(door_open); + let (sender, reciever) = watch::channel(door_open.load(Ordering::Relaxed)); tokio::spawn(async move { loop { debug!( - "Recording new value for {} of {state_distance}", - car_v1::car::is_car_door_open::ID + "Recording new value for {} of {}", + car_v1::car::is_car_door_open::ID, + door_open.load(Ordering::Relaxed) ); - if let Err(err) = sender.send(door_open) { + if let Err(err) = sender.send(door_open.load(Ordering::Relaxed)) { warn!("Failed to get new value due to '{err:?}'"); break; } @@ -318,16 +336,17 @@ fn provider_start_door_adjustment_data_stream() { fn provider_start_steering_wheel_adjustment_data_stream() { debug!("Starting the Provider's steering wheel adjustment data stream."); - let (sender, reciever) = watch::channel(steering_wheel_up); + let (sender, reciever) = watch::channel(steering_wheel_up.load(Ordering::Relaxed)); tokio::spawn(async move { loop { debug!( - "Recording new value for {} of {state_distance}", - car_v1::car::is_car_steeringwheel_in_assist_position::ID + "Recording new value for {} of {}", + car_v1::car::is_car_steeringwheel_in_assist_position::ID, + steering_wheel_up.load(Ordering::Relaxed) ); - if let Err(err) = sender.send(steering_wheel_up) { + if let Err(err) = sender.send(steering_wheel_up.load(Ordering::Relaxed)) { warn!("Failed to get new value due to '{err:?}'"); break; } @@ -350,7 +369,7 @@ async fn main() -> Result<(), Box> { const PROVIDER_AUTHORITY_SEAT: &str = "0.0.0.0:4070"; const PROVIDER_AUTHORITY_DOOR: &str = "0.0.0.0:4080"; const PROVIDER_AUTHORITY_STEER: &str = "0.0.0.0:4090"; - let provider_uri; + // Get the In-vehicle Digital Twin Uri from the service discovery system // This could be enhanced to add retries for robustness let invehicle_digital_twin_uri = discover_service_using_chariott( @@ -434,22 +453,22 @@ async fn main() -> Result<(), Box> { provider_start_seat_adjustment_data_stream(); signal::ctrl_c().await?; - provider_uri = format!("http://{PROVIDER_AUTHORITY_SEAT}"); - provider_register_seat_adjustment(&invehicle_digital_twin_uri, &provider_uri).await?; + let provider_uri_seat = format!("http://{PROVIDER_AUTHORITY_SEAT}"); + provider_register_seat_adjustment(&invehicle_digital_twin_uri, &provider_uri_seat).await?; debug!("The Provider Seat has registered with Ibeji."); provider_start_door_adjustment_data_stream(); signal::ctrl_c().await?; - provider_uri = format!("http://{PROVIDER_AUTHORITY_DOOR}"); - provider_register_door_adjustment(&invehicle_digital_twin_uri, &provider_uri).await?; + let provider_uri_door = format!("http://{PROVIDER_AUTHORITY_DOOR}"); + provider_register_door_adjustment(&invehicle_digital_twin_uri, &provider_uri_door).await?; debug!("The Provider Door has registered with Ibeji."); provider_start_steering_wheel_adjustment_data_stream(); signal::ctrl_c().await?; - provider_uri = format!("http://{PROVIDER_AUTHORITY_STEER}"); - provider_register_steering_wheel_adjustment(&invehicle_digital_twin_uri, &provider_uri).await?; + let provider_uri_steer = format!("http://{PROVIDER_AUTHORITY_STEER}"); + provider_register_steering_wheel_adjustment(&invehicle_digital_twin_uri, &provider_uri_steer).await?; debug!("The Provider SteeringWheel has registered with Ibeji."); info!("The Consumer has completed. Shutting down...");