IP Adress-Prüfung als Auslöser

Hallo zusammen,

folgende Idee: ich will die IP-Adressen von PCs überwachen lassen und wenn die PCs aus sind (nicht erreichbar) meine “Büroausstattung” (separate Switche, Drucker etc) abschalten lassen.

Das Abschalten ist einfach: fibaro Wall Plug dazwischen.

Jemand ne Idee oder nen bash Skript für Linux was als Auslöser dienen kann? (Server Ubuntu läuft rund um die Uhr )

Gruß

Jens

#!/bin/bash

while true; do
    ping -c2 PC-IP
    if [ $? -ne 0 ]
    then
        curl WEBHOOKURL
    else
        echo 'Rechner noch an'
    fi
    sleep 600
done

Checkt alle 600Sekunden(sleep 600) ob der Rechner mit der passenden IP noch pingbar ist. Er versucht es zwei mal (-c2)
Bei Fragen fragen.

1 „Gefällt mir“

Vielen lieben Dank. Bei mehreren ips verschachtelt? Oder kann ich die Abfrage auch auf 2-n ips machen?

Kommt drauf an was du machen willst.
Soll es nur ausgehen wenn alle aus sind?

Wenn alle Geräte von denen man druckt aus , dann Drucker aus. Wenn eines ein, dann Drucker ein

Hatte ich nicht gesehen im ersten post

#!/bin/bash

while true; do
    sleep 10
    ping -c2 192.168.2.212
    if [ $? -eq 0 ]
    then
        continue
    fi

    ping -c2 192.168.2.213
    if [ $? -eq 0 ]
    then
        continue
    fi

    curl WEBHOOK
done

Fuer jede IP Adresse kannst du diesen Block noch mal kopieren:

ping -c2 192.168.2.212
if [ $? -eq 0 ]
then
    continue
fi

Sleep 10 wieder durch die Sekunden ersetzen die er warten soll

#!/bin/bash

ping -c2 192.168.2.212
if [ $? -eq 0 ]
then
    active=1
fi
ping -c2 192.168.2.213
if [ $? -eq 0 ]
then
    active++
fi
if [ $? -eq 0 ]
then 
    curl WEBHOOKAUS
else 
   curl WEBHOOKAN
fi

Muss das nicht etwa so sein? BASH ist nicht so meine Stärke :-/

Also mein Script faengt mit der ersten IP Adresse an. Sobald der erste PC an ist hoert sie auf.
Sollte der erste aus sein nimmt sie den zweiten. Sollte der zweite an sein hoert sie auf. Und so weiter und so fort.

Wenn man jetzt noch die PC die am haeufisten an sind ganz nach oben schreibt sollte es sogar recht effizient sein.

Zu deiner Loesung, wenn ein PC an ist soll ja nichts passieren, also auch kein Webhook.

if [ $? -eq 0 ]
then 
    curl WEBHOOKAUS
else 
   curl WEBHOOKAN
fi

Da sollte $? immer 0 sein da ja active++ wahrscheinlich immer erfolgreich ist.

Sorry, am Ende if [ active -eq 0 ]

vielleicht nochmal zu dem was ich vor habe:

Regelmässiger Check, ob PCs an sind. Wenn der letzte PC aus ist, soll der Wallplug ausgeschaltet werden, sobald der erste Rechner wieder an ist: eingeschaltet werden.

Also brauche ich auf jeden Fall die zwei Webhooks ( EIN und AUS). Meine Herausforderung ist, diese auch korrekt anzusteuern.

Wenn ich dein Skript (vielen Dank dafür), richtig verstehe, dann schaltet das ab, wenn kein Rechner mehr an ist.

Angepasst (natürlich mit wenn active > 0): Zähle eingeschaltete Rechner, wenn Anzahl 0 dann ausschalten, wenn > 0, dann einschalten.

Wenn ich das dann als CRON rein nehme, sollte das klappen, korrekt? Denn es sollte dann sowohl ein, als auch ausschalten.

Oh da habe ich deinen Post wohl gar nicht richtig gelesen.
Ja dann kannst du das so machen.
Ich würde nach oben noch ein active=0 machen damit du am Start sicher bist, nicht das es NONE oder so ist.
Und dann vielleicht überall active=1 oder active++ verwenden.
Sonst fragst du dich irgendwann warum es bei einem auf 1 gesetzt wird und bei dem anderen um 1 erhöht.