diff --git a/src/sa/model/index.md b/src/sa/model/index.md index 13875fb..405efe0 100644 --- a/src/sa/model/index.md +++ b/src/sa/model/index.md @@ -577,14 +577,145 @@ Exceed: >6 components (>1 decomposed) and >2 use case/process view ## Logical View +The existing components in in this diagram are all the stateful components. All of them will be instances of the PostgreSQL 15 RDBMS ([sources here](https://github.com/postgres/postgres) and [specification here](https://www.postgresql.org/docs/15/index.html)), a _free as in beer_ and FOSS piece of software. + +```puml +@startuml +skinparam componentStyle rectangle + +!include + +title Smarthut.sm Logical View + +interface " " as DF +interface " " as DIF +interface " " as TF +interface " " as SCF +interface " " as UIF + +[Smart device] as D +[Smart sensor] as S +[User Interface] as UI + +component "Users and Devices" as DEV { + interface " " as DIDBF + + [Device Engine] as DI + [User and Device DB <$database{scale=0.33}>] as DIDB + + DIDBF-DIDB + DI -( DIDBF +} + +component "Triggers and Automations" as TRIG { + interface " " as TDBF + + [Trigger and Automation Engine] as T + [Trigger and Automation DB <$database{scale=0.33}>] as TDB + + TDBF-TDB + T -( TDBF +} + +component "Scenes" as SCENE { + interface " " as SCDBF + + [Scene Engine] as SC + [Scene DB <$database{scale=0.33}>] as SCDB + + SCDBF-SCDB + SC -( SCDBF +} + +D--DF +UI--UIF +DIF--DI +TF--T +SCF--SC + +S --( DIF +D --( DIF +DI --( TF +T --( SCF +DIF )-- SC +DF )-- DI +UIF )-- DI +UI --( DIF +UI --( SCF +UI --( TF + +skinparam monochrome true +skinparam shadowing false +skinparam defaultFontName Courier +@enduml +``` ## Process Views -Use Case: +Use Case: A smart sensor 'S' reports a value which satisfies the condition defined in a trigger. Thanks to an automation specification, this in turn triggers the application of a scene which changes the state of smart device 'D'. + +```puml +@startuml +title Process View: Sensor triggers trigger and scene application + +participant "Smart device 'D'" as D +participant "Smart sensor 'S'" as S +participant "User Interface" as UI +participant "Device Engine" as DI +participant "User and Device DB" as DIDB +participant "Trigger and Automation Engine" as T +participant "Trigger and Automation DB" as TDB +participant "Scene Engine" as SC +participant "Scene DB" as SCDB + +S -> DI: report new value +DI -> DIDB: store new value +DI -> UI: display new value +DI -> T: report latest device state +T -> TDB: query for relevant triggers +T -> TDB: query for triggered automations +T -> TDB: query for scenes included in automation +T -> SC: request scene application +SC -> SCDB: query for device states to apply +SC -> DI: request application of new state to device 'D' +DI -> D: apply new state +D -> DI: report successful application +DI -> DIDB: store new state +DI -> UI: display new state +skinparam monochrome true +skinparam shadowing false +skinparam defaultFontName Courier +@enduml +``` + +Use case: a user alters manually the state of a device in the UI, and the device updates accordingly. + +```puml +@startuml +title Process View: Sensor triggers trigger and scene application + +participant "Smart device 'D'" as D +participant "Smart sensor 'S'" as S +participant "User Interface" as UI +participant "Device Engine" as DI +participant "User and Device DB" as DIDB +participant "Trigger and Automation Engine" as T +participant "Trigger and Automation DB" as TDB +participant "Scene Engine" as SC +participant "Scene DB" as SCDB + + + +skinparam monochrome true +skinparam shadowing false +skinparam defaultFontName Courier +@enduml +``` + # Ex - Component Model: Bottom-Up {.instructions