Statusmail von der Diskstation

Aus
Version vom 26. Januar 2018, 14:06 Uhr von Raymond (Diskussion | Beiträge) (→‎Erstellen des Scripts: typo)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Die Installation von Fremdsoftware erfolgt immer auf eigenes Risiko.

Fehler bei der Installation können zum Datenverlust und zur Neuinstallation der Diskstation
führen, daher erfolgen sämtliche Änderungen auf eigenes Risiko.

In diesem Artikel geht es darum der Diskstation zu ermöglichen z.B. täglich eine Statusmail mit diversen Infos zu verschicken.

Grundsätzlich kann diese Möglichkeit allerdings zum Versenden von allen möglichen Infos/Warnungen per E-Mail genutzt werden.

Voraussetzungen

Generell sollte mal wissen

  • IPKG muss installiert sein
  • nail [1] muss installiert sein zum Versenden von E-Mails

Hinweis

Die versendete Statusmail sieht als Beispiel so aus:

Status der Diskstation (Nas (DS-410j)) vom 09.09.11 (13:25):
--------------------------------------------

[Speicherplatz in TB]
Groesse Datentraeger: 5.4T
Freier Speicher: 688.6G
Belegter Speicher: 4.7T (87%)

[Auslastung]
CPU-Auslastung: 0%
Memory: 86%
Swap: 1%
Indexing Queue: 2
Thumbs Queue: 0
FLV Queue: 0

[Datentraeger]
Volume 1: 41 Grad, 7818 Stunden Laufzeit
Volume 2: 42 Grad, 7808 Stunden Laufzeit
Volume 3: 42 Grad, 7962 Stunden Laufzeit
Volume 4: 41 Grad, 7803 Stunden Laufzeit

[IP]
Externe IP: 69.15.45.4
Interne IP: 192.168.178.25

[Aktuelle Netzwerkverbindungen]
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 Nas:5000 maze128.fritz.box:33057 ESTABLISHED
tcp 0 0 Nas:5000 maze128.fritz.box:33050 ESTABLISHED
tcp 0 0 Nas:5000 maze128.fritz.box:33056 ESTABLISHED
tcp 0 0 Nas:5000 maze128.fritz.box:33054 ESTABLISHED

[Netzwerkstatistik eth0]
RX bytes:1375702476 (1.2 GiB)
TX bytes:43629973 (41.6 MiB)

[Uptime]
Uptime: 2:08 Stunden

[Wetter]
Temperatur: 20 Grad C
Luftfeuchtigkeit: 73%
Vorhersage: Mostly Sunny

[Letzte Nachrichten]
Sep 9 13:14:24 synoindexd: audio_parse.cpp (134) FAILED TO WRITE PIC FILE 

Installation

Für das Versenden der E-Mails habe ich für die DS extra einen Account bei web.de angelegt und mit folgender Konfiguration in der nail.rc betrieben, die Datei liegt in /opt/etc/ (ich habe die Datei mit dem Editor aus itaris AdminTool editiert, funktioniert super!):

set smtp-auth=login
set smtp=smtp.web.de
set pop=pop3.web.de
set from=BENUTZER@web.de
set smtp-auth-user=BENUTZER@web.de
set smtp-auth-password=PASSWORT 

Ich habe dann ein Script erstellt welches ich unter /usr/bin abgelegt habe (der Pfad ist relativ egal). Dieses wird 1x täglich per Cron gestartet (z.B. per CronTab)

Erstellen des Scripts

Das Script muss je nach Version der Diskstation noch angepasst werden, besonders die Werte $hours und $temperatur. Daher diese Werte am besten vorher mal im Terminal ausprobieren und schauen ob bei dem verwendeten Befehl etwas Sinnvolles raus kommt.

In diesem Script wird zusätzlich noch ein log-file angelegt um sich eventuell den Temperaturverlauf im Nachhinein anzusehen.

#!/bin/sh
LOCATION='MEINE_STADT'
LOGFILE=/var/log/shutdown.log
echo 6 > /dev/ttyS1
echo 7 > /dev/ttyS1
model=`dmesg | grep -m 1 Model | awk '{print $4}'`
netstat=`netstat -tu`
eth0_rx=`ifconfig eth0 | grep "bytes" | awk '{print $1 " " $2 " " $3 " " $4}'`
eth0_tx=`ifconfig eth0 | grep "bytes" | awk '{print $5 " " $6 " " $7 " " $8}'`
hostname=`hostname -s`
hours1=`/usr/syno/bin/smartctl -A /dev/hda | /bin/grep Power_On_Hours | /usr/bin/awk '{print $10}'`
hours2=`/usr/syno/bin/smartctl -A /dev/hdb | /bin/grep Power_On_Hours | /usr/bin/awk '{print $10}'`
hours3=`/usr/syno/bin/smartctl -A /dev/hdc | /bin/grep Power_On_Hours | /usr/bin/awk '{print $10}'`
hours4=`/usr/syno/bin/smartctl -A /dev/hdd | /bin/grep Power_On_Hours | /usr/bin/awk '{print $10}'`
temperatur1=`/usr/syno/bin/smartctl -A /dev/hda | /bin/grep Temperature_Celsius | /usr/bin/awk '{print $10}'`
temperatur2=`/usr/syno/bin/smartctl -A /dev/hdb | /bin/grep Temperature_Celsius | /usr/bin/awk '{print $10}'`
temperatur3=`/usr/syno/bin/smartctl -A /dev/hdc | /bin/grep Temperature_Celsius | /usr/bin/awk '{print $10}'`
temperatur4=`/usr/syno/bin/smartctl -A /dev/hdd | /bin/grep Temperature_Celsius | /usr/bin/awk '{print $10}'`
filesystem1=`df -h | grep /opt | awk '{print $6}'`
size1=`df -h | grep /opt | awk '{print $2}'`
used1=`df -h | grep /opt | awk '{print $3}'`
available1=`df -h | grep /opt | awk '{print $4}'`
percent1=`df -h | grep /opt | awk '{print $5}'`
datum=`date +"%d.%m.%y`
zeit=`date +"%H:%M`
up_time=`uptime | sed 's/^.*up //' | sed 's/, load.*$//'`
CPU=`/usr/bin/top -b -n 1 |awk 'NR>7&&NR<30 {s+=$9} END {printf("%2d",s)}'`
INT_IP=`ifconfig eth0 | grep inet | sed 's/^ *..........//' | sed 's/ .*$//' | sed 's/:$//'`
IP=`if [ -f /tmp/externalIP.result ];then /bin/get_key_value /tmp/externalIP.result externalIP;else echo 0.0.0.0;fi`
FREE=`free`
MEM=`echo "$FREE" | awk 'NR==2{printf("%2d",$3/$2*100)}'`
SWAP=`echo "$FREE" | awk 'NR==3{printf("%2d",$3/$2*100)}'`
IQ=`cat /var/spool/syno_indexing_queue* | wc -l`; IQ1=100; if [ $IQ -lt 100 ]; then IQ1=$IQ; fi
TQ=`cat /var/spool/thumb_create.queue* | wc -l`; TQ1=100; if [ $TQ -lt 100 ]; then TQ1=$TQ; fi
FQ=`cat /var/spool/flv_create_queue* | wc -l`; FQ1=100; if [ $FQ -lt 100 ]; then FQ1=$FQ; fi
MSG=`tail -1 /var/log/messages`
LASTMSG=`echo $MSG | cut -b 1-78`
WEATHER=`wget -O - "http://www.google.com/ig/api?weather="$LOCATION 2>/dev/null`
TEMP=`echo $WEATHER | sed -e 's/^.*temp_c data=\"\\([0-9-][0-9\]*\\)\".*/\\1/'`
COND=`echo $WEATHER | sed -e 's/^.*condition data="\(.*\)".*/\\1/'`
HUM=`echo $WEATHER | sed -e 's/^.*humidity data="Humidity:\(.*\)%.*/\\1/'`

log() {
echo `date +%c`: $1 >> $LOGFILE
}
log "Temperatur 1: $temperatur1 °C, Temperatur 2: $temperatur2 °C, Temperatur 3: $temperatur3 °C, Temperatur 4: $temperatur4 °C, IP: $IP"
nachricht="Status der Diskstation ($hostname ($model)) vom $datum ($zeit):
--------------------------------------------

[Speicherplatz in TB]
Groesse Datentraeger: $size1
Freier Speicher: $available1
Belegter Speicher: $used1 ($percent1)

[Auslastung]
CPU-Auslastung: ${CPU}%
Memory: ${MEM}%
Swap: ${SWAP}%
Indexing Queue: $IQ
Thumbs Queue: $TQ
FLV Queue: $FQ

[Datentraeger]
Volume 1: $temperatur1 Grad, $hours1 Stunden Laufzeit
Volume 2: $temperatur2 Grad, $hours2 Stunden Laufzeit
Volume 3: $temperatur3 Grad, $hours3 Stunden Laufzeit
Volume 4: $temperatur4 Grad, $hours4 Stunden Laufzeit

[IP]
Externe IP: $IP
Interne IP: $INT_IP

[Aktuelle Netzwerkverbindungen]
$netstat

[Netzwerkstatistik eth0]
$eth0_rx
$eth0_tx

[Uptime]
Uptime:$up_time Stunden

[Wetter]
Temperatur: ${TEMP} Grad C
Luftfeuchtigkeit:${HUM}%
Vorhersage: $COND

[Letzte Nachrichten]
$LASTMSG

"
echo "$nachricht" | /opt/bin/nail -s "Status Diskstation" USER.USER@PROVIDER.de
echo 2 >/dev/ttyS1 

Die Nachricht könnt ihr noch nach Belieben anpassen, allerdings funktionieren nur folgende Zeichen:

LEERZEICHEN ␣!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~ 

Ende

Diese Möglichkeit zum Versenden von Informationen kann wie bereits angesprochen für alle möglichen Dinge auf der DS genutzt werden, ich nutze es z.B. auch für die Überwachung der Temperatur und zum Versenden einer E-Mail als Warnung wenn ein bestimmter Schwellenwert überschritten ist.

Ich hoffe ich konnte dem ein oder anderen helfen, vielleicht kommt sogar die ein oder andere neue Idee zum modden der Diskstation auf.