Headshot of William Cooley

About Me

Welcome to the personal website of William Cooley.

Currently working as a Systems Engineer and located in Rochester, NY, USA.
Have experience in various System Administration, DevOps and Software development capacities. Ran a SaaS business for a number of years, worked as a consultant and employee.

I enjoy finding open-source solutions to technology problems.
Some of my experience includes:

  • Linux - Ubuntu and CentOS system administration
  • Ansible for deploying applications
  • Prometheus monitoring software. Hardware, OS, Networking, Databases and Custom application metrics
  • Grafana metrics visualization. Creating custom dashboards for Prometheus datasources
  • Physical datacenter operations - PXE machine provisioning / IPMI, BMC, iDRAC management / iSCSI storage array implementation and management
  • Cloud / Virtual datacenter - AWS, Digital Ocean, Rackspace, Linode / VMware Vsphere
  • Firewall / Routing / VLAN switching / VPN tunneling (Layer 2 / 3)
  • Scripting applications - Python, PHP, JavaScript (Node.js)
  • Mysql databases - administration, backup, migration, tuning and replication
  • Basic understanding of electronics and RF systems - Amateur Radio Technician Class license (2004) / example project

Native English and German* speaker and dual citizenship holder.

Picamera2 RTSP Streaming with multiple resolution feeds

Using Raspberry Pi OS - 11 (bullseye) Python camera library

This is an update to my previous blog post where I wrote about how to stream a high and low resolution hardware encoded H.264 video feed from a Raspberry Pi and Camera Module over RTSP. With the release of Raspberry Pi OS based on Debian Bullseye in November 2021, there were some significant changes to the camera driver that deprecated1 the Picamera V1 Python library that I had been using in my previous code. [Read More]

Home Assistant Dashboard on Polycom VVX

Showing sensor states on a VOIP desk phone idle screen

I’ve had a Polycom VVX 500 “business media phone” on my desk since 2016 and have only used it for making phone calls since then. However this series of Polycom VVX phones also has a built in limited-capability web browser. The phone can display a non interactive web page on it’s idle screen and an interactive page that’s accessible through the phone’s “Applications” menu. On a side note, I think I’ve been running a VOIP PBX for personal or business use, more or less continuously since 2006. [Read More]

Building an ESPHome environmental multi-sensor

Envirosense ESP8266 take 2

Sometime early last year I replaced my SmartThings home automation hub with a Home Assistant VM running on an Intel NUC. Not long after that I converted my Envirosense boards (see previous post) to run the ESPHome firmware and started scraping Prometheus metrics from Home Assistant. There was one thing I wasn’t happy about with my original design. The PIR sensor was frequently showing false positive motion events. This seems to have gotten worse with the switch to the ESPHome firmware. [Read More]

Raspberry Pi Camera RTSP Streaming with multiple resolution feeds

Using GPU accelerated H.264 encoding

Update July 2023: The setup instructions below work with Raspberry Pi OS (Legacy) based on Debian 10 (buster). For instructions that will work with Raspberry Pi OS based on Debian 11 (bullseye), please have a look at my updated blog post here.

I was looking for a way to stream two H.264 video feeds from an old Raspberry Pi 2 and Raspberry Pi Camera Module with the first feed being the highest resolution that I could achieve from the camera and the second being a lower resolution that would be more suitable for analysis. To monitor the Pi Camera and perform motion and AI object detection with a Frigate NVR system, I wanted the feeds served from an RTSP server.

[Read More]

Hoverboard motor hall sensor replacement

I have a couple Hoverboard (self-balancing scooter) motors that I’m intending to use for a project with an oDrive motor controller. One of the motors was causing an ERROR_ILLEGAL_HALL_STATE on the oDrive and after swapping the motor channels and some troubleshooting with a multimeter I had determined that 1 of the 3 internal hall-effect sensors was not functioning as expected.
Digi-Key has a nice article on how these hall sensors function in BLDC (Brushless DC) motors.

[Read More]

Envirosense ESP8266 Prometheus Exporter

Exporting ambient motion, temperature, humidity and barometric pressure metrics with a WiFI IoT board

Over the last few years I’ve spent a considerable amount of time working with the Prometheus monitoring system and time series database in combination with the Grafana visualization platform.
I had been wanting to track the temperature and humidity of a few rooms and was looking for an excuse to run a Prometheus server at home. I thought it would be neat to use a Wi-Fi microcontroller to collect this sensor data and expose it directly in the Prometheus simple text-based exposition format.

Two completed boards in 3D printed cases

Two completed boards in 3D printed cases

[Read More]