Die Zipabox (by Zipato) ist weiterhin die Hausautomationszentrale in unserem Haus. Nun wollte ich zwecks Wake On LAN eine Info haben, ob der Rechner bereits ein- oder eben ausgeschaltet ist. Von Haus aus kann die Zipabox das noch nicht (simples Ping ist nicht möglich). Es kursieren diverse Lösungen im Internet, z.B. eine Docker-Lösung mit Webfrontend oder eine Lösung mit nmap und der Fritz!Box. Die Docker-Lösung habe ich getestet, diese beinhaltet sogar Wake On LAN. Allerdings habe ich meine eigene Lösung in Betrieb genommen, da ich immer gerne Herr meiner Scripte bin. Ich arbeite mit simplen Ping-Anfragen, das beutet auch, dass wechselnde IP’s problematisch werden können, bzw. es wird ein gepflegtes DNS vorausgesetzt.
Voraussetzung für meine Lösung ist ein laufendes Linux-System (z.B. eine NAS oder Raspberry), fest vergebene IP’s bzw. funktionierendes DNS im Heimnetz und auf dem Linux System sollten die Pakete bash, iputils-ping und curl installiert sein. Ich lasse das Script in einem Docker-Container laufen (auf Ubuntu-Basis), da ich mein NAS in der Richtung nicht anpassen will.
Wer keine Linux-Kenntnisse hat, der sollte sich überlegen hier auszusteigen, ich setze einfach ein paar Dinge voraus.
Zuerst müssen wir virtuelle Sensoren der zu überwachenden Netzwerkteilnehmer erstellen. Von diesen virtuellen Sensoren benötigt ihr jetzt den apiKey und ep-Eintrag. Diese findet ihr im Gerätemanager unter den Einstellungen des State-Eintrag des passenden virtuellen Sensors. In den Einstellungen sind in der URL die notwendigen Werte angegeben.
Erstellt Euch eine Datei, die wie folgt aufgebaut ist (Raute # kommentiert die Zeile aus):
#IP/FQDN:apiKey:ep 192.168.0.20:abcd1234-12ab-12ab-12ab-123456abcdef:1234abcd-12ab-12ab-12ab-123456abcdef host.domain.edu:abcd1234-12ab-12ab-12ab-123456abcdef:1234abcd-12ab-12ab-12ab-123456abcdef
Letzten endlich arbeitet das Script jede Zeile ab, die nicht mit # auskommentiert ist. Ich habe ein gepflegtes DNS und komme damit gut zurecht.
Hier das Script, in dem ihr nur noch die Seriennummer eurer Zipabox/-tile, die Pfade für WD (WorkingDirectory) und CONFFILE angeben müsst:
#!/bin/bash WD=/dockerhost/ping CONFFILE=${WD}/.conf # Configfile: hier sollten IP/FQDN, der apiKey und ep gepflegt sein PINGCOUNT=3 # Wie viele Pings sollen gesendet werden ZIPATO_SERIAL="01234567ABCDEFGH" # Hier muss die Seriennummer der Zipabox/-tile rein IFS=":" # FQDN/IP:apiKey:ep while read host Zipato_apiKey Zipato_ep do if [ ${host:0:1} != "#" ] then echo "Hostname : ${host}" echo "apiKey : ${Zipato_apiKey}" echo "ep : ${Zipato_ep}" setURL="https://my.zipato.com/zipato-web/remoting/attribute/set?serial=${ZIPATO_SERIAL}&apiKey=${Zipato_apiKey}&ep=${Zipato_ep}&state=" PINGRESULT=`ping -v -c $PINGCOUNT ${host} | grep '100% packet loss'` if [ -z "${PINGRESULT}" ] then curl "${setURL}true" > /dev/null echo "${host} is online" else curl "${setURL}false" > /dev/null echo "${host} is offline" fi; fi; done < ${CONFFILE}
Ich lasse dieses Script minütlich per Cron-Job aufrufen.