@ -0,0 +1,15 @@
|
||||
# EditorConfig is awesome: https://EditorConfig.org
|
||||
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
@ -0,0 +1,3 @@
|
||||
.hugo_build.lock
|
||||
resources
|
||||
public
|
@ -0,0 +1,6 @@
|
||||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
date: {{ .Date }}
|
||||
draft: true
|
||||
---
|
||||
|
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 1.6 KiB |
@ -0,0 +1,20 @@
|
||||
# -- Site Configuration --
|
||||
# Refer to the theme docs for more details about each of these parameters.
|
||||
# https://jpanther.github.io/congo/docs/getting-started/
|
||||
|
||||
# baseURL = "https://your_domain.com/"
|
||||
defaultContentLanguage = "en"
|
||||
|
||||
enableRobotsTXT = true
|
||||
paginate = 10
|
||||
summaryLength = 0
|
||||
|
||||
# [permalinks]
|
||||
# #post = '/:sections[last]/:year-:month-:day-:slug/'
|
||||
# post = '/:sections[last]/:year-:month-:day-:slug/'
|
||||
# # page = "/:slug/"
|
||||
# # categories = "/:section/:slug/"
|
||||
# categories = "/:slug/"
|
||||
|
||||
[outputs]
|
||||
home = ["HTML", "RSS", "JSON"]
|
@ -0,0 +1,13 @@
|
||||
# -- Markup --
|
||||
# These settings are required for the theme to function.
|
||||
|
||||
[goldmark]
|
||||
[goldmark.renderer]
|
||||
unsafe = true
|
||||
|
||||
[highlight]
|
||||
noClasses = false
|
||||
|
||||
[tableOfContents]
|
||||
startLevel = 2
|
||||
endLevel = 4
|
@ -0,0 +1,62 @@
|
||||
# -- Main Menu --
|
||||
# The main menu is displayed in the header at the top of the page.
|
||||
# Acceptable parameters are name, pageRef, page, url, title, weight.
|
||||
#
|
||||
# The simplest menu configuration is to provide:
|
||||
# name = The name to be displayed for this menu link
|
||||
# pageRef = The identifier of the page or section to link to
|
||||
#
|
||||
# By default the menu is ordered alphabetically. This can be
|
||||
# overridden by providing a weight value. The menu will then be
|
||||
# ordered by weight from lowest to highest.
|
||||
|
||||
[[main]]
|
||||
name = "Blog"
|
||||
pageRef = "posts"
|
||||
weight = 10
|
||||
|
||||
[[main]]
|
||||
name = "About"
|
||||
pageRef = "about"
|
||||
weight = 20
|
||||
|
||||
[[main]]
|
||||
name = "Equipment"
|
||||
pageRef = "equipment"
|
||||
weight = 30
|
||||
|
||||
# [[main]]
|
||||
# name = "Categories"
|
||||
# pageRef = "categories"
|
||||
# weight = 40
|
||||
|
||||
[[main]]
|
||||
name = "Tags"
|
||||
pageRef = "tags"
|
||||
weight = 50
|
||||
|
||||
|
||||
|
||||
# -- Footer Menu --
|
||||
# The footer menu is displayed at the bottom of the page, just before
|
||||
# the copyright notice. Configure as per the main menu above.
|
||||
|
||||
# [[footer]]
|
||||
# name = "Tags"
|
||||
# pageRef = "tags"
|
||||
# weight = 10
|
||||
|
||||
# [[footer]]
|
||||
# name = "Categories"
|
||||
# pageRef = "categories"
|
||||
# weight = 10
|
||||
|
||||
[[footer]]
|
||||
name = "Weather station"
|
||||
url = "https://wx.oe7drt.com"
|
||||
weight = 10
|
||||
|
||||
[[footer]]
|
||||
name = "Links"
|
||||
pageRef = "links"
|
||||
weight = 20
|
@ -0,0 +1,6 @@
|
||||
[[imports]]
|
||||
path = "github.com/jpanther/congo/v2"
|
||||
|
||||
[hugoVersion]
|
||||
extended = false
|
||||
min = "0.87.0"
|
@ -0,0 +1,75 @@
|
||||
# -- Theme Options --
|
||||
# These options control how the theme functions and allow you to
|
||||
# customise the display of your website.
|
||||
#
|
||||
# Refer to the theme docs for more details about each of these parameters.
|
||||
# https://jpanther.github.io/congo/docs/configuration/#theme-parameters
|
||||
|
||||
colorScheme = "congo"
|
||||
defaultAppearance = "dark" # valid options: light or dark
|
||||
autoSwitchAppearance = true
|
||||
|
||||
enableSearch = true
|
||||
enableCodeCopy = true
|
||||
|
||||
# mainSections = ["section1", "section2"]
|
||||
# robots = ""
|
||||
|
||||
[header]
|
||||
layout = "hybrid" # valid options: basic, hamburger, hybrid, custom
|
||||
# logo = "img/logo.jpg"
|
||||
showTitle = true
|
||||
|
||||
[footer]
|
||||
showCopyright = true
|
||||
showThemeAttribution = true
|
||||
showAppearanceSwitcher = false
|
||||
showScrollToTop = true
|
||||
|
||||
[homepage]
|
||||
layout = "profile" # valid options: page, profile, custom
|
||||
showRecent = false
|
||||
|
||||
[article]
|
||||
showDate = true
|
||||
showDateUpdated = true
|
||||
showAuthor = true
|
||||
showBreadcrumbs = false
|
||||
showDraftLabel = true
|
||||
showEdit = false
|
||||
editURL = "https://github.com/oe7drt/oe7drt-website/"
|
||||
editAppendPath = true
|
||||
showHeadingAnchors = true
|
||||
showPagination = true
|
||||
invertPagination = false
|
||||
showReadingTime = true
|
||||
showTableOfContents = true
|
||||
showTaxonomies = true
|
||||
showWordCount = true
|
||||
showComments = false
|
||||
# sharingLinks = ["facebook", "twitter", "pinterest", "reddit", "linkedin", "email"]
|
||||
sharingLinks = ["facebook", "twitter", "pinterest", "reddit", "linkedin", "email"]
|
||||
|
||||
[list]
|
||||
showBreadcrumbs = false
|
||||
showSummary = true
|
||||
showTableOfContents = false
|
||||
showTaxonomies = true
|
||||
groupByYear = true
|
||||
paginationWidth = 1
|
||||
|
||||
[sitemap]
|
||||
excludedKinds = ["taxonomy", "term"]
|
||||
|
||||
[taxonomy]
|
||||
showTermCount = true
|
||||
|
||||
[fathomAnalytics]
|
||||
# site = "ABC12345"
|
||||
# domain = "llama.yoursite.com"
|
||||
|
||||
[verification]
|
||||
# google = ""
|
||||
# bing = ""
|
||||
# pinterest = ""
|
||||
# yandex = ""
|
@ -0,0 +1,12 @@
|
||||
---
|
||||
title: "Welcome to my personal website! :tada:"
|
||||
description: "This is a demo of the Congo theme for Hugo."
|
||||
---
|
||||
|
||||
{{< lead >}}
|
||||
amateur radio station OE7DRT, dominic
|
||||
{{< /lead >}}
|
||||
|
||||
welcome all!
|
||||
|
||||
good to be herea gain...
|
After Width: | Height: | Size: 246 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 379 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 165 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 296 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 433 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 155 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 119 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 140 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 278 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 2.1 KiB |
@ -0,0 +1,9 @@
|
||||
+++
|
||||
title = "Equipment"
|
||||
groupByYear = false
|
||||
showDate = false
|
||||
showDateUpdated = false
|
||||
showReadingTime = false
|
||||
showWordCount = false
|
||||
|
||||
+++
|
@ -0,0 +1,18 @@
|
||||
+++
|
||||
title = "Accessories"
|
||||
summary = """like tuners, bags, masts, coax cables etc..."""
|
||||
date = 2019-11-01
|
||||
tags = ["accessory", "portable", "tuner"]
|
||||
|
||||
showDate = false
|
||||
showDateUpdated = false
|
||||
showReadingTime = false
|
||||
showBreadcrumbs = true
|
||||
showPagination = false
|
||||
showWordCount = false
|
||||
|
||||
weight = 40
|
||||
|
||||
+++
|
||||
|
||||
test
|
@ -0,0 +1,17 @@
|
||||
+++
|
||||
title = "Antennas"
|
||||
summary = """Antenna"""
|
||||
date = 2019-11-01
|
||||
tags = ["antenna", "portable", "chameleon", "sotabeams", "", "",]
|
||||
showDate = false
|
||||
showDateUpdated = false
|
||||
showReadingTime = false
|
||||
showBreadcrumbs = true
|
||||
showPagination = false
|
||||
showWordCount = false
|
||||
|
||||
weight = 30
|
||||
|
||||
+++
|
||||
|
||||
test
|
@ -0,0 +1,18 @@
|
||||
+++
|
||||
title = "Handhelds"
|
||||
summary = """Handheld radios"""
|
||||
date = 2019-11-01
|
||||
tags = ["handheld", "portable", "icom", "yaesu", "radioddity", "wouxon",
|
||||
"anytone", "hytera"]
|
||||
showDate = false
|
||||
showDateUpdated = false
|
||||
showReadingTime = false
|
||||
showBreadcrumbs = true
|
||||
showPagination = false
|
||||
showWordCount = false
|
||||
|
||||
weight = 20
|
||||
|
||||
+++
|
||||
|
||||
test
|
@ -0,0 +1,10 @@
|
||||
---
|
||||
title: Anytone D878UV+
|
||||
date: 2022-02-26T10:41:54+01:00
|
||||
showBreadcrumbs: true
|
||||
|
||||
---
|
||||
|
||||
The first DMR radio of mine.
|
||||
|
||||
http://anytone.net/pro_info93.html
|
After Width: | Height: | Size: 69 KiB |
@ -0,0 +1,109 @@
|
||||
---
|
||||
title: Icom ID-52
|
||||
summary: >
|
||||
A really awesome handheld radio---and it does D-STAR as a bonus.
|
||||
Check it out---it's cool!
|
||||
date: 2021-12-23T14:20:47+01:00
|
||||
showBreadcrumbs: true
|
||||
|
||||
---
|
||||
|
||||
[Product page](https://www.icomjapan.com/lineup/products/ID-52E/)
|
||||
|
||||
This is actually my number one handheld radio. I find it very intuitive to use
|
||||
and also the audio is quite good and the speaker is also one of the louder ones.
|
||||
I haven't much used this on digital yet but I heard people saying it to be ok
|
||||
on digital mode (D-STAR).
|
||||
|
||||
## Easy to use T-CALL and SQL
|
||||
|
||||
### T-CALL
|
||||
|
||||
Right away: there are two ways to open a repeater with a 1750Hz tone.
|
||||
|
||||
1. Push _PTT_ like you would perform a double-click with your computer mouse
|
||||
and hold _PTT_ on the second "click".
|
||||
2. Open _MENU >> SET >> DTMF/T-CALL >> DTMF Memory_ and select _T-CALL_ with _OK_
|
||||
key. Go back to standby screen and press _PTT_. Now additionally press the
|
||||
_SQL_ button.
|
||||
|
||||
### SQL
|
||||
|
||||
In standby screen this button is momentary to open the squelch on the currently
|
||||
used frequency (simplex). If an offset is set, it will open the squelch on the
|
||||
transmitting frequency (so you might hear the other OM directly).
|
||||
|
||||
Press _SQL_ and move the main dial for one click, the actual squelch setting
|
||||
appears on the bottom of the screen (default: AUTO).
|
||||
|
||||
- Turn the dial further left to open up the squelch permanently---you can
|
||||
release the _SQL_ button in this case.
|
||||
- Turn the dial further right and you can choose a squelch level (1 to 9)
|
||||
|
||||
## Repeater list
|
||||
|
||||
I really like the repeater list, although it is not very accurate when you first
|
||||
download the list from the internet. But once you filled it with actual repeater
|
||||
data (including location data) the scan function will definitely profit from
|
||||
this---it should re-arrange the scan list for you while you're moving.
|
||||
|
||||
I'm still working on that one; this takes time (a lot of time) sitting on the
|
||||
computer and updating a nearly never ending list of false information _HI_.
|
||||
|
||||
## Recordings
|
||||
|
||||
### Memo recorder
|
||||
|
||||
Goto _MENU >> RECORD >> Voice Recorder >> Record_ and hit _PTT_ to start the
|
||||
recording. Press _PTT_ again to stop. You can fill this with memos or
|
||||
conversations (just let people know when you record them!). Change the Mic Gain
|
||||
with the _Quick button_. Find the recorded files on the SD-card in
|
||||
_ID-52 >> VoiceRec_.
|
||||
|
||||
### QSO Recorder
|
||||
|
||||
This lets you automatically record QSOs as they come in. Per default settings
|
||||
the record gets already started when you press _PTT_. In settings you choose to
|
||||
split files on mic change or not. Splitting files will add metadata to the files
|
||||
so you can re-view them (like GPS data, frequency, signal strength) on the radio.
|
||||
You can also download those files to your computer, find them on the SD-card in
|
||||
_ID-52 >> Voice_.
|
||||
|
||||
### QSO Logger
|
||||
|
||||
Similar to the one above, this records your QSO into a csv file. You find this
|
||||
data on the SD-card. Specifically in _ID-52 >> QsoLog_. Open them with your
|
||||
favourite text editor or any spreadsheet program. I got an example for this one
|
||||
right here:
|
||||
|
||||
![QsoLogger example](QsoLog-example.png)
|
||||
|
||||
### Rx Logger
|
||||
|
||||
This is quite the same as the Qso Logger, but I think this only logs received
|
||||
calls from D-STAR. You find those files on the SD-card within the folder
|
||||
_ID-52 >> RxLog_.
|
||||
|
||||
### Voice Tx
|
||||
|
||||
Files for this will be in _ID-52 >> VoiceTx_ on the SD-card. Set this up in
|
||||
_MENU >> VOICE_. That can be used for automated CQ-calls or similar. I haven't
|
||||
used this yet.
|
||||
|
||||
### DV Auto Reply
|
||||
|
||||
This should send your recorded clip automatically on incoming calls. Also this
|
||||
is something that I haven't used yet, but to make the list complete, you know.
|
||||
I have no idea where this is going to be saved.
|
||||
|
||||
## Pictures
|
||||
|
||||
The Icom ID-52 lets you receive and transmit pictures either on direct frequencies
|
||||
or on reflectors (both need to be digital, just to mention that). I also haven't
|
||||
used this either for now.
|
||||
|
||||
{{< alert >}}
|
||||
Unfinished post
|
||||
I'd like to add stuff, but time you know... I'd like to add some quotes from
|
||||
the manual as well.
|
||||
{{< /alert >}}
|
After Width: | Height: | Size: 8.5 KiB |
After Width: | Height: | Size: 36 KiB |
@ -0,0 +1,100 @@
|
||||
---
|
||||
title: Radioddity GD-77
|
||||
summary: >
|
||||
Consider the OpenGD77 firmware and you're all set with a very user friendly
|
||||
and customizable handheld radio.
|
||||
date: 2020-10-22T23:19:14+02:00
|
||||
showBreadcrumbs: true
|
||||
showReadingTime: false
|
||||
showWordCount: false
|
||||
|
||||
---
|
||||
|
||||
[Product page][1] — [OpenGD77 website][2]
|
||||
|
||||
[1]: https://www.radioddity.com/products/radioddity-gd-77-dmr-two-way-radio
|
||||
[2]: https://www.opengd77.com/downloads/
|
||||
|
||||
This is probably the first DMR capable radio that is made for amateur radio.
|
||||
Obviosly not per default, but thanks to OpenGD77 it is now suited for amateur
|
||||
radio usage.
|
||||
|
||||
## udev-Rules for Linux
|
||||
|
||||
~~~rb
|
||||
# USB rules for GD-77
|
||||
# Place this in /etc/udev/rules.d/ to let all users talk to the radios by USB.
|
||||
|
||||
#
|
||||
SUBSYSTEM=="usb", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0073", MODE="0666"
|
||||
|
||||
# HIDAPI/libusb
|
||||
SUBSYSTEM=="usb", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0073", MODE="0666"
|
||||
SUBSYSTEM=="usb", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0094", MODE="0666"
|
||||
|
||||
# HIDAPI/hidraw
|
||||
KERNEL=="hidraw*", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0073", MODE="0666"
|
||||
KERNEL=="hidraw*", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0094", MODE="0666"
|
||||
|
||||
# HIDAPI/hiddev
|
||||
## We need to unbind this device, otherwise LibUsb will fail to SetConfiguration() and ClaimInterface()
|
||||
# For Bootloader (usbhid)
|
||||
KERNEL=="hiddev*", ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0073", MODE="0666", RUN+="/bin/bash -c 'ID=$(IFS=/; read -a array <<< %p; echo ${array[-3]}); echo $ID > /sys/bus/usb/drivers/usbhid/unbind'"
|
||||
|
||||
# OpenGD77
|
||||
KERNEL=="ttyACM[0-9]*", SUBSYSTEM=="tty", ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0094", MODE="0666", GROUP="dialout", SYMLINK+="OpenGD77"
|
||||
~~~
|
||||
|
||||
If you want do reload udev with the new rules, run:
|
||||
|
||||
~~~console
|
||||
$ udevadm control --reload-rules && udevadm trigger
|
||||
~~~
|
||||
|
||||
## Original boot tone melody
|
||||
|
||||
The originally used boot-up melody. I'm not sure if it changed already, but this
|
||||
was on my GD-77 when I first installed the OpenGD77 firmware.
|
||||
|
||||
~~~plain
|
||||
38,6,0,2,38,2,0,2,38,6,0,2,38,2,0,2,38,6
|
||||
~~~
|
||||
|
||||
## My boot-up picture
|
||||
|
||||
| Normal display settings | Inverted display settings |
|
||||
| :--- | :--- |
|
||||
| ![OE7DRT Boot-up picture white](rendeer512_white.png) | ![OE7DRT Boot-up picture black (inverted)](rendeer512_black.png) |
|
||||
|
||||
## Importing DMR-IDs
|
||||
|
||||
Open _Extras >> Download callsign database_ and fetch the data that you want.
|
||||
|
||||
![Import menu](import-dmr-ids-menu.jpg)
|
||||
|
||||
Set the region to the desired <abbr title="Mobile Country Code">MCC</abbr> that
|
||||
you want to import. You can also use the inactivity filter that fetches only
|
||||
recently active DMR-IDs. Or you can import DMR-IDs from a file.
|
||||
|
||||
![Import dialog](import-dmr-ids.jpg)
|
||||
|
||||
I usually import them from a CSV-file. The file that I use contains all the
|
||||
austrian callsigns plus a few other callsigns, that I regularly see. So I need
|
||||
to import about 2000 callsigns.
|
||||
|
||||
If you don't have a proper file to start with use this one here. It contains
|
||||
these regions: `232, 262, 263, 264, 222, 228`.
|
||||
[Download](/files/dmrids_2021-12-12.csv.xz "26477 callsigns") (\~170KB)
|
||||
|
||||
Or: download your own set of DMR-IDs with the regions you want. You can also
|
||||
download only some federal states (like `2327,2328`) if you don't want all
|
||||
entries from `232`. [Read along here][3] for some instructions about this.
|
||||
|
||||
[3]: {{< ref 2020-11-16-create-your-own-dmrid-database-file >}}
|
||||
|
||||
## Band scope (Spectrum sweep scan)
|
||||
|
||||
I'm not sure when this feature was implemented, but OpenGD77 now supports
|
||||
an easy to use band scope on the GD-77.
|
||||
|
||||
Press and hold the hash key <kbd>#</kbd> when in VFO mode to enter this feature.
|
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 15 KiB |
@ -0,0 +1,89 @@
|
||||
---
|
||||
title: Yaesu FT-3D
|
||||
date: 2020-05-24T20:48:51+02:00
|
||||
showBreadcrumbs: true
|
||||
|
||||
---
|
||||
|
||||
C4FM as one of the easiest digital operating mode to set up. Enter your
|
||||
callsign and you're good to go.
|
||||
|
||||
https://www.yaesu.com/indexVS.cfm?cmd=DisplayProducts&ProdCatID=111&encProdID=84807B1262BFED6AC816544D94D310E3&DivisionID=65&isArchived=0
|
||||
|
||||
All in all, the FT-3D is a nice and handy radio.
|
||||
|
||||
## Keys and buttons
|
||||
|
||||
I like the arrangement of the `PTT` and the knob on the top is very usable.
|
||||
|
||||
## Easy to use T-CALL
|
||||
|
||||
One button below the `PTT` is the `MONI/T-CALL` button located, which you can
|
||||
either configure as a `MONITOR` button (opens both receiver at once) or as
|
||||
`T-CALL` button, which sends out a 1750Hz tone immediately.
|
||||
|
||||
### Opening SQL when you use T-CALL
|
||||
|
||||
When you configured your `MONI/T-CALL` button for `T-CALL`, you can open the
|
||||
squelch by pressing the `SQL` button (between `MONI/T-CALL` and `POWER` button)
|
||||
and then use the volume knob to reduce or increase the squelch level.
|
||||
|
||||
## Full APRS
|
||||
|
||||
But it cannot use [Voice Alert][va]. Nonetheless a device which can send and
|
||||
receive APRS packets is not seen very often on portable devices. Not even the
|
||||
new Icom ID-52 has APRS support.
|
||||
|
||||
[va]: http://www.aprs.org/VoiceAlert3.html
|
||||
|
||||
## Color screen
|
||||
|
||||
The screen is okay and you see instantly which band is active at the moment.
|
||||
Using the touch screen is very intuitive, although I personally prefer devices
|
||||
with no touch screen at all. I never had any problems with the coloring or
|
||||
the brightness at all, but YMMV.
|
||||
|
||||
## Transmit power
|
||||
|
||||
The FT-3D supports 4 power levels: LOW1 (0.3W), LOW2 (1W), LOW3 (2.5W) and
|
||||
HIGH (5W).
|
||||
|
||||
## Band scope
|
||||
|
||||
This is probably the first portable radio that I bought which had a band scope.
|
||||
The scope itself is quite usable, it let's you split the screen width into
|
||||
19, 39 or 79 bars of details. I usually switch between 39 and 79 bars to get
|
||||
the best results.
|
||||
|
||||
## Dual receive (D.RCV)
|
||||
|
||||
## Preset receiver memory channels (P.RCVR)
|
||||
|
||||
Change with `BAND` button between Weather broadcast (WX CH), international VHF
|
||||
marine radio (INTVHF) or international shortwave broadcast (SW) channels.
|
||||
|
||||
For shortwave listening (only AM, no SSB), a longer antenna may not be a bad
|
||||
idea.
|
||||
|
||||
## AF-DUAL receive function (A.DUAL)
|
||||
|
||||
This enables radio broadcast reception on the A band receiver. The radio
|
||||
reception is interrupted, when a signals is receiver on either A or B band
|
||||
receivers.
|
||||
|
||||
## Built-in GPS receiver
|
||||
|
||||
GPS is a handy function, but it drains the battery. You may also use pre-defined
|
||||
locations for APRS and save some battery life if you are stationary.
|
||||
|
||||
## Cross-band memory channels
|
||||
|
||||
The FT-3D lets you save memories that use 2m for receive but 70cm for transmit,
|
||||
for example. The repeater _OE7XZR_ (Zugspitze, Tyrol) is one of them. It sends
|
||||
on 145.57500 MHz but receives on 432.57500 MHz.
|
||||
|
||||
## Recordings
|
||||
|
||||
Although the recordings are sometimes quite buggy, I really appreciate this
|
||||
function on newer radios. No need to pull out your smartphone to get a recording
|
||||
on tape.
|
@ -0,0 +1,17 @@
|
||||
+++
|
||||
title = "Software"
|
||||
summary = """Software I use or tested"""
|
||||
date = 2019-11-01
|
||||
tags = ["software", "cqrlog", "n1mm", "log4om", "qlog", "klog"]
|
||||
showDate = false
|
||||
showDateUpdated = false
|
||||
showReadingTime = false
|
||||
showBreadcrumbs = true
|
||||
showPagination = false
|
||||
showWordCount = false
|
||||
|
||||
weight = 50
|
||||
|
||||
+++
|
||||
|
||||
test
|
@ -0,0 +1,16 @@
|
||||
+++
|
||||
title = "Transceivers"
|
||||
summary = """trans ceivers"""
|
||||
date = 2022-11-16T22:19:11+01:00
|
||||
tags = ["transceiver", "portable", "icom", "yaesu", "lab599"]
|
||||
|
||||
showDate = false
|
||||
showDateUpdated = false
|
||||
showReadingTime = false
|
||||
showBreadcrumbs = true
|
||||
showPagination = false
|
||||
showWordCount = false
|
||||
|
||||
weight = 10
|
||||
|
||||
+++
|
@ -0,0 +1,28 @@
|
||||
---
|
||||
title: Icom IC-7300
|
||||
date: 2022-02-20T14:20:47+01:00
|
||||
showBreadcrumbs: true
|
||||
|
||||
---
|
||||
|
||||
The first shortwave transceiver that I bought. I got told this has one of the best
|
||||
receivers and filter techniques on the beginner segment. Unfortunately this
|
||||
radio is a bit chunky and heavy to transport in a rucksack so I haven't really
|
||||
used it that much so far---I do not have a station set up at my QTH yet.
|
||||
|
||||
## Built-in soundcard and CAT control
|
||||
|
||||
The radio can be connected to a computer with one single USB cable which
|
||||
provides a virtual soundcard aswell as a CAT control interface. This makes
|
||||
operating digital modes dead easy.
|
||||
|
||||
## Big touch screen
|
||||
|
||||
Maybe the first thing that you might see on that radio is the big screen. It is
|
||||
clear and very easy to read; you can interact with your finger aswell.
|
||||
|
||||
## Twin filters
|
||||
|
||||
To separate a signal is also a very easy thing to do. Use the twin filters to
|
||||
narrow down the used bandwith. Long press the filter button to clear and reset
|
||||
those filters.
|
@ -0,0 +1,66 @@
|
||||
---
|
||||
title: Yaesu FT-891
|
||||
date: 2022-02-20T14:20:47+01:00
|
||||
lastmod: 2022-11-12T19:51:31+01:00
|
||||
showBreadcrumbs: true
|
||||
# showReadingTime: false
|
||||
# showWordCount: false
|
||||
|
||||
---
|
||||
|
||||
I got this because the IC-7300 was too chunky to be effectively transported
|
||||
within a rucksack. Also I feared scratches in its big display or even a broken
|
||||
display: so here is the Yaesu FT-891.
|
||||
|
||||
I bought the 891 back in 2020, so this is not usable on 60 meters (like the
|
||||
IC-7300).
|
||||
|
||||
## Excellent receiver
|
||||
|
||||
I think this radio is quite similar to the IC-7300 in its receiving quality.
|
||||
Lots of options in the function menues help you to concentrate on the actual
|
||||
voice you receive.
|
||||
|
||||
## Good filter capabilities
|
||||
|
||||
The filters are good enough to filter for a specific signal, mainly using
|
||||
_WIDTH_ and _SHIFT_ and sometimes _CONTOUR_ filters is mostly effective
|
||||
enough. The _<abbr title="Digital Noise Reduction">DNR</abbr>_ is also quite
|
||||
nice and works well, although I don't like the resulting voice that much. Way
|
||||
better works the autonotch filter (_<abbr title="Digital Noise Filter">DNF</abbr>_),
|
||||
which is an awesome feature to have.
|
||||
|
||||
## Record and transmit CQ calls
|
||||
|
||||
The FT-891 lets you record up to 5(??) or 3? different clips that you can later
|
||||
transmit by a button press. That might come in handy when you are contesting---
|
||||
can't refer to this much because I'm not contesting nor do I use this function
|
||||
so far.
|
||||
|
||||
## Good size
|
||||
|
||||
I like it's size when it's beeing still a 100 W transceiver. Nonetheless it
|
||||
drains the battery with 1 A when listening.
|
||||
|
||||
## Digital modes
|
||||
|
||||
I use the radio with a SignalinkUSB interface and I have to extend the bandwith
|
||||
manually with the _WIDTH_ setting from the function menue to have this set
|
||||
correctly. The setting from the main settings is **not applied** on digital
|
||||
modes. _Apparently Yaesu doesn't care about that bug._
|
||||
|
||||
## Tactical carrying system: 891escort ™
|
||||
|
||||
Made from aluminium the [891escort](https://portablezero.com/yaesu857D.html)
|
||||
adds a little weight but also protection to the radio, especially for the knobs
|
||||
on the front panel. The addidional strap mounts can be used to attach a sling
|
||||
to the radio, it could be easily carried now---not that I used that once, but
|
||||
it is there as a feature. My focus was the additional protection when I bought
|
||||
them. Now, a year later, I carry the radio inside a cloth bag without the escort
|
||||
just to save some more grams when hiking through the mountains and I can remove
|
||||
the detachable head of the unit to change different microphones/headsets. When
|
||||
using the carrying system I would need to remove the right frame before I could
|
||||
detach the units head.
|
||||
|
||||
Some people recommend using a short LAN cable to get the socket outside, but I
|
||||
haven't found a good one yet (and a short one).
|
@ -0,0 +1,16 @@
|
||||
+++
|
||||
title = "Links"
|
||||
summary = """Listing links of (hopefully) useful websites"""
|
||||
date = "2022-11-20T15:56:36+01:00"
|
||||
#lastmod = ""
|
||||
#categories = ["amateur-radio"]
|
||||
#tags = [""]
|
||||
showReadingTime = false
|
||||
showWordCount = false
|
||||
|
||||
+++
|
||||
|
||||
cool links here
|
||||
|
||||
* https://w0chp.net/w0chp-pistar-dash/
|
||||
* https://qrper.com/
|
@ -0,0 +1,120 @@
|
||||
---
|
||||
title: How to get an amateur radio license in Austria
|
||||
summary: >
|
||||
This is a short story from my life that explains how I came to my amateur
|
||||
radio license.
|
||||
date: 2020-01-02T17:01:26+01:00
|
||||
#categories: [index]
|
||||
tags: [life]
|
||||
|
||||
---
|
||||
|
||||
I'm not the casual ham radio operator that always wanted to operate his own
|
||||
ham radio station. I tried CB once but had to travel quite a bit to reach other
|
||||
stations (trucks on the highway for example). I've played with SDR before and
|
||||
tried a few things with GNUradio and gqrx but I never got deeper into this kind
|
||||
of things.
|
||||
|
||||
{{< alert circle-info >}}
|
||||
Just to be clear on this: This is not a tutorial, this is a short story from
|
||||
my life that explains how I came to my amateur radio license. This article was
|
||||
already published in german on an older website.
|
||||
{{< /alert >}}
|
||||
|
||||
In 2019 I decided to go on a [preparatory course](https://oe7.oevsv.at/veranstaltungen/veranstaltungen-00001/Amateurfunkkurs-in-Innsbruck/)
|
||||
at the local ham radio club.
|
||||
|
||||
A confirmation email was sent to me but the docs for the course had to be changed
|
||||
because changes have been made to austrian laws regarding ham radio and
|
||||
telecommunication in general. So scripts were not up to date at that moment.
|
||||
|
||||
## General information
|
||||
|
||||
The course was held in a room in a federal higher technical institute in
|
||||
Innsbruck.
|
||||
|
||||
We had to attend these blocks:
|
||||
|
||||
**1. block**
|
||||
- **Friday, September 27, (15:00 to 20:30)**
|
||||
introduction and law pt 1
|
||||
- **Saturday, September 28, (09:00 to 18:00)**
|
||||
law pt 2 and engineering pt 1
|
||||
|
||||
**2. block**
|
||||
- **Friday, October 4, (15:00 to 20:30)**
|
||||
operating technology pt 1
|
||||
- **Saturday, October 5, (09:00 to 18:00)**
|
||||
engineering pt 2
|
||||
|
||||
**3. block**
|
||||
- **Friday, October 11, (15:00 to 20:30)**
|
||||
engineering pt 3
|
||||
- **Saturday, October 12, (09:00 to 18:00)**
|
||||
engineering pt 4 and operating technology pt 2
|
||||
|
||||
**4. block---refreshing**
|
||||
- **Saturday, October 19, (13:00 to 17:00)**
|
||||
simulation of an exam (it was highly recommended to visit this training)
|
||||
|
||||
## Cost report
|
||||
|
||||
This represents the total amount of money I had to put into getting my license.
|
||||
|
||||
| date and time | value | description |
|
||||
| :--- | ---: | :--- |
|
||||
| 12.08.2019, Monday | 75.56 € | documentation scripts |
|
||||
| 27.09.2019, Friday | 90.00 € | the course itself |
|
||||
| 27.09.2019, Friday | 14.70 € | parking "Hentschelhof" |
|
||||
| 28.09.2019, Saturday | 48.15 € | refueling |
|
||||
| 28.09.2019, Saturday | 10 € | lunch |
|
||||
| 28.09.2019, Saturday | 14.40 € | parking "Wilten" |
|
||||
| 04.10.2019, Friday | 14.40 € | parking "Wilten" |
|
||||
| 05.10.2019, Saturday | 10 € | lunch |
|
||||
| 05.10.2019, Saturday | 18.20 € | parking "Altstadtgarage" |
|
||||
| 05.10.2019, Saturday | 53.11 € | refueling |
|
||||
| 11.10.2019, Friday | 14.70 € | parking "Altstadtgarage" |
|
||||
| 12.10.2019, Saturday | 7 € | lunch |
|
||||
| 12.10.2019, Saturday | 18.20 € | parking "Altstadtgarage" |
|
||||
| 12.10.2019, Saturday | 45.26 € | refueling |
|
||||
| 19.10.2019, Saturday | 13 € | parking "Markthalle" |
|
||||
| 19.10.2019, Saturday | 57.08 € | refueling |
|
||||
| 22.10.2019, Tuesday | 28.83 € | examination fee |
|
||||
| 22.10.2019, Tuesday | 14.30 € | examination certificate |
|
||||
| 22.10.2019, Tuesday | 3 € | parking "SOHO 2.0" |
|
||||
| | **549.89 €** | **total** |
|
||||
|
||||
In the end I paid **203.60€** for gasoline, **27€** for lunch on Saturdays and
|
||||
**110.60€** for parking my car.
|
||||
At this time I drove a BMW M140i which needed around 9 liters gas per 100
|
||||
kilometers---you may get away with less on that part.
|
||||
|
||||
## The exam
|
||||
|
||||
The exam is split into three different topics: law, engineering and operating
|
||||
technology.
|
||||
|
||||
Every person gets three questions in *law*, three questions in *engineering* and
|
||||
three questions in *operating technology*. This happens one person at a time, so
|
||||
if person 1 answered the first three questions person 2 has to answer three
|
||||
other questions in the same topic.
|
||||
|
||||
We had to leave the room for a while when our examiners discussed our results.
|
||||
When we entered the room again we were told if we get a license or not :wink:
|
||||
|
||||
All attendees have passed the exam and got their license. We were 15 people.
|
||||
|
||||
## Future plans
|
||||
|
||||
Most of us have already requested their callsign. A workshop about different
|
||||
transeivers and antennas is planned for November 23 in Innsbruck from 09:00 to
|
||||
18:00. At 19:00 a graduation party is planned at the restaurant Deck 47 in
|
||||
Innsbruck.
|
||||
|
||||
I joined the local ham radio club **ÖVSV** and I am a member of **ADL714**.
|
||||
|
||||
My shack is growing slowly. I own a few devices that allow me to setup a small
|
||||
station on short wave and on the digital sector within the DMR Austria network
|
||||
(IPSC2) and YSF (C4FM).
|
||||
|
||||
73 de Dominic, OE7DRT
|
@ -0,0 +1,201 @@
|
||||
---
|
||||
title: Optimizing PNG images
|
||||
summary: >
|
||||
A quick notice about three very handy tools to optimize PNG images on
|
||||
the command line. They work on linux and macOS. Use jpegtran for JPG
|
||||
images.
|
||||
categories: [computerstuff]
|
||||
tags: [til-zsh,til-fish,reminders]
|
||||
date: 2020-01-20T20:34:20+01:00
|
||||
|
||||
---
|
||||
|
||||
## Optimizing a bunch of images in a directory
|
||||
|
||||
I found these commands here coincidentally on a
|
||||
[pull request](https://github.com/xianmin/hugo-theme-jane/pull/266) at Github.
|
||||
I found them quite handy :+1:
|
||||
|
||||
~~~console
|
||||
$ find . -type f -name "*.png" -print0 | xargs -0 -I {} optipng -nb -nc "{}"
|
||||
$ find . -type f -name "*.png" -print0 | xargs -0 -I {} advpng -z4 "{}"
|
||||
$ find . -type f -name "*.png" -print0 | xargs -0 -I {} pngcrush -rem gAMA -rem alla -rem cHRM -rem iCCP -rem sRGB -rem time -ow "{}"
|
||||
~~~
|
||||
|
||||
## Quickly optimizing only one image
|
||||
|
||||
I've set up a function in my `.zaliases` file for this to be done on a single
|
||||
image aswell:
|
||||
|
||||
~~~zsh
|
||||
function opti() {
|
||||
optipng -nb -nc "$*";
|
||||
advpng -z4 "$*";
|
||||
pngcrush -rem gAMA -rem alla -rem cHRM -rem iCCP -rem sRGB -rem time -ow "$*";
|
||||
}
|
||||
~~~
|
||||
|
||||
To run all three commands on a single image I just call it like that:
|
||||
|
||||
~~~console
|
||||
$ opti image.png
|
||||
~~~
|
||||
|
||||
That's all the magic it needs.
|
||||
|
||||
## Use jpegtran for JPG images
|
||||
|
||||
~~~console
|
||||
$ jpegtran -copy none -optimize -progressive -outfile output.jpg input.jpg
|
||||
~~~
|
||||
|
||||
## Install these tools on your system
|
||||
|
||||
On debian or ubuntu
|
||||
|
||||
~~~console
|
||||
$ sudo apt-get install optipng pngcrush advancecomp
|
||||
~~~
|
||||
|
||||
On Arch based distros using pacman
|
||||
|
||||
~~~console
|
||||
$ sudo pacman -S optipng pngcrush advancecomp
|
||||
~~~
|
||||
|
||||
On macOS
|
||||
|
||||
~~~console
|
||||
$ sudo port install optipng pngcrush advancecomp
|
||||
~~~
|
||||
|
||||
or if you use homebrew
|
||||
|
||||
~~~console
|
||||
$ brew install optipng pngcrush advancecomp
|
||||
~~~
|
||||
|
||||
You may know other package managers commands, but I only use these.
|
||||
|
||||
## An example
|
||||
|
||||
### By filesize
|
||||
|
||||
The files taken from the snapshot tool on my macbook.
|
||||
|
||||
~~~plain
|
||||
33K 00_locales.png
|
||||
61K 01_control-software.png
|
||||
157K 02_mmdvmhost.png
|
||||
184K 03_general.png
|
||||
187K 04_dmrconfig.png
|
||||
69K 05_exp_mmdvmhost-dmrnetwork.png
|
||||
212K 06_exp_dmrgw-dmrnetwork1.png
|
||||
236K 07_exp_dmrgw-dmrnetwork2.png
|
||||
~~~
|
||||
|
||||
Three to four minutes later (all three commands):
|
||||
|
||||
~~~plain
|
||||
17K 00_locales.png
|
||||
33K 01_control-software.png
|
||||
81K 02_mmdvmhost.png
|
||||
98K 03_general.png
|
||||
97K 04_dmrconfig.png
|
||||
32K 05_exp_mmdvmhost-dmrnetwork.png
|
||||
127K 06_exp_dmrgw-dmrnetwork1.png
|
||||
144K 07_exp_dmrgw-dmrnetwork2.png
|
||||
~~~
|
||||
|
||||
### By view
|
||||
|
||||
~~~plain
|
||||
25K opti_01.png
|
||||
13K opti_02.png
|
||||
~~~
|
||||
|
||||
![Original image](opti_01.png "This is the unmodified image: `opti_01.png`") ![Optimized image](opti_02.png "And this is the optimized image: `opti_02.png`")
|
||||
|
||||
Do you see much difference?
|
||||
|
||||
## Using this with the **fish** shell
|
||||
|
||||
I added this to my fishs configuration (when I used fish for a while).
|
||||
|
||||
~~~fish
|
||||
# file: "~/.config/fish/functions/opti.fish"
|
||||
function opti --description "Optimizes .png files"
|
||||
# Author: Dominic, OE7DRT <dominic@oe7drt.com>
|
||||
# 2021-04-17
|
||||
set -e missing
|
||||
|
||||
for program in optipng advpng pngcrush
|
||||
if \! command -v $program > /dev/null
|
||||
set -a missing $program
|
||||
continue
|
||||
end
|
||||
end
|
||||
|
||||
if test -n "$missing"
|
||||
echo "Could not find executables: $missing"
|
||||
return 1
|
||||
end
|
||||
|
||||
if test -z $argv[1]
|
||||
echo "usage: opti <files...>"
|
||||
return 1
|
||||
end
|
||||
|
||||
set count (count $argv)
|
||||
|
||||
for i in (seq 1 $count)
|
||||
if test ! -f $argv[$i]
|
||||
echo "Could not read file $argv[$i]..."
|
||||
continue
|
||||
end
|
||||
|
||||
optipng -nb -nc "$argv[$i]";
|
||||
advpng -z4 "$argv[$i]";
|
||||
pngcrush -rem gAMA -rem alla -rem cHRM -rem iCCP -rem sRGB -rem time -ow "$argv[$i]";
|
||||
end
|
||||
end
|
||||
~~~
|
||||
|
||||
And I made one for the jpeg version too:
|
||||
|
||||
~~~fish
|
||||
# file: "~/.config/fish/functions/jopti.fish"
|
||||
function jopti --description "Optimizes .jpg files"
|
||||
# Author: Dominic, OE7DRT <dominic@oe7drt.com>
|
||||
# 2021-08-07
|
||||
set -e missing
|
||||
|
||||
for program in jpegtran
|
||||
if \! command -v $program > /dev/null
|
||||
set -a missing $program
|
||||
continue
|
||||
end
|
||||
end
|
||||
|
||||
if test -n "$missing"
|
||||
echo "Could not find executables: $missing"
|
||||
return 1
|
||||
end
|
||||
|
||||
if test -z $argv[1]
|
||||
echo "usage: jopti <files...>"
|
||||
return 1
|
||||
end
|
||||
|
||||
set count (count $argv)
|
||||
|
||||
for i in (seq 1 $count)
|
||||
if test ! -f $argv[$i]
|
||||
echo "Could not read file $argv[$i]..."
|
||||
continue
|
||||
end
|
||||
|
||||
jpegtran -copy none -optimize -progressive -outfile "$argv[$i]" "$argv[$i]"
|
||||
end
|
||||
end
|
||||
~~~
|
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 81 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 97 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 131 KiB |
After Width: | Height: | Size: 494 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 26 KiB |
@ -0,0 +1,454 @@
|
||||
+++
|
||||
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.
|
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 9.5 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 138 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 76 KiB |
@ -0,0 +1,113 @@
|
||||
---
|
||||
title: APRS With The Hytera PD785G
|
||||
summary: >
|
||||
This article is based on the Firmware v9. If you still have v8 do not upgrade---
|
||||
the v8 is still the better choice! If you need a tutorial for v8 have a look
|
||||
at [this website](https://dmraustria.at/gps-einstellungen-fuer-aprs-bei-hytera-geraeten/)---
|
||||
it is in german though.
|
||||
categories: [amateur-radio]
|
||||
tags: [dmr,aprs,hytera]
|
||||
date: 2020-01-27T17:34:01+01:00
|
||||
|
||||
---
|
||||
|
||||
I've read many articles about the Hytera PD785G, APRS, GPS, IPSC2, DMR+,
|
||||
Brandmeister and what not...
|
||||
|
||||
These are the settings that I currently run with.
|
||||
|
||||
## GPS settings
|
||||
|
||||
These settings remain the same as on the v8 firmware.
|
||||
|
||||
{{< figure src="hyt_01_gps.png" alt="GPS settings" caption="" >}}
|
||||
|
||||
Also this remains the same -- make sure to disable *Quick GPS* and enable
|
||||
*RSSI Report*.
|
||||
|
||||
{{< figure src="hyt_02_gps.png" alt="GPS settings" caption="" >}}
|
||||
|
||||
You do not really need the other settings. On incoming calls *Call Location*
|
||||
will show the location of other stations on the display. *Voice with Location*
|
||||
sends your own location info out with your voice. This is needed for
|
||||
*Call Location*.
|
||||
|
||||
## Network settings
|
||||
|
||||
Set the Control Center ID to `9057` if you want to appear as portable device.
|
||||
|
||||
{{< figure src="hyt_03_network.png" alt="network settings" caption="" >}}
|
||||
|
||||
You can also use any of those number-symbol combinations.
|
||||
|
||||
| RRS & Radio IDs | description |
|
||||
| :--- | :--- |
|
||||
| 9050 | without SSID |
|
||||
| 9055 | house / QTH |
|
||||
| 9056 | camping / fieldday |
|
||||
| 9057 | handheld transceiver |
|
||||
| 9058 | mobile / boat |
|
||||
| 9059 | mobile / car |
|
||||
|
||||
## Channel settings
|
||||
|
||||
Setup the channel like this. Just make sure to set `Location Info
|
||||
Revert Channel`. I did not select `IP Multi-site
|
||||
Connect` and I also did not select an `RRS Revert
|
||||
Channel`. I am not 100% sure, but I think the *RRS Revert Channel*
|
||||
is what makes your HT send your position out when you change channels.
|
||||
|
||||
{{< figure src="hyt_04_channel.png" alt="channel settings" caption="" >}}
|
||||
|
||||
You can also set `Slot Operation` to `Pseudo
|
||||
Trunk` -- that would let you hear statically linked talkgroups of
|
||||
another timeslot too.
|
||||
|
||||
## Buttons
|
||||
|
||||
Did you set `Button` as a GPS Trigger? Then you want
|
||||
to configure a button here.
|
||||
|
||||
{{< figure src="hyt_05_buttons.png" alt="buttons settings" caption="" >}}
|
||||
|
||||
## Basic settings
|
||||
|
||||
For what I have tested this works quite well. Although [Brandmeister
|
||||
recommends][bm] to set the `Data Bearer Service` to
|
||||
`Compressed IP` if you want to use text messaging.
|
||||
|
||||
[bm]: https://wiki.brandmeister.network/index.php/Hytera/Radios#Text_Messaging
|
||||
|
||||
{{< figure src="hyt_06_basic.png" alt="basic settings" caption="" >}}
|
||||
|
||||
## Examples
|
||||
|
||||
In-call location information does not contain an SSID. That means, that your
|
||||
location is transferred as your plain CALLSIGN, without the `-7` for
|
||||
`9057`.
|
||||
|
||||
{{< figure src="hyt_08_aprs_route_9057.png" alt="route with the ssid 7" caption="The route looks like this when transmitted as CALLSIGN-7." >}}
|
||||
|
||||
|
||||
{{< figure src="hyt_07_aprs_route_9050.png" alt="route without ssid" caption="The route looks like that when no SSID is appended to the CALLSIGN." >}}
|
||||
|
||||
When transmitted with SSID a location point looks like this:
|
||||
|
||||
{{< figure src="hyt_09_aprs_ssid_working.png" alt="location with ssid" caption="" >}}
|
||||
|
||||
and without SSID:
|
||||
|
||||
{{< figure src="hyt_10_aprs_ssid_notworking.png" alt="location without ssid" caption="" >}}
|
||||
|
||||
There is usually only a red dot marker and not a house. The house replaced
|
||||
the red dot when I tried new APRS settings with my Openspot2 -- which sended
|
||||
out a beacon for my callsign only. This might not be compatible to each other --
|
||||
time will tell...
|
||||
|
||||
{{< figure src="hyt_11_aprs_ssid_hotspot.png" alt="hotspot beacon" caption="" >}}
|
||||
|
||||
In case you don't know that site yet, there is also ~~<https://aprsdirect.com>~~ as
|
||||
an alternative to <https://aprs.fi> -- I love the realtime raw package feed.
|
||||
I use them both here and there.
|
||||
|
||||
{{< figure src="hyt_12_aprsdirect.png" alt="aprsdirect.com station info" caption="" >}}
|
@ -0,0 +1,189 @@
|
||||
---
|
||||
title: Get DMRIDs Via Command Line
|
||||
summary: This is a quick workaround to retrieve a DMRID on console or terminal.
|
||||
categories: [amateur-radio]
|
||||
tags: [dmr,pistar,script]
|
||||
date: 2020-02-04T13:05:25+01:00
|
||||
|
||||
---
|
||||
|
||||
You want to install `w3m`. It is a text browser. Don't forget `rpi-rw` before
|
||||
installing anything if you're on Pi-Star.
|
||||
|
||||
~~~console
|
||||
$ sudo apt-get -y install w3m
|
||||
~~~
|
||||
|
||||
## The script
|
||||
|
||||
The script itself does not verify the given callsign, so whatever you write as
|
||||
an argument, it will be passed to the website. The script returns with `0` if
|
||||
nothing is found.
|
||||
|
||||
~~~bash
|
||||
# file: "~/bin/call"
|
||||
#!/bin/bash
|
||||
# Get DMR-IDs from CALLSIGN or CALLSIGN from DMR-ID or vice versa
|
||||
# Author: Dominic Reich, OE7DRT
|
||||
# File: ~/bin/call
|
||||
#
|
||||
# Last modified: 2020-04-12 13:26:36+0200
|
||||
#
|
||||
# Inspired from this beautiful article:
|
||||
# https://pretzelhands.com/posts/command-line-flags
|
||||
#
|
||||
# Good DX and vy 73 de OE7DRT
|
||||
|
||||
command -v w3m > /dev/null 2>&1 || { echo >&2 "w3m not found"; exit 1; }
|
||||
|
||||
print_usage () {
|
||||
echo >&2 "usage: `basename $0` [dmr_id | callsign]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ $# -ne 1 ]
|
||||
then
|
||||
print_usage
|
||||
fi
|
||||
|
||||
getID () {
|
||||
CALL=`echo $1 | tr a-z A-Z`
|
||||
FILE=/tmp/$CALL
|
||||
w3m "https://ham-digital.org/dmr-userreg.php?callsign=$CALL" > $FILE
|
||||
c=`grep $CALL $FILE | wc -l | xargs`
|
||||
|
||||
while [ $c -gt 0 ]
|
||||
do
|
||||
OUT=`grep $CALL $FILE | head -n $c | tail -n 1 | awk '{ print $4,$5,$2,$3 }'`
|
||||
echo "$OUT"
|
||||
((c--))
|
||||
done
|
||||
rm $FILE
|
||||
}
|
||||
|
||||
getCALLSIGN () {
|
||||
ID=$1
|
||||
FILE=/tmp/$ID
|
||||
w3m "https://ham-digital.org/dmr-userreg.php?usrid=$ID" > $FILE
|
||||
CALL=`grep $ID $FILE | awk '{ print $4 }'`
|
||||
rm $FILE
|
||||
if [ -z $CALL ]
|
||||
then
|
||||
exit 1
|
||||
fi
|
||||
getID $CALL
|
||||
}
|
||||
|
||||
checkID () {
|
||||
if [[ ! $1 =~ ^[0-9]{7}$ ]]
|
||||
then
|
||||
echo >&2 "no valid dmr_id supplied"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
if [ "$1" -eq "$1" ] 2>/dev/null
|
||||
then
|
||||
ID="$1"
|
||||
checkID $ID
|
||||
else
|
||||
CALL="$1"
|
||||
fi
|
||||
|
||||
if [ ! -z $ID ]
|
||||
then
|
||||
getCALLSIGN $ID
|
||||
exit 0
|
||||
elif [ ! -z $CALL ]
|
||||
then
|
||||
getID $CALL
|
||||
exit 0
|
||||
else
|
||||
print_usage
|
||||
fi
|
||||
~~~
|
||||
|
||||
{{< alert note >}}
|
||||
If someone has two DMRIDS, the most recent registered callsign will appear on
|
||||
the top. Feel free to modify the script to your needs if you also want to display
|
||||
the date of registration. Or modify the url if you want to only display last
|
||||
heard ids.
|
||||
{{< /alert >}}
|
||||
|
||||
## Example usage
|
||||
|
||||
Simply get one DMRID (or two, depends on the callsign though):
|
||||
|
||||
~~~console
|
||||
$ call OE7DRT
|
||||
~~~
|
||||
|
||||
Now let's think a bit more complex. You can use the script in a loop. Let's fetch
|
||||
some austrian callsigns only.
|
||||
|
||||
~~~console
|
||||
$ for i in 7one 7two 1three; do call oe$i ids >>! ids; done
|
||||
~~~
|
||||
|
||||
That would fetch 3 callsigns `OE7ONE`, `OE7TWO` and `OE1ONE` and write them
|
||||
all into the file `ids`. So run `cat ids` and display them on screen. Or copy
|
||||
them into clipboard (on a mac only) with `pbcopy < ids`.
|
||||
|
||||
~~~console
|
||||
OE7ONE Username1 0007001 2018-05-12
|
||||
OE7TWO Username2 0007003 2018-12-08
|
||||
OE7TWO Username2 0007002 2018-11-09
|
||||
OE1ONE Username3 0001001 2020-03-13
|
||||
~~~
|
||||
|
||||
*I've been anonymizing the data a bit.*
|
||||
|
||||
## Partially known callsign
|
||||
|
||||
***I anonymized some DMR-IDs on this website.***
|
||||
|
||||
So you know only the three last letters of an austrian callsign and want to
|
||||
know quickly what federal state it was? Run this command and you'll get a
|
||||
quick answer on the command line:
|
||||
|
||||
~~~console
|
||||
$ for i in oe{1..9}drt; do call $i; done
|
||||
OE7DRT Dominic 2327180 2019-11-24
|
||||
~~~
|
||||
|
||||
If you called your script `call` and if `call` is in your `$PATH`.
|
||||
|
||||
This works also if you missed one letter.
|
||||
|
||||
~~~console
|
||||
$ for i in oe7{a..z}rt; do call $i; done
|
||||
OE7BRT Rainer 2327XXX 20XX-XX-XX
|
||||
OE7DRT Dominic 2327180 2019-11-24
|
||||
OE7JRT Josef 2327XXX 20XX-XX-XX
|
||||
~~~
|
||||
|
||||
This took ~10 seconds on my computer.
|
||||
|
||||
Or even with more letters, but this will take a while, since this will start
|
||||
**676 (26x26) website lookups to ham-digital.org**---maybe they'll block
|
||||
your IP address quickly, if you hammer their server with so many request in a
|
||||
short period of time.
|
||||
|
||||
~~~console
|
||||
$ for i in oe7d{a..z}{a..z}; do call $i; done
|
||||
2327XXX OE7D?? Daniel
|
||||
2327XXX OE7D?? Hermann
|
||||
2327XXX OE7D?? Josef
|
||||
2327XXX OE7D?? Dragan
|
||||
2327XXX OE7D?? Peter
|
||||
2327180 OE7D?? Dominic
|
||||
2327XXX OE7D?? Wechselberger
|
||||
2327XXX OE7D?? Gernot
|
||||
~~~
|
||||
|
||||
And this ran for 3 minutes and 17 seconds on my computer.
|
||||
|
||||
{{< alert note >}}
|
||||
The output above was made with an older version of the script. The output now
|
||||
contains also the registration date as seen in previous examples.
|
||||
{{< /alert >}}
|
@ -0,0 +1,80 @@
|
||||
---
|
||||
title: My Nextion 2.4\" DMR Last Heard Dashboard
|
||||
summary: >
|
||||
I created a simple last-heard-dashboard for my small Nextion screen.
|
||||
It currently shows the used slot, its origin (like Network or RF) , the
|
||||
callsign and the used talkgroup.
|
||||
categories: [amateur-radio]
|
||||
tags: [nextion,dmr]
|
||||
date: 2020-02-16T12:43:34+01:00
|
||||
|
||||
---
|
||||
|
||||
## The display
|
||||
|
||||
When I got the display there was already a Screen Layout installed---it was
|
||||
probably the Layout of [PD0DIB].
|
||||
|
||||
[PD0DIB]: https://github.com/PD0DIB/Nextion_HAM-radio-screens/tree/master/MODEL%208/GLOBE
|
||||
|
||||
We're talking about a `NX3224T024_011`.
|
||||
|
||||
|
||||
{{< figure src="nxt_01_display.jpg" alt="display" caption="" >}}
|
||||
|
||||
My dashboard now looks like this:
|
||||
|
||||
{{< figure src="nxt_01_display-lh.jpg" alt="display" caption="" >}}
|
||||
|
||||
The number on the bottom right corner displays the actual status code sent by
|
||||
the MMDVMHost binary. A list of these codes can be seen [here].
|
||||
|
||||
[here]: https://github.com/WA6HXG/MMDVM-Nextion-Screen-Layouts/blob/master/Info%20Sheets/Status%20Codes%20and%20Fields.txt
|
||||
|
||||
Also have a look at the debug output within the Nextion Editor. You get to the
|
||||
second screen (SYSTEM screen) by touching/pressing the header of the dashboard.
|
||||
Within the system screen you can clear the dashboard.
|
||||
|
||||
{{< figure src="nxt_02_screens.png" alt="overview" caption="" >}}
|
||||
|
||||
## The editor
|
||||
|
||||
The most HMI files I found online were made with the older version of Nextion
|
||||
Editor---v53. It is the Nextion Editor LTS version. It is available on
|
||||
[nextion.tech](https://nextion.tech/nextion-editor/).
|
||||
|
||||
For the editor to work you need to install a Microsoft Visual C++
|
||||
Redistributable Package---Nextion Editor is a 32bit application, so choose
|
||||
the 32bit version (`vc_redist.x86.exe`).
|
||||
|
||||
## TFT files and HMI files
|
||||
|
||||
I'm no professional and this is the way I look at these things. For me HMI files
|
||||
are source files. You can open them with Nextion Editor and edit them just right
|
||||
away. Whereas TFT files cannot be "opened" with the Nextion Editor, they have to
|
||||
be opened **with no open project** by clicking the
|
||||
`Debug` button (next to the Compile button). They get loaded into the
|
||||
simulator and you can preview the file.
|
||||
|
||||
**TFT files are the compiled output of HMI files.**
|
||||
|
||||
## Get the files
|
||||
|
||||
I've setup a repository on Github for my screen---for now there is one layout
|
||||
online. It only displays a last heard table with callsign and talkgroup for DMR.
|
||||
I'd like to have this for a bigger screen but I'm not sure when I'll find the
|
||||
time for it.
|
||||
|
||||
- <https://github.com/oe7drt/MMDVM-Nextion-Screen-Layouts>
|
||||
|
||||
What the actual dashboard looks like.
|
||||
|
||||
{{< youtube id="uqIErzgr3zQ" >}}
|
||||
|
||||
## Resources
|
||||
|
||||
I've found several resources that I want to list in no particular order here.
|
||||
|
||||
- <https://www.hamdigitaal.nl/download/algemene-informatie/Setup-a-MMDVM-Hotspot-20161212.pdf>
|
||||
- <https://github.com/WA6HXG/MMDVM-Nextion-Screen-Layouts>
|
||||
- <https://github.com/PD0DIB/Nextion_HAM-radio-screens>
|
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 82 KiB |
After Width: | Height: | Size: 9.6 KiB |
@ -0,0 +1,30 @@
|
||||
---
|
||||
title: Mountint Ext4 Filesystem On MacOS Readonly
|
||||
summary: An overview of how to mount your Pi-Star sdcard on a mac machine.
|
||||
categories: [computerstuff]
|
||||
tags: [pistar,macos,reminders]
|
||||
date: 2020-02-22T09:33:44+01:00
|
||||
|
||||
---
|
||||
|
||||
##### Installing the needed tools
|
||||
|
||||
~~~console
|
||||
$ brew cask install osxfuse
|
||||
$ brew install ext4fuse
|
||||
~~~
|
||||
|
||||
##### Mount the disk on your filesystem
|
||||
|
||||
~~~console
|
||||
$ ext4fuse /dev/disk2s2 pi-star
|
||||
~~~
|
||||
|
||||
##### Users, groups, write permissions, &c
|
||||
|
||||
If you feel that you have to add yourself to another usergroup, then do that
|
||||
as the following code suggests:
|
||||
|
||||
~~~console
|
||||
$ sudo dseditgroup -o edit -a $username -t user $groupname
|
||||
~~~
|