[fli4l] LED schalten auf Alix mit hw_supp (3.10.6)
Christoph Schulz
fli4l at kristov.de
So Aug 21 15:22:00 CEST 2016
Hallo!
Am Sun, 21 Aug 2016 13:25:45 +0200 schrieb Stefan Puschek:
> Hallo in die Runde,
>
> ich möchte auf meinem Alix (2D13) die erste LED über ein Skript steuern:
>
> HWSUPP_LED_1_DEVICE='alix::1'
> HWSUPP_LED_1_PARAM='/usr/local/bin/myledscript'
>
> das Skript kann ich vermutlich per usercmd bereitstellen, aber wie lasse
> ich das Skript ausführen?
>
> Muss ich einen cron-Job einrichten oder wird es automatisch zyklisch
> aufgerufen? Irgendwie stehe ich auf dem Schlauch...
Die Dokumentation gibt da nicht viel her, das stimmt leider.
Fakt ist, dass am Ende des Bootens (genauer: in rc998.hwsupp) dein Skript
(das hwsupp automatisch auf den Router bringt, wie Peter schrieb) einfach
per ". <Skript>" eingebunden und somit ausgeführt wird. Also genau
einmal. Dabei beinhaltet die Variable "$i" den Index der LED.
Dein Skript ist nun dafür verantwortlich, den "Rest" zu erledigen. Es
muss also einen Trigger konfigurieren und kann zusätzlich die LED manuell
ein- oder ausschalten. Das Skript ist also nicht primär dafür da, um die
LED ein- oder auszuschalten, sondern um dies entsprechend zu
konfigurieren. Es könnte z.B. den folgenden Inhalt haben:
#!/bin/sh
echo none > /var/run/hwsuppd/hwsupp-led${i}/trigger
/usr/bin/hwsupp_setled $i on
Damit würde es die LED dauerhaft einschalten. Die gleiche Funktionalität
bekommst du aber auch bei HWSUPP_LED_x='ready', also bringt der "Umweg"
über HWSUPP_LED_x='user' nichts.
Die Syntax für den Aufruf von hwsupp_setled sieht so aus:
hwsupp_setled <index> {on|off|blink}
Vorher muss dein Skript jedoch den "Trigger" für die LED setzen, und zwar
i.d.R. auf "none". Das erlaubt das manuelle Schalten der LED, ohne dass
das System "im Hintergrund" die LED verändert. ("blink" erfordert
allerdings den "timer"-Trigger.)
> genau das soll passieren; zwischen Router und Switch habe ich eine
> Powerline-verbindung, die schonmal ausfällt und die LED soll anzeigen,
ob
> der Switch pingbar ist
Dazu würde ich wie folgt vorgehen:
1) LED auf manuelles Schalten vorbereiten:
HWSUPP_LED_1='trigger'
HWSUPP_LED_1_TRIGGER='none'
2) Folgendes Skript check-powerline.sh schreiben (ungetestet!):
#!/bin/sh
# Adresse fürs PING
TARGET=1.2.3.4
# Index der LED
LED=1
# Timeout in Sekunden zwischen den PINGs
TIMEOUT=60
while true
do
if ping -c 1 -W 1 $TARGET >/dev/null
then
hwsupp_setled $LED on
else
hwsupp_setled $LED off
fi
sleep $TIMEOUT
done &
3) Das Skript von OPT_USERCMD auf den Router bringen und beim Booten
ausführen lassen (ungetestet!):
OPT_USERCMD='yes'
USERCMD_BOOT_N='1'
USERCMD_BOOT_1='check-powerline.sh'
USERCMD_FILE_N='1'
USERCMD_FILE_1_SRC='check-powerline.sh'
USERCMD_FILE_1_DST='/usr/bin/check-powerline.sh'
USERCMD_FILE_1_MODE='555'
USERCMD_FILE_1_FLAGS='sh'
Viele Grüße,
--
Christoph Schulz
[fli4l-Team]
Mehr Informationen über die Mailingliste Fli4L