#!/usr/bin/env bash set -euo pipefail APP_DIR="/opt/shd/plugins/alice" SRC_DIR="$(cd "$(dirname "$0")" && pwd)" IN_PLACE="${1:-}" sync_project() { mkdir -p /opt/shd/plugins if command -v rsync >/dev/null 2>&1; then rsync -a --delete --exclude '.venv/' --exclude '__pycache__/' --exclude '*.pyc' --exclude '*.zip' "$SRC_DIR/" "$APP_DIR/" else mkdir -p "$APP_DIR" cp -a "$SRC_DIR/." "$APP_DIR/" rm -rf "$APP_DIR/.venv" "$APP_DIR/__pycache__" find "$APP_DIR" -type d -name '__pycache__' -prune -exec rm -rf {} + find "$APP_DIR" -type f \( -name '*.pyc' -o -name '*.zip' \) -delete fi } if [[ "$SRC_DIR" != "$APP_DIR" && "$IN_PLACE" != "--in-place" ]]; then echo "Sync project to $APP_DIR" if [[ -w /opt/shd/plugins || -w /opt/shd || -w /opt ]]; then sync_project else if ! command -v sudo >/dev/null 2>&1; then echo "Need write access to /opt/shd/plugins or sudo" exit 1 fi sudo mkdir -p /opt/shd/plugins sudo rm -rf "$APP_DIR" sudo mkdir -p "$APP_DIR" if command -v rsync >/dev/null 2>&1; then sudo rsync -a --delete --exclude '.venv/' --exclude '__pycache__/' --exclude '*.pyc' --exclude '*.zip' "$SRC_DIR/" "$APP_DIR/" else sudo cp -a "$SRC_DIR/." "$APP_DIR/" sudo rm -rf "$APP_DIR/.venv" "$APP_DIR/__pycache__" sudo find "$APP_DIR" -type d -name '__pycache__' -prune -exec rm -rf {} + sudo find "$APP_DIR" -type f \( -name '*.pyc' -o -name '*.zip' \) -delete fi if [[ -n "${SUDO_USER:-}" ]]; then sudo chown -R "$SUDO_USER":"$SUDO_USER" "$APP_DIR" fi fi exec "$APP_DIR/install.sh" --in-place fi cd "$APP_DIR" chmod +x cli.sh install.sh start.sh start_plugin_web.sh if [[ ! -d .venv ]]; then python3 -m venv .venv fi # shellcheck disable=SC1091 source .venv/bin/activate python3 -m pip install --upgrade pip python3 -m pip install -r requirements.txt python3 -c "import aiohttp, zeroconf" >/dev/null mkdir -p data configs/loxone configs/wb-rules : > data/.gitkeep install_service() { local src="$1" local dst="/etc/systemd/system/$(basename "$src")" if [[ -w /etc/systemd/system ]]; then cp -f "$src" "$dst" else sudo cp -f "$src" "$dst" fi } if command -v systemctl >/dev/null 2>&1; then install_service "$APP_DIR/systemd/shd-alice.service" install_service "$APP_DIR/systemd/shd-alice-plugin.service" if [[ -w /etc/systemd/system ]]; then systemctl daemon-reload systemctl enable shd-alice.service shd-alice-plugin.service || true else sudo systemctl daemon-reload sudo systemctl enable shd-alice.service shd-alice-plugin.service || true fi fi echo "Install done: $APP_DIR" echo "Next:" echo " 1) save token: printf %s 'YANDEX_OAUTH_TOKEN' > $APP_DIR/token.txt && chmod 600 $APP_DIR/token.txt" echo " 2) update stations: $APP_DIR/cli.sh columns" echo " 3) start web UI: $APP_DIR/cli.sh web"