Mcombo 7040 Lift Chair Manual

I recently purchased an Mcombo 7040 Lift Chair for my elderly grandfather. Prior to purchasing the chair my Grandfather had some questions so I figured I’d have a look at the manual for answers. Surprised that I couldn’t find one, I decided to post it here.

Read more

Bash Scripts for Cloudinary

Cloudinary is an amazing image hosting service that offers both a highly functional free tier in addition to a paid enterprise grade image hosting and transformation service.

In this tutorial I demonstrate a few simple bash shell scripts to interface with Cloudinary.

Read more

DIY DAS and NAS for Media 2020

Supermicro 836A

Why another NAS/DAS article?

There are a lot resources online for building your own DIY DAS. A lot of them contain good information but none of them were comprehensive for the DAS I wanted to build so I compiled the information that was useful for my specific 2019 build here. The prices linked below are subject to market fluctuations and timing, so some of the components I found at a great price. Overall they should be roughly the same as what you can find. Your mileage may vary.

Read more

Deluge Grafana Dashboard

Tonight I was introduced to a Deluge exporter for Prometheus so I figured I’d whip up a quick dashboard for visualizing the metrics.

Deluge Dashboard
Deluge Dashboard is a very simple way to display Deluge torrent metrics. It uses the deluge exporter to populate a Prometheus data source. The panels in this dashboard can be copied into more comprehensive dashboards for a single pane of glass view of your network transfers or it can be used as a standalone glanceboard.

You can install the dashboard from the Grafana website or from my repo.

Read more

Easily disable Pihole from your iPhone (or iPad)

If you run a pihole the odds are good that you’ve needed to disable it from time to time. I wanted an easy way to disable my pihole(s) temporarily, so I wrote a simple shell script to do it for me. I’m almost always on my Macbook, so this approach worked for a while. I needed to disable it a few times while I was out of the room, so I figured I’d find an easier way to do it from my phone.
I already used an iOS app called Launcher on my iphone, so integrating pihole api calls with it seemed like a no-brainer. For convienience, it can be used from your lock screen without having to unlock your phone.

Using the Launcher Widget to disable pihole

Read more

Grafana Dashboards

Grafana is a really great tool for visualizing data. In my homelab, I have obviously have a lot of data so what better than to use than the right tool for the job. Below, you can find some screenshots of my dashboards. I use a raspberry pi that just runs a full screen browser for viewing the dashboard slideshow in addition to a few other glance boards (DAKBoard, Monitorr, et al).

VMWare Cluster Health DashboardESXi Datastores Overview

Here’s the Gallery
Read more

Plex Grafana Dashboard

Plex Dashboard

I made a Grafana Dashboard for my Plex system at home. I feed various system telemetry into an influx database as the data source and Plex-Data-Collector for inserting the data from plex. Additionally, I wrote a python script for injecting logs from NZBGet into mysql. I then use Grafana to display the graphs. I really love Grafana and I’ve created several dashboards:

Read more

Service monitoring with Monitorr


As part of my dashboard project (link coming soon) I was looking for a lightweight self hosted monitoring solution for my home network services. I found Monitorr and decided it was a perfect fit for my needs. It’s simple and it doesn’t have any frills, which is exactly what I wanted.

I use it with an iOS app called Glimpse to keep an eye things from my phone via a widget:

You can find installation instructions and download it from here.

pfSense graphs in Grafana

Using Grafana with pfSense

Grafana Dashboard

Update: 2018/09/13
pfSense has a plugin for telegraf which can be installed from the gui. I recommend this method rather than what I figured out below. I’m leaving these notes for manual installation reference.

I put this guide together using information from various other blogs. This is current as of December 2017 and using pfSense 2.4.2. For this tutorial, you’ll need your IP or hostname of your influxdb data source and your username and password.

The data flow is as follows:

pfSense -> Telegraf (gather metrics) -> InfluxDB (store metrics) -> Grafana (render graphs)

Read more

NZBGet MySQL Extension Script

I wrote a simple plugin for NZBGet that inserts download history into a MySQL database. Having my download list in a database makes operations on the data easier than groking text logs.

I wanted to display my most recent downloads on a Grafana Dashboard:
Table of downloads

To use simply copy the script into your NZBGet/scripts directory. In NZBGet, select settings and set the hostname of your MySQL instance.

You can download the plugin on github

Read more

Using curl with the Pihole API

I couldn’t find any quick references about accessing the Pihole API so I created this page.

Pihole is a great app for blocking internet advertising that was originally designed to be run on a raspberry pi. It blocks known advertisers’ domains at the DNS level by effectively null routing requests destined to serve ads. It can be run on VMs, Raspberry Pis and bare metal servers.

Here are the steps to access the pihole’s rest api. I’m using curl in this example, but you can integrate it with OpenHAB or any other system that can talk REST.

Step 1: Obtaining the web password

Most of the useful API endpoints the pihole provides wisely require authentication. After searching around the net I found that I could pass &token=A_VALID_SESSION_TOKEN to authenticate to the pihole for a session. Unfortunately, this is a temporary auth token and wasn’t suitable for my needs. After more digging, I found the gem I needed: &auth=WEBPASSWORD. Sounds great, but where do I obtain this password? You simply log onto your pihole instance or server and run:

sudo cat /etc/pihole/setupVars.conf | grep PASSWORD

Read more

NZBGet ElasticSearch Plugin

I wrote a simple plugin for NZBGet that inserts download history into an ElasticSearch cluster (or node). It uses API calls rather than parsing filesystem logs. I wanted a quick way to just insert the data so I created this script.

Simply copy the script into your NZBGet/scripts directory. In NZBGet, select settings and set the hostname of your ElasticSearch instance.

You can download the plugin on github

Read more

Speeding up Ansible Playbook runs

Ansible is a great tool for configuration management but because of the way it’s designed a common complaint is that it’s not as fast as other tools like Salt, Chef or Puppet. This is because Ansible doesn’t have an agent that listens (although it can) on a host and uses a different type of deployment methodology that is based on SSH. This post isn’t about the pros and cons of each tool, but rather about ways to improve upon Ansible’s default configuration values. By default Ansible ships with very conservative default values. This is smart in my opinion because it offers greater compatibility out-of-the-box. Here I highlight some safe adjustments that can be made to the default configuration for improved performance (speed!)

Real World Playbook Test

For this test I’m using a real-world playbook that I use in my homelab when provisioning a new CentOS VM. It configures some basic things (hostname, ssh keys, etc), installs common packages/utilities and tunes some OS configurations.

Read more

Pfsense WAN with Cellular LTE/4G

Using pfsense for WAN Redundancy with Cellular LTE/4G

I work from home a lot and I need reliable internet connectivity to workplace. As a result, I decided to implement a failover WAN connection into my firewall. I use pfSense as my firewall which combines power and flexibility with ease of configuration.

The Hardware: NetGear LB2120 LTE Modem

While researching options, I decided on the Netgear LB2120 4G LTE modem since it has Gigabit port(s) and can be used with external antennae.

Netgear LB2120

Read more