IZ7BOJ Blog is online — 28 September 2017

IZ7BOJ Blog is online

It has been a long time since I wanted to publish a personal Hamradio Blog, and now, finally I’m online!

I have not so much time for hamradio, but I want to share my few experiences with other hamradio entusiast.

I hope you can enjoy this sharing and find something useful.

Best 73

Alfredo IZ7BOJ


A simple Web interface for APRX — 2 August 2019

A simple Web interface for APRX

I use Aprx from many years and I think it’s one of the most complete and flexible APRS Software available. Nevertheless, every time that a sysop wants to check his aprx node, he has to check the log and try to analyze it. Even simple operations, like check if a certain callsign has been heard by the node, could be cumbersome.

In case of monitoring or troubleshooting, I usually download the log file and then import it in excel and then analyze it by filters and other useful functions.

Before Aprx, I used for many years the aprsd daemon, and it implemented a simple but very useful web interface with simple reports. While I was remembering that interface, I thought that a web interface could be useful for aprx too, and I started to google for this kind of software, hoping to find a plug&play solution.
I was very surprised to find something. I tried just a pair of interfaces, then I choosed “aprx simple webstat“, written by Peter, SQ8VPS.

This is a simple statistics and information generator for APRX software, which allows to monitor load, frames, stations details, statistics from selected time window and more.

I quickly downloaded and installed it. I got it working after few minutes, because I already had lighttpd server installed on my raspberry, so just did a quick configurazion of the log file path and other few things.

I started to use it and I liked it very much. I contacted Peter by email, and I congrats with him for his nice work. Peter is a young OM from Poland, he still attends school but he’s very clever and has very good programming skills and know-how about aprs.
He was very surprised and happy that someone was using his interface!
We had a nice opinions exchange and he asked me for new ideas for improving the interface.

Thanks to this renewed enthusiasm, I started to propose the improvements and he started to implement my ideas and releasing new versions.
I always intend hamradio hobby like an opportunity to explore and learn new things, so I decided to take this occasion to learn php.
I already developed something in jsp, but php was a quite new language for me, and it was a challenging activity.
In the meantime, Peter became very busy with school, driving license and other things, so, in the last period, I developed some new features and bug fix by myself and Peter did the “merge” on github.
Hereafter, I breafly explain the main functions of the Software:

  • Polish and English language
  • Possibility to monitor multiple radio interfaces
  • Possibility to show cusom info and custom logo file on the bottom of the page (edit “custom.php” file, which can contain HTML and PHP code)
  • Management of SSnN “State” abbreviations aliases;
  • Counters of:
    – total frames in log
    – frames received by radio
    – frames transmitted on radio
    – frames received from APRS-IS
    – received frames/sec (calculated on last 20 frames)
    – transmitted frames/sec (calculated on last 20 frames)
Figure 1 : homepage – first part with custom.php


  • System status table (reads parameters directly from OS):
    – OS version
    – kernel version
    – Aprx version
    – System uptime
    – CPU temperature
    – CPU frequency
  • Aprx config table (read parameters directlty from aprx.conf):
    – Beacon interval
    – APRS-IS server
    – Location coordinates
    – Tx active/not-active
    – Number of radio ports
    – Digipeater active/not-active


Figure 2 : Home page – tables view


  • Heard station list table (observation period selectable by the user in a drop-down list)
    – Heard Callsign
    – N. of packets heard for callsign
    – Direct link for showing the station on aprs.fi
    – Static/moving indicator
    – Via indicator (digi/direct/digi+direct)
    – Raw packet view for each callsign

Figure 3 : home page – station list view


  • Station details page:
    – N. of frames totally heard
    – Last position frame heard
    – Station position (lat,long, distance and bearing from your location)
    – Frame comment
    – Frame type (normal/Mic-e)
    – Station symbol
    – Frame digipeating path
    – Transmitting device (device list can be updated by dedicated file. Both new and  legacy Mic-e devices are included)
    – Last status frame heard
    – Status field

Figure 4 : station details page


  • RAW FRAMES page: log of raw frames received from a specific station
Figure 5 : RAW packets page


  • Possibility to sort the table in ascending or descending order on each colum.
  • Live monitor page: ajax page for watching ax25 traffic in realtime. Fields are coloured for better readings
Figure 6 : AX25 Live traffic page


You can see my APRX Simple Webstat interface at work here: http://iz7boj.ampr.org/aprx.html

The github repository with SW installation instruction is here: https://github.com/sq8vps/aprx-simplewebstat

Note1: This is a BETA software. It can contain some bugs and may be written in non-efficient way. Please contact authors if you find any bug.

Note2: Project is free for non-commercial use. You can modify and publish this software, but you have to put an information about original authors.

I hope that aprx users could install and enjoy this interface.

For any further details or questions, don’t hesitate to contact me!

I would like to say thanks to my colleague Peter SQ8VPS, which thought, developed and mantained this beautiful interface.


Alfreo IZ7BOJ

Python script for Raspberry thermal control and MCP3008 ADC — 5 June 2019

Python script for Raspberry thermal control and MCP3008 ADC

When I built a telemetry system for DMR repeater, I observed high temperatures of the transmitting radio, especially during summer and hot periods of the year.
I realized that a cooling system could be helpful to dissipate the heat produced by Motorola radio.
The acquisition system was already done, so only the actuation system was needed.
I searched on the internet, and I found some scripts used to control a fan installed on the microprocessor of the raspberry Pi.
I took one python script and modified to acquire the temperature of the external sensor connected to the MCP3008.

The original script was here (reads the System CPU temperature) and the customized version is here.

Some notes for the correct script configuration:

  • Script Cycle time must be configured. Default value of 30sec is good for starting;
  • Log file name must be declared.
  • Output pin to be used for fan switch on;
  • Both upper and lower thresholds must be declared, as for every hysterical control;
  • The logging function can be useful during the first tuning period. Once the thresholds have been found, the function can be eliminated;
  • Value, beta and pull-up resistor of NTC must be declared inside the script for a correct temperature conversion. The NTC, in series with the pull-up resistor, must be connected to the the same 5V coming from the Raspberry and powering the MCP3008.


  • ADC channel connected to the NTC sensor must be specified.
  • Adafruit library for MCP3008 must be installed before running the script.
  • A compensation variable is useful to align the temperature reading to a reference thermometer.

I used two small 12V PC fans, which fits well to the Motorola heatsink:


The Raspberry output pin cannot directly drive the fan, so a small BJT driver is needed. I built one with a 2N2222 NPN transistor and a 1KOhm resistor, 1/4W on the base.
Here below the schematic is reported:


This is the prototype board of the fan driver:


The general block diagram is the following:


Once the hardware is ready, we can try to manually switch on pin 25 and see if the fans start, using “GPIO” library from shell:

gpio mode 25 out
gpio write 25 1

The above commands set pin 25 as an output and then sets the pin to a logic 1.

If the fans starts, we can try to configure and launch the script. Remember to give the execution permission (sudo chmod +x MCP3008_raspy_thermostat.py).

In the logfile, we can read the temperature acquired by the NTC and eventually tune the “compensation” variable to align the temperature reading with a reference thermometer.

Then, we can tune the thresholds for best results.

I hope this project could be useful.
Alfredo IZ7BOJ

SPF5189Z LNA measurements on VNA — 11 April 2019

SPF5189Z LNA measurements on VNA

Since January 2019, I’m sharing a simple satellite receiving station on SATNOGS network, based on a RTL2832 USB SDR dongle and a home-made turnstile antenna.

The RTL2832 Noise Figure is not so good (on the internet I read about 7dB), so one way to increase the receiver performance is to place a LNA as near as possible to the antenna.

I searched on the internet, and I’ve found the LNA4ALL a very good  solution. It also has an internal bias tee in order to be powered directly on the coax cable.

Nevertheless, it’s not very cheap and the shipment expenses are too high, then I decided to try first a SPF1589Z LNA for few euros from ebay, then decide if throw it away or keep it.


It arrived in about three weeks from China, then I wanted to test it on a Vector Network Analyzer, in order to compare the real gain with the datasheet.

Once the LNA has been powered at 5V, the current absorption is 90mA, perfectly aligned with the datasheet range.

Here below, the S21, S11 and S22 plots are reported between 50MHz and 3GHz (the LNA reaches 4GHz but the VNA not).

I palced these 4 markers:

  • 144MHz
  • 435MHz
  • 1GHz
  • 2GHz
Gain 50MHz-3GHz
Output Return Loss 50MHz-3GHz

When I downloaded the datahseet, I saw that the SPF5189Z has two possible configurazion:

  • Optimized matching at 900MHz
  • Optimized matching at 1900MHz

From ebay description and board P/N, it’s not possible to understand the frequency optimization.

Here below, I reported a comparison the datasheet (green line) and the measurement (red line) data, for both configurations. The frequency range of the datasheet is smaller than my measurements, sto the comparison is only on the datasheet frequencies and not wide-band.


The gain seems to be 1dB less than the datasheet on both configurations, while the input matching shows better results on 900MHz range.

At the end, the LNA is quite wide-band and is a compromise between the 900MHz and 1900MHz configurations.

In the next days, I will install the LNA near the antenna and I’ll let you know the improvements on the receiver.

Best 73′

Alfredo IZ7BOJ

APRS: how to automatically monitor a group of Digipeaters and I-Gate — 4 March 2019

APRS: how to automatically monitor a group of Digipeaters and I-Gate

In the early 2000’s , together with Piero I7IGX, an APRS digipeater was installed in Trani, my Town. For about an entire decade, the Digipeater IZ7BOJ-11 was almost alone in the region, but..starting from 2016, thanks to my dear friend Luigi IZ0YAY (now back in zone 7 for QRL), the interest for APRS increased again!

Luigi involved other OMs and other digipeaters were installed. A beautiful technical exchange started between the sysops, and sometime we had to announce temporary down-time of our nodes on a whatsapp group.

Most of us are very busy for QRL, so it’s not easy to constantly monitor the state of our node, then I thought to an automatic monitoring system, whit these two simple purposes:

  1. Gather information of all nodes of the group and show the situation in a simple (possibly graphical way)
  2. Sends alerts on whatsapp or telegram in case of technical problems on the nodes.

The first concern was: how it’s possible to determine the status of a Digipeater or I-gate, in terms of vitality? Well, the first idea is to use the most powerful database in order to see the “last heard” time. This is possible thanks to aprs.fi and its API, which allow the direct connection of a custumer application directly to the database.

The second concern was: given that the method to determine the vitality is the “last heard time”, which is the right timeout before declare a problem on a station? Well, this parameters has been tuned experimentally.

I then developed a simple web interface in php, and emedded a view of all apulian station in APRSdirect (I had some problem trying to enclose aprs.fi into a view).

Here below a picture with a tipical situation.

The website is hosted at http://iz7boj.dyndns.org/aprsdash/aprsdash.php


The main query is the following:


which returns, for every station declared in $stationsquery,  its basic location and other basic data, including “last heard” in JSON format (see aprs.fi api help for furher details)

The variable “$stationsquery” is declared inside the config.php file.

The output of the query is then parsed and the last time converted from Unix Time to a human readable format, then compared to the timeout.

The source of the packet (TCP-IP or RF) is also showed. This information is useful in order to understand if a compound station Digi+Igate has problem on RF side.

The sources are available at: https://github.com/IZ7BOJ/APRS_dashboard .

If you want to use the dashboard, you must have php libraries and a web server installed. Copy the content from Github to your web server folder, then edit config.php file with the following informations:

  1. stations to observe
  2. aprs.fi APIkey (you must have an account or aprs.fi)
  3. timeout (default is 30min)

Well, now we have gathered all the necessary information to a dashboard. This is helpful, but you will never now that your node has a problem, unless you open the dashboard. For this reason, I thought to an automatic systems which sends alerts to our smartphones. Telegram is the easiest choise, since is an open-source  and well documented Application.

Preferrably, the criteria for the vitality should be the same of the dashboard (last heard) and the database should be aprs.fi again.

After some researches on telegram BOTs under python, I found a very useful library to install to my raspberry for sending notification: the library is “telegram-send“.

You can install telegram-send with pip:

sudo pip3 install telegram-send

then, depending by the destination of your messages, you can choose:

  • telegram-send –configure if you want to send to your account
  • telegram-send –configure-group to send to a group
  • telegram-send –configure-channel to send to a channel

The source code can be found here:


Note that the daemon should continuously run in background, since it stores the status of the nodes (in terms of “dead/alive”) and sends messages only when a state change is triggered (from dead to alive and viceversa).

This daemon runs and sends notifications since summer 2018 and no problems are detected.

Here below, a screenshot of some messages received on telegram is reported, for example only:


Best 73’s

Alfredo IZ7BOJ

Brief history of my Packet Radio and Wi-Fi activities — 3 March 2019

Brief history of my Packet Radio and Wi-Fi activities

I’m going to describe my hamradio activities in the early 2000’s, particularly in area of packet radio, which was my preferred.

I became a member of local ARI (Associazione Radioamatori Italiani) club in 1997, when I was only 17 years old and I was attending the school (Technical Institute for electronics and telecommunication). In that period I knew Piero I7IGX,  one of the first packet radio experimenter in my zone, who managed the local packet node IR7BA. In those years, internet was weakly entering in people houses by slow telephone modems (33Kbps or 56Kpbs).

When I became familiar with packet radio, thanks to I7IGX, I helped the local ARI club to improve and add features to the packet node IR7BA, and I learned with I7IGX how to work with TCP/IP over AX25, with the famous Softwares JNOS (DOS).

A lot of TCP/IP routing experiments  were conducted together with Raffaello Di Martino (ex IW7CHV, now IZ0QWM), and his brother Raffaello (ex IW7EAS, now IW2OHX), between IR7BA and Bari Nodes.

Also and a FTP, HTTP and mail servers were activated and a simple website with basic information was developed for IR7BA.

The increasing number of users of BBS, the frequent file downloads through YAPP protocol and the curiosity for packet radio, highlighted the real bottleneck of the packet network: the speed.
IR7BA had two main access ports: VHF@1200baud and UHF@9600baud and there was no internet connection in the first period.

In 1990, Dr, Matjaz Vidmar S53MV (a true idol among packet enthusiasts) published on “CQ Elettronica” Magazine some projects for home-made Wide-Band FM Radios and Modems, capable of 38400baud packet traffic at 430MHz. They were very innovative projects: even stripline technology was used for the RF sections!

In Italy and Slovenia, a fast network called “Supervozelji” was growing thanks to these 38400baud radios. Some years later, Matjaz Vidmar published a project for 1,2Mbps radio and the Italian Backbone was consequently upgraded. The early 2000’s represented, for me, the golden age of the Italian packet radio.

Here below, a picture of me, IW7BNO, IW7DWL, IW8DDV and other Apulian packet radio enthusiast at the bottom of IR7GRA node (Gargano, Apulia):


I7IGX proposed to me to build a couple of radios and modems, at 435MHz and 1,2GHz. In those years, I was attending the University (Electronic Engineering) and the free time for the hobbies was very limited. I started to build the radios, although I didn’t have all the necessary theory and practice.

Thanks to the help of Lorenzo IW6OCM, the UHF radio was successfully built and tuned, together with the Manchester modem and a SCC (Serial Communication Controller) PCI card, which was necessary for an efficient serial flow control between the modem and the PC.

Here below, a picture of 70cm radio is reported:


Thanks to this radio, IR7BA was successfully linked at 38400bps to IR7GRA, owned by Angelo IW7BNO, another packet-radio enthusiast who managed several packet nodes in my region.

I built another UHF radio on the same frequency of IR7BA, and I reached another important milestone:

The first audo/video-call, using Microsoft Netmeeting, was done from my house Piero I7IGX, which was connected via ethernet on IR7BA. It represented the fulfillment of an old dream.

Here below, you can find a picture of IRBA equipment. I built all the equipments in the aluminum boxes 🙂


Being very proud of these first results, together with Fabio IW7DWL, I finalized the 1,2GHz radio. In those years, the RF instruments were very expensive and were difficult to find for a ham use. With courtesy of one my professors, I was able to use, only for few hours, the spectrum analyzer of my Technical School, and finally me and IW7DWL got our radios working. The link was established at few Kilometers, from me to Fabio’s house, but the link was good.

Here below, a picture of 23cm WBFM radio is reported:


I was very satisfied, because in those years I was studying electronics and telecommunication at university, I could do practice on the hardware! I spent a lot of time and a lot of nights soldering, building and making tests in my lab.

In the 2003/2004, IR7BA was equipped with an internet connection and became an internet-gateway.

After some years of experiments with these radios, the Wi-Fi started to spread among the ham world, and the packet network was slowly upgraded with wifi links, especially the backbone links.

In the same years, together with Piero I7IGX, Nicola IK7SMY and Mauro IW7AVY, we developed a Bi-quad antenna for 2,4GHz and we enclosed a D-Link DWL-900AP+ access point in an outdoor box with a home-made power-over-ethernet system. Another important success was reached in 2003: the first local link upgraded to Wi-Fi!

Here below, some pictures of the home-made wifi outdoor box:

For furher details of the outdoor box project, see this website (italian, developed in 2003)

In the next years, other antennas were developed, built and installed on IR7BA: a vertical collinear, and a 3D-corner reflector, for longer links.

Here below, some pictures of 3D home-made corner reflector antenna (thanks to Mauro, IW7AVY for the nice manufacturing of copper parts):

In the next years, domestic access to internet became very fast and cheap, thanks to the ADSL connection. The interest for packet radio started to decrease and I had to move to Rome for work. IR7BA continued to live until 2010, when a thunderstorm and other technical problems on the equipment arised and there were not enough users to justify the effort for the system maintenance.

I continued my experiences with hamradio TCP-IP on 5,7GHz. I experimented mesh-networks and OLSRD protocol, joining ninux group (one of th world’s most active mesh neworks group) end applying hamradio IP numbering (44.x.x.x) on the nodes.

Here below, me after succesfully installing a Wifi link between me and IZ7YDL (about 20km distance):


Nowadays, the packet radio is limited to aprs and other simple applications, but while I wrote this article I felt very nostalgic of this beautiful period of my life, when every information was not so easy so find because it was not ready on google, when it was necessary to keep in touch with other colleagues much more than today in order to increase the technical knowledge and to find solution to the technical problems, when I spent entire nights just to see packets decoded on my CRT screen and, yes..it had the taste of a fantastic conquest. yes, I know that I’m getting old 🙂

Alfredo IZ7BOJ

ESEO GNURadio decoder optimization — 7 February 2019

ESEO GNURadio decoder optimization

After the launch of ESEO, at the end of 2018, Daniel Estevez released his beautiful GNURadio decoder: https://destevez.net/2018/12/decoding-eseo/

I started to use it and tried to do some optimization.

After some hours spent in “trial and error” I’ve found this two tricks to improve the success of decoding satnogs recording files:

1) Decrease the “Multiply Const” from 1 to 0,7 (Daniel Estevez already talked about the big gain of satnogs recording)

2) Increase the cutoff frequency of Lowpass Filter from original 4,8KHz to 5,2KHz (sometimes 5,3KHz)

Moreover, Dr. Chris Bridges suggested me to add a HighPass filter with a cutoff-frequency of 50Hz.


I tried this modifications with this satnogs observation: https://network.satnogs.org/observations/439335/ and the decoded packets increased from 235 (original configuration) to 322 .

I hope this suggestions can be useful to other people who want to use eseo decoder.


Alfredo IZ7BOJ

Double Turnstile construction for satellites receiving in 435MHz Band — 2 December 2018

Double Turnstile construction for satellites receiving in 435MHz Band

I’m going to describe the construction of a double turnstile antenna suitable for receiving the satellites in 435MHz band.

The original design is developed by Ivo I6IBE:



I found many pictures on the web which uses different materials and techniques.

Here below I describe my personal interpretation, which uses very common materials like PVC boxes and tubes, and threated bars.

The Bill of Material is:

  • N.2 threaded metal bars, 4mm x 100mm
  • N.1 10cm x 10cm square PVC Gewiss box
  • N.1 85mm circular PVC Gewiss box
  • N.1 joint from 20mm PVC tube to box
  • N.1 PVC tube 20mm diameter
  • RG58 and RG59 coax cables (see lengths in the first picture)
  • N.4 ring contacts , 4mm diameter
  • N.1 “N” flange connector
  • 4mm wahser and nuts
  • Cable ties
  • Insulating tape
  • Silicon sealant

First of all, I started from a 10cmx10cm PVC box. I made a central hole for placing the 20mm box-tube junction and one hole for every side of the box.

Then I cut 4 pieces of 16,3cm threated metal bars and installed with two nuts and washers:


At this point, I cut a piece of 1meter of PVC 20mm diameter tube and I made 4 holes for the reflectors, at 13,8cm from the radiators:


Now it’s time to cut the pieces of coax cables. We should refer to I6IBE lengths (see picture at top of the article).

Then I separated the shield and the central pole, then I soldered ring contacts at the ends:


I soldered together the balun coax pieces:

Then I installed the ring contacts inside the top box, to the radiators elements. I made two holes on the bottom of the box to let the cables exit from the box:


Then the most difficult part is to solder together the coax coming from the radiators and the coax of the balun:

At this point, we should put adhesive tape on the solder joints. Also some sealant or glue could be used to prevent water enter in the joints. Now we can build the box which will enclose the N connector. We can use a flange connector and make a hole on the cover of a circular 85mm PVC box.

At the end, we can put all the pieces together:

We can hold the circular pic box on the main tube using cable ties.

The final installation will look like this:


I checked the ROS and it’s perfect on 435MHz band. If some adjustment is needed, we can cut the radiator elements (it’s better to cut the elements a little bet longer than the design dimensions).

I tested the antenna with RTL-SDR dongle and I perfectly received Bugsat-1 satellite:


Happy receiving to everyone!

73′ de IZ7BOJ Alfredo

Telemetry of MMDVM repeater: how to visualize it in the DG9VH Dashboard — 5 September 2018

Telemetry of MMDVM repeater: how to visualize it in the DG9VH Dashboard

I was looking for a simple telemetry sistem for my MMDVM repeater, wich is not in my house, so for me is very useful to check it remotely.

I fixed some requisites before starting the research of this system:

  • It should be compatible with the raspberry Pi;
  • It should read repeater voltage, current, temperatures, and it should check the presence of 220V, in order to detect a power blackout and prevent the UPS discharge;
  • Easy to embed the readings in the MMDVM Dashboard, possibly using gauges or similar nice graphic indicators.

After some research on the internet, I found something almost ready, but it was quite expensive and was not easy to customize.
So I started to think to a “DIY” solution. I searched for ready-to-use ADC boards, and I found a lot of sulutions on amazon or ebay, but most of them provides only 4inputs and 4 outputs, but I’m not interested at outputs channels, and 4 inputs were not enough for my purposes.
At the end of my researches, I bought the IC MCP3008, by Microchip, that is a 8 inputs, 10 bit Analog to digital converter equipped with and an SPI output interface ( http://ww1.microchip.com/downloads/en/DeviceDoc/21295C.pdf ). The IC could be powered directly from the 3,3V or 5V of the raspberry, and a python library is also available for this ADC ( https://github.com/adafruit/Adafruit_Python_MCP3008 ).
The ADC inputs can directly read temperature sensors and repeater main voltage (the maximum input is Vcc, so the voltage must be divided through a pair of resistors, obviously).
For the curren telemetry, I found a very simple and cheap hall effect sensor IC, the ACS712 series, by Alegro (see_datasheet).
The chip is available in SOIC8 SMD package, but the complete PCB with screw terminals are available on the ebay.
I bought a pair of ACS712-05 (5Ampere full scale) and a pair of ACS712-20 (20 Ampere full scale) form a Chinese supplier, and finally I got it after a 3 weeks.

I built a simple prototype board with L-C filters on the input and a voltage dividers on ch0, which is dedicated to the 12V acquisition.

Here below the very simple schematic diagram:


Here below prototype picture:



Note: in the picture some 3-way screw terminal are present, despite of 2-way terminal of schematic diagram. I simply brought the 5V on the third terminal, if a powered sensor is used (e.g. the current sensor board must be externally powered with a 5V).

The connection between the prototype board and the raspberry are done by female square pin wires, following the pinout of raspberry pi. The pinout is reported hereafter:

mcp3008pinoutThere are two possibilities to connect the IC to the raspy: the Software SPI or the hardware SPI. I choose the second one, so the connections are:

  • MCP3008 VDD to Raspberry Pi 3.3V
  • MCP3008 VREF to Raspberry Pi 3.3V
  • MCP3008 AGND to Raspberry Pi GND
  • MCP3008 DGND to Raspberry Pi GND
  • MCP3008 CLK to Raspberry Pi SCLK
  • MCP3008 DOUT to Raspberry Pi MISO
  • MCP3008 DIN to Raspberry Pi MOSI
  • MCP3008 CS/SHDN to Raspberry Pi CE0

The Raspberry Pi3 pinout is reported here below:

raspy pinout

For the first check of the interface, I put a 5V on one of the cannels, then I installed the adafruit python library and examples, following this procedure (see references for the complete guide):

sudo apt-get install build-essential python-dev python-smbus git
cd ~ (or directory where you want to install the package)
git clone https://github.com/adafruit/Adafruit_Python_MCP3008.git
cd Adafruit_Python_MCP3008
sudo python setup.py install

Then, if the installation is successful, we can go into the Adafruit directory and edit the file simplest.py. In order to use the Hardware SPI, the first part must be commented and the second part must be uncommented. The code will look like this:

# Software SPI configuration:
#CLK = 18
#MISO = 23
#MOSI = 24
#CS = 25
#mcp = Adafruit_MCP3008.MCP3008(clk=CLK, cs=CS, miso=MISO, mosi=MOSI)
# Hardware SPI configuration:
mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))

I saved the simpletest.py, then I connected a pair of power supply at a random voltage between 0 and 5V on ch0 and ch1 of my prototype board, just for test. I launched the test file (sudo python simpletest.py) and I got the correct channel acquisition:


I tested all the channels providing a 5V to each input, and I verified the decimal value was near 1024, which is the full-scale range for a 10bit ADC.
Ok, it was the easier part of the work, but now…I want to show data on the MMDVM dashboard, which is written in PHP by DG9VH.
I tried some library available on the internet, but I had no time and knowledge to study and customize them.
In particular, the Calcinai PHPi library is very interesting, but it’s not ready for use. The user should create a ‘worker’ which runs in the background and is connected to via websockets (or similar).  It may not even need to be that complex if you’ve already got a database layer to cache the readings. If someone wants to work on it, please have a look at https://github.com/calcinai/phpi-websocket).

So I decided to try the quickest solution, although it’s very dirty and most of SW developers will dislike it.
I decided to run a python script through the “exec” command in php code, which execute shell commands. Once the python script has been executed, the 8 ADC readings are stored in a vector, then any conversion fron decimal to voltage/current/temperature is possible in php.

Once the date is acquired, it should be shown in a pleasant way on the dashboard. I searched for some beautiful and simple gauge and I found “coffeegauge”: http://bernii.github.io/gauge.js/

For the implementation of the acquisition routine and the gauge parameters, I followed the following steps:

1) Start from “example.py”, under the examples directory, and modify it in order to read the inputs only once (I deleted the cycle inside). Save it as “read_adc.py” in var/www/html/ directory.

import time
import Adafruit_GPIO.SPI as SPI
import Adafruit_MCP3008
# Hardware SPI configuration:
mcp = Adafruit_MCP3008.MCP3008(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))
#read and print all ADC channels
for i in range(8):

2) Give execution permission on the script:

chmod +x read_adc.py

3) Check the correct execution of the script:

python read_adc.py

see the output values on the screen and check they report the correct decimal value if compared to the input voltages present at the channels.

4) Download the script file gauge.min.js from http://bernii.github.io/gauge.js/ and copy it in the /var/www/html directory (or the root file declared in your html server config file)

5) Insert the following code inside var/www/html/custom.php file, which is executed and shown in the dashboard , under the section “custom info” (remember to enable int in the dashboard config file). Only ADC ch1 is reported, but you can copy-paste for every channel:

#Execute the python script and store channels readings into a vector
exec("sudo python ./read_adc.py", $adc);
#calculate the power supply voltage (4.35 is the resistive divider factor)
#create the canvas gauge_V and show ch1 value
<canvas width="200" height="150" id="gauge_V"></canvas>
#recall the script .js file
<script type="text/javascript">
#set gauge options
var opts_V = {
  angle: -0.2, // The span of the gauge arc
  lineWidth: 0.1, // The line thickness
  radiusScale: 0.8, // Relative radius
  pointer: {
    length: 0.6, // // Relative to gauge radius
    strokeWidth: 0.033, // The thickness
    color: '#000000' // Fill color
  limitMax: false,     // If false, max value increases automatically if value > maxValue
  limitMin: false,     // If true, the min value of the gauge will be fixed
  highDpiSupport: true,     // High resolution support
  staticZones: [
   {strokeStyle: "#30B32D", min: 0, max: 12}, // Green
   {strokeStyle: "#FFDD00", min: 12, max: 14}, // Yellow
   {strokeStyle: "#F03E3E", min: 14, max: 24}  // Red
staticLabels: {
  font: "10px sans-serif",  // Specifies font
  labels: [0,12,24],  // Print labels at these values
  color: "#000000",  // Optional: Label text color
  fractionDigits: 1  // Optional: Numerical precision. 0=round off.
var target = document.getElementById('gauge_V'); // your canvas element
var gauge = new Gauge(target).setOptions(opts_V); // create sexy gauge!
gauge.maxValue = 24; // set max gauge value
gauge.setMinValue(0);  // Prefer setter over gauge.minValue = 0
gauge.animationSpeed = 32; // set animation speed (32 is default value)
gauge.set(); // set actual value

Note: The “floor” function is used to decrease the decimal digit to 2.

6) Try the final effect loading custom.php in the browser or the complete index.php page.

If everything is ok, you should see the gauge 😉

The user can customize almost everything of the gauge (colors, aspect, dimensions, speed, angles, ecc..). For more details you can go to http://bernii.github.io/gauge.js/

The final effect is reported in the following screenshot:


The real dashboard can be reached at this address: http://iz7boj.ampr.org

Note1: the python script is executed only when the dashboard is loaded on the browser, so the current value is sampled in the moment of script execution and mantained until the browser is refreshed!
If the radio is transmitting, you’ll see something about 3,8Ampere, otherwise you’ll see abut 150mA, which is the consumption in receive mode.

Note2: that the 220V presence is not exactly the voltage at the plug. I simply connected a 5V power supply to one of the inputs.
Then, I inserted the following “if” case in custom.php:

if ($ch5>4){$RETE=220;} else {$RETE=0;}

In other words, if the 5V is present (V>4V), then I’ll show 220V in the indicator.
In my “to do list”, I’ll build an voltage divider that will ready the 220V..

The source code that I pasted for ch1 could be obviously repeated for every channel, and any math formulas can be implemented for other type of signals.

I hope someone can found some interesting trick to built is own telemetry interface!
It’s a “quick&dirty solution”, but I’m an HW man and have a basic php knowledge. Every software developer can do something better than me for sure 🙂

Best 73’s
Alfredo IZ7BOJ





Testing of 409Shop UHF Diplexer — 28 December 2017

Testing of 409Shop UHF Diplexer

Hello OMs,

I’m going to share some measurements made on my UHF Diplexer that will be installed on my MMDVM equipment for the upgrade from simple hotspot to a repeater, using a Diamond X-510 antenna.

I bought this very cheap Diplexer from the Chinese e-shop “409Shop”, at only 97$: http://www.409shop.com/409shop_product.php?id=104460



It’s a 6 cavity Diplexer (2 notch + 1 bandpass for each path), so I expected a very good out-of-band attenuation, which is a very interesting feature in installation sites with strong RF signals coming from other transmitters.

I choose the 50W version, because the price difference between the 35W and 50W was only 14$.

For the payment, I used paypal, without any problem. As suggested on the site, I specified the Low and High Frequency of my repeater in the order notes.

The Diplexer arrived very quickly. The order dates are the following:

  • Order and Payment: 14 November 2017
  • Order Confirmation: 15 Novemver 2017
  • Shipment confirmation and Tracking Number: 18 November 2017
  • Arrival: 01 December 2017

Before the installation, I took some measurement with a Vector Network Analyzer, at ambient temperature and at cold and hot temperatures, in a climatic chamber, in order to verify the tuning made by the seller, and the temperature drifts, which affects the low-cost Diplexers.

I choose +55°C and -25°C as worst case temperature, although my region has a very mild climate.

Note: during every measurement, the third port (not connected to the VNA) is connected to a 50ohm dummy load.

The frequency of my repeater are:

  • Low (TX): 430.325 MHz
  • High (RX): 435.325 MHz

The more interesting measurements are:

  • Attenuation from Antenna port to RX port;
  • Attenuation from TX port to Antenna port;
  • Matching at RX, TX, and Antenna ports;
  • Isolation between TX and RX ports;

Here below, the ambient temperature measurements are reported:







Considerations about performances at ambient temperature

  • The isolation between RX and TX ports is >70db, as declared on the datasheet
  • The loss from ANT to RX port and from TX port to ANT is <1dB
  • The resonance at RX and TX ports are slightly different from the desired frequencies, but the matching is very good anyway (>20dB)
  • The matching at antenna port is good (>20dB)


Here below, the temperature drifts of the main measurements are reported:


Note: the attenuation @435.325MHz is 1.2dB at +55°C and 1.1dB at -25°C


Note: the attenuation @435.325MHz is 1.1dB at both +55°C and -25°C


Considerations about performances at cold and hot temperatures

  • In all the cases, the responses moves up in frequency when the temperature increases.
  • The isolation is still >=70dB also at hot and cold temperatures.
  • The attenuation from ANT to RX port and from TX to ANT increases slightly (1.2dB),but is still very good, even if the curves move in frequency.


Here below, I judged and assigned a score for every aspect of Diplexer, from 0 (min) to 5 (max):valutazioni

Considering the cost, this Diplexer is a good compromise between cost and performances, and I suggest this product for hamradio applications.

The out-of-band rejection is good as well as the temperature stability, so it can be used also in mountain sites or in RF polluted sites.


Yaesu FT-2D Microphone Jack — 25 November 2017

Yaesu FT-2D Microphone Jack

Recently, I built a “hands-free” microphone for my car, and I had to connect it to my Yaesy FT-2. I bought a standard 4-poles 3,5mm jack and I tried it, but it didn’t work. Neither the PTT was working, so I supposed it was not suitable for my radio.

I compared it with the original yaesu jack of a CT-44 adapter, and the difference was evident. See the following picture:

jack 4 poli_mod

The metal plate indicated with the red arrow, interferes with the jack hole of the radio, so it doesn’t completely plug into the radio.

The solution was to use a cellular 4-poles jack. I cutted it and soldered the wires. See  this picture:


Then, I had to cover it in some way. I decided to put glue and heatshrink tube.

I used this epoxy glue:


I mixed the two components and applied on the connector:

Then I cut a piece of heatshrink tube and shrinked it with a heat gun:

I waited a couple of hours for the complete drying of the glue. Here below there is the final result:


I’m using it every day and it’s perfect!