diff --git a/swisscom-receive-packet.py b/swisscom-receive-packet.py new file mode 100644 index 0000000..7071aa6 --- /dev/null +++ b/swisscom-receive-packet.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python3 + +import urllib +import psycopg2 +import websocket +import xml.etree.ElementTree as ET +from http.server import BaseHTTPRequestHandler, HTTPServer +import re + + +# HTTPRequestHandler class +class testHTTPServer_RequestHandler(BaseHTTPRequestHandler): + # not used, just a sample + def do_GET(self): + # Send response status code + self.send_response(200) + + # Send headers + self.send_header('Content-type','text/html') + self.end_headers() + + # Send message back to client + message = "Hello world!" + # Write content as utf-8 data + self.wfile.write(bytes(message, "utf8")) + return + + def do_POST(self): + length = int(self.headers['Content-Length']) + post_data = self.rfile.read(length).decode('utf-8') + + # Print on stdout + print(post_data) + + # And insert into the db +# self.insert_xml(post_data) + + # Send to Martin / port 8001 + + # Sendo to dashboard +# self.to_dashboard(post_data) + + def to_dashboard(self, data): + dev = self.devEUI(data) + text = self.payload(data) + + ws = websocket.create_connection("wss://home-safety-visual.eu-gb.mybluemix.net/data") + ws.send("%s" % data) + ws.close() + + ws = websocket.create_connection("wss://home-safety-visual.eu-gb.mybluemix.net/rawmessage") + ws.send("%s:%s" % (dev, text)) + ws.close() + + # Working lora node + if dev == "9CD90BB52B6A1D01": + try: + key, value = text.split("=") + print("Trying to send: %s:%s" % (key, value)) + ws = websocket.create_connection("wss://home-safety-visual.eu-gb.mybluemix.net/%s" % (key)) + ws.send("%s" % (value)) + ws.close() + + except ValueError: + print("Cannot split: %s" % (text)) + + + def devEUI(self, data): + root = ET.fromstring(data) + return root[1].text + + def payload_hex(self, data): + root = ET.fromstring(data) + return root[7].text + + def payload(self, data): + myhex = self.payload_hex(data) + return bytes.fromhex(myhex).decode('utf-8') + + def insert_xml(self, data): + try: + conn = psycopg2.connect("dbname=hackzurich") + cursor = conn.cursor() + cursor.execute("insert into data (packet) values (%s)", (data, )) + cursor.connection.commit() + conn.close() + except Exception as e: + print("DB Insert failed: %s" % e) + + + + +if __name__ == '__main__': + server_address = ('0.0.0.0', 8000) + httpd = HTTPServer(server_address, testHTTPServer_RequestHandler) + print('running server...') + httpd.serve_forever()