Can’t trust Cell coverage maps? Make your own!

At my day job, I’m responsible for the network connectivity for hundreds of remote locations.  We use 3G today as a backup to our T1 circuits.  One thing most IT people who have tried to put in a cellular network can probably attest to:  Vendor provided cellular coverage maps absolutely suck.  Even if you give the vendors a list of your addresses, you’ll get a far rosier picture of the coverage they can provide than exists in this reality.

So, what do you do when the vendor provided data isn’t any good?  

You make your own!


We’ve taken a small plastic tub, a consumer grade 5 port Ethernet switch, three CradlePoint CBA850’s, and a Quirky power strip to handle the huge power bricks the CBA850s need.  We’ve mounted the power strip to the bottom of the tub,  the switch to the side of the tub on one end, and the three CBA850s to the sides, so that their antennas fold down just below the top.  The CBA850s are pre-wired to the Ethernet switch, along with an extra CAT5 cable about 10 feet long.  The CBAs and the switch are plugged into the power strip.  The CBA850s are configured for AT&T, Sprint, and Verizon, so we can get a good picture of the coverage of all three carriers.  They are configured with static IPs not used elsewhere in our locations.  When our technician arrives at a location, he removes the top of the case, folds up the antennas, finds a power outlet and a free Ethernet port and plugs in.  A quick call to our NOC to let them know which location he’s at and which port to turn up is all that’s left for the tech to do.  At that point, our NOC staff can kick off a script which updates the router config for that location to NAT the CBA850s to addresses specific to that store, allowing them to be reached from headquarters.

Then, using the API magic I mentioned in my last post, the script validates that all three CBA850s are reachable, then it checks in with them to see if the WAN is connected, waiting around 5 minutes for any stragglers.  Once they are all up, or the expiration time has passed, it kicks off a series of speed tests, both upload and download, gathering the results of the tests along with other diagnostic info (SINR, signal strength, etc).  Drop that data into a database table, and there’s our “map”.

That’s no MAP!  That’s just a bunch of numbers!

No, our “map” won’t look like a map, but it will have data telling us which of the three main cellular providers is the best at every one of our locations that we’ve tested.  From the perspective of our management, that’s really all that matters.

July 1, 2015 at 8:39 am Leave a comment

CradlePoint API info

Every CradlePoint router (with at least a reasonably recent firmware) includes a very nice API.

However, if you search looking for documentation on their website about it, you’ll only find information on the API for ECM, their central management service.

Here are a few very useful URLs that you can call with the Restful client of your choice:

Figure out what model of CradlePoint you’ve reached, and/or the serial number:
https://  [CradlePoint IP]/api/status/product_info/

“data”: {
“company_name”: “Cradlepoint, Inc.”,
“copyright”: “Cradlepoint, Inc. 2015″,
“mac0″: “REDACTED“,
“company_url”: “”,
“manufacturing”: {
“board_ID”: “050000”,
“mftr_date”: “20150401”,
“serial_num”: “REDACTED
“product_name”: “CBA850″
“success”: true

Get your firmware version (major.minor.patch):
https:// [CradlePoint IP]/api/status/fw_info
“data”: {
“build_date”: “Thu Feb 19 12: 00: 07 MST 2015″,
“manufacturing_upgrade”: false,
“major_version”: 5,
“custom_defaults”: false,
“minor_version”: 3,
“fw_update_available”: false,
“patch_version”: 4,
“upgrade_minor_version”: 0,
“build_version”: 13953,
“upgrade_major_version”: 0,
“upgrade_patch_version”: 0,
“build_type”: “RELEASE”
“success”: true

Find out if you’re connected:

https:// [CradlePoint IP]/api/status/wan/connection_state

“data”: “connected”,
“success”: true

Get your WAN interface IP:
https:// [CradlePoint IP]/api/status/wan/ipinfo
“data”: {
“netmask”: “”,
“dns”: [
“ip_address”: “”,
“primary”: “lte-REDACTED“,
“gateway”: “”
“success”: true

Too much good diag stuff to mention: 

Please note, I REDACTED most of the unique identifying info, but these fields are all available on your gear.  To get the portion of the URL that’s redacted, look in the “primary” key of the result of your WAN ip info, shown just above.

https:// [CradlePoint IP]/api/status/wan/devices/lte-REDACTED/diagnostics

“data”: {
“HM_PLMN”: “310410”,
“CELL_ID”: “176898562 (0xa8b4202)”,
“CS”: “UP”,
“PRD”: “MC400LPE (SIM1)”,
“VER_PKG”: “,005.010_002″,
“MDL”: “MC400LPE (SIM1)”,
“TXCHANNEL”: “20576”,
“MODEMOPMODE”: “Online”,
“ROAM”: “1”,
“VER”: “SWI9X15C_05.05.16.02 r21040 carmd-fwbuild1 2014/03/17 23:49:48″,
“CFGAPNMASK”: “65534”,
“MODEMPSSTATE”: “Attached”,
“RXCHANNEL”: “2576”,
“VER_PREF_PKG”: “,005.010_002″,
“RSRQ”: “-7″,
“RSRP”: “-90″,
“DBM”: “-69″,
“SCRAPN”: “16”,
“SS”: “100”,
“LAST_PIN”: “”,
“BANDULFRQ”: “824-849″,
“TX_LTE”: “-6.5″,
“RFBAND”: “Band 5″,
“SELAPN”: “1”,
“SINR”: “21.2”,
“EMMSTATE”: “Registered”,
“CHIPSET”: “9X15C”,
“MODEMTEMP”: “40”,
“HW_VER”: “1.0”,
“IS_LTE”: “true”,
“MFG_MDL”: “MC7354-CP”,
“MFG”: “CradlePoint Inc.”,
“PRLV”: “1”,
“LAST_PIN_VALID”: “False”,
“PRI_VER”: “05.03”,
“DEFAPN”: “1”,
“DORMANT”: “Dormant”,
“PUK_RETRIES”: “10”,
“EMMSUBSTATE”: “Normal Service”,
“MODEMIMSSTATE”: “No service”,
“CUR_PLMN”: “310410”,
“BANDDLFRQ”: “869-894″,
“RFCHANNEL”: “2576”,
“PRI_ID”: “9903437”
“success”: true

My favorite (so far) is a bit difficult to explain in this blog post, but I’ll try:

https:// [CradlePoint IP]/api/control/netperf

To use this, you need 5.4.0 or newer firmware, and you’ll really need your own NetPerf server, but if you get that set up, you should be able to initiate your own speed tests across the LTE link.  You’ll need to pass data to this one, though, so it’s a bit harder.  Here’s my data template, with words surrounded by percent signs as variables.

$json_template = ‘{“input”:{“options”:{“limit”:{“size”:%size%,”time”:%timeout%},”port”:””,”host”:”%host%”,”ifc_wan”:””,”recv”:%recv%,”send”:%send%,”tcp”:true,”udp”:false},”tests”:null},”run”:1}';

After customizing this for the test that I want to perform, I do a HTTP PUT of this data.  In my case, with PHP, I have to pass my $json like this:  array(‘data’ => $json).

Anyhow, doing this kicks off a speedtest that runs for %timeout% seconds.  You can then to a GET to the /api/control/netperf URL and get a status, like so:

https:// [CradlePoint IP]/api/control/netperf

“data”: {
“input”: {
“tests”: null,
“options”: {
“udp”: false,
“limit”: {
“size”: 0,
“time”: 10
“tcp”: true,
“recv”: true,
“port”: null,
“send”: false
“output”: {
“results_path”: null,
“status”: “idle”,
“command”: null,
“error”: null,
“progress”: 0,
“guid”: -1
“success”: true

In the “output” section above, had I just performed a test, I could look at the value of “results_path”, which is a URL to the results of the test.

There is a TON of great info you can get from the CradlePoint API.  CradlePoint built their web interface off of the API, so pretty much anything you see in the web interface can be accessed via the API.  In fact, if you simply use a tool like HTTPwatch to look at the interaction between your web browser and the remote CradlePoint device, you’ll be able to learn how to do all this yourself.


June 30, 2015 at 8:29 pm Leave a comment

Graduation Savings Accounts

About a year ago, I came up with the idea of a Graduation account.  The concept is an account for the kids that they won’t get access to until they graduate from high school.  This account would be for them to get a car, put down as their first month rent for an apartment, or whatever purpose they want, really.  What they use it for isn’t as important as the lesson it’s there to teach them:  That saving money for the future is important, and that they should put a little money aside whenever they get some income.

So, it’s just a savings account, you ask?  Not quite.  My concept is closer to a 401k account.  It’s money they can’t touch once they’ve put it aside, and it gets a “Dad match”.  Whatever money they put into their Graduation Account, I match it 100%.  So, if they get birthday or Christmas money (or money for getting good grades) and want to save it, they can effectively double their gift.  If they earn money around the house, they can double that money too.  Plus, it will earn interest while time passes until graduation.


April 19, 2015 at 11:50 am Leave a comment

CradlePoint configuration file format

What’s a CradlePoint?

We’ve recently been considering the use of CradlePoint routers.  CradlePoint specializes in routers that work with wireless providers.  Some companies make routers that have 3G or 4G compatibility with a limited set of hardware, but CradlePoint made a business out of trying to support a significant number of them.  According to my initial tests and their documentation, it should support just about every 3G modem we’ve used over the last 3 years or so from AT&T, Sprint, and Verizon, including some new ones we just got in.

We’ve actually been pretty impressed with the level of detail found in the CradlePoint.  It gives us far more information about the cellular signal than our current 3G solution, potentially helping us to make decisions that could affect our customers.

The Plan

In an ideal world, we’d like to configure one CradlePoint router the way we want it, backup the configuration file, then take that and turn it into a template with variables in place for everything that’s unique at each site.  Using our existing site database, we could churn out configuration files for just about every remote site.  We might need to have a different template for each wireless provider, but we could make it work.

The Problem

However, when you backup the configuration, you get a binary file.

Searching through their knowledge base turned out to be a waste of time.

In an earlier version of CradlePoint software, the configuration was in XML format.  From looking at their CLI, it looks like they’ve moved on to JSON formatted data, which is probably for the best.  It’s less prone to issues than XML, according to what I’ve read.

Using their CLI, you can do a “get” from the root and get the entire config in clear text, but you get a lot more than you need (including log files, etc).  There’s a config directory you can cd into, then do a “get” and you’ll get most of what you need.  But, looking through the results, you’ll see that it’s missing some key things that are located in other sections of the file system, like the network and port configuration.

Their Enterprise tech support was not very forthcoming on the matter.  They don’t want to share the format.

What’s the Big Deal?

CradlePoint has a service (ECM), which is basically a Saas central manager for their routers.  I dislike Saas, as a general rule.  Sure, you have subscription services for anything security related, but a subscription to manage my hardware?  It seems that they include this with support now, so it’s “free”, as long as you are keeping up with your support.  Edit:  Nope, I was wrong here.  ECM is a separate service.

I think they have obscured their format precisely to keep people from being able to do what I like to do:  script my own configuration.  We are considering setting up VPN’s across our CradlePoints.  We are all about security, so we’d want a large unique key for every site, and a way to update them periodically.  We’d have to keep those configurations in-sync with the devices at the headquarters end of the VPN tunnel.  Scripting sounds like a perfect solution to these problems, and we can do that if we know the format of the files.

Now, ECM may still have a potential use in my environment.  If it can do a good job of helping us manage AT&T, Sprint and Verizon, it might be worth having, as long as you can just use it to monitor the CradlePoints.

Final Words

CradlePoint, open up your config file format.

You’ll be more likely to get customers like us who want to automate everything ourselves.

April 13, 2015 at 9:52 pm 1 comment

Comcast blocking Plex? Probably not…

Last summer I used Plex quite extensively.  I took my daughters to swimming practice and instead of driving home, waiting 30 minutes, then driving back to get them, I decided to simply stay there and watch something via Plex on my iPhone while I waited.

Since then, I’ve only used Plex occasionally from outside the home.  Some months ago, I noticed that Plex stopped working when I wasn’t at home.  I briefly looked at it but not too closely.

I decided to dig into it tonight to try to figure out what was going on.

To test, I turned Wifi off on my iPhone and attempted to connect to Plex via LTE.  No dice.  In Plex, I went to Settings > Server > Remote Access.  It complained that Plex was unreachable from the outside.  I noticed that my firewall logs did not show any connection attempts against port 32400, the Plex default.  Interesting.  After trying a few things, I decided to try a different port.  So, I changed the Plex service object (TCP Port 32400) on my Firewall to TCP Port 34200, ensuring the NAT rule still pointed to port 32400 on my Plex machine, and updated the TCP Port setting in Plex.  Within a few moments, it showed “Fully accessible outside your network”.  I validated that I could connect from my iPhone.  Worked great.  In my firewall logs?  Yep, I’m getting hits on 34200 now.

So, is Comcast blocking Plex in NE Florida?  (*GASP*)

I’m leaning toward user error on my part (even though I don’t see an error, and it was working at one point…)

Anyhow, I’m working now…  If I suddenly can’t connect on this new port in a few weeks, I’ll revisit my theory…

April 13, 2015 at 7:56 pm Leave a comment

YNAB long term review – 2 years!

March 15rd, 2013, the date of the oldest entry in my copy of YNAB.

You Need A Budget (YNAB) is a personal finance software package which I began using a little over two years ago.  The company that sells it doesn’t just sell a piece of software, they give you a method to get out of debt.  For me, their method worked.

This is my two year review.

Before I started using YNAB, I had been working for over 20 years, but never seemed to be able to get out of debt and meet any real financial goals.  Sure, I was able to pay my bills on time, buy new cars, etc. but never seemed to be able to get ahead, or save up enough for a major purchase.  I virtually always paid on credit then worked to try to pay it off after the fact.  You can’t really handle retirement that way…

As I remember it, it was late on a Friday or Saturday night.  I was feeling the typical levels of stress associated with debt, as I had either just paid bills or looked at private school tuition pricing, something I saw no possible way of being able to afford.  As I lay in bed surfing a few sites on my phone, I happened across an item on LifeHacker mentioning a special YNAB sale that had been going on, though it appeared to have ended a few hours earlier.  I turned off my phone and laid there in bed for a while.  Suddenly, I made the decision to just get up and see if the sale was still, by some chance, going on.  It was, and it didn’t take me long to make the decision to buy it.

Prior to buying YNAB, I read about one major feature I used that YNAB was missing: the ability to import transactions directly from your online bank.  This weighed in as a negative to me at the time, but viewing this through the lens of experience, I realized this feature doesn’t help you control spending or save money.  It only helps you save time.  But, if you are saving time doing a crappy job of managing your finances, what good is that, really?  After using YNAB for two years, I can tell you there is real value in putting those transactions in yourself, either via your smart phone at checkout, or your computer as you pay your bills.

In just a few short months, YNAB re-shaped the way I viewed money.  I was suddenly very precisely aware of how much money I was spending, and on what.  Within three months, I essentially found $600 per month that I had been frittering away.  Using YNAB, I was able to determine how much money I could afford to use to pay down debt.  It also let me “run the numbers out” to see how long it would take me to extinguish my debt.

There I was, with a monthly budget with realistic numbers, and a plan that showed just how much progress I would make toward killing my debt, each and every month, until it was gone.  Seeing a real-world plan to get out of debt felt great.  It was the motivation I needed to give the YNAB method a real chance at working.

With that debt paid, I figured I would be able to send both of my high school aged girls to private school.  Fast forward to today – they’ve been attending that private school for 3 semesters now.

My wife was initially hesitant to budget, feeling like it would restrict her spending.  She has since told me that she actually likes having a target amount to spend.  If she takes the kids Easter shopping, and we have $200 in the clothing category, she can easily determine a per-child limit.  She took ownership of the grocery category, and got mad at me when I spent money from it without consulting her beforehand.  She knows we are more prepared for emergencies, and she can see that my stress level has dropped dramatically.  The positive effects of budgeting won her over.  Having the monthly budget meeting with her helps, as we both get input on the budget plan.

Using YNAB, we’ve been able to save for Christmas and pay for it from the budget, so there was no “January credit card hangover”.  The big homeowners insurance and property tax bills are now easily handled, since we can save up for them many months ahead of time.  That money is set aside in the respective categories, so I know exactly what it’s for.

Prior to YNAB, I might look at my checking account balance and feel like things were well in-hand.  Then, I wasn’t mentally tracking how much was on all the credit cards, the money we were saving for individual goals, upcoming large bills, etc.

There have been bumps in the road, though.  Like the month that a rock hit by a mower took out a side window on the mini-van.  And the next month when the back window of the car inexplicably shattered.  But, since we had a small Emergency Fund saved, those bumps were just bumps.  They didn’t cause serious stress, or even one penny in interest charges, like they would have in the past.

Early this year, I decided to make retirement more of a priority, so I started a Roth IRA account with WiseBanyan.  I budget it in YNAB, just like any other bill, and I can use YNAB to plan “bumps” to my contributions in future months.Stress over money has plummeted in my home.  We have things planned out in YNAB, so all our major expenses are covered, and we have a little money set aside for emergencies.  Living off of last month’s income means that if I were to lose my job tomorrow, I’d still have about of month before things start to get really tight. So, after two years with YNAB, what’s my conclusion?  Before YNAB, I struggled financially, sometimes wondered where my money went, and couldn’t seem to ever get out of debt.  For me, YNAB was the answer.  Ready to get started with YNAB?  It’s normally $60, but if you click this link, you’ll save $6.00.  Full disclosure:  I also get $6 when you use my link, which adds up to a grand total of about $6 every couple of months, usually.

April 9, 2015 at 11:07 pm 1 comment

Older Posts


  • Blogroll

  • Feeds


    Get every new post delivered to your Inbox.