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.

220 lines
5.5 KiB

---
title: Create your own DMR-ID database file
aliases: /posts/2020-11-16-create-your-own-dmrid-database-file
summary: >
Sometimes you just need to create your own files. Mainly for the GD-77
because of its limited memory.
categories: [amateur-radio]
tags: [dmr, script]
date: 2020-11-16T23:23:51+01:00
---
Let's start with the website [ham-digital.org](https://ham-digital.org/). It
contains the user database of registered DMR-IDs worldwide.
{{< alert circle-info >}}
**Update**
While these scripts still work, the website `ham-digital.org` is dead and the
european database has been put together on [radioid.net](https://radioid.net).
{{< /alert >}}
~~**Are you still waiting for your confirmation email?** You may
[look at the registration site][reg], which contains links to the list of open
registrations or the list of local administrators.~~
[reg]: https://register.ham-digital.org/
Okay, I try to keep this simple. These scripts are made to download an actual
snapshot of the DMR-ID database from *ham-digital.org*. They create a
comma-separated list of DMR-IDs and callsigns to import into an amateur radio
device. Actually I use them only on my
[Radioddity GD-77]({{< ref "equipment/handhelds/radioddity-gd77" >}}).
## Download the full database
That fetches the whole database, which are something around 180.000 entries at
the moment (2020-Nov-15). The script uses about 8MB of RAM. Something like
that.
~~~php
#!/usr/bin/env php
<?php
/*
* Save the full database (much big!!)
* DMR-IDS-FULL.csv
* Dominic, OE7DRT
*/
$url = 'https://ham-digital.org/status/users.csv';
$remote_file = fopen ($url, 'r') or die ($php_errormsg);
$filename = '/Users/dominic/DMR-IDS-FULL.csv';
@unlink ($filenme);
$local_file = fopen ($filename, 'w') or die ($php_errormsg);
fputcsv ($local_file, array ('dmrid', 'callsign', 'name'));
while (!feof ($remote_file)) {
$line = fgetss ($remote_file, 64);
$elem = explode (',', $line, -4);
fputcsv ($local_file, $elem);
}
fclose ($remote_file);
fclose ($local_file);
?>
~~~
## Download only a few regions into separate files
Fetch some regions (specified in the script) and some additional callsigns from
a file that contains one callsign per line. This script uses a lot more RAM.
Something around 32MB I guess. Or so.
~~~php
#!/usr/bin/env php
<?php
/*
* Save regions and favourites in separate files
* DMR-IDS-$REGION.csv and DMR-IDS-FAV.csv
* Dominic, OE7DRT
*/
$url = 'https://ham-digital.org/status/users.csv';
$remote_file = fopen ($url, 'r') or die ($php_errormsg);
$mem = array ();
while (!feof ($remote_file)) {
$line = fgetss ($remote_file, 64);
$elem = explode (',', $line, -4);
array_push($mem, $elem);
}
$path = '/Users/dominic/';
$fav_filename = 'Favorite_Callsigns.txt';
$fav_file = fopen ($path.$fav_filename, 'r') or die($php_errormsg);
$fav = array ();
while (!feof ($fav_file)) {
$line = fgetss ($fav_file, 16);
if (!empty ($line)) $fav[] = trim ($line);
}
fclose ($fav_file);
$filename = $path.'DMR-IDS-FAV.csv';
@unlink($filename);
$fav_out = fopen ($filename, 'w') or die ($php_errormsg);
foreach ($fav as $callsign) {
foreach ($mem as $item) {
if (preg_match("/\b$callsign\b/i", $item[1], $m)) {
fputcsv ($fav_out, $item);
}
}
}
fclose ($fav_out);
// $regions = array ('232', '262', '263', '264', '228', '222');
// $regions = array ('2327', '2328', '2329');
$regions = array ('232','262','263','222','228');
foreach ($regions as $region) {
$filename = $path.'DMR-IDS-'.$region.'.csv';
@unlink ($filename);
$local_file = fopen ($filename, 'w') or die ($php_errormsg);
fputcsv ($local_file, array ('dmrid', 'callsign', 'name'));
foreach ($mem as $item) {
if (preg_match ("/^$region/", $item[0], $m)) {
fputcsv ($local_file, $item);
}
}
}
fclose ($remote_file);
fclose ($local_file);
?>
~~~
## Download only a few regions into one single file
Like the one above, but it saves all IDs into one file. Uses probably the same
amount of RAM.
~~~php
#!/usr/bin/env php
<?php
/*
* Save the regions and favourites in a single file
* DMR-IDS-SMALL.csv
* Dominic, OE7DRT
*/
$path = '/Users/dominic/';
$url = 'https://ham-digital.org/status/users.csv';
$remote_file = fopen ($url, 'r') or die ($php_errormsg);
$mem = array ();
while (!feof ($remote_file)) {
$line = fgetss ($remote_file, 64);
$elem = explode (',', $line, -4);
array_push($mem, $elem);
}
fclose ($remote_file);
$whitelist_filename = 'Favorite_Callsigns.txt';
$whitelist_file = fopen ($path.$whitelist_filename, 'r') or die($php_errormsg);
$whitelist_array = array ();
while (!feof ($whitelist_file)) {
$line = fgetss ($whitelist_file, 16);
if (!empty ($line)) $whitelist_array[] = trim ($line);
}
fclose ($whitelist_file);
$filename = 'DMR-IDS-SMALL.csv';
@unlink($path.$filename);
$file = fopen ($path.$filename, 'w') or die ($php_errormsg);
fputcsv ($file, array ('dmrid', 'callsign', 'name'));
// $regions = array ('232', '262', '263', '264', '228', '222');
//$regions = array ('2327', '2328', '2329');
$regions = array ('232');
foreach ($regions as $region) {
foreach ($mem as $item) {
if (preg_match ("/^$region/", $item[0], $m)) {
fputcsv ($file, $item);
}
}
}
foreach ($whitelist_array as $callsign) {
foreach ($mem as $item) {
if (preg_match("/\b$callsign\b/i", $item[1], $m)) {
fputcsv ($file, $item);
}
}
}
fclose ($file);
?>
~~~