Pushbullet hinzugefügt
This commit is contained in:
parent
44a2546758
commit
1a987df28c
3 changed files with 301 additions and 1 deletions
128
Fremddateien/pushbullet.py
Executable file
128
Fremddateien/pushbullet.py
Executable 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
168
Fremddateien/pushbullet_cmd.py
Executable 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)
|
|
@ -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
|
||||
|
|
Reference in a new issue