WIKI: WLAN/LAN-Geräte mit Linux überwachen und Webhook auslösen

Ihr wollt die Erreichbarkeit von WLAN-Geräten überwachen und je nach Erreichbarkeit einen Webhook auslösen? Sofern ihr einen Linux Server habt, einfach das folgende Skript z.B. alle 5 Minuten im Cron-Job laufen lassen.

Vielen Dank an die Community für einzelne Tipps zur Erstellung!!

#!/bin/bash

SMH_LOG=/Pfad/zur/Logdatei/Logdatei.log

active=0
debugPC=1

ASRV_CLIENTS[0]=“IP.IP.IP.1”
ASRV_CLIENTS[1]=“IP.IP.IP.2”

Kann um weitere Geräte ergänzt werden

i=0
while [ $i -lt ${#ASRV_CLIENTS[*]} ]
do
ping -c1 ${ASRV_CLIENTS[$i]} -W1
if [ $? -eq 0 ]
then
if [ $debugPC = “1” ]
then
echo “$(date +’%Y-%m-%d %H:%M:%S’) - DEBUG: ${ASRV_CLIENTS[$i]} an” | tee -a $SMH_LOG
fi
(( active++ ))
fi
(( i++ ))
done

echo -n "$(date +’%Y-%m-%d %H:%M:%S’) - $active Gerät/e an --> " | tee -a $SMH_LOG

if [ $active = “0” ]
then
echo -n "homee Gerät ausschalten > " | tee -a $SMH_LOG
curl “http://<LOKAL_IP:7681/api/v2/webhook_trigger?webhooks_key=&event=” >> $SMH_LOG
echo “” | tee -a $SMH_LOG
else
echo -n "homee Gerät einschalten > " | tee -a $SMH_LOG
curl “http://<LOKAL_IP:7681/api/v2/webhook_trigger?webhooks_key=&event=” >> $SMH_LOG
echo “” | tee -a $SMH_LOG
fi

Ich selbst nutze dieses Script nun seit einigen Tagen damit die Drucker nur Strom haben, wenn auch ein Gerät eingeschaltet ist, welches drucken könnte (PCs/Laptops)

Schalter bisher 100% zuverlässig (2 Tage Erfahrung, cron alle 5 Minuten)

7 „Gefällt mir“

Ergänzung der zugehörigen homeegramme:

HGein: wenn Webhook und Schalter =aus, dann Gerät einschalten und HGaus deaktivieren und HGaus in einer Stunde aktivieren.

HGaus: wenn Webhook und Schalter ein, dann Gerät ausschalten

Die Nebenbedingung zum schalterstatus verhindert unnötiges ausführen der homeegramme, das deaktivieren des HG2 für eine Stunde sorgt dafür, dass bei kurzzeitigem Ausfall des WLAN der Drucker nicht sofort abgeschaltet wird.

Für alle, die wenig Linux / Bash Erfahrung haben die Erläuterungen dazu:

Skript von oben nach unten mit Erläuterungen

#!/bin/bash

Ich bin ein Bash-Skript, dann weiss Linux damit umzugehen

SMH_LOG=/Pfad/zur/Logdatei/Logdatei.log

Hier wird ein Logbuch auf dem Linux-Server angelegt ==> MUSS angepasst werden

active=0

Variable für das Zählen der aktiven Geräte ==> NICHT ÄNDERN

debugPC=1

Wenn debugPC=1 stehen in der Logdatei, welche Geräte gefunden wurden. Wenn
debugPC=0, steht nur wieviele Geräte gefunden wurden aber nicht welche (kleineres Log) ==> Individuell anpassen, wie du es haben möchtest

ASRV_CLIENTS[0]=“IP.IP.IP.1”
ASRV_CLIENTS[1]=“IP.IP.IP.2”
# Kann um weitere Geräte ergänzt werden

Also bei 3 Geräten weitere Zeile mit ASRV_CLIENTS[2]=“1.2.3.4” usw. ==> MUSS ANGEPASST WERDEN

i=0
while [ $i -lt ${#ASRV_CLIENTS[*]} ]
do
ping -c1 ${ASRV_CLIENTS[$i]} -W1
if [ $? -eq 0 ]
then
if [ $debugPC = “1” ]
then

In diesem Block NICHTS ÄNDERN!!

echo “$(date +’%Y-%m-%d %H:%M:%S’) - DEBUG: ${ASRV_CLIENTS[$i]} an” | tee -a $SMH_LOG

Schreibt ins Log welches Gerät gefunden wurde. Wenn du das anpassen möchtest, Zwischen den " steht was ins Logfile geht. Im ersten Teil das Datum, Anpassung nur, wenn du weisst was du tust :slight_smile:

fi
(( active++ ))
fi
(( i++ ))
done

NICHTS ÄNDERN! Was passiert? Wenn ein Gerät gefunden wurde zählt active eins hoch und i zählt eins hoch um das nächste Gerät zu prüfen

echo -n "$(date +'%Y-%m-%d %H:%M:%S') - $active Gerät/e an --> " | tee -a $SMH_LOG

Schreibt ins Logbuch wieviele Geräte eingeschaltet waren. Auch hier kannst du das Log anpassen, wenn du weisst was du tust, aber keine Änderung notwendig

if [ $active = "0" ]
then

Prüfung ob Gerät gefunden wurde, wenn nicht werden die folgenden Zeilen ausgeführt

echo -n "homee Gerät ausschalten > " | tee -a $SMH_LOG

Eintrag fürs Logfile, in deinem Fall also nicht homee Gerät ausschalten, sondern: WebHook “keinGerätgefunden” wird ausgelöst. Oder wie auch immer du das im Logfile stehen haben möchtest. Kannst es auch so lassen, aber dann steht im Logfile halt dass Homee ein Gerät ausschaltet :wink:

curl "http://<LOKAL_IP:7681/api/v2/webhook_trigger?webhooks_key=&event=" >> $SMH_LOG

Hier der Webhook der aufgerufen wird, wenn KEIN Gerät gefunden wurde

Dieser Aufruf muss angepasst werden (alles zwischen den "). Wenn du das Homeegramm, was ausgelöst werden soll, wenn keines der Geräte gefunden wurde, dann zeigt er dir in der Homee-Administration diesen Link an. Es muss also die lokale IP von deinem Homee rein, dein Homee hat einen webhooks_key=…Ellenlanger Sicherheitsschlüssel…&event=…Homeegramm-Name…
Das siehst du aber alles, wenn du das Homeegramm anlegtst.

echo “” | tee -a $SMH_LOG
else
echo -n "homee Gerät einschalten > " | tee -a $SMH_LOG

Eintrag fürs Logfile, in deinem Fall also nicht homee Gerät ausschalten, sondern: WebHook “Gerätgefunden” wird ausgelöst. Oder wie auch immer du das im Logfile stehen haben möchtest. Kannst es auch so lassen, aber dann steht im Logfile halt dass Homee ein Gerät einschaltet :wink:

curl "http://<LOKAL_IP:7681/api/v2/webhook_trigger?webhooks_key=&event=" >> $SMH_LOG

Hier der Webhook der aufgerufen wird, wenn MINDESTENS EIN Gerät gefunden wurde

Dieser Aufruf muss angepasst werden (alles zwischen den ").

Gilt gleiches wie oben, nur dass hier ein anderes Homeegramm aufgerufen wird. &event=…Homeegramm-Name… muss also anders aussehen, der Rest ist gleich oben

echo "" | tee -a $SMH_LOG
fi

Hier nichts ändern, sorgt dafür, dass der nächste Log-Eintrag in eine neue Zeile kommt.

4 „Gefällt mir“