# jose-289/smart-home architecture

> Architecture diagram of the GitHub repository jose-289/smart-home, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jose-289/smart-home
- Repository: https://github.com/jose-289/smart-home

## Overview

This is a JavaFX smart-home management application for controlling lights, thermostats, smart locks, and device groups. The main workflow is user actions in the desktop controllers, routed through SmartHomeFacade to create devices or operate them; grouped operations become composite-generated commands executed through command history. Climate strategies, lock states, mediator coordination, and device event observers provide supporting behavior. Relationships below are limited to the README and sampled source/index evidence; unsampled wiring is not assumed.

Main entry points: [`src/main/java/edu/smarthome/service/SmartHomeFacade.java`](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/service/SmartHomeFacade.java) (Home Facade), [`src/main/java/edu/smarthome/pattern/behavior/mediator/SmartHomeMediator.java`](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/behavior/mediator/SmartHomeMediator.java) (Home Mediator), [`src/main/java/edu/smarthome/model/Device.java`](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/model/Device.java) (Device Base), [`src/main/java/edu/smarthome/controller/HomeController.java`](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/controller/HomeController.java) (Home Controls)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Desktop Interface"]
  node_app["JavaFX Application"]
  node_home["Home Controls"]
  node_deviceui["Device Controls"]
  node_lightui["Light Controls"]
  node_climateui["Climate Controls"]
  node_lockui["Lock Controls"]
  node_securityui["Security Controls"]
  node_groupui["Group Controls"]
end

subgraph group_service["Home Services"]
  node_facade["Home Facade"]
  node_factory["Device Factory<br/>[DeviceCreator.java]"]
end

subgraph group_domain["Device Domain"]
  node_light["Light Device<br/>[Light.java]"]
  node_thermostat["Thermostat Device<br/>[Thermostat.java]"]
  node_smartlock["Smart Lock<br/>[SmartLock.java]"]
  node_device["Device Base<br/>[Device.java]"]
  node_events["Device Events<br/>[DeviceEvent.java]"]
end

subgraph group_patterns["Behavior Patterns"]
  node_composite["Device Groups<br/>[DeviceGroup.java]"]
  node_commands["Commands<br/>[Command.java]"]
  node_history["Command History"]
  node_macro["Macro Commands<br/>[MacroCommand.java]"]
  node_mediator["Home Mediator"]
  node_observer["Event Observer"]
  node_climate["Climate Strategies"]
  node_lockstate["Lock States<br/>[LockState.java]"]
end

node_user(("Home User"))

node_user -->|"opens"| node_app
node_app -.->|"presents"| node_home
node_user -->|"controls"| node_home
node_home -->|"delegates to"| node_facade
node_deviceui -->|"delegates to"| node_facade
node_lightui -->|"delegates to"| node_facade
node_climateui -->|"delegates to"| node_facade
node_lockui -.->|"delegates to"| node_facade
node_securityui -.->|"delegates to"| node_facade
node_groupui -->|"delegates to"| node_facade
node_facade -->|"creates devices"| node_factory
node_factory -->|"constructs"| node_device
node_facade -->|"initializes and delegates"| node_mediator
node_mediator -->|"coordinates"| node_light
node_mediator -->|"coordinates"| node_thermostat
node_mediator -->|"coordinates"| node_smartlock
node_facade -->|"operates groups"| node_composite
node_composite -->|"gathers"| node_commands
node_facade -->|"builds group macros"| node_macro
node_facade -->|"executes and tracks"| node_history
node_history -->|"executes and undoes"| node_commands
node_macro -->|"composes"| node_commands
node_device -->|"notifies"| node_observer
node_device -->|"creates"| node_events
node_thermostat -->|"applies"| node_climate
node_smartlock -->|"delegates state changes"| node_lockstate

click node_app "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/app/SmartHomeApplication.java"
click node_home "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/controller/HomeController.java"
click node_deviceui "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/controller/DeviceController.java"
click node_lightui "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/controller/LightController.java"
click node_climateui "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/controller/ThermostatController.java"
click node_lockui "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/controller/SmartLockController.java"
click node_securityui "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/controller/SecurityController.java"
click node_groupui "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/controller/GroupController.java"
click node_facade "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/service/SmartHomeFacade.java"
click node_factory "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/creational/factory/DeviceCreator.java"
click node_light "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/model/Light.java"
click node_thermostat "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/model/Thermostat.java"
click node_smartlock "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/model/SmartLock.java"
click node_device "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/model/Device.java"
click node_events "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/model/DeviceEvent.java"
click node_composite "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/structural/composite/DeviceGroup.java"
click node_commands "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/behavior/command/Command.java"
click node_history "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/behavior/command/CommandHistory.java"
click node_macro "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/behavior/command/MacroCommand.java"
click node_mediator "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/behavior/mediator/SmartHomeMediator.java"
click node_observer "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/behavior/observer/DeviceObserver.java"
click node_climate "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/behavior/strategy/ClimateStrategy.java"
click node_lockstate "https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/behavior/state/LockState.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_home,node_deviceui,node_lightui,node_climateui,node_lockui,node_securityui,node_groupui,node_user toneBlue
class node_facade,node_factory toneAmber
class node_light,node_thermostat,node_smartlock,node_device,node_events toneMint
class node_composite,node_commands,node_history,node_macro,node_mediator,node_observer,node_climate,node_lockstate toneRose
```

## Components

### Desktop Interface

- [JavaFX Application](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/app/SmartHomeApplication.java): `src/main/java/edu/smarthome/app/SmartHomeApplication.java`
- [Home Controls](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/controller/HomeController.java): `src/main/java/edu/smarthome/controller/HomeController.java`
- [Device Controls](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/controller/DeviceController.java): `src/main/java/edu/smarthome/controller/DeviceController.java`
- [Light Controls](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/controller/LightController.java): `src/main/java/edu/smarthome/controller/LightController.java`
- [Climate Controls](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/controller/ThermostatController.java): `src/main/java/edu/smarthome/controller/ThermostatController.java`
- [Lock Controls](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/controller/SmartLockController.java): `src/main/java/edu/smarthome/controller/SmartLockController.java`
- [Security Controls](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/controller/SecurityController.java): `src/main/java/edu/smarthome/controller/SecurityController.java`
- [Group Controls](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/controller/GroupController.java): `src/main/java/edu/smarthome/controller/GroupController.java`

### Home Services

- [Home Facade](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/service/SmartHomeFacade.java): `src/main/java/edu/smarthome/service/SmartHomeFacade.java`
- [Device Factory](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/creational/factory/DeviceCreator.java): `src/main/java/edu/smarthome/pattern/creational/factory/DeviceCreator.java`

### Device Domain

- [Light Device](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/model/Light.java): `src/main/java/edu/smarthome/model/Light.java`
- [Thermostat Device](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/model/Thermostat.java): `src/main/java/edu/smarthome/model/Thermostat.java`
- [Smart Lock](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/model/SmartLock.java): `src/main/java/edu/smarthome/model/SmartLock.java`
- [Device Base](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/model/Device.java): `src/main/java/edu/smarthome/model/Device.java`
- [Device Events](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/model/DeviceEvent.java): `src/main/java/edu/smarthome/model/DeviceEvent.java`

### Behavior Patterns

- [Device Groups](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/structural/composite/DeviceGroup.java): `src/main/java/edu/smarthome/pattern/structural/composite/DeviceGroup.java`
- [Commands](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/behavior/command/Command.java): `src/main/java/edu/smarthome/pattern/behavior/command/Command.java`
- [Command History](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/behavior/command/CommandHistory.java): `src/main/java/edu/smarthome/pattern/behavior/command/CommandHistory.java`
- [Macro Commands](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/behavior/command/MacroCommand.java): `src/main/java/edu/smarthome/pattern/behavior/command/MacroCommand.java`
- [Home Mediator](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/behavior/mediator/SmartHomeMediator.java): `src/main/java/edu/smarthome/pattern/behavior/mediator/SmartHomeMediator.java`
- [Event Observer](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/behavior/observer/DeviceObserver.java): `src/main/java/edu/smarthome/pattern/behavior/observer/DeviceObserver.java`
- [Climate Strategies](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/behavior/strategy/ClimateStrategy.java): `src/main/java/edu/smarthome/pattern/behavior/strategy/ClimateStrategy.java`
- [Lock States](https://github.com/jose-289/smart-home/blob/main/src/main/java/edu/smarthome/pattern/behavior/state/LockState.java): `src/main/java/edu/smarthome/pattern/behavior/state/LockState.java`

### Other components

- **Home User**

## Connections

- Home User → JavaFX Application: opens
- JavaFX Application → Home Controls: presents (evidence: `src/main/java/edu/smarthome/controller/HomeController.java`)
- Home User → Home Controls: controls
- Home Controls → Home Facade: delegates to (evidence: `src/main/java/edu/smarthome/controller/HomeController.java`)
- Device Controls → Home Facade: delegates to (evidence: `src/main/java/edu/smarthome/controller/DeviceController.java`)
- Light Controls → Home Facade: delegates to (evidence: `src/main/java/edu/smarthome/controller/LightController.java`)
- Climate Controls → Home Facade: delegates to (evidence: `src/main/java/edu/smarthome/controller/ThermostatController.java`)
- Lock Controls → Home Facade: delegates to
- Security Controls → Home Facade: delegates to (evidence: `src/main/java/edu/smarthome/controller/SecurityController.java`)
- Group Controls → Home Facade: delegates to (evidence: `src/main/java/edu/smarthome/controller/GroupController.java`)
- Home Facade → Device Factory: creates devices (evidence: `src/main/java/edu/smarthome/service/SmartHomeFacade.java`)
- Device Factory → Device Base: constructs (evidence: `src/main/java/edu/smarthome/pattern/creational/factory/DeviceCreator.java`)
- Home Facade → Home Mediator: initializes and delegates (evidence: `src/main/java/edu/smarthome/service/SmartHomeFacade.java`)
- Home Mediator → Light Device: coordinates (evidence: `src/main/java/edu/smarthome/pattern/behavior/mediator/SmartHomeMediator.java`)
- Home Mediator → Thermostat Device: coordinates (evidence: `src/main/java/edu/smarthome/pattern/behavior/mediator/SmartHomeMediator.java`)
- Home Mediator → Smart Lock: coordinates (evidence: `src/main/java/edu/smarthome/pattern/behavior/mediator/SmartHomeMediator.java`)
- Home Facade → Device Groups: operates groups (evidence: `src/main/java/edu/smarthome/service/SmartHomeFacade.java`)
- Device Groups → Commands: gathers (evidence: `src/main/java/edu/smarthome/pattern/structural/composite/DeviceGroup.java`)
- Home Facade → Macro Commands: builds group macros (evidence: `src/main/java/edu/smarthome/service/SmartHomeFacade.java`)
- Home Facade → Command History: executes and tracks (evidence: `src/main/java/edu/smarthome/service/SmartHomeFacade.java`)
- Command History → Commands: executes and undoes (evidence: `src/main/java/edu/smarthome/pattern/behavior/command/CommandHistory.java`)
- Macro Commands → Commands: composes (evidence: `src/main/java/edu/smarthome/pattern/behavior/command/MacroCommand.java`)
- Device Base → Event Observer: notifies (evidence: `src/main/java/edu/smarthome/pattern/behavior/observer/DeviceObserver.java`)
- Device Base → Device Events: creates (evidence: `src/main/java/edu/smarthome/model/Device.java`)
- Thermostat Device → Climate Strategies: applies (evidence: `src/main/java/edu/smarthome/model/Thermostat.java`)
- Smart Lock → Lock States: delegates state changes (evidence: `src/main/java/edu/smarthome/model/SmartLock.java`)
