You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
455 lines
16 KiB
455 lines
16 KiB
2 years ago
|
+++
|
||
|
title = "HS Dual Hat With PiStar v4"
|
||
|
summary = """This is a MMDVM_HS_Dual_Hat hotspot in duplex mode with DMRGateway
|
||
|
and an actual Pi-Star image."""
|
||
|
categories = ["amateur-radio"]
|
||
|
tags = ["pistar","dmr","ysf","dstar","hotspot","mmdvm"]
|
||
|
date = 2020-01-23T15:03:35+01:00
|
||
|
lastmod = 2022-08-19T18:49:56+02:00
|
||
|
|
||
|
+++
|
||
|
|
||
|
I've been playing with Pi-Star now for a while and I finally got my
|
||
|
IPSC2-Brandmeister dual-setup working.
|
||
|
|
||
|
I'm using the beta version v4 because I read somewhere, that DUAL-HATS won't
|
||
|
work properly with the older v3 firmware---but I never really tested the v3.
|
||
|
Instead I went for v4 straight away as it seemed pretty stable anyway.
|
||
|
|
||
|
Now, I began with a very simple IPSC2-only setup in the first place. I then made
|
||
|
a backup and changed all settings to be used for Brandmeister only. Another backup
|
||
|
of the Brandmeister setup and I moved on to using DMRGateway.
|
||
|
|
||
|
It was a bit tricky at the beginning, because I was not used to the configuration
|
||
|
of such devices in any kind. After a few hours of research and testing I finally
|
||
|
got the DMR-GW setup ready.
|
||
|
|
||
|
## The first thing I did on Pi-Star
|
||
|
|
||
|
Setup the keyboard and language on the console. I mostly type in german and I
|
||
|
know most of the characters on an _en_US_ or _en_UK_ keyboard, but I still prefer
|
||
|
a german layout :wink:
|
||
|
|
||
|
Before we start, we have to make the filesystem writable. Do this with the
|
||
|
command alias `rpi-rw` either in a console or in the SSH-Access tab on the
|
||
|
dashboard (<kbd>Configuration</kbd> → <kbd>Expert</kbd> → <kbd>SSH Access</kbd>). The login details for SSH are
|
||
|
the same as on the dashboard.
|
||
|
|
||
|
Now you got the filesystem writable, so start the keyboard configuration:
|
||
|
|
||
|
~~~console
|
||
|
$ sudo dpkg-reconfigure keyboard-configuration
|
||
|
~~~
|
||
|
|
||
|
I then usually go for the 105-key PC one. Choose German (Austria) and go for the
|
||
|
default keyboard layout with no compose key---except you have other needs.
|
||
|
|
||
|
Then start generating the locales for your environment.
|
||
|
|
||
|
~~~console
|
||
|
$ sudo dpkg-reconfigure locales
|
||
|
~~~
|
||
|
|
||
|
Choose the locales that you need or want. My setup looks like this:
|
||
|
|
||
|
{{< figure caption="If you don't know what to choose, go with your language and the UTF-8 version." src="00_locales.png" alt="locales setup" >}}
|
||
|
|
||
|
I also create my ssh-keys for passwordless login as well as some comfortable
|
||
|
aliases. I usually use the ZSH shell, but on Pi-Star I just leave it as it was.
|
||
|
I add my aliases to `.bash_aliases`---this is the file that gets sourced via
|
||
|
`.bashrc` in the default pi-star setup.
|
||
|
|
||
|
Quick and dirty---my current `.bash_aliases` on my Pi-Stars looks like this:
|
||
|
|
||
|
~~~bash
|
||
|
# File: "~/.bash_aliases"
|
||
|
DATE=$(date +%Y-%m-%d)
|
||
|
PI=/var/log/pi-star/
|
||
|
DMRGW=${PI}DMRGateway-${DATE}.log
|
||
|
MMDVM=${PI}MMDVM-${DATE}.log
|
||
|
DAPNET=${PI}DAPNETGateway-${DATE}.log
|
||
|
|
||
|
[ -x /usr/bin/pydf ] && alias df='/usr/bin/pydf' || alias df='df -h'
|
||
|
|
||
|
alias digg='dig +noall +answer'
|
||
|
alias dt='dmesg | tail'
|
||
|
|
||
|
alias mm="multitail ${DMRGW} ${MMDVM}"
|
||
|
alias mmdmr="multitail ${DMRGW}"
|
||
|
alias mmdv="multitail ${MMDVM}"
|
||
|
alias mmdap="multitail ${DAPNET}"
|
||
|
|
||
|
# Screen and Tmux alike
|
||
|
alias sc='screen -DR Screen_A'
|
||
|
alias tm='tmux -u new-session -A -s Tmux_A'
|
||
|
|
||
|
# ls
|
||
|
alias l='ls -1A'
|
||
|
alias la='ls -lah'
|
||
|
alias lc='lt -c'
|
||
|
alias lk='ll -Sr'
|
||
|
alias ll='ls -lh'
|
||
|
alias lad='ls -lah|more'
|
||
|
alias lld='ls -lh|more'
|
||
|
alias lm='la | "$PAGER"'
|
||
|
alias ln='nocorrect ln -i'
|
||
|
alias lni='nocorrect ln -i'
|
||
|
alias locate='noglob locate'
|
||
|
alias lr='ll -R'
|
||
|
alias ls='ls --group-directories-first --color=auto'
|
||
|
alias lt='ll -tr'
|
||
|
alias lu='lt -u'
|
||
|
alias lx='ll -XB'
|
||
|
|
||
|
alias ducks='du -cks * | sort -rn | head'
|
||
|
|
||
|
alias confcat="sed -e 's/#.*//;/^\s*$/d' "$@""
|
||
|
~~~
|
||
|
|
||
|
### Optional
|
||
|
|
||
|
More software that comes in handy from time to time.
|
||
|
|
||
|
~~~console
|
||
|
$ sudo apt-get install htop lsof nmap arping vim pydf multitail git ldnsutils
|
||
|
~~~
|
||
|
|
||
|
{{< figure caption="`pydf` in combination with the alias from above displays a short and colored output when you list your diskspace with `df`" src="11_df_output.png" alt="an example output of `pf`" >}}
|
||
|
|
||
|
#### If you intent to install and use vnstat, you need to set it up
|
||
|
|
||
|
The installation of vnstat is useful, if you let your pi-star run 24/7 as the
|
||
|
database gets cleared on every reboot!
|
||
|
|
||
|
~~~console
|
||
|
$ sudo apt-get install vnstat
|
||
|
~~~
|
||
|
|
||
|
Add the following line to your `/etc/fstab` file. I assume that you still
|
||
|
have the filesystem writable---if not, run `rpi-rw`.
|
||
|
|
||
|
~~~plain
|
||
|
# file: "/etc/fstab"
|
||
|
tmpfs /var/lib/vnstat tmpfs nodev,noatime,nosuid,mode=1777,size=4m 0 0
|
||
|
~~~
|
||
|
|
||
|
If you run `cat /etc/fstab` it should look similar to this:
|
||
|
|
||
|
~~~plain
|
||
|
# file: "/etc/fstab"
|
||
|
#File System Mountpoint Type Options Dump Pass
|
||
|
proc /proc proc defaults 0 0
|
||
|
/dev/mmcblk0p1 /boot vfat defaults,ro 0 2
|
||
|
/dev/mmcblk0p2 / ext4 defaults,noatime,ro 0 1
|
||
|
tmpfs /run tmpfs nodev,noatime,nosuid,mode=1777,size=32m 0 0
|
||
|
tmpfs /run/lock tmpfs nodev,noatime,nosuid,mode=1777,size=5m 0 0
|
||
|
tmpfs /sys/fs/cgroup tmpfs nodev,noatime,nosuid,mode=1755,size=32m 0 0
|
||
|
tmpfs /tmp tmpfs nodev,noatime,nosuid,mode=1777,size=64m 0 0
|
||
|
tmpfs /var/log tmpfs nodev,noatime,nosuid,mode=0755,size=64m 0 0
|
||
|
tmpfs /var/lib/sudo tmpfs nodev,noatime,nosuid,mode=1777,size=16k 0 0
|
||
|
tmpfs /var/lib/dhcpcd5 tmpfs nodev,noatime,nosuid,mode=1777,size=32k 0 0
|
||
|
tmpfs /var/lib/vnstat tmpfs nodev,noatime,nosuid,mode=1777,size=4m 0 0
|
||
|
tmpfs /var/lib/logrotate tmpfs nodev,noatime,nosuid,mode=0755,size=16k 0 0
|
||
|
tmpfs /var/lib/nginx/body tmpfs nodev,noatime,nosuid,mode=1700,size=1m 0 0
|
||
|
tmpfs /var/lib/php/sessions tmpfs nodev,noatime,nosuid,mode=0777,size=64k 0 0
|
||
|
tmpfs /var/lib/samba/private tmpfs nodev,noatime,nosuid,mode=0755,size=4m 0 0
|
||
|
tmpfs /var/cache/samba tmpfs nodev,noatime,nosuid,mode=0755,size=1m 0 0
|
||
|
tmpfs /var/spool/exim4/db tmpfs nodev,noatime,nosuid,mode=0750,size=64k 0 0
|
||
|
tmpfs /var/spool/exim4/input tmpfs nodev,noatime,nosuid,mode=0750,size=64k 0 0
|
||
|
tmpfs /var/spool/exim4/msglog tmpfs nodev,noatime,nosuid,mode=0750,size=64k 0 0
|
||
|
~~~
|
||
|
|
||
|
Normally, vnstat creates `/var/lib/vnstat` and starts the vnstat service. We now
|
||
|
delete the freshly created databases (they are nearly empty anyway) and
|
||
|
re-create them when we have mounted the ramdisk.
|
||
|
|
||
|
~~~console
|
||
|
$ sudo rm /var/lib/vnstat/*
|
||
|
$ sudo mount -a
|
||
|
$ sudo systemctl restart vnstatd
|
||
|
~~~
|
||
|
|
||
|
Now run `vnstat` to display network interface statistics. It's output could
|
||
|
look similar to this one:
|
||
|
|
||
|
~~~plain
|
||
|
rx / tx / total / estimated
|
||
|
eth0: Not enough data available yet.
|
||
|
wlan0:
|
||
|
Jän '20 39,23 MiB / 39,10 MiB / 78,33 MiB / 106,00 MiB
|
||
|
today 39,23 MiB / 39,10 MiB / 78,33 MiB / 138 MiB
|
||
|
~~~
|
||
|
|
||
|
It takes time to gather enough information. Get back to this in a few days and
|
||
|
you will get more useful information. Because we save the databases in the
|
||
|
ramdisk, we will save the sdcards lifetime, but also we loose the statistics
|
||
|
when we reboot the raspberry pi.
|
||
|
|
||
|
{{< alert triangle-exclamation >}}
|
||
|
If you want to save them forever, you won't have
|
||
|
to create a ramdisk like above, but **you also have to make sure that
|
||
|
PiStar does not mount the volumes read-only!**
|
||
|
{{< /alert >}}
|
||
|
|
||
|
## Make the filesystem read-only again
|
||
|
|
||
|
Once you finished your setup, make the filesystem read-only again.
|
||
|
|
||
|
~~~console
|
||
|
$ rpi-ro
|
||
|
~~~
|
||
|
|
||
|
## Start setting up your Pi-Star MMDVM
|
||
|
|
||
|
{{< alert lightbulb >}}
|
||
|
The MMDVM services restart every time you hit
|
||
|
the **Apply Changes** button. So when hitting the button wait a few seconds
|
||
|
-- this takes some time to complete ;-)
|
||
|
{{< /alert >}}
|
||
|
|
||
|
### Talkgroup setup
|
||
|
|
||
|
This setup uses some talk groups from IPSC2/DMR+ and the rest from Brandmeister.
|
||
|
Specifically these talkgroups are:
|
||
|
|
||
|
* Timeslot 1
|
||
|
* TG 1 - TG 7
|
||
|
* TG 10 - TG 89
|
||
|
* TG 100 - TG 199
|
||
|
* Timeslot 2
|
||
|
* DMR+ reflectors with TG 9
|
||
|
* TG 232
|
||
|
* TG 8181 - TG 8189
|
||
|
* TG 8191 - TG 8199
|
||
|
* GPS data sent as private calls to 9057
|
||
|
|
||
|
All other talkgroups are routed to the Brandmeister network. Private calls are
|
||
|
also routed to Brandmeister.
|
||
|
|
||
|
### Simplex or Duplex?
|
||
|
|
||
|
This is where we actually start. At the first start either connect your
|
||
|
Raspberry Pi to an ethernet port or look out for a WiFi network called
|
||
|
Pi-Star Setup.
|
||
|
|
||
|
|
||
|
{{< figure src="01_control-software.png" alt="Control Software configuration" caption="Make sure to use Duplex Repeater in order to use different RX and TX frequencies." >}}
|
||
|
|
||
|
### MMDVMHost
|
||
|
|
||
|
{{< figure src="02_mmdvmhost.png" alt="MMDVMHost configuration" caption="Choose the modes that you want to use. I only use DMR and POCSAG for now." >}}
|
||
|
|
||
|
### General information about the station
|
||
|
|
||
|
{{< figure src="03_general.png" alt="general information" caption="Put in your own callsign and your DMR-ID---~~register your callsign~~ if you don't have one yet. Select appropriate frequencies and make sure they are at least a few MHz apart from each other. I used the common shift that we use in Austria on 70cm (-7,6 MHz)." >}}
|
||
|
|
||
|
{{< alert triangle-exclamation >}}
|
||
|
**Update:** The URL above is outdated. `ham-digital.org` was the european
|
||
|
version of `radioid.net`---those two were merged together and you can apply
|
||
|
for your personal DMR-ID
|
||
|
[over here at radioid.net](https://www.radioid.net/account/register#!).
|
||
|
{{< /alert >}}
|
||
|
|
||
|
### DMR configuration
|
||
|
|
||
|
{{< alert circle-info >}}
|
||
|
Now, setup IPSC2 only or Brandmeister only if you are unsure about the
|
||
|
DMRGateway setup. Make yourself comfortable with both of the systems but only
|
||
|
one system at a time and move over to DMRGateway when you feel confident enough.
|
||
|
The rewrite rules can be sometimes a bit tricky to set up.
|
||
|
{{< /alert >}}
|
||
|
|
||
|
{{< figure src="04_dmrconfig.png" alt="DMR configuration" caption="" >}}
|
||
|
|
||
|
Choose the Brandmeister master server you want to connect to. Also set a
|
||
|
password in [Brandmeisters SelfCare](https://brandmeister.network/?page=selfcare)
|
||
|
for Hotspot Security. That makes sure, that only you can add a Hotspot with your
|
||
|
callsign. Also select the IPSC2 server of your choice and set the wanted
|
||
|
options. I go with these for now:
|
||
|
|
||
|
~~~ini
|
||
|
StartRef=4197;RelinkTime=15;UserLink=1;TS2_1=232;TS2_2=8189;
|
||
|
~~~
|
||
|
|
||
|
In this scenario I want to statically link the two talk groups `232` and `8189`
|
||
|
on timeslot 2. I also allow `UserLink` which allows users to link to different
|
||
|
reflectors. The default reflector is `4197` and this gets relinked if nobody
|
||
|
presses PTT for 15 minutes. If you need talkgroups from timeslot 1 you would
|
||
|
probably write something like this:
|
||
|
|
||
|
~~~ini
|
||
|
StartRef=4197;RelinkTime=15;UserLink=1;TS1_1=20;TS2_1=232;TS2_2=8189;
|
||
|
~~~
|
||
|
|
||
|
That will also include talk group 20 from timeslot 1. I thought you can
|
||
|
statically link up to 5 talkgroups, but I'm not sure if this information is up
|
||
|
to date (I haven't tried this yet, but you can do that on your own very easy).
|
||
|
|
||
|
{{< alert circle-info >}}
|
||
|
**Update**: Actually, you can link **9 talkgroups on every slot**.
|
||
|
{{< /alert >}}
|
||
|
|
||
|
### Move over to the expert configuration tab
|
||
|
|
||
|
#### Quick edit
|
||
|
|
||
|
Whenever you feel comfortable with DMRGateway, head over to the expert settings
|
||
|
page and select MMDVMHost. I've adjusted the Jitter settings "a bit", although
|
||
|
this should run smooth with a setting of `1000` too---I'm still a bit of
|
||
|
experimenting with this. I read a lot of times that `1000` should be fine with
|
||
|
slower networks---but you should definitely experiment yourself a bit with this
|
||
|
setting.
|
||
|
|
||
|
{{< alert circle-info >}}
|
||
|
**Update**: As of today, I'd probably set _Jitter_ to something around 0-300.
|
||
|
{{< /alert >}}
|
||
|
|
||
|
{{< figure src="05_exp_mmdvmhost-dmrnetwork.png" alt="DMR jitter configuration" caption="" >}}
|
||
|
|
||
|
Now let's have a look at the DMR Gateway configuration. Navigate to the DMR GW
|
||
|
expert settings. Choose <kbd>DMR GW</kbd> of the upper line (Quick Edit).
|
||
|
|
||
|
{{< figure src="06_exp_dmrgw-dmrnetwork1.png" alt="DMR Network 1 configuration" caption="" >}}
|
||
|
|
||
|
{{< figure src="07_exp_dmrgw-dmrnetwork2.png" alt="DMR Network 2 configuration" caption="" >}}
|
||
|
|
||
|
Don't forget to save the settings.
|
||
|
|
||
|
#### Full edit
|
||
|
|
||
|
When you have saved that, go to the expert settings again and choose again
|
||
|
**DMR GW**---**but this time, choose the one from the lower line (Full Edit)**.
|
||
|
|
||
|
This configuration file is split into paragraphs. Look out for the
|
||
|
`[DMR Network 1]` block.
|
||
|
|
||
|
~~~ini
|
||
|
[DMR Network 1]
|
||
|
Enabled=1
|
||
|
Address=178.238.234.72
|
||
|
Port=62031
|
||
|
TGRewrite0=2,8,2,8,1
|
||
|
PCRewrite0=2,84000,2,84000,1001
|
||
|
TypeRewrite0=2,9990,2,9990
|
||
|
SrcRewrite0=2,84000,2,8,1001
|
||
|
PassAllPC0=1
|
||
|
PassAllTG0=1
|
||
|
PassAllPC1=2
|
||
|
PassAllTG1=2
|
||
|
Password="***"
|
||
|
Debug=0
|
||
|
Id=232718001
|
||
|
Name=BM_Germany_2622
|
||
|
~~~
|
||
|
|
||
|
Our next block is called `[DMR Network 2]`.
|
||
|
|
||
|
~~~ini
|
||
|
[DMR Network 2]
|
||
|
Enabled=1
|
||
|
Address=89.185.97.34
|
||
|
Port=55555
|
||
|
TGRewrite0=1,1,1,1,7
|
||
|
TGRewrite1=1,10,1,10,80
|
||
|
TGRewrite2=1,100,1,100,100
|
||
|
TGRewrite3=2,232,2,232,1
|
||
|
TGRewrite4=2,8181,2,8181,9
|
||
|
TGRewrite5=2,8191,2,8191,9
|
||
|
TGRewrite6=2,9,2,9,1
|
||
|
PCRewrite0=1,9055,1,9055,6
|
||
|
PCRewrite1=2,9055,2,9055,6
|
||
|
PCRewrite2=2,4000,2,4000,1001
|
||
|
Password="PASSWORD"
|
||
|
Debug=0
|
||
|
Id=2327180
|
||
|
Name=DMR+_IPSC2-OE-DMO
|
||
|
Options="StartRef=4197;RelinkTime=15;UserLink=1;TS2_1=232;TS2_2=8189;"
|
||
|
~~~
|
||
|
|
||
|
[Read along here](https://github.com/g4klx/DMRGateway/wiki/Rewrite-Rules)
|
||
|
if you want to know more about the different rewrite rules.
|
||
|
|
||
|
### POCSAG configuration
|
||
|
|
||
|
{{< alert circle-info >}}
|
||
|
The following frequency is used in **Austria**. Please refer to your local
|
||
|
amateur radio club for information about the used frequencies in your country.
|
||
|
You may use 439.987.500 in Germany.
|
||
|
[Look here](https://hampager.de/dokuwiki/doku.php?id=dapnetfrq) for more frequencies.
|
||
|
{{< /alert >}}
|
||
|
|
||
|
{{< figure src="10_pocsag.png" alt="POCSAG configuration" caption="" >}}
|
||
|
|
||
|
Read more on <https://hampager.de> and on <https://support.hampager.de>. You
|
||
|
need to create an account to bind your callsign to a
|
||
|
<abbr title="Radio Identificaton Code">RIC</abbr>. You also need a second account
|
||
|
for your transmitter---that is when you get your AuthKey.
|
||
|
|
||
|
## That's it---images and videos
|
||
|
|
||
|
I suppose this gets easier from time to time---depending on how often I have to
|
||
|
install this stuff on a Pi :grinning:
|
||
|
|
||
|
### My Raspberry Pi 3 B
|
||
|
|
||
|
{{< figure src="08_raspberrypi.jpg" alt="my raspberry pi 3" caption="" >}}
|
||
|
|
||
|
### And this is the admin page of the dashboard
|
||
|
|
||
|
If you want to use the Brandmeister Manager you need to set the api key. Go to
|
||
|
expert settings and choose <kbd>BM API</kbd> in the lower line. It is somewhat
|
||
|
in the middle of the page. To get an api key visit the
|
||
|
[Brandmeister API Keys page](https://brandmeister.network/?page=profile-api).
|
||
|
|
||
|
{{< figure src="09_dashboard-admin.png" alt="Dashboard - Admin view" caption="" >}}
|
||
|
|
||
|
There are some more handy links for Brandmeister:
|
||
|
|
||
|
* [list connected peers to the Austrian BM_2321 server][list]
|
||
|
* [last heard on this specific master server][lh]
|
||
|
|
||
|
[list]: http://94.199.173.125/status/list.htm
|
||
|
[lh]: https://brandmeister.network/?page=lh&Master=2321
|
||
|
|
||
|
### PiStar Remote
|
||
|
|
||
|
Restart the PiStar services with RF power from your HT.
|
||
|
|
||
|
{{< youtube id="lTh1p-eVGxQ" >}}
|
||
|
|
||
|
Or reboot the whole Raspberry Pi.
|
||
|
|
||
|
{{< youtube id="hFyEL6kfRco" >}}
|
||
|
|
||
|
To make use of PiStar Remote you need to set it up. Go to *Configuration ->
|
||
|
Expert* and choose *PiStar Remote* (in the Full Edit line).
|
||
|
|
||
|
~~~ini
|
||
|
[enable]
|
||
|
# Is the Pi-Star Remote Enabled? (true|false)
|
||
|
enabled=true
|
||
|
...
|
||
|
|
||
|
[dmr]
|
||
|
# TG commands
|
||
|
#svckill=8999999
|
||
|
svcrestart=8999998
|
||
|
reboot=8999997
|
||
|
#shutdown=8999996
|
||
|
#hostfiles=9999995
|
||
|
~~~
|
||
|
|
||
|
## Final words
|
||
|
|
||
|
I think this whole article is a *work in progress*---I just always find things
|
||
|
that I do different now and I cannot always change these things in this article
|
||
|
too; some aren't even wrong, they just fit better.
|
||
|
|
||
|
I think this page is a good thing to look back to start a fresh configuration --
|
||
|
even if I have made different configuration backups from within PiStar.
|
||
|
Addidionally I made one-to-one copies of the used sdcards---just in case ;-)
|
||
|
|
||
|
Initially I wrote this for myself, but I think this might be helpful for others
|
||
|
too so enjoy the content and feel free to [mail me](/about/#contact) if you
|
||
|
find errors or have to add some notes on that topic.
|