Es ist Standard, den Raspberry Pi als Überwachungskamera zu betreiben Es gab keine telefonische Benachrichtigung über die angegebene Nummer, als eine Bewegung erkannt wurde, also habe ich eine erstellt.
Als Anwendung ...
Ein Anruf wird empfangen, indem die Bewegung des Kindes erkannt wird, das zu seinem Haus zurückkehrt. ↓ "Oh? Ich habe einen Anruf bekommen." Überprüfen Sie das Aussehen des Kindes mit Slack ↓ Selbst wenn Sie einen eingehenden Anruf AUS an Slack senden und eine Bewegung erkennen, wird er nicht empfangen
Die Kamera verwendet LOGICOOL Webcam HD-Bildqualität 1,2 Millionen Pixel C270 (Amazon) .
Informationen zu den Asterisk-Einstellungen finden Sie im Folgenden Erstellen eines IP-Telefonsystems mit Raspberry Pi und Asterisk (Teil 1) Erstellen eines IP-Telefonsystems mit Raspberry Pi und Asterisk (Teil 2)
Bewegung installieren
Terminal
apt-get install -y motion
Ändern Sie die motion.conf
Terminal
vi /etc/motion/motion.conf
motion.conf
# Threshold for number of changed pixels in an image that
# triggers motion detection (default: 1500)
#threshold 1500
threshold 8000 #Erhöhen Sie den Schwellenwert, der das Aufnehmen eines Bildes auslöst
:
# Target base directory for pictures and films
# Recommended to use absolute path. (Default: current working directory)
target_dir /tmp/motion #Legen Sie das Speicherziel des aufgenommenen Bildes fest
:
#Bewegung zum Zeitpunkt der Aufnahme.Führen Sie die py-Datei aus. Von den Parametern%f ist die erfasste Datei PATH
on_picture_save python /home/hasuo/motion/motion.py %f
Es ist erfolgreich, wenn eine Bewegung ausgeführt wird und die Kamera die Bewegung erkennt und eine Bilddatei in / home / tmp / generiert wird.
Terminal
motion -c /etc/motion/motion.conf
Erstellen Sie ein Konto bei Slack .
Überprüfen Sie das Token und die Kanal-ID für die Veröffentlichung mithilfe der Slack-API. https://api.slack.com/methods/channels.list/test
Drücken Sie bei der Anmeldung auf [Testmodus], um das Token und die Kanal-ID abzurufen.
URL
https://slack.com/api/channels.list?token=<Zeichen>&pretty=1
channels.Ergebnis der Listenausführung
{
"ok": true,
"channels": [
{
"id": "<Kanal ID>",
"name": "general",
"is_channel": true,
:
Bilder werden automatisch an Slack gesendet, wenn eine Bewegung mithilfe der Slack-API erkannt wird. Erstellen Sie zunächst einen Ort zum Posten in Slack.
motion.py
TOKEN = '<Zeichen>'
CHANNEL = '<Kanal ID>'
# slack API : files.upload
#Referenz: https://api.slack.com/methods/files.upload
####
def upload_file(file_path, channel):
with open(file_path,'rb') as f:
param = {'token':TOKEN, 'channels':CHANNEL,}
r = requests.post("https://slack.com/api/files.upload", params=param,files={'file':f})
if __name__ == "__main__":
arg = sys.argv
file_path = arg[1]
upload_file(file_path, CHANNEL)
Geben Sie der Quelldatei die Ausführungsberechtigung und prüfen Sie, ob Sie ein Bild mit einer geeigneten Bilddatei veröffentlichen können.
Terminal
chmod 755 motion.py
python motion.py <Bilddatei PFAD>
Als ich es auf Slack überprüft habe, wurde das Bild sicher gepostet.
Stellen Sie sicher, dass Sie eine Datei für den automatischen Aufruf erstellen, damit Asterisk automatisch anruft.
motion.py
TOKEN = '<Zeichen>'
CHANNEL = '<Kanal ID>'
CALLFILE_DIR = '<Dateiverzeichnis automatisch aufrufen>'
CALLFILE_NAME = 'auto_call.call' #Dateiname automatisch aufrufen
OUTGOING_DIR = '/var/spool/asterisk/outgoing/'
#Automatische Generierung ausgehender Dateien-> outgoing
####
def outgoing_call():
file_str = '''#
Channel: SIP/<Telefonnummer, die Sie benachrichtigen möchten>@<Abschnittsname, der außerhalb der Leitung gesendet werden soll>
MaxRetries: 0 #Die Anzahl der Anrufe beträgt 1
RetryTime: 60 #Wartezeit, um erneut anzurufen(Sekunden)
WaitTime: 30 #30 Sekunden lang anrufen
Context: <extensions.Kontexteinstellungen zusammen mit conf>
Extension: <extensions.Erweiterte Einstellungen zusammen mit conf>
Priority: 1'''
file = open(CALLFILE_DIR +CALLFILE_NAME, "w")
file.writelines(file_str);
file.close()
os.chmod(CALLFILE_DIR + CALLFILE_NAME, 0755)
shutil.move(CALLFILE_DIR + CALLFILE_NAME, OUTGOING_DIR)
if __name__ == "__main__":
outgoing_call()
Geben Sie der Quelldatei Ausführungsberechtigung und schreiben Sie die Berechtigung / var / spool / asterisk / outgoing / und prüfen Sie, ob der Aufruf durch Ausführen der Datei empfangen wird.
Terminal
chmod 755 motion.py
python motion.py
Verwenden Sie get_channel_info von Slack, um die neuesten Beiträge abzurufen, wenn eine Bewegung erkannt wird.
Der EIN / AUS-Status der Telefonbenachrichtigung bleibt erhalten, indem mit ConfigParser eine Einstellungsdatei erstellt wird.
Ich denke, es gibt einen klügeren Weg, aber ich konnte nicht daran denken, also diesmal.
motion.py
# coding:utf-8
import sys
import os
import shutil
import pprint
import urllib
import urllib2
import json
import ConfigParser
TOKEN = '<Zeichen>'
CHANNEL = '<Kanal ID>'
CALL_NOTIFY_START_STR = 'call'; #Telefonische Benachrichtigung ON Urteilszeichenfolge
CALL_NOTIFY_END_STR = 'nocall'; #Telefonische Benachrichtigung AUS Beurteilungszeichenfolge
INIFILE_PATH = 'config.ini' #Einstellungsdatei
SECTION = 'motion notify'
# slack API : channels.info
#Referenz: https://api.slack.com/methods/channels.info
####
def get_channel_info():
url = "https://slack.com/api/channels.info"
params = {'token' : TOKEN,
'channel': CHANNEL,
}
params = urllib.urlencode(params)
req = urllib2.Request(url)
req.add_header('Content-Type', 'application/x-www-form-urlencoded')
req.add_data(params)
res = urllib2.urlopen(req)
body = res.read()
result = json.loads(body)
return result
#Telefonische Benachrichtigung EIN/AUS-Einstellung
# slack_last_text :Der Textteil des letzten Beitrags, der von slack erhalten wurde
####
def set_call_notify(slack_last_text):
config = ConfigParser.SafeConfigParser()
if not config.has_section(SECTION):
config.add_section(SECTION)
#Holen Sie sich den Inhalt der Einstellungsdatei
try :
config.read(INIFILE_PATH)
ini_set = config.get(SECTION,'enable')
except Exception as e:
ini_set = 'FALSE'
if slack_last_text == CALL_NOTIFY_START_STR:
config.set(SECTION, 'enable', 'TRUE')
ini_set = 'TRUE'
elif slack_last_text == CALL_NOTIFY_END_STR:
config.set(SECTION, 'enable', 'FALSE')
ini_set = 'FALSE'
else:
config.set(SECTION, 'enable', ini_set)
config.write(open(INIFILE_PATH, 'w'))
return ini_set
if __name__ == "__main__":
channnels_info = get_channel_info()
is_call = set_call_notify(channnels_info['channel']['latest']['text'])
print is_call
Nach dem Posten von "Anruf ein" und "Anruf aus" in Slack ist es erfolgreich, wenn beim Aufnehmen die folgende Einstellungsdatei generiert wird.
config.ini
[motion notify]
enable = FALSE
Erstellen Sie darauf basierend eine Quelldatei.
Wenn ich es tatsächlich bediene ...
Bewegen Sie sich einfach vor die Kamera und sie wird veröffentlicht und Sie erhalten einen knallenden Anruf. Nicht mehr nervig (lacht)
Wenn ich "kein Anruf" gepostet habe, wurde das Foto an Slack gesendet und die telefonische Benachrichtigung wurde gestoppt, sodass dies abgeschlossen ist
Weitere Informationen zu Bewegung und Spiel finden Sie weiter unten Ich habe mit meinem ersten Raspberry PI eine Überwachungskamera hergestellt.
Es wäre interessant, die Sprachsynthese-Engine JTalk öffnen zu verwenden, um etwas zu sprechen, wenn eine Bewegung erkannt wird.
Ich habe mit meinem ersten Raspberry PI eine Überwachungskamera hergestellt.
Recommended Posts