Update install.sh

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