Update install.sh

This commit is contained in:
2026-10-12 12:39:14 +03:00
parent f7965654f9
commit 26c1b3bb2d
+101 -67
View File
@@ -38,58 +38,90 @@ else
fi fi
fi fi
# === МЕНЮ ПРИ СУЩЕСТВУЮЩЕМ КОНФИГЕ === # === ОПРЕДЕЛЕНИЕ СОСТОЯНИЯ КОНФИГА ===
SKIP_CONFIG=false MQTT_CONFIGURED=false
ADD_DEVICE_ONLY=false
if [ -f "$CONFIG_FILE" ]; then if [ -f "$CONFIG_FILE" ]; then
if uci -q get openwrt_ha.main.host >/dev/null 2>&1; then
MQTT_CONFIGURED=true
fi
fi
# === МЕНЮ ПРИ НАСТРОЕННОМ MQTT ===
ACTION="install" # install | update | add_device | change_mqtt | uninstall
if [ "$MQTT_CONFIGURED" = "true" ]; then
CURRENT_HOST=$(uci get openwrt_ha.main.host)
echo "" echo ""
echo "Обнаружена существующая конфигурация." echo "Обнаружена конфигурация (MQTT: $CURRENT_HOST)."
echo "1) Обновить скрипты (настройки сохранятся)" echo "1) Обновить скрипты (настройки сохранятся)"
echo "2) Добавить новое устройство" echo "2) Добавить новое устройство"
echo "3) Удалить интеграцию полностью" echo "3) Изменить настройки MQTT"
echo "4) Выход" echo "4) Удалить интеграцию полностью"
printf "Выберите [1-4]: " echo "5) Выход"
printf "Выберите [1-5]: "
read choice read choice
case "$choice" in case "$choice" in
1) SKIP_CONFIG=true ;; 1) ACTION="update" ;;
2) SKIP_CONFIG=true; ADD_DEVICE_ONLY=true ;; 2) ACTION="add_device" ;;
3) 3) ACTION="change_mqtt" ;;
info "Удаление..." 4) ACTION="uninstall" ;;
crontab -l 2>/dev/null | grep -v "mqtt_ha_discovery.sh" | crontab - 2>/dev/null || true
/etc/init.d/cron restart 2>/dev/null || true
/etc/init.d/openwrt_presence stop 2>/dev/null || true
/etc/init.d/openwrt_presence disable 2>/dev/null || true
rm -f /etc/init.d/openwrt_presence /etc/hostapd.user /usr/bin/mqtt_ha_discovery.sh "$CONFIG_FILE"
rm -rf "$STATES_DIR"
info "Удаление завершено. Удалите сущности в Home Assistant вручную."
exit 0
;;
*) exit 1 ;; *) exit 1 ;;
esac esac
fi fi
# === ВВОД НАСТРОЕК MQTT (только при первой установке) === # === УДАЛЕНИЕ ===
if [ "$SKIP_CONFIG" = "false" ]; then if [ "$ACTION" = "uninstall" ]; then
info "Удаление..."
crontab -l 2>/dev/null | grep -v "mqtt_ha_discovery.sh" | crontab - 2>/dev/null || true
/etc/init.d/cron restart 2>/dev/null || true
/etc/init.d/openwrt_presence stop 2>/dev/null || true
/etc/init.d/openwrt_presence disable 2>/dev/null || true
rm -f /etc/init.d/openwrt_presence /etc/hostapd.user /usr/bin/mqtt_ha_discovery.sh "$CONFIG_FILE"
rm -rf "$STATES_DIR"
info "Удаление завершено. Удалите сущности в Home Assistant вручную."
exit 0
fi
# === ВВОД НАСТРОЕК MQTT ===
if [ "$ACTION" = "install" ] || [ "$ACTION" = "change_mqtt" ]; then
echo "" echo ""
echo "=== Настройка MQTT брокера ===" echo "=== Настройка MQTT брокера ==="
echo "(Нажмите Enter для значения по умолчанию)" echo "(Нажмите Enter для значения по умолчанию)"
printf "IP или домен MQTT брокера [192.168.1.100]: " if [ "$MQTT_CONFIGURED" = "true" ]; then
read MQTT_HOST; MQTT_HOST=${MQTT_HOST:-192.168.1.100} DEFAULT_HOST=$(uci get openwrt_ha.main.host)
DEFAULT_PORT=$(uci get openwrt_ha.main.port)
DEFAULT_USER=$(uci get openwrt_ha.main.user)
DEFAULT_PASS=$(uci get openwrt_ha.main.pass)
DEFAULT_TOPIC=$(uci get openwrt_ha.main.base_topic)
else
DEFAULT_HOST="192.168.1.100"
DEFAULT_PORT="1883"
DEFAULT_USER="mqtt_user"
DEFAULT_PASS="mqtt_password"
DEFAULT_TOPIC="openwrt"
fi
printf "Порт MQTT [1883]: " printf "IP или домен MQTT брокера [%s]: " "$DEFAULT_HOST"
read MQTT_PORT; MQTT_PORT=${MQTT_PORT:-1883} read MQTT_HOST
if [ -z "$MQTT_HOST" ]; then MQTT_HOST="$DEFAULT_HOST"; fi
printf "Логин MQTT [mqtt_user]: " printf "Порт MQTT [%s]: " "$DEFAULT_PORT"
read MQTT_USER; MQTT_USER=${MQTT_USER:-mqtt_user} read MQTT_PORT
if [ -z "$MQTT_PORT" ]; then MQTT_PORT="$DEFAULT_PORT"; fi
printf "Пароль MQTT [mqtt_password]: " printf "Логин MQTT [%s]: " "$DEFAULT_USER"
read MQTT_PASS; MQTT_PASS=${MQTT_PASS:-mqtt_password} read MQTT_USER
if [ -z "$MQTT_USER" ]; then MQTT_USER="$DEFAULT_USER"; fi
printf "Базовый топик MQTT [openwrt]: " printf "Пароль MQTT [%s]: " "$DEFAULT_PASS"
read BASE_TOPIC; BASE_TOPIC=${BASE_TOPIC:-openwrt} read MQTT_PASS
if [ -z "$MQTT_PASS" ]; then MQTT_PASS="$DEFAULT_PASS"; fi
printf "Базовый топик MQTT [%s]: " "$DEFAULT_TOPIC"
read BASE_TOPIC
if [ -z "$BASE_TOPIC" ]; then BASE_TOPIC="$DEFAULT_TOPIC"; fi
echo "" echo ""
info "Проверка подключения к MQTT..." info "Проверка подключения к MQTT..."
@@ -103,41 +135,44 @@ if [ "$SKIP_CONFIG" = "false" ]; then
case "$answer" in [yY]*) ;; *) exit 1 ;; esac case "$answer" in [yY]*) ;; *) exit 1 ;; esac
fi fi
# === СКАЧИВАНИЕ И ЗАПОЛНЕНИЕ КОНФИГА === # === СОХРАНЕНИЕ MQTT ЧЕРЕЗ UCI ===
info "Скачивание шаблона конфигурации..." [ -f "$CONFIG_FILE" ] || touch "$CONFIG_FILE"
wget --no-check-certificate -O "$CONFIG_FILE" "$GITEA_RAW_URL/openwrt_ha" >/dev/null 2>&1 || exit 1 uci set openwrt_ha.main='mqtt'
uci set openwrt_ha.main.host="$MQTT_HOST"
# Заполняем секцию MQTT uci set openwrt_ha.main.port="$MQTT_PORT"
sed -i "/config mqtt 'main'/,/^$/ { uci set openwrt_ha.main.user="$MQTT_USER"
s|option host '.*'|option host '${MQTT_HOST}'| uci set openwrt_ha.main.pass="$MQTT_PASS"
s|option port '.*'|option port '${MQTT_PORT}'| uci set openwrt_ha.main.base_topic="$BASE_TOPIC"
s|option user '.*'|option user '${MQTT_USER}'| uci commit openwrt_ha
s|option pass '.*'|option pass '${MQTT_PASS}'| info "Настройки MQTT сохранены."
s|option base_topic '.*'|option base_topic '${BASE_TOPIC}'|
}" "$CONFIG_FILE"
info "Конфигурация создана: $CONFIG_FILE"
fi fi
# === ДОБАВЛЕНИЕ УСТРОЙСТВ === # === ДОБАВЛЕНИЕ УСТРОЙСТВ ===
if [ "$SKIP_CONFIG" = "false" ] || [ "$ADD_DEVICE_ONLY" = "true" ]; then ASK_DEVICES=false
if [ "$ACTION" = "install" ] || [ "$ACTION" = "change_mqtt" ] || [ "$ACTION" = "add_device" ]; then
ASK_DEVICES=true
fi
if [ "$ASK_DEVICES" = "true" ]; then
echo "" echo ""
printf "Добавить устройство прямо сейчас? [Y/n]: " printf "Добавить устройство прямо сейчас? [Y/n]: "
read answer read answer
case "$answer" in [nN]*) SKIP_DEVICES=true ;; *) SKIP_DEVICES=false ;; esac case "$answer" in [nN]*) ASK_DEVICES=false ;; esac
fi fi
if [ "$SKIP_DEVICES" != "true" ]; then if [ "$ASK_DEVICES" = "true" ]; then
# Определяем номер следующего устройства # Находим первый свободный индекс
DEVICE_COUNT=$(grep -c "^config device" "$CONFIG_FILE" 2>/dev/null || echo 0) DEVICE_COUNT=1
DEVICE_COUNT=$((DEVICE_COUNT + 1)) while uci -q get "openwrt_ha.device${DEVICE_COUNT}" >/dev/null 2>&1; do
DEVICE_COUNT=$((DEVICE_COUNT + 1))
done
while true; do while true; do
echo "" echo ""
echo "--- Устройство #$DEVICE_COUNT ---" echo "--- Устройство #$DEVICE_COUNT ---"
printf "Имя устройства (например, 'Телефон'): " printf "Имя устройства (например, 'Телефон'): "
read DEVICE_NAME read DEVICE_NAME
DEVICE_NAME=${DEVICE_NAME:-Устройство $DEVICE_COUNT} if [ -z "$DEVICE_NAME" ]; then DEVICE_NAME="Устройство $DEVICE_COUNT"; fi
while true; do while true; do
echo "Введите MAC-адрес(а) через пробел" echo "Введите MAC-адрес(а) через пробел"
@@ -166,7 +201,7 @@ if [ "$SKIP_DEVICES" != "true" ]; then
echo "2) Тревога/IoT (розетки, статусы online/offline)" echo "2) Тревога/IoT (розетки, статусы online/offline)"
printf "Выберите [1-2] [1]: " printf "Выберите [1-2] [1]: "
read DEVICE_TYPE_NUM read DEVICE_TYPE_NUM
DEVICE_TYPE_NUM=${DEVICE_TYPE_NUM:-1} if [ -z "$DEVICE_TYPE_NUM" ]; then DEVICE_TYPE_NUM="1"; fi
if [ "$DEVICE_TYPE_NUM" = "2" ]; then if [ "$DEVICE_TYPE_NUM" = "2" ]; then
DEVICE_TYPE="alarm" DEVICE_TYPE="alarm"
@@ -176,19 +211,17 @@ if [ "$SKIP_DEVICES" != "true" ]; then
DEFAULT_DELAY="30" DEFAULT_DELAY="30"
fi fi
printf "Задержка перед отправкой 'отключен' (сек) [$DEFAULT_DELAY]: " printf "Задержка перед отправкой 'отключен' (сек) [%s]: " "$DEFAULT_DELAY"
read DEVICE_DELAY read DEVICE_DELAY
DEVICE_DELAY=${DEVICE_DELAY:-$DEFAULT_DELAY} if [ -z "$DEVICE_DELAY" ]; then DEVICE_DELAY="$DEFAULT_DELAY"; fi
# Дописываем секцию устройства в конец конфига # Сохраняем через uci
cat >> "$CONFIG_FILE" << EOF uci set "openwrt_ha.device${DEVICE_COUNT}"='device'
uci set "openwrt_ha.device${DEVICE_COUNT}.name"="$DEVICE_NAME"
config device 'device${DEVICE_COUNT}' uci set "openwrt_ha.device${DEVICE_COUNT}.macs"="$DEVICE_MACS"
option name '${DEVICE_NAME}' uci set "openwrt_ha.device${DEVICE_COUNT}.type"="$DEVICE_TYPE"
option macs '${DEVICE_MACS}' uci set "openwrt_ha.device${DEVICE_COUNT}.delay"="$DEVICE_DELAY"
option type '${DEVICE_TYPE}' uci commit openwrt_ha
option delay '${DEVICE_DELAY}'
EOF
info "Устройство '$DEVICE_NAME' добавлено." info "Устройство '$DEVICE_NAME' добавлено."
@@ -244,7 +277,8 @@ echo "=================================================="
info "Установка успешно завершена!" info "Установка успешно завершена!"
echo "==================================================" echo "=================================================="
echo "Конфигурация: vi /etc/config/openwrt_ha" echo "Конфигурация: vi /etc/config/openwrt_ha"
echo "Логи: logread | grep wifi_tracker" echo "Просмотр: uci show openwrt_ha"
echo "Логи: logread | grep wifi_tracker"
echo "" echo ""
echo "Для проверки: выключите Wi-Fi на добавленном устройстве" echo "Для проверки: выключите Wi-Fi на добавленном устройстве"
echo "и проверьте лог через указанную задержку." echo "и проверьте лог через указанную задержку."