Anruf bei FTP-Upload (Webcam-Alarm)

lxuser

Mitglied
Mitglied seit
4 Nov 2004
Beiträge
287
Punkte für Reaktionen
0
Punkte
0
Hallo!

Ich habe hier eine Webcam im LAN hängen. Diese überwacht meine Bettlägrige Oma und verfügt über Bewegungserkennung.

Im Moment versendet die Webcam bei einem Alarm eine Mail und auf der Fritzbox 7170 mit 29.04.37ds26-15.2 ruft checkmaild diesen Mail-Account ab -> Telefonbenachrichtigung.

Aufgrund einiger Nachteile (Fehlalarm durch Spam, Ausfall des Internetverbindung, Latenz durch Zyklus beim Abrufen des Mail-Accounts...) dieser Methode würde ich den Umweg über eine Mail und Internet gerne vermeiden.

Bei der Webcam hab ich blöderweise eine ohne offene Quelltexte genommen. Daher kann sie leider nur per Mail oder FTP-Upload benachrichtigen und ist nicht erweiterbar.

Mit dem FTP-Upload könnte ich aber bei jedem Alarm eine Datei auf der Fritzbox ablegen lassen. Wie müsste dann ein einfaches Shellskript aussehen, das ich per crond jede oder jede zweite Minute aufrufe und das bei einer neuen Datei dann einen Anruf auf eine bestimmte Telefonnummer veranlasst.

Edit: Oder geht es sogar über die Log-Datei vom ftp auf der Fritzbox?

Über Tipps würde ich mich sehr freuen!

Viele Grüsse
Mario
 
Zuletzt bearbeitet:
Schau dir mal "Callmonitor" oder "dtmfbox" an, da ist jeweils ein "Anruf" mit möglich.

Jörg
 
Danke für den Tipp!

Ok, die sechs Skripte aus dtmfbox3.9 schaue ich mir gerade an. Aber viel hab ich leider noch nicht gefunden.

Der Anruf soll auf eine vorher festgelegte Handynummer gehen und über eine ansonsten nicht genutzte MSN damit sofort der Alarm erkannt wird.

Bei der Erkennung der durch die Webcam per FTP auf die Fritzbox hoch geladenen Datei bin ich mir auch nicht sicher, wie ich da ansetzten soll. Timestamp, Checksumme, FTP-Log oder?

Auf jedem Fall muss ich mir erstmal wieder ein paar Unterlagen über Shell-Programmierung mit Beispielen suchen. das letzte Mal ist schon ewig her und hatte auch nicht wirklich Tiefe.

Viele Grüsse
Mario
 
Da gibt es sicher endlos vielle Möglichkeiten. Die Frage ist ja auch, wie "zeitnah" das erfolgen soll/muss.
Die "Billiglösung" (ohne cron) wäre sicher ein ewig laufendes Skript was "die Datei abfragt", bei "Alarm" rausruft, ansonsten xSekunden schläft und wieder von vorne anfängt....

Die "Miniversion" fürs Anrufen wäre (dafür brauchst du nc auf der Box):
Code:
echo "ATD<Deine Rufnummer>" | nc 127.0.0.1 1011 ; sleep 5 ; echo "ATH0" | nc 127.0.0.1 1011 &
Dann sollte es 5 Sekunden klingeln.

Jörg
 
MaxMuster schrieb:
Da gibt es sicher endlos vielle Möglichkeiten. Die Frage ist ja auch, wie "zeitnah" das erfolgen soll/muss.
Die "Billiglösung" (ohne cron) wäre sicher ein ewig laufendes Skript was "die Datei abfragt", bei "Alarm" rausruft, ansonsten xSekunden schläft und wieder von vorne anfängt....

Das reicht alle zwei Minuten. Es geht primär darum falls meine Oma doch mal aus dem Bett fällt oder alleine versucht aufzustehen das meine Eltern benachrichtigt werden. Normalerweiser ist eh immer einer zuhause und hat das Babyfon bei sich. Nur wenn sie wenigstens mal wieder in Ruhe zusammen einkaufen könnten, wäre es schön. Zur Zeit hetzen sie sich immer ab, obwohl meine Oma meistens eh stundenlang ruhig schläft. Die Lösung mit der Webcam würde ihnen doch etwas mehr Ruhe und Freiheit geben.
Crond ist übrigens auch auf der Box aber noch nicht aktiviert. Mal sehen wie groß mein Ressourcenverbrauch schon ist ist und was crond so benötigt. Sollte aber kein Problem sein.

MaxMuster schrieb:
Die "Miniversion" fürs Anrufen wäre (dafür brauchst du nc auf der Box):
Code:
echo "ATD<Deine Rufnummer>" | nc 127.0.0.1 1011 ; sleep 5 ; echo "ATH0" | nc 127.0.0.1 1011 &
Dann sollte es 5 Sekunden klingeln.

nc habe ich auf der Box. Der Aufruf ist also schon mal super.
Jetzt mal sehen, wie ich die hochgeladene Datei oder dedirkt den FTP-Upload erkennen kann. Dazu sollte ich im Netz bestimmt Beispiele finden können. Ansonsten kann mir da bestimmt auch noch ein Freund, der Programmierer ist, weiterhelfen :)
Das Ergebnis werde ich dann natürlich hier posten. Wenn aber jemand vorher ein paar Zeilen Code hat, fände ich das auch super.

Viele Grüsse
Mario
 
Wie wäre es mit:
Code:
x=`md5sum /var/tmp/datei`
while true
do
  if  [ "`md5sum /var/tmp/datei`" != "$x" ]; then
         echo "hat sich geändert";
         echo "ATD<Deine Rufnummer>" | nc 127.0.0.1 1011 ; sleep 5 ; echo "ATH0" | nc 127.0.0.1 1011 &
         x=`md5sum /var/tmp/datei`
  fi
done

Jörg
 
Hallo Jörg!

Echt super, das probiere ich morgen früh, wenn ich wieder Zugriff auf die Fritzbox habe, direkt mal aus.

Schon mal vielen Dank!

Viele Grüsse
Mario
 
Vielleicht kannst Du bei Bewegung ein Bild per FTP abschicken. Einen FTP-Server hast Du ja auf der Box. D.h. Du mußt nur den ftp-Ordner überwachen, ob ein neues Bild eingegangen ist. Das kannst Du auch mit md5sum erkennen. Da Du den Mod auf der Box hast, kannst Du mit "callaction dial 3 123456789 ; sleep 3 ; callaction hup" einen Anruf absetzen.
Der ftp-Server kann natürlich auch im Internet laufen - dann kannst Du den "OmaStatus" auch online sehen... ;-)
Die callaction-Syntax mußt Du nochmal prüfen... die habe ich nicht mehr genau im Kopf...

Probiers mal aus...
 
Dank weiterer netter Hilfe hab ich jetzt ein lauffähiges Skript:

Code:
max=100 
fdir=/var/media/ftp/uStor01/Webcam/snapshots/ 
interval=30 
number=xxxxxxxxxxxxxxxx 
 
x=`ls -1 $fdir | wc -l` 
while true 
  do y=`ls -1 $fdir | wc -l` 
  if [ $y -ne $x ] 
    then echo "ATD$number" | nc 127.0.0.1 1011 
    sleep 5 
    echo "ATH0" | nc 127.0.0.1 1011 & 
    if [ $y -gt $max ] 
      then oldest=`ls -1t $fdir | tail -1` 
      rm $fdir$oldest 
    fi 
    x=`ls -1 $fdir | wc -l` 
    fi 
  sleep $interval 
done

Die Webcam lädt mir bei jedem Alarm ein neues Bild mit einem Dateinamen mit der Zeit auf den FTP und überschreibt nicht das alte Bild. Deshalb die andere Abfrage und die Limitierung mit max auf hier 100 Bilder.

So läuft es zumindest ganz gut.

Welchen Vorteil hat jetzt noch
meimi039 schrieb:
"callaction dial 3 123456789 ; sleep 3 ; callaction hup"
gegenüber
Code:
 then echo "ATD$number" | nc 127.0.0.1 1011 
    sleep 5 
    echo "ATH0" | nc 127.0.0.1 1011 &


Viele Grüsse
Mario
 
Zuletzt bearbeitet:
Mal wieder ein neues Skript.

Code:
#! /bin/ash

fdir=/var/media/ftp/uStor01/Webcam/snapshots/ 
number=xxxxxxxxxxxxxxx

#does fdir exist?
if [ -d $fdir ]; then
  #directory exists, count elements
  cnt=`ls -1A $fdir | wc -l`
  if [ $cnt -gt 0 ]; then
    #elements present, initiate call
    echo "ATD$number" | nc 127.0.0.1 1011
    sleep 5
    echo "ATH0" | nc 127.0.0.1 1011 &
    #remove all files
    rm $fdir*
  fi
else
  echo "Directory not found" >&2
fi

Das alte Skript hatte sich über Nacht aufgehangen und der Sleep-Prozess fast 5% Speicher gebraucht.

Ausserdem war die Schleife mit sleep eh etwas unflexibel. Das neue Skript wird über cron aufgerufen und daher kann es jetzt auch nur zu bestimmten Tageszeiten ausgeführt werden.

Dazu ist die Speicherung von mehreren Bildern raus geflogen. Dadurch kann der FTP-Upload auch in die Ramdisk wandern. Mit dem weggefallenem USB-Stick ist jetzt eine Fehlerquelle weniger vorhanden.

Gruß Mario
 
inotify_tools

Hallo,

beim Durchgehen der Pakete von freetz bin ich auf die "inotify_tools" gestoßen. Wäre das nicht eine bessere Lösung um zu prüfen ob ein Upload durch die Webcam erfolgt ist?

Viele Grüsse
Mario
 
Leider funktioniert bei mir der Befehl:

echo "ATD<Deine Rufnummer>" | nc 127.0.0.1 1011 ; sleep 5 ; echo "ATH0" | nc 127.0.0.1 1011 &

nicht. Ich bekomme zwar 2x OK auf der Shell aber mehr passiert nicht. Mein eigenes Telefon per

echo "ATD**9" | nc 127.0.0.1 1011

klingeln zu lassen funktioniert hingegeben. Ich habe einen analogen Anschliss

Danke Gruß
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.