ich habe mir mit einem RPi und Kamera eine Klingel für unser Haus gebaut.
Was ich mit dem Pythonprogramm vor habe:
wenn es klingelt, soll die Kamera an gehen und 30 sec aufnehmen.
während der Aufnahme wird eine Video-Datei gespeichert und zu Beginn/Mitte/Ende je ein Bild gespeichert.
Nun soll eine Telegram Nachricht an 2 Empfänger versendet werden mit der Klingelbenachrichtigung und den 3 Bildern.
Danach soll die Klingel/Kamera wieder auf neue Signale warten.
Das meiste geht soweit, jedoch bin ich im Programmieren irgendwo beim C64 Basic stehen geblieben und ich fürchte, das Programm ist erstens nicht sehr robust und zweitens, nennen wir es grob, programmiert.
Manchmal bleibt das Programm eingefroren, nach dem hier:
Code: Alles auswählen
http://192.168.100.111:9000/?action=stream: Invalid data found when processing inputeed=0.962x
frame= 732 fps= 24 q=-1.0 Lsize= 33241kB time=00:00:29.24 bitrate=9313.0kbits/s speed=0.96x
video:33238kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.011344%
Aufzeichnung beendet
Terminated
Klingel-19_05_06_20_39_33.mp4
Oder was man geschickter machen kann usw.
Ich hoffe, das ist ok und ihr habt etwas Spass daran mir unter die Arme zu greifen:
Code: Alles auswählen
#!/usr/bin/env python
#coding: utf8
import time
import RPi.GPIO as GPIO
import os
import subprocess
import requests
#GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
# PIN festlegen an dem das Signal kommt
optokoppler = 18
relais = 11
#Telegram konfiguration
telegramurl ="https://api.telegram.org/bot"
bottoken = "7000147:AAGAQ0002HzNim00000spp2w5lNY18"
kate = "76000197"
home/pi/cam
erwin = "700000094"
chatroomid1 = kate
chatroomid2 = erwin
# DEV Mode um Verkabelung zu sparen
developermode = 1
# Konfigurationsvariablen
video_start_kommando = 'mjpg_streamer -i "/usr/local/lib/input_uvc.so -d /dev/video0 -n -r 1024x768 -f 24 –q 80" -o "/usr/local/lib/output_http.so -n -w /usr/local/www -p 9000" -o "/usr/local/lib/output_file.so -f /home/pi/cam -d 12000"'
video_stopp_kommando = 'sudo killall mjpg_streamer'
video_aufnahme_kommando = 'ffmpeg -i "http://192.168.100.111:9000/?action=stream" -vcodec copy -an -t 30 -bufsize 2048k -y "/home/pi/cam/Klingel-$(date +"%y_%m_%d_%H_%M_%S").mp4"'
# Pin optokopller als Eingang, relais als Ausgang festlegen
GPIO.setup(optokoppler, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(relais, GPIO.OUT)
# Klingelrelais generell anschalten
GPIO.output(relais, GPIO.HIGH)
# Klingelzähler
i = 0
X = 0
# Endlosschleife
while 1:
# Eingang lesen
if (GPIO.input(optokoppler) == GPIO.LOW) or (developermode == 1):
# Videoaufzeichnung starten
i = i + 1
print("Videoaufzeichnung gestartet")
subprocess.Popen(video_start_kommando, shell=True)
subprocess.Popen(video_aufnahme_kommando, shell=True)
time.sleep(31)
os.system(video_stopp_kommando)
print("Aufzeichnung beendet")
#Telgram Nachricht versenden
# Send a photo to a chat room (chat room ID retrieved from getUpdates)
mymessage = "Es hat gerade das " + str(i) + ". mal geklingelt."
url = telegramurl + bottoken + "/sendMessage"
params = { "chat_id": chatroomid1, "text": mymessage }
r = requests.get(url, params = params)
result = r.json()
params = { "chat_id": chatroomid2, "text": mymessage }
r = requests.get(url, params = params)
result = r.json()
x = 0
while x < 3:
x = x + 1
path = ("/home/pi/cam/")
photofile = os.listdir(path)[x]
print(photofile)
url = telegramurl + bottoken + "/sendPhoto"
params = { "chat_id": chatroomid1 }
files = { "photo" : open(path + photofile, "rb") }
r = requests.get(url, params = params, files = files)
result = r.json()
params = { "chat_id": chatroomid2 }
files = { "photo" : open(photofile, "rb") }
r = requests.get(url, params = params, files = files)
result = r.json()
time.sleep(1)
x = 0
os.system('sudo rm /home/pi/cam/*.jpg')