Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add config flow, service info & translations #96

Merged
merged 59 commits into from
Dec 12, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
12b6dd5
Config flow initial implementation
pnbruckner Nov 7, 2023
e08a0c1
black
pnbruckner Nov 7, 2023
9139fed
Incremental checkin
pnbruckner Nov 8, 2023
134ee7e
Move settings from config data to options
pnbruckner Nov 9, 2023
7552a4b
Add service via _attr_device_info
pnbruckner Nov 9, 2023
c0fa25b
Sort manifest.json
pnbruckner Nov 10, 2023
87c7088
Fix 2023.3 compatibility issue
pnbruckner Nov 10, 2023
c6e5a75
Use has_entity_name, sun2 config name is now location
pnbruckner Nov 11, 2023
75e1d1d
Update config entries per configuration
pnbruckner Nov 11, 2023
eb8fc15
First translation implementation
pnbruckner Nov 11, 2023
2fc9495
Add remaining translations
pnbruckner Nov 11, 2023
ab1d6d1
Simplify config entry updating
pnbruckner Nov 12, 2023
5df731e
Remove simple entity types from sun2 config
pnbruckner Nov 12, 2023
5fe55ed
Add nl.json. Thanks metbril!
pnbruckner Nov 12, 2023
ce13b92
Update info.md
pnbruckner Nov 12, 2023
eac6d41
Update README.md
pnbruckner Nov 12, 2023
9bedd11
Bump version to 3.0.0b0 & point doc to branch
pnbruckner Nov 13, 2023
df1c623
Fix config bug when no sensors listed
pnbruckner Nov 13, 2023
d6ae933
Bump version to 3.0.0b1
pnbruckner Nov 13, 2023
28a6b0c
Fix core config update handling
pnbruckner Nov 13, 2023
643bf3e
Bump version to 3.0.0b2
pnbruckner Nov 13, 2023
927c165
Move processing of HA location config to __init__
pnbruckner Nov 14, 2023
6634116
Fix time_at_elevation when config removed from YAML
pnbruckner Nov 14, 2023
b94f47c
Bump version to 3.0.0b3
pnbruckner Nov 14, 2023
19a355c
Translations require HA 2023.4.0 or newer
pnbruckner Nov 14, 2023
9a3d5b3
Move translation lookup to __init__
pnbruckner Nov 15, 2023
f36bb6d
Move config validation to config.py
pnbruckner Nov 15, 2023
ed7cdef
More translations of default entity names
pnbruckner Nov 15, 2023
28c256e
Bump version to 3.0.0b4
pnbruckner Nov 15, 2023
16c9c29
More translations, including attribute names & states
pnbruckner Nov 16, 2023
e497d26
Add PACKAGE_MERGE_HINT
pnbruckner Nov 16, 2023
e3fa933
Add _unreported_attributes
pnbruckner Nov 16, 2023
29e3c63
Make elevation binary sensor config similar to others
pnbruckner Nov 16, 2023
5234667
Add required unique_id for non-simple entity configs
pnbruckner Nov 17, 2023
d176d55
Better handle core config update
pnbruckner Nov 17, 2023
78fa138
Update README.md
pnbruckner Nov 17, 2023
de8e247
Bump version to 3.0.0b5
pnbruckner Nov 17, 2023
5cab09a
Add reload service
pnbruckner Nov 17, 2023
3fcd761
Update README.md
pnbruckner Nov 18, 2023
1628439
Bump version to 3.0.0b6
pnbruckner Nov 18, 2023
82572d2
Use placeholders in misc translations
pnbruckner Nov 18, 2023
7143890
Bump version to 3.0.0b7
pnbruckner Nov 18, 2023
75d6c5d
Add sun2 integration via UI
pnbruckner Nov 21, 2023
34b775f
Add non-simple sensors via UI
pnbruckner Nov 28, 2023
87aa5f7
Update info.md
pnbruckner Nov 28, 2023
fb9bd2c
Update README.md
pnbruckner Nov 29, 2023
94210d7
Move misc translations to satisfy hassfest
pnbruckner Nov 29, 2023
6dce3d6
Update names of additional entities when language is changed
pnbruckner Dec 1, 2023
1c21156
Update README.md
pnbruckner Dec 1, 2023
4c590f7
Bump version to 3.0.0b9
pnbruckner Dec 1, 2023
3902be5
Miscellaneous improvements
pnbruckner Dec 4, 2023
30ee800
ruff, pylint, black & mypy
pnbruckner Dec 5, 2023
4341508
Fix bug with use of abstractmethod & property decorators.
pnbruckner Dec 6, 2023
2980839
Fix bug in hours_to_hms introduced in previous commit
pnbruckner Dec 7, 2023
5a4323f
Use only new style selectors
pnbruckner Dec 8, 2023
ff14d49
Simplify unique IDs for UI added additional sensors
pnbruckner Dec 8, 2023
a30b1be
Add option to remove additional entities
pnbruckner Dec 9, 2023
11ab5c2
Bump version to 3.0.0b10
pnbruckner Dec 9, 2023
b0cd85b
Fix _unrecorded_attributes
pnbruckner Dec 11, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Make elevation binary sensor config similar to others
  • Loading branch information
pnbruckner committed Nov 16, 2023
commit 29e3c633783515b90a0556f833770a8b8c51d0c6
26 changes: 21 additions & 5 deletions custom_components/sun2/binary_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
# name: <friendly_name>


def val_bs_cfg(config: str | ConfigType) -> ConfigType:
def _val_bs_cfg(config: str | ConfigType) -> ConfigType:
"""Validate configuration."""
if isinstance(config, str):
config = {config: {}}
Expand All @@ -86,7 +86,7 @@ def val_bs_cfg(config: str | ConfigType) -> ConfigType:

def _val_cfg(config: str | ConfigType) -> ConfigType:
"""Validate configuration including name."""
config = val_bs_cfg(config)
config = _val_bs_cfg(config)
if CONF_ELEVATION in config:
options = config[CONF_ELEVATION]
if CONF_NAME not in options:
Expand Down Expand Up @@ -330,7 +330,7 @@ def schedule_update(now: datetime) -> None:
self._attr_extra_state_attributes = {ATTR_NEXT_CHANGE: nxt_dttm}


def _sensors(
def _sensors_old(
loc_params: LocParams | None,
extra: ConfigEntry | str | None,
sensors_config: Iterable[str | dict[str, Any]],
Expand All @@ -347,6 +347,22 @@ def _sensors(
return sensors


def _sensors_new(
loc_params: LocParams | None,
extra: ConfigEntry | str | None,
sensors_config: Iterable[str | dict[str, Any]],
) -> list[Entity]:
sensors = []
for config in sensors_config:
if CONF_ELEVATION in config:
sensors.append(
Sun2ElevationSensor(
loc_params, extra, config[CONF_NAME], config[CONF_ELEVATION]
)
)
return sensors


async def async_setup_platform(
hass: HomeAssistant,
config: ConfigType,
Expand All @@ -363,7 +379,7 @@ async def async_setup_platform(
)

async_add_entities(
_sensors(
_sensors_old(
get_loc_params(config),
config.get(CONF_ENTITY_NAMESPACE),
config[CONF_MONITORED_CONDITIONS],
Expand All @@ -383,6 +399,6 @@ async def async_setup_entry(
return

async_add_entities(
_sensors(get_loc_params(config), entry, sensors_config),
_sensors_new(get_loc_params(config), entry, sensors_config),
True,
)
56 changes: 31 additions & 25 deletions custom_components/sun2/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import voluptuous as vol

from homeassistant.const import (
CONF_ABOVE,
CONF_BINARY_SENSORS,
CONF_ELEVATION,
CONF_LOCATION,
Expand All @@ -20,28 +19,34 @@
from homeassistant.helpers.translation import async_get_translations
from homeassistant.helpers.typing import ConfigType

from .binary_sensor import (
DEFAULT_ELEVATION_ABOVE,
SUN2_BINARY_SENSOR_SCHEMA,
val_bs_cfg,
)
from .const import (
CONF_DIRECTION,
CONF_ELEVATION_AT_TIME,
CONF_TIME_AT_ELEVATION,
DOMAIN,
SUNSET_ELEV,
)
from .helpers import LOC_PARAMS, Sun2Data
from .sensor import val_tae_cfg, ELEVATION_AT_TIME_SCHEMA, TIME_AT_ELEVATION_SCHEMA

PACKAGE_MERGE_HINT = "list"
DEFAULT_ELEVATION = SUNSET_ELEV

_SUN2_BINARY_SENSOR_SCHEMA = vol.Schema(
{
vol.Required(CONF_ELEVATION): vol.Any(
vol.All(vol.Lower, "horizon"), vol.Coerce(float)
),
vol.Optional(CONF_NAME): cv.string,
}
)

_SUN2_LOCATION_CONFIG = vol.Schema(
{
vol.Required(CONF_UNIQUE_ID): cv.string,
vol.Optional(CONF_LOCATION): cv.string,
vol.Optional(CONF_BINARY_SENSORS): vol.All(
cv.ensure_list, [SUN2_BINARY_SENSOR_SCHEMA]
cv.ensure_list, [_SUN2_BINARY_SENSOR_SCHEMA]
),
vol.Optional(CONF_SENSORS): vol.All(
cv.ensure_list,
Expand Down Expand Up @@ -80,22 +85,24 @@ def _translation(hass: HomeAssistant, key: str) -> str:
]


def _val_bs_name(hass: HomeAssistant, config: str | ConfigType) -> ConfigType:
"""Validate binary_sensor name."""
if CONF_ELEVATION in config:
options = config[CONF_ELEVATION]
if CONF_NAME not in options:
above = options[CONF_ABOVE]
if above == DEFAULT_ELEVATION_ABOVE:
name = _translation(hass, "above_horizon")
else:
above_str = _translation(hass, "above")
if above < 0:
minus_str = _translation(hass, "minus")
name = f"{above_str} {minus_str} {-above}"
else:
name = f"{above_str} {above}"
options[CONF_NAME] = name
def _val_bs_elevation(hass: HomeAssistant, config: str | ConfigType) -> ConfigType:
"""Validate elevation binary_sensor."""
if config[CONF_ELEVATION] == "horizon":
config[CONF_ELEVATION] = DEFAULT_ELEVATION

if config.get(CONF_NAME):
return config

if (elv := config[CONF_ELEVATION]) == DEFAULT_ELEVATION:
name = _translation(hass, "above_horizon")
else:
above_str = _translation(hass, "above")
if elv < 0:
minus_str = _translation(hass, "minus")
name = f"{above_str} {minus_str} {-elv}"
else:
name = f"{above_str} {elv}"
config[CONF_NAME] = name
return config


Expand Down Expand Up @@ -149,8 +156,7 @@ async def async_validate_config(
for loc_config in config[DOMAIN]:
if CONF_BINARY_SENSORS in loc_config:
loc_config[CONF_BINARY_SENSORS] = [
_val_bs_name(hass, val_bs_cfg(cfg))
for cfg in loc_config[CONF_BINARY_SENSORS]
_val_bs_elevation(hass, cfg) for cfg in loc_config[CONF_BINARY_SENSORS]
]
if CONF_SENSORS in loc_config:
sensor_configs = []
Expand Down
Loading