From 3755cdb5ff5560351e527f55d37028ea8f80be29 Mon Sep 17 00:00:00 2001 From: Kim Huebel Date: Tue, 9 Feb 2021 17:45:07 +0000 Subject: [PATCH] Reading out the modem-versin directly from the configured modem in MMDVM.ini DONT FORGET: Read the README!!! Add user mmdvm to group dialout!!! Otherwise it will not work! --- README.md | 1 + html/js/functions.js | 8 +++++--- html/js/version.js | 2 +- logtailer.py | 32 ++++++++++++++++++++++++++++++-- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 015b5a1..4fe51a1 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ Actually known: ### Installation steps * first of all (if not already done by installation of MMDVMHost): create a syetemuser with `sudo adduser --system --no-create-home --group mmdvm` +* also add the new user to the group "dialout" with `usermod -a -G dialout mmdvm` * add following line to /etc/sudoers with `sudo visudo` for getting the logtailer access to MMDVMHost: `www-data ALL=(ALL) NOPASSWD: /usr/local/bin/MMDVMHost` * clone this repository to your home-directory with `git clone --recurse-submodules -j8 https://github.com/dg9vh/MMDVMHost-Websocketboard` to clone the repository with it's submodules * create directory with `sudo mkdir /opt/MMDVMDash` diff --git a/html/js/functions.js b/html/js/functions.js index 533dc95..53175eb 100644 --- a/html/js/functions.js +++ b/html/js/functions.js @@ -478,10 +478,10 @@ function getLastHeard(document, event) { lines.forEach(function(line, index, array) { logIt("LogLine: " + line); if (!inDashboardBlacklist(line)) { - if (line.indexOf("description:") > 0 ) { + /*if (line.indexOf("description:") > 0 ) { modem = line.substring(line.indexOf("description:") + 12); document.getElementById("modem").innerHTML = modem; - } + }*/ txing = false; if (line.indexOf("Talker Alias") < 0 && line.indexOf("Downlink Activate") < 0 && line.indexOf("Preamble CSBK") < 0 && line.indexOf("data header") < 0 && line.indexOf("0000:") < 0 && line.length > 0 && (line.indexOf("received") > 0 || line.indexOf("network watchdog") > 0)) { @@ -747,7 +747,9 @@ function getSysInfo(document, event) { data = data.substring(data.indexOf(" ") + 1); document.getElementById("mmdvmhost_version").innerHTML = data.substring(data.indexOf("mmdvmhost_version:") + 18, data.indexOf(" mmdvmhost_ctime")); data = data.substring(data.indexOf(" ") + 1); - document.getElementById("built").innerHTML = data.substring(data.indexOf("mmdvmhost_ctime:") + 16, data.indexOf(" callsign")); + document.getElementById("built").innerHTML = data.substring(data.indexOf("mmdvmhost_ctime:") + 16, data.indexOf(" mmdvm_version")); + data = data.substring(data.indexOf(" ") + 1); + document.getElementById("modem").innerHTML = data.substring(data.indexOf("mmdvm_version:") + 14, data.indexOf(" callsign")); data = data.substring(data.indexOf(" callsign") + 1); document.getElementById("callsign").innerHTML = data.substring(data.indexOf("callsign:") + 9, data.indexOf(" ")); data = data.substring(data.indexOf(" ") + 1); diff --git a/html/js/version.js b/html/js/version.js index 0d399c7..3ad77f3 100644 --- a/html/js/version.js +++ b/html/js/version.js @@ -1 +1 @@ -var dashboard_version = "2021-02-08 20:53:38"; +var dashboard_version = "2021-02-09 17:45:07"; diff --git a/logtailer.py b/logtailer.py index 0b5d979..d17102e 100644 --- a/logtailer.py +++ b/logtailer.py @@ -19,6 +19,7 @@ import functools from http import HTTPStatus import subprocess import time +import serial MIME_TYPES = { "html": "text/html", @@ -38,6 +39,32 @@ dmrids = {} logging.basicConfig(format='%(asctime)s %(levelname)s %(message)s', level=logging.INFO) conv = Ansi2HTMLConverter(inline=True) +def getMMDVMVersion(port): + try: + logging.info('Modem-Port={}'.format(port)) + ser = serial.Serial(port, baudrate = 115200) + logging.info('Connected!'); + time.sleep(1) + logging.info('Querying version from modem'); + ser.write(bytearray.fromhex("E0 03 00")) + ch = "" + while ch != bytearray.fromhex("01"): + ch = ser.read() + + version = "" + ch = "" + while ch != bytearray.fromhex("00"): + ch = ser.read() + version += ch.decode() + ser.close() + logging.info('Modem-Version={}'.format(version)) + + return version + except Exception as e: + logging.info('Modem-Exception={}'.format(e)) + return "Actually not available" + pass + async def process_request(sever_root, path, request_headers): """Serves a file when doing a GET request with a valid path.""" @@ -73,6 +100,7 @@ async def process_request(sever_root, path, request_headers): logging.info("HTTP GET {} 200 OK".format(path)) return HTTPStatus.OK, response_headers, body + async def view_log(websocket, path): global config global dmrids @@ -163,11 +191,12 @@ async def view_log(websocket, path): mmdvmhost_version = str(subprocess.Popen(config['MMDVMHost']['MMDVM_bin'] + " -v", shell=True, stdout=subprocess.PIPE).stdout.read().decode("utf-8")) mmdvmhost_ctime = time.ctime(os.path.getmtime(config['MMDVMHost']['MMDVM_bin'])) mmdvmhost_buildtime = datetime.datetime.strptime(mmdvmhost_ctime, "%a %b %d %H:%M:%S %Y") + mmdvm_version = getMMDVMVersion(mmdvmhost_config['Modem']['Port']) callsign = mmdvmhost_config['General']['Callsign'] dmrid = mmdvmhost_config['General']['Id'] txqrg = mmdvmhost_config['Info']['TXFrequency'] rxqrg = mmdvmhost_config['Info']['RXFrequency'] - await websocket.send("HOSTINFO: mmdvmhost_version:" + mmdvmhost_version + " mmdvmhost_ctime:" + mmdvmhost_ctime + " callsign:" + callsign + " dmrid:" + dmrid + " txqrg:" + txqrg + " rxqrg:" + rxqrg) + await websocket.send("HOSTINFO: mmdvmhost_version:" + mmdvmhost_version + " mmdvmhost_ctime:" + mmdvmhost_ctime + " mmdvm_version:" + mmdvm_version + " callsign:" + callsign + " dmrid:" + dmrid + " txqrg:" + txqrg + " rxqrg:" + rxqrg) await asyncio.sleep(1) while True: cpu_temp = "" @@ -236,7 +265,6 @@ def websocketserver(): asyncio.get_event_loop().run_forever() - def main(): dmr_id_lookup = config['MMDVMHost']['DMR_ID_Lookup'] dmr_id_lookupfile = config['MMDVMHost']['DMR_ID_LookupFile']