# Platform structuur

Het platform is opgebouwd uit een aantal lagen zoals afgebeeld in Figuur 1. Deze structuur heeft als doel: de data overzichtelijk en leesbaar weer te geven.

# Figuur 1: Module Structuur Vergroten
%%{init: {'theme':'base'}}%%
graph TD
    subgraph "Hoofdlaag (1)"
    A("[platform]")-->B("[system]")
    end
    subgraph "Systeemlaag (2)"
        B --> M(modules)
        B --> S(services)
    end
    subgraph "Datalaag (3)"
    subgraph  
    S--> Q("[service-name]")
    S--> D(discovery)
    D--> DQ("[MAC/service-name]")
    DQ --> DO(online)
    DO-->DOT(type)
    DO-->DOD(description)

    DQ --> DE(enabled)
    DE-->DET(type)
    DE-->DED(description)

    DQ --> DV(version)
    DV-->DVT(type)
    DV-->DVD(description)

    DQ --> DT(timestamp)
    DT-->DTT(type)
    DT-->DTD(description)

    
    DQ --> DP("~")
    DP-->DPT(type)
    DP-->DPD(description)
    end

    subgraph  

    M --> MSP("[specific-function]")
    MSP --> MI("[index]")
    MI --> MIN(inputs)
    MIN --> MIN_DATA("[data]")
    MIN_DATA --> MIN_DATA_TYPE("type")
    MIN_DATA_TYPE --> MIN_DATA_TYPE_RANGE("range*")
    MIN_DATA_TYPE_RANGE --> MIN_DATA_TYPE_RANGE_MIN("min")
    MIN_DATA_TYPE_RANGE --> MIN_DATA_TYPE_RANGE_MAX("max")
    MIN_DATA_TYPE_RANGE --> MIN_DATA_TYPE_RANGE_STEPS("steps")
    MIN_DATA --> MIN_DATA_DESCR("description")
    
    MI --> MCONF(config)
    MCONF --> MCONF_DATA("[data]")
    MCONF_DATA --> MCONF_DATA_TYPE("type")
    MCONF_DATA_TYPE --> MCONF_DATA_TYPE_RANGE("range*")
    MCONF_DATA_TYPE_RANGE --> MCONF_DATA_TYPE_RANGE_MIN("min")
    MCONF_DATA_TYPE_RANGE --> MCONF_DATA_TYPE_RANGE_MAX("max")
    MCONF_DATA_TYPE_RANGE --> MCONF_DATA_TYPE_RANGE_STEPS("steps")
    MCONF_DATA --> MCONF_DATA_DESCR("description")

    MI --> MOUT(outputs)
    MOUT --> MOUT_DATA("[data]")
    MOUT_DATA --> MOUT_DATA_TYPE("type")
    MOUT_DATA_TYPE --> MOUT_DATA_TYPE_RANGE("range*")
    MOUT_DATA_TYPE_RANGE --> MOUT_DATA_TYPE_RANGE_MIN("min")
    MOUT_DATA_TYPE_RANGE --> MOUT_DATA_TYPE_RANGE_MAX("max")
    MOUT_DATA_TYPE_RANGE --> MOUT_DATA_TYPE_RANGE_STEPS("steps")
    MOUT_DATA --> MOUT_DATA_DESCR("description")
    end
    end

# Hoe is de structuur opgebouwd.

De structuur van het platform bestaat uit drie lagen:

  1. Hoofdlaag
  2. Systeemlaag
  3. Datalaag

Deze opbouw is aan het platform gegeven om de overzichtelijkheid en de leesbaarheid te kunnen waarborgen. Door de opbouw in te delen in lagen wordt het duidelijk, hoe de gelaagdheid van de data is opgebouwd.

# Hoofdlaag

# Figuur 2: Systeemlaag (2)
%%{init: {'theme':'base'}}%%
graph TD
    subgraph "Hoofdlaag (1)"
    A("[platform]")-->B("[system]")
    end

De hoofdlaag geeft aan door middel van de [platform]notatie aan welk van welk platform de structuur wordt bekeken. Vanuit de deze notatie kunnen er meerde platformen aan elkaar worden gekoppeld. Dit doordat de platforms door de [platform]notatie van elkaar kunnen worden gescheiden. Dit heeft als voordeel dat de overzichtelijkheid en leesbaarheid hierdoor wordt vergroot.

# Systeemlaag

# Figuur 3: Systeemlaag (2)
%%{init: {'theme':'base'}}%%

graph TD
    subgraph "Systeemlaag (2)"
        S(services)
        M(modules)
    end

De systeemlaag is opgebouwd uit twee subonderdelen:

  1. services
  2. modules

# Services

De services blok dient ervoor om services binnen de systeemlaag op te kunnen nemen. Een service maakt deel uit van de functie verzameling van een platform. Echter past een functie niet binnen de structurering van de modules. Dit doordat het geen slimme module met specifieke functie met daarbij een output.

# Discovery Service
# Figuur 4: Discovery Service
%%{init: {'theme':'base'}}%%
graph TD
    subgraph  
    D(discovery)
    D--> DQ("[MAC/service-name]")
    DQ --> DO(online)
    DO-->DOT(type)
    DO-->DOD(description)

    DQ --> DE(enabled)
    DE-->DET(type)
    DE-->DED(description)

    DQ --> DV(version)
    DV-->DVT(type)
    DV-->DVD(description)

    DQ --> DT(timestamp)
    DT-->DTT(type)
    DT-->DTD(description)

    
    DQ --> DP(timestamp)
    DP-->DPT(type)
    DP-->DPD(description)
    end  

De discovery service wordt gebruikt om modules en services een centrale plek te geven waarin deze statusinformatie van hunzelf kwijt kunnen. De discovery service bestaat uit de volgende datavelden:

  1. online (Will Topic):
    Geeft aan of de module nog beschikbaar is in het systeem. Ook geeft het systeem bij abrupte ontkoppeling van de desbetreffende module weer of deze nog kan worden gevonden binnen het systeem.
  2. enabled:
    Geeft aan of de module mag worden gebruikt door andere modules.
  3. version:
    Geeft de informatie van de service of smart module. Dit kan gebruikt worden om statische hardware specificatie door te geven en/of firmware revisies in te kunnen vermelden
  4. timestamp:
    Geeft de laatste update tijd weer.
  5. ~ (working path):
    Geeft aan onder welk ‘topic’ (path) de smart module of service de informatie publiceert.

Met deze datavelden kan er worden gekeken wanneer een module of service niet meer beschikbaar is binnen de structuur. Ook is hierin versie-informatie meegenomen om onderscheid te kunnen maken tussen verschillende versies van modules en services.

# Datastructuur

Alle data binnen het platform is gestructureerd zoals in Figuur 5 weergegeven. In deze structuur is alle data

# Figuur 5: Datastructuur
%%{init: {'theme':'base'}}%%
graph TD
    DATA("[data]")
    DATA --> DATA_TYPE("type")
    DATA_TYPE --> DATA_TYPE_RANGE("range*")
    DATA_TYPE_RANGE --> DATA_TYPE_RANGE_MIN("min")
    DATA_TYPE_RANGE --> DATA_TYPE_RANGE_MAX("max")
    DATA_TYPE_RANGE --> DATA_TYPE_RANGE_STEPS("steps")
    DATA --> DATA_DESCR("description")