diff --git a/CHANGELOG.md b/CHANGELOG.md
index 05dce84603451083f5f71f6e5b5f0ee039e82118..172188b36efa7c479ff314043832a43e1f36e6f3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -17,7 +17,7 @@
 - jouer du pipo
 - envoie balader les gens qui lui font des compliments d'amour
 
-**Bug fixes:
+**Bug fixes:**
 - quand la voix est activée, ne répondre je n'ai pas compris que si la ou la requete précédente comprends le nom de l'ia
 
 ---
diff --git a/Jarvis.py b/Jarvis.py
index 0d1389b2869139ed96f35c22557f3493b5d7ffaf..d7474e6b77cb0be644a3de0da251175edc7361a9 100755
--- a/Jarvis.py
+++ b/Jarvis.py
@@ -100,60 +100,6 @@ def parle(texte, save=True, lang='fr-CA'):
         pygame.mixer.music.set_endevent()
 
 
-def meteo_de(villes="petite-ile", pay="RE"):
-    global compris, ville, pays, lattitude, longitude, température,\
-        température_minimum, température_max, humidité, pression,\
-        vitesse_du_vent, direction_du_vent, pourcentage_de_nuages, \
-        description, volume_pluie_des_3_dernière_heures, \
-        volume_neige_des_3_dernière_heures
-
-    api = "c23d0a0ffe081307fb6fbba06125aef3"
-    adresseid = "http://api.openweathermap.org/data/2.5/weather?q="
-    requette = requests.get("{}{},{}&appid={}".format(adresseid, "%20".join(villes.split(" ")), pay, api)).json()
-
-    try:
-        vitesse_du_vent = str(requette["wind"]["speed"]) + " mètres par secondes"
-        température = str(int(requette["main"]["temp"]) - 273) + "°"
-        température_max = "%d °Celsius" % (int(requette["main"]["temp_max"]) - 273)
-        humidité = str(requette["main"]["humidity"]) + "%"
-        température_minimum = "%d °Celsius" % (int(requette["main"]["temp_min"] - 273))
-        direction_du_vent = str(requette["wind"]["deg"]) + "°"
-        longitude = str(requette["coord"]["lon"])
-        lattitude = str(requette["coord"]["lat"])
-        pression = str(requette["main"]["pressure"]) + "hPa"
-        pays = str(requette["sys"]["country"])
-        ville = str(requette["name"])
-        pourcentage_de_nuages = str(requette["clouds"]["all"]) + "%"
-        description = str(requette["weather"][0]["description"])
-    except:
-        parle(random.choice(truc_cassé))
-        return None
-
-    try:
-        volume_pluie_des_3_dernière_heures = str(requette["rain"]["3h"])
-        a1 = True
-    except:
-        a1 = False
-    try:
-        volume_neige_des_3_dernière_heures = str(requette["snow"]["3h"])
-        a2 = True
-    except:
-        a2 = False
-    liste = [pays,
-             ville,
-             # lattitude, longitude,
-             température,
-             # température_minimum, température_max,
-             humidité, pression, vitesse_du_vent,
-             # direction_du_vent,
-             pourcentage_de_nuages, description]
-    parle(", ".join([printv(i) for i in liste]), False)
-    if a1:
-        parle(printv(volume_pluie_des_3_dernière_heures), False)
-    if a2:
-        parle(printv(volume_neige_des_3_dernière_heures), False)
-
-
 def deverouillage(entre):
     global jarvis, compris
     if jarvis or (mdp in entre and ("pass" in entre or "deverouillage" in entre)):
@@ -279,9 +225,9 @@ def meteo(entre):
         villes = entre1[0]
         villes = villes + entre1[1] if len(entre1) == 3 else villes
         pay = entre1[1] if len(entre1) == 2 else entre1[2]
-        meteo_de(villes, pay.upper()[:2])
+        parle(usefull.meteo_de(villes, pay.upper()[:2], all_data=False))
     elif "meteo" in entre:
-        meteo_de()
+        parle(usefull.meteo_de(all_data=False))
 
 
 def dire_un_truc_en_mode_random(verbosity):
diff --git a/README.md b/README.md
index 8ff3c3baef5df11f0b0ff055456ad44bbbe7f80c..1b54181e4faa7e34ae8265e3552b23ef76bb1d99 100644
--- a/README.md
+++ b/README.md
@@ -17,6 +17,7 @@ Mon Jarvis pour windows et linux (peut-être un truc sur android aussi :°°)
 ## ALSA lib pcm.c:7843:(snd_pcm_recover) underrun occurred
 
 Dans /etc/pulse/daemon.conf décommenter et modifier ces lignes :
+
 	> * `default-fragments = 5`
 	> * `default-fragment-size-msec = 2`
 
diff --git a/__pycache__/myimports.cpython-37.pyc b/__pycache__/myimports.cpython-37.pyc
index 2d11510bc55cdd6488361ac531e913d766618e09..543d09bb9213e4a6cb518d49c1be418705aa97c1 100644
Binary files a/__pycache__/myimports.cpython-37.pyc and b/__pycache__/myimports.cpython-37.pyc differ
diff --git a/clip.mp3 b/clip.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..8ef1cebcbea496abe75453a24b3e2a9f46f730e4
Binary files /dev/null and b/clip.mp3 differ
diff --git a/clip2.mp3 b/clip2.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..daf833cdc51c5c4e7d79144d2cdd49d10a23e58a
Binary files /dev/null and b/clip2.mp3 differ
diff --git a/database.txt b/database.txt
index 0f075d1dd5b1d8ea0ecc4b561f5be7d60e6d78c6..e084b91d805f041f176a7a8fbd59d49291e2b148 100644
--- a/database.txt
+++ b/database.txt
@@ -26,4 +26,8 @@ Bonjour !
 |Je vais très bien et vous ?
 |J'avoue que je me suis déjà senti en meilleur forme. et vous ?
 |je vais chercher :  paris  paris 
+|pays : RE, ville : Petite-Ile, lattitude : -21.35, longitude : 55.57, température : 22°, température minimum : 17 °Celsius, température max : 25 °Celsius, humidité : 57%, pression : 1020hPa, vitesse du vent : 8.7 mètres par secondes, direction du vent : 130°, pourcentage de nuages : 0%, description : clear sky
+|pays : RE, ville : Petite-Ile, lattitude : -21.35, longitude : 55.57, température : 22°, température minimum : 17 °Celsius, température max : 25 °Celsius, humidité : 57%, pression : 1020hPa, vitesse du vent : 8.7 mètres par secondes, direction du vent : 130°, pourcentage de nuages : 0%, description : clear sky.
+|pays : RE, ville : Petite-Ile, lattitude : -21.35, longitude : 55.57, température : 22°, humidité : 57%, pression : 1020hPa, vitesse du vent : 8.7 m/s, pourcentage de nuages : 0%, description : clear sky.
+|pays : RE, ville : Petite-Ile, température : 22°, humidité : 57%, pression : 1020hPa, vitesse du vent : 8.7 m/s, pourcentage de nuages : 0%, description : clear sky.
 |
\ No newline at end of file
diff --git a/myimports.py b/myimports.py
index bc15bc15a5c1a421a504de8ba13f0bdc7a1bb519..78781802eaa1a82f5fec77ac25b069db4c734849 100644
--- a/myimports.py
+++ b/myimports.py
@@ -57,7 +57,7 @@ url = "https://translate.google.com/translate_tts"
 topics = []
 r = sr.Recognizer()
 r.dynamic_energy_threshold = True
-r.pause_threshold = 0.3
+r.pause_threshold = 0.5
 mic = sr.Microphone()
 jarvis = True  # défini si jarvis commence vérouillé ou pas
 mdp = "oracle02"  # défini le mdp de déverouillage de jarvis
diff --git a/saved_voice/28.mp3 b/saved_voice/28.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/saved_voice/29.mp3 b/saved_voice/29.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/saved_voice/30.mp3 b/saved_voice/30.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/saved_voice/31.mp3 b/saved_voice/31.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..41ddcb36f6f20933f6ef0f5ca1f9084ede988a3d
Binary files /dev/null and b/saved_voice/31.mp3 differ
diff --git a/usefull/__init__.py b/usefull/__init__.py
index 8b556a262c2123d20593f95a80df0cf9edad9599..3a08a638c3c9e60a1ebcc920ca0014963844f990 100644
--- a/usefull/__init__.py
+++ b/usefull/__init__.py
@@ -1,3 +1,4 @@
 # __init__.py
 
-from .wiki import *
\ No newline at end of file
+from .wiki import *
+from .meteo import *
\ No newline at end of file
diff --git a/usefull/__pycache__/__init__.cpython-37.pyc b/usefull/__pycache__/__init__.cpython-37.pyc
index 251920414995ef2edc92307148ed559033c123c4..8928d63a8a3341374d48bcba1d2fef0bf75221bd 100644
Binary files a/usefull/__pycache__/__init__.cpython-37.pyc and b/usefull/__pycache__/__init__.cpython-37.pyc differ
diff --git a/usefull/__pycache__/meteo.cpython-37.pyc b/usefull/__pycache__/meteo.cpython-37.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..8f2ca460dd58c22c31b22d47a98cdab530b15c25
Binary files /dev/null and b/usefull/__pycache__/meteo.cpython-37.pyc differ
diff --git a/usefull/meteo.py b/usefull/meteo.py
new file mode 100755
index 0000000000000000000000000000000000000000..fb95561980b85bcfb9438e5512f5d8cd9cba9b6b
--- /dev/null
+++ b/usefull/meteo.py
@@ -0,0 +1,172 @@
+#!/usr/bin/python3
+# donne la meteo
+import requests
+
+
+def var_name(var):
+    """return the name of the variable var"""
+    for name, value in globals().items():
+        if value is var and name != "i":
+            return name
+    return '?????'
+
+
+def printv(var):
+    '''
+    return the name of the variable var associated with the value of the var itself
+    exemple:
+        toto_is_toto = 'tata';printv(toto) returns the string : 'toto is toto : tata'
+    '''
+    return str(var_name(var).replace("_", " ") + ' : ' + var)
+
+
+def meteo_de(villes="petite-ile", pay="RE", all_data=True):
+    global compris, ville, pays, lattitude, longitude, température,\
+        température_minimum, température_max, humidité, pression,\
+        vitesse_du_vent, direction_du_vent, nuages, \
+        description, volume_pluie_des_3_dernière_heures, \
+        volume_neige_des_3_dernière_heures
+
+    pay = pay.upper()[:2]
+    api = "c23d0a0ffe081307fb6fbba06125aef3"
+    adresseid = "http://api.openweathermap.org/data/2.5/weather?q="
+    requette = requests.get("{}{},{}&appid={}".format(adresseid, "%20".join(villes.split(" ")), pay, api)).json()
+    try:
+        vitesse_du_vent = str(requette["wind"]["speed"]) + " m/s"
+        température = str(int(requette["main"]["temp"]) - 273) + "°"
+        température_max = "%d °C" % (int(requette["main"]["temp_max"]) - 273)
+        humidité = str(requette["main"]["humidity"]) + "%"
+        température_minimum = "%d °C" % (int(requette["main"]["temp_min"] - 273))
+        direction_du_vent = str(requette["wind"]["deg"]) + "°"
+        longitude = str(requette["coord"]["lon"])
+        lattitude = str(requette["coord"]["lat"])
+        pression = str(requette["main"]["pressure"]) + "hPa"
+        pays = str(requette["sys"]["country"])
+        ville = str(requette["name"])
+        nuages = str(requette["clouds"]["all"]) + "%"
+        description = str(requette["weather"][0]["description"])
+    except Exception as e:
+        return e
+
+    try:
+        volume_pluie_des_3_dernière_heures = str(requette["rain"]["3h"])
+        a1 = True
+    except:
+        a1 = False
+    try:
+        volume_neige_des_3_dernière_heures = str(requette["snow"]["3h"])
+        a2 = True
+    except:
+        a2 = False
+
+    if all_data:
+        liste = [pays,
+                 ville,
+                 lattitude, longitude,
+                 température,
+                 température_minimum, température_max,
+                 humidité, pression, vitesse_du_vent,
+                 direction_du_vent,
+                 nuages, description]
+    else:
+        liste = [pays,
+                 ville,
+                 # lattitude, longitude,
+                 température,
+                 # température_minimum, température_max,
+                 humidité, pression, vitesse_du_vent,
+                 # direction_du_vent,
+                 nuages, description]
+
+    result = ", ".join([printv(i) for i in liste])
+    if a1:
+        result += printv(volume_pluie_des_3_dernière_heures)
+    if a2:
+        result += printv(volume_neige_des_3_dernière_heures)
+    return result + '.'
+
+
+def forecast(villes="petite-ile", pay="RE", all_data=True, dans_n_heures=None):
+    global compris, ville, pays, lattitude, longitude, température,\
+        temp_min, temp_max, humidité, pression,\
+        vent, direction, nuages, \
+        description, volume_pluie_des_3_dernière_heures, \
+        volume_neige_des_3_dernière_heures, date
+
+    pay = pay.upper()[:2]
+    api = "c23d0a0ffe081307fb6fbba06125aef3"
+    adresseid = "http://api.openweathermap.org/data/2.5/forecast?q="
+    requette = requests.get("{}{},{}&appid={}".format(adresseid, "%20".join(villes.split(" ")), pay, api)).json()
+    result = ''
+    result_dans_n_heure = ''
+    try:
+        pays = str(requette["city"]["country"])
+        ville = str(requette['city']["name"])
+        longitude = str(requette['city']["coord"]["lon"])
+        lattitude = str(requette['city']["coord"]["lat"])
+    except Exception as e:
+        return e
+
+    for i in range(len(requette['list'])):
+        try:
+            vent = str(requette['list'][i]["wind"]["speed"]) + " m/s"
+            température = str(int(requette['list'][i]['main']["temp"]) - 273) + "°"
+            temp_max = "%d °C" % (int(requette['list'][i]["main"]["temp_max"]) - 273)
+            humidité = str(requette['list'][i]["main"]["humidity"]) + "%"
+            temp_min = "%d °C" % (int(requette['list'][i]["main"]["temp_min"] - 273))
+            direction = str(requette['list'][i]["wind"]["deg"]) + "°"
+            pression = str(requette['list'][i]["main"]["pressure"]) + "hPa"
+            nuages = str(requette['list'][i]["clouds"]["all"]) + "%"
+            description = str(requette['list'][i]["weather"][0]["description"])
+            date = str(requette['list'][i]["dt_txt"])
+        except Exception as e:
+            return e
+
+        try:
+            volume_pluie_des_3_dernière_heures = str(requette['list'][i]["rain"]["3h"])
+            a1 = True
+        except:
+            a1 = False
+        try:
+            volume_neige_des_3_dernière_heures = str(requette['list'][i]["snow"]["3h"])
+            a2 = True
+        except:
+            a2 = False
+
+        if all_data:
+            liste = [date, température,
+                     temp_min, temp_max,
+                     humidité, pression, vent,
+                     direction,
+                     nuages, description]
+        else:
+            liste = [date, température,
+                     # temp_min, temp_max,
+                     humidité, pression, vent,
+                     # direction,
+                     nuages, description]
+
+        result += ", ".join([printv(i) for i in liste])
+        if dans_n_heures // 3 == i:
+            result_dans_n_heure = ", ".join([printv(i) for i in liste])
+        if a1:
+            result += printv(volume_pluie_des_3_dernière_heures)
+            if dans_n_heures // 3 == i:
+                result_dans_n_heure += printv(volume_pluie_des_3_dernière_heures)
+        if a2:
+            result += printv(volume_neige_des_3_dernière_heures)
+            if dans_n_heures // 3 == i:
+                result_dans_n_heure += printv(volume_neige_des_3_dernière_heures)
+        result += '\n\n'
+    if dans_n_heures != None:
+        return result_dans_n_heure
+    return result
+
+
+if __name__ == '__main__':
+    import sys
+    if len(sys.argv) == 3:
+        print(meteo_de(sys.argv[1], sys.argv[2]))
+    else:
+        print(meteo_de())
+    print(forecast(dans_n_heures=24))