Software Gateway-V

Software Gateway 

Es tut sich einiges in der Community und es haben sich einige interessante Projekte entwickelt.

Sascha’s iot4pi war die ursprüngliche Version, die seit mehreren Jahren erfolgreich im Einsatz ist. Wir haben für den Rasperry Pi ZeroW (und Pi 3 (+) ) ein SD-Karten Image mit aktueller Kernel Version erstellt und Sascha’s Gateway-SW um ein paar Monitoring-Scripts erweitert.   Außerdem  gibts in der letzten Version eine Anbindung an den GPSD, um die GPS-Koordinaten in der Konfig je nach Standort beim Start zu aktualisieren.

Andreas, OE5PON, hat das Image wesentlich überarbeitet.  In der letzten Version werden auch Wetter- und Telemetrie-Daten aus dem BME-280 Sensor am I2C Bus des Gateways unterstützt. Es können mehrere APRS-IS Server definiert werden und außerdem hat Andreas der iot4pi Software ein kleines Web-Interface zu Konfiguration und Bedienung spendiert!

Vielen Dank für deine tolle Unterstützung, Andreas!

Das Zip Archiv hat ca 1.6GB und wurde von einem 4GB SD-Karten Image erstellt.  (Download am Besten über FTP Client i.e.Filezilla)

Download  GW Version:

zu finden auf unserer FTP-Seite:     FTP ftp://www.lora-aprs.at  (User: 158873ftp3 /  lora12345 )

btw, wie’s scheint hat Firefox die ftp-Unterstützung gestrichen. Es kann ein FTP-Client ( i.e. https://filezilla-project.org/ ) verwendet werden. Für Clients unter Linux bitte FTP-PASSIVE Mode verwenden.

Images:

Neu:

  • 210605-iot4pi-Release_V0_4.zip (ca 1,6GB – bitte per FTP laden)

ältere Versionen :

  • Mar 18 09:26 210226-Buster-systemd-2GB.zip
  • Dec 22 10:00 201215-Buster-systemd-2GB.zip
  •  Nov 24 13:49 GW-Image_20200819_Buster.rar


Aktualisierung des LoRa I-Gate Symbols

(ab Version 0_4 bereits enthalten)

Es wurde vorgeschlagen, ein einheitliches Symbol für Lora-Gateways zu verwenden. Andreas, OE5PON beschreibt die Änderungen im Lora_APRS_gateway_6.py Script:

… nun wurde es nochmal offiziell auf ein schwarzes L  (L&) geändert!
pi@OE5XOL-LORAGW:~/iot4pi $ nano Lora_APRS_gateway_6.py


Zeile 174:     return („%s>APOTW1,TCPIP*:!%sL%s&%s/%s\r\n“ % (APRS_IS_CALL, LATITUDE, LONGITUDE, PHG, INFO+“ „+TempHumPress))


Installation GW-Image:

      1. Download Image von FTP-Seite:  ftp://www.lora-aprs.at  (User: 158873ftp3 /  lora12345 )

       2. entpacken (unzip)

       3. Image auf  GB SD-Karte Kopieren (i.e. mit Win32DiskImager)

       4. du solltest dann damit vom Raspberry Zero W oder Pi 3 booten können ( Login: pi/raspberry )

       5. WLAN Zugang einrichten um das GW ans Netz zu hängen 

          verschiedene Möglichkeiten:

eine Datei ‚wpa.suplicant.conf‘ mit deinen WLAN-Daten erstellen und ins Root – Verzeichnis auf der SD-Karte kopieren.

Die Datei wpa_suplicant.conf kann mit SSID und PSK editiert werden, und einfach in das Root der SD Karte kopiert werden. Das wird beim Booten in das /etc/wpa_supplicant/ übernommen. Muster File liegt auch am FTP Server.

#more wpa_supplicant.conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=AT
network={
ssid="MySSID"
psk="12345678"
}

oder

  •      am Pi 3 über Ethernet Kabel ( DHCP ist aktiv und er sollte sich eine IP aus deinem NW zuweisen lassen)
  •      am Pi Zero W (über optionalen USB-Ethernet Kabel Adapter)
  •       oder altmodisch über Konsole (HDMI) & USB Tastatur
  •       wenn du in der Shell bist, kannst du über sudo raspi-config deine WLAN konfig durchführen


....  oder für ältere GW-Image Versionen:
Falls ein Linux system mit SD-Karten Leser zur Verfügung steht, kann das Image auch gemounted werden
und das File etc/wpa_suplicant/wpa_suplicant.conf direkt mit den eigenen WLAN (SSID & Passwd) ergänzt werden.
## nach Einschieben der SD-Karte wird das Filesystem gemounted:
/dev/mmcblk0p1 43539 22499 21040 52% /media/bernd/boot
/dev/mmcblk0p2 15240048 1905136 12683112 14% /media/bernd/rootfs

## ins Verzeichnis wechseln ...
$ df
$ cd /media/bernd/rootfs
$ ls
$ cd etc/wpa_supplicant/
$ ls




##  das File editieren ... (es kann auch ein anderer Editor verwendet werden zB: nano(1) )
$ sudo vi wpa_supplicant.conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=AT

network={
ssid="HUAWEI-3A96-2.4G"
psk="....password......"
}

                                      ##  eigenes WLAN hinzufügen

# add your  WLAN parameters here ....   SSID and Password
network={
ssid="NGbg24"
psk="....password......"
}

##  Abspeichern ....

##  zurück ins HOME Verzeichnis und unmount der SD-Karten Filesysteme
$ cd
$ umount /media/bernd/rootfs
$ df
$ umount /media/bernd/boot


Das modifizierte Image kann jetzt zum Booten verwendet werden. Der Raspi sollte sich im eigenen WLAN anmelden. DHCP und ssh Server sind aktiv. Die neu vergebene IP Addresse lässt sich am WLAN-Router (DHCP.log) finden, bzw, kann auch am Display angezeigt werden.

         6. Wenn die NW/WLAN Konfig erledigt ist, bitte im Verzeichnis /home/pi/iot4pi das Konfigurationsfile

               APRS.conf editieren und deine Parameter einstellen.

              falls die GPSD-Version  verwendet wird, sollten die Parameter im File APRS.conf.GPS_in geändert werden. Daraus wird dann APRS.conf.GPS (mit aktuellen GPS-Daten erzeugt, das dann auf ‚APRS.conf‘ symbolisch gelinkt ist.  Die GW-Software startet dann mit den aktualisierten GPS-Daten, die vom ‚gpsd‘ empfangen wurden.

Die GW Software ist so eingestellt, dass sie nach dem Boot die NW-Konfig (IP Addresse) anzeigt, und wenn die APRS-Server erreichbar sind, wird die GW-Software (Sascha’s iot4pi-Version) gestartet.

Über ’sudo raspi-config‘ sollten noch der Hostname, Password und andere Parameter wie Partition-Size/Filesystem, etc … angepasst werden.

Zusätzlich besteht die Möglichkeit die APRS.conf Datei über einen Script mit den aktuellen Positionsdaten über GPSD upzudaten, was bei öfterem Standortwechsel des GW ( z.B. bei Einsatz bei Fielddays oder am Parkplatz im Auto) von Vorteil ist. Es muss somit nicht jedesmal mühsam das APRS.conf File editiert werden …

Update 05/05/2020:   

Startup – Interaktion mit GPSD zum automatischen Update der Positionsdaten im APRS.conf File.

Es kann jetzt beim Start des Gateways über TastenDruck ein automatisches Update der Positionsdaten im APRS.conf File durchgeführt werden. Somit entfällt das lästige Editieren der Position (LATITUDE/LONGITUDE) in der Konfig, falls das Gateway mal mit Hotspot zum Fieldday, Wandern, Skifahren, Laufen  oder Urlaub mitgenommen wird.

Die GPS-Daten werden über den GPS-Daemon im OS gelesen.  Es können unterschiedliche GPS-Empfänger (USB/Serial/Bluetooth/GPS vom Mobiltelefon über Shared GPS App und NW-Verbindung) eingebunden werden.

Das Ganze wurde in eine neue Startup Routine verpackt, die beim Start/Boot ausgeführt wird. Die Konfig muss etwas angepasst werden …

– Tar Archiv mit neuer Statup-Routine         show_startup_200505.tar.gz   

(download über wget https://www.lora-aprs.at/wp-content/uploads/2020/05/show_startup_200505.tar.gz)

Beschreibung/README

startup_src $ more README
******************************************************
* *
* New Startup procedure with *
* – Verification of Network Connectivity and *
* – Interaction with GPS-Service Daemon (gpsd) *
* *
* *
* https/www.lora-aprs.at Bernd Gasser/OE1ACM *
******************************************************

Description:
when booting the RasPI the start.sh scrip gets executed thru cron.
(@reboot /home/pi/iot4pi/start.sh)
(see start.sh script below)

The start.sh calls a little program ’show_startup‘ that opens
the Oled 96 Display and reads buttons.
The initial purpose of this ’show_startup‘ was to check
network-connectivity, check wheter WAN connection to APRS-IS
servers can be connected and show the IP-Addresses that were
assigned by DHCP – for easy access to the OS (i.e. thru ssh)

What is new now?
—————-

If the Gateway isn’t always operatedat the same location ( i.e.
placing the GW in car with hotspot on parking area while walking,
skiiing, cycling, etc … , it was quite annoying to manually
update it’s position LAT/LONG in the APRS.conf file.

For updating the current position in the APRS.conf file we now
added a feature during startup to interact with the GPS-Daemon
‚gpsd‘ and automatically replace location (LAT/LON) with current
position returned from gpsd.

This feature is activated by holding any of the buttons during
startup while Network interfaces are searched and tested.

A'(GPS)‘ marker will appear in upper left corner of the screen,
indicating that ‚gpsd‘ gets contacted for current position.

gpsd in turn will read it’s data from any GPS device connected
either thru Serial, USB, Bluetooth or any network – TCP/IP
connection. I have tested Bluetooth GPS from Garmin and also
sharing GPS data from mobile thru the ‚Share GPS“ App (on my Samsung S9)

if Bluetooth is used it is required to pair the GPS and configure SPP
and add the device to gpsd … this can be added to the startup script
as shown below…
proper connectivity can be checked and verified by ‚gpsmon’….
gpsd is quite well documented so I don’t want to go into detail

How do we replace current position in APRS.conf?

Once we activated the automatic position update by holding a
button during Interface scan in startup, we query ‚gpsd‘ for GPS-Data
and once we receive a valid position, we’ll exchange a ‚placeholder‘
in the file ‚APRS.conf.GPS_in‘ and create the new ‚APRS.conf.GPS‘ file
with updated position Data (LAT/LON).

Note, if retrieving GPS-data from ‚gpsd‘ fails, the old, last
configuration will be kept. Also if no key/button is pressed during
startup, we’ll not do any update and use prvious config.

btw, updating position is done by the streaming editor ’sed‘
with the foillowing command in the sedfile:

s/LATITUDE:________/LATITUDE:4812.91N/g
s/LONGITUDE:_________/LONGITUDE:01627.25E/g
so please don’t remove the placeholder for the position when editing
APRS.conf.in.

So I’d suggest to put your own current config into the ‚APRS.conf.in‘
file that is used as basis for creating the final APRS.conf with
current position updated.
to keep multiple configurations in parallel you can create
symbolic link to the configuration you want to use.

example ln -s APRS.conf.GPS APRS.conf

lrwxrwxrwx 1 pi pi 13 May 4 10:35 APRS.conf -> APRS.conf.GPS
-rw-r–r– 1 pi pi 2140 May 4 12:20 APRS.conf.GPS
-rwxr-xr-x 1 pi pi 2140 May 4 10:58 APRS.conf.GPS_in

above will activate the automatically updated APRS.conf.GPS for
Sascha’s (iot4pi-GW) Software to startup with the Gateway-Software.

using symlinks may help to keep multiple configs

Installation:
————-

– create a backup/copy of your current configuration
in /home/pi/iot4pi

– download archive with new startup

– replace the current ’show_startup‘ binary with the one
from downloaded archive.

i@LoRaGW_27:~/iot4pi $ mv show_startup show_startup.old
pi@LoRaGW_27:~/iot4pi $ cp ../startup_src/show_startup .

– copy your current APRS.conf to APRS.conf.GPS_in and add the
placeholders:

LATITUDE:________
LONGITUDE:_________

where you want the position be filled by the automatic
update.

– create the symbolic link from APRS.conf.GPS to APRS.conf
to use the automatically updated file as input for the GW-SW

# ln -s APRS.conf.GPS APRS.conf

– setup gpsd and verify gpsd

there is plenty of information published
https://gpsd.gitlab.io/gpsd/gpsd.html
https://gpsd.gitlab.io/gpsd/troubleshooting.html

use gpsmon / gpsdctl to verify proper gpsd config

– verification

you can dry-run to verify …

– stop current GW-SW

sudo pkill iot

– from iot4pi subdirectory start sudo ./show_startup
Oled will list interfaces and IP … hold any button …

Oled will show on top:

(GPS) Interfaces

gpsd will be queried for GPS-data and will contact configured
GPS-RX …. when successful it shows LAT/LON Position data
on Oled and will create ’sedfile‘ with streaming editor commands
to replace placeholder in APRS.conf.GPS_in and write to
APRS.conf.GPS (that is linked to APRS.conf)

– maybe verify that GPS-RX are properly configured and started
during boot. when needed you can add lines to the start.sh
script that gets started by cron.

below is a sample of my commands to add a network-shared GPS from
my mobile via TCP-connection to port 2947 (from Shared GPS App)

or the other Line shows the connection to an old Garmin Bluetooth
GPS. I did pair and trust the device via bluetoothctl before and
just do the rfcomm binding to the address to create a serial outgoing
connection via bluetooth to the GPS-RX. I then added the device
rfcomm0 to the device list for gpsd.

~/iot4pi $ more start.sh
#—- start.sh ——————————————-
#!/bin/sh
Pfad=“/home/pi/iot4pi/“
echo „Waiting to wake up…“
cd $Pfad

# Starting up gpsd and add device i.e. Shared GPS from mobile
#sudo gpsdctl add tcp://192.168.2.102:2947

# Bluetooth Garmin
sudo rfcomm bind 0 00:05:4F:08:B3:F8
sudo gpsdctl add /dev/rfcomm0

# startup and check NW Connectivity
./show_startup
ret=$?

echo $ret

if [ $ret -ne 5 ]
then
echo „Starting UDP..GW..“

sudo $Pfad“iot4pi_LoraGW_01″ >> $Pfad“LogAPRS.txt“

fi
#———————————————————

The code is shipped with the archive and can be compiled with supplied makefile.
Several Libraries pthread,gps,oled,wiringPI,etc… will be used but should be included in the image already.

It is intended fou our use in the HAM-Radio community only and should not be used for any commercial purpose. If you want to make changes or fix bugs – please feel free to do so but please keep us updated on improvements so a broader audience can benefit.

Have fun!

vy73,

Bernd/OE1ACM