подробнее о рекламодателе можно узнать внутри блока
Спасибо. А теперь сам материал.
С помощью нейронки 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