[fli4l] Wo liegt die Information, welche Geräte mit fli4l verbunden sind?

Thomas Grunenberg tho_gru at gmx.de
Sa Jan 14 22:42:00 CET 2017


Am 14.01.2017 um 12:07 schrieb K. Dreier:
> Hallo Peter,
>
...
> Ich sehe hier mehrere nötige Schritte:
> 1) Man muß am Anfang prüfen, ob ein bestimmtes Geräte "online" ist.
> Das haben wir, siehe oben.
> 2) Wenn dieses (oder mehrere! wie prüft man das? Es wäre sozusagen OR)
> Geräte online sind, muß die Aktion erfolgen, falls nicht, sollte eine
> Schlaufe laufen, die 1 wieder aufruft
> 3) Falls eines oder mehrere Geräte online sind, muß die Aktion "ein"
> erfolgen, also das Anschalten der Steckdose (wie auch immer DAS dann
> genau funkionert; neue Baustelle)
> 4) sobald Komando in 3 ausgeführt ist, muß eine Variable gesetzt
> werden, z.B. WLANDOSEAKTIV=1
> 5) es muß dann einen Interval geben, in dem der Zustand von 1
> überprüft wird, also z.B. sleep 120 (= 2 Min)
> 6) Falls nach diesem Interval 1 zutrifft, landet man wieder bei 5, da 4
> weiter aktiv/gesetzt bleibt
> 7) Falls nach diesem Interval 1 nicht zutrifft, muß die Aktion "aus"
> erfolgen, also das Ausschalten der Steckdose
> 8 ) Falls 7 ausgeführt wurde, muß die obige Variable geändert werden,
> also z.B. WLANDOSEAKTIV=0
> 9) Das Skript muß nun wiederum in bestimmten Abstand prüfen, ob
> eventuell 1 wieder zutrifft
...
> Gruß
> Klaus
>

Hallo Klaus,

Hier ist ein Gerüst für ein Script, welches als Ausgangsbasis dienen kann:
###########################################################
#! /bin/sh

set -x  # uncomment to see the executed statements
set -u          # use of undefined variables will cause error message

test_on_condition () {
         return 1        # false
}

test_off_condition () {
         a=1
         if test -f /etc/passwd; then
                 a=1
         fi
         b=0
         return ${a} \& ${b}     # 0 = true
}


execute_on_commands () {
         echo "execute_on_commands"
}

execute_off_commands () {
         echo "execute_off_commands"
}

while true; do

         sleep 2

         if test_off_condition; then
                 execute_off_commands
                 continue
         fi

         if test_on_condition; then
                 execute_on_commands
                 continue
         fi

done

echo "END"
###########################################################

Erklärung:

1)
Am Ende läuft eine (Endlos-)Schleife: Zwischen "while" ... "done"
2)
Am Anfang werden 4 Funktionen definiert: test_on_condition, 
test_off_condition, execute_on_commands, execute_off_commands
3)
Falls ein Funktion 0 (für TRUE) mittels "return" zurückliefert, ist die 
Bedingung (hinter dem "if" beim Aufruf) wahr und die Befehle zwischen 
"then" und "fi" werden ausgeführt.
4)
Das "&" Zeichen dient als logisches UND. *Vorsicht*: Ohne das "\" davor 
klappt das nicht (die shell will den Befehl davor als 
Hintergrundprogramm starten)
Das "|" Zeichen dient als logischen ODER. Hier gilt auch obiges *Vorsicht*

Ich empfehle Dir, das Script direkt auf deinem fli4l zu entwickeln und 
erst wenn es funktioniert per USERCMD in Dein Build zu integrieren.

Du solltest Dich ein bisschen in die Shell-Programmierung einlesen... 
Ansonsten: Bei Fragen fragen.

Gruß
Thomas


Mehr Informationen über die Mailingliste Fli4L