lorawan/python/ttnv2receiver.py

53 lines
1.4 KiB
Python
Raw Normal View History

2017-02-19 10:06:05 +00:00
#!/usr/bin/env python3
import urllib
import psycopg2
import websocket
from http.server import BaseHTTPRequestHandler, HTTPServer
import re
import json
import pprint
import lorautil
2017-02-19 14:05:13 +00:00
import base64
2017-02-19 10:06:05 +00:00
# HTTPRequestHandler class
class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
length = int(self.headers['Content-Length'])
post_data = self.rfile.read(length).decode('utf-8')
2017-02-19 14:05:13 +00:00
print(post_data)
2017-02-19 10:06:05 +00:00
payload = self.payload_hex(post_data)
deveui = self.get_deveui(post_data)
# Try to decode to unicode
try:
payload = self.data_to_unicode(payload)
except UnicodeDecodeError:
pass
print("deveui/payload: {}:{}".format(deveui, payload))
# And insert into the db
lorautil.db_insert_json("ttn", post_data, payload, deveui)
2020-03-12 14:09:26 +00:00
lorautil.db_notify("ttn", post_data)
2017-02-19 10:06:05 +00:00
def payload_hex(self, data):
mydict = lorautil.jsonToDict(data)
2017-02-19 14:05:13 +00:00
return mydict['payload_raw']
2017-02-19 10:06:05 +00:00
def data_to_unicode(self, myhex):
2017-02-19 14:05:13 +00:00
return base64.b64decode(myhex).decode('utf-8')
2017-02-19 10:06:05 +00:00
def get_deveui(self, data):
mydict = lorautil.jsonToDict(data)
2017-02-19 14:05:13 +00:00
return mydict['hardware_serial']
2017-02-19 10:06:05 +00:00
if __name__ == '__main__':
2020-03-12 13:57:26 +00:00
server_address = ('0.0.0.0', 7000)
2017-02-19 10:06:05 +00:00
httpd = HTTPServer(server_address, testHTTPServer_RequestHandler)
print('running server...')
httpd.serve_forever()