Subversion Repositories HomeAutomation

Rev

Rev 2014 | Rev 2091 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
1648 runge 1
 
1936 englund 2
Sensor_ModuleNames    = [ "DS18x20", "FOST02", "BusVoltage", "SimpleDTMF", "DHT11" ];
1648 runge 3
Sensor_Intervals      = function() { return [ 1, 5, 10, 15, 20 ]; };
4
Sensor_Aliases        = function() { return Module_GetAliasNames(Sensor_ModuleNames); };
5
Sensor_AvailableIds   = function() { return Module_GetAvailableIds(Sensor_ModuleNames); };
6
 
7
function Sensor_SetReportInterval(alias_name, interval)
8
{
9
    if (arguments.length < 2)
10
    {
1649 runge 11
        Log("\033[31mNot enough parameters given.\033[0m\n");
1648 runge 12
        return false;
13
    }
14
 
15
    var aliases_data = Module_ResolveAlias(alias_name, Sensor_ModuleNames);
16
    var found = false;
17
 
18
    for (var name in aliases_data)
19
    {
1765 linlun 20
        var variables = {"Time"     : interval };
1649 runge 21
        if (Module_SendMessage(aliases_data[name]["module_name"], aliases_data[name]["module_id"], "Report_Interval", variables))
22
        {
23
            Log("\033[32mCommand sent successfully to " + name + ".\033[0m\n");
24
        }
25
        else
26
        {
27
            Log("\033[31mFailed to send command to " + name + ".\033[0m\n");
28
        }
29
 
30
        found = true;
31
    }
32
 
33
    if (!found)
34
    {
35
        Log("\033[31mNo aliases by the name " + alias_name + " were applicable for this command.\033[0m\n");
36
        return false;
37
    }
38
 
39
    return true;
40
}
41
Console_RegisterCommand(Sensor_SetReportInterval, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, Sensor_Aliases(), Sensor_Intervals()); });
42
 
2050 arune 43
Sensor_OnNewPhonenumberFunctions = null;
44
 
45
function Sensor_RegisterToNewPhonenumber(alias_name, callback)
46
{
47
    if (Sensor_OnNewPhonenumberFunctions == null)
48
    {
49
        Sensor_OnNewPhonenumberFunctions = new Array();
50
    }
51
 
52
    if (!Sensor_OnNewPhonenumberFunctions[alias_name])
53
    {
54
        Sensor_OnNewPhonenumberFunctions[alias_name] = new Array();
55
    }
56
 
57
    Sensor_OnNewPhonenumberFunctions[alias_name].push(callback);
58
}
59
 
1649 runge 60
function Sensor_OnMessage(module_name, module_id, command, variables)
61
{
62
    if (in_array(Sensor_ModuleNames, module_name))
63
    {
64
        var aliases_data = Module_LookupAliases({
65
            "module_name" : module_name,
66
            "module_id"   : module_id,
67
            "group"       : false
68
        });
69
 
70
        switch (command)
71
        {
72
            case "Phonenumber":
73
            {
74
                for (var alias_name in aliases_data)
75
                {
2050 arune 76
                    if (variables["Number"].length > 6)
77
                    {
1899 linlun 78
                        var direction;
1905 linlun 79
                        var start = 0;
1899 linlun 80
                        if (variables["Number"].charAt(0) == 'A') {
81
                          direction = "in";
1905 linlun 82
                          start = 1;
1899 linlun 83
                        } else {
84
                            direction = "out";
85
                        }
1905 linlun 86
                          var endIndex = variables["Number"].indexOf('C');
87
                        if (endIndex == -1) {
88
                            endIndex = variables["Number"].length;
89
                         }
90
                         variables["Number"] = variables["Number"].substring(start,endIndex);
1899 linlun 91
                        var last_value = {};
92
                        var last_value_string = Storage_GetParameter("LastValues", alias_name);
1649 runge 93
 
1899 linlun 94
                        if (last_value_string)
95
                        {
96
                            last_value = eval("(" + last_value_string + ")");
97
                        }
98
 
99
                        last_value[command] = { "value" : variables["Number"], "timestamp" : get_time(), "direction" : direction };
100
 
101
                        Storage_SetParameter("LastValues", alias_name, JSON.stringify(last_value));
1807 linlun 102
 
1899 linlun 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");
107
                        Sensor_StoreNumberInPhonebook(variables["Number"]);
2050 arune 108
                        if (Sensor_OnNewPhonenumberFunctions[alias_name])
109
                        {
110
                            for (var n in Sensor_OnNewPhonenumberFunctions[alias_name])
111
                            {
112
                                /* Call callback with arguments number, direction */
113
                                Sensor_OnNewPhonenumberFunctions[alias_name][n](alias_name, variables["Number"], direction);
114
                            }
115
                        }
1899 linlun 116
                    }
2050 arune 117
                    else if (variables["Number"].length > 1)
118
                    {
119
                        if (variables["Number"] == "B00C")
120
                        {
121
                            /* 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])
125
                            {
126
                                for (var n in Sensor_OnNewPhonenumberFunctions[alias_name])
127
                                {
128
                                    /* Call callback with arguments number, direction */
129
                                    Sensor_OnNewPhonenumberFunctions[alias_name][n](alias_name, variables["Number"], "in");
130
                                }
131
                            }
132
                        }
133
                        else if (variables["Number"] == "B10C")
134
                        {
135
                            /* 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])
139
                            {
140
                                for (var n in Sensor_OnNewPhonenumberFunctions[alias_name])
141
                                {
142
                                    /* Call callback with arguments number, direction */
143
                                    Sensor_OnNewPhonenumberFunctions[alias_name][n](alias_name, variables["Number"], "in");
144
                                }
145
                            }
146
                        }
147
                        else
148
                        {
149
                            Log("Incoming phonecall, short number: "+variables["Number"]+" length: "+variables["Number"].length);
150
                        }
151
                    }
1649 runge 152
                }
153
                break;
154
            }
155
            case "Voltage":
156
            case "Temperature_Celsius":
1958 cougar 157
            {
158
                if ((module_name == "DS18x20") && (variables["Value"] == 85))
159
                {
160
                    Log("\033[31mDS18x20: Temperature conversion error: " + module_name + ":" + module_id + ", SensorId=" + variables["SensorId"] + "\033[0m");
161
                    break;
162
                }
163
            }
1649 runge 164
            case "Humidity_Percent":
165
            {
166
                for (var alias_name in aliases_data)
167
                {
168
                    if (aliases_data[alias_name]["specific"]["SensorId"] != variables["SensorId"])
169
                    {
170
                        continue;
171
                    }
172
 
173
                    var last_value = {};
1650 runge 174
                    var last_value_string = Storage_GetParameter("LastValues", alias_name);
1649 runge 175
 
176
                    if (last_value_string)
177
                    {
178
                        last_value = eval("(" + last_value_string + ")");
179
                    }
180
 
181
                    last_value[command] = { "value" : variables["Value"], "timestamp" : get_time() };
182
 
1650 runge 183
                    Storage_SetParameter("LastValues", alias_name, JSON.stringify(last_value));
1649 runge 184
                }
185
 
186
                break;
187
            }
188
        }
189
    }
190
}
191
Module_RegisterToOnMessage("all", Sensor_OnMessage);
1899 linlun 192
 
193
function Sensor_StoreNumberInPhonebook(number)
194
{
195
    var phonebook = Storage_GetJsonParamter("PhoneBook",number)
2050 arune 196
    if (!phonebook)
197
    {
198
        if (number.charAt(0) != '0')
199
        {
200
            if (typeof sensorDefaultPhoneAreaCode === 'undefined')
201
            {
2014 linlun 202
                Log("\033[31mOnlinePhonebook: please add sensorDefaultPhoneAreaCode = yourAreaCode to autostart.js, defaulting to 031\033[0m\n");  
203
                number = "031"+number;
2050 arune 204
            }
205
            else
206
            {
2014 linlun 207
                number = sensorDefaultPhoneAreaCode+number;
208
            }
1900 linlun 209
        }
2050 arune 210
 
2014 linlun 211
        var persons = new Array();
2050 arune 212
        url = "wap.eniro.se/query?search_word=" + number + "&what=mobwp";
213
        Log("\033[31mURL: http://"+url+"\033[0m\n");
214
        Http_Request(url,
2014 linlun 215
            function(socket_id, result, header, content_data) {
216
                if (result.indexOf("200 OK") != -1)
217
                {
218
                    //Log("\033[31mOnlinePhonebook: result was: " + content_data + "\033[0m\n");
219
                    var lines = content_data.split("\n");
220
 
221
                    var endString = "<anchor>Tillbaka<prev/></anchor>";
222
                    var nameStartString = "<td class=\"hTd2\">";
223
                    var nameEndString = "</table>";
224
                    for (var n = 1; n < lines.length; n++)
225
                    {
226
                        var line = lines[n].trim("\n");
227
 
228
                        if (line.indexOf(endString) != -1)
229
                        {
230
                            break;
231
                        }
232
                        if (line.indexOf(nameStartString) != -1)
233
                        {
234
                            line = lines[n+1].trim("\n");
235
                            splitted = line.split("b>");
236
                            persons[persons.length] = splitted[1].substr(0, splitted[1].length -2);
237
                            break;
238
                        }
239
 
240
                    }
241
 
242
                    //Log("\033[31mOnlinePhonebook: Line: " + lines[1] + "\033[0m\n");
243
                    //Log("\033[31mOnlinePhonebook: Line: " + lines[2] + "\033[0m\n");
244
                    //Log("\033[31mOnlinePhonebook: Line: " + lines[3] + "\033[0m\n");
2050 arune 245
                    if (persons.length > 0)
246
                    {
2014 linlun 247
                        Storage_SetJsonParameter("PhoneBook", number, persons);
248
 
249
                        //CAll all listeners!
250
                        //....
251
 
252
                        Log("\033[31mOnlinePhonebook: Found: " + JSON.stringify(persons) + "\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
            }
260
        );
261
        if (persons.length == 0) {
2050 arune 262
            if (typeof sensorRKSEEK_API === 'undefined')
263
            {
2014 linlun 264
              ;
2050 arune 265
            }
266
            else
267
            {
2014 linlun 268
                url = "rkseek.oblivioncreations.se/?client="+sensorRKSEEK_API+"&n=" + number + "&out=text";
2050 arune 269
                Log("\033[31mURL: http://"+url+"\033[0m\n");
270
                Http_Request(url,
271
                    function(socket_id, result, header, content_data)
272
                    {
2014 linlun 273
                        var persons = new Array();
274
                        if (result.indexOf("200 OK") != -1)
275
                        {
276
                            //Log("\033[31mOnlinePhonebook: result was: " + content_data + "\033[0m\n");
277
                            var lines = content_data.split("\n");
278
                            //Log("\033[31mOnlinePhonebook: Line: " + lines[1] + "\033[0m\n");
279
                            //Log("\033[31mOnlinePhonebook: Line: " + lines[2] + "\033[0m\n");
280
                            //Log("\033[31mOnlinePhonebook: Line: " + lines[3] + "\033[0m\n");
281
                            if (lines[2].length > 0) {
282
                                persons = lines[2];
283
                                Storage_SetJsonParameter("PhoneBook", number, persons);
284
                                Log("\033[31mOnlinePhonebook: Found: " + JSON.stringify(persons) + "\033[0m\n");
285
                            }
286
                        }
287
                        else
288
                        {
289
                            Log("\033[31mOnlinePhonebook: Failed to do name lookup, result was: " + result + "\033[0m\n");
290
                        }
291
                    }
292
                );
293
            }
294
        }
295
 
296
        /*
1899 linlun 297
        Http_Request("wap.hitta.se/default.aspx?Who=" + number + "&Where=&PageAction=White",
298
            function(socket_id, result, header, content_data) {
299
                var persons = new Array();
300
                if (result.indexOf("200 OK") != -1)
301
                {
302
                    var endString = "<anchor>Tillbaka<prev/></anchor>";
303
                    var nameStartString = " title=\"Link\">";
304
                    var nameEndString = "</a>";
305
 
306
                    var lines = content_data.split("<br/>");
307
 
308
                    for (var n = 1; n < lines.length; n++)
309
                    {
310
                        var line = lines[n].trim(" \n");
311
 
312
                        if (line.indexOf(endString) != -1)
313
                        {
314
                            break;
315
                        }
316
                        var pos = line.indexOf(nameStartString + (persons.length+1) + ".");
317
 
318
                        if (pos != -1)
319
                        {
320
                            pos += nameStartString.length + 2
321
                            persons[persons.length] = line.substr(pos, line.length-pos-nameEndString.length).html_entity_decode().replace("  ", " ");
322
                        }
323
                    }
324
                    if (persons.length > 0) {
325
                        Storage_SetJsonParameter("PhoneBook", number, persons);
326
 
327
                        //CAll all listeners!
328
                        //....
329
 
330
                        Log("\033[31mOnlinePhonebook: Found: " + JSON.stringify(persons) + "\033[0m\n");
331
                    }
332
                }
333
                else
334
                {
335
                    Log("\033[31mOnlinePhonebook: Failed to do name lookup, result was: " + result + "\033[0m\n");
336
                }
337
            }
338
        );
2014 linlun 339
        */
1899 linlun 340
    } else {
341
        Log("Number already stored\n");
342
    }
343
}
344
Console_RegisterCommand(Sensor_StoreNumberInPhonebook, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args); });
345
 
346
 
347