NOTE – 22nd April 2023
I have provided a new version of install.sh, if you have had problems with a ysfreflector.ini error, please start the install again from the first ‘sudo wget’ command.
Over the last four or five years I’ve been a regular user of two digital voice modes, D-STAR and DMR. I don’t particularly like to use them to work ‘DX’ but they both have their advantages regarding linking repeaters together and allowing me to keep in touch with people when I’m away from home.
Both have a relatively steep learning curve but over time, I’ve got my head around them and am quite happy configuring radios, building ‘code plugs’ (*shudder*) and operating them.
That left one digital voice mode that I’ve not yet tried; Yaesu System Fusion, often abbreviated to just Fusion or YSF. A few weeks ago I bought myself a Yaesu FTM-100DE and it’s sitting in my shack now. There are no Fusion repeaters nearby so I set up a cheap hotspot to allow me to access the network.
The first thing I’ll say is that the speaker in the FTM-100DE is rubbish! It’s tinny and the audio out of it is dreadful. I plugged an external speaker in and it’s so much better. In fact, I would say that the audio on Fusion is by far the best out of any of the digital modes.
Fusion is just as complicated as the other modes to a newcomer but I’m not going to go into that here. I’m assuming you’re here because you want to set up a reflector. I had a good reason to do that last week and I couldn’t find a complete (and accurate) guide to doing it. It was so frustrating that once I’d got one working, I decided to put together what I hoped would be a decent and easily followable guide.
I must point out that I’m not an expert. I’ve barely touched Fusion and I have a lot to learn. I just wanted to share a detailed solution to something which gave me a lot of frustration. I don’t claim to have written any of the scripts or packages used in this guide, I’m just putting everything together in one place in hopefully easy to follow steps. I have linked to the source pages I used as starting points at the bottom of this entry. – Sidenote, 22/04/2023 – I have fixed one of the scripts following a git repository change.
I did this on a Raspberry Pi and so my instructions are written specifically for that device. I’ve tested this on a Pi Zero W, a Pi2B, Pi3A+, a Pi3B and a Pi3B+. It will not work on a Pi4 as I’m using Raspbian Stretch which is not supported on a Pi4. I’m using Stretch rather than Buster because some parts of this have been removed from Buster. This entire process was successfully tested again on 22nd April 2023 on a Pi2B and on 3rd May 2023 using a Pi4.
*** Additional note – I have now managed to get this working on a Raspberry Pi4 using either Buster or Bullseye. The steps are largely the same with the addition of a couple of extra commands. Please read this guide carefully, making a note of the changes made for Buster/Bullseye. The Buster/Bullseye specifics will be italics and with asterisks ***
First, download Raspbian Stretch Lite (or Buster/Bullseye for a Pi4) and write it to an SD card. I highly recommend balanaEtcher to write the image out to an SD card. Note that we’re using the ‘Lite’ version of Raspbian so you won’t have any graphical user interface and all the work will be done from the terminal.
You will need to either give your Raspberry Pi a static IP address or set up a reservation in your router. I do this by looking at my router and checking what devices have connected and then set up a DHCP reservation so each particular Raspberry Pi I own will always have the same address each time it reboots.
Open up a terminal/dos prompt or whatever client software you’re going to use to connect to the Raspberry Pi and log in. In my case, the Raspberry Pi is on 192.168.1.185 so I use the command
You’ll be prompted for a password – It’s currently set to raspberry.
Use the following command to enter the Raspberry Pi config utility:
First of all, expand the filesystem. You do this by selecting option 7 Advanced Options, then A1 Expand Filesystem, then select OK and you’ll be returned to the main screen.
Now select the first option Change User Password and press enter. Press enter again and you will be prompted to Enter new UNIX password. Type a new password, press enter and re-type your new password again. You will get a message telling you your password has been changed successfully. Make a note of this new password.
Use the arrow keys again to move down to 4 Localisation Options and press enter. Use the arrow keys again to select I2 Change Timezone and press enter. First select your Geographical area and press enter and then select your Time zone and press enter.
Now you should set your Wi-Fi country – By default, this image is set to GB (Great Britain) so if you’re in a different country you should change this to ensure that the Pi uses the correct frequencies. Select 4 Localisation Options and press enter. Scroll down to I4 Change Wi-fi Country and press enter. Find your country, press enter and then press enter again to return to the main screen.
Finally, select 2 Network Options and press enter. Press enter again on N1 Hostname and give your Raspberry Pi a suitable name.
You will now be returned to the main Raspberry Pi Software Configuration Tool main screen. Use the tab key to select <Finish> and press enter. You will be asked if you would like to reboot now. Press enter to reboot and once your Pi has rebooted, log back in using the new password you set earlier. Make a note of this password because if you forget it, you’ll need to start from scratch.
If you’re using a Mac and connecting to your Raspberry Pi via the terminal you may notice the screen flashes badly. You can fix this easily and quickly by going into the terminal Preferences/Profiles and make sure the box “Allow blinking text” is not ticked.
Assuming your Raspberry Pi now has either a static or reserved address, you can start with the actual setup.
Log in to your Pi with the new password you set above and type the following commands.
sudo apt update
sudo apt upgrade -y
This is making sure that Raspbian Stretch is fully patched as far as it will go. The first will go through quickly, the second command may take a little longer and if you’re using an older Pi or a Pi Zero, it will take a good few minutes. When it has completed, reboot the Pi.
Log back in and enter these two commands which are loading pre-requisites for the actual installation.
sudo apt install git -y
sudo apt install insserv -y
With those done, it’s time to download the install script and run it using these two commands.
sudo wget https://qsl.net/g6nhu/install.sh -O ~/install.sh
sudo bash install.sh
When the install completes, it will ask you for the name and the description of your reflector. The name should always start with your two letter country code, have one space and then the rest of the reflector name. You can use a maximum of sixteen characters. For my reflector, I chose GB QSO365. The description is free text and is a maximum of fourteen characters. For my reflector, I put qso365.co.uk in the description.
*** If you are using Raspberry Pi OS Buster or Bullseye, you would have received an error at this point, now you need to enter these commands: ***
sudo systemctl enable YSFReflector.sh
Don’t start the reflector just yet though as there are some things you need to do first.
Log into your router and set up port forwarding to the Pi. This is a great site with guides to many different routers. By default the reflector needs port 42000 forwarded to it although you may find that port is already in use on your system. In my case, ports 42000 and 42001 were already being used by my Fusion Pi-Star hotspot so I used 42002. If you have a Pi-Star hotspot on your network, you will need to change the port number away from 42000. If you’re not using 42000 then you need to edit a configuration file on your Pi.
sudo nano -c /etc/YSFReflector.ini
Scroll down to around line 18 and change the following section:
In my case, I changed 42000 to 42002.
Save the file by pressing ctrl-x, then hit the Y key and then press enter.
Now you’re ready to start the reflector using the command given at the end of the installation. We’re actually going to restart it because it may have started automatically after the installation completed. This restart ensures that any port changes are activated.
sudo /etc/init.d/YSFReflector.sh restart
The next step is to register the reflector. Head over to the Reflector Registry site and click on Register Reflector. Enter the name and the description you used earlier but leave off the two character country code from the name. You need to put in the Host/IP-Address of your internet connection (NOT your Raspberry Pi). If you have a static external IP address, enter it here otherwise you will need to configure a dynamic DNS service.
The Port is the port you configured earlier and the rest should be obvious. You haven’t set up a dashboard yet so you can’t enter that. Click Submit and you’ll get an email telling you it’s been registered with a link to click to accept the privacy agreement.
Setting up a dashboard
You could stop here but it’s not so much fun without a dashboard because you can’t see what’s going on. You can see my reflector dashboard by clicking here. Let’s install a dashboard.
Enter the following commands:
sudo apt update
sudo apt install apache2 -y
sudo usermod -G www-data -a pi
sudo usermod -G www-data -a root
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 775 /var/www/html
sudo apt install php7.0-common php7.0-cgi php7.0 -y
sudo apt install libapache2-mod-php7.0 -y
sudo git clone https://github.com/dg9vh/YSFReflector-Dashboard.git
sudo cp -R ./YSFReflector-Dashboard/* /var/www/html/
If the above commands fail when installing php, it may be because version the listed version is no longer available. Change all instances of 7.0 for 7.1 (or 7.2, 7.3 etc) and try again.
*** For a Raspberry Pi using Bullseye or Buster, you’ll need to replace the instances of 7.0 with 7.4 ***
With those commands entered, open a web browser and go to http://xxx.xxx.xxx.xxx/setup.php where xxx.xxx.xxx.xxx is the IP address of your Raspberry Pi and you’ll get the following screen:
All fields on this configuration page need to be filled in, the defaults are all correct but you have to overtype them yourself. To help you out, here are all the top options, you can just copy/paste these.
The same applies for the Global Configuration section. Even if there is text in the boxes, you need to overtype it. The Timezone is obvious, the URL to Logo field can be left blank and the rest are your personal preference.
When you click the ‘Save configuration’ button, you are presented with a screen telling you to remove setup.php. Sadly it doesn’t tell you where that file is saved so here’s the command to delete it. You should also remove index.html so that doesn’t get served by default:
sudo rm /var/www/html/setup.php
sudo rm /var/www/html/index.html
If you need to edit this configuration in the future, you can do it by editing a file. Once you’re in the file, the options are obvious.
sudo nano /var/www/html/config/config.php
In your web browser now, just enter http://xxx.xxx.xxx.xxx, substituting all those xxx for your own IP address. You should be presented with the dashboard for your reflector. If you want to make this available to the outside world, you need to forward port 80 in your router to the Pi and add the dashboard link to your entry on the Reflector Registry.
Everything is done. Now you just have to wait for your reflector to appear on the list of active reflectors here which can take up to two hours. You can also search for it on the Reflector Registry as it should now show active.
By default, your Pi-Star won’t know about the new reflector until it has automatically updated overnight but once it shows in the active reflector list, you can force an update. At the top of the Pi-Star dashboard you’ll find a button called ‘Update’. Click it.
When that has finished, click on Configuration and your new reflector will appear in the YSF Startup Host: drop down box. Select it and click the Apply Changes button.
Finally there are a couple of housekeeping tasks that I suggest you add.
You’re going to add two commands to crontab, this is the built in Linux task scheduler.
The first restarts the reflector in the early hours of the morning and the second deletes entries from the log that are over six months old.
sudo crontab -e
If you’ve never used crontab on this Pi, you’ll be prompted which editor to use. Just press ‘enter’ to select the default.
Scroll down to the bottom of the file and add these lines:
# Restart the reflector at 01:02
2 1 * * * sudo /etc/init.d/YSFReflector.sh restart
# Delete logs in the YSFReflector folder that are older than 180 days
01 0 * * * sudo find /var/log/YSFReflector/*.log -mmin +259200 -type f -delete
Save the file by pressing ctrl-x, then hit the Y key and then press enter.
And that’s it. Although it looks complicated, it’s quite straightforward. When I ran through the complete setup to write this guide, the process took about half an hour.
The reflector I created is called GB QSO365 and the YSF DTMF code is #26368. I will leave it online if anyone wants to use it but please don’t bridge it anywhere. The dashboard can be seen by clicking here.
Finally, here’s the reflector itself. It’s running on a Pi Zero with an external USB ethernet interface. It’s not exactly high-tech.
As with any Raspberry Pi builds, providing you use a good quality power supply, this is a very reliable system. It will just run forever.