Streamingclient weckt WHS - für DD-WRT Router

Hier können Anleitungen für die verschiedensten Themengebiete gepostet werden.
Antworten
Chilled
Foren-Einsteiger
Beiträge: 12
Registriert: 29. Okt 2009, 19:49

Streamingclient weckt WHS - für DD-WRT Router

Beitrag von Chilled » 16. Dez 2010, 15:28

Hi Leute,
wie bereits im Forum (viewtopic.php?f=37&t=11020) diskutiert wurde. Gibt es einige Nutzer die gerne ein Script um ihren WHS zu wecken wenn sie ein Gerät einschalten das keine Magic Pakete versenden kann. Ich hab mich nun mal rangesetzt und eine kleines Shellscript geschrieben, das auch bisher sehr gut funktioniert.

Voraussetzungen:
  • - Router mit DD-WRT Firmware (getestet mit v24-14896 NEWD-2 K2.6 big) oder einen Linux Server
    - Aktiviertes JFFS
Ob euer Router DD-WRT unterstützt findet ihr hier heraus.

HowTo:
Auf eurem DD-WRT Router muss das Journalling Flash File System aktiviert sein (am betsen mit einem USB Stick, sollte jedoch auch über den NVRAM funktionieren). Das wars im großen und ganzen auch schon :) jetzt einfach mein Script auf eure Bedürfnisse anpassen, dann z.B. mittels WinSCP unter

Code: Alles auswählen

/jffs/etc/config/scriptname.startup
speicher, die Datei ausführbar machen

Code: Alles auswählen

chmod +x /jffs/etc/config/scriptname.startup
und den Router neustarten.

Script:

Code: Alles auswählen

#!/bin/sh
streamclient_ip="xxx.xxx.xxx.xxx"
server_ip="xxx.xxx.xxx.xxx"
server_mac="xx:xx:xx:xx:xx:xx"	
logfile="/jffs/log/wdtv.log"
lockdir="/tmp/var/wdtvlock"
chmod +w $logfile

	#Prüfe anhand des LockDir ob das Script bereits ausgeführt wird
	if mkdir $lockdir; then
		#Logfile löschen / zurücksetzen
		echo "["`date`"] -- START -- Script gestartet" > $logfile
		echo "["`date`"] -- CHECK -- Lockcheck erfolgreich"  >> $logfile

		while :
		do
			if ping -c1 $streamclient_ip > /dev/null 2>&1 && ping -c1 $server_ip > /dev/null 2>&1; then
				echo "["`date`"] -- SLEEP -- CLIENT $streamclient_ip und WHS $server_ip sind in Betrieb"  >> $logfile
				sleep 1800
			else
				#Pinganfrage ob Streamingclient online
				if  ping -c1 $streamclient_ip > /dev/null 2>&1; then
					echo "["`date`"] -- PING  -- CLIENT $streamclient_ip ist online - Prüfe WHS Status"  >> $logfile
					#Pinganfrage ob Server online
					if  ! ping -c1 $server_ip > /dev/null 2>&1; then
						# Wake-up Home Server
						/usr/sbin/wol -i 192.168.22.255 $server_mac
						echo "["`date`"] -- WOL   -- WHS $server_ip wurde geweckt"  >> $logfile 
						sleep 300
					fi
				else
					echo "["`date`"] -- SCAN  -- CLIENT $streamclient_ip ist offline"  >> $logfile
				fi
				sleep 15
			fi
		done

	#Wenn Script bereits ausgeführt wird > EXIT
	else
		echo "["`date`"] -- ERROR -- Lockcheck fehlgeschlagen - Script bereits aktiv"  >> $logfile
		echo "["`date`"] -- EXIT  --"  >> $logfile
  		exit 1
	fi
Wie ihr dem Script entnehmen könnt, gibt es auch noch eine kleine Log-Datei. Diese findet ihr standardmäßig unter

Code: Alles auswählen

/jffs/log/wdtv.log
Ich hoffe dass ich einigen damit weiterhelfen konnte. Bei Fragem und verbesserungsvorschlägen einfach schreiben (bin auch nur ein Linux Frischlich)
Acer easyStore H340: 2 x 1TB, 2 x 1,5TB
Linksys WRT610N DD-WRT

Bild

Antworten