News Update
Stay tuned for the latest news on the projects I am working on. I will be posting updates here as they happen.
Back to project blog contents
The Home Lab Cluster
The cluster consists of two Raspberry Pi5 servers, a Raspberry Pi 4 with the Sense HAT, a Raspberry Pi Zero with the Weather HAT plus an ESP32 running the weather data collection system and an ESP32 acting as the study BLE tracker node and running the study experiment.
One of the pi5 servers is the Jellyfin media server and the testbed for my TensorFlow/CV2 image regcogntion projects. The other contains a software development system for my NodeJs applications, primarily Chatter Box and the dymanic PHP part of my website.
My cluster is awaiting the arrival of the ZimaBoard 2 kick starter server. The ZimaBoard 2 is a single board computer with an Intel Celeron N5105 CPU, 16GB of RAM and 128GB of eMMC storage. It has two USB 3.0 ports, a newly upgraded PCIe 3.0 interface and the dual 2.5G Ethernet ports unlock greater hardware expansion possibilities and ultra-fast data transfer experiences. The new MiniDP 1.4 interface delivers vibrant 4K visuals for your movies, while the classic dual SATA interfaces allow ZimaBoard 2 to easily expand storage capacity. The ZimaBoard 2 is a great addition to my home lab cluster as it will allow me to run more demanding applications and services, in my case mainly as a Mini NAS, VM Manager and local AI processing.
Back to project blog contents
The Production Desk and Study Access Point
The production desk is where I flim all my beta test product reviews. It also houses all my test equiment - osscilliscope, signal anylsyer and mult-meter.
To the right of production desk is the the study access point consists of an Ethernet over Power plug that supplys a wired Ethernet connection to a 8 way TP-Link switch and my Home Assistant Green server. To the switch are connected my two Pi5 servers, DVR, XBox games console and another 8 way TP-Link switch located on my desk. To my desktop switch is connected my laptop, a Raspberry pi 4 with a Sense hat and a JetKVM that is used to access the Raspberry Pi 4 remotely.
Back to project blog contents
The Jellyfin Incident
All of a sudden my JellyFin server stopped working. I could not access the server from any of my devices. Cockpit (an excellant system monitoring tool) reported that the Jellyfin service had not been started. After a mild panic and an internet search the problem was located to the XML configuration files. Somehow the file /etc/jellyfin/migrations.xml had become zero bytes in length.
The solution is to delete migrations.xml so it gets automattically and hopefully correctly recreated. The file is located in /etc/jellyfin. The command to delete the file is sudo rm /etc/jellyfin/migrations.xml
. You also need to rename the system.xml
file located in the same directory. Then restart the JellyFin service with the command sudo systemctl restart jellyfin
.
If you update the JellyFin server or settings, you might get a blank screen when a client tries to connect. If this happens you will need to clear the application data and cache on the client device. This is done by going to the settings menu on the client device and selecting the option to clear the application data and cache. This will remove all the cached data and force the client to download all the data again from the server. This can take a while depending on how much data you have in your library.
Back to project blog contents
New Project Ideas
I am adding a bit of mood lighting in the the study using a ESP32 device installed with the WLED application to control a LED strip. The device is powered by a seperate USB power supply which is mounted on the wall. The device is controlled by using the Home Assistant WLED intergration. If this project is a success then the kitchen will be the next room to receive some LED effect lighting.
Using a ESP32 device to monitor the garden. The device reads the soil moisture, light level and temperature. The data is sent via MQTT to Home Assistant. The device is powered by a solar panel and a battery. The device is housed in a waterproof box and is mounted on a pole in the garden.
With some spare ESP32 devices, I decided to use them to create a BLE beacon to put in each room I wanted home assistant to track my pressence in.
Back to project blog contents
Quantum Mechanics Reading Material
Quantum mechanics current reading material.
Back to project blog contents

New Reading Material Part 2
The new reading material - Learn TensorFlow and the Linux command Line. TensorFlow is an open source platform for machine learning. It has a comprehensive, flexible ecosystem of tools, libraries and community resources that lets researchers push the state-of-the-art in ML and developers easily build and deploy ML powered applications. TensorFlow was originally developed by researchers and engineers working on the Google Brain Team within Google's Machine Intelligence research organization for the purposes of conducting machine learning and deep neural networks research, but the system is general enough to be applicable in a wide variety of other domains as well. TensorFlow is an open source project, download instructions can be found at https://www.tensorflow.org/install. The Linux command line is a powerful tool for managing your computer. It is a text based interface that allows you to interact with your computer in a way that is not always possible with a graphical interface.
Back to project blog contents
New Reading Material Part 1
The new reading material - Learn the Rust language and how to design and manufacture PCBs for my electronic projects using Kicad. KiCad is an open source software suite for Electronic Design Automation (EDA). The programs handle Schematic Capture, and PCB Layout with Gerber output. The programs run on Windows, macOS and Linux. KiCad is a mature EDA software tool under active development by a team of developers and a vibrant user group. KiCad is an open source project, download instructions can be found at https://kicad-pcb.org/download/.
Back to project blog contents
Weather Station Update
Using a battery backed ESP32 Featherlight V2 to read the outside temperture, humidity and UV levels. These are then sent via MQTT to the AdaFruit IO dashboard and to Home Assistant where they can be displayed as mini-graphs on a dashboard. The next stage will be to analyse the raw data, using the Pandas python library, looking for trends and patterns in the data. I will be posting updates on my progress here.
Back to project blog contents
My Smart Home Progress
I have decided to implement my smart home in stages. The first stage is to start with all the passive sensors, the ones that you can only read from like tempature, humidity, pressence, light level sensors. So in all the main rooms I will place tempature and humidity sensors and in the hallway and first floor landing I will place presence and light level sensors. I have also added a Zigbee network to my Home Assistant (HA) setup. Zigbee is an IEEE 802.15.4-based specification for a suite of high-level communication protocols used to create personal area networks with small, low-power digital radios, such as for home automation. I will be posting updates on my progress here.
Back to project blog contents
Heroku extension ClearDB
I use the ClearDB Heroku add to access my main SQL database. Apart from dropping the free tier, so it became a paid for by usage addon, I had been very pleased with its operation and stability. The other day I recieved an email from the ClearDB team stating that they have chosen to discontinue development of this add-on. It will be removed from all apps on November 30, 2024. So the hunt was on for another Heroku addon that can access my SQL databases. StackHero for MySQL came to the rescue. It is easy to use and has a good web interface for managing the database. I have now moved all my SQL databases to StackHero and I am very pleased with the result.
Back to project blog contents
The New Raspberry Pico 2 Micro Controller
I have been expermenting with the new Raspberry Pico 2 micro controller. The Pico 2 is also a great device for learning about electronics, programming and IoT projects. Currently the Pico2 does not have on board intergated WiFi, so I have used a ESP 01 connected to the Pico2 UART inteface to provide a Wifi connection.
Back to project blog contents
Weather Station Progress
The weather station uses a Raspberry PI Zero and Pico, measuring a range of outside and inside sensors. The data is send via MQTT to an AdaFruit IO backend, where we can display the data in graphical format. The data is also sent to a local database for further analysis.
Back to project blog contents
Stripe Payment Processing
A qurik that caught me out in my Stripe checkout code is the changing Stripe customer ID.
If between the checkout.session.completed and invoice.paid notifications your payment has to be authorized by your banking application you will get a different Stripe customer number.

Chatter Box - Using the Web Speech API
Chatter Box now uses the Web Speech API to allow chat texts to be dictated and spoken out aloud. This is a great feature to have as it allows a visually impaired user to hear the chat text out aloud.
Back to project blog contents
Mobile Application Development
My journey into mobile cross platform application development has began with new reading material - .NET MAUI in Action by Matt Goldman.
Back to project blog contents
dotnet build failure
All my dotnet build commands were failing. After a bit of research the solution was to create an empty directory - C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages
Back to project blog contents
Chatter Box Back on Line
Completed Chatter Box's upgrade to MongoDB version 6. It is now back online and can be accessed at Chatter Box.
Back to project blog contents
Chatter Box - Upgrade to MonogoDB Version 6 on Atlas
Atlas has decided to upgrade accounts to version 6 of MongoDB. Great but it breaks the code i use to access the DB, including the connection string. So I have had to put the ChatterBox application into maintaince mode to make the codig chamges. Back as soon as possible...
Back to project blog contents
Chatter Box - Network Timing Issues
When using Chatter Box on a network with a slower connection speed, timing issues can fall into 3 categories:
- Image Loading
- Room List, etc. Data Loading (JSON format)
- Aviator Image Loading
I changed to loading the JSON data files to be done synchronously therfor ensuring the data is avialable before containing. Also add a data loading dialog to inform the user that the system is initializing. Back to project blog contents

Coding Updates
The web speech API - The function getVoices() is executed asynchronously after the web page has loaded. This means that its data is not immediately available and the list is not fixed. A solution is to use the following promise based code: function getVoiceList() {
return new Promise(
function (resolve, reject) {
let synth = window.speechSynthesis;
let id;
id = setInterval(() => {
if (synth.getVoices().length !== 0) {
resolve(synth.getVoices());
clearInterval(id);
}
}, 10);
}
)
}
const chooseVoice = async (lang) => {
const voices = (await getVoiceList()).filter((voice) => voice.lang == lang)
return new Promise((resolve) => {
resolve(voices[0]) // returns the first voice in the list
})
}
And to use the function...
async function speakText(text,lang) {
var msg = new SpeechSynthesisUtterance();
msg.voice = await chooseVoice(lang);
msg.volume = 1; // 0 to 1
msg.rate = 1; // 0.1 to 10
msg.pitch = 1; //0 to 2
msg.text = text;
//msg.voiceURI = 'native';
//msg.lang = 'en-US';
speechSynthesis.speak(msg);
}

Reading Material Updates
Docker in Action by Jeff Nickoloff and Stephen Kuenzli. Docker provides a method of having development environments that can be run in isolated containers, without installing any system software on the computer. It also provides a way of replicating the production environment in a container to test your software.
Back to project blog contents
Responsive Website Design
Redesign of the End House Software website using responsive techniques. Using CSS3 techniques such as max-width, flexbox and grid to produce a website that scales across multiple devices with different screen sizes.
Rahul Chhodde has written an excellent article on the new viewport units that can be found at https://blog.logrocket.com/improving-mobile-design-latest-css-viewport-units/ and CSS breakpoints for Responsive Design by Rob O'Leary that can be found at https://blog.logrocket.com/css-breakpoints-responsive-design/.

Chatter Box
A NodeJS application that uses the ExpressJS framework including among others new HTML5 features (canvas, new audio controls, etc.), FAQ using Microsoft's QnA Maker, Google/Azure language translation APIs and a SignalR hub to process the chat messages. Find it on Chatter Box.
Back to project blog contents
Weather Station - Mark 1
I have finally started to build a weather station. I have been looking at the Raspberry Pi Pico for a while now and I have been thinking about what I could do with it. I have a few ideas but I have decided to start with a weather station. The idea is to expand this to a full outside weather logging station. I am using the Anvil dashboard application as the frontend.
Back to project blog contents
Reading Material
Current reading projects - It never hurts to read books on areas you already know, hence 'CSS in Depth'. Also on the revision list is 'Web Components in Action' allowing me to produce reuseable components to use across my websites. Python and Rust are two new languages I am learning. Python for all the Rasberry Pi projects and Rust as it seems to be emerging as a trending topic both in terms of performance and simplicity.
Back to project blog contents
Welcome Message
Welcome to my project blog. I will be posting updates on my projects here. This blog was officially started in January 2023. I will be updating it with earlier projects as I get time.
Back to project blog contents