summaryrefslogtreecommitdiff
path: root/wasp/gadgetbridge.py
diff options
context:
space:
mode:
Diffstat (limited to 'wasp/gadgetbridge.py')
-rw-r--r--wasp/gadgetbridge.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/wasp/gadgetbridge.py b/wasp/gadgetbridge.py
new file mode 100644
index 0000000..f1219dd
--- /dev/null
+++ b/wasp/gadgetbridge.py
@@ -0,0 +1,60 @@
+# SPDX-License-Identifier: LGPL-3.0-or-later
+# Copyright (C) 2020 Daniel Thompson
+"""Gadgetbridge/Bangle.js protocol
+
+Currently implemented messages are:
+
+ * t:"notify", id:int, src,title,subject,body,sender,tel:string - new
+ notification
+ * t:"notify-", id:int - delete notification
+ * t:"alarm", d:[{h,m},...] - set alarms
+ * t:"find", n:bool - findDevice
+ * t:"vibrate", n:int - vibrate
+ * t:"weather", temp,hum,txt,wind,loc - weather report
+ * t:"musicstate", state:"play/pause",position,shuffle,repeat - music
+ play/pause/etc
+ * t:"musicinfo", artist,album,track,dur,c(track count),n(track num) -
+ currently playing music track
+ * t:"call", cmd:"accept/incoming/outgoing/reject/start/end", name: "name", number: "+491234" - call
+"""
+
+import io
+import json
+import sys
+import wasp
+
+# JSON compatibility
+null = None
+true = True
+false = False
+
+def _info(msg):
+ json.dump({'t':'info', 'msg':msg}, sys.stdout)
+ sys.stdout.write('\r\n')
+
+def _error(msg):
+ json.dump({'t':'error', 'msg':msg}, sys.stdout)
+ sys.stdout.write('\r\n')
+
+def GB(cmd):
+ task = cmd['t']
+ del cmd['t']
+
+ try:
+ if task == 'find':
+ wasp.watch.vibrator.pin(not cmd['n'])
+ elif task == 'notify':
+ id = cmd['id']
+ del cmd['id']
+ wasp.system.notify(id, cmd)
+ elif task == 'notify-':
+ wasp.system.unnotify(cmd['id'])
+ else:
+ _info('Command "{}" is not implemented'.format(cmd))
+ except Exception as e:
+ msg = io.StringIO()
+ sys.print_exception(e, msg)
+ _error(msg.getvalue())
+ msg.close()
+
+