Выключение LED индикаторов openWRT по расписанию

Управление Led индикаторов openWRT по расписанию

Опубликовано: / Просмотрено: 294 /

И вначале реклама, небольшой блок. Прошу не сердиться и не вносить ее в фильтры блокировщиков.

подробнее о рекламодателе можно узнать внутри блока
Спасибо. А теперь сам материал.

С помощью нейронки Claude Sonnet написал скрипт, который выключает вечером светодиоды у роутера, а утром включает их обратно. Важно - тестировалось и работает на Cudy WR3000p под управлением openWRT 25.12.4. С обязательным пакетом mdio-tools. Если что, отказываюсь сразу от ответственности - у меня на тесте все работало,  но именно в такой связке - Cudy wr3000p + openwrt 25.12.4 + mdio-tools - это важно, у разных роутеров по разному записана конфигурация светодиодов.

Сам скрипт

UPD: важно, у меня wan переделан в lan порт и добавлен в бридж, так как он 2.5Гигабитный и в него воткнут комп, в будущем 2.5 гигабитный свитч. Лампочки утром не мигают, а просто горят 

 

#!/bin/sh
# Управление LED для Cudy WR3000P
# Использование: led-night.sh {on|off|status}

PATH=/usr/sbin:/usr/bin:/sbin:/bin
MDIO=/usr/bin/mdio
LOG_FILE=/tmp/led-night.log

LAN_ON="0x000b"
LAN_OFF="0x0008"
WAN_ON="0x00a7"
WAN_OFF="0x4089"

log() {
    logger -t led-night "$*"
    echo "[$(date '+%H:%M:%S')] $*" | tee -a "$LOG_FILE"
}

leds_off() {
    log "--- off начало ---"

    "$MDIO" mt7530-0 0:0x1f raw 0x21 "$LAN_OFF" \
        && log "LAN ports: выключены" || log "LAN ports: ОШИБКА mdio (код $?)"

    "$MDIO" mdio-bus 6:0x1f 0xd044 "$WAN_OFF" \
        && log "WAN PHY: выключен" || log "WAN PHY: ОШИБКА mdio (код $?)"

    for led in /sys/class/leds/*/; do
        echo none > "${led}trigger"    2>/dev/null
        echo 0    > "${led}brightness" 2>/dev/null
    done
    log "sysfs LEDs: выключены"
    log "=== ВЫКЛЮЧЕНО ==="
}

leds_on() {
    log "--- on начало ---"

    "$MDIO" mt7530-0 0:0x1f raw 0x21 "$LAN_ON" \
        && log "LAN ports: включены ($LAN_ON)" || log "LAN ports: ОШИБКА mdio (код $?)"

    "$MDIO" mdio-bus 6:0x1f 0xd044 "$WAN_ON" \
        && log "WAN PHY: включён ($WAN_ON)" || log "WAN PHY: ОШИБКА mdio (код $?)"

    for led in /sys/class/leds/mt76-phy*/; do
        [ -d "$led" ] || continue
        echo none > "${led}trigger"    2>/dev/null
        echo 0    > "${led}brightness" 2>/dev/null
    done

    /etc/init.d/led restart 2>/dev/null \
        && log "white:* LEDs: восстановлены" || log "white:* LEDs: ОШИБКА init.d"

    sleep 1

    for led in /sys/class/leds/mt76-phy*/; do
        [ -d "$led" ] || continue
        echo none > "${led}trigger"    2>/dev/null
        echo 0    > "${led}brightness" 2>/dev/null
    done
    log "mt76-phy*: заглушены"
    log "=== ВКЛЮЧЕНО ==="
}

status() {
    echo "── sysfs-светодиоды ────────────────────────────────"
    for led in /sys/class/leds/*/; do
        name=$(basename "$led")
        br=$(cat "${led}brightness" 2>/dev/null || echo 0)
        trig=$(sed 's/.*\[\([^]]*\)\].*/\1/; t; s/.*/none/' \
               "${led}trigger" 2>/dev/null)
        state=$([ "${br:-0}" -gt 0 ] && echo " ON" || echo "---")
        printf "  [%s] %-34s trigger=%s\n" "$state" "$name" "$trig"
    done
    echo ""
    echo "── mdio-регистры ───────────────────────────────────"
    printf "  LAN  (mt7530-0  reg 0x21):   "
    "$MDIO" mt7530-0 0:0x1f raw 0x21  2>/dev/null || echo "ошибка"
    printf "  WAN  (mdio-bus  reg 0xd044): "
    "$MDIO" mdio-bus 6:0x1f 0xd044    2>/dev/null || echo "ошибка"
    echo ""
    printf "  Время: "; date '+%H:%M:%S %d.%m.%Y'
}

case "$1" in
    on)     leds_on  ;;
    off)    leds_off ;;
    status) status   ;;
    *)
        echo "Использование: $(basename "$0") {on|off|status}"
        exit 1 ;;
esac

Его через WinSCP положил в папку /root/led-night.sh

выдал права chmod +x /root/led-night.sh

Вначале считываем текущий статус, обязательно!!!

led_control.sh status

проверяем

led_control.sh off
led_control.sh on

и, если все нормально, далее в cron /etc/crontabs/root

0 23 * * * /root/led-night.sh off
0 8 * * * /root/led-night.sh on

Сам скрипт написан с помощью нейросети Claude Sonnet 4.5

а,  сам cron нужно не забыть активировать и запустить

/etc/init.d/cron enable
/etc/init.d/cron start

 


Теги: