About 5 years ago, i’ve create a small php script to control my YAESU FT817 via APACHE server and a LINUX box,
since this moment, i have work on my « cloud » for HAM radio « www.crx.cloud » and I thought about how to have the most powerfull system and on the cloud.
also a Google Chrome application and extension to do this job.
In parallel I discovered NODEJS and also the WEBSOCKETS with Socket.IO, suddenly I left on this concept:
– A NODEJS application that fulfills the role of WEBSOCKETS server and also allows to control the serial port.
Thus the user launches the server in the background on the PC he wants. Then it connects to it from any browser (CHROME / FIREFOX or OPERA).
On the protocol side, each radio equipment manufacturer uses its own system except for some of the groups, so I had to deal with that, so I grouped:
– yaesu1 / icom1
– kenwood1 / elecraft1 / yaesu2
Why that ? simply because the method of writing and reading the serial port is not the same.
On one side are hexadecimal values for ICOM / YAESU and on the other character strings for YAESU2 / KENWOOD1.
Finally in terms of protocol ICOM uses identifiers for each of their equipment, against the procole remains the same,
so even if the code is more complicated to use their protocol, it’s quite simple in the end to control. YAESU side,
it’s not the same thing because there are 2 different protocols.
Funny thing also at YAESU protocol V1 the radio returns frequency and mode in the same frame … so I had to adapt my code
of an asynchronous task before launching another example:
– My client JS asks the server: What is the frequency?
– He must wait before asking what is the mode,
Otherwise the remote NODEJS server will not be able to execute commands on the serial port and may overlap with them.
This is where the JS Promise class comes into play.
for ICOM because of the calculations and the changes of bases to operate (with binary shift for example).
Note that for the moment the system is not perfect because on the part NODEJS I still have books of reading specific to each
manufacturer in the long term I would like to do these operations also on the client side JS / WEBSOCKET and not side NodeJS.
Finally for the moment, the project is in « beta » because I do not have hardware kenwood1 / yaesu2
so I advance the code thanks to feedback from users.
If you want to see what this gives:
Server CRX-COM (NODEJS):
Client part (JS Web browser) CRX-CLOUD:
I also posted a little documentation to explain all this here:
And a diagram is available here:
73 to all