# rpi-zigbee-stack — Docker Compose stack management for RPi 3B+

set export
RPI := "root@192.168.9.147"
COMPOSE := "/root/compose.yaml"

# Default: show stack status
default:
    ssh {{RPI}} "docker compose -f {{COMPOSE}} ps"

# ---- Service management ----

# Start all services
up:
    ssh {{RPI}} "docker compose -f {{COMPOSE}} up -d"

# Stop all services
down:
    ssh {{RPI}} "docker compose -f {{COMPOSE}} down"

# Restart all services
restart:
    ssh {{RPI}} "docker compose -f {{COMPOSE}} restart"

# Restart a specific service
restart-svc SERVICE:
    ssh {{RPI}} "docker compose -f {{COMPOSE}} restart {{SERVICE}}"

# Pull latest images
pull:
    ssh {{RPI}} "docker compose -f {{COMPOSE}} pull"

# ---- Logs ----

# Tail all logs
logs:
    ssh {{RPI}} "docker compose -f {{COMPOSE}} logs --tail 50"

# Follow all logs
logs-follow:
    ssh {{RPI}} "docker compose -f {{COMPOSE}} logs -f"

# Logs for a specific service
logs-svc SERVICE:
    ssh {{RPI}} "docker compose -f {{COMPOSE}} logs --tail 50 {{SERVICE}}"

# ---- Zigbee ----

# Show zigbee2mqtt status
zb-status:
    ssh {{RPI}} "docker logs zigbee2mqtt --tail 10 2>&1"

# Permit zigbee joining for 60 seconds
zb-permit:
    ssh {{RPI}} "docker exec mosquitto mosquitto_pub -t zigbee2mqtt/bridge/request/permit_join -m '{\"value\":true,\"time\":60}'"

# Disable zigbee joining
zb-deny:
    ssh {{RPI}} "docker exec mosquitto mosquitto_pub -t zigbee2mqtt/bridge/request/permit_join -m '{\"value\":false}'"

# List zigbee devices
zb-devices:
    ssh {{RPI}} "docker exec mosquitto mosquitto_pub -t zigbee2mqtt/bridge/request/devices -m ''"

# ---- Node-RED ----

# Open Node-RED editor
nr-editor:
    xdg-open http://192.168.9.147:1880 2>/dev/null || open http://192.168.9.147:1880 2>/dev/null

# Open Node-RED dashboard
nr-dashboard:
    xdg-open http://192.168.9.147:1880/ui 2>/dev/null || open http://192.168.9.147:1880/ui 2>/dev/null

# ---- Maintenance ----

# Sync compose.yaml and configs to RPi
sync:
    scp compose.yaml {{RPI}}:/root/compose.yaml
    scp mosquitto.conf {{RPI}}:/root/mosquitto/config/mosquitto.conf
    scp zigbee2mqtt.yaml {{RPI}}:/root/zigbee2mqtt/configuration.yaml
    @echo "Configs synced to RPi. Run 'just restart' to apply."

# Full redeploy: sync configs + restart
redeploy: sync restart

# Show disk usage on RPi
df:
    ssh {{RPI}} "df -h / /var/lib/docker"

# Show Docker disk usage
docker-df:
    ssh {{RPI}} "docker system df"

# Prune unused Docker images/volumes
prune:
    ssh {{RPI}} "docker system prune -f"

# ---- Snapshots ----

# Backup current RPi configs to local repo
backup:
    ssh {{RPI}} "cat /root/compose.yaml" > compose.yaml
    ssh {{RPI}} "cat /root/mosquitto/config/mosquitto.conf" > mosquitto.conf
    ssh {{RPI}} "cat /root/zigbee2mqtt/configuration.yaml" > zigbee2mqtt.yaml
    @echo "Backed up. Run git diff to see changes."
