Archive for September, 2014

Inner Range (CLOE) Port ‘0’ Cable Pinout

So we have an Inner Range alarm system at my work.. It’s a great system, but like most alarm vendors, the manufacturer thinks tight lips is a good policy.

Yeah, no.

$99 for a ‘port 0’ cable to program the alarm boards is a huge rip-off, so I sat down before work this morning and figured out how to talk to them.  It’s just TTL RS232.

On the CLOE devices, there’s a 5-pin header.  Pinout is as follows:

1  GND
2 UNKNOWN
3 RXD
4 TXD
5 UNKNOWN

Honestly, I don’t care what the unknowns are, probably flow control?  however wiring GND, RXD and TXD to a USB->TTL RS232 adapter (With the appropriate swapping of RXD/TXD betwee ends), I’m happily talking to this device at 115,200, so I’m happy and can now program it without finding the $90 cable that’s gone missing :-p

 

 

Extending the WHMCS API and Fetching Invoice PDF’s

At work, we’re currently doing a FULL rebuild of our customer portal.  Part of the requirements of the system are that our staff must only be logging into one place.  At present they have to be logged into the portal AND WHMCS.  So in v2, we have to basically rebuild 90% of the WHMCS admin interface into our portal, and use the WHMCS API for manipulating data stored in WHMCS.  (We’re also adding a MongoDB caching layer for read access, and then using hooks in WHMCS to update the cache whenever data is modified).

We found a few ‘holes’ (read: missing functionality) in the WHMCS API, so had to see about adding an API to sit alongside WHMCS.  We did ask WHMCS how to go about writing custom API functions to use within the WHMCS API framework, but they came back saying this was not possible.  A fair bit of Googling around, and I managed to find a blog post detailing how to write custom API functions for WHMCS.  With a bit of work, we now have a nice basis for writing WHMCS API modules.  The first one I built for testing was for pulling Invoice PDF’s, which is not currently available in the WHMCS API.

And Voila, a simple WHMCS call such as:

Returned Variables

Then it’s a simple matter to go base64_decode($jsondata->pdf) (assuming you used json format and had done a json_decode() on the returned data…), and you have the binary data for the PDF, ready to save to disk, or pass back out to the user via HTTP.