1
0
Fork 0

Pushbullet hinzugefügt

This commit is contained in:
Findus23 2014-04-19 16:31:56 +02:00
parent 44a2546758
commit 1a987df28c
3 changed files with 301 additions and 1 deletions

128
Fremddateien/pushbullet.py Executable file
View file

@ -0,0 +1,128 @@
# -*- coding: utf-8 -*-
try:
from urllib.request import Request, urlopen
except:
from urllib2 import Request, urlopen
from base64 import encodestring, b64encode
import json
import mimetypes
import os
HOST = "https://api.pushbullet.com/api";
class PushBulletError():
def __init__(self, value):
self.value = value
def __str__(self):
return self.value
class PushBullet():
def __init__(self, apiKey):
self.apiKey = apiKey
def _request(self, url, postdata=None):
request = Request(url)
request.add_header("Accept", "application/json")
request.add_header("Content-type","application/json");
auth = "%s:" % (self.apiKey)
auth = auth.encode('ascii')
auth = b64encode(auth)
auth = b"Basic "+auth
request.add_header("Authorization", auth)
request.add_header("User-Agent", "pyPushBullet")
if postdata:
postdata = json.dumps(postdata)
postdata = postdata.encode('utf-8')
response = urlopen(request, postdata)
data = response.read()
data = data.decode("utf-8")
j = json.loads(data)
return j
def _request_multiform(self, url, postdata, files):
request = Request(url)
content_type, body = self._encode_multipart_formdata(postdata, files)
request.add_header("Accept", "application/json")
request.add_header("Content-type", content_type);
auth = "%s:" % (self.apiKey)
auth = auth.encode('ascii')
auth = b64encode(auth)
auth = b"Basic "+auth
request.add_header("Authorization", auth)
request.add_header("User-Agent", "pyPushBullet")
response = urlopen(request, body)
data = response.read()
data = data.decode("utf-8")
j = json.loads(data)
return j
def _encode_multipart_formdata(self, fields, files):
'''
from http://mattshaw.org/news/multi-part-form-post-with-files-in-python/
'''
def guess_type(filename):
return mimetypes.guess_type(filename)[0] or 'application/octet-stream'
BOUNDARY = '----------bound@ry_$'
CRLF = '\r\n'
L = []
for key,value in fields.iteritems():
L.append('--'+BOUNDARY)
L.append('Content-Disposition: form-data; name="%s"'%(key))
L.append('')
L.append(str(value))
for (key, filename, value) in files:
L.append('--'+BOUNDARY)
L.append('Content-Disposition: form-data; name="%s"; filename="%s"'%(key, filename))
L.append('Content-Type: %s'%(guess_type(filename)))
L.append('')
L.append(value)
L.append('--'+BOUNDARY+'--')
L.append('')
body = CRLF.join(L)
content_type = 'multipart/form-data; boundary=%s' % BOUNDARY
return content_type, body
def getDevices(self):
return self._request(HOST + "/devices")["devices"]
def pushNote(self, device, title, body):
data = {'type' : 'note',
'device_id' : device,
'title' : title,
'body' : body}
return self._request(HOST + "/pushes", data)
def pushAddress(self, device, name, address):
data = {'type' : 'address',
'device_id' : device,
'name' : name,
'address' : address}
return self._request(HOST + "/pushes", data)
def pushList(self, device, title, items):
data = {'type' : 'list',
'device_id' : device,
'title' : title,
'items' : items}
return self._request(HOST + "/pushes", data)
def pushLink(self, device, title, url):
data = {'type' : 'link',
'device_id' : device,
'title' : title,
'url' : url}
return self._request(HOST + "/pushes", data)
def pushFile(self, device, file):
data = {'type' : 'file',
'device_id' : device}
filedata = ''
with open(file, "rb") as f:
filedata = f.read()
return self._request_multiform(HOST + "/pushes", data, [('file', os.path.basename(file), filedata)])

168
Fremddateien/pushbullet_cmd.py Executable file
View file

@ -0,0 +1,168 @@
#!/usr/bin/python
import argparse
from pushbullet import PushBullet
import sys
try:
from urllib.request import URLError, HTTPError
except:
from urllib2 import URLError, HTTPError
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"]))
def pushNote(args):
p = PushBullet(args.api_key)
note = p.pushNote(args.device, args.title, " ".join(args.body))
if args.json:
print(note)
return
if "created" in note:
print("OK")
else:
print("ERROR %s" % (note))
def pushAddress(args):
p = PushBullet(args.api_key)
try:
address = p.pushAddress(args.device, args.name, " ".join(args.address))
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(address)
return
if "created" in address:
print("OK")
else:
print("ERROR %s" % (address))
def pushList(args):
p = PushBullet(args.api_key)
try:
lst = p.pushList(args.device, args.title, args.list)
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(lst)
return
if "created" in lst:
print("OK")
else:
print("ERROR %s" % (lst))
def pushLink(args):
p = PushBullet(args.api_key)
try:
link = p.pushLink(args.device, args.title, args.url)
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(link)
return
if "created" in link:
print("OK")
else:
print("ERROR %s" % (link))
def pushFile(args):
p = PushBullet(args.api_key)
try:
file = p.pushFile(args.device, args.file)
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(file)
return
if "created" in file:
print("OK")
else:
print("ERROR %s" % (file))
parser = argparse.ArgumentParser()
parser.add_argument("--json", default=False, action="store_const", const=True)
parser.add_argument("api_key")
subparser = parser.add_subparsers(dest="type")
getdevices = subparser.add_parser("getdevices", help="Get a list of devices")
getdevices.set_defaults(func=getDevices)
note = subparser.add_parser("note", help="Send a note")
note.add_argument('device', type=int, help="Device ID")
note.add_argument('title')
note.add_argument('body', nargs=argparse.REMAINDER)
note.set_defaults(func=pushNote)
address = subparser.add_parser("address", help="Send an address")
address.add_argument('device', type=int, help="Device ID")
address.add_argument('name')
address.add_argument('address', nargs=argparse.REMAINDER)
address.set_defaults(func=pushAddress)
lst = subparser.add_parser("list", help="Send a list")
lst.add_argument('device', type=int, help="Device ID")
lst.add_argument('title')
lst.add_argument('list', nargs=argparse.REMAINDER)
lst.set_defaults(func=pushList)
link = subparser.add_parser("link", help="Send a link")
link.add_argument('device', type=int, help="Device ID")
link.add_argument('title')
link.add_argument('url')
link.set_defaults(func=pushLink)
file = subparser.add_parser("file", help="Send a file")
file.add_argument('device', type=int, help="Device ID")
file.add_argument('file')
file.set_defaults(func=pushFile)
args = parser.parse_args()
args.func(args)

View file

@ -3,6 +3,9 @@ zufall=0
PFAD="/var/www/" #Pfad zum Web-Verzeichnis
r=0 # Backup-Zahl auf Null setzen
IFS="; " #Spezial-Variable, enthält Trennzeichen zum Trennen von Luftdruck und -temperatur
re='^[0-9]+$' # Regulärer Ausdruck, ob Variable eine Zahl ist
pushbullet_api_key=$(cat /home/pi/Temperaturmessung/Fremddateien/pushbullet_settings.txt | head -n 1)
pushbullet_device=$(cat /home/pi/Temperaturmessung/Fremddateien/pushbullet_settings.txt | tail -n 1)
gpio mode 13 out # gelb
gpio mode 12 out # rot
gpio mode 3 out #grün
@ -86,7 +89,7 @@ do
temp_druck=$1
druck=$2
qualitat=$(sudo /home/pi/Temperaturmessung/Fremddateien/airsensor -v -o)
if [ "$qualitat" = "0" ]
if [ "$qualitat" = "0" ] || ! [[ $qualitat =~ $re ]]
then
qualitat=""
fi
@ -123,6 +126,7 @@ $qualitat" >/home/pi/Temperaturmessung/text.txt.temp
then
cp /home/pi/Temperaturmessung/dygraph.csv /home/pi/Temperaturmessung/dygraph.csv.bak
python /home/pi/Temperaturmessung/Fremddateien/send.py "l.winkler23@me.com" "Backup" "" "/home/pi/Temperaturmessung/dygraph.csv" &
/home/pi/Temperaturmessung/Fremddateien/pushbullet_cmd.py $pushbullet_api_key note $pushbullet_device "Backup erfolgreich" "$uhrzeit_display"
echo "Backup"
r=0
fi