Afwezigheidsdetectie

Elk jaar krijg je van je energieleverancier, in mijn geval Eneco, de afrekening. Ondanks dat ik elk jaar mijn termijnbedrag verhoog, hou ik steeds minder over. Het zet aan tot nadenken: waar kan je op besparen.

Ik heb twee koters, nu 7 en 9 jaar, die altijd vergeten verlichting, televisies en spelcomputers uit te zetten. Met Philips Hue en bewegingssensoren in hallen, toilet en badkamer heb ik een deel van de verlichting reeds kunnen tackelen. Toch wil ik verder gaan.

Het idee: Afwezigheidsdetectie

Iedereen zit tegenwoordig vergroeid met zijn/haar mobiele telefoon. De bedoeling is op mijn Linux Server een script periodiek draait dat kijkt of tenminste één van onze mobiele telefoons op het WiFi-netwerk actief is. Niemand actief? Dan moet alle Philips Hue verlichting uitgeschakeld worden (behalve lampen op timers, zoals nachtverlichting in de tuin) en de Toon Thermostaat op programma ‘Weg’.

Philips Hue

Philips Hue kan door middel van JSON-opdrachten naar de bridge verlichting schakelen en hier verwacht ik dan ook geen problemen.

Eneco Toon

De slimme thermostaat, Toon, van Eneco, is een lastiger verhaal. Standaard werkt toon met een maandelijks abonnement van enkele euro’s. Hiervoor krijg je terug dat je op afstand je thermostaat kan schakelen en je verbruik inzichtelijk wordt. Helaas snijdt Eneco zichzelf wel in de vingers: tegenwoordig krijg je maandelijks een energierapport per mail met tussenstanden. De voor mij aantrekkelijkste functie van toon is hiermee dan ook verdwenen. Tegenwoordig staan er how-to’s op internet, hoe Toon geroot kan worden, waarmee het abonnement niet langer nodig is en je ook via het aanroepen van een specifieke URL data kan opvragen en je thermostaat kan instellen.

Het serverscript

Het script moet een simpel bash-script worden dat via cron elke 5 minuten draait. Onderstaand script is een eerste versie, waarin afwezigheidsdetectie werkt. Het script haalt de ARP-tabel op en kijkt checkt of tenminste een van de opgegeven apparaten (opgegeven als MAC-adres in de array ‘deviceArray’) voorkomt.

Belangrijk te weten dat de update-interval van de ARP-tabel in te stellen is. Op mijn server staat deze op 60 seconden, echter leert de ervaring dat het opmerken van een uitgeschakeld apparaat veelal langer (meestal 2-3 minuten) duurt.

Het script op dit moment:


#!/bin/bash
# Script door Dennis Bor

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

# 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..."

# Tenminste een apparaat online?
else

        # ja

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

fi

Volgende halte: Toon-rooten!