Files
we_monitor/install.sh
T
jensandClaude Sonnet 4.6 5944b0a7a4 collect: add diff to credentials file; --diff overrides it
Change --diff from store_true to default=None so CLI presence is
distinguishable from the JSON default. If not given on CLI, reads
creds_data.get("diff", False). Updated install.sh template and README.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 15:09:54 +02:00

131 lines
4.5 KiB
Bash
Executable File

#!/usr/bin/env bash
# Install we_monitor as a systemd user service.
#
# What this script does:
# 1. Creates ~/.config/we_monitor/ and a credentials template if missing
# 2. Writes a systemd user service unit
# 3. Enables the service (does not start it — edit credentials first)
#
# Usage:
# chmod +x install.sh
# ./install.sh
# # then edit ~/.config/we_monitor/credentials.json
# systemctl --user start we_monitor
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SERVICE_NAME="we_monitor"
CREDS_DIR="$HOME/.config/we_monitor"
CREDS_FILE="$CREDS_DIR/credentials.json"
SYSTEMD_DIR="$HOME/.config/systemd/user"
SERVICE_FILE="$SYSTEMD_DIR/$SERVICE_NAME.service"
LOG_DIR="$SCRIPT_DIR/logs"
VENV="$SCRIPT_DIR/.venv"
PYTHON="$VENV/bin/python"
echo "==> we_monitor installer"
echo " Project : $SCRIPT_DIR"
echo " User : $USER"
echo ""
# ── 1. virtual environment ────────────────────────────────────────────────────
if [[ ! -x "$PYTHON" ]]; then
echo "==> Creating virtual environment : $VENV"
python3 -m venv "$VENV"
else
echo "==> Virtual environment exists : $VENV"
fi
echo "==> Installing / updating dependencies"
"$VENV/bin/pip" install --quiet --upgrade pip
"$VENV/bin/pip" install --quiet -r "$SCRIPT_DIR/requirements.txt"
echo " Python : $PYTHON"
echo ""
# ── 2. credentials template ───────────────────────────────────────────────────
mkdir -p "$CREDS_DIR"
chmod 700 "$CREDS_DIR"
if [[ ! -f "$CREDS_FILE" ]]; then
cat > "$CREDS_FILE" <<'EOF'
{
"credentials": {
"username": "me@example.com",
"password": "secret"
},
"vin": "",
"domains": ["charging", "measurements", "readiness"],
"interval_s": 300,
"host": "0.0.0.0",
"port": 9999,
"log_dir": "./logs",
"diff": false
}
EOF
chmod 600 "$CREDS_FILE"
echo "==> Created credentials template : $CREDS_FILE"
echo " *** Edit this file before starting the service! ***"
else
echo "==> Credentials file exists : $CREDS_FILE"
fi
# ── 3. log directory ──────────────────────────────────────────────────────────
mkdir -p "$LOG_DIR"
echo "==> Log directory : $LOG_DIR"
# ── 4. systemd user service ───────────────────────────────────────────────────
mkdir -p "$SYSTEMD_DIR"
cat > "$SERVICE_FILE" <<EOF
[Unit]
Description=WeConnect vehicle data collector
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
WorkingDirectory=$SCRIPT_DIR
ExecStart=$PYTHON $SCRIPT_DIR/collect.py -c $CREDS_FILE
Restart=on-failure
RestartSec=60
StandardOutput=journal
StandardError=journal
SyslogIdentifier=$SERVICE_NAME
[Install]
WantedBy=default.target
EOF
echo "==> Installed service unit : $SERVICE_FILE"
# ── 5. enable linger (service survives logout / starts at boot) ───────────────
if loginctl enable-linger "$USER" 2>/dev/null; then
echo "==> Linger enabled for $USER (service starts at boot)"
else
echo " Note: could not enable linger — service runs only while logged in"
echo " Run as root to fix: loginctl enable-linger $USER"
fi
# ── 6. reload and enable (but do NOT start yet) ───────────────────────────────
systemctl --user daemon-reload
systemctl --user enable "$SERVICE_NAME"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " Installation complete."
echo ""
echo " Next steps:"
echo " 1. Edit credentials (username, password, vin, interval_s, …):"
echo " \$EDITOR $CREDS_FILE"
echo ""
echo " 2. Start the service:"
echo " systemctl --user start $SERVICE_NAME"
echo ""
echo " 3. Check status:"
echo " systemctl --user status $SERVICE_NAME"
echo ""
echo " 4. Follow logs:"
echo " journalctl --user -u $SERVICE_NAME -f"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"