FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ahstax am 11 November 2018, 11:45:18

Titel: Nachricht via Telegram wenn Backup erfolgt ist
Beitrag von: ahstax am 11 November 2018, 11:45:18
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
Titel: Antw:Nachricht via Telegram wenn Backup erfolgt ist
Beitrag von: carlos am 11 November 2018, 13:58:54
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
Titel: Antw:Nachricht via Telegram wenn Backup erfolgt ist
Beitrag von: ahstax am 11 November 2018, 17:56:50
Vielen Dank für De Antwort!  :)

Das sieht einfach aus...  ;)
Titel: Antw:Nachricht via Telegram wenn Backup erfolgt ist
Beitrag von: ahstax am 13 November 2018, 21:01:51
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... :(

Titel: Antw:Nachricht via Telegram wenn Backup erfolgt ist
Beitrag von: carlos am 13 November 2018, 22:18:06
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
Titel: Antw:Nachricht via Telegram wenn Backup erfolgt ist
Beitrag von: ahstax am 16 November 2018, 17:32:39
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"
:(
Titel: Antw:Nachricht via Telegram wenn Backup erfolgt ist
Beitrag von: carlos am 16 November 2018, 20:09:27
Evtl hast du kein telnet device auf port 7072 definiert, oder es ist irgenwie anders konfiguriert.
Gruß
Carlos
Titel: Antw:Nachricht via Telegram wenn Backup erfolgt ist
Beitrag von: ahstax am 16 November 2018, 20:13:37
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...
Titel: Antw:Nachricht via Telegram wenn Backup erfolgt ist
Beitrag von: rabehd am 16 November 2018, 20:22:39
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);
}
Titel: Antw:Nachricht via Telegram wenn Backup erfolgt ist
Beitrag von: ahstax am 16 November 2018, 20:37:16
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")\
}
Titel: Antw:Nachricht via Telegram wenn Backup erfolgt ist
Beitrag von: carlos am 16 November 2018, 22:23:19
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
Titel: Antw:Nachricht via Telegram wenn Backup erfolgt ist
Beitrag von: ahstax am 17 November 2018, 05:45:09
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...!
Titel: Antw:Nachricht via Telegram wenn Backup erfolgt ist
Beitrag von: CBSnake am 17 November 2018, 08:11:00
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
Titel: Antw:Nachricht via Telegram wenn Backup erfolgt ist
Beitrag von: carlos am 18 November 2018, 14:05:46
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