diff --git a/README.md b/README.md
index 0a38d7fe0f1d4d4c5efa2701114e751243b7cda9..2b3f80ad96abc56c1ce79df940166a0382d4853b 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,6 @@
 
 Vous trouverez ici des exemples de codes utiles pour votre TP.
 
-Les fichiers sont regroupés par séances de TP. 
+Les fichiers sont regroupés par séances de TP. Le séquencement pédagogique est cependant variable selon les possibilites qu'offrait l'emploi du temps de l'année en cours. Voir le fichier readme.md pour avoir la correspondance.
 
 *V Chevrier A Lahmadi*
diff --git a/TP2/.gitkeep b/TP2/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/TP2/Armoire5.py b/TP2/Armoire5.py
deleted file mode 100644
index 74979443269082cf465e5a2f4c4cfe11ca1ed8b3..0000000000000000000000000000000000000000
--- a/TP2/Armoire5.py
+++ /dev/null
@@ -1,154 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Created on Mon Jun 22 16:40:33 2020
-
-@author: chevrier6
-"""
-from bitManip import *
-from easymodbus.modbusClient import ModbusClient
-from easymodbus.modbusClient import convert_registers_to_float
-
-
-class AutomateException(Exception):
-    def __init__(self, message):
-        self.message = message
-
-
-class Armoire5():
-    # ici les adresse des mesure commence  a ZERO (pas UN comme en java)
-
-    def __init__(self):
-        self.nbCharge = 7  # de 0 a 6
-        self.ipAdresse = "100.75.155.115"
-        self.adresseMesure = 2
-        self.adresseTOR = 32000
-        self.adresseMesureSecteur1 = 7  # attention  vraie adresse ()
-        self.adresseMesureSecteur2 = 8  # attention  vraie adresse
-
-        self.debutAdrCharge = 9
-        self.debutAdrSource = 0
-
-    def okCharge(self, i):
-        return 0 <= i <= self.nb - 1
-
-    def resetAll(self):
-        self.writeTOR(0)
-
-    def resetSource(self):
-        for i in range(self.nbCharge):
-            self.setSource1(i)
-
-    def resetCharge(self):
-        for i in range(self.nbCharge):
-            self.unsetCharge(i)
-
-    def setCharge(self, charge: int):
-        if not self.okCharge(charge):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        val = self.readTOR()
-        val = setBit(val, charge + self.debutAdrCharge)
-        self.writeTOR(val)
-
-    def unsetCharge(self, charge):
-        if not self.okCharge(charge):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        val = self.readTOR()
-        val = clearBit(val, charge + self.debutAdrCharge)
-        self.writeTOR(val)
-
-    def toggleCharge(self, charge):
-        if not self.okCharge(charge):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        val = self.readTOR()
-        val = toggleBit(val, charge + self.debutAdrCharge)
-        self.writeTOR(val)
-
-    def setSource1(self, charge):
-        if not self.okCharge(charge):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        val = self.readTOR()
-        val = clearBit(val, charge + self.debutAdrSource)
-        self.writeTOR(val)
-
-    def setSource2(self, charge):
-        if not self.okCharge(charge):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        val = self.readTOR()
-        val = setBit(val, charge + self.debutAdrSource)
-        self.writeTOR(val)
-
-    def togglesource(self, charge):
-        if not self.okCharge(charge):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        val = self.readTOR()
-        val = toggleBit(val, charge + self.debutAdrSource)
-        self.writeTOR(val)
-
-    ################################
-
-    def writeTOR(self, val):
-        modbusclient = ModbusClient(self.ipAdresse, 502)
-        modbusclient.connect()
-        modbusclient.write_single_register(self.adresseTOR, val)
-        modbusclient.close()
-        # some tempo to wait measure to stabilize
-        from time import sleep
-        sleep(2.)
-
-    def readTOR(self):
-        modbusclient = ModbusClient(self.ipAdresse, 502)
-        modbusclient.connect()
-        inputRegisters = modbusclient.read_inputregisters(self.adresseTOR, 1)
-        modbusclient.close()
-        return (int)(inputRegisters[0])
-
-    ###############################################
-    def readSecteur1(self):
-        addr = self.adresseMesure + (self.adresseMesureSecteur1) * 8
-        return self.lireValeurAdresse(addr + 2), self.lireValeurAdresse(addr), self.lireValeurAdresse(
-            addr + 4), self.lireValeurAdresse(addr + 6)
-
-    def readSecteur2(self):
-        addr = self.adresseMesure + (self.adresseMesureSecteur2) * 8
-        return self.lireValeurAdresse(addr + 2), self.lireValeurAdresse(addr), self.lireValeurAdresse(
-            addr + 4), self.lireValeurAdresse(addr + 6)
-
-    def readMesureCourant(self, source: int):
-        if not self.okCharge(source):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        return self.lireValeur(source, 0)
-
-    def readMesureTension(self, source: int):
-        if not self.okCharge(source):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        return self.lireValeur(source, 2)
-
-    def readMesurePactive(self, source: int):
-        if not self.okCharge(source):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        return self.lireValeur(source, 4)
-
-    def readMesurePreactive(self, source: int):
-        if not self.okCharge(source):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        return self.lireValeur(source, 6)
-
-    def readMesure(self, source):
-        return self.readMesureTension(source), self.readMesureCourant(source), self.readMesurePactive(
-            source), self.readMesurePreactive(source)
-
-    def lireValeur(self, source, offset):
-
-        addr = self.adresseMesure + (source) * 8 + offset
-        return self.lireValeurAdresse(addr)
-
-    def lireValeurAdresse(self, addr):
-
-        modbusclient = ModbusClient(self.ipAdresse, 502)
-        modbusclient.connect()
-        data = modbusclient.read_holdingregisters(addr, 2)
-        modbusclient.close()
-        res = convert_registers_to_float(data)
-
-        return res[0]
-
diff --git a/TP2/Armoire6.py b/TP2/Armoire6.py
deleted file mode 100644
index bcaee0239b1418e104560b06fbb20a056d60ad14..0000000000000000000000000000000000000000
--- a/TP2/Armoire6.py
+++ /dev/null
@@ -1,157 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Created on Mon Jun 22 16:40:33 2020
-
-@author: chevrier6
-"""
-from bitManip import *
-from easymodbus.modbusClient import ModbusClient
-from easymodbus.modbusClient import convert_registers_to_float
-
-class AutomateException(Exception):
-    def __init__(self, message):
-        self.message = message
-
-
-
-
-
-class Armoire6():
-    # ici les adresse des mesure commence  a ZERO (pas UN comme en java)
-
-
-    def __init__(self):
-        self.nbCharge=7 # de 0 a 6
-        self.ipAdresse="100.75.155.116"
-        self.adresseMesure=0
-        self.adresseTOR=32000
-        self.adresseMesureSecteur1=7 # attention  vraie adresse ()
-        self.adresseMesureSecteur2=8 # attention  vraie adresse
-
-        self.debutAdrCharge=0
-        self.debutAdrSource=7
-
-    def okCharge(self,i):
-        return 0 <= i <= nbCharge-1
-    
-    def resetAll(self):
-        self.writeTOR(0)
-    
-    def resetSource(self):
-        for i in range(self.nbCharge):
-            self.setSource1(i)
-    
-    def resetCharge(self):
-        for i in range(self.nbCharge):
-            self.unsetCharge(i)
-            
-    def setCharge(self, charge : int ):
-        if not self.okCharge(charge):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        val=self.readTOR()
-        val=setBit(val,charge+self.debutAdrCharge)
-        self.writeTOR(val)
-    
-
-    def unsetCharge(self,charge):
-        if not self.okCharge(charge):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        val=self.readTOR()
-        val=clearBit(val,charge+self.debutAdrCharge)
-        self.writeTOR(val)
-
-    def toggleCharge(self, charge):
-        if not self.okCharge(charge):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        val = self.readTOR()
-        val = toggleBit(val, charge+self.debutAdrCharge)
-        self.writeTOR(val)
-    
-    def setSource1(self,charge):
-        if not self.okCharge(charge):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        val=self.readTOR()
-        val=clearBit(val,charge+self.debutAdrSource)
-        self.writeTOR(val)
-
-    def setSource2(self, charge):
-        if not self.okCharge(charge):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        val = self.readTOR()
-        val = setBit(val, charge +self.debutAdrSource)
-        self.writeTOR(val)
-
-
-  
-    def togglesource(self,charge):
-        if not self.okCharge(charge):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        val=self.readTOR()
-        val=toggleBit(val,charge+self.debutAdrSource)
-        self.writeTOR(val)
-    
-    ################################
-    
-    
-    def writeTOR(self,val):
-        modbusclient =ModbusClient(self.ipAdresse,502)
-        modbusclient.connect()
-        modbusclient.write_single_register(self.adresseTOR,val)
-        modbusclient.close()
-        # some tempo to wait measure to stabilize
-        from time import sleep
-        sleep(2.)
-    
-    
-    def readTOR(self):
-        modbusclient =ModbusClient(self.ipAdresse,502)
-        modbusclient.connect()
-        inputRegisters = modbusclient.read_inputregisters(self.adresseTOR, 1)
-        modbusclient.close()
-        return (int)(inputRegisters[0])
-        
-###############################################
-    def readSecteur1(self):
-        from time import sleep
-        addr = self.adresseMesure  + (self.adresseMesureSecteur1 ) * 8
-        return self.lireValeurAdresse(addr + 2), self.lireValeurAdresse(addr), self.lireValeurAdresse(addr + 4), self.lireValeurAdresse(addr + 6)
-    def readSecteur2(self):
-        addr = self.adresseMesure  + (self.adresseMesureSecteur2 ) * 8
-        return self.lireValeurAdresse(addr+2),self.lireValeurAdresse(addr),self.lireValeurAdresse(addr+4),self.lireValeurAdresse(addr+6)
-        
-    def readMesureCourant(self,source :int):
-        if not self.okCharge(source):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        return self.lireValeur(source,0 )
-    def readMesureTension(self,source :int):
-        if not self.okCharge(source):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        return self.lireValeur(source,2 )
-    def readMesurePactive(self,source :int):
-        if not self.okCharge(source):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        return self.lireValeur(source,4 )
-    def readMesurePreactive(self,source :int):
-        if not self.okCharge(source):
-            raise AutomateException("numero charge pas compris entre 0 et 6")
-        return self.lireValeur(source,6 )
-
-    def readMesure(self,source):
-        return self.readMesureTension(source),self.readMesureCourant(source),self.readMesurePactive(source),self.readMesurePreactive(source)
-   
-    def lireValeur(self,source,offset):
-
-        addr=  self.adresseMesure  + (source ) *8+offset
-        return self.lireValeurAdresse(addr)
-    def lireValeurAdresse(self,addr):
-
-
-        modbusclient =ModbusClient(self.ipAdresse,502)
-        modbusclient.connect()
-        data=modbusclient.read_holdingregisters(addr,2)
-        modbusclient.close()
-        res =convert_registers_to_float(data)
-       
-        return res[0]
-        
-        
\ No newline at end of file
diff --git a/TP2/bitManip.py b/TP2/bitManip.py
deleted file mode 100644
index 2f8ceb26ce056109e127d98f179d807daf0acc0f..0000000000000000000000000000000000000000
--- a/TP2/bitManip.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Created on Mon Jun 22 16:43:58 2020
-
-@author: chevrier6
-"""
-
-######################
-def mask16(v):
-    "same as setBit(v,0)"
-    b=1
-    for i in range(v):
-        b*=2
-    return b
-
-# 4 next functions from https://wiki.python.org/moin/BitManipulation
-# testBit() returns a nonzero result, 2**offset, if the bit at 'offset' is one.
-def testBit(int_type, offset):
-    mask = 1 << offset
-    return(int_type & mask)
-
-  # setBit() returns an integer with the bit at 'offset' set to 1.
-
-def setBit(int_type, offset):
-    mask = 1 << offset
-    return(int_type | mask)
-
- # clearBit() returns an integer with the bit at 'offset' cleared.
-
-def clearBit(int_type, offset):
-    mask = ~(1 << offset)
-    return(int_type & mask)
-
- # toggleBit() returns an integer with the bit at 'offset' inverted, 0 -> 1 and 1 -> 0.
-
-def toggleBit(int_type, offset):
-    mask = 1 << offset
-    return(int_type ^ mask)
\ No newline at end of file
diff --git a/TP2/docArmoirePython.md b/TP2/docArmoirePython.md
deleted file mode 100644
index 95dcaa37bce4bb21c22dbbf1a0cdd999900f58d4..0000000000000000000000000000000000000000
--- a/TP2/docArmoirePython.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# Une armoire c'est quoi ?
-
-- c'est un appareil électrique commandable à distance
-- il dispose de 7 charges différentes (numérotées de 0 à 6)  et de deux source d'alimentation 
-(source1 et source2)
-
-- chaque charge peut être en marche ou pas et soit sur source 1 soit sur source 2 indépendament des autres
-- on peut connaitre des infos sur chaque charges (U,I,P,PR) et sur chaque source (i.e. le cumul des charges en marche sur la source concernée)
-# Documentation code python de manipulation des armoires
-
-
-## Prerequis logiciel
-
-- utilisation de la librairie EasyModbus.py
-- utilisation d'un code bitManip.py
-
-## Code disponible
-
-### Note
-Actuellemnt seul le code pour l'armoire 6 est opérationnel
-
-### Utilisation
-
-- charger le fichier correspondant à l'armoire à utiliser (exemple Armoire6.py) et ses dépendances
-
-**Méthodes**
-
-* Constructeur *ArmoireX()* où X vaut 6
-
-* actions générales
-    - **resetAll**: remet tout à l'état d'origine
-    - **resetSource** / **resetCharge**: remet la partie source/charge à l'état d'origine
- * actions sur les charges  
-    - **setCharge** / **unsetCharge** / **toggleCharge**(*n°charge*): met sur ON/OFF/état inverse la charge. *N°charge* doit être compris entre 0 et 6
-* Actions sur les sources
-    - **setSource1** / **setSource2** / **togglesource**(*n°charge*): met sur l'alimentaion 1/l'alimentation 2/inverse la source. *N°charge* doit être compris entre 0 et 6
-* Actions sur les sources
-   
-* lecture de valeurs (
-retourne une liste de valeurs  [U,I,PA,PR])
-    - **readSecteur1**: mesure pour la source 1
-    - **readSecteur2**: mesure pour la source 2
-    - **readMesure**(*n°charge*): mesure pour la charge paramètre (compris en 0 et 6)
\ No newline at end of file
diff --git a/TP2/test5.py b/TP2/test5.py
deleted file mode 100644
index 70ef3be131ceb282098aa9ad4d4b6f2f02dec95d..0000000000000000000000000000000000000000
--- a/TP2/test5.py
+++ /dev/null
@@ -1,90 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Seule Test est à utiliser
-
-@author: chevrier6
-"""
-
-from Armoire5 import *
-#
-# a=Armoire6()
-# a.resetAll()
-# i=0
-# a.setCharge(i)
-# s=a.readMesure(i)
-# print(s)
-#
-# def chenillard():
-#     a=Armoire6()
-#     for i in range(a.nbCharge):
-#         a.setCharge(i)
-#         s=a.readMesure(i)
-#         print(s)
-
-def pprint(mesure):
-    output="U={:.2f} I={:.2f} PA={:.2f} PR={:.2f}"
-    return output.format(mesure[0],mesure[1],mesure[2],mesure[3])
-
-def test(charge):
-
-    a=Armoire5()
-    a.resetAll()
-    print("charge ",charge)
-    a.setCharge(charge)
-    s=a.readMesure(charge)
-    print(pprint(s), "\nS1" ,pprint(a.readSecteur1()),"\nS2", pprint(a.readSecteur2()),"\n")
-    a.setSource2(charge)
-    s=a.readMesure(charge)
-    print(pprint(s), "\nS1" ,pprint(a.readSecteur1()),"\nS2", pprint(a.readSecteur2()),"\n")
-    a.unsetCharge(charge)
-
-#
-# def chenillard2():
-#     a=Armoire6()
-#     a.resetAll()
-#     for i in range(a.nbCharge):
-#         print("charge ",i)
-#         a.setCharge(i)
-#         s=a.readMesure(i)
-#         print(s, "S1" ,a.readSecteur1(),"S2", a.readSecteur2())
-#         a.setSource2(i)
-#         s=a.readMesure(i)
-#         print(s, "S1" ,a.readSecteur1(),"S2", a.readSecteur2())
-#         a.unsetCharge(i)
-#
-#
-# def chenillard3():
-#     a=Armoire6()
-#     a.resetAll()
-#     for charge in range(a.nbCharge):
-#         print("charge ",charge)
-#         a.setCharge(charge)
-#         u,i,pa,pr=a.readMesure(charge)
-#         u1,i1,pa1,pr1=a.readSecteur1()
-#         u2,i2,pa2,pr2=a.readSecteur2()
-#         print((u,i,pa,pr), "S1" ,a.readSecteur1(),"S2", a.readSecteur2())
-#         print(u-u1,i-i1,pa-pa1,pr-pr1)
-#         print(u-u2,i-i2,pa-pa2,pr-pr2)
-#         a.setSource2(charge)
-#         u,i,pa,pr=a.readMesure(charge)
-#         u1,i1,pa1,pr1=a.readSecteur1()
-#         u2,i2,pa2,pr2=a.readSecteur2()
-#         print((u,i,pa,pr), "S1" ,a.readSecteur1(),"S2", a.readSecteur2())
-#         print(u-u1,i-i1,pa-pa1,pr-pr1)
-#         print(u-u2,i-i2,pa-pa2,pr-pr2)
-#         a.unsetCharge(charge)
-#
-# def chenillard2b():
-#     a=Armoire6()
-#     a.resetAll()
-#     for i in range(a.nbCharge):
-#         print("charge ",i)
-#         a.toggleCharge(i)
-#         s=a.readMesure(i)
-#         print(s, "S1" ,a.readSecteur1(),"S2", a.readSecteur2())
-#         a.setSource2(i)
-#         s=a.readMesure(i)
-#         print(s, "S1" ,a.readSecteur1(),"S2", a.readSecteur2())
-#         a.unsetCharge(i)
-
-#chenillard2b()
\ No newline at end of file
diff --git a/TP2/test6.py b/TP2/test6.py
deleted file mode 100644
index 6473506ae4be3db666fd8252d440f3fb1547f7c0..0000000000000000000000000000000000000000
--- a/TP2/test6.py
+++ /dev/null
@@ -1,90 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-
-
-@author: chevrier6
-"""
-
-from Armoire6 import *
-#
-# a=Armoire6()
-# a.resetAll()
-# i=0
-# a.setCharge(i)
-# s=a.readMesure(i)
-# print(s)
-#
-# def chenillard():
-#     a=Armoire6()
-#     for i in range(a.nbCharge):
-#         a.setCharge(i)
-#         s=a.readMesure(i)
-#         print(s)
-
-def pprint(mesure):
-    output="U={:.2f} I={:.2f} PA={:.2f} PR={:.2f}"
-    return output.format(mesure[0],mesure[1],mesure[2],mesure[3])
-
-def test(charge):
-
-    a=Armoire6()
-    a.resetAll()
-    print("charge ",charge)
-    a.setCharge(charge)
-    s=a.readMesure(charge)
-    print(pprint(s), "\nS1" ,pprint(a.readSecteur1()),"\nS2", pprint(a.readSecteur2()),"\n")
-    a.setSource2(charge)
-    s=a.readMesure(charge)
-    print(pprint(s), "\nS1" ,pprint(a.readSecteur1()),"\nS2", pprint(a.readSecteur2()),"\n")
-    a.unsetCharge(charge)
-
-#
-# def chenillard2():
-#     a=Armoire6()
-#     a.resetAll()
-#     for i in range(a.nbCharge):
-#         print("charge ",i)
-#         a.setCharge(i)
-#         s=a.readMesure(i)
-#         print(s, "S1" ,a.readSecteur1(),"S2", a.readSecteur2())
-#         a.setSource2(i)
-#         s=a.readMesure(i)
-#         print(s, "S1" ,a.readSecteur1(),"S2", a.readSecteur2())
-#         a.unsetCharge(i)
-#
-#
-# def chenillard3():
-#     a=Armoire6()
-#     a.resetAll()
-#     for charge in range(a.nbCharge):
-#         print("charge ",charge)
-#         a.setCharge(charge)
-#         u,i,pa,pr=a.readMesure(charge)
-#         u1,i1,pa1,pr1=a.readSecteur1()
-#         u2,i2,pa2,pr2=a.readSecteur2()
-#         print((u,i,pa,pr), "S1" ,a.readSecteur1(),"S2", a.readSecteur2())
-#         print(u-u1,i-i1,pa-pa1,pr-pr1)
-#         print(u-u2,i-i2,pa-pa2,pr-pr2)
-#         a.setSource2(charge)
-#         u,i,pa,pr=a.readMesure(charge)
-#         u1,i1,pa1,pr1=a.readSecteur1()
-#         u2,i2,pa2,pr2=a.readSecteur2()
-#         print((u,i,pa,pr), "S1" ,a.readSecteur1(),"S2", a.readSecteur2())
-#         print(u-u1,i-i1,pa-pa1,pr-pr1)
-#         print(u-u2,i-i2,pa-pa2,pr-pr2)
-#         a.unsetCharge(charge)
-#
-# def chenillard2b():
-#     a=Armoire6()
-#     a.resetAll()
-#     for i in range(a.nbCharge):
-#         print("charge ",i)
-#         a.toggleCharge(i)
-#         s=a.readMesure(i)
-#         print(s, "S1" ,a.readSecteur1(),"S2", a.readSecteur2())
-#         a.setSource2(i)
-#         s=a.readMesure(i)
-#         print(s, "S1" ,a.readSecteur1(),"S2", a.readSecteur2())
-#         a.unsetCharge(i)
-
-#chenillard2b()
\ No newline at end of file
diff --git a/annuaireFichier.md b/annuaireFichier.md
index b84ad16ade3f25aa9df41011e236d2d54fa0af75..ce82571a86eeaef778e85088fd4f856a0f2b3751 100644
--- a/annuaireFichier.md
+++ b/annuaireFichier.md
@@ -7,7 +7,7 @@
 - exemple du cours (exclusion mutuelle et sa solution avec sémaphore): exclumutPb et exclumutPbSemaphore
 - exemple de syncrhonisation (pingpong et exJoinAlive)
 
-## Code relatif au TP2 (répertoire TP2)
+## Code relatif à l'accès aux armoires (dispositifs physiques) (répertoire TP2)
 
 Vous trouverez:
 - une documentation
@@ -17,6 +17,6 @@ et les fichiers suivants (besoin du module easymodbus)
 - bitManip utilitaire
 - test5 et test6: code exemple d'utilisation des armoires
 
-## Code relatif au TP3 (répertoire TP3)
+## Code relatif au Web services (répertoire TP3)
 
 Voir docu.md