Take timezone into consideration when calulating Zmanim. Partial fix for #16946 (#17131)

This commit is contained in:
Tsvi Mostovicz 2018-10-04 16:51:56 +03:00 committed by Paulus Schoutsen
parent b61a250321
commit c9976718d4
2 changed files with 37 additions and 9 deletions

View File

@ -64,7 +64,8 @@ async def async_setup_platform(
dev = [] dev = []
for sensor_type in config[CONF_SENSORS]: for sensor_type in config[CONF_SENSORS]:
dev.append(JewishCalSensor( dev.append(JewishCalSensor(
name, language, sensor_type, latitude, longitude, diaspora)) name, language, sensor_type, latitude, longitude,
hass.config.time_zone, diaspora))
async_add_entities(dev, True) async_add_entities(dev, True)
@ -72,7 +73,8 @@ class JewishCalSensor(Entity):
"""Representation of an Jewish calendar sensor.""" """Representation of an Jewish calendar sensor."""
def __init__( def __init__(
self, name, language, sensor_type, latitude, longitude, diaspora): self, name, language, sensor_type, latitude, longitude, timezone,
diaspora):
"""Initialize the Jewish calendar sensor.""" """Initialize the Jewish calendar sensor."""
self.client_name = name self.client_name = name
self._name = SENSOR_TYPES[sensor_type][0] self._name = SENSOR_TYPES[sensor_type][0]
@ -81,6 +83,7 @@ class JewishCalSensor(Entity):
self._state = None self._state = None
self.latitude = latitude self.latitude = latitude
self.longitude = longitude self.longitude = longitude
self.timezone = timezone
self.diaspora = diaspora self.diaspora = diaspora
_LOGGER.debug("Sensor %s initialized", self.type) _LOGGER.debug("Sensor %s initialized", self.type)
@ -131,7 +134,7 @@ class JewishCalSensor(Entity):
else: else:
times = hdate.Zmanim( times = hdate.Zmanim(
date=today, latitude=self.latitude, longitude=self.longitude, date=today, latitude=self.latitude, longitude=self.longitude,
hebrew=self._hebrew).zmanim timezone=self.timezone, hebrew=self._hebrew).zmanim
self._state = times[self.type].time() self._state = times[self.type].time()
_LOGGER.debug("New value: %s", self._state) _LOGGER.debug("New value: %s", self._state)

View File

@ -1,5 +1,6 @@
"""The tests for the Jewish calendar sensor platform.""" """The tests for the Jewish calendar sensor platform."""
import unittest import unittest
from datetime import time
from datetime import datetime as dt from datetime import datetime as dt
from unittest.mock import patch from unittest.mock import patch
@ -64,7 +65,7 @@ class TestJewishCalenderSensor(unittest.TestCase):
sensor = JewishCalSensor( sensor = JewishCalSensor(
name='test', language='english', sensor_type='date', name='test', language='english', sensor_type='date',
latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE, latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE,
diaspora=False) timezone="UTC", diaspora=False)
with patch('homeassistant.util.dt.now', return_value=test_time): with patch('homeassistant.util.dt.now', return_value=test_time):
run_coroutine_threadsafe( run_coroutine_threadsafe(
sensor.async_update(), sensor.async_update(),
@ -77,7 +78,7 @@ class TestJewishCalenderSensor(unittest.TestCase):
sensor = JewishCalSensor( sensor = JewishCalSensor(
name='test', language='hebrew', sensor_type='date', name='test', language='hebrew', sensor_type='date',
latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE, latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE,
diaspora=False) timezone="UTC", diaspora=False)
with patch('homeassistant.util.dt.now', return_value=test_time): with patch('homeassistant.util.dt.now', return_value=test_time):
run_coroutine_threadsafe( run_coroutine_threadsafe(
sensor.async_update(), self.hass.loop).result() sensor.async_update(), self.hass.loop).result()
@ -89,7 +90,7 @@ class TestJewishCalenderSensor(unittest.TestCase):
sensor = JewishCalSensor( sensor = JewishCalSensor(
name='test', language='hebrew', sensor_type='holiday_name', name='test', language='hebrew', sensor_type='holiday_name',
latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE, latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE,
diaspora=False) timezone="UTC", diaspora=False)
with patch('homeassistant.util.dt.now', return_value=test_time): with patch('homeassistant.util.dt.now', return_value=test_time):
run_coroutine_threadsafe( run_coroutine_threadsafe(
sensor.async_update(), self.hass.loop).result() sensor.async_update(), self.hass.loop).result()
@ -101,7 +102,7 @@ class TestJewishCalenderSensor(unittest.TestCase):
sensor = JewishCalSensor( sensor = JewishCalSensor(
name='test', language='english', sensor_type='holiday_name', name='test', language='english', sensor_type='holiday_name',
latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE, latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE,
diaspora=False) timezone="UTC", diaspora=False)
with patch('homeassistant.util.dt.now', return_value=test_time): with patch('homeassistant.util.dt.now', return_value=test_time):
run_coroutine_threadsafe( run_coroutine_threadsafe(
sensor.async_update(), self.hass.loop).result() sensor.async_update(), self.hass.loop).result()
@ -113,7 +114,7 @@ class TestJewishCalenderSensor(unittest.TestCase):
sensor = JewishCalSensor( sensor = JewishCalSensor(
name='test', language='hebrew', sensor_type='holyness', name='test', language='hebrew', sensor_type='holyness',
latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE, latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE,
diaspora=False) timezone="UTC", diaspora=False)
with patch('homeassistant.util.dt.now', return_value=test_time): with patch('homeassistant.util.dt.now', return_value=test_time):
run_coroutine_threadsafe( run_coroutine_threadsafe(
sensor.async_update(), self.hass.loop).result() sensor.async_update(), self.hass.loop).result()
@ -125,8 +126,32 @@ class TestJewishCalenderSensor(unittest.TestCase):
sensor = JewishCalSensor( sensor = JewishCalSensor(
name='test', language='hebrew', sensor_type='weekly_portion', name='test', language='hebrew', sensor_type='weekly_portion',
latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE, latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE,
diaspora=False) timezone="UTC", diaspora=False)
with patch('homeassistant.util.dt.now', return_value=test_time): with patch('homeassistant.util.dt.now', return_value=test_time):
run_coroutine_threadsafe( run_coroutine_threadsafe(
sensor.async_update(), self.hass.loop).result() sensor.async_update(), self.hass.loop).result()
self.assertEqual(sensor.state, "פרשת נצבים") self.assertEqual(sensor.state, "פרשת נצבים")
def test_jewish_calendar_sensor_first_stars_ny(self):
"""Test Jewish calendar sensor date output in hebrew."""
test_time = dt(2018, 9, 8)
sensor = JewishCalSensor(
name='test', language='hebrew', sensor_type='first_stars',
latitude=40.7128, longitude=-74.0060,
timezone="America/New_York", diaspora=False)
with patch('homeassistant.util.dt.now', return_value=test_time):
run_coroutine_threadsafe(
sensor.async_update(), self.hass.loop).result()
self.assertEqual(sensor.state, time(19, 48))
def test_jewish_calendar_sensor_first_stars_jerusalem(self):
"""Test Jewish calendar sensor date output in hebrew."""
test_time = dt(2018, 9, 8)
sensor = JewishCalSensor(
name='test', language='hebrew', sensor_type='first_stars',
latitude=self.TEST_LATITUDE, longitude=self.TEST_LONGITUDE,
timezone="Asia/Jerusalem", diaspora=False)
with patch('homeassistant.util.dt.now', return_value=test_time):
run_coroutine_threadsafe(
sensor.async_update(), self.hass.loop).result()
self.assertEqual(sensor.state, time(19, 21))