Domus Control is a smart home automation simulation application inspired by the open-source Home Assistant platform, developed as part of the Object-Oriented Programming course (2025/26 edition).
The main goal of the project was to apply the fundamental concepts of object-oriented programming—such as encapsulation, inheritance, polymorphism, and the MVC architectural pattern—to create a robust, scalable, and easily extensible system capable of efficiently managing and simulating a smart home ecosystem.
- Creation and configuration of users with different access levels (Administrator or Standard User).
- Management of houses, rooms, and the dynamic association of connected devices (smart lights, power outlets, speakers, blinds, gates, etc.).
- Text-based menu interface that allows users to interact with devices individually or in groups.
- Device-specific controls according to the equipment type, such as brightness, volume, opening level, and other configurable parameters.
- Automations: Device activation based on external conditions or sensor readings from other devices (e.g., rainfall or ambient light levels).
- Schedules: Time-based execution rules driven by the application's simulated timeline.
- Scenarios: Execution of predefined routines affecting multiple devices simultaneously (e.g., Away from Home or Movie Night).
- A recommendation engine that analyzes user interaction history and automatically suggests useful new automations or scheduled actions.
- Collection of usage and energy consumption metrics (Wh).
- Identification of the house with the highest energy consumption, the most frequently used devices, and the rooms with the highest device density.
- Saving and loading the complete application state through binary file serialization.
- Programming Language: Java
- Interface: Command-Line Interface (CLI) based on text menus
- Design Approach: Flexible architecture that enables the addition of new device types through the creation of new classes, without requiring modifications to the application's core computational logic, thus adhering to extensibility and maintainability principles.