Lib & firmware update + cleaner directories structure
This commit is contained in:
103
raspberry/python/picam_mqtt.py
Normal file
103
raspberry/python/picam_mqtt.py
Normal file
@ -0,0 +1,103 @@
|
||||
#!/usr/bin/python3
|
||||
# -*- coding: UTF8 -*-
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
"""
|
||||
Take a picture with the Pi Camera module and publish the path
|
||||
and name of the file on a MQTT broker
|
||||
|
||||
@author: arofarn
|
||||
"""
|
||||
|
||||
import os
|
||||
from time import sleep
|
||||
from datetime import datetime
|
||||
import picamera
|
||||
import paho.mqtt.publish as mqtt
|
||||
from cameteo_conf import CONFIG_MQTT, CONFIG_PI_CAMERA, PICTURES_EXTENSIONS
|
||||
|
||||
MQTT_CLIENT_ID = "picamera"
|
||||
NOW = datetime.utcNOW()
|
||||
|
||||
########
|
||||
# Main #
|
||||
########
|
||||
|
||||
if not os.path.exists(CONFIG_PI_CAMERA['PICT_DIR']):
|
||||
print("Create photos directory : " + CONFIG_PI_CAMERA['PICT_DIR'])
|
||||
os.mkdir(CONFIG_PI_CAMERA['PICT_DIR'])
|
||||
|
||||
FILE_NAME = os.path.extsep.join((datetime.strftime(NOW, CONFIG_PI_CAMERA['PICT_NAME']),
|
||||
PICTURES_EXTENSIONS[CONFIG_PI_CAMERA['PICT_FORMAT']]))
|
||||
FILE_PATH = os.path.join(CONFIG_PI_CAMERA['PICT_DIR'], FILE_NAME)
|
||||
|
||||
print("Shooting " + FILE_PATH)
|
||||
|
||||
# Taking a photo
|
||||
#################
|
||||
|
||||
# Tell the MQTT that we start shooting
|
||||
mqtt.single(CONFIG_PI_CAMERA['MQTT_TOPIC'] + "/shooting",
|
||||
payload=1,
|
||||
qos=1,
|
||||
retain=True,
|
||||
hostname=CONFIG_MQTT['HOST'],
|
||||
port=CONFIG_MQTT['PORT'],
|
||||
client_id=MQTT_CLIENT_ID,
|
||||
auth=CONFIG_MQTT['AUTH'])
|
||||
|
||||
# Camera settings
|
||||
cam = picamera.PiCamera(resolution=CONFIG_PI_CAMERA['RESOLUTION'])
|
||||
cam.iso = CONFIG_PI_CAMERA['ISO']
|
||||
cam.awb_mode = CONFIG_PI_CAMERA['AWB']
|
||||
cam.rotation = CONFIG_PI_CAMERA['ROTATION']
|
||||
cam.contrast = CONFIG_PI_CAMERA['CONSTRAST']
|
||||
cam.exposure_mode = CONFIG_PI_CAMERA['EXPO_MODE']
|
||||
cam.image_effect = 'none'
|
||||
|
||||
#Add some EXIF tags
|
||||
cam.exif_tags['EXIF.UserComment'] = 'Cameteo !'
|
||||
|
||||
# Warm-up
|
||||
cam.start_preview()
|
||||
sleep(CONFIG_PI_CAMERA['WARMUP_TIME'])
|
||||
|
||||
cam.capture(FILE_PATH, format=CONFIG_PI_CAMERA['PICT_FORMAT'],
|
||||
quality=95, thumbnail=None)
|
||||
|
||||
cam.close()
|
||||
|
||||
# MQTT publication
|
||||
###################
|
||||
|
||||
MQTT_DATA = [{'topic': CONFIG_PI_CAMERA['MQTT_TOPIC'] + "/shooting",
|
||||
'payload': 0,
|
||||
'qos': 2,
|
||||
'retain': True},
|
||||
{'topic': CONFIG_PI_CAMERA['MQTT_TOPIC'] + "/photos_path",
|
||||
'payload': CONFIG_PI_CAMERA['PICT_DIR'],
|
||||
'qos': 2,
|
||||
'retain': True},
|
||||
{'topic': CONFIG_PI_CAMERA['MQTT_TOPIC'] + "/last_photo",
|
||||
'payload': CONFIG_PI_CAMERA['PICT_NAME'],
|
||||
'qos': 2,
|
||||
'retain': True},
|
||||
]
|
||||
|
||||
mqtt.multiple(MQTT_DATA,
|
||||
hostname=CONFIG_MQTT['HOST'],
|
||||
port=CONFIG_MQTT['PORT'],
|
||||
client_id=MQTT_CLIENT_ID,
|
||||
auth=CONFIG_MQTT['AUTH'])
|
Reference in New Issue
Block a user