Introducing AllScan - AllStar Favorites/Memory Management & Scanning App

1 month ago I posted the following on the supermon groups io page:

I would like to see features added to Supermon or Allmon2 that support the following:

  1. Allow a Favorite to be added simply by entering the node# and clicking an ‘Add Favorite’ button on the main page. The favorites.ini then is updated with the favorite, specifically its node# and its name and from the ASL DB. This would be a big step up in user-friendliness vs. the multi-step process of manually editing the cfg file every time.
  2. Show the Favorites list in a multi-row select box on the main page, allow the connected node to be changed to a new favorite simply by clicking on that favorite in the list. This would automatically disconnect any currently connected node and connect to the favorite with only a single click/tap needed on the GUI and a confirm button.
  3. Allow the favorites list shown on the main page to be sorted by node#, name, description, frequency, location, etc.
  4. Allow favorites to be easily edited, deleted, or copied/pasted on the main GUI page.
  5. Add a favorites Scan feature that would connect to favorites one at a time and if there was no activity on one after a configurable time then disconnect and try the next favorite.

The above features would essentially give ASL the same memory management and scan capabilities that analog FM radios have had for many many years. This would be a natural evolution and nice improvement in core functionality for Supermon/Allmon. Having been a PHP developer for many years I could do this myself in a few weeks of time, but maybe someone else already had some of the same ideas or would like to do it.

This brings up some questions:

  1. Allmon2 is open-source and has a github repository. But what about Supermon? The code would clearly seem to be open-source since it’s all plain text php running on your node. But how do people contribute to it?
  2. If I were to implement this feature I would probably clean up some other things about AM2 and SM7 while I was at it. The GUIs for both are pretty old-school. I would upgrade things a bit make sure everything is html5, css3, mobile-friendly (eg. viewport tags), clean up w3c validation issues, etc. Maybe go to more of a CSS grid/flexbox/PiStar dashboard type of modular layout. Has anyone else thought about doing these kinds of improvements?

Thanks,
David NR9V

There was then further discussion and more details on the history of AllMon/SuperMon and it seemed there was indeed no app that did what I wanted, or anyone working to add those features. So I started on a new app last week and it is going very well. Sneak preview:

Still lots of work to do, so far just shows the node status and is able to import favorites.ini, allows favorites to be connected/disconnected with a single click (rather than having to disconnect previous connection, go to a separate tab, select from a list, etc.), and will support scanning all favorites or scan groups. Should be ready for alpha testing in a few weeks.

I also mentioned in the supermon post:

In considering what Allmon/Supermon do and how I use them, for the most part other than some occasional maintenance stuff the only thing I do with either on a daily basis is connect and disconnect nodes, and maybe look at the CPU temp. So it’s really just those 2 buttons that I’d need in a scanning app, and there’s really no reason to make this app a part of Allmon or Supermon, at least not initially. It could always be added later as a plugin/module that gets pulled into a div on the main page just by adding a simple php include. So I plan to start on this app…and will post on here and the ASL forum then with more info. It should be very simple to implement. I think I’ll call it AllScan. You heard it here first. I did a web search for AllStar AllScan and nothing came up so it looks like the name is available. I’ll then put it in github repo and on a website and will encourage anyone to make contributions/feature additions/forks/etc.

All coding has been done to the latest web development standards and best-practices, with php, javascript, html, and css cleanly partitioned, and following an MVC architecture. It is 100% mobile-friendly and optimized to be as easy to use as possible on both small and large screens. Example code excerpt of the php code that generates the Favorites table using an Html class:

AllScan-code-example

I will post updates here as AllScan progresses and if anyone has any questions or would like to help with testing let me know. Thanks, David

1 Like

Hello David,
Looks like you are doing a great job. I’d like to make one suggestion that might come in handy for some.
Would it be possible for you to add the connection status of each favorite nodes. I personally like to know what other nodes I might be connecting with when hooking to any particular node.
Prior to connecting to frequent nodes. II run a small personal PHP script containing the list of frequent favorites of mine. It returns my node search list with node status and/or if it is connected to any or many additional nodes. Telling me in advance what to expect should I chose to connect to a node. Something like this

Larry - N7FM

Hi Larry, sounds great, if you could please email me on my qrz address or post your script here. I’ll definitely be adding info to AllScan about the status and stats of various favorites. (maybe in popup divs so that it doesn’t take up extra screen real estate on smaller screens.) I was planning to pull in data from the ASL site’s last heard and/or active nodes data occasionally as part of ‘scan’ functionality, ie. there’s probably no need to actually connect to a node to see if it’s active if ASL already has that info in their DB. I’ll be looking for the most efficient way to do this with the least amount of connections and network queries needed so as to not have any possibility of causing a significant load on ASL’s servers or other nodes. Thanks, David

I’ve coded a mobile-centric front end for my Allstar node which lets me add / remove / replace connections from a list of favourites, as well as shut down or reboot the node. That’s all the functionality that I need when I’m using a mobile device, and besides, there’s only so much you can do with a small screen.

Hi Mark, Looks like a nice clean GUI for mobile there, making it quick and easy to select different favorites. Have you considered making your code available to the public? I’d bet there would be some significant interest.

With AllScan my goal is to show a lot of detail and have full ‘scanning’ features (using a term that’s analogous to analog FM channels) that show the activity of various favorites and other nodes quickly and easily without having to switch between various tabs, click lots of buttons or manually type in node #'s. The data already exists on supermon/allmon and various ASL stats pages but it will be nice to have all this data in one simple, flexible UI. AllScan has already been nice to use the past few days. I’m a software engineer by day but try to turn off the computer at a reasonable hour and then will often check out some different repeaters HT-mobile from the Living Room couch. So it has been nice to be able to just click one or two links/buttons to switch to any favorite or add favorites.

With more recent smartphones having reasonably large hi-res displays (relative to phones from 10 years ago) a lot of info can be shown and it’s easy to zoom in and out and move the page around as needed. The challenge of good UI design is keeping the info on the page as concise, clear and intuitive (eg. using visual cues/color-coding) while still showing the more important info and minimizing the number of UI interactions needed to execute the most frequently used functions. There are tradeoffs there and some people will prefer a more minimal UI with bigger text (but having to click around more to access other info or functions) whereas others will prefer a more detailed UI but maybe have to do a bit more zooming/dragging. These tradeoffs can be refined over time and maybe settings options added to enable what info/columns are shown by default or are maybe shown in popup divs or detail links. I intend that AllScan will work well in both normal PC browsers and mobile browsers and in fact have the same UI for both. This is a somewhat less common UI design paradigm now where many sites and apps design very specifically for one or the other, assuming that mobile users only want a super-duper simple UI with huge text and buttons. My Galaxy Note 20 phone works fine with most regular ‘desktop’ sites though and I’d rather see all the info in one place rather than have to click around a lot. Thus AllScan is more oriented toward desktop users and mobile users who tend to use their phone browsers more like a desktop browser, but there may be a whole other set of users who want a simpler UI, may only have a few favorites they regularly use and only need a few buttons to meet their requirements. In my opinion the more apps people make available the better.

And to Larry, got your email with your php script, and see you’re using the /api/stats/[node#] api which is great. Showing # of connections is indeed a very useful and helpful metric and can be shown with minimal screen real estate eg. the Favorites table could show the connected node count after each node number such as “56789 (3)” and it’s then clear that the favorite is reporting to ASL and has 3 nodes connected. Possibly that could also show if connected nodes are actual ASL users as opposed to hubs/bridges/etc. Though that number will not include analog users on a repeater so there could be significant activity on a repeater even though it shows no connections. But in that case showing the frequency/offset/tone details clarifies the node is a repeater.

It was not clear if the “Last Seen” column on AllStar Link | Node List and the stats->data->time value returned by the /api/stats/[node#] API refer to the time the node last reported or the time it was last keyed up, so I did some tests and confirmed that these both refer to last reported stats time, thus it appears neither of those provide the last keyup time, which is a useful metric. To get that I may need to have a webserver monitor the Keyed Nodes url and save to a DB table and then have AllScan do a web request to my server for that. If anyone knows how to directly get the last keyed (ie. “Last Heard” column on the AllStarLink Keyed Nodes (Beta) page) time for a node from one of the ASL APIs let me know. Thanks, David

David,
The time on the bottom was only a reference to me of when that check was done. It served no intended purpose other than that. I may have multiple terminals open on multiple devices as I play and it was just telling me when that scan check was run. You are correct it has nothing to do with keyup or anything else.

My only concern was seeing if a particular node was online and if so was did it have any other stations already connected. Prior to me joining in.

Hi David,

Part of my “day job” involves UI/UX, so the last thing I want to be doing in my spare time is supporting code. Hats off to you and Larry and all the others who make these tools available, I don’t know how you find the time.

Just to give you a bit more background, I designed this interface to be used while mobile, walking down the street etc. Normally I’m in reach of my own node, but when I’m out and about I like to temporarily link my node to the local repeaters, using it as a bridge between the repeater and one of the small number of networks where I spend most of my time.

As such I need the UI to be functional on a small screen at arms length in daylight, using one thumb to do everything. To me that’s a good summary of ‘mobile’ - if I have to pinch and zoom and drag (all the while hoping I don’t accidentally click something) then that’s a failed UX.

I appreciate your use case is significantly different to mine, but I’d strongly encourage you to test your UI on a cheap & nasty network radio like an Inrico S200 (tiny screen, ancient Android OS) before you spend too much time on it. My view is that mobile UI needs to work on all mobile devices, otherwise we’re back in the noughties with “this website is designed for Internet Explorer at 800x600”. :wink:

Hi Larry, sounds good. I was referring to the time field in the ASL API, not in your script. Your script is great for getting the /api/stats/[node#] data and nicely printing the results.

And Mark, yes it’s always good to test on a wide range of user devices including ancient phones and cheap network radios. Will definitely do that soon and make sure it works as well as can be expected on small screens. Re. time, I’m fortunate to be semi-retired and have plenty of time to devote to whatever interesting projects pop up.


I finished the initial features yesterday and will be uploading AllScan to GitHub today and posting the link here soon. Currently it does the basics of showing node(s) status, allowing connects/disconnects, and supporting one-click add/delete of favorites to the favorites.ini file. It does this with a relatively small amount of code, leveraging an existing AllMon or SuperMon install ie. server.php for the event-stream and connect.php. Those files haven’t changed significantly in years and provide a nice Asterisk API. Requiring a working install of AM/SM also ensures that users will already have all that working, and AllScan is basically then just an extension needing very little if any configuration.

The AllMon/SuperMon directory is set in include/common.php in the API_DIR define and can be changed to any location there. Because AllMon does not have a favorites.ini file however you would want to place a blank favorites.ini file in the allmon directory if you use AllMon2. AllMon’s controlpanel.ini.txt/php file could also be used and I may look into supporting that also at some point. That file seems equivalent to favorites.ini with exception that it uses labels[]/cmds[] instead of label[]/cmd[] entries.

I’ll be adding a lot more to the code but for now want to get it on GitHub so people can start to use it, look at the code, etc. Just the favorites management features are already quite handy. I’ll also be doing a youtube video soon with a quick demo and walkthrough of the app. But it’s such a simple app that anyone could download it, unzip the files and be up and running within minutes, at which point if you’ve ever used AllMon/SuperMon you’d have the GUI figured out in about 2 minutes.

Below is an example of the code that writes a favorite to favorites.ini. Currently this supports favorites.ini entries that refer to connecting nodes eg. cmd[] = "rpt cmd %node% ilink 3 [node#]" but I plan to add support for other types of commands at some point. The code also saves a backup copy to favorites.ini.bak in case there is any issue. New features will be prioritized based on requests so just let me know what you’d like to see.

v0.1 Beta is now available:

The README on the above page has full details on how to install. Looking forward to hear any feedback. Let me know if you have any questions on the install or anything else.

1 Like

AllScan v0.2 Beta just released. Major improvements in the overall code structure and some nice features added:

  • Favorites table is now sortable by any column
  • Status message scrolling div now shows the full history and details of all app actions and Asterisk Mgr events and responses
  • CPU Temp display added (works on RPi and Intel/AMD)
  • Helpful links added at bottom of page

v0.21 Beta out now… Supports Disconnect before Connect feature. This will send AMI an rpt cmd ilink 6 (Disconnect all links) and wait 500mS before executing a Connect request, if nodes are connected and ‘Disconnect before Connect’ checkbox is checked (default val = checked). To have the default for this checkbox be unchecked, set a url parm of autodisc=0. Change Node text input field to type=number and make the font size larger to make use of the field more mobile-friendly. Check for online/offline JS events.

David, it looks GREAT, both on my desktop browser and on my Google Pixel 6 Pro phone. This is pretty much EXACTLY what I’ve been hoping for. I hope to have it working very soon and then I can spread the word, if that’s OK.

Curt - N6ATC

1 Like

Thanks Carl, yes sounds good please do spread the word and thanks for your help with testing on your HamVOIP node. I only use ASL on my nodes so don’t have any way to test on HV here in the shack but I suspect there should not be any major differences between them as far as the basic Asterisk Mgr commands that AllScan needs.

BTW v0.22 is out now, with various optimizations to the GUI, CSS, and log/error messaging.

v0.3 out now. ASL stats “scan” features are now implemented. Release Notes: “Implement ASL Stats functions and color coding of Favorites Table ‘#’ and new ‘Rx%’ and ‘LCnt’ columns. Color codes for ‘#’ col: Dark Green: Node Active, Medium Green: Active, WT enabled, Red: Node is Keyed. Rx% refers to node’s reported TxTime divided by its Uptime. LCnt is the reported number of Connected Links (ie. nodes/hubs/links). ASL APIs are limited to 30 requests/minute per IP Address. AllScan currently defaults to one stats query per 2.5 seconds but will increase that timing interval if over limit http code or another error is encountered during an API request.”

I have installed AllScan on my G7RPG MicroHUB 513021 and it is working fine, thank you for the innovation. Good to see Supermon 7.1+ page is still working also. Keep up the great work!

1 Like

Short Demo video:

You know about our APIs, right?

https://wiki.allstarlink.org/wiki/Public_APIs

Edit: I just watched your video. Guess you already found the APIs. Good job on that and your app!

1 Like

Hi Tim, yes the app uses the stats.allstarlink.org/api/stats/[node#] API, which returns lots of good info. This is parsed in stats.php, and shown on the GUI in the Favorites Table columns using the color coded metrics described on the README. This gives a lot of useful info about each favorite and achieves my overall objectives for the app. A primary benefit being seeing when a node is active, which often happens if there is a net going on, thus AllScan makes it very easy to find nets or see when a net you already know about is happening without having to set reminders or look at a calendar. I’ve been getting a lot of good feedback on the app particularly on how easy it makes it to see which of your favorites are keyed up / active. I do have ideas to further expand some the data shown in the future in the app and am open to any suggestions for additional metrics or other features.

New version out now supports full User Authentication, Access Control, User Account Administration, Login/Logout, User Settings and Cfg Management functions. After installing or upgrading from pre-v0.45, AllScan will automatically create its (SQLite) database and when you first visit the allscan/ url will prompt you to create an Admin user account.

A few screenshots showing these new features:

cfgs

1 Like

NR9V is going strong and up to v0.53- check it out folks!

v0.53 2023-01-21
Performance optimizations. Fix issue that would cause an unnecessary database write on every page load/stats request for logged-in users. Fix JS console warning re. no SameSite cookie parameter. Specify allscan’s dir ($urlbase/) for cookie paths.

v0.52 2023-01-19
Minor bug fix: If after a new install or update an error was detected in dbInit(), an error would occur resulting in a blank page rather than normal page load and a useful error message being displayed.

v0.51 2023-01-18
Optimizations to Cfgs module. Add ‘DiscBeforeConn Default’ Cfg parameter which determines if the ‘Disconnect Before Connect checkbox’ is checked by default. To have the checkbox be Off by default, go to the Cfgs page and set ‘DiscBeforeConn Default’ to Off.

v0.50 2023-01-17
Add ‘Node Stats’ button. Implement Call Sign, Location and Node Title Cfgs, these are automatically imported from global.inc as before but once imported they are now managed on the Cfgs page and global.inc will no longer be read (unless these cfgs are later deleted). Fix issue where API files would require a logged in user prior to checking the ‘Public Permission’ cfg, resulting in Connection Status data not being shown for non-logged in users.

v0.49 2023-01-16
Add user authentication and permissions checks to all API files. Add DTMF command button. Updates and optimizations to installer/updater: Fix issue where updater would exit prior to completing all checks if install was up-to-date, provide more detail about all commands executed, prompt user before executing any apt-get/pacman update/upgrade actions.

v0.48 2023-01-11
Implement User Authentication, User Admin, Login/Logout, User Settings and Cfg Management functions. Major refactoring and additions. AllScan now defaults public (not logged-in) users to Read-Only access. This can be changed to None (no public access), Read/Modify, or to Full (no logins needed). Upon install of this version, AllScan will automatically verify the system configuration, create its Database and necessary tables, and when you first visit the allscan url it will prompt you to create an Admin user account, with detailed usage notes. Add additional log messages to dbUtils checkTables(). Change default order of possible allmon.ini locations to look in …/supermon/ prior to /etc/asterisk/ as supermon may be more likely to have valid AMI credentials. Update install/update script to update & upgrade OS packages (fixes issue seen on RPi4 w/latest ASL 2.0 where failed to find SQLite php extension).

1 Like