From f7965654f9fe7cda13f6950221fc4fa5984d67d7 Mon Sep 17 00:00:00 2001 From: sirmrak Date: Mon, 12 Oct 2026 12:23:58 +0300 Subject: [PATCH] Update install.sh --- install.sh | 93 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 53 insertions(+), 40 deletions(-) diff --git a/install.sh b/install.sh index e6a1d0d..c897dd7 100644 --- a/install.sh +++ b/install.sh @@ -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) - DEVICE_COUNT=$((DEVICE_COUNT + 1)) - fi +if [ "$SKIP_DEVICES" != "true" ]; then + # Определяем номер следующего устройства + DEVICE_COUNT=$(grep -c "^config device" "$CONFIG_FILE" 2>/dev/null || echo 0) + DEVICE_COUNT=$((DEVICE_COUNT + 1)) 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 на добавленном устройстве и проверьте лог через указанную задержку." \ No newline at end of file +echo "Конфигурация: vi /etc/config/openwrt_ha" +echo "Логи: logread | grep wifi_tracker" +echo "" +echo "Для проверки: выключите Wi-Fi на добавленном устройстве" +echo "и проверьте лог через указанную задержку." \ No newline at end of file