Index général
- Outils
- Références
- Tuyaux
This is an old revision of the document!
Objectifs de ce TD :
Les temps indiqués sont là pour vous aider. Il s'agit des temps maximum.
Nous simplifions la définition précédente comme suit.
Un “maison numérique” est équipée de “dispositifs” dont les capteurs qui sont des composants qui permettent de relever des mesures.
Les “dispositifs” sont soit associés à la maison (par exemple, un thermostat central), soit associés à une partie de la maison (par exemple, un capteur de consommation électrique à l'étage, un détecteur de fumée dans l'espace enfant), aux pièces (interrupteurs, thermomètre, …).
Un tableau de contrôle permet de visualiser les valeurs relevées par tous les capteurs de la maison.
Notre objectif est de permettre de :
QUESTION (15 mn):
Les capteurs physiques sont des dispositifs qui présentent une grande variabilité. Nous allons les gérer via des composants logiciels. Déterminer les dépendances envisagées entre vos classes et les tests d'intégration à prévoir si l'on considère que les dispositifs devront être intégrés au reste de l'application.
QUESTION (15 mn):
Détecteur de mouvement
Capteur de température et humidité
Hélas nous ne disposons pas de “capteurs physiques”… Faisons comme si nous avions ces capteurs en les simulant par des capteurs physiques dont le code vous est donné. Il s'agit d'un “composant” très simple qui lit et écrit une valeur dans un fichier. Il vous sert de “bouchon” puisque nous ne disposons pas d'un vrai capteur physique auquel nous connecter.
QUESTION (3 mn):
Cette fois, seul le binaire vous est donné.
Pour l'utiliser sous Eclipse, vous pouvez :
Build Path
puis Add to Build PathOn ne lève pas des Throwable mais des exceptions dédiées qui expriment clairement l'exception détectée (http://www.wikijava.org/wiki/10_best_practices_with_Exceptions#Throw_only_Exceptions)
Les capteurs “passifs” sont des capteurs qu'il faut interroger pour obtenir la valeur correspondant par exemple à une température ou un éclairage. A un capteur passif nous associons un capteur physique. A votre convenance un capteur passif peut modifier la valeur lue dans le capteur physique pour lui associer une unité.
Attention, un capteur passif renvoie des valeurs sous la forme d'une String. S'il y a une erreur d'accès au capteur physique quelqu'elle soit, on voit avoir en réponse “bad value”.
QUESTION (15 mn):
CapteurPassif
en lui associant un CapteurPhysique
. Voici le diagramme de classe concernant cette partie, pour vous aider éventuellement.
Une pièce est équipée de capteurs. On peut ajouter des capteurs à la pièce. On peut obtenir les valeurs de tous les capteurs de la pièce.
QUESTION (20 mn):
Piece
Piece
. Exemple de trace :
Salon thermometre:19.0 humidite:12.7 lumiere:120.0
Une maison numérique est une composition de lieux dont certaines parties sont des composions de lieux (l'étage est composé de la partie enfant et du bureau) et d'autres sont des pièces (bureaux, chambres, ..).
Il doit être possible d'interroger une partie de la maison pour connaitre tous les capteurs qu'elle contient : Pour une pièce, les capteurs qui lui sont associés, pour une partie, ses propres capteurs (par exemple, le thermostat de l'étage) + les capteurs des parties qui la compose.
QUESTION (25 mn):
MaisonNumerique
et tout ce qui est nécessaire pour répondre aux exigences.Posez bien votre nouveau modèle sur papier avant d'implémenter.
Voici la maison que vous devez modéliser :
Un tableau de contrôle permet de visualiser les capteurs associés aux lieux qu'il surveille. Pour cela, à chaque fois que l'on ajoute un capteur aux lieux surveillés, il ré-affiche la valeur de tous les capteurs. Attention, si je surveille le RDC, je surveille tous les capteurs du RDC pas seulement ceux qui sont en dehors des pièces!
Dans notre exemple, nous avons mis un tableau de contrôle au RDC et un à l'étage et un pour toute la maison. On ajoute un thermomètre dans la cuisine et on ajoute un de capteur de luminosité à l'étage, ainsi qu'un capteur de présence à l'extérieur. On vérifie que nos tableaux de bord se sont bien mis à jour.
TB MAISON
Thermostat RDC : 20 Thermometre SAM : 20 Thermostat Etage : 18 ThermometreChambre1 : 18.5 ThermometreChambre2 : 19.5 Luminosite : 100 Luminosité Etage : 80 Presence : true Thermometre Cuisine : 19
TB RDC
Thermostat RDC : 20 Thermometre SAM : 20 Thermometre Cuisine : 19
TB ETAGE
Thermostat Etage : 18 ThermometreChambre1 : 18.5 ThermometreChambre2 : 19.5 Luminosité Etage : 80
Un capteur actif est associé à un capteur physique. Il scrute régulièrement la valeur physique du capteur physique qui lui est associé et notifie ses observeurs chaque fois qu'il détecte un changement.
A présent les tableaux de bord sont mis à jour à chaque fois qu'un capteur actif d'un lieu sous surveillance est mis à jour.
Voici les éléments de code dont vous avez besoin pour définir un capteur actif:
public class CapteurActif ... implements... Runnable{
public void run() { System.out.println("Run lancé"); while (!stop) { try { Thread.sleep(2000); if (!(valeurCourante.equals(getValeur()))) { setValeurCourante(getValeur()); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
CapteurActif cpTemporaire = new CapteurActif(new CapteurPhysique("cp1")); Thread threadCP= new Thread(cpTemporaire); threadCP.start();
QUESTION (30mn) :
Rendu en fonction du groupe de TD