This is an old revision of the document!


The Sims pour la recherche, un simulateur de maison connectée

Stagiaire : LIANG Mingqian

Tuteurs : BOUCHABOU Damien, NGUYEN Mai, LOHR Christophe

Je voudrais remercier mes tuteurs BOUCHABOU Damien, NGUYEN Mai, LOHR Christophe pour leur disponibilité, leur aide et leur conseil qui sont essentiels pour mon résultat.

Le projet proposé concerne l’étude d’activité de la vie quotidienne au sein des maisons sur la base de données de capteurs domotiques. Ces bases de données permettent d’élaborer des algorithmes de reconnaissance des activités de la vie quotidienne. L’objectif étant au travers de ces derniers de proposer des services pour améliorer le confort de vie (Ex : assistance, réglage automatique du chauffage, …), ou de suivre la santé des habitants.

Il existe un environnement de simulation (http://virtual-home.org/ ) disposant d'un outil de visualisation sous Unity 3D, ainsi qu'une API en Python.

Cette API est sur Jupyter Notebook ou Python script, grâce à la ligne :

comm = UnityCommunication()

ou cette ligne sur Jupyter Notebook :

comm = setup()

alors on peut communiquer avec le simulateur.

En début de projet, j'ai exécuté mon programme Python et j'ai modifié des états de la télévision et le micro-ondes sur le fichier Jupyter unity_demo.ipynb. Mon programme a détecté un changement des états et a noté le temps, id de l'objet et le nouveau état sur un fichier CSV. Par conséquent, ce sont comme 2 capteurs.

Ensuite, j'ai réalisé tous les capteurs pour des meubles ou des lumières qui ont des états dans la maison.

Après, j'ai essayé de faire des scripts en laissant l'avatar faire des actions donc en changeant des états. Les données des capteurs seront enregistrées sur states.csv.

Version du simulateur : exec_linux_07_01_Data.

Le programme complet est sur : https://github.com/Beam-coder/virtualhome-master.

Comment lancer mon capteur

  • Exécuter la partie « Mingqian's sensors » sur unity_demo.ipynb pour avoir configuration.txt.
  • Ouvrir configuration.txt et changer la valeur des capteurs que vous voulez désactiver en 0.
  • Exécuter sensors.py.

Vous trouverez le changement des états sur states.csv.

Analyse du programme

1. Génération du fichier configuration.txt

configuration_dict = {}
for unit in hasstate_array:
    if len(unit['states']) == 1:
	configuration_dict[(unit['id'], id_object_room[unit['id']])] = 1
    else:
	configuration_dict[(unit['id'], id_object_room[unit['id']], 'door')] = 1
	configuration_dict[(unit['id'], id_object_room[unit['id']], 'plug')] = 1
#print(configuration_dict)
with open('configuration.txt', 'w') as file:
    file.write('{')
    for key, value in configuration_dict.items():
	file.write(str(key)+': '+str(value)+',\n')
    file.write('}')

Tout d'abord, on génère automatiquement configuration.txt qui contient tous les objets qui ont des états grâce à ce code sur unity_demo.ipynb.

2. configuration.txt

{(25, 'closet_livingroom'): 1,
(67, 'tablelamp_livingroom'): 1,
(77, 'book_livingroom'): 1,
(78, 'book_livingroom'): 1,
(81, 'facecream_livingroom'): 1,
(92, 'lightswitch_livingroom'): 1,
(97, 'tv_livingroom'): 1,
(98, 'computer_livingroom'): 1,
(120, 'door_kitchen'): 1,
(132, 'kitchencabinets_kitchen'): 1,
(133, 'kitchencabinets_kitchen'): 1,
(134, 'kitchencounter_kitchen'): 1,
(136, 'faucet_kitchencounter'): 1,
(138, 'stove_kitchen', 'door'): 1,
(138, 'stove_kitchen', 'plug'): 1,
(140, 'dishwasher_kitchen', 'door'): 1,
(140, 'dishwasher_kitchen', 'plug'): 1,
(141, 'fridge_kitchen'): 1,
(142, 'toaster_kitchencounter'): 1,
(145, 'coffeemaker_kitchen', 'door'): 1,

Voici configuration.txt. On peut voir id, nom de classe et le lieu de l'objet. Le chiffre 0 ou 1 indique que le capteur est activé ou désactivé.

3 : Fonction main()

def main():
    
    comm = simulatorComm()
    
    configuration = readConfig("configuration.txt")
    
    state_dict = initializeState_dict(configuration)
    
    while True:
        
        graph = getGraph(comm)
        
        writeState(state_dict, graph)
        
        time.sleep(1)

C'est mon programme de capteur. « state_dict » est un dictionnaire qui contient tous les capteurs activés. Ensuite une boucle infinie permet de détecter et de noter si les états se changent. Enfin, « time.sleep(1) » pour faire une pause d'une seconde.

Problème

Par contre, la variable « graphe » sur le simulateur ne se change pas lorsque l'on exécute un script. On ne peut détecter le changement que par la variable « graphe ». Par conséquent, on ne peut pas avoir le changement des états en exécutant des scripts. C'est le problème du simulateur et on est en train de contacter le créateur du simulateur pour une nouvelle version.

Les données des capteurs seront enregistrées sur states.csv.

07/21/20	21:30:33	353	ON
07/21/20	21:30:33	354	CLOSED
07/21/20	21:30:33	354	OFF
07/21/20	21:32:06	146	ON
07/21/20	21:32:06	354	ON
07/21/20	21:34:34	146	OFF
07/21/20	21:37:41	25	CLOSED
07/21/20	21:37:57	25	CLOSED
07/21/20	21:38:33	25	CLOSED
07/21/20	21:38:33	67	ON
  • smarthome/stage_d_ete_2020_simsvirtualhome.1596187036.txt.gz
  • Last modified: 2020/07/31 09:17
  • by mliang