One of the devices I use in my home is a Hubitat Elevation hub. Similar to SmartThings or even Google Home, it integrates a wide range of devices, protocols, and apps to help make a "smart" home. I originally chose the Hubitat because of its good support for local and private automation (rather than expecting the internet to always be working and fast).
Keeping with the theme of local operations, I automate some of its management tasks. Historically I downloaded backups and rotated certificates with shell scripts, but Hubitat does not support a formal API and the scripts have always felt a little fragile. This week I decided to convert them into a standalone
hubitat-cli binary (written in Go) which is much easier to test, maintain, and use. Now, instead of ~20 lines for my backup task, I can just run:
$ hubitat-cli backup download 2022/02/16 08:47:16 hubitat-cli: "level"=0 "msg"="downloaded backup file to Hubitat_2022-02-16~220.127.116.11.lzf"
And, instead of ~40 lines to update certificates and reboot the hub, I can run:
$ hubitat-cli advanced certificate update --certificate-path=tls.crt --private-key-path=tls.key 2022/02/16 08:48:37 hubitat-cli: "level"=0 "msg"="updated certificate" 2022/02/16 08:48:37 hubitat-cli: "level"=0 "msg"="requested reboot"
I use Kubernetes to coordinate these tasks, so it's also available as a small (~8MB) image:
$ docker run ghcr.io/dpb587/hubitat-cli For interacting with Hubitat Usage: hubitat-cli [command] Available Commands: advanced For advanced features backup For managing backups reboot For restarting the hub Flags: -h, --help help for hubitat-cli --hub-ca-path string custom certificate authorities to trust ($HUBITAT_CA_PATH) --hub-insecure disable TLS verifications ($HUBITAT_INSECURE) --hub-password string password for login ($HUBITAT_PASSWORD) --hub-url string URL for accessing the hub (e.g. http://192.0.2.100; $HUBITAT_URL) --hub-username string username for login ($HUBITAT_USERNAME) -v, --verbose int verbosity level Use "hubitat-cli [command] --help" for more information about a command.