Hallo liebe Raspberry-Gemeinde..
Hatte öfters das böse Erlebnis, dass meine Tochter morgens den Kühlschrank so doll zugehauen hat, dass dieser wieder einen kleinen spalt aufgesprungen ist und ich es leider erst um 18:00 gemerkt habe als alle wieder im Haus waren..
Habe mir dann einen Funksensor nach meigrafd's Anleitung gebastelt welcher die Kühlschranktemperatur überwacht und mich anruft sobald ein bestimmter Wert überschritten wird, so kann ich schnell nochmal umdrehen und den Kühlschrank vernünftig schließen..
Deswegen habe ich mich mal schnell hingesetzt und die Funktion zum Anruf auslösen von den Sensoren gebastelt.. Ich zeige euch wie ihr mit den Funksensoren aus meigrafd's Thread einen Alarmanruf starten könnt wo euch per Sprachnachricht gesagt wird warum der Alarm ausgelöst wurde und euch per Pushnachricht zusätzlich eine Textnachricht aufs Handy senden lassen könnt.
Voraussetzung in meinem Fall ist eine Fritzbox in dem wir ein IP/LAN Telefon angelegt haben. Es funktioniert aber auch mit jedem anderen SIP Account.
Desweiteren muss euer Raspberry auf Port 80 bzw. der Webserver aus dem Internet erreichbar sein um die Warnungen zurückzusetzen.
Vorweg: Ich arbeite immer mit dem Benutzer "root" und nicht mit "pi" damit ich mich nicht immer mit dem "sudo" befehl rumschlagen muss. Falls ihr also nicht als "root" User arbeitet, ist vor jeden Befehl das Prefix "sudo" zu stellen um sicher zu gehen dass die erforderlichen Rechte vorliegen.
Als erstes erstellen wir das Verzeichnis sip-tools im Ordner Root
und laden ein PERL-Script namens Speak.pl von Github herunter, welches einen Text als mp3 Datei von der Google-Translate homepage runterlädt.
Danach wechseln wir in das Verzeichnis sip-tools welches wir gerade erstellt haben...
..und machen das gerade runtergeladene Script ausführbar.
Als nächstes versuchen wir das Script aufzurufen mit dem Befehl
.. Bekommt ihr ein "Usage: ./speak.pl LANGUAGE IN.txt OUT.mp3" Hinweis angezeigt? Gut! Dann könnt ihr die Schritte Perlmodule installieren überspringen und weiter unten bei "Nach dem installieren der Perlmodule" weitermachen.
Perlmodule Installieren:
Bei mir kam beim ersten versuch speak.pl auszuführen eine Fehlermeldung "Can't locate HTTP/Cookies.pm ....." das bedeutet, dass ein Perlmodul, in diesem Fall HTTP::Cookies nicht installiert ist.
Wir installieren das Perlmodul mit
Falls noch nie mit "cpan" gearbeitet wurde dann kommt eine Meldung dass CPAN erst konfiguriert werden muss. Wir geben "yes" ein und drücken Enter.
Jetzt erscheint die Frage ob CPAN automatisch Mirrors für die runterzuladenden Module festelegen soll. Wir geben "yes" ein und drücken Enter.
Ihr habt jetzt kurz Zeit für eine Zigarette..
Jetzt versuchen wir nochmal das Script auszuführen..
Bei mir wurde jetzt das WWW::Mechanize Modul nicht gefunden.
Also fix nochmal installieren mit
.. jetzt habt ihr Zeit für einen Kaffee..
Nach dem installieren der Perlmodule installieren wir uns das Paket "sox", welches für uns die MP3 Dateien behandelt die im Script speak.pl erzeugt werden.
und installieren gleich hinterher das Paket für Sox welches mit MP3 umgehen kann..
Als nächstes installieren wir uns das Paket "asterisk" mit welchem man bei Bedarf eine komplette Telefonanlage aufsetzen kann.. Aber das wollen wir in diesem Fall nicht.
Jetzt bearbeiten wir die Asterisk Konfigurationen entsprechend unserer Fritzbox in dessen Webinterface wir unter dem Punkt "Telefongeräte" ein IP Telefon angelegt haben. -Dazu gehe ich hier nicht weiter ein. -
Die Asterisk Dateien finden wir im Verzeichnis /etc/asterisk/
Die Datei sip.conf sieht bei mir folgendermaßen aus (Heimnetz läuft unter 192.168.1.0 und die Fritzbox ist unter 192.168.1.1 erreichbar.
Mein User für das IP Telefon in der Fritzbox ist 621 .. Beachtet in der Konfiguration, dass ihr die beiden Einträge <<EUER PASSWORT>> mit eurem Passwort das ihr in der Fritzbox für das IP Telefon festgelegt habt ersetzt. Ung gegebenenfalls auch den Benutzernamen in den Zeilen.
Sip.conf
[general]
allowguest=no
port = 5060
bindaddr = 0.0.0.0
qualify = no
disable = all
allow = alaw
allow = ulaw
videosupport = yes
dtmfmode = rfc2833
srvlookup = yes
localnet=192.168.1.0/255.255.255.0
directmedia = no
nat = yes
register=621:<<EUER PASSWORT>>@192.168.1.1/621
[localphone]
type = friend
insecure = invite,port
nat = no
canreinvite = no
authuser = 621
username = 621
fromuser = 621
fromdomain = fritz.box
secret = <<EUER PASSWORT>>
host = 192.168.1.1
dtmfmode = rfc2833
context = incoming
disallow = all
allow = ulaw
allow = alaw
transport = udp
Alles anzeigen
Wir laden jetzt die Pushbullet App auf unser Handy runter um zusätzlich zum Anruf eine Pushbenachrichtigung in Textform zu erhalten.
Wenn die App runtergeladen ist und man sich registriert hat, ruft man über die Homepage pushbullet.com den Account auf und generiert sich einen
"Accesstoken" unter "Account settings". Diesen Accesstoken brauchen wir im nächsten Schritt.
Ich habe mir jetzt ein kleines Bash-script erstellt, über welches man die zu sprechenden Nachricht + Telefonnummer übergeben kann.
Dieses Script im Verzeichnis /root/sip-tools/ als Datei anruf.sh speichern und dabei den Pushbullet Accesstoken in Zeile 18 vor dem : einfügen sowie die IP/Webadresse von der eure Raspberry aus dem Internet erreichbar ist.
anruf.sh
#!/bin/bash
if [ -f /root/sip-tools/aktiv ]
then
echo Es wurde kein Reset gemacht
else
rm -rf /root/sip-tools/Text.mp3.tmp/
wait
rm -rf /root/sip-tools/Text.txt
wait
rm -rf /root/sip-tools/anruf.call
wait
Nummer=$1
shift
Nachricht=$@
echo -e "Channel: SIP/localphone/$Nummer\nApplication: Playback\nData: /var/lib/asterisk/sounds/custom/play" >> /root/sip-tools/anruf.call
echo $Nachricht >> /root/sip-tools/Text.txt
curl -u <<ACCESSTOKEN>>: -d type=note -d title="Hinweis" -d body="$Nachricht - Reset: http://<<WEBADRESSE EURES RASPBERRYS>>/Sensor/reset.php" -X POST https://api.pushbullet.com/api/pushes
wait
/root/sip-tools/speak.pl de /root/sip-tools/Text.txt /root/sip-tools/Text.mp3 &> /dev/null
wait
sox /root/sip-tools/Text.mp3 -r 8000 -b 16 -c 1 /var/lib/asterisk/sounds/custom/play.wav
wait
mv /root/sip-tools/anruf.call /var/spool/asterisk/outgoing/
echo -e "Warnung aktiv" >> /root/sip-tools/aktiv
fi
if [ $1 = "reset" ]; then
rm -rf /root/sip-tools/aktiv
fi
Alles anzeigen
Wir befinden uns aktuell im Verzeichnis /root/sip-tools/ und machen jetzt das gerade erstellte Bashscript ausführbar
Jetzt könnt ihr schonmal ein Testanruf machen..
Dazu führen wir das Bashscript aus welches wir gerade als Anruf.sh gespeichert haben.
Es würde jetzt an Anruf an die Nummer 040123456 gehen, mit der Nachricht "Dies ist eine Testnachricht" und gleichzeitig müsste diese Nachricht auch als Textnachricht auf eurem Handy erscheinen.
Jetzt müssen wir ein Reset machen, um zu bestätigen dass die Warnung zurückgesetzt werden kann und wir neue Warnungen empfangen wollen
Damit wir eine Warnung erhalten von den Funksensoren aus meigrafd's Thread, müssen wir die add.php Datei im Verzeichnis /var/www/Sensor/ ändern
und zwar ändern wir das Ende der Datei
folgendermaßen ab:
}
$db = db_con($DBfile);
$insert = db_query($SQL);
}
$temp2 = round($temp / 100);
if ($temp2 > 20 && $nodeid == 1) {
shell_exec("sudo /root/sip-tools/anruf.sh 040123456 Die von Sensor 1 gemessene Temperatur betraegt $temp2 grad.");
}
}
?>
Alles anzeigen
Dies bewirkt, dass Sobald die Temperatur von NodeID 1 (wie in der config.php der Funksensoren festgelegt) über 20° steigt, ein Anruf an die Nummer 040123456 abgesetzt wird.
Leider gibt es in der Textnachricht aufs Handy Probleme mit Umlauten (ä,ö,ü).
Deswegen habe ich ä durch ae ersetzt. Aber die Sprachnachricht wird natürlich trotzdem korrekt ausgegeben.
Nun erstellen wir noch eine reset.php Datei im Verzeichnis /www/Sensor/ die von außerhalb aufgerufen werden kann, damit man nicht alle 5 Minuten die gleiche Meldung erhält.
Dazu muss in eurer Firewall/Router der Port 80 von eurem Raspberry freigegeben werden für den Zugriff von außerhalb, desweiteren solltet ihr eine DynDNS Adresse einrichten um den Raspberry immer von außerhalb zu erreichen.
reset.php
Als letzten Schritt fügen wir den User www-data über den Befehl
in die Datei ein die sich automatisch öffnet und sagen, dass www-data das Script /root/sip-tools/anruf.sh mit Rootrechten ausführen darf.
Dafür fügen wir am Ende eine neue Zeile ein:
und speichern die Datei mit STRG+X und Y als bestätigung.
Das wars. Jetzt einmal
und euer Raspberry ist bereit zum Telefonieren.
Hier noch ein kleines Video (leider habe ich beim Anruf zu spät den Lautsprecher aktiviert, deswegen ist die Ansage am Anfang nicht vollständig im Video zu hören..):
Dies ist mein erstes Tutorial. Kritik und Verbesserungsvorschläge werden gerne angenommen..
Gruß
Änderungen:
20.07.14: Funktion zum übergeben der Rufnummer im Script hinzugefügt. z.B.: ./anruf.sh 040123456 Testnachricht ... Um die Änderungen zu übernehmen: anruf.sh und add.php bearbeiten wie in meiner Anleitung oben.
20.07.14: Damit wir nicht alle 5 Minuten einen Anruf bekommen, habe ich eine Reset Funktion eingebaut. Man muss einen Reset ausführen nachdem man einen Anruf bekommen hat, solange dieser Reset nicht durchgeführt wurde.. ERHÄLT MAN KEINEN NEUEN ANRUF!! Um die Änderungen zu übernehmen: anruf.sh neu schreiben und reset.php wie in meiner Anleitung hinzufügen.