#!/usr/bin/env bash
set -euo pipefail

# FailureWatt Growatt bridge installer
# Usage example:
#   sudo BRIDGE_IP=192.168.1.20 BRIDGE_PORT=5020 DEVICE=/dev/serial/by-id/usb-YOUR_RS485_ADAPTER ./install-failurewatt.sh

BRIDGE_IP="${BRIDGE_IP:-192.168.1.20}"
BRIDGE_PORT="${BRIDGE_PORT:-5020}"
DEVICE="${DEVICE:-}"

if [ "${EUID}" -ne 0 ]; then
  echo "Run as root: sudo $0"
  exit 1
fi

apt-get update
apt-get install -y socat usbutils lsof python3 python3-venv

if [ -z "$DEVICE" ]; then
  DEVICE="$(ls /dev/serial/by-id/* 2>/dev/null | head -n 1 || true)"
fi

if [ -z "$DEVICE" ]; then
  echo "ERROR: No /dev/serial/by-id/* adapter found. Plug in your USB-RS485 adapter first."
  exit 1
fi

cat > /etc/systemd/system/growatt-socat.service <<SERVICE
[Unit]
Description=FailureWatt Growatt Modbus RTU->TCP bridge
After=network-online.target
Wants=network-online.target
StartLimitIntervalSec=60
StartLimitBurst=5

[Service]
Type=simple
Environment=DEVICE=${DEVICE}
Environment=BRIDGE_IP=${BRIDGE_IP}
Environment=BRIDGE_PORT=${BRIDGE_PORT}

ExecStart=/usr/bin/socat -d -d \\
  TCP-LISTEN:\${BRIDGE_PORT},bind=\${BRIDGE_IP},reuseaddr \\
  FILE:\${DEVICE},raw,b9600,cs8,parenb=0,cstopb=0

Restart=always
RestartSec=10
TimeoutStopSec=5
KillMode=control-group
SuccessExitStatus=143

User=root
Group=dialout

[Install]
WantedBy=multi-user.target
SERVICE

systemctl daemon-reload
systemctl enable growatt-socat.service

stty -F "$DEVICE" 9600 raw -echo || true
systemctl restart growatt-socat.service
systemctl status growatt-socat.service --no-pager -l

echo
cat <<DONE
FailureWatt bridge installed.

Bridge:
  ${BRIDGE_IP}:${BRIDGE_PORT}

Serial adapter:
  ${DEVICE}

Home Assistant should connect with its built-in Modbus integration:
  type: tcp
  host: ${BRIDGE_IP}
  port: ${BRIDGE_PORT}
DONE
