Skip to content

Dispatching Service

thomas-nicolai-frequenz edited this page Mar 31, 2023 · 1 revision

Dispatching includes the management of charging stations and other kind of flexible electricity consumer as well as the production of electricity, therefore the dispatch process involves not only managing the generation of electricity but also managing the consumption of electricity across multiple microgrids. Briefly put, dispatching is a process of sending a set of instructions to an energy producer or consumer of a specific microgrid for a given point in time.

The flowchart depicts the architecture of the Frequenz cloud-based API ecosystem that is a vital component for building a decentralized and distributed energy management system with the Frequenz SDK. The system uses a DispatchService daemon and a gRPC API to enable communication between different components.

In the flowchart a SDK-based cloud application sends a dispatch requests to DispatchService gRPC API using the SDK DispatchAPIClient. The DispatchService gRPC API distributes the request to the edge application.

The SDK DispatchBroadcastingActor running on a microgrid controller receives that request from the DispatchService gRPC API and forwards that to the applications two Use Case Actors that receive the dispatch request via the DispatchBroadcastingActor.

flowchart TB
    subgraph cloud["Cloud"]
        api["DispatchService (daemon)\nExposes gRPC API"]

        subgraph ui["UI"]
            user["UI User"]
        end

        subgraph cloud_app["Cloud App"]
            cloud_actor["App Actor\n(ex: TradingActor)"]
            subgraph sdk_cloud["SDK (Cloud)"]
                cloud_client["DispatchAPIClient (producer)"]
            end

            cloud_actor -->|"Creates Dispatch (1a)"| cloud_client
        end
    end

    user -->|"Creates Dispatch (1b)"| api
    cloud_client -->|"(2)"| api
    api -->|"(3)"| edge_client

    subgraph edge["Edge"]
        subgraph edge_app["Edge App"]
            edge_actor1["Use Case Actor 1"]
            edge_actor2["Use Case Actor 2"]
            subgraph sdk_edge["SDK (Edge)"]
                edge_client["DispatchAPIClient (consumer)"]
                edge_dispatch_actor["DispatchBroadcastingActor"]
            end

            edge_client -->|"(4)"| edge_dispatch_actor
            edge_dispatch_actor -->|"Broadcasts Dispatch (5a)"| edge_actor1
            edge_dispatch_actor -->|"Broadcasts Dispatch (5b)"| edge_actor2
        end
    end
Loading
Clone this wiki locally