Update install.sh
This commit is contained in:
+101
-67
@@ -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 "и проверьте лог через указанную задержку."
|
||||||
Reference in New Issue
Block a user