Update install.sh

This commit is contained in:
2026-10-12 12:23:58 +03:00
parent 32e6a3ad7b
commit f7965654f9
+52 -39
View File
@@ -1,10 +1,8 @@
#!/bin/sh
# OpenWrt HA Presence Tracker Installer
# Usage: sh <(wget --no-check-certificate -O - https://твой-домен/твой-репо/raw/branch/main/install.sh)
set -e
# ВАЖНО: Укажи здесь базовый RAW URL твоего репозитория Gitea (без имени файла install.sh в конце)
GITEA_RAW_URL="https://git.darkmode.duckdns.org/sirmrak/openwrt-ha-presence/raw/branch/main/files"
CONFIG_FILE="/etc/config/openwrt_ha"
@@ -23,29 +21,31 @@ if [ "$(id -u)" -ne 0 ]; then
exit 1
fi
# === ПРОВЕРКА ПАКЕТОВ ===
info "Проверка необходимых пакетов..."
if opkg list-installed | grep -q "^mosquitto-client-nossl " && opkg list-installed | grep -q "^hostapd-utils "; then
info "Пакеты mosquitto-client-nossl и hostapd-utils уже установлены. Пропускаем."
info "Пакеты уже установлены. Пропускаем."
else
info "Установка отсутствующих зависимостей..."
info "Установка зависимостей..."
opkg update >/dev/null 2>&1 || warn "Не удалось обновить списки opkg."
opkg install mosquitto-client-nossl hostapd-utils >/dev/null 2>&1 || warn "Не удалось установить пакеты."
if ! opkg list-installed | grep -q "^mosquitto-client-nossl " || ! opkg list-installed | grep -q "^hostapd-utils "; then
warn "Не удалось установить необходимые пакеты."
printf "Продолжить установку всё равно? [y/N]: "
printf "Продолжить всё равно? [y/N]: "
read answer
case "$answer" in [yY]*) ;; *) exit 1 ;; esac
fi
fi
# === МЕНЮ ПРИ СУЩЕСТВУЮЩЕМ КОНФИГЕ ===
SKIP_CONFIG=false
ADD_DEVICE_ONLY=false
if [ -f "$CONFIG_FILE" ]; then
echo ""
echo "Обнаружена существующая конфигурация."
echo "1) Обновить скрипты (настройки будут сохранены)"
echo "1) Обновить скрипты (настройки сохранятся)"
echo "2) Добавить новое устройство"
echo "3) Удалить интеграцию полностью"
echo "4) Выход"
@@ -70,10 +70,11 @@ if [ -f "$CONFIG_FILE" ]; then
esac
fi
# === ВВОД НАСТРОЕК MQTT (только при первой установке) ===
if [ "$SKIP_CONFIG" = "false" ]; then
echo ""
echo "=== Настройка MQTT брокера ==="
echo "(Нажмите Enter, чтобы использовать значение в скобках)"
echo "(Нажмите Enter для значения по умолчанию)"
printf "IP или домен MQTT брокера [192.168.1.100]: "
read MQTT_HOST; MQTT_HOST=${MQTT_HOST:-192.168.1.100}
@@ -97,25 +98,39 @@ if [ "$SKIP_CONFIG" = "false" ]; then
info "Подключение к MQTT успешно."
else
warn "Не удалось подключиться к MQTT брокеру."
printf "Продолжить установку всё равно? [y/N]: "
printf "Продолжить всё равно? [y/N]: "
read answer
case "$answer" in [yY]*) ;; *) exit 1 ;; esac
fi
# === СКАЧИВАНИЕ И ЗАПОЛНЕНИЕ КОНФИГА ===
info "Скачивание шаблона конфигурации..."
wget --no-check-certificate -O "$CONFIG_FILE" "$GITEA_RAW_URL/openwrt_ha" >/dev/null 2>&1 || exit 1
# Заполняем секцию MQTT
sed -i "/config mqtt 'main'/,/^$/ {
s|option host '.*'|option host '${MQTT_HOST}'|
s|option port '.*'|option port '${MQTT_PORT}'|
s|option user '.*'|option user '${MQTT_USER}'|
s|option pass '.*'|option pass '${MQTT_PASS}'|
s|option base_topic '.*'|option base_topic '${BASE_TOPIC}'|
}" "$CONFIG_FILE"
info "Конфигурация создана: $CONFIG_FILE"
fi
# === ДОБАВЛЕНИЕ УСТРОЙСТВ ===
if [ "$SKIP_CONFIG" = "false" ] || [ "$ADD_DEVICE_ONLY" = "true" ]; then
echo ""
printf "Добавить устройство прямо сейчас? [Y/n]: "
read answer
case "$answer" in [nN]*) ADD_DEVICE_ONLY=false ;; esac
case "$answer" in [nN]*) SKIP_DEVICES=true ;; *) SKIP_DEVICES=false ;; esac
fi
if [ "$ADD_DEVICE_ONLY" = "true" ] || { [ "$SKIP_CONFIG" = "false" ] && [ "$answer" != "n" ] && [ "$answer" != "N" ]; }; then
DEVICE_COUNT=1
if [ "$ADD_DEVICE_ONLY" = "true" ]; then
DEVICE_COUNT=$(uci show openwrt_ha 2>/dev/null | grep -c "\.name=" || echo 0)
if [ "$SKIP_DEVICES" != "true" ]; then
# Определяем номер следующего устройства
DEVICE_COUNT=$(grep -c "^config device" "$CONFIG_FILE" 2>/dev/null || echo 0)
DEVICE_COUNT=$((DEVICE_COUNT + 1))
fi
while true; do
echo ""
@@ -125,7 +140,8 @@ if [ "$ADD_DEVICE_ONLY" = "true" ] || { [ "$SKIP_CONFIG" = "false" ] && [ "$answ
DEVICE_NAME=${DEVICE_NAME:-Устройство $DEVICE_COUNT}
while true; do
echo "Введите MAC-адрес(а) через пробел (пример: 14:e0:1d:c7:05:76 или 14:e0:1d:c7:05:76 aa:bb:cc:dd:ee:ff)"
echo "Введите MAC-адрес(а) через пробел"
echo "Пример: 14:e0:1d:c7:05:76 или 14:e0:1d:c7:05:76 aa:bb:cc:dd:ee:ff"
printf "MAC-адрес(а): "
read DEVICE_MACS
@@ -164,12 +180,15 @@ if [ "$ADD_DEVICE_ONLY" = "true" ] || { [ "$SKIP_CONFIG" = "false" ] && [ "$answ
read DEVICE_DELAY
DEVICE_DELAY=${DEVICE_DELAY:-$DEFAULT_DELAY}
DEVICE_ID="device${DEVICE_COUNT}"
uci set openwrt_ha.${DEVICE_ID}='device'
uci set openwrt_ha.${DEVICE_ID}.name="$DEVICE_NAME"
uci set openwrt_ha.${DEVICE_ID}.macs="$DEVICE_MACS"
uci set openwrt_ha.${DEVICE_ID}.type="$DEVICE_TYPE"
uci set openwrt_ha.${DEVICE_ID}.delay="$DEVICE_DELAY"
# Дописываем секцию устройства в конец конфига
cat >> "$CONFIG_FILE" << EOF
config device 'device${DEVICE_COUNT}'
option name '${DEVICE_NAME}'
option macs '${DEVICE_MACS}'
option type '${DEVICE_TYPE}'
option delay '${DEVICE_DELAY}'
EOF
info "Устройство '$DEVICE_NAME' добавлено."
@@ -178,23 +197,12 @@ if [ "$ADD_DEVICE_ONLY" = "true" ] || { [ "$SKIP_CONFIG" = "false" ] && [ "$answ
case "$answer" in [nN]*) break ;; esac
DEVICE_COUNT=$((DEVICE_COUNT + 1))
done
uci commit openwrt_ha
fi
if [ "$SKIP_CONFIG" = "false" ]; then
uci set openwrt_ha.main='mqtt'
uci set openwrt_ha.main.host="$MQTT_HOST"
uci set openwrt_ha.main.port="$MQTT_PORT"
uci set openwrt_ha.main.user="$MQTT_USER"
uci set openwrt_ha.main.pass="$MQTT_PASS"
uci set openwrt_ha.main.base_topic="$BASE_TOPIC"
uci commit openwrt_ha
fi
# === СКАЧИВАНИЕ СКРИПТОВ ===
info "Загрузка файлов из репозитория..."
if ! wget --spider --no-check-certificate "$GITEA_RAW_URL/hostapd.user" >/dev/null 2>&1; then
error "Не удалось подключиться к репозиторию: $GITEA_RAW_URL"
error "Проверьте правильность URL в начале скрипта install.sh"
exit 1
fi
@@ -204,6 +212,7 @@ wget --no-check-certificate -O /etc/init.d/openwrt_presence "$GITEA_RAW_URL/open
chmod +x /etc/hostapd.user /usr/bin/mqtt_ha_discovery.sh /etc/init.d/openwrt_presence
# === АВТОЗАПУСК ===
info "Настройка автозапуска..."
/etc/init.d/openwrt_presence enable >/dev/null 2>&1
/etc/init.d/openwrt_presence restart >/dev/null 2>&1
@@ -211,10 +220,11 @@ info "Настройка автозапуска..."
sleep 2
if ! ps | grep -q "[h]ostapd_cli"; then
warn "Служба запущена, но процесс hostapd_cli не найден."
echo "Проверьте логи: logread | grep hostapd"
echo "Возможно, ваши интерфейсы Wi-Fi называются не phy0-ap0/phy1-ap0 (проверьте через 'iw dev')"
echo "Проверьте: logread | grep hostapd"
echo "Возможно, ваши интерфейсы Wi-Fi называются не phy0-ap0/phy1-ap0 (проверьте: iw dev)"
fi
# === CRON ===
info "Настройка Cron..."
if command -v crontab >/dev/null 2>&1; then
if ! crontab -l 2>/dev/null | grep -q "mqtt_ha_discovery.sh"; then
@@ -222,9 +232,10 @@ if command -v crontab >/dev/null 2>&1; then
/etc/init.d/cron restart 2>/dev/null
fi
else
warn "Cron не установлен. Установите вручную: opkg install cron"
warn "Cron не установлен. Установите: opkg install cron"
fi
# === ИНИЦИАЛИЗАЦИЯ ===
info "Первичная инициализация..."
/usr/bin/mqtt_ha_discovery.sh >/dev/null 2>&1 || warn "Инициализация завершилась с ошибкой."
@@ -232,6 +243,8 @@ echo ""
echo "=================================================="
info "Установка успешно завершена!"
echo "=================================================="
echo "Для редактирования настроек: vi /etc/config/openwrt_ha"
echo "Для просмотра логов: logread | grep wifi_tracker"
echo "Для проверки: выключите Wi-Fi на добавленном устройстве и проверьте лог через указанную задержку."
echo "Конфигурация: vi /etc/config/openwrt_ha"
echo "Логи: logread | grep wifi_tracker"
echo ""
echo "Для проверки: выключите Wi-Fi на добавленном устройстве"
echo "и проверьте лог через указанную задержку."