From c8dc57405c7494439a9f5522b377b7670946b227 Mon Sep 17 00:00:00 2001
From: ChrisMandich <mandichc@gmail.com>
Date: Sat, 5 Oct 2019 13:47:10 -0700
Subject: [PATCH] Add support for choosing timezone

Timezone is now a required option in configuration.yaml
---
 homeassistant/components/flume/manifest.json |  2 +-
 homeassistant/components/flume/sensor.py     | 34 ++++++++++++++++----
 2 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/homeassistant/components/flume/manifest.json b/homeassistant/components/flume/manifest.json
index 142179dade4..9f855459bfc 100644
--- a/homeassistant/components/flume/manifest.json
+++ b/homeassistant/components/flume/manifest.json
@@ -4,5 +4,5 @@
     "documentation": "tbd",
     "dependencies": [],
     "codeowners": ["@ChrisMandich"],
-    "requirements": []
+    "requirements": ["pytz"]
   }
\ No newline at end of file
diff --git a/homeassistant/components/flume/sensor.py b/homeassistant/components/flume/sensor.py
index b98b45d3b29..3d91898d4aa 100644
--- a/homeassistant/components/flume/sensor.py
+++ b/homeassistant/components/flume/sensor.py
@@ -4,11 +4,12 @@ from datetime import datetime, timedelta
 import json
 import logging
 
+import pytz
 import requests
 import voluptuous as vol
 
 from homeassistant.components.sensor import PLATFORM_SCHEMA
-from homeassistant.const import CONF_NAME, CONF_USERNAME, CONF_PASSWORD
+from homeassistant.const import CONF_NAME, CONF_PASSWORD, CONF_USERNAME
 import homeassistant.helpers.config_validation as cv
 from homeassistant.helpers.entity import Entity
 
@@ -19,6 +20,7 @@ DEFAULT_NAME = "Flume Sensor"
 CONF_CLIENT_ID = "client_id"
 CONF_CLIENT_SECRET = "client_secret"
 CONF_DEVICE_ID = "device_id"
+CONF_TIME_ZONE = "time_zone"
 
 SCAN_INTERVAL = timedelta(minutes=1)
 
@@ -30,6 +32,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
         vol.Required(CONF_CLIENT_ID): cv.string,
         vol.Required(CONF_CLIENT_SECRET): cv.string,
         vol.Required(CONF_DEVICE_ID): cv.string,
+        vol.Required(CONF_TIME_ZONE): cv.string,
         vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
     }
 )
@@ -42,10 +45,17 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
     client_id = config.get(CONF_CLIENT_ID)
     client_secret = config.get(CONF_CLIENT_SECRET)
     device_id = config.get(CONF_DEVICE_ID)
+    time_zone = config.get(CONF_TIME_ZONE)
     name = config.get(CONF_NAME)
 
     Flume = FlumeData(
-        username, password, client_id, client_secret, device_id, SCAN_INTERVAL
+        username,
+        password,
+        client_id,
+        client_secret,
+        device_id,
+        time_zone,
+        SCAN_INTERVAL,
     )
     try:
         Flume.update()
@@ -91,7 +101,14 @@ class FlumeData:
     """Get the latest data and update the states."""
 
     def __init__(
-        self, username, password, client_id, client_secret, device_id, scan_interval
+        self,
+        username,
+        password,
+        client_id,
+        client_secret,
+        device_id,
+        time_zone,
+        scan_interval,
     ):
         """Initialize the data object."""
         self._username = username
@@ -100,6 +117,7 @@ class FlumeData:
         self._client_secret = client_secret
         self._device_id = device_id
         self._scan_interval = scan_interval
+        self._time_zone = time_zone
         self._token = self.getToken()
         self._user_id = self.getUserId()
         self._bearer = self.getBearer()
@@ -158,9 +176,13 @@ class FlumeData:
             + "/query"
         )
 
-        now = datetime.now()
-        since_datetime = (now - self._scan_interval).strftime("%Y-%m-%d %H:%M:00")
-        until_datetime = now.strftime("%Y-%m-%d %H:%M:00")
+        utc_now = pytz.utc.localize(datetime.utcnow())
+        time_zone_now = utc_now.astimezone(pytz.timezone(self._time_zone))
+
+        since_datetime = (time_zone_now - self._scan_interval).strftime(
+            "%Y-%m-%d %H:%M:00"
+        )
+        until_datetime = time_zone_now.strftime("%Y-%m-%d %H:%M:00")
 
         queryDict = {
             "queries": [