[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