20/20
Este repositório destina-se ao simulador de domótica residencial Homium, desenvolvido no âmbito da unidade curricular “Programação Orientada a Objetos”. Esta aplicação interativa por terminal foi concebida para gerir e simular um ecossistema inteligente residencial avançado, à semelhança do Home Assistant, aplicando os conceitos de herança, polimorfismo, encapsulamento e extensibilidade. O utilizador tem a possibilidade de criar e parametrizar casas constituídas por múltiplas divisões, gerir utilizadores com diferentes permissões e simular a passagem do tempo e as condições climatéricas.
Os dispositivos inteligentes são a base física do simulador, sendo colocados em divisões específicas da casa para controlo localizado. Cada dispositivo possui propriedades comuns obrigatórias como o identificador único, a marca, o modelo, o consumo energético por hora em Wh e o estado de funcionamento. O sistema suporta tomadas simples de comutação binária, lâmpadas com regulação de intensidade e ajuste de temperatura de cor entre 2700K e 4000K, colunas de som com regulação de volume e sintonia, e ainda cortinas e portões com definição de graus de abertura parciais. O modelo suporta sensores ambientais integrados para leitura de temperatura, humidade, pluviosidade, luminosidade e deteção de movimento, tendo a arquitetura sido desenhada de forma a permitir acrescentar novos tipos de dispositivos sem necessidade de alterar o código principal da aplicação.
O controlo de acessos e a operação das residências dependem do perfil de segurança dos utilizadores registados. O sistema distingue administradores, responsáveis pela criação das divisões e associação de dispositivos, de utilizadores comuns, que apenas podem atuar sobre os dispositivos individualmente ou acionar automatismos. O sistema suporta que um utilizador assuma o perfil de administrador numa casa e seja apenas utilizador comum noutra, sendo a segurança das ações ativamente validada pela classe de fachada HomiumModel.
Os automatismos adicionam inteligência ao ecossistema através de três mecanismos de controlo. As automações executam ações sempre que condições lógicas baseadas nas leituras dos sensores são satisfeitas, como fechar portões quando detetada pluviosidade. Os escalonamentos definem regras temporais de ativação para ligar ou desligar dispositivos em horários fixos. Os cenários permitem atuar em simultâneo sobre múltiplos dispositivos, incluindo, por omissão, as configurações Sair de Casa, Jantar com Amigos, Deitar e Acordar.
O motor de simulação dinâmica controla a progressão do tempo e gera variações térmicas e de precipitação, alterando em tempo real os sensores e acionando automações. A aplicação monitoriza as interações para gerar sugestões inteligentes de regras úteis com base no histórico de utilização. O sistema atualiza constantemente métricas que permitem saber a casa que mais consome, as três divisões com mais dispositivos e os três dispositivos mais utilizados em tempo e número de ativações. Por fim, todo o estado da aplicação e histórico de interações podem ser salvaguardados em ficheiros binários e carregados a qualquer momento.
A arquitetura do projeto adota o padrão MVC (Model-View-Controller), mantendo a lógica de domínio totalmente isolada da interface textual do terminal, o que impede a execução de operações de I/O no modelo, robustece a aplicação através de exceções de domínio personalizadas e simplifica a implementação de testes unitários.
Made with ❤️ by Diogo Azevedo, Bruno Magalhães & Vera Almeida
This repository is intended for the Homium residential home automation simulator developed as part of the academic course “Object-Oriented Programming”. This interactive terminal application was designed to manage and simulate an advanced residential smart home ecosystem, similarly to Home Assistant, applying the concepts of inheritance, polymorphism, encapsulation, and extensibility. Users can create and configure houses consisting of multiple rooms, manage users with different access permissions, and simulate the passage of time and weather conditions.
Smart devices form the physical foundation of the simulator, being deployed in specific rooms of the house for localized control. Each device possesses mandatory common properties such as a unique identifier, brand, model, hourly energy consumption in Wh, and operational state. The system supports simple binary comutation plugs, lamps with brightness and color temperature adjustment between 2700K and 4000K, sound speakers with volume and tuning controls, and curtains and gates with customizable opening degrees. The model supports integrated environmental sensors for measuring temperature, humidity, rain, light, and motion detection, with the architecture designed to allow new device types to be added without modifying the application's core code.
Access control and household operation depend on the security profiles of registered users. The system distinguishes administrators, responsible for creating rooms and associating devices, from common users, who can only operate devices individually or activate automatisms. The system supports a user assuming the administrator profile in one household and being a common user in another, with the security of all actions actively validated by the HomiumModel facade class.
Automatisms add smart behaviors to the ecosystem through three control mechanisms. Automations execute actions whenever logical conditions based on sensor readings are met, such as closing gates when rain is detected. Schedules define time-based activation rules to turn devices on or off at fixed times. Scenarios allow users to control multiple devices simultaneously, including by default the Out of Home, Dinner with Friends, Sleep, and Wake Up configurations.
The dynamic simulation engine controls time progression and generates thermal and precipitation variations, updating sensor readings in real-time and triggering automations. The application monitors interactions to automatically suggest useful rules based on historical usage patterns. The system constantly updates metrics to identify the highest consuming household, the three rooms with the most devices, and the three most used devices in terms of duration and activation count. Finally, the complete state of the application and interaction logs can be saved to binary files and restored at any time.
The project architecture implements the MVC (Model-View-Controller) pattern, keeping the domain business logic completely isolated from the command-line interface, ensuring the model performs no direct I/O, robustifying the application via custom domain exceptions, and facilitating unit test coverage.
Made with ❤️ by Diogo Azevedo, Bruno Magalhães & Vera Almeida
[PT] Pode compilar e executar o programa através do comando run do Gradle Wrapper.
[EN] You can compile and run the program using the Gradle Wrapper run command.
./gradlew run[PT] Pode executar a suite de testes unitários com o comando test do Gradle Wrapper.
[EN] You can run the unit testing suite using the Gradle Wrapper test command.
./gradlew test[PT] Pode construir e compilar o projeto com o comando build do Gradle Wrapper.
[EN] You can build and compile the project using the Gradle Wrapper build command.
./gradlew build[PT] O diagrama de classes UML representa a modelação do domínio e a estrutura de relacionamentos entre utilizadores, casas, divisões, dispositivos e o motor de automação.
[EN] The UML class diagram represents the domain modeling and the relationships between users, houses, divisions, devices, and the automation engine.
