Hallo,
wie hier beschrieben
https://www.meintechblog.de/2015/05/fhem-howto-automatisches-backup-auf-externem-nas/ (https://www.meintechblog.de/2015/05/fhem-howto-automatisches-backup-auf-externem-nas/)
und nach einigem Gefrickel, läuft jetzt wohl das Backup von FHEM...
In dem beschriebenen Skript backup.sh wird mittels Pushover ggf eine Nachricht gesendet, wenn ein Backup erstellt wurde.
Script:
#!/bin/bash
mountIp="192.168.3.10"
mountDir="backup"
mountUser="admin"
mountPass="password"
mountSubDir="rpi/fhem"
localMountPoint="/Q/backup"
#optional
backupsMax="0"
localBackupDir="/backup"
pushoverUser=""
pushoverToken=""
###################################
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup info backup starting now"
if [ ! -e "$localBackupDir" ]
then
echo "$localBackupDir wird erstellt"
mkdir -p "$localBackupDir"
else
echo "$localBackupDir bereits vorhanden"
fi
tar --exclude=backup -cvzf "/$localBackupDir/$(date +%y%m%d_%H%M%S)_fhem_backup.tar.gz" "/opt/fhem" &>/dev/null
if ! ping -c 1 $mountIp
then
echo "$mountIp nicht erreichbar, stop"
perl /opt/fhem/fhem.pl 7072 "set FHEM.Backup error"
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup info $mountIp not found"
exit
else
echo "$mountIp erreichbar"
fi
localIp=$(hostname -I|sed 's/\([0-9.]*\).*/\1/')
if [ ! -e "$localMountPoint" ]
then
echo "$localMountPoint wird erstellt"
mkdir -p "$localMountPoint"
else
echo "$localMountPoint bereits vorhanden"
fi
if [ "$(ls -A $localMountPoint)" ]
then
echo "$localMountPoint nicht leer, kein Mounten notwendig"
else
echo "$localMountPoint leer, Mounten starten"
vorhanden="0"
while read line
do
mountComplete="//$mountIp/$mountDir $localMountPoint cifs username=$mountUser,password=$mountPass,iocharset=utf8,sec=ntlm 0 0"
echo "mountComplete: $mountComplete"
if [ `echo "$line" | grep -c "$mountComplete"` != 0 ]
then
echo "/etc/fstab: Eintrag bereits vorhanden: $mountComplete"
vorhanden="1"
break
fi
done < "/etc/fstab"
if [ "$vorhanden" != "1" ]
then
echo "/etc/fstab: Eintrag wird ergänzt: $mountComplete"
echo "$mountComplete" >> "/etc/fstab"
fi
echo "Mounts werden aktualisiert"
mount -a
sleep 3
fi
if [ "$(ls -A $localMountPoint)" ]
then
if [ ! -e "$localMountPoint/$mountSubDir/$localIp" ]
then
mkdir -p "$localMountPoint/$mountSubDir/$localIp"
else
echo "$localMountPoint/$mountSubDir/$localIp existiert bereits"
fi
find "$localBackupDir" -name '*fhem_backup.tar.gz' | while read file
do
fileSize="0"
fileSizeMB=$(du -h $file)
fileSizeMB=${fileSizeMB%%M*}
filename=${file##*/}
echo "$filename ($fileSizeMB MB) wird in den Backupordner verschoben"
if [[ "$pushoverToken" != "" && "pushoverUser" != "" ]]
then
curl -s -F "token=$pushoverToken" -F "user=$pushoverUser" -F "title=FHEM $localIp" -F "message=Backup mit $fileSizeMB MB wird erstellt" https://api.pushover.net/1/messages.json
fi
#mv "$file" "$localMountPoint/$mountSubDir/$localIp/$filename"
cp "$file" "$localMountPoint/$mountSubDir/$localIp/$filename"
rm "$file"
perl /opt/fhem/fhem.pl 7072 "set FHEM.Backup off"
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup backup $filename"
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup backupMB $fileSizeMB"
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup info backup done"
done
else
echo "Mounten hat anscheinend nicht geklappt, skip."
exit
fi
#Löschen alter Backups
if [[ "$backupsMax" != "" && "$backupsMax" != "0" ]]
then
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup backupFilesMax $backupsMax"
backupsCurrent=`ls -A "$localMountPoint/$mountSubDir/$localIp" | grep -c "_fhem_backup.tar.gz"`
backupsDelete=$(($backupsCurrent-$backupsMax))
if [ "$backupsDelete" -gt "0" ]
then
echo "$backupsCurrent Backups vorhanden - nur $backupsMax aktuelle Backups werden vorgehalten - $backupsDelete Backups werden gelöscht"
ls -d "/$localMountPoint/$mountSubDir/$localIp/"* | grep "_fhem_backup.tar.gz" | head -$backupsDelete | xargs rm
else
echo "$backupsCurrent Backups vorhanden - bis $backupsMax aktuelle Backups werden vorgehalten"
fi
else
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup backupFilesMax no limit"
fi
backupsCurrent=`ls -A "$localMountPoint/$mountSubDir/$localIp" | grep -c "_fhem_backup.tar.gz"`
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup backupFiles $backupsCurrent"
echo "Mount wieder unmounten"
umount "$localMountPoint"
Statt Pushover möchte ich jetzt aber gerne meinen schon eingerichteten TelegramBot verwenden.
Kann mir jemand sagen, was ich ändern muss?
Neugierige Grüße,
Andreas
Hallo,
Ich habe folgendes bei mir eingefügt:
pushoverUser=""
pushoverToken=""
telegram="yes"
........
if [[ "$pushoverToken" != "" && "pushoverUser" != "" ]]
then
curl -s -F "token=$pushoverToken" -F "user=$pushoverUser" -F "title=FHEM $localIp" -F "message=Backup mit $fileSizeMB MB wird erstellt" https://api.pushover.net/1/messages.json
fi
if [[ "$telegram" != "" ]]
then
perl /opt/fhem/fhem.pl 7072 "set myTelegram message Backup mit $fileSizeMB MB wird erstellt"
fi
Statt myTelegram musst du natürlch dein Telegram device nehmen.
Gruß
Carlos
Vielen Dank für De Antwort! :)
Das sieht einfach aus... ;)
hmmm...
das funktioniert leider nicht. Es wird keine Telegram.Nachricht versendet... Ich habe Deinen Codeschnipsel exakt kopiert und den Device-Namen habe ich auch geändert... klappt nicht... :(
Probier mal das
perl /opt/fhem/fhem.pl 7072 "set DEINTELEGRAM message Backup mit $fileSizeMB MB wird erstellt"
von der shell aus aufzurufen.
Wenn das geht dann sollte es auch aus dem script gehen.
Gruß
Carlos
Jetzt hab ich es endlich testen können...
Leider lässt sich die Zeile nicht in der Shell aufrufen. Das heißt, sie lässt sich ausführen, es kommt aber kein Feedback und es wird keine Nachricht gesendet...
Damit hab ich es versucht:
sudo perl /opt/fhem/fhem.pl 7072 "set 9200_tebo_TelegramBot message TESTMessage Shell"
:(
Evtl hast du kein telnet device auf port 7072 definiert, oder es ist irgenwie anders konfiguriert.
Gruß
Carlos
das steht zu Telnet in der cfg:
...
define telnetPort telnet 7072 global
...
define allowed_telnetPort allowed
attr allowed_telnetPort basicAuth 7
attr allowed_telnetPort group allowed_DEVICE-GW
attr allowed_telnetPort password blablabla
attr allowed_telnetPort room 9000 FHEM
attr allowed_telnetPort validFor telnetPort
Ich würde also annehmen, dass Telnet definiert ist...?
Grundsätzlich funktioniert der TelegramBot ja auch... nur eben aus dem Skript heraus nicht...
ZitatGrundsätzlich funktioniert der TelegramBot ja auch
Wie?
Bei mir so:
NachrichtVersenden("-17XXX4008", "Liebe Bewohner, ...!");
#####################
# Versenden einer Nachricht mit Telegram
# Parameter1: ID des Empfängers, Parameter2: Nachrichtentext
#####################
sub NachrichtVersenden($$)
{
my ($Wer, $Was) = @_;
my $text = "set Nachrichten message @" . $Wer . " " . $Was;
Log 3, "Telegram an: " . $Wer . " Text: " . $Was;
fhem($text);
}
Beispielsweise so Auszug aus fhem.cfg
define 9950_not_FritzBox_Restart notify 9970_d_FritzBox_Restart:Restart {\
fhem ("set 9970_d_FritzBox_Restart Betrieb");;\
fhem ("set 9200_tebo_TelegramBot message \@Andreas_Hess 'FritzBox wird neu gestartet'");;\
fhem ("get FritzBoxMAIN tr064Command DeviceConfig:1 deviceconfig Reboot")\
}
Na ja da hast du dann die Lösung dafür.
Du hast basicauth konfiguriert und da geht dann halt ohne Paswort nix.
Du must das Passwort mit übergeben oder dir einen telnetport ohne Passwort definieren.
Gruß
Carlos
Carlos:
OK, das klingt einleuchtend... :D
Ein Telnetport ohne Passwort wäre vermutlich ein Unsicherheitsfaktor?
Wo würde denn das Passwort übergeben? So?
sudo perl /opt/fhem/fhem.pl 7072 PASSWORT "set 9200_tebo_TelegramBot message TESTMessage Shell"
Rabehd:
Das übernehme ich vielleicht...!
Moin,
lässt sich auch in FHEM mit einem doif lösen
([FHEM.Backup:info])(set dein_Telegram_bot msg [FHEM.Backup:info])
als Attribute noch ein do always
Grüße
Achim
Lies dir doch einfach mal im Wiki alles zum Thema
allowed https://wiki.fhem.de/wiki/Allowed (https://wiki.fhem.de/wiki/Allowed) und FritzBox_Webzugriff_absichern https://wiki.fhem.de/wiki/FritzBox_Webzugriff_absichern (https://wiki.fhem.de/wiki/FritzBox_Webzugriff_absichern) durch.
Da steht alles beschrieben.
Gruß
Carlos