From 5b893f3e10bd1d40631568652bdef69f087828c7 Mon Sep 17 00:00:00 2001 From: "Christian W. Zuckschwerdt" <zany@triq.net> Date: Thu, 1 Aug 2024 19:59:11 +0200 Subject: [PATCH] Add open in browser script (#2158) --- examples/open_rtl433.py | 91 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100755 examples/open_rtl433.py diff --git a/examples/open_rtl433.py b/examples/open_rtl433.py new file mode 100755 index 00000000..f38f5617 --- /dev/null +++ b/examples/open_rtl433.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 + +"""Helper command for rtl_433 to visualize a sample file in a web browser.""" + +from http.server import BaseHTTPRequestHandler, HTTPServer +import sys +import subprocess +import webbrowser + +hostName = "localhost" +serverPort = 8080 + + +def parseToPulseData(filename): + ret = subprocess.run(["rtl_433", "-F", "null", "-w", "OOK:-", filename], capture_output=True) + return ret.stdout + + +class PulseServer(BaseHTTPRequestHandler): + def do_GET(self): + global pulsedata + + self.send_response(200) + self.send_header("Content-type", "text/html") + self.end_headers() + + self.wfile.write(bytes(""" +<!doctype html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <meta name="mobile-web-app-capable" content="yes"> + <meta name="apple-mobile-web-app-capable" content="yes"> + <link rel="apple-touch-icon" href="https://triq.org/pdv/icon.png" /> + <link rel="apple-touch-icon" sizes="76x76" href="https://triq.org/pdv/icon.76.png" /> + <link rel="apple-touch-icon" sizes="120x120" href="https://triq.org/pdv/icon.120.png" /> + <link rel="apple-touch-icon" sizes="152x152" href="https://triq.org/pdv/icon.152.png" /> + <link rel="apple-touch-icon" sizes="180x180" href="https://triq.org/pdv/icon.180.png" /> + <link rel="icon" sizes="192x192" href="https://triq.org/pdv/icon.192.png"> + <link rel="icon" sizes="128x128" href="https://triq.org/pdv/icon.128.png"> + <link rel="icon" href="https://triq.org/pdv/favicon.ico"> + <meta name="description" content="I/Q Spectrogram and Pulsedata."> + <title>I/Q Spectrogram & Pulsedata</title> + <link href="https://triq.org/pdv/css/app.css" rel="stylesheet"> +</head> +<body> + <noscript><strong>We're sorry but I/Q Spectrogram & Pulsedata doesn't work properly without JavaScript + enabled. Please enable it to continue.</strong></noscript> + <div id="app"></div> +<script> +window.pulseData=` +""", "utf-8")) + self.wfile.write(pulsedata) + self.wfile.write(bytes(""" +` +</script> +<script type="module" src="https://triq.org/pdv/js/app.js"></script> +</body> +</html> +""", "utf-8")) + + +if __name__ == "__main__": + if len(sys.argv) != 2: + print("Usage:\n%s FILENAME.cu8" % (sys.argv[0])) + exit(1) + + filename = sys.argv[1] + pulsedata = parseToPulseData(filename) + + while serverPort < 65536: + try: + webServer = HTTPServer((hostName, serverPort), PulseServer) + break; + except OSError as e: + if e.errno != 48 or serverPort >= 65535: + raise + serverPort += 1 # Address already in use + + print("If the browser doesn't open go to http://%s:%s" % (hostName, serverPort)) + + try: + webbrowser.open("http://%s:%s/" % (hostName, serverPort)) + webServer.handle_request() # once + except KeyboardInterrupt: + pass + + webServer.server_close() + print("done.")