[PYTHON] Telefonische Benachrichtigung, wenn eine Bewegung der Überwachungskamera auf dem Raspberry Pi erkannt wird

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.

Spezifikation

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

Umgebung

Die Kamera verwendet LOGICOOL Webcam HD-Bildqualität 1,2 Millionen Pixel C270 (Amazon) .

Verfahren

Sterncheneinstellungen

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)

Bewegungseinstellungen

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

Slack-Einstellungen

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,
              :

Bild hochladen

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.

無題.png

Telefonische Benachrichtigung

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

Telefonische Benachrichtigung EIN / AUS

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 ...

無題2.png

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.

Impressionen

Es wäre interessant, die Sprachsynthese-Engine JTalk öffnen zu verwenden, um etwas zu sprechen, wenn eine Bewegung erkannt wird.

Referenz

Ich habe mit meinem ersten Raspberry PI eine Überwachungskamera hergestellt.

Recommended Posts

Telefonische Benachrichtigung, wenn eine Bewegung der Überwachungskamera auf dem Raspberry Pi erkannt wird
Ein Memorandum bei der Herstellung einer Überwachungskamera mit Raspeye
Raspberry Pi "Honwaka Benachrichtigungslampe" Teil 2
Raspberry Pi "Honwaka Benachrichtigungslampe" Teil 1
Raspberry Pi "Honwaka Benachrichtigungslampe" Teil 3
Warum DetectMultiScale () auf Raspberry Pi B + langsam ist
Was ist Raspberry Pi?
Pigpio auf Himbeer-Pi
Raspberry Pi Videokamera
Cython auf Raspberry Pi
Erstellen Sie eine WEB-Überwachungskamera mit Raspberry Pi und OpenCV
Ich habe zum ersten Mal eine Überwachungskamera mit Raspberry PI gemacht.
Pyenv auf Raspberry Pi eingeführt
Verwenden Sie NeoPixel mit Himbeerkuchen
Installieren Sie OpenCV4 auf Raspberry Pi 3
Installieren Sie TensorFlow 1.15.0 auf Raspberry Pi
Ein Fehler beim Einfügen von Pygame in Python3 auf Himbeer-Pi wurde behoben
Testen der Kommunikation mit Raspberry Pi
MQTT auf Raspberry Pi und Mac
Installieren Sie ghoto2 auf Raspberry Pi (Hinweis)
Versuchen Sie es mit ArUco mit Raspberry Pi
OpenCV-Installationsverfahren auf Raspberry Pi
Ein- / Ausschalten von Raspberry Pi mit Arduino
Erkennen Sie den Schalterstatus mit Raspberry Pi 3
Installieren Sie OpenMedia Vault 5 auf Raspberry Pi 4
L Chika mit Himbeer-Pi C #
Erstellen Sie wxPython unter Ubuntu 20.04 auf Himbeer-Pi 4
Deaktivieren Sie IPv6, wenn ssh von Raspeye 4 sehr langsam ist
Grundeinstellungen für die Verwendung des Grove Pi + Starterkits und der Kamera mit Raspberry Pi