21

Mara-Naboisho 狮子项目已请求我们帮助解码和绘制装有 GPS 项圈的狮子的位置。

他们从项圈收到短信:

Collar07854_100806210058.SMS

074952494449554d0000000000000000000000000000000000000000000000040f33303030333430313232393738393000000000000000000000000000000000f10a0806100028008c13ef348a0039d0fe000de871004cc92b5ca92d6213ef26640039d108000de86b004cc92d5ca92d5d13ef18620039d101000de865004cc92c5ca92d5813ef0a930039d0fc000de864004cc9311c682d5413eefc170039d045000de7d4004cc95b7c692c5013eeee280039d0ff000de85f004cc92a7c692d6fffffffffffffffffffffffffffffffffffffffffff

Collar07854_100807060011.SMS

074952494449554d0000000000000000000000000000000000000000000000040f33303030333430313232393738393000000000000000000000000000000000f10a0807020038008c13efb2eb0039d0ed000de853004cc92e3cea2d8813efa5060039d0fb000de860004cc9291c6a2d8413ef96fd0039d0fc000de85e004cc92d5c6a2d7f13ef88e00039d0f6000de85a004cc92b5c6a2d7b13ef7ad80039d0fa000de85a004cc9327c6a2d77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

这些可能是 SMS PDU,尽管简单的在线解码器似乎对它们没有多大意义。其中有 ASCII 文本“IRIDIUM”,可能是 SMSC 或发送者或其他字符串,因为 IRIDIUM 是卫星电话系统,并且可能是项圈发送位置时的承载者。

更新:他们有一些与这些项圈相对应的 KML 文件;我在这里这里上传了 KML 。项圈可能是由 Vectronic-Aerospace 制造的。

它是什么格式,我们如何解码?

(这是一个捐赠代码项目;也许你想帮助他们,或者看看那里的其他问题?)

4

7 回答 7

12

我已经能够翻译纬度/经度位置了!在查看了衣领开发人员的网站后,我发现他们正在使用 x/y/z ECEF 坐标。

第一条消息的第一行:

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

被翻译为:

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

这转化为:

纬度:52.43067054630929
朗:13.525755535406619
身高: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;
}

因此,唯一需要解密的代码是最后一位:5ca9 2d62

该网站的另一条线索表明,这些字节包含主电压/备用电压和温度。

于 2012-09-11T16:08:04.007 回答
6

罗伊言论的扩展:

也许'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

它看起来确实像一个日志,8 月 6 日的消息(猜测)有 6 个条目,而 8 月 7 日的第二个有 7 个条目。领子记录是什么?我猜经度,纬度和时间戳?

前八位数字代表时间戳的可能性很高。它们是从下到上递增的。

例如。13ef348a = 334443658。334443658 秒 = 10 年 8 个月 6 天 23:00:58(自 1970 年以来)。这与第一条短信标题中的日期匹配: Collar07854_ 100806 210058。它甚至与标题中的时间戳减去 2 小时相匹配。

发帖人的一个问题:每天收到这些短信的频率是多少?他们来自哪一年(我猜是 2010 年)?

于 2012-09-10T22:38:01.010 回答
2

我想为 dstibbe 的回答做出一点贡献,但我还不能发表评论。

当您从 0 开始计数时,“标头”的最后一个字节 (8c) 是消息的长度 (140)。

于 2012-11-12T15:07:32.727 回答
2

因此,在 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

可能还剩下四个不同的部分:

  1. 第0039章
  2. 000d e871
  3. 004c c92b
  4. 5ca9 2d62

我的第一个猜测是第 1 部分是纬度,第 2 部分是经度。这些数字很可能是整数,而不是浮点数。浮点数有一个指数部分(11 位),几乎总是非零。这些数字似乎没有那部分,从 000 开始。

将所有内容转换为整数可能会导致:

  1. 3789054
  2. 911473
  3. 5032235
  4. 1554591074

看着这个,我猜第 1 部分是经度,第 2 部分是纬度。这很常见,只要看看谷歌地球,它也需要 lon-lat 而不是 lat-lon。

现在,有很多方法可以将整数转换为纬度/经度,我最有可能的候选人是:

lon = part_1 / 6371000 / PI * 180

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

这导致埃塞俄比亚“甘贝拉”国家公园的坐标......?会不会是项圈在送去肯尼亚之前就已经在埃塞俄比亚录音了?恐怕我们需要更多信息来翻译坐标……

纬度:8.169253103106428

朗:34.075781281927895

谷歌地图中的坐标

于 2012-09-11T11:10:57.597 回答
2

它似乎不是一个普通的 PDU。它也是 8 位信息,而不是 7 位(像大多数 PDU 一样)。

如果你去掉它们共同的第一个标题,似乎也有模式:

    074952494449554d0000000000000000000000000000000000000000000000040f33303030333430313232393738393000000000000000000000000000000000f10a

接下来似乎还有另一个 16 字节的 header/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
于 2012-09-10T12:41:45.523 回答
1

你为什么不问问德国公司的人?要么打电话给他们,要么给他们发电子邮件。我很确定他们会为您提供答案。

此外,根据网站上的产品表,可以设置项圈以不同的方式记录。你必须从狮子项目中找出项圈是如何编程的。

于 2012-09-21T08:36:11.953 回答
0

这看起来是一个很好的参考:

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

诀窍可能是在最后解码消息。

我设法提取了铱,但没有更进一步。

一个快速的 perl 脚本:

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;
于 2012-09-10T08:26:40.030 回答