Ran it again, worked perfectly. Not sure what happened before.
Installed the meshtastic-mui fine. Where would I go from here?
just follow the directions here.
Hi @Rex
I wanted to thank you for all your hard work here, the uConsole + AIO would not be half of what it is without your help!
When I started playing with the setup, I noticed that using the GPS in âdirect connectâ mode meant the GPS was usually tied up with meshtasticd. I have seen some mentions about using gpsd, but no solutions, so I figured I post mine. Maybe this will help someone else.
First need to install gpsd:
sudo apt install gpsd gpsd-clients libgps-dev libgps
Then edit /etc/default/gpsd:
DEVICES="/dev/ttyAMA0"
#DEVICES=""
OPTIONS="-p"
# Other options you want to pass to gpsd
GPSD_OPTIONS=""
# Automatically hot add/remove USB GPS devices via gpsdctl
USBAUTO="true"
The â-pâ says to not reconfigure the gps receiver at initialization. I think for CM4, the first line should be /dev/ttyS0.
In order to support meshtastic, a little trickery is needed. Sourced from elsewhere on the internet, I built a script in my root folder:
#!/bin/bash
rm -fr /dev/ttyGPS || true
mkfifo /dev/ttyGPS
chown root:dialout /dev/ttyGPS
chmod 660 /dev/ttyGPS
/usr/bin/gpspipe --nmea -o /dev/ttyGPS -d
Then chmod +x <>.sh. for me this was âchmod +x startGPS.shâ
If you want to have this start from boot up, youâll need to create a systemd script. I created this as â/etc/systemd/system/multi-user.target.wants/gpspipe.serviceâ:
[Unit]
Description=gpspipe for Meshtastic
After=network-online.target
StartLimitInterval=200
StartLimitBurst=5
[Service]
User=root
Group=root
Type=forking
ExecStart=/bin/bash -l -c '/home/pi/startGPS.sh'
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
The script name in ExecStart line should be the name of the bash script above.
Then:
sudo systemctl enable gpspipe
2 more helpful changes:
in /etc/meshtasticd/config.yaml, change to:
GPS:
# SerialPath: /dev/ttyAMA0
SerialPath: /dev/ttyGPS
If you watch the meshtasticd logging, it will fail to detect the gps several times, then fallback to 9600 baud and then work just fine.
And optionally, you can edit /etc/default/readsb to:
# readsb configuration
# This is sourced by /etc/systemd/system/default.target.wants/readsb.service as
# daemon startup configuration.
RECEIVER_OPTIONS="--device 0 --device-type rtlsdr --gain auto --ppm 0"
DECODER_OPTIONS="--max-range 450 --write-json-every 1"
NET_OPTIONS="--net --net-ri-port 30001 --net-ro-port 30002 --net-sbs-port 30003 --net-bi-port 30004,30104 --net-bo-port 30005 --net-connector 127.0.0.1,2947,gpsd_in "
JSON_OPTIONS="--json-location-accuracy 2 --range-outline-hours 24"
The last part of the NET_OPTIONS line enables range rings based on the gps position.
After this, unfortuantely the pygpsclient is not so useful anymore, but you can use any gpsd tools. from the command line, cgps shows everything you would get from pygpsclient. Shown here, with meshtastic running in parallel. gpsmon also has similar data. xgps has a more graphical view, but not well suited for the screen size.
This config also allows the direct use of ubxtool (I think this was in the base install from Rex). If you donât see the satellites in the cgps screen, just type âubxtool -e NMEAâ and they should come back.
So far this setup is working well, but might need some tweaking. Iâm happy to help if there are problems.
Dave
So⌠my pygpsclient is getting good feedback. However, my two lower left windows arenât showing anything. My map in lower center window is working and displaying accurate location in the world view, but no others.
Wanting to try this out, I tried the first step but, curiously enough, Trixie now has libgps-dev but not libgps. Did you have to build it yourself or is there just a temporary skip in the Trixie sources?
I think I really only had to install gpsd and gpsd-clients. I figured the lib might be needed for some extra add-ons Iâm thinking about. For now, drop the libgps.
Any good esp flashers I can install on Uconsole? Iâm trying to install esptool.py and Iâm getting a message saying I canât⌠any ideas?
whatâs the error? 20 charactersâŚ
Says itâs a permission issue having to do with pygpsclient of all thingsâŚ
can you post the error?
how did you try and install it? looks like you tried to install it along side pygpsclient.
I did a ln easy pip install. Just ran the normal python3 and went into a pip install. I didnât run anything pertaining to pygpsclientâŚ
Can you post the command/s the you did and post logs of the errors. itâs hard to help without exact information.
sudo apt install python3-pip python3-serial -y
pip3 install --upgrade esptool
you can do a easy fix by fixing ownership of pygpsclient by sudo chown -R triilly:triilly ~/.pygpsclient/ that will let you install it.
Oh yeah⌠easy lol.
You gotta teach me this stuff. Idk how you do it sir. But it worked.
Iâll circle back to my tempestsdr question as well? Have you had any luck trying it with either the rtlsdr on the AIO board or using an external, such as a HackRF?
can I even install it on your bookworm distro?
Also, has anyone had any luck running the onboard RTL-SDR in conjunction with an external RTL-SDR?
One holding a control talkgroup and another hopping on trunksdr?
If so, how have you made it work? Thanks! Yâall are beyond helpful!
you should just be able to compile tempestsdr, as for sdrtrunk i havenât done it with the AIO card but using 2 rtlsdrs does work with it.
Hi, I maked a python script to get sound notification when new messages arrives. The script check the file size of the message file, if it changes then I get a notification ![]()
import os
import time
import subprocess
# Filen du vil overvĂÂĽke
FILE_PATH = "/home/tor/.portduino/default/messages/log_000001.log"
# Lydfil eller kommando for lyd
# Du kan bruke 'aplay' eller 'paplay' hvis du har en wav/ogg fil
SOUND_FILE = "/home/tor/Music/ring07.wav"
def play_sound():
try:
subprocess.run(["aplay", SOUND_FILE])
except Exception as e:
print("Kunne ikke spille lyd:", e)
def monitor_file(file_path, interval=5):
if not os.path.isfile(file_path):
print(f"Filen {file_path} finnes ikke.")
return
last_size = os.path.getsize(file_path)
print(f"Starter overvĂÂĽkning av {file_path} (størrelse: {last_size} bytes)")
while True:
try:
time.sleep(interval)
new_size = os.path.getsize(file_path)
if new_size != last_size:
print(f"Filstørrelse endret! Ny størrelse: {new_size} bytes")
play_sound()
last_size = new_size
except KeyboardInterrupt:
print("\nAvslutter overvĂÂĽkning.")
break
if __name__ == "__main__":
monitor_file(FILE_PATH, interval=5)
If you wish to make it to start automatically every time you boot up, you can make a service to do that.

