Projet 2021-22 : simulation d'un système de gestion de température

Description générale

On désire simuler le fonctionnement d'un système de gestion du chauffage dans une maison. Une maison est constituée de plusieurs pièces et chacune possède un appareil de chauffage. Chaque pièce possède également un thermomètre qui mesure la température de la pièce. La température d'une pièce évolue à la fois selon la température extérieure et le niveau de chauffage de la pièce.

L'application est constituée d'un ensemble d'éléments étant distribués, comme représenté sur la figure ci-dessus :

Description des éléments

Une pièce

Une pièce n'est pas un élément concret mais formé d'un ensemble de 3 éléments indépendants :

L'air correspond au programme Java Air.java qui vous est fourni et qui simule la variation de la température de l'air en fonction du niveau de chauffage et de la température extérieure. Les éléments thermomètre et chauffage sont à implémenter en C.

La communication entre ces 3 éléments est à réaliser via du multicast UDP/IP. Il y aura donc un groupe multicast par pièce.

La classe MessageTemperature.java (fournie également mais dont il faudra implémenter l'équivalent C) correspond au type de message qui transitera entre les éléments du groupe multicast. Il permet d'envoyer deux types d'informations :

Au lancement de l'élément Air d'une pièce, on précisera l'identification du groupe multicast à utiliser ainsi que le nom de la pièce.

La communication entre un thermomètre ou un chauffage et le système de gestion des températures se fera en TCP.

Une console

Une console est l'interface permettant de gérer le chauffage. Il y a deux types de consoles :

Le contrôle de la température d'une pièce pourra se faire de 2 façons :

Les consoles en C communiqueront avec le système central avec des sockets TCP.

Le système central de gestion

Ce système permet la liaison entre les consoles et les pièces : il récupère le niveau de température des pièces pour l'envoyer aux consoles de contrôle et reçoit les commandes de changement de températures de la part des consoles de commande à envoyer aux thermomètres des pièces.

Le système central est à implémenter en C. Ses différents éléments pourront être réalisées par des threads qui pourront partager des données.

Pour la console de contrôle en Java RMI, il faudra une partie serveur intégrée au système central. Comme cet élément Java ne peut partager directement des données avec le reste implémenté en C, il faudra une commnunication locale qui se fera en UDP.

Implémentation

Vous implémenterez les différents éléments décrits ci-dessus dans les langages et avec les supports de communication demandés. Pour la partie Java RMI, vous aurez à définir l'interface des méthodes appelables à distance.

Votre code doit être bien structuré, définissez des .h et des Makefile et utilisez des fichiers différents pour implémenter des parties différentes. Vous pouvez vous aider de scripts Shell pour lancer des éléments comme les 3 parties d'une pièce en même temps par exemple.

La prise en compte des problèmes pendant l'exécution est une partie importante de votre implémentation. Il faudra détecter autant que faire se peut le plantage des différents éléments et s'assurer si cela est possible que le reste des éléments continuent de fonctionner.

Ressources

Evaluation

Le travail est à faire en binôme.

Le Mercredi 4 Mai, il y aura une évaluation sur machine de votre projet. Vous m'enverrez également le code de votre projet.