Homelab Server

I’ve renewed my interest in setting up servers for various home automation tasks. I’ve taken the one-of-each approach to home automation which is fun but hard to get everybody to play together. I use the Amazon/Echo, SmartThings/ActionTiles and Google Home ecosystems. Amazon is mostly for voice control and routines and SmartThings/ActionTiles for tablet kiosks that conveniently cover the holes in the walls where the old intercom and speakers were. I was never able to make OpenHab fit in well in part because of the learning curve. I’m hoping to pull all this together with Home Assistant.

I pulled out the old ASUS AM1M-A/AMD Athlon 5370 APU system and fired it up again. I replaced the Ubuntu Workstation/KVM/QEMU setup with ProxMox which is a Debian based system also using KVM/QEMU with a nice GUI interface. I’m hoping I’ll manage the learning curve better.

This turned in to be a catchall installation for all the servers I run under ProxMox. I plan to enter a separate post for in-depth installaton procedures.

ProxMox

After a struggle to find some good video tutorials for installing ProxMox and virtual machine guests, I found a good place to start with a video by Andreas Spies. I have a few SBCs including a Raspberry Pi 4 file server but it’s really hard to get new ones. This video suggested a used Lenovo tiny computer instead. I already have an M73 running Plex. I liked the idea and found another M73 on Ebay for $50 so I got it. It is close to the price of a Raspberry Pi 4 and doesn’t use a whole lot more electricity and will run VM guests. One of the M73s will run ProxMox with several VM guests. The other will be a smaller travel version with Plex and a few other VMs. It is small enough to travel with me on RV trips.

BIOS settings to change are to enable CPU Virtualization, maximize C State Support and disable secure boot. Download the ProxMox ISO and burn it to a USB drive using BalenaEtcher. Boot from the USB drive and install. Browse to https://<ip address>:8006. Upload an ISO file selecting local storage group and ISO images.

Select the ProxMox server and Create VM using the uploaded ISO file. Use SeaBIOS and Qemu Agent. Be sure to select Windows OS when installing Windows. Go to Proxmox Helper Scripts to get rid of the “No valid subscription” nag screen. Edit: This has been moved to here. Choose Proxmox VE 7 Post Install. Here’s what it looks like today:

Home Assistant

My first VM is Home Assistant. I started out with it on the Rasbperry Pi 3. I’m going to be happier with the extra resources that are available on the ProxMox server. I was able to load this first VM with excellent help from The Tinker Dad’s video.

Download the KVM/ProxMox (.qcow2) file from the Home Assistant website and transfer it to Proxmox using WinSCP. Create the VM by right clicking the Proxmox node in the Proxmox GUI. Once the VM is created, import the image from the command line:

qm importdisk 100 /root/haos_ova-9.5.qcow2 local-lvm –format qcow2

Cockpit

Cockpit helps administer Ubuntu servers with a web-based GUI. Tech Republic helped with the installation.

Nagios

Nagios Core is a network monitoring tool that I’m anxious to explore.

I used the installation procedure from Its Linux Foss to install Nagios. This procedure was straightforward but did not install the current release. I’m checking Arkit for a procedure for the upgrade.

Starting Nagios Core

  1. Init Script: The easiest way to start the Nagios Core daemon is by using the init script like so: /etc/rc.d/init.d/nagios start.
  2. Manually: You can start the Nagios daemon manually with the -d command line option like so: /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg.

Pi-hole

Pi-hole is network-wide ad blocking program originally designed to run on a Raspberry Pi. It also functions as a DNS server for computer name resolution. With several computers on my network, I’m weary from looking up and typing so many ip addresses. Maybe this DNS server will let me use host names instead.

With resources to burn on the ProxMox server, I installed it as a VM. I used the installation procedure on the Pi-hole website. A lot of websites load noticeable faster using Pi-hole for DNS. Some websites detect it and beg or require you to let their ads show. This tutorial should help me get started with adding DNS records.

Wireguard

This will provide remote access to all my network. Here’s a tutorial from DigitalOcean and a video.

Home Networking

The Domain Name System (DNS) has been and still is mostly a mystery to me. What the heck are A records and cnames? I know it doesn’t work well for my homelab servers. I do appreciate the convenience of remembering and referencing a computer name versus a four-octet number (IP address).

When references to computer names are not reliable, fixed IP addresses are a requirement. An easy but unmanageable solution is to put server names and IP addresses in a Hosts file on each computer and to hard code static IP addresses on each computer. Using permanent IP reservations on the DHCP (dynamic host configuration protocol) server is a big improvement, but name resolution is still spotty. If you throw in a Microsoft computer on you network, it has a separate name resolution process – WINS (Windows internet name service). This can help for computers that talk “Microsoft” that are either Windows or have SAMBA (server message block networking protocol) installed (Linux computers).

I dislike the inconvenience of managing static IP addresses. However, fixed IP address for servers are really importantI’m hoping Pihole

I need to update my DNS entry for lynnhargrove.com at NameCheap.

Chrome OS

Try this.

Homelab Dashboard (Heimdall)

I’m going to give it a go with a little help from my friends. I used the the docker install from the Heimdall website – my first docker install. It didn’t make sense but it worked if to browse to https://<ip-address&gt;:8443

Audio Bookshelf

Gotta get it. Or booksonic or bookstack. Do I need filebrowser or handbrake or openwrt?

Unify by Ubiquity

Docker

Rancher

Kubernetics

Grafana

UrBackup

RSync/Grsync

Transmission

Navidrome

OpenWRT

OK, how hard can a BitTorrent server be to install? I eventually used a Raspberry Pi PiMyLifeUp tutorial to install Transmission. Fortunately, it was the current version – 4.0.0. Oh well… I just need to setup a file server VM and point to that for downloads.

Mosquitto

I’m eternally grateful to thousands probably millions of programmers that write useful software that’s available for free on the internet. I need to buy a few more cups of coffee. My frustration with an installation that I can’t make work is a kind of blessing. Installations and configurations that don’t come easy are really just puzzle solving. I love solving puzzles!

To wit: Transmission installation was not difficult, it just took a while to find the instructions. Mosquitto installation was easy but access to the new release not available anonymously or outside the local server. It wasn’t obvious to me. Long story, short – the following additions to mosquitto.conf solved my problem:

listener 1883
allow_anonymous true

That’s all there is to it.

Tiny10 (Stripped Down Windows 10)

Get it here.

Backups

Techno Tim with the professional homelab setup has a way to backup VMs to an NFS share on ProxMox.

Traefik

Need to review.

JellyFin

This seems to be the go-to app for music libraries rather than Plex. I tried the host website but had errors installing. Linux Shout had a simple installation that worked perfectly.

Tag audiobooks with mp3tag or audiobook cutter, also look at booksonic.

Webmin

I tried out Cockpit then decided Webmin would be more useful as a server administration tool. I tried to install it using the website. I had better luck downloading the .deb file from SourceForge and installing it with these commands from Stack Exchange.

Home Automation with Home Assistant

My home automation is a mishmash of devices and software that has served me well. I use Google Assistant for my shopping list and information querries, Alexa for voice commands and SmartThings/ActionTiles for my tablet kiosks in each room.I’m ready to try a little consolidation using Home Assistant.

Mostly a stub for now:

I’m sensitive to the cost of electricity for a 24/7 server so I chose a $50 2015 Lenovo M73 tiny desktop which seems to get by on about 12 watts which is about $1 per month.

I’m reviewing a video from Make It Work that starts out with configuring Amazon Fire HD tablets as the kiosks. Fire Toolbox from XDA Developers is used to configure and remove ads from the tablet.

Need to install Alexa Media Player integration from Hacs.

Setup Alexa in Home Assistant.

Upgrade Wyze Cams with RTSP with Vaclav Chaloupka’s video

Sonoff Switches with SmartThings

Well, I did it again. I got some LED strips for indirect lighting and want to turn them on and off with Sonoff switches, that is, integrate them with SmartThings and Alexa. I’ve done the before, but this time, I’m going to document the process.

I’m using the Sonoff14 switch flashed with Tasmota for the TV LED lights. I previously added Tasmota Connect to SmartThings. Next from that post:

  1. Open SmartThings on mobile device
  2. Under SmartApps, select Tasmota Connect
  3. Under New Tasmota Device, select the Tasmota device you want to add
  4. Fill in the IP address of the new device

Wait 15 or so minutes for the new settings to be effective.

Next, authorize the new devices with ActionTiles by going to My Locations/Home/Add Devices/Home, the select the new devices and click Authorize.

Now, go to the ActionTiles panel and add Hub Tiles for these devices. Rename them in Tile Settings.

SmartThings and Logitech Harmony (Connect)

Wrapping up Home Automation is like waiting for road upgrades and repairs to be complete; it’s a continual process.

Now, I want to press a button (tile) to start a Spotify playlist on the Livingroom (Den) stereo. The first step is to integrate my Logitech Harmony with SmartThings. Most help on the internet involves the SmartThings Classic mobile app that has been removed by Samsung. From the SmartThings Groovy IDE, select My SmartApps and create a new one from Template selecting “Logitech Harmony (Connect)”. Publish it then go to SmartApps on the SmartThings Mobile app. Select “Logitech Harmony (Connect)” and let it discover the Harmony Hubs and Activities. A SmartThings blog entry helped with this one.

Samba Installation Condensed

Short version of Samba installation with user lynn:

sudo apt update && sudo apt upgrade -y
sudo apt install samba samba-common-bin -y
sudo smbpasswd -a lynn
sudo nano /etc/samba/smb.conf

[lynn]
path = /home/lynn
browsable = yes
writeable = yes
directory mask = 0775
create mask = 0775
public = yes
valid users = lynn

sudo service smbd restart
use ‘testparm’ to test samba configuration

Windows 11 Error

Update 8/30/25: Windows Explorer uses Windows Credentials to log in to Samba server. In my case, the credentials are different. Therefore ‘net use’ with ‘user=’ specified works with the Samba credentials. To override Windows Credentials with Windows Explorer, use Windows Credential Manager to add credentials for the Samba server.

Information Kiosks with Magic Mirror and DAKboard

As my home automation using SmartThings and ActionTiles has matured, I have moved beyond controlling smart devices to adding information to my kiosks. I’m using Magic Mirror on the wall mounted monitor in the kitchen and SmartThings/ActionTiles with DAKboard as a screen saver for the device control Fire HD tablets. This adds news, weather and calendar information to my wall mounted tablets and monitor.

Magic Mirror is ideal for a monitor because it has extensive configuration options. It was originally intended to be displayed on a monitor behind a two-way mirror. The variety of configuration modules makes it ideal for use as a standalone monitor. It uses a Raspberry Pi computer running Raspberry Pi OS. I used the Magic Mirror Central tutorial and an excellent video series from Caroline Dunn for my installation. ChrisAcrobat helped with Google Photos. I configured mine with modules showing local and national RSS news feeds, my Google Calendar and local weather with my Google Photos as the background. To avoid a JavaScript error, I changed the default browser to Chromium. I also had to delete and rebuild token.json at one point.

I used tutorials for the Spotify and Strava modules. You have to create an app for the Spotify and Strava modules. This will generate a client id and client secret used in the module section of config.js. The only important field is the authorization call back address which should be localhost. The authorization needs to be done from a browser on the Raspberry Pi.

Many 3rd Party Modules are available. Here’s where I found module positions.

DAKboard is less configurable than Magic Mirror but it can be used as a screensaver on Android tablets. I have configured it with date, time, news, weather and my Google calendar. It uses pictures from my Google photos for the background. The tablet camera works as a motion sensor to return to SmartThings/ActionTiles.

Here is the Magic Mirror display:

Notes:
pm2 stop mm
pm2 start mm
Google Photos module tutorial from roramirez.

IFTTT – If This Then That SmartThings Integration

IFTTT is a service to trigger an action in an application from an event in a different application using Applets. For instance, if Weather Underground reports that it will rain, it can trigger SmartThings to close the garage door.

The applications are called “services” in IFTTT. You need to identify devices in your application and give IFTTT permission to access those devices. From your avatar, select “My services”, select your service, settings, edit, sign in, then accept that IFTTT can use your devices. This may vary for different services.

For SmartThings device authorization, follow this procedure to the SmartThings website then select the devices to authorize IFTTT to use.

433 MHz RF Devices with Home Automation

Some of my first remote control switches and also my ceiling fan are controlled with 433 MHz RF signals. A Sonoff RF Bridge makes it possible to use these devices with home automation. To really be useful, the bridge should be flashed with Tasmota and Portisch. There is a Github article with instructions.

Once flashed, open a web page to the RF Bridge, go to the Console, enter rfraw 177 then press a button several times on your RF remote to pick out the correct (most frequent) sequence. This is the B1 code. Use the BitBucket Converter to convert the B1 code to a B0 code. The B0 code can be used to send an MQTT command, for example:

cmnd/sonoffRFBridge/Backlog RfRaw AAB0210314016703F924…0010101100255; RfRaw 0

On the RF Bridge console enter:

rfraw AA B0 21 03 08 00B4 0226 16A8 28181819081818190…819081819090818190908 55

Use Tasmota Connect to add the Sonoff RF Bridge as a SmartThings device. Note that the bridge is unavailable if it is open in another browser. Then add a virtual switch with the Portisch codes to control the device. I sent text messages with the B0 codes to past into the phone for use with SmartThings.

For the virtual switch use this for the On command and similar for the Off command:

Backlog RfRaw AA b0 21 03 08 00 … 0908 55; RfRaw 0

The Tasmota virtual switch worked fine for an on/off switch. I’m hoping this might help with the 433 MHz ceiling fan control.

SmartThings Ecobee Integration

My Ecobee smart thermostat lost it’s interface with SmartThings. The previous connection was created using the SmartThings Classic app which is no longer available. After struggling with installing the SmartThings Community Installer App then the Ecobee Suite Manager from Github I found that there is native support now in SmartThings. I simply installed the device from the SmartThings mobile app.

As with other devices, they must be authorized in ActionTiles before use. From the ActionTiles website, select location from My Locations, Add Devices (from location), select new device and click Authorize. The tiles can now be added using ActionTiles Panel Builder.

SmartThings Lighting Groups

It is difficult to turn a group of lights on and off with an ActionTiles tile. This post from URTechTherapy provides a solution for switching a group of lights on and off.

  1. Create SmartThings scenes for on and off
  2. Create SmartThings Lighting Group with all lights
  3. Create SmartThings Virtual Switch (add to “My Devices”)
  4. Create SmartThings Smart Apps Automation for each Scene (on and off)
  5. Create SmartThings Automations for on and off
  6. Authorize Virtual Switch to ActionTiles and add to panel

Add Den LEDs On scene with action on for both devices
Add Den LEDS Off scene with action off for both devices
Add Den LEDS Group group with both devices
Create Den LEDs Virtual Switch in SmartThings
Add SmartApp/Smart Lighting/New Lighting Automation/Activate these scenes

Home Automation with SmartThings et. al.

My attempts at home automation started back in the 1980’s with x10 devices with power line signaling. These devices are long gone. I’ve chased inexpensive and DIY additions ever since with a lot of effort and a lot of fun with a modest outlay. Here are some of my devices:

  • Etekcity 433 MHz RF switches and remotes
  • Amazon Echo, Echo Show, Dots, Fire HDs, Fire sticks, switches
  • OpenHab, then Home Assistant/MQTT
  • Google Chromecast, Chromecast Audio, Nest Hub, Chromecast with Google TV
  • Sonoff/Tasmota switches, power switches and RF bridge
  • Meross switches and garage door opener
  • Momentum garage door opener
  • Ambient Weather Station
  • Wireless 433 MHz ceiling fan remote control
  • Logitech Harmony remote controls with hubs
  • Wyze cams, pan cam, motion sensors, door sensors, home security
  • SmartThings Hub/ActionTiles

This creates a serious challenge for integration. I thought OpenHab could be the solution but it will be just one of the pieces. The difficulty is a bit too high for me. I plan to migrate to Home Assistant. Samsung SmartThings with the ActionTiles companion is my smart home integration solution now. There is a lot of support. The difficulty is reasonable. The use of cheap Amazon Fire HD tablets makes smart device information and control intuitive and convenient.

I started this phase of home automation with the addition of a SmartThings Hub. After installing the SmartThings app and the ActionTiles app on my phone, I rounded up various old tablets to get started. I planned to use wall-mounted tablets to control my smart home.

I solved two problems using a post by Andrew Connell. I had a broken and unneeded NuTone intercom. I also needed to power my wall mounted tablets. I removed the intercom base station and ran power into the the open hole. I added a monitor wall mount, an HP monitor and a Raspberry Pi for an information kiosk. This covered the open hole. I also added a 24 volt power supply to power the tablets.

I removed all the intercom speakers and used the speaker wires to provide 24 volts from the power supply. I used USB Buck Converters to drop the voltage to 5 volts for USB power to the tablets. I used mostly Fire HD 8 tablets with Makes by Mike wall mounts which covered the speaker holes. I used a Fire HD 10 for the main station in the master bedroom.

I used another post by Andrew Connell to configure the Fire HD’s as home kiosks for SmartThings.

Add VPN Unlimited to pfSense

I used this tutorial from VPN Unlimited to add VPN connection to pfSense. It was complicated but it worked. However, I was unable to use YouTube TV which doesn’t allow VPN connections. This blog described how to bypass VPN for a host. It worked. It involves adding a LAN Firewall Rule to avoid the VPN as the gateway. I would also like to simply switch the VPN and the WAN gateway for all traffic.

Data Analytics and Big Data

There is a lot of data, big data, available to make conclusions not possible before. Google makes a lot of big data available publicly. For instance by analyzing hundreds of millions of emails searching for the term ‘flu’ you could identify areas of flu outbreaks based on the heightened frequency of the word. This can be identified using data analytics tools. Excel for example can now process up to 100 million lines of data depending on your processing power.

In Tulsa, the mayor was able to identify the home county of the Trump Rally attendees based on GPS data from their cell phones. This data came from Google Mobility Data. I’m trying to put together the pieces, but I’m checking out Google TrendsGoogle Analytics, and R Analytics. I think R Analytics and/or Excel are the tools for working with big data.

Raspberry Pi Carputer

Here is what I’m starting out with:

  • Raspberry Pi 7″ touchscreen monitor (just ordered)
  • Monitor case (just ordered)
  • Raspberry Pi 3
  • GlobalSat BU-353-S4 USB GPS Receiver
  • USB sound card
  • USB Bluetooth Dongle 4.0 EDR Receiver
  • Logitech Wireless Touch Keyboard K400

Here’s a start on setting up the touchscreen monitor and a video. To flip the screen, edit /boot/config.txt and add lcd_rotate=2

Here’s a start on setting up the GPS module. Using Raspbian Jesse or later (Buster), you must disable a systemd service that gpsd installs then start gpsd:

sudo systemctl stop gpsd.socket
sudo systemctl disable gpsd.socket
sudo killall gpsd
sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock

Try running gpsmon, cgps -s, or xgps to get a live-streaming update of GPS data.

This video helped with “no fix”.

Here’s a start with ODB-Pi.

Here’s a start with Navit.

Add Hard Drive to Ubuntu Server

Install the internal hard drive or plug in the USB external hard drive. Use lsusb to show your external hard drive. Use fdisk to identify the new hard drives:

$ sudo fdisk -l | sd*

Start fdisk:

$ sudo fdisk /dev/sde

List partitions and delete existing partition and create new partition:

p (to list partitions)
d (to delete existing partition)
1 (which partition to delete)
n (new partition)
1 (new partition number)
default (start of partition)
default (end of partition)
y (to remove signature)
w (to write changes)

Next, make the file system:

$ sudo mkfs -t ext4 /dev/sde1

Hard Drive Larger than 2TBpar

parted /dev/sde
mklabel gpt
mkpart primary 0TB 12TB

$sudo mkfs.ext4 /dev/sde1

Copy Files from Old Hard Drive with Rsync

rsync -a /media/storage/ /media/hdd3


Creating an Ubuntu Repository

Setting up a local Ubuntu repository can be used to save internet bandwidth and to do updates with minimal or no internet connection. My starting point is a tutorial by LinuxConfig.

$ sudo apt install apache2
$ sudo systemctl enable apache2

$ sudo mkdir -p /var/html/mirror
$ sudo chown www-data:www-data /var/html/mirror

$ sudo apt install apt-mirror

Edit /etc/apt/mirror.list. Change base_path to the mirror directory. Change the ubuntu release name to match the release you are using. Comment out the source archives to reduce the size of the repository.

$ sudo cp /var/spool/apt-mirror/var/postrmirror.sh /var/mirror/var

$ sudo apt-mirror

$ sudo crontab -e

add the following line to update nightly at 2:30 PM:

30 02 * * * /usr/bin/apt-mirror

Configure Clients to use Local Repository

Edit /etc/apt/sources.list and comment any line referring to repositories not mirrored in your server

Ubuntu Networking Stuff

Fixed IP addresses for servers is obviously a good idea. I have used DHCP assigned permanent reservations as the easiest and most manageable way to use fixed addresses. IP addresses were assigned from a single pool. For me this was usually 192.168.1.101 for 100 addresses. Any DHCP assigned address could simply be tagged as a permanent reservation.

Pfsense changed this. The Pfsense DHCP server can still assign all IP addresses. However, they are “static mappings” rather than “permanent reservations”. The kicker is that the static mappings cannot be in the regular DHCP address pool. Since all my permanent reservations were dispersed throughout the address pool before pfsense, I had to start from scratch with static mappings.

Static IP Addresses

I have a server within the pfsense DHCP pool that needs to have a fixed address. I will assign it on the server and hope that pfsense doesn’t assign it to another device. I will eventually need to correct this.

On my new Ubuntu 18.04 server, I edited /etc/network/interfaces to change the DHCP assigned address to a static IP address as in the past. However, interfaces was empty and I realized I needed to modify /etc/netplan/01-netcfg.yaml. I changed it from this:

network:
version: 2
renderer: networkd
ethernets:
ens3:
dhcp4: yes

to this:

network:
version: 2
renderer: networkd
ethernets:
ens3:
dhcp4: no
addresses:
192.168.1.199/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]

The indention is important. Using two spaces works fine. Unfortunately, WordPress removed the indentions from my examples.

Apply the changes with:

$ sudo netplan apply

Verify the changes with:

$ ip addr show dev ens3

To restart networking use:

sudo systemctl restart network-manager

OpenHab2 as Virtual Guest

OpenHAB is home automation software that connects to devices from different vendors. OpenHAB uses a Mosquitto (MQTT) server as a message broker so that clients and servers can post messages to each other. For example, OpenHAB posts a message for Light1 to turn on. Light1 is listening for Light1 messages and turns on.

I am using a couple of sources to install openHAB 2 as a virtual guest on my KVM server. I previously used Matt Kaczynski’s MK-SmartHouse excellent Video Guides for installing openHAB 2 on a Raspberry Pi using the openhabian image. I will use these guides in conjunction with openHAB’s installation guide for Linux. This works for apt based systemd systems. Note that Zulu 8 is a prerequisite.

$ sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv-keys 0xB1998361219BD9C9
$ sudo apt-add-repository ‘deb http://repos.azulsystems.com/ubuntu stable main’
$ sudo apt-get install zulu-8
$ wget -qO – ‘https://bintray.com/user/downloadSubjectPublicKey?username=openhab&#8217; | sudo apt-key add –
$ sudo apt-get install apt-transport-https
$ echo ‘deb https://dl.bintray.com/openhab/apt-repo2 stable main’ | sudo tee /etc/apt/sources.list.d/openhab2.list
$ sudo apt-get update
$ sudo apt-get install openhab2
$ sudo apt-get install openhab2-addons
$ sudo systemctl start openhab2.service
$ sudo systemctl status openhab2.service
$ sudo systemctl daemon-reload
$ sudo systemctl enable openhab2.service

Next is the MQTT server installation:

$ sudo apt update
$ sudo apt install mosquitto
$sudo apt install mosquitto-clients

Use MQTT.fx to test the installation.

At this point I am switching to MK-SmartHouse for configuration. The openhabian image for the Raspberry Pi has already done the work to this point.

I am migrating from the openhabian server on my Raspberry Pi. I plan to configure the server then copy the config files and hosts file from the old server.

Upgrading to OpenHAB 2.4

I broke OpenHAB after upgrading to OpenHAB 2.4 on my Raspberry Pi. You must also upgrade the mosquitto server. MK SmartHouse has a video to describe the process.

$ sudo apt-get remove mosquitto

From paper ui Addons /Bindings uninstall mqtt 1.0 binding.
From paper ui Addons / Bindings install mqtt 2.4 binding.
From paper ui Addons / Misc install Embedded MQTT Broker.
From paper ui Inbox select System MQTT Broker and add as thing.
Optionally from paper ui Configuration / Services, configure MQTT Embedded Broker.

Test MQTT with MQTT.fx.

From paper ui Inbox serch for things and select MQTT Binding then add manually then select Generic MQTT Thing (9:53)

Pickup with New Migration Tutorial

This is from OpenHAB.org.

From PaperUI inbox, add new thing and select MQTT Thing binding.
Add a new thing in PaperUI and select a Generic MQTT Thing and give it a name.
Edit the thing and add a new channel

Sharing Linux Files with NFS

Samba has been my go-to for file sharing on my network. However I want to use my ubuntu file server with my nextcloud server. I think it’s time for NFS. Digital Ocean comes through again with a good tutorial. The method is to “export” the directory on the server and “mount” the exported directory on the client. Export definitions are in /etc/export and mount definitions are in /etc/fstab.

server$  sudo apt install nfs-kernel-server

client$   sudo apt install nfs-common

server$  sudo nano /etc/exports

Enter export: /media/storage 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)

Use systemctl to manage the server: sudo systemctl status nfs-kernel-server.

Create the client mount point: mkdir -p /nfs/storage

client$  sudo mount fileserver:/media/storage /nfs/storage (to test path)

client$  sudo nano /etc/fstab

Enter the mount:                                                                                                                        fileserver:/media/storage /nfs/storage nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 (You probably need a hosts entry for for the server named file.)

Refresh fstab: mount -a

Refresh exports: exportfs -ra

Update: LXC Containers

LXC containers are not priviliged to mount hard drives. The best practice is to mount the NFS share on the Proxmox host as above. Then use a bind-mount – edit /etc/pve/lxc/1xx.conf and add the line:

mp0: /mnt/storage,mp=/mnt/lxc_nfs_share

Mount Sequence with LXC Containers

For lack of a better place, it goes here. The Proxmox host cannot mount the file server NFS share until the file server starts. Jellyfin cannout mount the NFS the Proxmox host mounts the share.

Disable the fstab mount. Create a systemd mount unit. Here’s a sample /etc/systemd/storage.mount:

[Unit]
Description=Mount NFS share after LXC container 101 is ready
Requires=container@101.service
After=container@101.service

[Mount]
What=192.168.1.50:/export/storage
Where=/mnt/storage
Type=nfs
Options=_netdev,auto

[Install]
WantedBy=multi-user.target

Then enable it:

sudo systemctl daemon-reexec
sudo systemctl enable –now storage.mount

/et