diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index ebb9e00717bf686c8518029fbc8db82e38ab45e4..993cafae1151c8d202b2c5673f55e5845e00995c 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -4,6 +4,9 @@
 
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission. ACCESS_COARSE_LOCATION" />
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission
+        android:name="android.permission.ACCESS_NETWORK_STATE" />
 
     <application
         android:allowBackup="true"
diff --git a/android/app/src/main/java/com/chatman/helper/BotMessageHelper.java b/android/app/src/main/java/com/chatman/helper/BotMessageHelper.java
index d44b09fcfb67a3070b5b609c21361c2497bc686c..8648cab690536e5e2b870c02e87cb2e49b726e84 100644
--- a/android/app/src/main/java/com/chatman/helper/BotMessageHelper.java
+++ b/android/app/src/main/java/com/chatman/helper/BotMessageHelper.java
@@ -5,6 +5,7 @@ import android.content.Intent;
 
 import com.chatman.activity.CompassActivity;
 import com.chatman.model.Chat;
+import com.chatman.service.WeatherService;
 
 import java.util.Calendar;
 
@@ -16,6 +17,10 @@ public class BotMessageHelper {
             Intent intent = new Intent(context, CompassActivity.class);
             context.startActivity(intent);
         }
+        else if (message.equals("weather today")) {
+            GpsHelper gps = new GpsHelper(context);
+            new WeatherService(context).execute(gps.getLocation());
+        }
         else sendBotMessage(context, "Halo! Selamat datang di ChatMan");
     }
 
diff --git a/android/app/src/main/java/com/chatman/service/WeatherNetworkUtils.java b/android/app/src/main/java/com/chatman/service/WeatherNetworkUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..5cbd5cb7c99b1b0b2aa24ecec36d7b2ec07081f8
--- /dev/null
+++ b/android/app/src/main/java/com/chatman/service/WeatherNetworkUtils.java
@@ -0,0 +1,72 @@
+package com.chatman.service;
+
+import android.location.Location;
+import android.net.Uri;
+import android.util.Log;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+
+import javax.net.ssl.HttpsURLConnection;
+
+public class WeatherNetworkUtils {
+    private static final String BASE_URL = "https://api.openweathermap.org/data/2.5/weather?";
+    private static final String LAT_PARAM = "lat";
+    private static final String LONG_PARAM = "lon";
+    private static final String APPID = "APPID";
+    private static final String UNITS = "units";
+
+    public static String getWeatherInfo(Location location) {
+        HttpsURLConnection urlConnection = null;
+        BufferedReader reader = null;
+        String resultJSON = null;
+
+        try {
+            Uri buildURI = Uri.parse(BASE_URL).buildUpon()
+                    .appendQueryParameter(LAT_PARAM, Double.toString(location.getLatitude()))
+                    .appendQueryParameter(LONG_PARAM, Double.toString(location.getLongitude()))
+                    .appendQueryParameter(UNITS, "metric")
+                    .appendQueryParameter(APPID, "2a4ab4c143bb11a626c17f4aef3d5e5a")
+                    .build();
+
+            URL requestURL = new URL(buildURI.toString());
+
+            urlConnection = (HttpsURLConnection) requestURL.openConnection();
+            urlConnection.setRequestMethod("GET");
+            urlConnection.connect();
+
+            InputStream inputStream = urlConnection.getInputStream();
+            reader = new BufferedReader(new InputStreamReader(inputStream));
+            StringBuilder builder = new StringBuilder();
+
+            String line = "";
+            while((line = reader.readLine()) != null) {
+                builder.append(line);
+                builder.append("\n");
+            }
+
+            if (builder.length() == 0) {
+                return null;
+            }
+
+            resultJSON = builder.toString();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if (urlConnection != null) {
+                urlConnection.disconnect();
+            }
+            if (reader != null) {
+                try {
+                    reader.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return resultJSON;
+    }
+}
diff --git a/android/app/src/main/java/com/chatman/service/WeatherService.java b/android/app/src/main/java/com/chatman/service/WeatherService.java
new file mode 100644
index 0000000000000000000000000000000000000000..7b39f0f3491c8307a6e6a3e59414dcc2589870e0
--- /dev/null
+++ b/android/app/src/main/java/com/chatman/service/WeatherService.java
@@ -0,0 +1,64 @@
+package com.chatman.service;
+
+import android.content.Context;
+import android.location.Location;
+import android.os.AsyncTask;
+
+import com.chatman.helper.BotMessageHelper;
+
+import org.json.JSONObject;
+
+import java.util.Calendar;
+
+public class WeatherService extends AsyncTask<Location, Void, String> {
+    private Context mContext;
+
+    public WeatherService(Context context) {
+        this.mContext = context;
+    }
+
+    @Override
+    protected String doInBackground(Location... locations) {
+        return WeatherNetworkUtils.getWeatherInfo(locations[0]);
+    }
+
+    @Override
+    protected void onPostExecute(String s) {
+        super.onPostExecute(s);
+        try {
+            StringBuilder messageBuilder = new StringBuilder();
+            JSONObject jsonObject = new JSONObject(s);
+            JSONObject weather = jsonObject.getJSONArray("weather").getJSONObject(0);
+            JSONObject main_data = jsonObject.getJSONObject("main");
+            JSONObject clouds = jsonObject.getJSONObject("clouds");
+            JSONObject system = jsonObject.getJSONObject("sys");
+
+            //Calculate time
+            Calendar cl = Calendar.getInstance();
+            cl.setTimeInMillis(jsonObject.getLong("dt")*1000);
+            String date = "" + cl.get(Calendar.DAY_OF_MONTH) + "/" + cl.get(Calendar.MONTH + 1) + "/" + cl.get(Calendar.YEAR);
+            String time = "" + cl.get(Calendar.HOUR_OF_DAY) + ":" + cl.get(Calendar.MINUTE) + ":" + cl.get(Calendar.SECOND) + 0;
+
+            messageBuilder.append(weather.getString("description"));
+            messageBuilder.setCharAt(0, Character.toTitleCase(messageBuilder.charAt(0)));
+            messageBuilder.append(" in ");
+            messageBuilder.append(jsonObject.getString("name") + ", ");
+            messageBuilder.append(system.getString("country"));
+            messageBuilder.append(" with a temperature of ");
+            messageBuilder.append(main_data.getString("temp"));
+            messageBuilder.append(" C, and a chance of raining at ");
+            messageBuilder.append(clouds.getString("all"));
+            messageBuilder.append("%\n\n");
+            messageBuilder.append("Updated at: ");
+            messageBuilder.append(date);
+            messageBuilder.append(" ");
+            messageBuilder.append(time);
+
+            BotMessageHelper.sendBotMessage(mContext, messageBuilder.toString());
+
+        } catch (Exception e) {
+            BotMessageHelper.sendBotMessage(mContext, "Weather data cannot be acquired");
+            e.printStackTrace();
+        }
+    }
+}