def start(self): pir = MotionSensor(self._pin) try: pir.when_motion = self.motion self.interrupted.wait() finally: pir.close() print('Shutdown gracefully.')
camera.close() text = msg.as_string() mail.send_email(server_mail,email_user,email_sender,password_sender,text) def create_folder_drive(service,mimeType,namefolder): flag, id_folder = qs.query_files(service,mimeType) if flag: print('Folder exists') else: id_folder = qs.create_folder(service,namefolder) return id_folder try: service = qs.main() id_folder = create_folder_drive(service,mimeType,name_folder) msg = mail.header(email_user,email_sender,subject,body) while True: pir.wait_for_motion() print('Motion detected') GPIO.output(PIN_LED,GPIO.HIGH) photo_camera(service,id_folder) pir.wait_for_no_motion() print('Wait for motion') GPIO.output(PIN_LED,GPIO.LOW) finally: print('This is the finally') pir.close()
'--shutdown_after_seconds', required=False, default=5 * 60, help= "In seconds, how long to wait after no motion is detected to shut down the LED. (default: 5 * 60)" ) parser.add_argument( '--rescan_after_seconds', required=False, default=1, help="In seconds, how long to wait between motion checks. (default: 1)" ) args = parser.parse_args() sensor = MotionSensor(args.sensor_pin) led = LED(args.led_pin) detection_led = LED(args.detection_led_pin) while True: try: turn_on_and_wait( sensor=sensor, led=led, detection_led=detection_led, shutdown_after_seconds=int(args.shutdown_after_seconds), rescan_after_seconds=int(args.rescan_after_seconds)) except KeyboardInterrupt: print("Ending the program.") sensor.close() led.close() detection_led.close() break
class RaspiGpioSensor(MotionDetectorImpl): """ Class for wrapping python motion sensor """ def __init__(self, settings: RaspiGpioSensorSettings) -> None: super().__init__() LOGGER.info(f"Using motion sensor on pin {settings.gpio_pin_number}") self.__motion_sensor = GPIOMotionSensor( pin=settings.gpio_pin_number, queue_len=settings.queue_length, sample_rate=settings.sample_rate, threshold=settings.threshold) self.__settings = settings self.__motion_sensor.when_activated = self.__when_activated self.__motion_sensor.when_deactivated = self.__when_deactivated self.__handler: Optional[Callable[..., None]] = None self.__led: Optional[LED] = None if settings.led_gpio_pin_number > 0: self.__led = LED(settings.led_gpio_pin_number) # store activation status self._activated = False def register_handler(self, handler: Callable[..., None]) -> None: LOGGER.debug("Registering motion_sensor callback") self.__handler = handler def shutdown(self) -> None: LOGGER.info("Shutting down") # shutdown motion sensor thread and join self.__motion_sensor.close() @property def id(self) -> int: return self.__settings.gpio_pin_number def __when_activated(self) -> None: if self.disabled: LOGGER.debug("Sensor disabled, activation signal ignored") return self._activated = True LOGGER.debug("Sensor activated") if self.__led: self.__led.on() if self.__handler: self.__handler() def __when_deactivated(self) -> None: # when disabled, still check activation flag - in case of disable between activation cycle if self.disabled and not self._activated: LOGGER.debug("Sensor disabled, deactivation signal ignored") return self._activated = False LOGGER.debug("Sensor deactivated") if self.__led: self.__led.off()