Subversion Repositories HomeAutomation

Rev

Rev 1947 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 1947 Rev 1949
1
 
1
 
2
Mbb_Clients = {};
2
Mbb_Clients = {};
3
 
3
 
4
Mbb_Susbscribers = [];
4
Mbb_Susbscribers = [];
5
 
5
 
6
function Mbb_SubscribeToDeviceStatus(callback)
6
function Mbb_SubscribeToDeviceStatus(callback)
7
{
7
{
8
  Mbb_Susbscribers.push(callback);
8
  Mbb_Susbscribers.push(callback);
9
}
9
}
10
 
10
 
11
function Mbb_Connected(client_id)
11
function Mbb_Connected(client_id)
12
{
12
{
13
  Log(client_id + " connected!");
13
  Log(client_id + " connected!");
14
 
14
 
15
  Mbb_Clients[client_id] = {};
15
  Mbb_Clients[client_id] = {};
16
}
16
}
17
 
17
 
18
function Mbb_Disconnected(client_id)
18
function Mbb_Disconnected(client_id)
19
{
19
{
20
  Log(client_id + " disconnected!");
20
  Log(client_id + " disconnected!");
21
 
21
 
22
  for (var n = 0; n < Mbb_Susbscribers.length; n++)
22
  for (var n = 0; n < Mbb_Susbscribers.length; n++)
23
  {
23
  {
24
    Mbb_Susbscribers[n]("disconnected", Mbb_Clients[client_id]);
24
    Mbb_Susbscribers[n]("disconnected", Mbb_Clients[client_id]);
25
  }
25
  }
26
 
26
 
27
  delete Mbb_Clients[client_id];
27
  delete Mbb_Clients[client_id];
28
}
28
}
29
 
29
 
30
function Mbb_ReceivedData(client_id, data)
30
function Mbb_ReceivedData(client_id, data)
31
{
31
{
-
 
32
  Log(data);
-
 
33
 
32
  var json_data = eval("(" + data + ")");
34
  var json_data = eval("(" + data + ")");
33
 
35
 
34
  //Log(JSON.stringify(json_data));
36
  //Log(JSON.stringify(json_data));
35
 
37
 
36
  if (json_data.method == "MBB.GpsNmeaData")
38
  if (json_data.method == "MBB.GpsNmeaData")
37
  {
39
  {
38
    if (json_data.params.nmea.substr(0, 6) == "$GPGGA")
40
    if (json_data.params.nmea.substr(0, 6) == "$GPGGA")
39
    {
41
    {
40
      Mbb_Clients[client_id]["LastNmea"]["GGA"] = json_data.params.nmea;
42
      Mbb_Clients[client_id]["LastNmea"]["GGA"] = json_data.params.nmea;
41
    }
43
    }
42
    else if (json_data.params.nmea.substr(0, 6) == "$GPRMC")
44
    else if (json_data.params.nmea.substr(0, 6) == "$GPRMC")
43
    {
45
    {
44
      Mbb_Clients[client_id]["LastNmea"]["RMC"] = json_data.params.nmea;
46
      Mbb_Clients[client_id]["LastNmea"]["RMC"] = json_data.params.nmea;
45
     
47
     
-
 
48
      Mbb_Clients[client_id]["Position"] = _Mbb_NmeaToPosition(client_id);
-
 
49
     
46
      for (var n = 0; n < Mbb_Susbscribers.length; n++)
50
      for (var n = 0; n < Mbb_Susbscribers.length; n++)
47
      {
51
      {
48
        Mbb_Susbscribers[n]("nmea", Mbb_Clients[client_id]);
52
        Mbb_Susbscribers[n]("position", Mbb_Clients[client_id]);
49
      }
53
      }
50
     
54
     
51
      Mbb_Clients[client_id]["LastNmea"]["GGA"] = "";
55
      Mbb_Clients[client_id]["LastNmea"]["GGA"] = "";
52
      Mbb_Clients[client_id]["LastNmea"]["RMC"] = "";
56
      Mbb_Clients[client_id]["LastNmea"]["RMC"] = "";
-
 
57
      Mbb_Clients[client_id]["Position"] = false;
-
 
58
    }
53
    }
59
  }
54
  }
-
 
55
  else /*if (json_data.method == "MBB.Connected")*/
60
  else /*if (json_data.method == "MBB.Connected")*/
56
  {
61
  {
57
    json_data = { "params" : { "Imei" : "004401700721448" } };
62
    json_data = { "params" : { "Imei" : "004401700721448" } };
58
   
63
   
59
    Log("Client " + client_id + " has IMEI " + json_data.params.Imei);
64
    Log("Client " + client_id + " has IMEI " + json_data.params.Imei);
60
   
65
   
61
    Mbb_Clients[client_id]["Id"] = client_id;
66
    Mbb_Clients[client_id]["Id"] = client_id;
62
    Mbb_Clients[client_id]["Info"] = json_data.params;
67
    Mbb_Clients[client_id]["Info"] = json_data.params;
-
 
68
    Mbb_Clients[client_id]["Position"] = false;
63
    Mbb_Clients[client_id]["LastNmea"] = {};
69
    Mbb_Clients[client_id]["LastNmea"] = {};
64
    Mbb_Clients[client_id]["LastNmea"]["GGA"] = "";
70
    Mbb_Clients[client_id]["LastNmea"]["GGA"] = "";
65
    Mbb_Clients[client_id]["LastNmea"]["RMC"] = "";
71
    Mbb_Clients[client_id]["LastNmea"]["RMC"] = "";
66
   
72
   
67
    for (var n = 0; n < Mbb_Susbscribers.length; n++)
73
    for (var n = 0; n < Mbb_Susbscribers.length; n++)
68
    {
74
    {
69
      Mbb_Susbscribers[n]("connected", Mbb_Clients[client_id]);
75
      Mbb_Susbscribers[n]("connected", Mbb_Clients[client_id]);
70
    }
76
    }
71
  }
77
  }
72
  /*else
78
  /*else
73
  {
79
  {
74
    Log("Got unknown data \"" + json_data + "\" from client " + client_id);
80
    Log("Got unknown data \"" + json_data + "\" from client " + client_id);
75
  }*/
81
  }*/
76
}
82
}
77
 
83
 
78
function Mbb_SendData(client_id, json_data)
84
function Mbb_SendData(client_id, json_data)
79
{
85
{
80
  return MbbExport_SendData(client_id, JSON.Stringify(json_data));
86
  return MbbExport_SendData(client_id, JSON.Stringify(json_data));
-
 
87
}
-
 
88
 
-
 
89
function _Mbb_NmeaToPosition(client_id)
-
 
90
{
-
 
91
  /*
-
 
92
      GGA          Global Positioning System Fix Data
-
 
93
*     123519       Fix taken at 12:35:19 UTC
-
 
94
*     4807.038,N   Latitude 48 deg 07.038' N
-
 
95
*     01131.000,E  Longitude 11 deg 31.000' E
-
 
96
  1            Fix quality: 0 = invalid
-
 
97
                            1 = GPS fix (SPS)
-
 
98
                            2 = DGPS fix
-
 
99
                            3 = PPS fix
-
 
100
                            4 = Real Time Kinematic
-
 
101
                            5 = Float RTK
-
 
102
                            6 = estimated (dead reckoning) (2.3 feature)
-
 
103
                            7 = Manual input mode
-
 
104
                            8 = Simulation mode
-
 
105
*     08           Number of satellites being tracked
-
 
106
*     0.9          Horizontal dilution of position
-
 
107
*     545.4,M      Altitude, Meters, above mean sea level
-
 
108
*     46.9,M       Height of geoid (mean sea level) above WGS84
-
 
109
                  ellipsoid
-
 
110
  (empty field) time in seconds since last DGPS update
-
 
111
  (empty field) DGPS station ID number
-
 
112
  *47          the checksum data, always begins with *
-
 
113
 
-
 
114
 
-
 
115
  $GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
-
 
116
 
-
 
117
      RMC          Recommended Minimum sentence C
-
 
118
*     123519       Fix taken at 12:35:19 UTC
-
 
119
*     A            Status A=active or V=Void.
-
 
120
*     4807.038,N   Latitude 48 deg 07.038' N
-
 
121
*     01131.000,E  Longitude 11 deg 31.000' E
-
 
122
*     022.4        Speed over the ground in knots
-
 
123
*     084.4        Track angle in degrees True
-
 
124
*     230394       Date - 23rd of March 1994
-
 
125
*     003.1,W      Magnetic Variation
-
 
126
  *6A          The checksum data, always begins with *
-
 
127
*/
-
 
128
 
-
 
129
 
-
 
130
  var nmea_rmc_parts = Mbb_Clients[client_id]["LastNmea"]["RMC"].split(",");
-
 
131
 
-
 
132
  if (nmea_rmc_parts[2] == "A")
-
 
133
  {
-
 
134
    var nmea_gga_parts = Mbb_Clients[client_id]["LastNmea"]["GGA"].split(",");
-
 
135
    var position = {};
-
 
136
 
-
 
137
    position["Datetime"]            = "20" + nmea_rmc_parts[9].substr(4, 2) + "-" + nmea_rmc_parts[9].substr(2, 2) + "-" + nmea_rmc_parts[9].substr(0, 2);
-
 
138
    position["Datetime"]            += " " + nmea_rmc_parts[1].substr(0, 2) + ":" + nmea_rmc_parts[1].substr(2, 2) + ":" + nmea_rmc_parts[1].substr(4, 2) + " UTC";
-
 
139
 
-
 
140
    position["Latitude"]            = nmea_rmc_parts[3] + "," + nmea_rmc_parts[4];
-
 
141
    position["Longitude"]           = nmea_rmc_parts[5] + "," + nmea_rmc_parts[6];
-
 
142
    position["HorizontalDilution"]  = nmea_gga_parts[8];
-
 
143
   
-
 
144
    position["Altitude"]            = nmea_gga_parts[9] + "," + nmea_gga_parts[10];
-
 
145
    position["HeightOfGeoid"]       = nmea_gga_parts[11] + "," + nmea_gga_parts[12];
-
 
146
   
-
 
147
    position["SpeedKnots"]          = nmea_rmc_parts[7];
-
 
148
   
-
 
149
    position["Angle"]               = nmea_rmc_parts[8];
-
 
150
   
-
 
151
    if (nmea_rmc_parts[10] != "")
-
 
152
    {
-
 
153
      position["MagneticVariation"]   = nmea_rmc_parts[10] + "," + nmea_rmc_parts[11].substr(0, 1);
-
 
154
    }
-
 
155
   
-
 
156
    return position;
-
 
157
  }
-
 
158
 
-
 
159
  return false;
81
}
160
}
82
 
161