Subversion Repositories HomeAutomation

Rev

Rev 2050 | Rev 2092 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 2050 Rev 2091
Line 38... Line 38...
38
   
38
 
39
    return true;
39
    return true;
40
}
40
}
41
Console_RegisterCommand(Sensor_SetReportInterval, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, Sensor_Aliases(), Sensor_Intervals()); });
41
Console_RegisterCommand(Sensor_SetReportInterval, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, Sensor_Aliases(), Sensor_Intervals()); });
42
 
42
 
43
Sensor_OnNewPhonenumberFunctions = null;
43
Sensor_OnNewPhonenumberFunctions = [];
44
 
44
 
45
function Sensor_RegisterToNewPhonenumber(alias_name, callback)
45
function Sensor_RegisterToNewPhonenumber(alias_name, callback)
46
{
46
{
47
    if (Sensor_OnNewPhonenumberFunctions == null)
47
  if (!Sensor_OnNewPhonenumberFunctions[alias_name])
48
    {
48
  {
49
        Sensor_OnNewPhonenumberFunctions = new Array();
49
    Sensor_OnNewPhonenumberFunctions[alias_name] = [];
50
    }
50
  }
51
   
51
 
52
    if (!Sensor_OnNewPhonenumberFunctions[alias_name])
-
 
53
    {
-
 
54
        Sensor_OnNewPhonenumberFunctions[alias_name] = new Array();
-
 
55
    }
-
 
56
   
-
 
57
    Sensor_OnNewPhonenumberFunctions[alias_name].push(callback);
52
  Sensor_OnNewPhonenumberFunctions[alias_name].push(callback);
58
}
53
}
59
 
54
 
60
function Sensor_OnMessage(module_name, module_id, command, variables)
55
function Sensor_OnMessage(module_name, module_id, command, variables)
61
{
56
{
62
    if (in_array(Sensor_ModuleNames, module_name))
57
  if (in_array(Sensor_ModuleNames, module_name))
Line 69... Line 64...
69
       
64
 
70
        switch (command)
65
    switch (command)
71
        {
66
    {
72
            case "Phonenumber":
67
      case "Phonenumber":
73
            {
68
      {
74
                for (var alias_name in aliases_data)
69
        for (var alias_name in aliases_data)
75
                {
70
        {
76
                    if (variables["Number"].length > 6)
71
          var number = variables["Number"];
77
                    {
-
 
78
                        var direction;
-
 
79
                        var start = 0;
72
          var incommingCall = true;
-
 
73
 
80
                        if (variables["Number"].charAt(0) == 'A') {
74
          if (variables["Number"].length > 6)
81
                          direction = "in";
75
          {
-
 
76
            /* A seems to mean it is an outgoing call! */
82
                          start = 1;
77
            if (number.charAt(0) === 'A')
83
                        } else {
78
            {
84
                            direction = "out";
79
              incommingCall = false;
85
                        }
80
 
86
                          var endIndex = variables["Number"].indexOf('C');
-
 
87
                        if (endIndex == -1) {
81
              /* Remove leading A */
88
                            endIndex = variables["Number"].length;
82
              number = number.substring(1);
89
                         }
83
            }
90
                         variables["Number"] = variables["Number"].substring(start,endIndex);
84
            else /* Incomming call */
91
                        var last_value = {};
85
            {
92
                        var last_value_string = Storage_GetParameter("LastValues", alias_name);
86
              incommingCall = true;
93
                   
87
 
-
 
88
              /* Remove leading D if needed */
94
                        if (last_value_string)
89
              if (number.charAt(0) === 'D')
95
                        {
90
              {
96
                            last_value = eval("(" + last_value_string + ")");
91
                number = number.substring(1);
-
 
92
              }
97
                        }
93
            }
98
                       
94
 
99
                        last_value[command] = { "value" : variables["Number"], "timestamp" : get_time(), "direction" : direction };
95
            /* A number can have a trailing C */
100
                       
-
 
101
                        Storage_SetParameter("LastValues", alias_name, JSON.stringify(last_value));
96
            var endIndex = number.indexOf('C');
102
 
97
 
103
                        var all_numbers = Storage_GetParameters("PhoneCalls");
-
 
104
                        var newString = "{\"number\":\"" + variables["Number"] + "\",\"module\":\"" + alias_name + "\",\"direction\":\"" + direction + "\"}";
-
 
105
                        Storage_SetParameter("PhoneCalls", get_time(), newString);
-
 
106
                        Log("New number: "+newString +"\n");
98
            if (endIndex !== -1)
107
                        Sensor_StoreNumberInPhonebook(variables["Number"]);
-
 
108
                        if (Sensor_OnNewPhonenumberFunctions[alias_name])
-
 
109
                        {
99
            {
110
                            for (var n in Sensor_OnNewPhonenumberFunctions[alias_name])
100
              /* Remove trailing C */
111
                            {
-
 
112
                                /* Call callback with arguments number, direction */
101
              number = number.substring(0, endIndex);
113
                                Sensor_OnNewPhonenumberFunctions[alias_name][n](alias_name, variables["Number"], direction);
-
 
114
                            }
102
            }
115
                        }
-
 
116
                    }
103
          }
117
                    else if (variables["Number"].length > 1)
-
 
118
                    {
-
 
119
                        if (variables["Number"] == "B00C")
104
          else if (number == "B00C")
120
                        {
105
          {
121
                            /* Unknown number */
106
            /* Unknown number */
122
                            var newString = "{\"number\":\"" + variables["Number"] + "\",\"module\":\"" + alias_name + "\",\"direction\":\"" + "in" + "\"}";
-
 
123
                            Storage_SetParameter("PhoneCalls", get_time(), newString);
-
 
124
                            if (Sensor_OnNewPhonenumberFunctions[alias_name])
107
            number = "Unknown";
125
                            {
-
 
126
                                for (var n in Sensor_OnNewPhonenumberFunctions[alias_name])
108
            incommingCall = true;
127
                                {
-
 
128
                                    /* Call callback with arguments number, direction */
-
 
129
                                    Sensor_OnNewPhonenumberFunctions[alias_name][n](alias_name, variables["Number"], "in");
-
 
130
                                }
-
 
131
                            }
-
 
132
                        }
109
          }
133
                        else if (variables["Number"] == "B10C")
110
          else if (number == "B10C")
134
                        {
111
          {
135
                            /* Secret/protected number */
112
            /* Secret/protected number */
136
                            var newString = "{\"number\":\"" + variables["Number"] + "\",\"module\":\"" + alias_name + "\",\"direction\":\"" + "in" + "\"}";
-
 
137
                            Storage_SetParameter("PhoneCalls", get_time(), newString);
-
 
138
                            if (Sensor_OnNewPhonenumberFunctions[alias_name])
113
            number = "Protected";
139
                            {
-
 
140
                                for (var n in Sensor_OnNewPhonenumberFunctions[alias_name])
114
            incommingCall = true;
141
                                {
-
 
142
                                    /* Call callback with arguments number, direction */
-
 
143
                                    Sensor_OnNewPhonenumberFunctions[alias_name][n](alias_name, variables["Number"], "in");
-
 
144
                                }
-
 
145
                            }
115
          }
-
 
116
          else
-
 
117
          {
-
 
118
            Log("DTMF decoded number is to short, number: \"" + number + "\", length: " + number.length);
-
 
119
            return;
-
 
120
          }
-
 
121
 
-
 
122
 
-
 
123
          /* Store number and direction in last values */
-
 
124
          var lastValue = {};
-
 
125
          var lastValueString = Storage_GetParameter("LastValues", alias_name);
-
 
126
 
-
 
127
          if (lastValueString)
-
 
128
          {
-
 
129
            lastValue = JSON.parse(lastValueString);
146
                        }
130
          }
-
 
131
 
-
 
132
          var timestamp = get_time();
-
 
133
 
-
 
134
          lastValue["Phonenumber"] = { "value" : number, "timestamp" : timestamp };
-
 
135
          lastValue["Direction"] = { "value" : incommingCall ? "in" : "out", "timestamp" : timestamp };
-
 
136
 
-
 
137
          Storage_SetParameter("LastValues", alias_name, JSON.stringify(lastValue));
-
 
138
 
-
 
139
 
-
 
140
          /* Store number in phone call history */
-
 
141
          var newValue = { "number" : number, "direction" : incommingCall ? "in" : "out", "module" : alias_name, "names" : [], "timestamp" : timestamp };
-
 
142
 
-
 
143
          Storage_SetParameter("PhoneCalls", timestamp, JSON.stringify(newValue));
-
 
144
 
-
 
145
 
-
 
146
          /* Log the number */
-
 
147
          Log("New number: " + number + ", direction: " + (incommingCall ? "in" : "out"));
-
 
148
 
-
 
149
 
-
 
150
          /* Lookup name */
-
 
151
          Sensor_StoreNumberInPhonebook(number, timestamp);
-
 
152
 
-
 
153
 
-
 
154
          /* Call any potential subscribers */
-
 
155
          if (Sensor_OnNewPhonenumberFunctions[alias_name])
147
                        else
156
          {
-
 
157
            for (var n in Sensor_OnNewPhonenumberFunctions[alias_name])
148
                        {
158
            {
-
 
159
              /* Call callback with arguments number, direction */
149
                            Log("Incoming phonecall, short number: "+variables["Number"]+" length: "+variables["Number"].length);
160
              Sensor_OnNewPhonenumberFunctions[alias_name][n](alias_name, number, incommingCall ? "in" : "out");
150
                        }
161
            }
151
                    }
162
          }
152
                }
163
        }
153
                break;
164
        break;
154
            }
165
      }
Line 188... Line 199...
188
        }
199
    }
189
    }
200
  }
190
}
201
}
191
Module_RegisterToOnMessage("all", Sensor_OnMessage);
202
Module_RegisterToOnMessage("all", Sensor_OnMessage);
192
 
203
 
193
function Sensor_StoreNumberInPhonebook(number)
204
function Sensor_StoreNumberInPhonebook(number, timestamp)
194
{
205
{
195
    var phonebook = Storage_GetJsonParamter("PhoneBook",number)
206
  var phonebookNumbers = Storage_GetJsonParamter("PhoneBook", number)
-
 
207
 
196
    if (!phonebook)
208
  if (!phonebookNumbers)
197
    {
209
  {
198
        if (number.charAt(0) != '0')
210
    if (number.charAt(0) != '0')
199
        {
211
    {
200
            if (typeof sensorDefaultPhoneAreaCode === 'undefined')
212
      if (typeof sensorDefaultPhoneAreaCode === 'undefined')
201
            {
213
      {
Line 206... Line 218...
206
            {
218
      {
207
                number = sensorDefaultPhoneAreaCode+number;
219
          number = sensorDefaultPhoneAreaCode + number;
208
            }
220
      }
209
        }
221
    }
210
       
222
 
211
        var persons = new Array();
223
    phonebookNumbers = [];
-
 
224
 
212
        url = "wap.eniro.se/query?search_word=" + number + "&what=mobwp";
225
    url = "wap.eniro.se/query?search_word=" + number + "&what=mobwp";
213
        Log("\033[31mURL: http://"+url+"\033[0m\n");
226
    //Log("\033[31mURL: http://"+url+"\033[0m\n");
214
        Http_Request(url,
-
 
-
 
227
 
215
            function(socket_id, result, header, content_data) {
228
    Http_Request(url, function(socket_id, result, header, content_data)
-
 
229
    {
-
 
230
      //Log("\033[31mOnlinePhonebook-eniro: result was: " + result + "\033[0m\n");
-
 
231
      //Log("\033[31mOnlinePhonebook-eniro: content was: " + content_data + "\033[0m\n");
-
 
232
 
216
                if (result.indexOf("200 OK") != -1)
233
      if (result.indexOf("200 OK") != -1)
217
                {
234
      {
218
                    //Log("\033[31mOnlinePhonebook: result was: " + content_data + "\033[0m\n");
-
 
-
 
235
 
219
                    var lines = content_data.split("\n");
236
        var lines = content_data.split("\n");
220
                   
237
 
221
                    var endString = "<anchor>Tillbaka<prev/></anchor>";
238
        var endString = "<anchor>Tillbaka<prev/></anchor>";
222
                    var nameStartString = "<td class=\"hTd2\">";
239
        var nameStartString = "<td class=\"hTd2\">";
223
                    var nameEndString = "</table>";
240
        var nameEndString = "</table>";
-
 
241
 
224
                    for (var n = 1; n < lines.length; n++)
242
        for (var n = 1; n < lines.length; n++)
225
                    {
243
        {
226
                        var line = lines[n].trim("\n");
244
          var line = lines[n].trim("\n");
227
                       
245
 
228
                        if (line.indexOf(endString) != -1)
246
          if (line.indexOf(endString) != -1)
229
                        {
247
          {
230
                            break;
248
            break;
231
                        }
249
          }
-
 
250
 
232
                        if (line.indexOf(nameStartString) != -1)
251
          if (line.indexOf(nameStartString) != -1)
233
                        {
252
          {
234
                            line = lines[n+1].trim("\n");
253
            line = lines[n + 1].trim("\n");
235
                            splitted = line.split("b>");
254
            splitted = line.split("b>");
-
 
255
 
236
                            persons[persons.length] = splitted[1].substr(0, splitted[1].length -2);
256
            phonebookNumbers.push(splitted[1].substr(0, splitted[1].length - 2));
237
                            break;
257
            break;
238
                        }
258
          }
239
                       
-
 
240
                    }
259
        }
241
                   
260
 
242
                    //Log("\033[31mOnlinePhonebook: Line: " + lines[1] + "\033[0m\n");
261
        //Log("\033[31mOnlinePhonebook: Line: " + lines[1] + "\033[0m\n");
243
                    //Log("\033[31mOnlinePhonebook: Line: " + lines[2] + "\033[0m\n");
262
        //Log("\033[31mOnlinePhonebook: Line: " + lines[2] + "\033[0m\n");
244
                    //Log("\033[31mOnlinePhonebook: Line: " + lines[3] + "\033[0m\n");
263
        //Log("\033[31mOnlinePhonebook: Line: " + lines[3] + "\033[0m\n");
245
                    if (persons.length > 0)
264
        if (phonebookNumbers.length > 0)
246
                    {
265
        {
247
                        Storage_SetJsonParameter("PhoneBook", number, persons);
266
          Storage_SetJsonParameter("PhoneBook", number, phonebookNumbers);
-
 
267
 
-
 
268
          Sensor_UpdateNameInPhonecalls(timestamp, phonebookNumbers);
248
                       
269
 
249
                        //CAll all listeners!
270
          //CAll all listeners!
250
                        //....
271
          //....
251
                       
272
 
252
                        Log("\033[31mOnlinePhonebook: Found: " + JSON.stringify(persons) + "\033[0m\n");
273
          Log("\033[31mOnlinePhonebook-eniro: Found: " + JSON.stringify(phonebookNumbers) + "\033[0m\n");
253
                    }  
-
 
254
                }
-
 
255
                else
-
 
256
                {
-
 
257
                    Log("\033[31mOnlinePhonebook: Failed to do name lookup, result was: " + result + "\033[0m\n");
-
 
258
                }
-
 
259
            }
274
        }
260
        );
-
 
261
        if (persons.length == 0) {
-
 
262
            if (typeof sensorRKSEEK_API === 'undefined')
-
 
263
            {
-
 
264
              ;
-
 
265
            }
275
      }
266
            else
276
      else
-
 
277
      {
-
 
278
        Log("\033[31mOnlinePhonebook-eniro: Failed to do name lookup, result was: " + result + "\033[0m\n");
-
 
279
      }
-
 
280
    });
-
 
281
 
-
 
282
    if (phonebookNumbers.length == 0)
-
 
283
    {
-
 
284
      if (typeof sensorRKSEEK_API !== 'undefined')
267
            {
285
      {
268
                url = "rkseek.oblivioncreations.se/?client="+sensorRKSEEK_API+"&n=" + number + "&out=text";
286
        url = "rkseek.oblivioncreations.se/?client="+sensorRKSEEK_API+"&n=" + number + "&out=text";
269
                Log("\033[31mURL: http://"+url+"\033[0m\n");
287
        Log("\033[31mURL: http://"+url+"\033[0m\n");
270
                Http_Request(url,
-
 
-
 
288
 
271
                    function(socket_id, result, header, content_data)
289
        Http_Request(url, function(socket_id, result, header, content_data)
272
                    {
290
        {
273
                        var persons = new Array();
291
          phonebookNumbers = [];
-
 
292
 
274
                        if (result.indexOf("200 OK") != -1)
293
          if (result.indexOf("200 OK") != -1)
275
                        {
294
          {
276
                            //Log("\033[31mOnlinePhonebook: result was: " + content_data + "\033[0m\n");
295
            //Log("\033[31mOnlinePhonebook: result was: " + content_data + "\033[0m\n");
277
                            var lines = content_data.split("\n");
296
            var lines = content_data.split("\n");
278
                            //Log("\033[31mOnlinePhonebook: Line: " + lines[1] + "\033[0m\n");
297
            //Log("\033[31mOnlinePhonebook: Line: " + lines[1] + "\033[0m\n");
279
                            //Log("\033[31mOnlinePhonebook: Line: " + lines[2] + "\033[0m\n");
298
            //Log("\033[31mOnlinePhonebook: Line: " + lines[2] + "\033[0m\n");
280
                            //Log("\033[31mOnlinePhonebook: Line: " + lines[3] + "\033[0m\n");
299
            //Log("\033[31mOnlinePhonebook: Line: " + lines[3] + "\033[0m\n");
281
                            if (lines[2].length > 0) {
300
            if (lines[2].length > 0)
-
 
301
            {
282
                                persons = lines[2];
302
              phonebookNumbers = lines[2];
283
                                Storage_SetJsonParameter("PhoneBook", number, persons);
303
              Storage_SetJsonParameter("PhoneBook", number, phonebookNumbers);
-
 
304
 
-
 
305
              Sensor_UpdateNameInPhonecalls(timestamp, phonebookNumbers);
-
 
306
 
284
                                Log("\033[31mOnlinePhonebook: Found: " + JSON.stringify(persons) + "\033[0m\n");
307
              Log("\033[31mOnlinePhonebook-rseek: Found: " + JSON.stringify(phonebookNumbers) + "\033[0m\n");
285
                            }
308
            }
286
                        }
309
          }
287
                        else
310
          else
288
                        {
311
          {
289
                            Log("\033[31mOnlinePhonebook: Failed to do name lookup, result was: " + result + "\033[0m\n");
312
            Log("\033[31mOnlinePhonebook-rseek: Failed to do name lookup, result was: " + result + "\033[0m\n");
290
                        }
313
          }
291
                    }
-
 
292
                );
314
        });
293
            }
315
      }
294
        }
316
    }
295
       
317
 
296
        /*
318
        /*
297
        Http_Request("wap.hitta.se/default.aspx?Who=" + number + "&Where=&PageAction=White",
319
        Http_Request("wap.hitta.se/default.aspx?Who=" + number + "&Where=&PageAction=White",
Line 300... Line 322...
300
                if (result.indexOf("200 OK") != -1)
322
                if (result.indexOf("200 OK") != -1)
301
                {
323
                {
302
                    var endString = "<anchor>Tillbaka<prev/></anchor>";
324
                    var endString = "<anchor>Tillbaka<prev/></anchor>";
303
                    var nameStartString = " title=\"Link\">";
325
                    var nameStartString = " title=\"Link\">";
304
                    var nameEndString = "</a>";
326
                    var nameEndString = "</a>";
305
               
327
 
306
                    var lines = content_data.split("<br/>");
328
                    var lines = content_data.split("<br/>");
307
                   
329
 
308
                    for (var n = 1; n < lines.length; n++)
330
                    for (var n = 1; n < lines.length; n++)
309
                    {
331
                    {
310
                        var line = lines[n].trim(" \n");
332
                        var line = lines[n].trim(" \n");
311
                       
333
 
312
                        if (line.indexOf(endString) != -1)
334
                        if (line.indexOf(endString) != -1)
313
                        {
335
                        {
314
                            break;
336
                            break;
315
                        }
337
                        }
316
                        var pos = line.indexOf(nameStartString + (persons.length+1) + ".");
338
                        var pos = line.indexOf(nameStartString + (persons.length+1) + ".");
317
                       
339
 
318
                        if (pos != -1)
340
                        if (pos != -1)
319
                        {
341
                        {
320
                            pos += nameStartString.length + 2
342
                            pos += nameStartString.length + 2
321
                            persons[persons.length] = line.substr(pos, line.length-pos-nameEndString.length).html_entity_decode().replace("  ", " ");
343
                            persons[persons.length] = line.substr(pos, line.length-pos-nameEndString.length).html_entity_decode().replace("  ", " ");
322
                        }
344
                        }
Line 324... Line 346...
324
                    if (persons.length > 0) {
346
                    if (persons.length > 0) {
325
                        Storage_SetJsonParameter("PhoneBook", number, persons);
347
                        Storage_SetJsonParameter("PhoneBook", number, persons);
326
                       
348
 
327
                        //CAll all listeners!
349
                        //CAll all listeners!
328
                        //....
350
                        //....
329
                       
351
 
330
                        Log("\033[31mOnlinePhonebook: Found: " + JSON.stringify(persons) + "\033[0m\n");
352
                        Log("\033[31mOnlinePhonebook: Found: " + JSON.stringify(persons) + "\033[0m\n");
331
                    }
353
                    }
332
                }
354
                }
333
                else
355
                else
334
                {
356
                {
335
                    Log("\033[31mOnlinePhonebook: Failed to do name lookup, result was: " + result + "\033[0m\n");
357
                    Log("\033[31mOnlinePhonebook: Failed to do name lookup, result was: " + result + "\033[0m\n");
336
                }
358
                }
337
            }
359
            }
338
        );
360
        );
339
        */
361
        */
-
 
362
 
-
 
363
  }
340
    } else {
364
  else
-
 
365
  {
341
        Log("Number already stored\n");
366
    //Log("Number already stored\n");
-
 
367
 
-
 
368
    Sensor_UpdateNameInPhonecalls(timestamp, phonebookNumbers);
342
    }
369
  }
343
}
370
}
344
Console_RegisterCommand(Sensor_StoreNumberInPhonebook, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args); });
371
Console_RegisterCommand(Sensor_StoreNumberInPhonebook, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args); });
345
 
372
 
-
 
373
function Sensor_UpdateNameInPhonecalls(timestamp, numbers)
-
 
374
{
-
 
375
  if (numbers.length > 0)
-
 
376
  {
-
 
377
    var lastValueString = Storage_GetParameter("PhoneCalls", timestamp);
346
 
378
 
-
 
379
    if (lastValueString)
-
 
380
    {
-
 
381
      var lastValue = JSON.parse(lastValueString);
-
 
382
 
-
 
383
      lastValue.names = numbers;
-
 
384
 
-
 
385
      Storage_SetParameter("PhoneCalls", timestamp, JSON.stringify(lastValue));
-
 
386
    }
-
 
387
  }
-
 
388
}
347
 
389