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.

5.6 KiB

title aliases summary categories tags date
Create your own DMR-ID database file /posts/2020-11-16-create-your-own-dmrid-database-file Sometimes you just need to create your own files. Mainly for the GD-77 because of its limited memory.
amateur-radio
dmr
scripting
2020-11-16T23:23:51+01:00

Let's start with the website 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. {{< /alert >}}

Are you still waiting for your confirmation email? You may look at the registration site, which contains links to the list of open registrations or the list of local administrators.

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/radio-stuff/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.

#!/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.

#!/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.

#!/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);   
?>