Fix poor quality video in Plex under docker

I’ve recently moved servers and instead of managing my own Plex install, I decided to go with the a docker install.  It took seconds to sort out and I was very happy with it.  That was until I enabled remote access.  Suddenly, all my videos looks started looking terrible quality.

This has been resolved by going to Dashboard -> Settings -> Network and under “Lan Networks” adding the values “,,″ (without the quotes).

You will need to work out your own values.

To work out the subnet for the plex container:

    $ docker network inspect plex_default|grep Subnet
                     "Subnet": "",

To work out the subnet for your local network (in the majority of cases),

     $ hostname -I | awk '{print $1}'

So, this needs to be :


Using an APEMAN C450 Dash Cam as a security camera with ZoneMinder using Docker

Just plug the APEMAN C450 dash camera into your Linux server via USB and select “PC Camera” using the buttons on the side.

Confirm it works with this command:
ffmpeg -f video4linux2 -s 640x480 -i /dev/video0 -ss 0:0:2 -frames 1 /tmp/out.jpg

Then download this docker-compose config file

Add the video device to the docker-compose.yaml file:
- /dev/video0:/dev/video0

Install/start your docker container:
docker-compose up -d

Then visit the freshly installed system on whatever your IP address that you have configured:

To add the dash camera as a monitor :
General Tab:
Source Type = Local
Source Tab:
Source Path = /dev/video0
1280 x 720

Note that, when I first set this up recording, I was getting a corrupt/ green frame of video at the beginning of the recording.  Whatever was causing this made it trigger an event constantly.  To fix this, I went into the settings for /dev/video0, buffer tab and changed Alarm frame count from 1 to 3


nginx case insensitive URL

There was a requirement for a website on the server to have a case-insensitive.

There is no simple option in nginx to make it case-insensitive, there are also no nested if statements available.

This isn’t easy to achieve, but the below seems to have done it me (for only 1 URI!)

location ~* ^/TNG/$ {
return 301;

location ~* ^/TNG$ {
return 301;

set $BOTH "";

# Does the case-insensitive pattern match?
if ( $request_uri ~* ^/TNG/index.php$ )
set $BOTH "${BOTH}1";

# Is it not an exact match to the correct case?
if ( $request_uri != /TNG/index.php )
set $BOTH "${BOTH}2";

# If both true, then redirect to the correct case
if ( $BOTH = 12 )
return 301;

Unable to log into Plex Web View

So, I was tinkering with the Plex Media Server settings and then suddenly I got this error in Chrome from my desktop.

“Plex didn’t send any data”


Visiting my server from worked – really weird.

So, going back over what changes I had made, I found the culprit.

Under the Plex Settings > Settings > Network menu option, I had modified the IP6 “Secure Connections” from “Preferred” to “Required”.  I changed this back to Preferred and that immediately fixed my issue and the web view was working again.


Decrypt TP-Link config.bin backup file

Copy your config.bin file to linux then run this command to create a decrypted config.txt :

openssl enc -d -des-ecb -nopad -K 478DA50BF9E3D2CF -in config.bin > config.txt


Choosing your own hosting and server type

In the past, I have paid £1000+vat a year for hosting to feed by hosting addiction.  This has whittled down in price over the years and now I’m paying just £42 inc vat!

Choosing the host type

  • Virtual Private Server (VPS)
  • Dedicated Server
  • Cloud VPS
  • Run on your home kit from your home broadband connection

Budget Hosting

Some good value providers in the UK are and   I’ve been with both of them and had a few annoyances (switching my server off | Selling me hosting that was supposed to be maintained, but wasn’t | Me asking them to reboot the host and them saying that it wasn’t where is was supposed to be.  Me asking again… them saying it’s still not there and closing the call) over the years, but in all-in-all they’re worth the money.

However, this has become an absolute no-brainer very recently…  My new provider charge just £3.50 a month for SSD based VPS (mine feels super fast!)

Premium Hosting

I have used a reseller account in the past and this had all sorts of features like a system for your users to manage their own accounts and resell too.  It all seemed a bit messy to me and eventually I’ve gone for managing it all myself with a few custom written scripts that do things perfectly.

I’ll expand this section as and when.

Android Llama

Llama – I’m going to be late home


My setup

I travel from Manchester to Stafford.  My missus leaves the house about 15 mins before I am due to arrive.  The train stop before Stafford is Crewe and the time difference is about 22 mins… perfect timing to message her if late.

So for my example I did the following…


  1. Set up an Area called “Crewe
  2.  Set up an Event called “Arrive at Crewe”
    1. Added a Condition for Day of the week = Mon, Tue, Wed, Thur or Fri
    2. Added a Condition for Time Between = 16:00 – 19:00
    3. Added a Condition for Enter Area = Crewe
    4. Added a Condition for Llama variable = When ‘ArrivedAtCrewe’ has a value of ‘False’
    5. Set up an Action of Set Llama variable ‘ArrivedAtCrewe’ to ‘True’
  3. Set up an Event called “Late to Crewe”
    1. Added a Condition for Day of the week = Mon, Tue, Wed, Thur or Fri
    2. Added a Condition for Time Between = 18:05 and 18:06
    3. Added a Condition for Llama variable ‘ArrivedAtCrewe’ has a value of ‘False’
    4. Added a Condition for Llama variable ‘LateToCreweSentSMS’ has a value of ‘False’
    5. Added an Action of run Locale plugin ‘SMS: <number>’ with a message of “I’m late, not arrived at Crewe yet!” (also checking the setting to prevent multiple SMS’s in one hour)
    6. Added an Action of Set Llama variable ‘LateToCreweSentSMS’ to ‘True’
  4. Set up an Event called Arrive at work
    1. Added a Condition for Day of the week = Mon, Tue, Wed, Thur or Fri
    2. Added a Condition for Time Between = 09:30 – 09:45
    3. Added a Condition for Enter Area = Work
    4. Set up an Action of Set Llama variable ‘ArrivedAtCrewe’ to ‘False’
    5. Set up an Action of Set Llama variable ‘LateToCreweSentSMS’ to ‘False’

A further extension to this would be to create another Event which detects Entering Crewe and if the LateToCreweSentSMS is set to True then send another text to say that I have just arrived at Crewe and should be around 22 mins.

EDIT: This isn’t working brilliantly at the moment, as if the train hangs around just outside the station waiting for a platform, then Llama thinks that it has arrived.  I’m working on some logic to detect that it has arrived and then left the area for 5 mins before texting.

Android Llama

Android automation with Llama

The Llama application is a free automation tool available on the Google Play store.

I have recently set up a few things that make my life much easier.

1) Automatically pre-book my Cross Country seat using their TMR (ten minute reservation) service – if I’m at work at 9:30am.

2) Automatically SMS my missus if I haven’t arrived at the train station before my destination by 18:05.  See here for details on how to do it.

Please comment with life automation that you have come up with.


Huawei HG523a forgotten password

Okay, I’m a numpty – I forgot the admin password for my router.  The (security driven) delay before you can try again is hampering me from trying the many I might have used – especially as it doesn’t tell you if it was wrong or it is still timed out!

Luckily, on one of my computers, I have a cookie saved that fills my username and password in for me, so I can still log in.  Okay, so I must be able to recover my password from this… right?  I really don’t want to have to factory reset the thing.  Challenge… wait for it… accepted.

  • Enter the menu system (with your saved credentials).
  • Click Advanced and click Okay to proceed.
  • Click Maintenance, click Device, then click the Configuration File tab.
  • Click the Download Configuration File button and save it to your desktop.
  • Open the file with Notepad (or Wordpad).
  • Search for the text Userpassword
  • Copy and paste the password into the website.
  • Click the <Decode> button.
  • Your password will be displayed in plain text.


MineCraft Python Raspberry Pi

MineCraft Pi Edition – Robots game

I’ve just whipped up a 3D Robots game that runs inside MineCraft on the Raspberry Pi.

To install

Bring up a VXTerminal window and run the following command

git clone
To run

Start a MineCraft game on your Raspberry Pi and then in VXTerminal run the following commands

cd minecraft-robots
How to play

Two robots about to collide
                  Two robots about to collide

Run away from the robots.  If they touch you – you lose.  Try and get them to crash into each other by moving strategically.  Kill all 10 robots to win!

Have fun !