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:

1
2
sudo cat /etc/pihole/setupVars.conf | grep PASSWORD
17d1ce58eb420998d69dfd2850e7c639706715335d78447f78723489df78234

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 ESLog.py 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

Dynamic DNS via Digital Ocean API

This is a quick tutorial about setting up a simple shell script that runs periodically to update a DNS record on the internet with the IP address of your network. If you’ve ever wanted to have myhome.mydomain.com always updated with your home IP address, this is one way you can do it. There are paid and free services that offer this functionality, but I choose to use this method because it gives me ultimate flexibility over my domain.
This tutorial assumes you have your own Top Level Domain (TLD) and that you’ve configured it to use Digital Ocean as the authoritative DNS for it. Here, I’ll use “example.com” as the top level domain.

Generate a Personal Access Token

Log in to Digital Ocean and click on API from the top Menu. Click the Generate New Token button and give it a name. The name is not parsed, it’s just for your own reference. I like to give it something descriptive to my application. For this example, I’ll use MyDNS. Be sure to check the box next to Write so we can update the records using this API Key.

Once you have the API Key, save it somewhere for reference. It’s one of the 3 variables we’ll need to update in the update_do_dns.sh script.

The API Key will look something like this:
fe3aeda96b7wer8wer1e6bb5erae528sdf3a6120dfrf7e492bwer6343fsdf

Read more

Quieting a Dell R710

I have a Dell R710 rev. II that I use in my home office lab homelab running ESXi 6.5. The R710 sits in my office where we work from home. Normally the hum of the R710 fans isn’t terribly bothersome - the 5 fans it houses run at around 3,800 RPM each. The noise is definitely noticeable so I did a little bit of digging into ways I could quiet it down. After looking into replacing the fans with quieter ones I found that I could override the system control of the fans and silence them that way. While I have to monitor the onboard temperatures more closely when disabled, I’ve found little downside to doing so when I’m in there. Here’s how to do it:

The commands used below assume default username / password of root / calvin. Hopefully you’ve changed the default password so substitute yours where applicable.

Read more

A Dashboard for Pihole Stats

Pihole + Grafana + InfluxDB Dashboard

Grafana Dashboard
I wanted to add the metrics from my ad-blocker, the great Pihole to my executive dashboard. To create the dashboard I used Grafana to display the graphs and InfluxDB a the time-series backend database. I use a simple python script to get the metrics from pihole and record them in influxdb.
Grafana makes it easy to render them into a user friendly dashboard.

Installing Grafana and Influxdb is beyond the scope of this blog post but here is the scipt that I use to get the data from pihole and insert it into Influx.

After you’re getting data in your influx db you’ll have to create a grafana dashboard.

Read more

Amazon Alexa in the car

Since Alexa for Car is becoming available on Dec. 5th, 2018, I thought I would throw some pictures up of my Alexa installation before it was productized. It was novel at the time. I used a Verizon LTE Jetpack for cellular connectivity. I simply feed the audio into the Auxillary port in the car and tether wirelessly to the LTE modem. This is far from a noteworth project, it’s just something I did for fun and proof of concept.

Perfect fit

Read more