60 lines
1.5 KiB
Python
60 lines
1.5 KiB
Python
|
#!/usr/bin/python3
|
||
|
|
||
|
# Take a picture with the Pi Camera module and publish the path
|
||
|
# and name of the file on a MQTT broker
|
||
|
|
||
|
import picamera
|
||
|
import paho.mqtt.publish as mqtt
|
||
|
from time import sleep
|
||
|
import datetime
|
||
|
|
||
|
|
||
|
# Camera settings
|
||
|
camera_resolution=(2592, 1944)
|
||
|
camera_warmup_time=2 #in seconds
|
||
|
#camera_iso=800
|
||
|
|
||
|
# MQTT settings
|
||
|
mqtt_server = 'localhost'
|
||
|
mqtt_port= 1883
|
||
|
mqtt_auth= {'username':'cameteo',
|
||
|
'password':'CaMeteo'}
|
||
|
mqtt_client_id= 'picamera2mqtt'
|
||
|
mqtt_qos=2
|
||
|
|
||
|
# Photo parameters
|
||
|
photo_path = '/home/pi/photos/'
|
||
|
photo_format = 'jpg'
|
||
|
photo_mqtt_topic = 'pi/picamera/'
|
||
|
|
||
|
########
|
||
|
# Main #
|
||
|
########
|
||
|
|
||
|
file_date = datetime.datetime.now().replace(microsecond=0).isoformat()
|
||
|
file_name = file_date + "." + photo_format
|
||
|
|
||
|
# Taking a photo
|
||
|
#################
|
||
|
cam = picamera.PiCamera(resolution = camera_resolution)
|
||
|
|
||
|
# Warm-up
|
||
|
cam.start_preview()
|
||
|
sleep(camera_warmup_time)
|
||
|
|
||
|
print(photo_path+file_name)
|
||
|
|
||
|
cam.capture(photo_path+file_name)
|
||
|
|
||
|
# MQTT publication
|
||
|
###################
|
||
|
mqtt_data = [{'topic':photo_mqtt_topic+"path", 'payload':photo_path, 'qos':mqtt_qos, 'retain':False},
|
||
|
{'topic':photo_mqtt_topic+"last_photo_name", 'payload':file_name, 'qos':mqtt_qos, 'retain':False},
|
||
|
{'topic':photo_mqtt_topic+"last_photo_date", 'payload':file_date, 'qos':mqtt_qos, 'retain':False}]
|
||
|
|
||
|
mqtt.multiple(mqtt_data,
|
||
|
hostname= mqtt_server ,
|
||
|
port= mqtt_port ,
|
||
|
client_id= mqtt_client_id ,
|
||
|
auth= mqtt_auth )
|