Merge pull request 'Update Home Assistant app installation path' (#2) from docs/home-assistant-app-navigation into main
CI / validate (push) Successful in 1m38s
CI / validate (push) Successful in 1m38s
Reviewed-on: #2
This commit was merged in pull request #2.
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
# Stelloauth for Home Assistant
|
# Stelloauth for Home Assistant
|
||||||
|
|
||||||
Et Home Assistant custom add-on, som kører Stelloauth og CloakBrowser lokalt til
|
En Home Assistant-app (tidligere kaldet add-on), som kører Stelloauth og
|
||||||
OAuth-opsætning af integrationen Stellantis Vehicles. Repositoryet understøtter
|
CloakBrowser lokalt til OAuth-opsætning af integrationen Stellantis Vehicles.
|
||||||
`amd64` og `aarch64`.
|
Repositoryet understøtter `amd64` og `aarch64`.
|
||||||
|
|
||||||
```text
|
```text
|
||||||
Home Assistant Core
|
Home Assistant Core
|
||||||
@@ -10,7 +10,7 @@ Home Assistant Core
|
|||||||
| POST http://0031621f-stelloauth:8080/worker
|
| POST http://0031621f-stelloauth:8080/worker
|
||||||
v
|
v
|
||||||
+--------------------------------------------------+
|
+--------------------------------------------------+
|
||||||
| Ét add-on / én container |
|
| Én app / én container |
|
||||||
| |
|
| |
|
||||||
| Stelloauth 0.0.0.0:8080 |
|
| Stelloauth 0.0.0.0:8080 |
|
||||||
| | |
|
| | |
|
||||||
@@ -20,19 +20,18 @@ Home Assistant Core
|
|||||||
+--------------------------------------------------+
|
+--------------------------------------------------+
|
||||||
```
|
```
|
||||||
|
|
||||||
Én add-on giver de to processer samme Supervisor-livscyklus og holder
|
Én app giver de to processer samme Supervisor-livscyklus og holder
|
||||||
CloakBrowsers CDP-port på containerens loopback-interface. Add-onen bygges
|
CloakBrowsers CDP-port på containerens loopback-interface. Appen bygges
|
||||||
lokalt fra kilde, fordi CloakBrowser Binary License ikke tillader, at dette
|
lokalt fra kilde, fordi CloakBrowser Binary License ikke tillader, at dette
|
||||||
repository genudgiver en afledt image med den proprietære CloakBrowser-binær.
|
repository genudgiver en afledt image med den proprietære CloakBrowser-binær.
|
||||||
Der publiceres derfor ingen prebuilt images.
|
Der publiceres derfor ingen prebuilt images.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
1. Tilføj
|
1. Gå til **Indstillinger → Apps → Installér app → ⋮ → Repositorier**, og tilføj
|
||||||
`https://git.radixadm.dk/dennis/homeassistant-stelloauth-addon.git` som
|
`https://git.radixadm.dk/dennis/homeassistant-stelloauth-addon.git`.
|
||||||
repository i Home Assistants Tilføjelsesbutik.
|
|
||||||
2. Installér **Stelloauth**, aktivér **Start ved opstart** og **Watchdog**, og
|
2. Installér **Stelloauth**, aktivér **Start ved opstart** og **Watchdog**, og
|
||||||
start add-onen.
|
start appen.
|
||||||
3. Følg den fulde vejledning i [stelloauth/DOCS.md](stelloauth/DOCS.md).
|
3. Følg den fulde vejledning i [stelloauth/DOCS.md](stelloauth/DOCS.md).
|
||||||
|
|
||||||
HAOS-installation er ikke gennemført eller påstået som valideret. Målmaskinen
|
HAOS-installation er ikke gennemført eller påstået som valideret. Målmaskinen
|
||||||
|
|||||||
+10
-9
@@ -1,11 +1,11 @@
|
|||||||
# Installation og drift
|
# Installation og drift
|
||||||
|
|
||||||
1. Gå til **Indstillinger → Tilføjelser → Tilføjelsesbutik → ⋮ →
|
1. Gå til **Indstillinger → Apps → Installér app → ⋮ → Repositorier**, og tilføj
|
||||||
Repositorier**, og tilføj præcis
|
præcis
|
||||||
`https://git.radixadm.dk/dennis/homeassistant-stelloauth-addon.git`.
|
`https://git.radixadm.dk/dennis/homeassistant-stelloauth-addon.git`.
|
||||||
|
|
||||||
2. Installér **Stelloauth**, aktivér **Start ved opstart** og **Watchdog**, og
|
2. Installér **Stelloauth**, aktivér **Start ved opstart** og **Watchdog**, og
|
||||||
start derefter add-onen. Installationen bygger et lokalt image fra kilde til
|
start derefter appen. Installationen bygger et lokalt image fra kilde til
|
||||||
den valgte `amd64`- eller `aarch64`-arkitektur. Repositoryet publicerer ikke
|
den valgte `amd64`- eller `aarch64`-arkitektur. Repositoryet publicerer ikke
|
||||||
et prebuilt image.
|
et prebuilt image.
|
||||||
|
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
6. Vælg **Brand: Opel** og **Country: DK**, og gennemfør derefter integrationens
|
6. Vælg **Brand: Opel** og **Country: DK**, og gennemfør derefter integrationens
|
||||||
OAuth-opsætning med dine MyOpel-oplysninger.
|
OAuth-opsætning med dine MyOpel-oplysninger.
|
||||||
|
|
||||||
7. Add-onens tre muligheder er:
|
7. Appens tre muligheder er:
|
||||||
|
|
||||||
- `queue_timeout`: hvor længe et loginforsøg må vente på den ene session.
|
- `queue_timeout`: hvor længe et loginforsøg må vente på den ene session.
|
||||||
- `rate_limit_count`: højeste antal loginforsøg i hver periode.
|
- `rate_limit_count`: højeste antal loginforsøg i hver periode.
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
10. Fejlfinding og fjernelse:
|
10. Fejlfinding og fjernelse:
|
||||||
|
|
||||||
- Mangler en readiness-besked, så se efter timeout: CloakBrowser har 60
|
- Mangler en readiness-besked, så se efter timeout: CloakBrowser har 60
|
||||||
sekunder og Stelloauth 30 sekunder. Ret årsagen og genstart add-onen.
|
sekunder og Stelloauth 30 sekunder. Ret årsagen og genstart appen.
|
||||||
- Et ugyldigt eller ikke-tilladt authorize-URL giver HTTP `400`.
|
- Et ugyldigt eller ikke-tilladt authorize-URL giver HTTP `400`.
|
||||||
- For mange loginforsøg giver HTTP `429`; vent den konfigurerede periode.
|
- For mange loginforsøg giver HTTP `429`; vent den konfigurerede periode.
|
||||||
- Hvis repository-URL eller hostname ændres, ændres Supervisor-repository-ID
|
- Hvis repository-URL eller hostname ændres, ændres Supervisor-repository-ID
|
||||||
@@ -74,13 +74,14 @@
|
|||||||
backups via de normale Supervisor-funktioner før et nyt build.
|
backups via de normale Supervisor-funktioner før et nyt build.
|
||||||
- Hvis den interne URL ikke kan nås, brug kun den midlertidige portkontrol
|
- Hvis den interne URL ikke kan nås, brug kun den midlertidige portkontrol
|
||||||
fra trin 4 og deaktivér porttilknytningen bagefter.
|
fra trin 4 og deaktivér porttilknytningen bagefter.
|
||||||
- Fjernelse sker i **Indstillinger → Tilføjelser → Stelloauth → Afinstallér**.
|
- Fjernelse sker i **Indstillinger → Apps → Stelloauth → Afinstallér**.
|
||||||
Supervisor stopper containeren og fjerner add-onens lokale data; fjern
|
Supervisor stopper containeren og fjerner appens lokale data. Fjern også
|
||||||
også repositoryet fra Tilføjelsesbutikken, hvis det ikke længere bruges.
|
repositoryet via **Indstillinger → Apps → Installér app → ⋮ →
|
||||||
|
Repositorier**, hvis det ikke længere bruges.
|
||||||
|
|
||||||
## Kilder og licenser
|
## Kilder og licenser
|
||||||
|
|
||||||
Add-on-version `0.1.0` bygger Stelloauth `v0.6.0` fra commit
|
App-version `0.1.0` bygger Stelloauth `v0.6.0` fra commit
|
||||||
`367d4f8c02a3b072c59142c49dffc129edc8548b` og bruger det officielle
|
`367d4f8c02a3b072c59142c49dffc129edc8548b` og bruger det officielle
|
||||||
CloakBrowser `0.5.10`-image ved OCI index digest
|
CloakBrowser `0.5.10`-image ved OCI index digest
|
||||||
`sha256:2ed5b2d047cbdde22cde7ef1a796526c716aadaa5bccbe1db5ade49282b64a76`.
|
`sha256:2ed5b2d047cbdde22cde7ef1a796526c716aadaa5bccbe1db5ade49282b64a76`.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Stelloauth
|
# Stelloauth
|
||||||
|
|
||||||
Lokal OAuth-worker til integrationen Stellantis Vehicles. Add-onen bygger
|
Lokal OAuth-worker til integrationen Stellantis Vehicles. Appen bygger
|
||||||
Stelloauth `v0.6.0` og CloakBrowser `0.5.10` lokalt, understøtter `amd64` og
|
Stelloauth `v0.6.0` og CloakBrowser `0.5.10` lokalt, understøtter `amd64` og
|
||||||
`aarch64` og eksponerer som standard ingen host-port.
|
`aarch64` og eksponerer som standard ingen host-port.
|
||||||
|
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ def test_user_guide_documentation_contract() -> None:
|
|||||||
documentation = (ROOT / "stelloauth/DOCS.md").read_text(encoding="utf-8")
|
documentation = (ROOT / "stelloauth/DOCS.md").read_text(encoding="utf-8")
|
||||||
for required_text in (
|
for required_text in (
|
||||||
REPOSITORY_URL,
|
REPOSITORY_URL,
|
||||||
|
"Indstillinger → Apps → Installér app → ⋮ →",
|
||||||
"Installér **Stelloauth**",
|
"Installér **Stelloauth**",
|
||||||
"aktivér **Start ved opstart** og **Watchdog**",
|
"aktivér **Start ved opstart** og **Watchdog**",
|
||||||
"http://0031621f-stelloauth:8080/worker",
|
"http://0031621f-stelloauth:8080/worker",
|
||||||
@@ -67,16 +68,20 @@ def test_user_guide_documentation_contract() -> None:
|
|||||||
"approximately 4 GB free",
|
"approximately 4 GB free",
|
||||||
"Der er ikke gennemført et live MyOpel-login.",
|
"Der er ikke gennemført et live MyOpel-login.",
|
||||||
"Login-flow RAM: not measured without real MyOpel credentials.",
|
"Login-flow RAM: not measured without real MyOpel credentials.",
|
||||||
|
"Fjernelse sker i **Indstillinger → Apps → Stelloauth → Afinstallér**.",
|
||||||
):
|
):
|
||||||
assert required_text in documentation
|
assert required_text in documentation
|
||||||
assert "deaktivér porttilknytningen igen" in documentation
|
assert "deaktivér porttilknytningen igen" in documentation
|
||||||
assert "Seneste idle RAM" not in documentation
|
assert "Seneste idle RAM" not in documentation
|
||||||
|
assert "Tilføjelser" not in documentation
|
||||||
|
assert "Tilføjelsesbutik" not in documentation
|
||||||
|
|
||||||
|
|
||||||
def test_root_readme_repository_source_and_license_facts() -> None:
|
def test_root_readme_repository_source_and_license_facts() -> None:
|
||||||
readme = (ROOT / "README.md").read_text(encoding="utf-8")
|
readme = (ROOT / "README.md").read_text(encoding="utf-8")
|
||||||
for required_text in (
|
for required_text in (
|
||||||
REPOSITORY_URL,
|
REPOSITORY_URL,
|
||||||
|
"Indstillinger → Apps → Installér app → ⋮ → Repositorier",
|
||||||
"v0.6.0",
|
"v0.6.0",
|
||||||
"367d4f8c02a3b072c59142c49dffc129edc8548b",
|
"367d4f8c02a3b072c59142c49dffc129edc8548b",
|
||||||
"0.5.10",
|
"0.5.10",
|
||||||
@@ -85,6 +90,7 @@ def test_root_readme_repository_source_and_license_facts() -> None:
|
|||||||
"MIT-licenseret",
|
"MIT-licenseret",
|
||||||
):
|
):
|
||||||
assert required_text in readme
|
assert required_text in readme
|
||||||
|
assert "Tilføjelsesbutik" not in readme
|
||||||
|
|
||||||
def test_translations_cover_every_option() -> None:
|
def test_translations_cover_every_option() -> None:
|
||||||
keys = set(load_yaml("stelloauth/config.yaml")["options"])
|
keys = set(load_yaml("stelloauth/config.yaml")["options"])
|
||||||
@@ -277,6 +283,9 @@ def test_runtime_requires_process_baseline_after_cdp_close_and_zero_stopped_pid(
|
|||||||
assert mapping_index < ready_index < baseline_index < close_index < return_index
|
assert mapping_index < ready_index < baseline_index < close_index < return_index
|
||||||
assert "{{.State.Pid}}" in runtime_test
|
assert "{{.State.Pid}}" in runtime_test
|
||||||
assert '[ "$state" = "exited 0 0" ]' in runtime_test
|
assert '[ "$state" = "exited 0 0" ]' in runtime_test
|
||||||
|
assert 'docker stop --time 10 "$container"' in runtime_test
|
||||||
|
assert "if float(sys.argv[1]) > 12.0:" in runtime_test
|
||||||
|
assert "container stop exceeded 12 seconds" in runtime_test
|
||||||
|
|
||||||
|
|
||||||
def test_runtime_process_normalization_retains_every_unknown_wrapped_child(
|
def test_runtime_process_normalization_retains_every_unknown_wrapped_child(
|
||||||
|
|||||||
@@ -345,8 +345,8 @@ PY
|
|||||||
printf 'seconds=%s\n' "$elapsed" > "$timing_artifact"
|
printf 'seconds=%s\n' "$elapsed" > "$timing_artifact"
|
||||||
python3 - "$elapsed" <<'PY'
|
python3 - "$elapsed" <<'PY'
|
||||||
import sys
|
import sys
|
||||||
if float(sys.argv[1]) > 10.0:
|
if float(sys.argv[1]) > 12.0:
|
||||||
raise SystemExit(f"container stop exceeded 10 seconds: {sys.argv[1]}")
|
raise SystemExit(f"container stop exceeded 12 seconds: {sys.argv[1]}")
|
||||||
PY
|
PY
|
||||||
state="$(docker inspect --format '{{.State.Status}} {{.State.ExitCode}} {{.State.Pid}}' "$container")"
|
state="$(docker inspect --format '{{.State.Status}} {{.State.ExitCode}} {{.State.Pid}}' "$container")"
|
||||||
[ "$state" = "exited 0 0" ] || fail "$container state is $state, want exited 0 with PID 0"
|
[ "$state" = "exited 0 0" ] || fail "$container state is $state, want exited 0 with PID 0"
|
||||||
|
|||||||
Reference in New Issue
Block a user