108 lines
3.7 KiB
Bash
108 lines
3.7 KiB
Bash
#!/usr/bin/with-contenv bashio
|
|
# vim: ft=bash
|
|
# shellcheck shell=bash
|
|
# ==============================================================================
|
|
# Start matter-server service
|
|
# ==============================================================================
|
|
bashio::log.info "Starting Matter Server..."
|
|
|
|
declare server_port
|
|
declare log_level
|
|
declare log_level_sdk
|
|
declare primary_interface
|
|
declare matter_server_version
|
|
declare chip_version
|
|
matter_server_args=()
|
|
extra_args=()
|
|
|
|
if ! bashio::config.exists log_level; then
|
|
bashio::log.magenta 'No log_level set in config, fallback to info'
|
|
fi
|
|
log_level=$(bashio::string.lower "$(bashio::config log_level info)")
|
|
|
|
# Make Matter SDK log level currently default to error
|
|
log_level_sdk=$(bashio::string.lower "$(bashio::config log_level_sdk error)")
|
|
|
|
if bashio::config.has_value "matter_server_version"; then
|
|
matter_server_version=$(bashio::config 'matter_server_version')
|
|
bashio::log.info "Installing Python Matter Server ${matter_server_version}"
|
|
# shellcheck disable=SC2102
|
|
pip3 install --pre python-matter-server[server]=="${matter_server_version}"
|
|
elif bashio::config.true "beta"; then
|
|
bashio::log.info 'Upgrading Python Matter Server to latest pre-release'
|
|
# shellcheck disable=SC2102
|
|
pip3 install --upgrade --pre python-matter-server[server]
|
|
fi
|
|
|
|
if bashio::config.has_value "matter_sdk_wheels_version"; then
|
|
chip_version=$(bashio::config 'matter_sdk_wheels_version')
|
|
bashio::log.info "Installing Matter SDK ${chip_version}"
|
|
pip3 install --pre --no-dependencies \
|
|
home-assistant-chip-clusters=="${chip_version}" \
|
|
home-assistant-chip-core=="${chip_version}"
|
|
fi
|
|
|
|
# Bind to internal hassio network only unless user requests to expose
|
|
server_port="$(bashio::addon.port 5580)"
|
|
if ! bashio::var.has_value "${server_port}"; then
|
|
server_port=5580
|
|
extra_args+=('--listen-address' "$(bashio::addon.ip_address)")
|
|
fi
|
|
|
|
if bashio::config.true "enable_test_net_dcl"; then
|
|
extra_args+=('--enable-test-net-dcl')
|
|
fi
|
|
|
|
primary_interface="$(bashio::api.supervisor 'GET' '/network/info' '' 'first(.interfaces[] | select (.primary == true)) .interface')"
|
|
|
|
# Try fallback method (e.g. in case NetworkManager is not available)
|
|
# shellcheck disable=SC2086
|
|
if [ -z ${primary_interface} ]; then
|
|
bashio::log.warning 'Trying fallback method to determine primary interface'
|
|
primary_interface="$(ip --json route show default | jq --raw-output '.[0].dev')"
|
|
fi
|
|
|
|
# shellcheck disable=SC2086
|
|
if [ -z ${primary_interface} ] || [ ${primary_interface} == "null" ]; then
|
|
bashio::exit.nok "No primary network interface found!"
|
|
fi
|
|
|
|
if bashio::config.has_value "bluetooth_adapter_id"; then
|
|
# shellcheck disable=SC2207
|
|
extra_args+=('--bluetooth-adapter' $(bashio::config 'bluetooth_adapter_id'))
|
|
fi
|
|
|
|
if bashio::config.has_value "matter_server_args"; then
|
|
# shellcheck disable=SC2207
|
|
extra_args+=($(bashio::config 'matter_server_args'))
|
|
fi
|
|
|
|
bashio::log.info "Using '${primary_interface}' as primary network interface."
|
|
|
|
# Send out discovery information to Home Assistant
|
|
/etc/s6-overlay/scripts/matter-server-discovery &
|
|
|
|
# shellcheck disable=SC2164
|
|
cd /root
|
|
|
|
# shellcheck disable=SC2206
|
|
matter_server_args+=(
|
|
'--storage-path' "/data"
|
|
'--port' "${server_port}"
|
|
'--log-level' "${log_level}"
|
|
'--log-level-sdk' "${log_level_sdk}"
|
|
'--primary-interface' "${primary_interface}"
|
|
'--paa-root-cert-dir' "/data/credentials"
|
|
'--ota-provider-dir' "/config/updates"
|
|
'--fabricid' 2
|
|
'--vendorid' 4939
|
|
${extra_args[@]}
|
|
)
|
|
|
|
if bashio::config.true "beta"; then
|
|
exec /usr/bin/gdb --quiet -ex="set confirm off" -ex run -ex backtrace -ex "quit \$_exitcode" --args /usr/local/bin/python \
|
|
/usr/local/bin/matter-server "${matter_server_args[@]}"
|
|
else
|
|
exec /usr/local/bin/matter-server "${matter_server_args[@]}"
|
|
fi
|