From 845a96a61922de1b2463ad3f945178794b520de4 Mon Sep 17 00:00:00 2001 From: sirmrak Date: Mon, 12 Oct 2026 13:49:01 +0300 Subject: [PATCH] Update install.sh --- install.sh | 100 +++++++++++++++++++++++++++++------------------------ 1 file changed, 55 insertions(+), 45 deletions(-) diff --git a/install.sh b/install.sh index 11c42ea..b87aa3e 100644 --- a/install.sh +++ b/install.sh @@ -47,7 +47,7 @@ if [ -f "$CONFIG_FILE" ]; then fi # === МЕНЮ ПРИ НАСТРОЕННОМ MQTT === -ACTION="install" # install | update | add_device | change_mqtt | uninstall +ACTION="install" if [ "$MQTT_CONFIGURED" = "true" ]; then CURRENT_HOST=$(uci get openwrt_ha.main.host) @@ -66,13 +66,14 @@ if [ "$MQTT_CONFIGURED" = "true" ]; then 2) ACTION="add_device" ;; 3) ACTION="change_mqtt" ;; 4) ACTION="uninstall" ;; - *) exit 1 ;; + 5) exit 0 ;; + *) error "Неверный выбор."; exit 1 ;; esac fi # === УДАЛЕНИЕ === if [ "$ACTION" = "uninstall" ]; then - info "Удаление..." + 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 @@ -83,13 +84,13 @@ if [ "$ACTION" = "uninstall" ]; then exit 0 fi -# === ВВОД НАСТРОЕК MQTT === +# === ВВОД НАСТРОЕК MQTT (только при install/change_mqtt) === if [ "$ACTION" = "install" ] || [ "$ACTION" = "change_mqtt" ]; then echo "" echo "=== Настройка MQTT брокера ===" echo "(Нажмите Enter для значения по умолчанию)" - if [ "$MQTT_CONFIGURED" = "true" ]; then + if [ "$MQTT_CONFIGURED" = "true" ] && [ "$ACTION" = "change_mqtt" ]; then DEFAULT_HOST=$(uci get openwrt_ha.main.host) DEFAULT_PORT=$(uci get openwrt_ha.main.port) DEFAULT_USER=$(uci get openwrt_ha.main.user) @@ -147,9 +148,9 @@ if [ "$ACTION" = "install" ] || [ "$ACTION" = "change_mqtt" ]; then info "Настройки MQTT сохранены." fi -# === ДОБАВЛЕНИЕ УСТРОЙСТВ === +# === ДОБАВЛЕНИЕ УСТРОЙСТВ (только при install/add_device) === ASK_DEVICES=false -if [ "$ACTION" = "install" ] || [ "$ACTION" = "change_mqtt" ] || [ "$ACTION" = "add_device" ]; then +if [ "$ACTION" = "install" ] || [ "$ACTION" = "add_device" ]; then ASK_DEVICES=true fi @@ -161,7 +162,6 @@ if [ "$ASK_DEVICES" = "true" ]; then fi if [ "$ASK_DEVICES" = "true" ]; then - # Находим первый свободный индекс DEVICE_COUNT=1 while uci -q get "openwrt_ha.device${DEVICE_COUNT}" >/dev/null 2>&1; do DEVICE_COUNT=$((DEVICE_COUNT + 1)) @@ -215,7 +215,6 @@ if [ "$ASK_DEVICES" = "true" ]; then read DEVICE_DELAY if [ -z "$DEVICE_DELAY" ]; then DEVICE_DELAY="$DEFAULT_DELAY"; fi - # Сохраняем через uci uci set "openwrt_ha.device${DEVICE_COUNT}"='device' uci set "openwrt_ha.device${DEVICE_COUNT}.name"="$DEVICE_NAME" uci set "openwrt_ha.device${DEVICE_COUNT}.macs"="$DEVICE_MACS" @@ -232,49 +231,60 @@ if [ "$ASK_DEVICES" = "true" ]; then done fi -# === СКАЧИВАНИЕ СКРИПТОВ === -info "Загрузка файлов из репозитория..." -if ! wget --spider --no-check-certificate "$GITEA_RAW_URL/hostapd.user" >/dev/null 2>&1; then - error "Не удалось подключиться к репозиторию: $GITEA_RAW_URL" - exit 1 -fi +# === УДАЛЕНИЕ МАРКЕРА ИНИЦИАЛИЗАЦИИ === +# При любых изменениях нужно переинициализировать состояния +rm -f "$STATES_DIR/.initialized" +info "Маркер инициализации удалён. Состояния будут переинициализированы при следующем запуске." -wget --no-check-certificate -O /etc/hostapd.user "$GITEA_RAW_URL/hostapd.user" >/dev/null 2>&1 || exit 1 -wget --no-check-certificate -O /usr/bin/mqtt_ha_discovery.sh "$GITEA_RAW_URL/mqtt_ha_discovery.sh" >/dev/null 2>&1 || exit 1 -wget --no-check-certificate -O /etc/init.d/openwrt_presence "$GITEA_RAW_URL/openwrt_presence" >/dev/null 2>&1 || exit 1 - -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 - -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)" -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 - (crontab -l 2>/dev/null; echo "* * * * * /usr/bin/mqtt_ha_discovery.sh") | crontab - 2>/dev/null - /etc/init.d/cron restart 2>/dev/null +# === СКАЧИВАНИЕ СКРИПТОВ (только при install/update/change_mqtt) === +if [ "$ACTION" = "install" ] || [ "$ACTION" = "update" ] || [ "$ACTION" = "change_mqtt" ]; then + info "Загрузка файлов из репозитория..." + if ! wget --spider --no-check-certificate "$GITEA_RAW_URL/hostapd.user" >/dev/null 2>&1; then + error "Не удалось подключиться к репозиторию: $GITEA_RAW_URL" + exit 1 fi -else - warn "Cron не установлен. Установите: opkg install cron" + + wget --no-check-certificate -O /etc/hostapd.user "$GITEA_RAW_URL/hostapd.user" >/dev/null 2>&1 || exit 1 + wget --no-check-certificate -O /usr/bin/mqtt_ha_discovery.sh "$GITEA_RAW_URL/mqtt_ha_discovery.sh" >/dev/null 2>&1 || exit 1 + wget --no-check-certificate -O /etc/init.d/openwrt_presence "$GITEA_RAW_URL/openwrt_presence" >/dev/null 2>&1 || exit 1 + + chmod +x /etc/hostapd.user /usr/bin/mqtt_ha_discovery.sh /etc/init.d/openwrt_presence fi -# === ИНИЦИАЛИЗАЦИЯ === -info "Первичная инициализация..." -/usr/bin/mqtt_ha_discovery.sh >/dev/null 2>&1 || warn "Инициализация завершилась с ошибкой." +# === АВТОЗАПУСК (только при install/update/change_mqtt) === +if [ "$ACTION" = "install" ] || [ "$ACTION" = "update" ] || [ "$ACTION" = "change_mqtt" ]; then + info "Настройка автозапуска..." + /etc/init.d/openwrt_presence enable >/dev/null 2>&1 + /etc/init.d/openwrt_presence restart >/dev/null 2>&1 + + 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)" + 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 + (crontab -l 2>/dev/null; echo "* * * * * /usr/bin/mqtt_ha_discovery.sh") | crontab - 2>/dev/null + /etc/init.d/cron restart 2>/dev/null + fi + else + warn "Cron не установлен. Установите: opkg install cron" + fi +fi + +# === ПЕРЕЗАПУСК И ИНИЦИАЛИЗАЦИЯ (для всех действий кроме uninstall) === +info "Применение изменений..." +/etc/init.d/openwrt_presence restart >/dev/null 2>&1 +/usr/bin/mqtt_ha_discovery.sh >/dev/null 2>&1 || warn "Discovery завершился с ошибкой." +info "Изменения применены." echo "" echo "==================================================" -info "Установка успешно завершена!" +info "Операция успешно завершена!" echo "==================================================" echo "Конфигурация: vi /etc/config/openwrt_ha" echo "Просмотр: uci show openwrt_ha"