Update: Afwezigheidsdetectie

Na het rooten van Toon kun je door het aanroepen van een bepaalde URL veel, zoals programma’s, instellen. Ik heb het script voor afwezigheidsdetectie aangepast zodat Toon bij afwezigheid het programma ‘Weg’ activeert.

Een andere kleine update aan het script is dat MAC adressen van apparaten nu in een apart bestand ‘devices’ opgeslagen moeten worden. Het script leest dit bestand uit.

Omdat er gebruik wordt gemaakt van JSON output, dient ‘jq’ geïnstalleerd te zijn op de server.

#!/bin/bash
# Script door Dennis Bor

# IP van Toon
toonIP="192.168.0.58"

# Array met mac adressen
# Als geen van deze apparaten gevonden wordt in het lokale
# netwerk, dan zal er geschakeld worden.
deviceArray=()

# itereer door bestand 'devices' waarin
# per regel een mac-adres van een apparaat opgegeven
# kan worden
while read line; do

        # geen lege regel?
        if [[ $line != "" ]]; then

                # voeg het apparaat toe aan de array
                deviceArray+=("$line")
        fi

done < devices

# Boolean waarin opgeslagen wordt of er tenminste een
# van de gespecificeerde apparaten online is. Standaard false
deviceFound=false

# Toon informatie
echo "Zoeken naar apparaten, momentje..."

# Haal de arp table op
arpResult=`arp -a`

# Itereer door alle gespecificeerde mac adressen
for macIterator in "${deviceArray[@]}"
do

        # huidige adres in de arp tabel?
        if [[ $arpResult == *"$macIterator"* ]]; then

                # ja

                # toon informatie
                echo "Apparaat online: $macIterator"

                # stel de boolean in op true
                deviceFound=true

        # huidige adres niet in de arp tabel
        else

                # nee

                # toon informatie
                echo "Apparaat offline: $macIterator"

        fi
done

# Geen apparaten online?
if [[ $deviceFound == false ]]; then

        # nee

        # toon informatie
        echo "Geen apparaten online, actie ondernemen..."

        # schakel programma Toon in op Weg
        # gebruik curl, parse de uitvoer als JSON en sla de waarde van 'result' op
        result=`curl -s "http://$toonIP/happ_thermstat?action=changeSchemeState&state=2&temperatureState=3" | jq -r '.result'`


        # waarde van result 'ok'?
        # dat betekent dat Toon het gekozen programma geacvtiveerd heeft
        if [[ $result == "ok" ]]; then

                # toon informatie
                echo "Toon ingesteld op 'Weg'"

        # waarde van result ongelijk aan 'ok'? dit kan alles zijn, van een ander resultaat tot
        # verbindingsproblemen, etc.
        else

                # toon informatie
                echo "Kan toon niet instellen op 'Weg'"
        fi

# Tenminste een apparaat online?
else

        # ja

        # toon informatie
        echo "Een of meer apparaten online, afsluiten..."

fi