--- title: Create your own DMR-ID 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); ?> ~~~