Подтвердить что ты не робот

Расшифровать SMS-сообщения о местоположении GPS Lions в Кении

Проект Мара-Набоишо Лев попросил наш, декодирование и печать положений львов, оснащенных ошейниками GPS.

Они получают SMS-сообщения от воротников:

Collar07854_100806210058.SMS

074952494449554d0000000000000000000000000000000000000000000000040f33303030333430313232393738393000000000000000000000000000000000f10a0806100028008c13ef348a0039d0fe000de871004cc92b5ca92d6213ef26640039d108000de86b004cc92d5ca92d5d13ef18620039d101000de865004cc92c5ca92d5813ef0a930039d0fc000de864004cc9311c682d5413eefc170039d045000de7d4004cc95b7c692c5013eeee280039d0ff000de85f004cc92a7c692d6fffffffffffffffffffffffffffffffffffffffffff

Collar07854_100807060011.SMS

074952494449554d0000000000000000000000000000000000000000000000040f33303030333430313232393738393000000000000000000000000000000000f10a0807020038008c13efb2eb0039d0ed000de853004cc92e3cea2d8813efa5060039d0fb000de860004cc9291c6a2d8413ef96fd0039d0fc000de85e004cc92d5c6a2d7f13ef88e00039d0f6000de85a004cc92b5c6a2d7b13ef7ad80039d0fa000de85a004cc9327c6a2d77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

Это, вероятно, SMS PDU, хотя простые онлайн-декодеры, похоже, не очень хорошо их понимают. В них есть текст ASCII "IRIDIUM", предположительно являющийся SMSC или отправителем или чем-то строгим, поскольку IRIDIUM является спутниковой телефонной системой и, предположительно, носителем, когда воротники отправляют свои позиции.

UPDATE. У них есть некоторые файлы KML, соответствующие этим ошейникам; Я загрузил KML здесь и здесь. Ошейники, вероятно, сделаны Vectronic-Aerospace.

Какой формат он и как его декодировать?

(Это предоставление кода, возможно, вы хотите помочь им или посмотреть другие проблемы там?)

4b9b3361

Ответ 1

Я смог перевести позиции lat/lon! Посмотрев на сайт от разработчиков воротников, я видел, что они используют координаты ECEF x/y/z.

Первая строка первого сообщения:

13ef 348a 0039 d0fe 000d e871 004c c92b 5ca9 2d62

Переводится как:

0039 d0fe = X = 3789054
000d e871 = Y = 911473
004c c92b = Z = 5032235

Это означает:

Lat: 52.43067054630929
Lon: 13.525755535406619
Height: 88.99500464554876

Это приводит к местоположению в Германии... что звучит неправильно для резерва Кении, но на самом деле это улица компании, которая делает эти ошейники: проверить свой сайт

Код для перевода координат найден в Интернете:

public static double[] xyz2LLH(double x, double y, double z)
{
    double[] llh = new double[3];
    double da = 0.0; // datum parameter
    double df = 0.0; // datum parameter
    double a = 6378137 - da;
    double f = 1 / 298.2572235630 - df;
    double b = (1 - f) * a;
    double e2 = 2 * f - f * f;
    double E2 = (a * a - b * b) / (b * b);
    double p = Math.sqrt(x * x + y * y);
    llh[0] = Math.atan2(y, x);
    double theta = Math.atan((z * a) / (p * b));
    llh[1] = Math.atan((z + E2 * b * Math.pow(Math.sin(theta), 3)) / (p - e2 * a * Math.pow(Math.cos(theta), 3)));
    double N = a / Math.sqrt(1 - e2 * Math.sin(llh[1]) * Math.sin(llh[1]));
    llh[2] = p / Math.cos(llh[1]) - N;
    llh[0] = Math.toDegrees(llh[0]);
    llh[1] = Math.toDegrees(llh[1]);
    return llh;
}

код >

Таким образом, единственный оставшийся код decypher - это последний бит: 5ca9 2d62.

Другая подсказка с сайта предполагает, что эти байты содержат основное напряжение/резервное напряжение и температуру.

Ответ 2

Расширение замечания Роя:

возможно, "13" не является частью заголовков? Тогда заголовки будут:

  SMS 1: 10a0806100028008c
  SMS 2: 10a0807020038008c

И тогда сообщения будут:

  Message #1
  13ef 348a 0039 d0fe 000d e871 004c c92b 5ca9 2d62
  13ef 2664 0039 d108 000d e86b 004c c92d 5ca9 2d5d
  13ef 1862 0039 d101 000d e865 004c c92c 5ca9 2d58
  13ef 0a93 0039 d0fc 000d e864 004c c931 1c68 2d54
  13ee fc17 0039 d045 000d e7d4 004c c95b 7c69 2c50
  13ee ee28 0039 d0ff 000d e85f 004c c92a 7c69 2d6f
  ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff
  ff

  Message #2
  13ef b2eb 0039 d0ed 000d e853 004c c92e 3cea 2d88
  13ef a506 0039 d0fb 000d e860 004c c929 1c6a 2d84
  13ef 96fd 0039 d0fc 000d e85e 004c c92d 5c6a 2d7f
  13ef 88e0 0039 d0f6 000d e85a 004c c92b 5c6a 2d7b
  13ef 7ad8 0039 d0fa 000d e85a 004c c932 7c6a 2d77
  ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff
  ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff
  ff

Это похоже на журнал, с сообщением за август 06 (угадывание) имеет 6 записей, а второй - с 07 августа с 7. Что будет запись воротника? Я предполагаю долготу, широту и временную метку?

Скорее всего, что первые восемь цифр представляют временную метку. Они инкрементальны снизу вверх.

Eg. 13ef348a = 334443658. 334443658 секунд = 10 лет, 8 месяцев, 6 дней, 23:00:58 (с 1970 года). Это соответствует дате в заголовке первого sms: Collar07854_ 100806 210058. Он даже соответствует отметке времени минус 2 часа в заголовке.

Вопрос для плаката: как часто эти тексты получают в день? в каком году они (я догадывался 2010)?

Ответ 3

Он не выглядит обычным PDU. Это также 8-битная информация, а не 7 бит (как и большинство PDU).

Также, кажется, существуют шаблоны, если вы отбираете первый заголовок, который у них есть:

    074952494449554d0000000000000000000000000000000000000000000000040f33303030333430313232393738393000000000000000000000000000000000f10a

Далее появляется еще один 16-байтовый заголовок /timestamp/id:

    SMS 1: 0806100028008c13
    SMS 2: 0807020038008c13

И немного отформатируйте его, шаблон станет более понятным:

    Message #1:
    ef348a0039d0fe000de871004cc92b5ca92d6213
    ef26640039d108000de86b004cc92d5ca92d5d13
    ef18620039d101000de865004cc92c5ca92d5813
    ef0a930039d0fc000de864004cc9311c682d5413
    eefc170039d045000de7d4004cc95b7c692c5013
    eeee280039d0ff000de85f004cc92a7c692d6fff
    ffffffffffffffffffffffffffffffffffffffff

    Message #2:
    efb2eb0039d0ed000de853004cc92e3cea2d8813
    efa5060039d0fb000de860004cc9291c6a2d8413
    ef96fd0039d0fc000de85e004cc92d5c6a2d7f13
    ef88e00039d0f6000de85a004cc92b5c6a2d7b13
    ef7ad80039d0fa000de85a004cc9327c6a2d77ff
    ffffffffffffffffffffffffffffffffffffffff
    ffffffffffffffffffffffffffffffffffffffff

Ответ 4

Итак, после улучшения с помощью dstibbe мы знаем формат и, возможно, дату/время:

    Message #1
    334443658 seconds, 0039 d0fe 000d e871 004c c92b 5ca9 2d62
    334440036 seconds, 0039 d108 000d e86b 004c c92d 5ca9 2d5d
    334436450 seconds, 0039 d101 000d e865 004c c92c 5ca9 2d58
    334432915 seconds, 0039 d0fc 000d e864 004c c931 1c68 2d54
    334429207 seconds, 0039 d045 000d e7d4 004c c95b 7c69 2c50
    334425640 seconds, 0039 d0ff 000d e85f 004c c92a 7c69 2d6f

    Message #2
    334476011 seconds, 0039 d0ed 000d e853 004c c92e 3cea 2d88
    334472454 seconds, 0039 d0fb 000d e860 004c c929 1c6a 2d84
    334468861 seconds, 0039 d0fc 000d e85e 004c c92d 5c6a 2d7f
    334465248 seconds, 0039 d0f6 000d e85a 004c c92b 5c6a 2d7b
    334461656 seconds, 0039 d0fa 000d e85a 004c c932 7c6a 2d77

Я сосредоточил свой поиск на попытке конвертировать следующие пары из 8 байтов в координаты. Возьмем первую строку: 334443658 секунд, 0039 d0fe 000d e871 004c c92b 5ca9 2d62

Вероятно, осталось четыре отдельных части:

  • 0039 d0fe
  • 000d e871
  • 004c c92b
  • 5ca9 2d62

Мое первое предположение заключалось в том, что часть 1 будет широтой и долготой второй части. И числа, скорее всего, будут целыми числами, а не плавающей точкой. Числа с плавающей запятой имеют часть экспоненты (11 бит), которые почти всегда отличны от нуля. Эти цифры, похоже, не имеют этой части, начиная с 000.

Перевод всего в целые числа, вероятно, приведет к:

  • 3789054
  • 911473
  • 5032235
  • 1554591074

Глядя на это, я думаю, что часть №1 - долгота, а часть № 2 - широта. Это довольно обычное дело, просто посмотрите на Google Earth, который также ожидает lon-lat вместо lat-lon.

Теперь существует много способов конвертировать целое число в lat/lon, и мой наиболее вероятный кандидат:

lon = part_1 / 6371000 / PI * 180

lat = atan(exp(part_2 / 6371000)) / PI * 360 - 90

Это приводит к координатам в эфиопском национальном парке Гамбела...? Может быть, ошейники записывались в Эфиопии, прежде чем отправить их в Кению? Нам нужно больше информации, чтобы перевести координаты, которые я боюсь...

Lat: 8.169253103106428

Lon: 34.075781281927895

Координаты в Картах Google

Ответ 5

Я хочу внести немного свой вклад в ответ dstibbe, но я не могу комментировать...

Последний байт "header" (8c) - это длина сообщения (140), когда вы начинаете отсчет с 0.

Ответ 6

Почему бы вам просто не спросить людей из немецкой компании? Либо позвоните им, либо отправьте им электронное письмо. Я уверен, что они предоставят вам ответ.

Кроме того, в соответствии с листом продукта на веб-сайте, воротники могут быть установлены для записи в разных режимах. Вы должны узнать из проекта льва, как запрограммированы ошейники.

Ответ 7

Это выглядит как хорошая ссылка:

http://www.dreamfabric.com/sms/

Трюк может заключаться в расшифровке сообщения в конце.

Мне удалось извлечь IRIDIUM, но не пошел дальше.

Быстрый perl script для этого:

my $text=".....";
my $str;
while( $text ) {
  $str .= chr( hex(substr $text, 0, 2) );
  if( length($text) > 2 ) {
    $text8 = substr($text, 2);
  } else {
    $text8 = '';
  }
}
print $str;