The mesh-home-assistant container goes with its Dockerfile, build bases and bus credential. The provisions step runs node on the bundle and reads the binding files where the mesh writes them, from an env-file the mesh fills because a process's env is not given ${port:…}. It still runs again when a binding it reads changes.
169 lines
3.9 KiB
JSON
169 lines
3.9 KiB
JSON
{
|
|
"module": "home-assistant",
|
|
"version": "1",
|
|
"slug": "hass",
|
|
"capabilities": [
|
|
"container-runtime"
|
|
],
|
|
"emits": [
|
|
"state.changed"
|
|
],
|
|
"own-secrets": {
|
|
"token": "${dir:mesh-state}/token"
|
|
},
|
|
"listens": [
|
|
{
|
|
"name": "web",
|
|
"port": 8123,
|
|
"protocol": "tcp",
|
|
"from": "mesh",
|
|
"why": "the dashboard, the API and the companion apps"
|
|
},
|
|
{
|
|
"name": "sonos-events",
|
|
"port": 1400,
|
|
"protocol": "tcp",
|
|
"from": "mesh",
|
|
"why": "the Sonos integration's event callback: speakers push their state changes here"
|
|
},
|
|
{
|
|
"name": "webrtc",
|
|
"port": 18555,
|
|
"protocol": "tcp",
|
|
"from": "mesh",
|
|
"why": "the bundled go2rtc's WebRTC port, which camera streams to a browser use"
|
|
}
|
|
],
|
|
"resources": [
|
|
{
|
|
"id": "mesh-state",
|
|
"type": "directory",
|
|
"mode": "0700",
|
|
"place": "mesh"
|
|
},
|
|
{
|
|
"id": "state",
|
|
"type": "directory",
|
|
"mode": "0700",
|
|
"place": "."
|
|
},
|
|
{
|
|
"id": "config",
|
|
"type": "directory",
|
|
"mode": "0700"
|
|
},
|
|
{
|
|
"id": "written",
|
|
"type": "directory",
|
|
"mode": "0700"
|
|
},
|
|
{
|
|
"id": "server",
|
|
"type": "container",
|
|
"name": "home-assistant",
|
|
"image": "ghcr.io/home-assistant/home-assistant@sha256:d8922685169707fd91e8b9729902d975f06157d005e422874d201e0261dda196",
|
|
"network": "host",
|
|
"env": {
|
|
"TZ": "Etc/UTC"
|
|
},
|
|
"volumes": [
|
|
"${dir:config}:/config"
|
|
]
|
|
},
|
|
{
|
|
"id": "runtime-config",
|
|
"type": "file",
|
|
"path": "${dir:mesh-state}/config.json",
|
|
"mode": "0600",
|
|
"content": "{}\n",
|
|
"merge": "json"
|
|
},
|
|
{
|
|
"id": "provisions-env",
|
|
"type": "file",
|
|
"path": "${dir:state}/provisions.env",
|
|
"mode": "0600",
|
|
"content": "MESH_HOMEASSISTANT_URL=http://127.0.0.1:${port:8123}\nMESH_HOMEASSISTANT_TOKEN_FILE=${dir:mesh-state}/token\nMESH_PROVISIONS_DIR=${dir:state}\nMESH_WRITTEN_DIR=${dir:written}\n"
|
|
},
|
|
{
|
|
"id": "provisions",
|
|
"type": "process",
|
|
"name": "home-assistant-provisions",
|
|
"artifact": "code",
|
|
"run": [
|
|
"node",
|
|
"provisions/index.js"
|
|
],
|
|
"run-once": true,
|
|
"env-file": [
|
|
"${dir:state}/provisions.env"
|
|
],
|
|
"restart-on": [
|
|
"provisions-env",
|
|
"bound-mqtt-topic",
|
|
"secret-mqtt-topic",
|
|
"bound-sonarr-api",
|
|
"secret-sonarr-api",
|
|
"bound-radarr-api",
|
|
"secret-radarr-api",
|
|
"bound-lidarr-api",
|
|
"secret-lidarr-api"
|
|
]
|
|
}
|
|
],
|
|
"requires": [
|
|
"lidarr-api",
|
|
"mqtt-topic",
|
|
"radarr-api",
|
|
"route",
|
|
"sonarr-api"
|
|
],
|
|
"contributes": {
|
|
"mqtt-topic": {
|
|
"topics": [
|
|
"#"
|
|
]
|
|
},
|
|
"route": {
|
|
"label": "home-assistant",
|
|
"endpoint": "web"
|
|
}
|
|
},
|
|
"binds": {
|
|
"route": "${dir:state}/route.json",
|
|
"mqtt-topic": "${dir:state}/mqtt-topic.json",
|
|
"sonarr-api": "${dir:state}/sonarr-api.json",
|
|
"radarr-api": "${dir:state}/radarr-api.json",
|
|
"lidarr-api": "${dir:state}/lidarr-api.json"
|
|
},
|
|
"secrets": {
|
|
"mqtt-topic": "${dir:state}/mqtt-topic.secret",
|
|
"sonarr-api": "${dir:state}/sonarr-api.secret",
|
|
"radarr-api": "${dir:state}/radarr-api.secret",
|
|
"lidarr-api": "${dir:state}/lidarr-api.secret"
|
|
},
|
|
"build": {
|
|
"artifacts": [
|
|
{
|
|
"name": "code",
|
|
"kind": "bundle",
|
|
"language": "typescript",
|
|
"entrypoints": [
|
|
"index.js",
|
|
"tools/index.js",
|
|
"provisions/index.js"
|
|
],
|
|
"loads": [
|
|
"index.js",
|
|
"tools/index.js"
|
|
],
|
|
"env": {
|
|
"MESH_HOMEASSISTANT_URL": "http://127.0.0.1:${port:8123}",
|
|
"MESH_HOMEASSISTANT_TOKEN_FILE": "${dir:mesh-state}/token",
|
|
"MESH_HOMEASSISTANT_CONFIG_FILE": "${dir:mesh-state}/config.json"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|