6.0 KiB
layout | title |
---|---|
page2 | PiScrape - Text-Only Hotspot Information |
PiScrape allows you to display your connected reflectors/talkgroups in a small webpage you can embed, like this:
It does this by scraping the Pi-Star dashboard for the information using a shell script and php page. It can be run on any webserver with PHP and SSH access to your Pi-Star. It can also be run entirely on Pi-Star if you open web ports or reverse proxy. The original version ran on a locally hosted web-server that could pull the dashboard directly. But I also had success running it on remote web-servers that could SSH in to the Pi-Star. Remote SSH execution is not yet included in the repository; but if you know how to do that, you probably can write that small script yourself. The current implementation is running entirely on the PiStar via nginx reverse proxy.
The PHP page itself largely just calls the shell script, which returns the HTML code containing your connection info. When the script is executed; it pulls either the repeaterstatus frame from the dashboard or the Brandmeister API page. Then using a series of awk and sed commands, the information is extracted and output.
Bash Script
#!/bin/bash
#.013 alpha
# de NQ4T (nq4tango@gmail.com)
# SET THE HOSTNAME OR IP OF YOUR HOTSPOT!
pidmr=192.168.1.10
# I HAVE TWO SO I SET TWO
#pidstar=192.168.1.11
# grab copy of rendered bm_links.php from hotspot, convert HTML to newline, filter by "TG", remove timeslot info, convert to one line
# check contents to see if we need to display 'no groups' message
# if you are not using DMR, then comment these two lines out
# to comment out, just add a pound-sign to the start of the line, like these comments.
dmr=$(curl -s http://$pidmr/mmdvmhost/bm_links.php| sed 's/<[^>]\+>/\n/g' | grep '^TG' | sed 's/TG/#/g'| sed 's/(.)//g' | sed ':a;N;$!ba;s/\n/ - /g')
[ -z "$dmr" ] && dmr="No Talkgroups Found"
# do the same for dstar with repeaterinfo.php but just egrep for reflector prefix, strip HTML, keep the first 8 characters
# check to see if we need to display not linked
# if you are not using D-Star, comment these next two lines out. if you don't, the script will take longer to run.
# If you modify what egrep looks for, you may get other modes to work.
#dstar=$(curl -s http://$pidstar/mmdvmhost/repeaterinfo.php | egrep "REF|XRF|DCS|XLX" | sed 's/<[^>]\+>//g' | cut -b 1-8)
#[ -z "$dstar" ] && dstar="Not Linked"
# HTML for table cells on hotspot.php page. These are all one line even if they look like two in your editor.
# This is for a 2x2 table using DMR and D-Star
#printf "<tr><td style=\"vertical-align: top; font-family: Verdana; font-weight: bold; text-align: right;\" width=\"20%%\"><small>BM TG:</small></td>\n<td style=\"vertical-align: top;\"><small>$dmr</small><br></td></tr>\n<tr><td style=\"vertical-align: top; font-family: Verdana; font-weight: bold; text-align: right;\" width=\"20%%\"><small>D-Star:</small></td>\n<td style=\"vertical-align: top;\"><small>$dstar</small><br></td></tr>\n"
# This is for a DMR only display.
printf "<tr><td style=\"vertical-align: top; font-family: Verdana; font-weight: bold; text-align: right;\"><small>BM TG:</small></td>\n<td style=\"vertical-align: top;\"><small style=\"font-style: italic;\">$dmr</small><br></td></tr>\n"
# This is for a D-STar Only Display
# printf "<tr><td style=\"vertical-align: top; font-family: Verdana; font-weight: bold; text-align: right;\"><small>D-Star:</small></td>\n<td style=\"vertical-align: top;\"><small style=\"font-style: italic;\">$dstar</small><br></td></tr>\n"
The script iself is commented pretty well to explain how it works. Minimal modification is required for operation. The main requirement is you can either access the dashboard from the system running the script, or can remotely execute the script on a machine that can. Since putting your Pi-Star's dashboard on the internet is risky without reverse proxy; remote execution via SSH and key-based authentication is recommended.
The script's output is literally pre-formatted HTML:
pi-star@pi-star(rw):~$ ./piscrape.sh
<tr><td style="vertical-align: top; font-family: Verdana; font-weight: bold; text-align: right;"><small>BM TG:</small></td>
<td style="vertical-align: top;"><small style="font-style: italic;">#3151 #98003 </small><br></td></tr>
The PHP executes the script, stuffs this information in the proper place, as well as adding a time-stamp:
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NQ4T Hotspot Info</title>
</head>
<body>
<div style="margin-right: auto; font-family: Verdana; text-align: left;"><big>
</big><small><span style="font-weight: bold;">NQ4T Pi-Star Hotspot
Network</span><br>
<br style="font-weight: bold; font-style: italic;">
<span style="font-weight: bold; font-style: italic;">Current
Connections:</span><br>
</small><big>
</big>
<table
style="border: 1px solid black; text-align: left; border-collapse: collapse;"
cellpadding="2" cellspacing="0">
<tbody>
<?php
$output = shell_exec('/media/html/qth-nq4t/hotspot13alpha.sh');
echo "$output";
?>
</tbody>
</table>
<big>
</big><small><br style="font-style: italic; font-weight: bold;">
<span style="font-style: italic; font-weight: bold;">Listed connections
do not mean I have a radio on or am at a radio.<br>This is especially true
for Brandmeister.</span><br
style="font-weight: bold; font-style: italic;">
<span style="font-style: italic; font-weight: bold;"> For informational
purposes only.
</span><br>
<br>
73 de NQ4T
<br>
<?php
echo date("Y-m-d") . " @ " . date("H:i:s") . "z";
?>
</small>
</div>
</body>
</html>
Most of this was actually based off of Pi-StAPrS and was designed to be embedded in a QRZ profile page.
Full source code is available in the repository.