[Erledigt] Im Dialplan per Script ein Snapshot erzeugen für die Fritzbox (Türsprechanlage)

Allodo

Mitglied
Mitglied seit
15 Apr 2013
Beiträge
228
Punkte für Reaktionen
10
Punkte
18
Hallo,

ich habe meine Fritzbox 7490 als Client am Asterisk angemeldet, sowie meine Türsprechanlage. Das Ganze funktioniert mittlerweile ganz gut. Nun möchte ich auf meinen FritzFonen auch gerne sehen, wer denn
da klingelt. Asterisk läuft einem RPi2 (Debian Jessie 8.x).

Die Türsprechanlage bietet mir einen RTSP-Stream und ein cgi-Script zum holen des Videostreams bzw eines Snapshots an. Nun habe ich versucht per wget ein Snapshot zu holen, was auch gut funktioniert.
Ein Test mit avconv um ein Snapshot aus dem RTSP-Stream zu holen verlief ebenfall positiv. Jedoch nur auf der Konsole.

Da das Ganze ja automatisiert laufen soll, wurde mir gesagt, ich solle das in ein Bash Script packen und in dem Dialplan dieses Script aufrufen. Nur leider klappt das nicht und ich kenne mich ehrlich gesagt nicht
mit Scripting aus, geschweige den besonders mit Asterisk :(

Zum besseren Verständnis füge ich mal das Script, sowie mein Versuch in der extensions.conf ein.
snapshot.sh Variante 1:
Code:
#!/bin/sh
wget -T5 -t1 -qO /tmp/snapshot.jpg http://admin:[email protected]/cgi-bin/snapshot.cgi
snapshot.sh Variante 2:
Code:
#!/bin/sh
avconv -i 'rtsp://admin:[email protected]/cam/realmonitor?channel=1&subtype=0' -r 1 -vsync 1 -f image2 /tmp/snapshot.jpg

extensions.conf:
Code:
[ausgehend]
exten => _9901,1,Set(CALLERID(name)=VTO2000A)
exten => _9901,n,Dial(Local/alle@tfe-zuhause,50,w)

[tfe-zuhause]
exten =>  alle,1,Ringing()
exten =>  alle,n,System(snapshot.sh)
exten =>  alle,n,Dial(Fritzbox)
...

Hier mal die Debugausgabe:
Code:
<------------>
    -- Executing [9901@ausgehend:1] Set("SIP/8001-00000043", "CALLERID(name)=VTO2000A") in new stack
    -- Executing [9901@ausgehend:2] Dial("SIP/8001-00000043", "Local/alle@tfe-zuhause,50,w") in new stack
    -- Called Local/alle@tfe-zuhause
    -- Executing [alle@tfe-zuhause:1] System("Local/alle@tfe-zuhause-00000014;2", "snapshot.sh") in new stack
  == Spawn extension (tfe-zuhause, alle, 1) exited non-zero on 'Local/alle@tfe-zuhause-00000014;2'
  == Everyone is busy/congested at this time (1:0/0/1)
    -- Auto fallthrough, channel 'SIP/8001-00000043' status is 'CHANUNAVAIL'

Irgendwie scheint Asterisk aus der Shell nicht wieder zurückzukehren zum Dialplan. Hat jemand vielleicht einen Tip, wie ich das Ganze realisieren kann?

Recht herzlichen Dank im voraus für Eure Hilfe :)
 
Zuletzt bearbeitet:
Moin

1. Der Asterisk läuft als Benutzer: asterisk
2. Alle Dateien die Asterisk im laufenden Betrieb benutzt gehören deswegen idealerweise: asterisk.asterisk
3. TrySystem() und System() liefern keine Rückgabewerte
4. Benutze dafür lieber SHELL() mit Angabe von Interpreter bei voller Pfadangabe

Beispiel für SHELL(), wenn sich snapshot.sh in /etc/asterisk befindet...
Code:
same => n,SET(SNAPSHOT=${SHELL(/bin/sh /etc/asterisk/snapshot.sh)})
same => n,Verbose(Snapshot: ${SNAPSHOT})

Jetzt noch snapshot.sh SHELL() kompatibel machen...
/etc/asterisk/snapshot.sh
Code:
#!/bin/sh
wget -q -O /tmp/snapshot.jpg http://admin:[email protected]/cgi-bin/snapshot.cgi && echo $? || echo $?
Ergebnis: (Asteriskkonsole: asterisk -rvvvvv)
Snapshot: 0
(Hat geklappt, alles gut - Alles über 0 = Fehler)

Lösche aber vorher die /tmp/snapshot.jpg.
Denn wenn eine existiert, die nicht dem User asterisk gehört, dann darf Asterisk die nicht überschreiben.
...und es kommt nicht: Snapshot: 0
 
Zuletzt bearbeitet:
Danke :)

Werde ich mal so ausprobieren und dann berichten, ob es geklappt hat.

EDIT:
Es funktioniert :)
Mit wget hat es ca. 5 Sekunden gedauert, bis der Snapshot erstellt und anschließend mit dem Dialplan fortgefahren wurde, sprich es geklingelt hat.
Natürlich unschön :(

Ich habe es dann mal mit avconv ausprobiert und siehe da, es ist nur noch eine Verzögerung von 1 - 2 Sekunden vorhanden. Die Dame sagt noch das geklingelt wird und schwupps, Snapshot da, es klingelt und der Snapshot wird zufriedenstellen im FritzFon angezeigt :)

Recht herzlichen Dank noch einmal für die Hilfe. TOP!!!!
 
Zuletzt bearbeitet:
Hallo Allodo,

habe auch eine VTO2000A und wollte das mit dem Livebild erstmal ohne den Weg über Asterisk ausprobieren.
Habe da gleich das Problem, das mir das FritzFon sagt, dass das Bild nicht mehr verfügbar ist.
Habe das hier mit der IP von der VTO in der Fritzbox unter DECT -> Internetdienste -> Livebild eingefügt.
http://admin:[email protected]/cgi-bin/snapshot.cgi

Wenn ich den Link im Browser öffne, funktioniert's.

Hast du einen Tipp?
 
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.