DoNotDisturb icon indicating copy to clipboard operation
DoNotDisturb copied to clipboard

Run python script from DND?

Open kodsama opened this issue 1 year ago • 1 comments

Hello everyone,

Sorry for the spam but I couldn't see where to post that.

I made a python script using Pushover with image capture to be run by DND but I get a:

2023-04-09 02:57:55 +0000: failed to execute python3 /Users/me/DoNotDisturb/dnd.py

Any idea why I can't run the script? (I tried from a terminal locally and it runs without problem, but DND can't run it for some reason)

The script:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author: Kodsama

import requests
import subprocess
import time
import cv2
import numpy as np
import logging

logging.basicConfig(level=logging.INFO)

#Edit these variables
appToken = ''     # Pushover app token
userToken = ''    # Pushover user token
logFile = '/Library/Objective-See/DND/DND.log'  # DND logfile path
imgFile = '/Users/me/DoNotDisturb/DND.jpg'    # Snapshot path
wait = 0.01 # Waiting time in seconds
pics = 10   # Number of snapshots to take

# Don't edit from there
logging.info('Script start')

title = time.strftime("%c")
proc = subprocess.Popen(['tail', logFile], stdout=subprocess.PIPE)
log = proc.stdout.read()

frameWidth = 640
frameHeight = 480
cap = cv2.VideoCapture(0)
cap.set(3, frameWidth)
cap.set(4, frameHeight)
cap.set(10,150)
time.sleep(0.5) # Make sure everything is settled

logging.info('Camera set-up done')

success = False
try:
    if cap.isOpened():
        logging.info('Cheese :D')
        success, img = cap.read()
        for _ in range(pics):
            success, img2 = cap.read()
            img = np.vstack((img, img2))
            time.sleep(wait)
finally:
    cap.release()
logging.info(f'Snapshot done: success={success}')

if success:
    logging.info(f'Write snapshot')
    cv2.imwrite(imgFile, img)
    logging.info(f'Send Pushover with snapshot')
    r = requests.post("https://api.pushover.net/1/messages.json", data = {
    "token": appToken,
    "user": userToken,
    "message": f"Do Not Disturb alert\n{title}\n{log}"
    },
    files = {
    "attachment": ("snapshot.jpg", open(imgFile, "rb"), "image/jpeg")
    })
else:
    logging.warning(f'Send Pushover without snapshot')
    r = requests.post("https://api.pushover.net/1/messages.json", data = {
    "token": appToken,
    "user": userToken,
    "message": f"Do Not Disturb alert\n{title}\n{log}"
    })

logging.info(f'Script done!')

kodsama avatar Apr 09 '23 03:04 kodsama