upgpkg: home-assistant 2021.3.4-1

This commit is contained in:
2021-03-22 19:40:45 +01:00
parent 35cbbd78f6
commit 56df8329cd
3 changed files with 406 additions and 0 deletions

88
home-assistant/PKGBUILD Normal file
View File

@@ -0,0 +1,88 @@
# Maintainer: Maxime Gauduin <alucryd@archlinux.org>
# Contributor: Ethan Skinner <aur@etskinner.com>
# Contributor: Grégoire Seux <grego_aur@familleseux.net>
# Contributor: Dean Galvin <deangalvin3@gmail.com>
# Contributor: NicoHood <archlinux@nicohood.de>
pkgname=home-assistant
pkgdesc='Open source home automation that puts local control and privacy first'
pkgver=2021.3.4
pkgrel=1
arch=(any)
url=https://home-assistant.io/
license=(APACHE)
depends=(
gcc
python-aiohttp
python-aiohttp-cors
python-astral
python-async-timeout
python-attrs
python-bcrypt
python-certifi
python-ciso8601
python-cryptography
python-defusedxml
python-httpx
python-jinja
python-mutagen
python-pillow
python-pip
python-pyjwt
python-pytz
python-requests
python-ruamel-yaml
python-slugify
python-sqlalchemy
python-voluptuous
python-voluptuous-serialize
python-yaml
python-yarl
python-zeroconf
python-awesomeversion
)
makedepends=(
git
python-setuptools
)
optdepends=(
'net-tools: Nmap host discovery'
'openzwave: Z-Wave integration'
'python-dtlssocket: Ikea Tradfri integration'
'python-lxml: Meteo France integration'
)
source=(
https://github.com/home-assistant/core/archive/refs/tags/$pkgver.tar.gz
home-assistant.service
home-assistant-astral2.2.patch
)
b2sums=('1b8b6e4d74b0be42a71e6f858c6c6fe17dc810ecdc595563e72c2dfd7c540f1c727b21525862e6094ffe3065565525f7038daddf73b599770705aec7749882fd'
'0df7bbfdac09e37294ac27567e677855c72d13be3aefbd23e0a8f101cf2148302affbe9b6b586b893f77fc990f665d7b95f4916583680c06abd8f74b5cdf3da9'
'29d510f04c4daa1be51f0b4b690b0b75a72574892d0b967332b68d7cdac1a74add90867e15f3b74117d25a3163f10604d972fa2060054d9f92e7b68bd1f7ed6f')
prepare() {
cd core-$pkgver
patch -Np1 -i ../home-assistant-astral2.2.patch
# lift hard dep constraints, we'll deal with breaking changes ourselves
sed 's/==/>=/g' -i requirements.txt setup.py homeassistant/package_constraints.txt
# allow pip >= 20.3 to be used
sed 's/,<20.3//g' -i requirements.txt setup.py homeassistant/package_constraints.txt
}
build() {
cd core-$pkgver
python setup.py build
}
package() {
cd core-$pkgver
python setup.py install --root="${pkgdir}" --prefix=/usr --optimize=1 --skip-build
install -Dm 644 ../home-assistant.service -t "${pkgdir}"/usr/lib/systemd/system/
}
# vim: ts=2 sw=2 et:

View File

@@ -0,0 +1,290 @@
From c50af6847944e591d0e5dd8760f139b2bb3da33e Mon Sep 17 00:00:00 2001
From: Giovanni Harting <539@idlegandalf.com>
Date: Mon, 22 Mar 2021 18:35:14 +0100
Subject: [PATCH] bump astral to 2.2
---
homeassistant/components/moon/sensor.py | 5 +--
homeassistant/components/sun/__init__.py | 20 +++++-----
homeassistant/helpers/sun.py | 50 +++++++++++++++---------
homeassistant/package_constraints.txt | 2 +-
requirements.txt | 2 +-
setup.py | 2 +-
6 files changed, 47 insertions(+), 34 deletions(-)
diff --git a/homeassistant/components/moon/sensor.py b/homeassistant/components/moon/sensor.py
index 9e0f8ef51d..9b29b071ee 100644
--- a/homeassistant/components/moon/sensor.py
+++ b/homeassistant/components/moon/sensor.py
@@ -1,5 +1,5 @@
"""Support for tracking the moon phases."""
-from astral import Astral
+from astral import moon
import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
@@ -49,7 +49,6 @@ class MoonSensor(Entity):
"""Initialize the moon sensor."""
self._name = name
self._state = None
- self._astral = Astral()
@property
def name(self):
@@ -88,4 +87,4 @@ class MoonSensor(Entity):
async def async_update(self):
"""Get the time and updates the states."""
today = dt_util.as_local(dt_util.utcnow()).date()
- self._state = self._astral.moon_phase(today)
+ self._state = moon.phase(today)
diff --git a/homeassistant/components/sun/__init__.py b/homeassistant/components/sun/__init__.py
index 2d921da4a4..ec8f4b325a 100644
--- a/homeassistant/components/sun/__init__.py
+++ b/homeassistant/components/sun/__init__.py
@@ -92,6 +92,7 @@ class Sun(Entity):
"""Initialize the sun."""
self.hass = hass
self.location = None
+ self.elevation = 0.0
self._state = self.next_rising = self.next_setting = None
self.next_dawn = self.next_dusk = None
self.next_midnight = self.next_noon = None
@@ -100,10 +101,11 @@ class Sun(Entity):
self._next_change = None
def update_location(_event):
- location = get_astral_location(self.hass)
+ location, elevation = get_astral_location(self.hass)
if location == self.location:
return
self.location = location
+ self.elevation = elevation
self.update_events()
update_location(None)
@@ -140,7 +142,7 @@ class Sun(Entity):
def _check_event(self, utc_point_in_time, sun_event, before):
next_utc = get_location_astral_event_next(
- self.location, sun_event, utc_point_in_time
+ self.location, self.elevation, sun_event, utc_point_in_time
)
if next_utc < self._next_change:
self._next_change = next_utc
@@ -169,7 +171,7 @@ class Sun(Entity):
)
self.location.solar_depression = -10
self._check_event(utc_point_in_time, "dawn", PHASE_SMALL_DAY)
- self.next_noon = self._check_event(utc_point_in_time, "solar_noon", None)
+ self.next_noon = self._check_event(utc_point_in_time, "noon", None)
self._check_event(utc_point_in_time, "dusk", PHASE_DAY)
self.next_setting = self._check_event(
utc_point_in_time, SUN_EVENT_SUNSET, PHASE_SMALL_DAY
@@ -180,9 +182,7 @@ class Sun(Entity):
self._check_event(utc_point_in_time, "dusk", PHASE_NAUTICAL_TWILIGHT)
self.location.solar_depression = "astronomical"
self._check_event(utc_point_in_time, "dusk", PHASE_ASTRONOMICAL_TWILIGHT)
- self.next_midnight = self._check_event(
- utc_point_in_time, "solar_midnight", None
- )
+ self.next_midnight = self._check_event(utc_point_in_time, "midnight", None)
self.location.solar_depression = "civil"
# if the event was solar midday or midnight, phase will now
@@ -190,7 +190,7 @@ class Sun(Entity):
# even in the day at the poles, so we can't rely on it.
# Need to calculate phase if next is noon or midnight
if self.phase is None:
- elevation = self.location.solar_elevation(self._next_change)
+ elevation = self.location.solar_elevation(self._next_change, self.elevation)
if elevation >= 10:
self.phase = PHASE_DAY
elif elevation >= 0:
@@ -222,9 +222,11 @@ class Sun(Entity):
"""Calculate the position of the sun."""
# Grab current time in case system clock changed since last time we ran.
utc_point_in_time = dt_util.utcnow()
- self.solar_azimuth = round(self.location.solar_azimuth(utc_point_in_time), 2)
+ self.solar_azimuth = round(
+ self.location.solar_azimuth(utc_point_in_time, self.elevation), 2
+ )
self.solar_elevation = round(
- self.location.solar_elevation(utc_point_in_time), 2
+ self.location.solar_elevation(utc_point_in_time, self.elevation), 2
)
_LOGGER.debug(
diff --git a/homeassistant/helpers/sun.py b/homeassistant/helpers/sun.py
index 2b82e19b8c..a4c16833e4 100644
--- a/homeassistant/helpers/sun.py
+++ b/homeassistant/helpers/sun.py
@@ -2,7 +2,7 @@
from __future__ import annotations
import datetime
-from typing import TYPE_CHECKING, Optional, Union
+from typing import TYPE_CHECKING, Optional, Tuple, Union
from homeassistant.const import SUN_EVENT_SUNRISE, SUN_EVENT_SUNSET
from homeassistant.core import callback
@@ -16,27 +16,32 @@ if TYPE_CHECKING:
DATA_LOCATION_CACHE = "astral_location_cache"
+ELEVATION_AGNOSTIC_EVENTS = ("noon", "midnight")
+
@callback
@bind_hass
-def get_astral_location(hass: HomeAssistantType) -> astral.Location:
+def get_astral_location(
+ hass: HomeAssistantType,
+) -> Tuple["astral.location.Location", "astral.Elevation"]:
"""Get an astral location for the current Home Assistant configuration."""
- from astral import Location # pylint: disable=import-outside-toplevel
+ from astral import LocationInfo # pylint: disable=import-outside-toplevel
+ from astral.location import Location # pylint: disable=import-outside-toplevel
+ timezone = str(hass.config.time_zone)
latitude = hass.config.latitude
longitude = hass.config.longitude
- timezone = str(hass.config.time_zone)
elevation = hass.config.elevation
- info = ("", "", latitude, longitude, timezone, elevation)
+ info = ("", "", timezone, latitude, longitude)
# Cache astral locations so they aren't recreated with the same args
if DATA_LOCATION_CACHE not in hass.data:
hass.data[DATA_LOCATION_CACHE] = {}
if info not in hass.data[DATA_LOCATION_CACHE]:
- hass.data[DATA_LOCATION_CACHE][info] = Location(info)
+ hass.data[DATA_LOCATION_CACHE][info] = Location(LocationInfo(*info))
- return hass.data[DATA_LOCATION_CACHE][info]
+ return hass.data[DATA_LOCATION_CACHE][info], elevation
@callback
@@ -48,26 +53,31 @@ def get_astral_event_next(
offset: Optional[datetime.timedelta] = None,
) -> datetime.datetime:
"""Calculate the next specified solar event."""
- location = get_astral_location(hass)
- return get_location_astral_event_next(location, event, utc_point_in_time, offset)
+ location, elevation = get_astral_location(hass)
+ return get_location_astral_event_next(
+ location, elevation, event, utc_point_in_time, offset
+ )
@callback
def get_location_astral_event_next(
- location: "astral.Location",
+ location: "astral.location.Location",
+ elevation: "astral.Elevation",
event: str,
utc_point_in_time: Optional[datetime.datetime] = None,
offset: Optional[datetime.timedelta] = None,
) -> datetime.datetime:
"""Calculate the next specified solar event."""
- from astral import AstralError # pylint: disable=import-outside-toplevel
-
if offset is None:
offset = datetime.timedelta()
if utc_point_in_time is None:
utc_point_in_time = dt_util.utcnow()
+ kwargs = {"local": False}
+ if event not in ELEVATION_AGNOSTIC_EVENTS:
+ kwargs["observer_elevation"] = elevation
+
mod = -1
while True:
try:
@@ -75,13 +85,13 @@ def get_location_astral_event_next(
getattr(location, event)(
dt_util.as_local(utc_point_in_time).date()
+ datetime.timedelta(days=mod),
- local=False,
+ **kwargs,
)
+ offset
)
if next_dt > utc_point_in_time:
return next_dt
- except AstralError:
+ except ValueError:
pass
mod += 1
@@ -94,9 +104,7 @@ def get_astral_event_date(
date: Union[datetime.date, datetime.datetime, None] = None,
) -> Optional[datetime.datetime]:
"""Calculate the astral event time for the specified date."""
- from astral import AstralError # pylint: disable=import-outside-toplevel
-
- location = get_astral_location(hass)
+ location, elevation = get_astral_location(hass)
if date is None:
date = dt_util.now().date()
@@ -104,9 +112,13 @@ def get_astral_event_date(
if isinstance(date, datetime.datetime):
date = dt_util.as_local(date).date()
+ kwargs = {"local": False}
+ if event not in ELEVATION_AGNOSTIC_EVENTS:
+ kwargs["observer_elevation"] = elevation
+
try:
- return getattr(location, event)(date, local=False) # type: ignore
- except AstralError:
+ return getattr(location, event)(date, **kwargs) # type: ignore
+ except ValueError:
# Event never occurs for specified date.
return None
diff --git a/homeassistant/package_constraints.txt b/homeassistant/package_constraints.txt
index 7642e14bda..534fa68211 100644
--- a/homeassistant/package_constraints.txt
+++ b/homeassistant/package_constraints.txt
@@ -2,7 +2,7 @@ PyJWT==1.7.1
PyNaCl==1.3.0
aiohttp==3.7.4
aiohttp_cors==0.7.0
-astral==1.10.1
+astral==2.2
async-upnp-client==0.14.13
async_timeout==3.0.1
attrs==19.3.0
diff --git a/requirements.txt b/requirements.txt
index 0a5b754dbf..e3acc1948d 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,7 +2,7 @@
# Home Assistant Core
aiohttp==3.7.4
-astral==1.10.1
+astral==2.2
async_timeout==3.0.1
attrs==19.3.0
awesomeversion==21.2.3
diff --git a/setup.py b/setup.py
index ce7d6b6883..f25250dd95 100755
--- a/setup.py
+++ b/setup.py
@@ -33,7 +33,7 @@ PACKAGES = find_packages(exclude=["tests", "tests.*"])
REQUIRES = [
"aiohttp==3.7.4",
- "astral==1.10.1",
+ "astral==2.2",
"async_timeout==3.0.1",
"attrs==19.3.0",
"awesomeversion==21.2.3",
--
2.31.0

View File

@@ -0,0 +1,28 @@
[Unit]
Description=Home assistant
After=network.target
[Service]
Restart=on-failure
User=hass
Group=hass
DynamicUser=true
LogsDirectory=hass
StateDirectory=hass
ExecStart=/usr/bin/hass \
--config /var/lib/hass/ \
--log-file /var/log/hass/home-assistant.log \
--log-rotate-days 1 \
--runner
RestartForceExitStatus=100
AmbientCapabilities=
CapabilityBoundingSet=
LockPersonality=true
ProtectControlGroups=true
ProtectKernelModules=true
ProtectKernelTunables=true
[Install]
WantedBy=multi-user.target