Restructure public config and deployment
This commit is contained in:
+32
-31
@@ -14,7 +14,7 @@ A runtime config module should export:
|
||||
## Example
|
||||
|
||||
```python
|
||||
from configs.example_controllers import define_lights
|
||||
from controllers import define_lights
|
||||
|
||||
LIGHTS = define_lights({
|
||||
"living_room": {
|
||||
@@ -92,29 +92,30 @@ Numba is an optional dependency. Install it with the `speed` extra before select
|
||||
|
||||
## Config File Layout
|
||||
|
||||
The public example entry point is `configs/example.py`. It imports focused files:
|
||||
The public example entry point is `config.example/lights_config.py`. It imports focused files:
|
||||
|
||||
- `configs/example_controllers.py`: physical controller/channel helper functions and constants.
|
||||
- `configs/example_lights.py`: individual virtual lights and which controllers they abstract.
|
||||
- `configs/example_groups.py`: room/group membership, optional member restrictions, and group balancing policy.
|
||||
- `configs/example_remotes.py`: physical remote sensor IDs mapped to internal `remote_id` values.
|
||||
- `configs/example_actions.py`: scenes, action helpers, and remote automation mappings.
|
||||
- `config.example/controllers.py`: physical controller/channel helper functions and constants.
|
||||
- `config.example/lights.py`: individual virtual lights and which controllers they abstract.
|
||||
- `config.example/groups.py`: room/group membership, optional member restrictions, and group balancing policy.
|
||||
- `config.example/remotes.py`: physical remote sensor IDs mapped to internal `remote_id` values.
|
||||
- `config.example/actions.py`: scenes, action helpers, and remote automation mappings.
|
||||
|
||||
Real home configs should stay in ignored local files such as `configs/local/`. The entry point should stay small and only assemble `SETTINGS`, `LIGHTS`, `GROUPS`, `REMOTES`, and `AUTOMATIONS`.
|
||||
Real home configs should stay in ignored local files such as `config/`. The entry point should stay small and only assemble `SETTINGS`, `LIGHTS`, `GROUPS`, `REMOTES`, and `AUTOMATIONS`.
|
||||
|
||||
For a private local setup, copy the public example into the ignored local directory:
|
||||
|
||||
```bash
|
||||
mkdir -p configs/local
|
||||
cp configs/example.py configs/local/lights_config.py
|
||||
cp configs/example_*.py configs/local/
|
||||
mkdir -p config
|
||||
cp config.example/*.py config/
|
||||
cp config.example/service.env.example config/service.env
|
||||
cp config.example/deploy.env.example config/deploy.env
|
||||
```
|
||||
|
||||
Then edit the copied files. If you keep the split-file imports, update them from `configs.example_*` to `configs.local.example_*`, or rename the copied split files and import those names instead. Run with:
|
||||
Then edit the copied files. The example entry point imports sibling files such as `actions.py`, `groups.py`, and `lights.py`, so the same imports continue to work after copying into `config/`. Run with:
|
||||
|
||||
```bash
|
||||
ha-deconz-bridge-service configs/local/lights_config.py
|
||||
ha-deconz-bridge-debug-web configs/local/lights_config.py "Example Mixed North"
|
||||
ha-deconz-bridge-service config/lights_config.py
|
||||
ha-deconz-bridge-debug-web config/lights_config.py "Living Room Ceiling"
|
||||
```
|
||||
|
||||
The runtime accepts either a Python module name or a `.py` file path.
|
||||
@@ -125,12 +126,12 @@ Groups are defined with `GroupSpec`. A member can be listed by name, or wrapped
|
||||
from ha_deconz_bridge.groups import GroupMemberSpec, GroupSpec
|
||||
|
||||
GROUPS = {
|
||||
"Example Plant": GroupSpec(
|
||||
name="Example Plant",
|
||||
"Plant Lights": GroupSpec(
|
||||
name="Plant Lights",
|
||||
members=(
|
||||
"Example Fixed White A",
|
||||
"Example Fixed White B",
|
||||
GroupMemberSpec("Example Mixed North", fixed_color=182),
|
||||
"Plant Light Left",
|
||||
"Plant Light Right",
|
||||
GroupMemberSpec("Living Room Ceiling", fixed_color=182),
|
||||
),
|
||||
balance="relative_member",
|
||||
),
|
||||
@@ -156,7 +157,7 @@ REMOTES = {
|
||||
"example_sensor_1": RemoteSpec(
|
||||
sensor_id="example_sensor_1",
|
||||
remote_id="example_living",
|
||||
name="Example living remote",
|
||||
name="Living room remote",
|
||||
model="RWL021",
|
||||
double_press_window=0.45, # optional override
|
||||
),
|
||||
@@ -165,13 +166,13 @@ REMOTES = {
|
||||
AUTOMATION_CONFIG = {
|
||||
"example_living": {
|
||||
"top": {
|
||||
"single": (ActionSpec("set_scene", target="Example Living", brightness=180, color_temp=330),),
|
||||
"single": (ActionSpec("set_scene", target="Living Room", brightness=180, color_temp=330),),
|
||||
},
|
||||
"bottom": {
|
||||
"single": (ActionSpec("turn_off", target="Example Living"),),
|
||||
"single": (ActionSpec("turn_off", target="Living Room"),),
|
||||
},
|
||||
"up": {
|
||||
"hold": (ActionSpec("brightness_step", target="Example Living", brightness_step=16),),
|
||||
"hold": (ActionSpec("brightness_step", target="Living Room", brightness_step=16),),
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -211,13 +212,13 @@ Action targets may be exact virtual light names, group names, or group expressio
|
||||
|
||||
If the target exactly matches an exposed virtual light or group and contains no `+` or `-`, the action is sent to that virtual entity directly. Compound expressions expand to individual virtual lights.
|
||||
|
||||
## Example Groups
|
||||
## Sample Groups
|
||||
|
||||
`configs/example.py` exposes sanitized example groups in addition to individual lights:
|
||||
`config.example/lights_config.py` exposes sanitized example groups in addition to individual lights:
|
||||
|
||||
- `Example Hall`: three RGB+CCT virtual lights.
|
||||
- `Example Kitchen`: one RGB+CCT virtual light.
|
||||
- `Example Bathroom`: one multi-controller ceiling light and one mirror light.
|
||||
- `Example Bedroom`: two RGB+CCT virtual lights.
|
||||
- `Example Living`: fixed-white, mixed RGB/CCT, and on/off examples.
|
||||
- `Example Plant`: fixed-white examples plus one constrained mixed light, using relative member brightness balancing.
|
||||
- `Hallway`: three RGB+CCT virtual lights.
|
||||
- `Kitchen`: one RGB+CCT virtual light.
|
||||
- `Bathroom`: one multi-controller ceiling light and one mirror light.
|
||||
- `Bedroom`: two RGB+CCT virtual lights.
|
||||
- `Living Room`: fixed-white, mixed RGB/CCT, and on/off examples.
|
||||
- `Plant Lights`: fixed-white lights plus one constrained mixed light, using relative member brightness balancing.
|
||||
|
||||
Reference in New Issue
Block a user