예제 #1
0
class PBEventHandler:
    def __init__(self):
        self.KEY = KEY
        self.HIST_FILE = HIST_FILE
        self.pb = PushBullet(KEY)
        self.maxmod = float(0)
        self.iden = None
        
        self._sync_maxmod()
        self._sync_maxmod(self._get_modified())

        devices = self.pb.getDevices()
        for device in devices:
            if device['nickname'] == DEVICE:
                self.iden = device['iden']
                break


    def _get_modified(self):
        return self.pb.getPushHistory(self.maxmod)


    def _sync_maxmod(self, pushes = []):
        for push in pushes:
            if float(push['modified']) > self.maxmod:
                self.maxmod = float(push['modified'])

        n = float(self.maxmod)
        try:
            fn = float(open(self.HIST_FILE).read()) + 0.01
        except:
            fn = 0
        fn = max(float(n), float(fn))
        open(self.HIST_FILE, "w").write(str(fn))
        self.maxmod = float(fn)
        

    def _event(self, data, callback):
        if data['type'] == 'tickle' and data['subtype'] == 'push':
            pushes = self.pb.getPushHistory(self.maxmod)
            for push in pushes:
                if push['modified'] > self.maxmod:
                    self.maxmod = push['modified']
                self._sync_maxmod()

                if self.iden != None and\
                        push['target_device_iden'] != self.iden: continue
                try:
                    callback(push)
                except:
                    pass


    def run(self, callback):
        def __event(data):
            print "event: " + str(data)
            self._event(data, callback)

        self.pb.realtime(__event)
예제 #2
0
def getDevices(args):
    p = PushBullet(args.api_key)
    devices = p.getDevices()
    if args.json:
        print(json.dumps(devices))
        return
    for device in devices:
        print("%s %s %s" %
              (device["iden"], device["manufacturer"], device["model"]))
예제 #3
0
def getDevices(args):
    p = PushBullet(args.api_key)
    devices = p.getDevices()
    if args.json:
        print(json.dumps(devices))
        return
    for device in devices:
        print("%s %s %s" % (device["iden"],
                            device["manufacturer"],
                            device["model"]))
예제 #4
0
def send_note(title, body):
    '''Sends Pushbullet notification to all mobile devices linked to your account.
    The account details are derived from PUSHBULLET_API_KEY provided in private.py.
    Title and body text must be provided.
    '''
    if type(private.PUSHBULLET_API_KEY) != iter:
        private.PUSHBULLET_API_KEY = [private.PUSHBULLET_API_KEY]

    for key in private.PUSHBULLET_API_KEY:
        p = PushBullet(key)
        devices = p.getDevices()
        for d in devices:
            if d['icon'] == 'phone':
                p.pushNote(d['iden'], title=title, body=body)
예제 #5
0
def getDevices(args):
    p = PushBullet(args.api_key)
    try:
        devices = p.getDevices()
    except HTTPError:
        _, e, _ = sys.exc_info()
        print("The server couldn\'t fulfill the request.")
        print("Error code: %s" % (e.code))
    except URLError:
        _, e, _ = sys.exc_info()
        print("We failed to reach a server.")
        print("Reason: %s" % (e.reason))
    else:
        if args.json:
            print(devices)
            return
        for device in devices:
            if "nickname" in device["extras"]:
                print("%s %s" % (device["id"], device["extras"]["nickname"]))
            else:
                print("%s %s %s" % (device["id"], device["extras"]["manufacturer"], device["extras"]["model"]))
예제 #6
0
def getDevices(args):
    p = PushBullet(args.api_key)
    try:
        devices = p.getDevices()
    except HTTPError:
        _, e, _ = sys.exc_info()
        print("The server couldn\'t fulfill the request.")
        print("Error code: %s" % (e.code))
    except URLError:
        _, e, _ = sys.exc_info()
        print("We failed to reach a server.")
        print("Reason: %s" % (e.reason))
    else:
        if args.json:
            print(devices)
            return
        for device in devices:
            if "nickname" in device["extras"]:
                print("%s %s" % (device["id"], device["extras"]["nickname"]))
            else:
                print("%s %s %s" %
                      (device["id"], device["extras"]["manufacturer"],
                       device["extras"]["model"]))
import socket
import sys
import pushbullet
from pushbullet import PushBullet
from socket import socket, SOCK_DGRAM, AF_INET 

#getting IP address
s = socket(AF_INET, SOCK_DGRAM) 
s.connect(('google.com', 0))#using Google since it's pretty well always reachable
IP = s.getsockname()[0] #grab IP portion

#Make sure to put your api key here to work!
apiKey = "YOUR_API_KEY_HERE"

#create pushbullet obj and get list of devices
pb = PushBullet(apiKey)
devices = pb.getDevices()

#push IP to device!
pb.pushNote(devices[0]["id"], "IP Address", IP)
from imutils.video import VideoStream
from pushbullet import PushBullet

# Inisialisasi variabel counter, label dan tanggal
inc = 0
label = "Init"
intercept = [None, None]
frameIntercept = [None, None, None, None, None, None, None, None]
frameCount = 0

# Token untuk PushBullet
token = 'o.ddpV3vtIXKx3vRVPbeoDaI2rsyGzHAvx'

# Setting untuk PushBullet
p = PushBullet(token)
devices = p.getDevices()
contacts = p.getContacts()


# Fungsi untuk mendeteksi apakah memakai masker
def deteksi_masker(frame, faceNet, maskNet):
    (h, w) = frame.shape[:2]
    blob = cv2.dnn.blobFromImage(frame, 1.0, (224, 224), (104.0, 177.0, 123.0))

    faceNet.setInput(blob)
    detections = faceNet.forward()

    faces = []
    locs = []
    preds = []
예제 #9
0
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import picamera
import datetime
from pushbullet import PushBullet
import os

apiKey = ""
p = PushBullet(apiKey)
devices = p.getDevices()

def removeoldpics():
	 os.remove(fileName)

def getFileName():
	return datetime.datetime.now().strftime ("%Y-%m-%d_%H.%M.%S.jpg")


	
sensorPin = 7

GPIO.setmode(GPIO.BOARD)
GPIO.setup(sensorPin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

prevState = False
currState = False

cam = picamera.PiCamera()

while True:
예제 #10
0
class Pushbullet(AgoAlert):
    """Class for push message sending for ios and android
       @info https://www.pushbullet.com """
    def __init__(self, apikey, devices):
        """Constructor"""
        AgoAlert.__init__(self)
        global client
        self.name = 'pushbullet'
        self.pushbullet = None
        self.apikey = apikey
        if len(devices)==0:
            self.devices = []
        else:
            self.devices = json.loads(devices)
        self.pbdevices = {}
        self.pushTitle = 'Agocontrol'
        if apikey and len(apikey)>0 and devices and len(devices)>0:
            self.__configured = True
            self.pushbullet = PushBullet(self.apikey)
            client.emit_event('alertcontroller', "event.device.statechanged", STATE_PUSH_CONFIGURED, "")
        else:
            self.__configured = False
            client.emit_event('alertcontroller', "event.device.statechanged", STATE_PUSH_NOT_CONFIGURED, "")

    def getConfig(self):
        configured = 0
        if self.__configured:
            configured = 1
        return {'configured':configured, 'apikey':self.apikey, 'devices':self.devices, 'provider':self.name}

    def getPushbulletDevices(self, apikey=None):
        """request pushbullet to get its devices"""
        if not self.__configured and not apikey:
            logging.error('Pushbullet: unable to get devices. Not configured and no apikey specified')
            return {}
        
        if apikey:
            self.pushbullet = PushBullet(apikey)

        devices = []
        if self.pushbullet:
            devs = self.pushbullet.getDevices()
            logging.debug('pushbullet devs=%s' % str(devs))
            for dev in devs:
                name = '%s %s (%s)' % (dev['extras']['manufacturer'], dev['extras']['model'], dev['id'])
                self.pbdevices[name] = {'name':name, 'id':dev['id']}
                devices.append(name)
        else:
            logging.error('Pushbullet: unable to get devices because not configured')
        return devices

    def setConfig(self, apikey, devices):
        """set config
           @param apikey: pushbullet apikey (available on https://www.pushbullet.com/account)
           @param devices: array of devices (id) to send notifications """
        if not apikey or len(apikey)==0 or not devices or len(devices)==0:
            logging.error('Pushbullet: all parameters are mandatory')
            return False
        if not agoclient.set_config_option('push', 'provider', 'pushbullet','alert') or not agoclient.set_config_option('pushbullet', 'apikey', apikey, 'alert') or not agoclient.set_config_option('pushbullet', 'devices', json.dumps(devices), 'alert'):
            logging.error('Pushbullet: unable to save config')
            return False
        self.apikey = apikey
        self.devices = devices
        self.pbdevices = {}
        self.pushbullet = PushBullet(self.apikey)
        self.__configured = True
        client.emit_event('alertcontroller', "event.device.statechanged", STATE_PUSH_CONFIGURED, "")
        return True

    def addPush(self, message, file=None):
        """Add push
           @param message: push notification
           @file: full file path to send"""
        if self.__configured:
            #check params
            if not message or len(message)==0:
                if not file or len(file)==0:
                    logging.error('Pushbullet: Unable to add push (at least one parameter is mandatory)')
                    return False
            elif not file or len(file)==0:
                if not message or len(message)==0:
                    logging.error('Pushbullet: Unable to add push (at least one parameter is mandatory)')
                    return False
            if message==None:
                message = ''
            if file==None:
                file = ''
            #queue push message
            self._addMessage({'message':message, 'file':file})
            return True
        else:
            logging.error('Pushover: unable to add message because not configured')
            return False

    def _send_message(self, message):
        #get devices from pushbullet if necessary
        if len(self.pbdevices)==0:
            self.getPushbulletDevices()

        #push message
        for device in self.devices:
            #get device id
            if self.pbdevices.has_key(device):
                if len(message['file'])==0:
                    #send a note
                    resp = self.pushbullet.pushNote(self.pbdevices[device]['id'], self.pushTitle, message['message'])
                    logging.info(resp)
                else:
                    #send a file
                    resp = self.pushbullet.pushFile(self.pbdevices[device]['id'], message['file'])
            else:
                logging.warning('Pushbullet: unable to push notification to device "%s" because not found' % (device))
예제 #11
0
class Pushbullet(AgoAlert):
    """Class for push message sending for ios and android
       @info https://www.pushbullet.com """
    def __init__(self, apikey, devices):
        """Constructor"""
        AgoAlert.__init__(self)
        global client
        self.name = 'pushbullet'
        self.pushbullet = None
        self.apikey = apikey
        if len(devices)==0:
            self.devices = []
        else:
            self.devices = json.loads(devices)
        self.pbdevices = {}
        self.pushTitle = 'Agocontrol'
        if apikey and len(apikey)>0 and devices and len(devices)>0:
            self.__configured = True
            self.pushbullet = PushBullet(self.apikey)
            client.emitEvent('alertcontroller', "event.device.statechanged", STATE_PUSH_CONFIGURED, "")
        else:
            self.__configured = False
            client.emitEvent('alertcontroller', "event.device.statechanged", STATE_PUSH_NOT_CONFIGURED, "")

    def getConfig(self):
        configured = 0
        if self.__configured:
            configured = 1
        return {'configured':configured, 'apikey':self.apikey, 'devices':self.devices, 'provider':self.name}

    def getPushbulletDevices(self, apikey=None):
        """request pushbullet to get its devices"""
        if not self.__configured and not apikey:
            logging.error('Pushbullet: unable to get devices. Not configured and no apikey specified')
            return {}
        
        if apikey:
            self.pushbullet = PushBullet(apikey)

        devices = []
        if self.pushbullet:
            devs = self.pushbullet.getDevices()
            logging.debug('pushbullet devs=%s' % str(devs))
            for dev in devs:
                name = '%s %s (%s)' % (dev['extras']['manufacturer'], dev['extras']['model'], dev['id'])
                self.pbdevices[name] = {'name':name, 'id':dev['id']}
                devices.append(name)
        else:
            logging.error('Pushbullet: unable to get devices because not configured')
        return devices

    def setConfig(self, apikey, devices):
        """set config
           @param apikey: pushbullet apikey (available on https://www.pushbullet.com/account)
           @param devices: array of devices (id) to send notifications """
        if not apikey or len(apikey)==0 or not devices or len(devices)==0:
            logging.error('Pushbullet: all parameters are mandatory')
            return False
        if not agoclient.setConfigOption('push', 'provider', 'pushbullet','alert') or not agoclient.setConfigOption('pushbullet', 'apikey', apikey, 'alert') or not agoclient.setConfigOption('pushbullet', 'devices', json.dumps(devices), 'alert'):
            logging.error('Pushbullet: unable to save config')
            return False
        self.apikey = apikey
        self.devices = devices
        self.pbdevices = {}
        self.pushbullet = PushBullet(self.apikey)
        self.__configured = True
        client.emitEvent('alertcontroller', "event.device.statechanged", STATE_PUSH_CONFIGURED, "")
        return True

    def addPush(self, message, file):
        """Add push
           @param message: push notification
           @file: full file path to send"""
        if self.__configured:
            #check params
            if not message or len(message)==0:
                if not file or len(file)==0:
                    logging.error('Pushbullet: Unable to add push (at least one parameter is mandatory)')
                    return False
            elif not file or len(file)==0:
                if not message or len(message)==0:
                    logging.error('Pushbullet: Unable to add push (at least one parameter is mandatory)')
                    return False
            if message==None:
                message = ''
            if file==None:
                file = ''
            #queue push message
            self._addMessage({'message':message, 'file':file})
            return True
        else:
            logging.error('Pushover: unable to add message because not configured')
            return False

    def _sendMessage(self, message):
        #get devices from pushbullet if necessary
        if len(self.pbdevices)==0:
            self.getPushbulletDevices()

        #push message
        for device in self.devices:
            #get device id
            if self.pbdevices.has_key(device):
                if len(message['file'])==0:
                    #send a note
                    resp = self.pushbullet.pushNote(self.pbdevices[device]['id'], self.pushTitle, message['message'])
                    logging.info(resp)
                else:
                    #send a file
                    resp = self.pushbullet.pushFile(self.pbdevices[device]['id'], message['file'])
            else:
                logging.warning('Pushbullet: unable to push notification to device "%s" because not found' % (device))