Update install.sh
This commit is contained in:
+140
-156
@@ -1,10 +1,10 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# OpenWrt HA Presence Tracker Installer
|
# OpenWrt HA Presence Tracker Installer
|
||||||
# Usage: sh <(wget --no-check-certificate -O - https://your-gitea-url/raw/branch/main/install.sh)
|
# Usage: sh <(wget --no-check-certificate -O - https://твой-домен/твой-репо/raw/branch/main/install.sh)
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# UPDATE THIS URL to the raw files directory of your Gitea repository
|
# ВАЖНО: Укажи здесь базовый RAW URL твоего репозитория Gitea (без имени файла install.sh в конце)
|
||||||
GITEA_RAW_URL="https://git.darkmode.duckdns.org/sirmrak/openwrt-ha-presence/raw/branch/main/files"
|
GITEA_RAW_URL="https://git.darkmode.duckdns.org/sirmrak/openwrt-ha-presence/raw/branch/main/files"
|
||||||
|
|
||||||
CONFIG_FILE="/etc/config/openwrt_ha"
|
CONFIG_FILE="/etc/config/openwrt_ha"
|
||||||
@@ -18,48 +18,25 @@ validate_mac() {
|
|||||||
echo "$1" | grep -qE "^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$"
|
echo "$1" | grep -qE "^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$"
|
||||||
}
|
}
|
||||||
|
|
||||||
read_with_default() {
|
|
||||||
local prompt="$1"
|
|
||||||
local default="$2"
|
|
||||||
local result
|
|
||||||
|
|
||||||
if [ -n "$default" ]; then
|
|
||||||
printf "%s [%s]: " "$prompt" "$default"
|
|
||||||
else
|
|
||||||
printf "%s: " "$prompt"
|
|
||||||
fi
|
|
||||||
|
|
||||||
read -r result
|
|
||||||
|
|
||||||
if [ -z "$result" ] && [ -n "$default" ]; then
|
|
||||||
echo "$default"
|
|
||||||
else
|
|
||||||
echo "$result"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ "$(id -u)" -ne 0 ]; then
|
if [ "$(id -u)" -ne 0 ]; then
|
||||||
error "This script must be run as root."
|
error "Скрипт должен выполняться от имени root."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
info "Updating opkg and installing dependencies..."
|
info "Проверка необходимых пакетов..."
|
||||||
if ! opkg update 2>/dev/null; then
|
if opkg list-installed | grep -q "^mosquitto-client-nossl " && opkg list-installed | grep -q "^hostapd-utils "; then
|
||||||
warn "Failed to update opkg lists."
|
info "Пакеты mosquitto-client-nossl и hostapd-utils уже установлены. Пропускаем."
|
||||||
printf "Continue anyway? [y/N]: "
|
else
|
||||||
read -r answer
|
info "Установка отсутствующих зависимостей..."
|
||||||
[ "$answer" != "y" ] && [ "$answer" != "Y" ] && exit 1
|
opkg update >/dev/null 2>&1 || warn "Не удалось обновить списки opkg."
|
||||||
fi
|
opkg install mosquitto-client-nossl hostapd-utils >/dev/null 2>&1 || warn "Не удалось установить пакеты."
|
||||||
|
|
||||||
PACKAGES_OK=true
|
if ! opkg list-installed | grep -q "^mosquitto-client-nossl " || ! opkg list-installed | grep -q "^hostapd-utils "; then
|
||||||
opkg install mosquitto-client-nossl 2>/dev/null || PACKAGES_OK=false
|
warn "Не удалось установить необходимые пакеты."
|
||||||
opkg install hostapd-utils 2>/dev/null || PACKAGES_OK=false
|
printf "Продолжить установку всё равно? [y/N]: "
|
||||||
|
read answer
|
||||||
if [ "$PACKAGES_OK" = "false" ]; then
|
case "$answer" in [yY]*) ;; *) exit 1 ;; esac
|
||||||
warn "Some packages failed to install."
|
fi
|
||||||
printf "Continue anyway? [y/N]: "
|
|
||||||
read -r answer
|
|
||||||
[ "$answer" != "y" ] && [ "$answer" != "Y" ] && exit 1
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
SKIP_CONFIG=false
|
SKIP_CONFIG=false
|
||||||
@@ -67,29 +44,26 @@ ADD_DEVICE_ONLY=false
|
|||||||
|
|
||||||
if [ -f "$CONFIG_FILE" ]; then
|
if [ -f "$CONFIG_FILE" ]; then
|
||||||
echo ""
|
echo ""
|
||||||
echo "Existing configuration detected."
|
echo "Обнаружена существующая конфигурация."
|
||||||
echo "1) Update scripts (keep MQTT and device settings)"
|
echo "1) Обновить скрипты (настройки будут сохранены)"
|
||||||
echo "2) Add a new device"
|
echo "2) Добавить новое устройство"
|
||||||
echo "3) Uninstall completely"
|
echo "3) Удалить интеграцию полностью"
|
||||||
echo "4) Exit"
|
echo "4) Выход"
|
||||||
printf "Choose [1-4]: "
|
printf "Выберите [1-4]: "
|
||||||
read -r choice
|
read choice
|
||||||
|
|
||||||
case "$choice" in
|
case "$choice" in
|
||||||
1) SKIP_CONFIG=true ;;
|
1) SKIP_CONFIG=true ;;
|
||||||
2) SKIP_CONFIG=true; ADD_DEVICE_ONLY=true ;;
|
2) SKIP_CONFIG=true; ADD_DEVICE_ONLY=true ;;
|
||||||
3)
|
3)
|
||||||
info "Uninstalling..."
|
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
|
||||||
/etc/init.d/openwrt_presence disable 2>/dev/null || true
|
/etc/init.d/openwrt_presence disable 2>/dev/null || true
|
||||||
rm -f /etc/init.d/openwrt_presence
|
rm -f /etc/init.d/openwrt_presence /etc/hostapd.user /usr/bin/mqtt_ha_discovery.sh "$CONFIG_FILE"
|
||||||
rm -f /etc/hostapd.user
|
|
||||||
rm -f /usr/bin/mqtt_ha_discovery.sh
|
|
||||||
rm -f "$CONFIG_FILE"
|
|
||||||
rm -rf "$STATES_DIR"
|
rm -rf "$STATES_DIR"
|
||||||
info "Uninstallation complete. Remove entities in Home Assistant manually."
|
info "Удаление завершено. Удалите сущности в Home Assistant вручную."
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
*) exit 1 ;;
|
*) exit 1 ;;
|
||||||
@@ -98,95 +72,113 @@ fi
|
|||||||
|
|
||||||
if [ "$SKIP_CONFIG" = "false" ]; then
|
if [ "$SKIP_CONFIG" = "false" ]; then
|
||||||
echo ""
|
echo ""
|
||||||
info "MQTT Broker Configuration:"
|
echo "=== Настройка MQTT брокера ==="
|
||||||
MQTT_HOST=$(read_with_default "MQTT Broker IP or Domain" "192.168.1.100")
|
echo "(Нажмите Enter, чтобы использовать значение в скобках)"
|
||||||
MQTT_PORT=$(read_with_default "MQTT Port" "1883")
|
|
||||||
MQTT_USER=$(read_with_default "MQTT Username" "mqtt_user")
|
|
||||||
MQTT_PASS=$(read_with_default "MQTT Password" "mqtt_password")
|
|
||||||
BASE_TOPIC=$(read_with_default "Base MQTT Topic" "openwrt")
|
|
||||||
|
|
||||||
info "Testing MQTT connection..."
|
printf "IP или домен MQTT брокера [192.168.1.100]: "
|
||||||
|
read MQTT_HOST; MQTT_HOST=${MQTT_HOST:-192.168.1.100}
|
||||||
|
|
||||||
|
printf "Порт MQTT [1883]: "
|
||||||
|
read MQTT_PORT; MQTT_PORT=${MQTT_PORT:-1883}
|
||||||
|
|
||||||
|
printf "Логин MQTT [mqtt_user]: "
|
||||||
|
read MQTT_USER; MQTT_USER=${MQTT_USER:-mqtt_user}
|
||||||
|
|
||||||
|
printf "Пароль MQTT [mqtt_password]: "
|
||||||
|
read MQTT_PASS; MQTT_PASS=${MQTT_PASS:-mqtt_password}
|
||||||
|
|
||||||
|
printf "Базовый топик MQTT [openwrt]: "
|
||||||
|
read BASE_TOPIC; BASE_TOPIC=${BASE_TOPIC:-openwrt}
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
info "Проверка подключения к MQTT..."
|
||||||
if mosquitto_pub -h "$MQTT_HOST" -p "$MQTT_PORT" -u "$MQTT_USER" -P "$MQTT_PASS" \
|
if mosquitto_pub -h "$MQTT_HOST" -p "$MQTT_PORT" -u "$MQTT_USER" -P "$MQTT_PASS" \
|
||||||
-t "${BASE_TOPIC}/test/install" -m "ping" -I "installer_$$" -r 2>/dev/null; then
|
-t "${BASE_TOPIC}/test/install" -m "ping" -I "installer_$$" -r 2>/dev/null; then
|
||||||
info "MQTT connection successful."
|
info "Подключение к MQTT успешно."
|
||||||
else
|
else
|
||||||
warn "Failed to connect to MQTT broker."
|
warn "Не удалось подключиться к MQTT брокеру."
|
||||||
printf "Continue anyway? [y/N]: "
|
printf "Продолжить установку всё равно? [y/N]: "
|
||||||
read -r answer
|
read answer
|
||||||
[ "$answer" != "y" ] && [ "$answer" != "Y" ] && exit 1
|
case "$answer" in [yY]*) ;; *) exit 1 ;; esac
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$SKIP_CONFIG" = "false" ] || [ "$ADD_DEVICE_ONLY" = "true" ]; then
|
if [ "$SKIP_CONFIG" = "false" ] || [ "$ADD_DEVICE_ONLY" = "true" ]; then
|
||||||
echo ""
|
echo ""
|
||||||
printf "Add a device now? [Y/n]: "
|
printf "Добавить устройство прямо сейчас? [Y/n]: "
|
||||||
read -r answer
|
read answer
|
||||||
|
case "$answer" in [nN]*) ADD_DEVICE_ONLY=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 [ "$answer" != "n" ] && [ "$answer" != "N" ]; then
|
while true; do
|
||||||
DEVICE_COUNT=1
|
echo ""
|
||||||
if [ "$ADD_DEVICE_ONLY" = "true" ]; then
|
echo "--- Устройство #$DEVICE_COUNT ---"
|
||||||
DEVICE_COUNT=$(uci show openwrt_ha 2>/dev/null | grep -c "device[0-9]" || echo 0)
|
printf "Имя устройства (например, 'Телефон'): "
|
||||||
DEVICE_COUNT=$((DEVICE_COUNT + 1))
|
read DEVICE_NAME
|
||||||
fi
|
DEVICE_NAME=${DEVICE_NAME:-Устройство $DEVICE_COUNT}
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
echo ""
|
echo "Введите MAC-адрес(а) через пробел (пример: 14:e0:1d:c7:05:76 или 14:e0:1d:c7:05:76 aa:bb:cc:dd:ee:ff)"
|
||||||
echo "Device #$DEVICE_COUNT:"
|
printf "MAC-адрес(а): "
|
||||||
DEVICE_NAME=$(read_with_default "Device Name" "Device $DEVICE_COUNT")
|
read DEVICE_MACS
|
||||||
|
|
||||||
while true; do
|
if [ -z "$DEVICE_MACS" ]; then
|
||||||
echo "Enter MAC address(es) separated by space (e.g., 14:e0:1d:c7:05:76 aa:bb:cc:dd:ee:ff)"
|
warn "Необходимо ввести хотя бы один MAC-адрес."
|
||||||
read -r -p "MAC(s): " DEVICE_MACS
|
continue
|
||||||
|
|
||||||
if [ -z "$DEVICE_MACS" ]; then
|
|
||||||
warn "At least one MAC address is required."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
ALL_VALID=true
|
|
||||||
for mac in $DEVICE_MACS; do
|
|
||||||
if ! validate_mac "$mac"; then
|
|
||||||
warn "Invalid MAC format: $mac"
|
|
||||||
ALL_VALID=false
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
[ "$ALL_VALID" = "true" ] && break
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Device Type:"
|
|
||||||
echo "1) Tracker (people, home/not_home)"
|
|
||||||
echo "2) Alarm/IoT (devices, online/offline)"
|
|
||||||
DEVICE_TYPE_NUM=$(read_with_default "Choose [1-2]" "1")
|
|
||||||
|
|
||||||
if [ "$DEVICE_TYPE_NUM" = "2" ]; then
|
|
||||||
DEVICE_TYPE="alarm"
|
|
||||||
DEFAULT_DELAY="0"
|
|
||||||
else
|
|
||||||
DEVICE_TYPE="tracker"
|
|
||||||
DEFAULT_DELAY="30"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
DEVICE_DELAY=$(read_with_default "Delay before 'disconnected' (seconds)" "$DEFAULT_DELAY")
|
ALL_VALID=true
|
||||||
|
for mac in $DEVICE_MACS; do
|
||||||
DEVICE_ID="device${DEVICE_COUNT}"
|
if ! validate_mac "$mac"; then
|
||||||
uci set openwrt_ha.${DEVICE_ID}='device'
|
warn "Неверный формат MAC: $mac"
|
||||||
uci set openwrt_ha.${DEVICE_ID}.name="$DEVICE_NAME"
|
ALL_VALID=false
|
||||||
uci set openwrt_ha.${DEVICE_ID}.macs="$DEVICE_MACS"
|
break
|
||||||
uci set openwrt_ha.${DEVICE_ID}.type="$DEVICE_TYPE"
|
fi
|
||||||
uci set openwrt_ha.${DEVICE_ID}.delay="$DEVICE_DELAY"
|
done
|
||||||
|
[ "$ALL_VALID" = "true" ] && break
|
||||||
info "Device '$DEVICE_NAME' added."
|
|
||||||
|
|
||||||
printf "Add another device? [Y/n]: "
|
|
||||||
read -r answer
|
|
||||||
[ "$answer" = "n" ] || [ "$answer" = "N" ] && break
|
|
||||||
|
|
||||||
DEVICE_COUNT=$((DEVICE_COUNT + 1))
|
|
||||||
done
|
done
|
||||||
uci commit openwrt_ha
|
|
||||||
fi
|
echo "Тип устройства:"
|
||||||
|
echo "1) Трекер (люди, статусы home/not_home)"
|
||||||
|
echo "2) Тревога/IoT (розетки, статусы online/offline)"
|
||||||
|
printf "Выберите [1-2] [1]: "
|
||||||
|
read DEVICE_TYPE_NUM
|
||||||
|
DEVICE_TYPE_NUM=${DEVICE_TYPE_NUM:-1}
|
||||||
|
|
||||||
|
if [ "$DEVICE_TYPE_NUM" = "2" ]; then
|
||||||
|
DEVICE_TYPE="alarm"
|
||||||
|
DEFAULT_DELAY="0"
|
||||||
|
else
|
||||||
|
DEVICE_TYPE="tracker"
|
||||||
|
DEFAULT_DELAY="30"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "Задержка перед отправкой 'отключен' (сек) [$DEFAULT_DELAY]: "
|
||||||
|
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"
|
||||||
|
|
||||||
|
info "Устройство '$DEVICE_NAME' добавлено."
|
||||||
|
|
||||||
|
printf "Добавить еще одно устройство? [Y/n]: "
|
||||||
|
read answer
|
||||||
|
case "$answer" in [nN]*) break ;; esac
|
||||||
|
DEVICE_COUNT=$((DEVICE_COUNT + 1))
|
||||||
|
done
|
||||||
|
uci commit openwrt_ha
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$SKIP_CONFIG" = "false" ]; then
|
if [ "$SKIP_CONFIG" = "false" ]; then
|
||||||
@@ -199,55 +191,47 @@ if [ "$SKIP_CONFIG" = "false" ]; then
|
|||||||
uci commit openwrt_ha
|
uci commit openwrt_ha
|
||||||
fi
|
fi
|
||||||
|
|
||||||
info "Downloading files from repository..."
|
info "Загрузка файлов из репозитория..."
|
||||||
if ! wget --spider --no-check-certificate "$GITEA_RAW_URL/hostapd.user" 2>/dev/null; then
|
if ! wget --spider --no-check-certificate "$GITEA_RAW_URL/hostapd.user" >/dev/null 2>&1; then
|
||||||
error "Cannot reach repository at: $GITEA_RAW_URL"
|
error "Не удалось подключиться к репозиторию: $GITEA_RAW_URL"
|
||||||
|
error "Проверьте правильность URL в начале скрипта install.sh"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
wget --no-check-certificate -O /etc/hostapd.user "$GITEA_RAW_URL/hostapd.user" 2>/dev/null || exit 1
|
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" 2>/dev/null || 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" 2>/dev/null || exit 1
|
wget --no-check-certificate -O /etc/init.d/openwrt_presence "$GITEA_RAW_URL/openwrt_presence" >/dev/null 2>&1 || exit 1
|
||||||
|
|
||||||
for file in /etc/hostapd.user /usr/bin/mqtt_ha_discovery.sh /etc/init.d/openwrt_presence; do
|
chmod +x /etc/hostapd.user /usr/bin/mqtt_ha_discovery.sh /etc/init.d/openwrt_presence
|
||||||
if [ ! -s "$file" ] || grep -q "<html>" "$file"; then
|
|
||||||
error "File $file downloaded incorrectly (possibly 404)."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
chmod +x /etc/hostapd.user
|
info "Настройка автозапуска..."
|
||||||
chmod +x /usr/bin/mqtt_ha_discovery.sh
|
/etc/init.d/openwrt_presence enable >/dev/null 2>&1
|
||||||
chmod +x /etc/init.d/openwrt_presence
|
/etc/init.d/openwrt_presence restart >/dev/null 2>&1
|
||||||
|
|
||||||
info "Configuring autostart..."
|
|
||||||
/etc/init.d/openwrt_presence enable 2>/dev/null || exit 1
|
|
||||||
/etc/init.d/openwrt_presence restart 2>/dev/null || exit 1
|
|
||||||
|
|
||||||
sleep 2
|
sleep 2
|
||||||
if ! ps | grep -q "[h]ostapd_cli"; then
|
if ! ps | grep -q "[h]ostapd_cli"; then
|
||||||
warn "Service started, but hostapd_cli process not found."
|
warn "Служба запущена, но процесс hostapd_cli не найден."
|
||||||
echo "Check logs: logread | grep hostapd"
|
echo "Проверьте логи: logread | grep hostapd"
|
||||||
echo "Verify Wi-Fi interfaces with: iw dev"
|
echo "Возможно, ваши интерфейсы Wi-Fi называются не phy0-ap0/phy1-ap0 (проверьте через 'iw dev')"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
info "Configuring Cron..."
|
info "Настройка Cron..."
|
||||||
if command -v crontab >/dev/null 2>&1; then
|
if command -v crontab >/dev/null 2>&1; then
|
||||||
if ! crontab -l 2>/dev/null | grep -q "mqtt_ha_discovery.sh"; 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
|
(crontab -l 2>/dev/null; echo "* * * * * /usr/bin/mqtt_ha_discovery.sh") | crontab - 2>/dev/null
|
||||||
/etc/init.d/cron restart 2>/dev/null
|
/etc/init.d/cron restart 2>/dev/null
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
warn "Cron is not installed. Run: opkg install cron"
|
warn "Cron не установлен. Установите вручную: opkg install cron"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
info "Running initial discovery..."
|
info "Первичная инициализация..."
|
||||||
/usr/bin/mqtt_ha_discovery.sh 2>/dev/null || warn "Initial discovery failed. Run manually later."
|
/usr/bin/mqtt_ha_discovery.sh >/dev/null 2>&1 || warn "Инициализация завершилась с ошибкой."
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "=================================================="
|
echo "=================================================="
|
||||||
info "Installation completed successfully!"
|
info "Установка успешно завершена!"
|
||||||
echo "=================================================="
|
echo "=================================================="
|
||||||
echo "To edit settings: vi /etc/config/openwrt_ha"
|
echo "Для редактирования настроек: vi /etc/config/openwrt_ha"
|
||||||
echo "To view logs: logread | grep wifi_tracker"
|
echo "Для просмотра логов: logread | grep wifi_tracker"
|
||||||
echo "To test: Turn off Wi-Fi on the added device and check logs after the delay."
|
echo "Для проверки: выключите Wi-Fi на добавленном устройстве и проверьте лог через указанную задержку."
|
||||||
Reference in New Issue
Block a user