Subversion Repositories HomeAutomation

Rev

Rev 1646 | Rev 1648 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 1646 Rev 1647
Line 1... Line 1...
1
 
1
 
2
Require("plugin/storage.js");
2
Require("plugin/storage.js");
-
 
3
 
-
 
4
function Module_CreateAliasAutoComplete(args)
-
 
5
{
-
 
6
    // args[0] == command name
-
 
7
    var arg_index = args.length - 2;
-
 
8
   
-
 
9
    if (arg_index == 0)
-
 
10
    {
-
 
11
        return Module_GetAliasNames();
-
 
12
    }
-
 
13
    else if (arg_index == 1)
-
 
14
    {
-
 
15
        return Module_GetNames();
-
 
16
    }
-
 
17
    else if (arg_index == 2)
-
 
18
    {
-
 
19
        return Module_GetAvailableIds([ args[2] ])
-
 
20
    }
-
 
21
   
-
 
22
    return [];
-
 
23
}
-
 
24
 
-
 
25
function Module_CreateAlias(alias_name, module_name, module_id, specific)
-
 
26
{
-
 
27
    // TODO Check arguments
-
 
28
   
-
 
29
    var specific_list = {};
-
 
30
   
-
 
31
    if (specific)
-
 
32
    {
-
 
33
        var specific_parts = split(",", specific);
-
 
34
       
-
 
35
        // TODO: Check length
-
 
36
       
-
 
37
        for (var index in specific_parts)
-
 
38
        {
-
 
39
            var parts = split("=", specific_parts[index]);
-
 
40
           
-
 
41
            // TODO: Check length
-
 
42
           
-
 
43
            specific_list[parts[0]] = parts[1];
-
 
44
        }
-
 
45
    }
-
 
46
   
-
 
47
    var alias_data = {
-
 
48
        "group"       : false,
-
 
49
        "name"        : alias_name,
-
 
50
        "module_name" : module_name,
-
 
51
        "module_id"   : module_id,
-
 
52
        "specific"    : specific_list
-
 
53
    };
-
 
54
   
-
 
55
    return Storage_SetParameter("alias", alias_name, JSON.stringify(alias_data));
-
 
56
}
-
 
57
Console_RegisterCommand(Module_CreateAlias, Module_CreateAliasAutoComplete);
3
 
58
 
4
function Module_CreateAliasGroupAutoComplete(args)
59
function Module_CreateAliasGroupAutoComplete(args)
5
{
60
{
6
    // args[0] == command name
61
    // args[0] == command name
7
    var arg_index = args.length - 2;
62
    var arg_index = args.length - 2;
Line 10... Line 65...
10
    {
65
    {
11
        return Module_GetAliasNames();
66
        return Module_GetAliasNames();
12
    }
67
    }
13
    else if (arg_index == 1)
68
    else if (arg_index == 1)
14
    {
69
    {
15
        return [ "Dimmer230", "irTransmit" ];
70
        return Module_GetNames();
16
    }
71
    }
17
    else if (arg_index >= 2)
72
    else if (arg_index >= 2)
18
    {
73
    {
19
        return Module_GetAliasNames([ args[2] ])
74
        return Module_GetAliasNames([ args[2] ])
20
    }
75
    }
Line 57... Line 112...
57
    return Storage_SetParameter("alias", alias_group_name, JSON.stringify(alias_data));
112
    return Storage_SetParameter("alias", alias_group_name, JSON.stringify(alias_data));
58
}
113
}
59
Console_RegisterCommand(Module_CreateAliasGroup, Module_CreateAliasGroupAutoComplete);
114
Console_RegisterCommand(Module_CreateAliasGroup, Module_CreateAliasGroupAutoComplete);
60
 
115
 
61
function Module_ResolveAlias(alias_name, filter_module_names)
116
function Module_ResolveAlias(alias_name, filter_module_names)
62
{
117
{
63
    var aliases_data = {};
118
    var aliases_data = {};
64
    var alias_data_string = Storage_GetParameter("alias", alias_name);
119
    var alias_data_string = Storage_GetParameter("alias", alias_name);
65
   
120
   
66
    if (alias_data_string)
121
    if (alias_data_string)
67
    {
122
    {
Line 144... Line 199...
144
    var available_modules = ModuleExport_GetAvailableModules();
199
    var available_modules = ModuleExport_GetAvailableModules();
145
   
200
   
146
    for (var n in available_modules)
201
    for (var n in available_modules)
147
    {
202
    {
148
        var id_parts = available_modules[n].split(":", 2);
203
        var id_parts = available_modules[n].split(":", 2);
149
       
204
       
150
        if (in_array(filter_module_names, id_parts[0]))
205
        if (in_array(filter_module_names, id_parts[0]))
151
        {
206
        {
152
            result_list.push(id_parts[1]);
207
            result_list.push(id_parts[1]);
153
        }
208
        }
154
    }
209
    }
155
   
210
   
156
    return result_list;
211
    return result_list;
-
 
212
}
-
 
213
 
-
 
214
function Module_GetNames()
-
 
215
{
-
 
216
    return [ "Dimmer230", "irTransmit" ];
157
}
217
}
158
 
218
 
159
function Module_SendMessage(module_name, module_id, command, variables)
219
function Module_SendMessage(module_name, module_id, command, variables)
160
{
220
{
161
    var args = [];
221
    var args = [];
162
   
222
   
163
    args.push(module_name + ":" + module_id);
223
    args.push(module_name + ":" + module_id);
164
    args.push(command);
224
    args.push(command);
165
   
225
   
166
    var length = 0;
226
    var length = 0;
167
    for (var key in variables)
227
    for (var key in variables)
168
    {
228
    {
169
        length++;
229
        length++;
170
    }
230
    }
171
   
231
   
172
    args.push(length);
232
    args.push(length);
173
   
233
   
174
    for (var key in variables)
234
    for (var key in variables)
175
    {
235
    {
176
        args.push(key);
236
        args.push(key);
177
        args.push(variables[key]);
237
        args.push(variables[key]);
178
    }
238
    }
179
   
239
   
180
    return ModuleExport_SendMessage.apply(null, Array.prototype.slice.call(args, 0));
240
    return ModuleExport_SendMessage.apply(null, Array.prototype.slice.call(args, 0));
181
}
241
}
182
 
242
 
183
var Module_MessageAliasLookupFunctions = {};
-
 
184
var Module_OnChangeFunctions = {};
243
var Module_OnChangeFunctions = {};
185
var Module_OnMessageFunctions = {};
244
var Module_OnMessageFunctions = {};
186
 
245
 
187
function Module_RegisterMessageAliasLookup(module_name, callback)
-
 
188
{
-
 
189
    Module_MessageAliasLookupFunctions[module_name] = callback;
-
 
190
}
-
 
191
 
-
 
192
function Module_RegisterToOnChange(alias_name, callback)
246
function Module_RegisterToOnChange(alias_name, callback)
193
{
247
{
194
    if (!Module_OnChangeFunctions[alias_name])
248
    if (!Module_OnChangeFunctions[alias_name])
195
    {
249
    {
196
        Module_OnChangeFunctions[alias_name] = [];
250
        Module_OnChangeFunctions[alias_name] = [];
197
    }
251
    }
198
   
252
   
199
    Module_OnChangeFunctions[alias_name].push(callback);
253
    Module_OnChangeFunctions[alias_name].push(callback);
200
}
254
}
201
 
255
 
202
function Module_RegisterToOnMessage(alias_name, callback)
256
function Module_RegisterToOnMessage(alias_name, callback)
203
{
257
{
204
    if (!Module_OnMessageFunctions[alias_name])
258
    if (!Module_OnMessageFunctions[alias_name])
205
    {
259
    {
206
        Module_OnMessageFunctions[alias_name] = [];
260
        Module_OnMessageFunctions[alias_name] = [];
207
    }
261
    }
208
   
262
   
209
    Module_OnMessageFunctions[alias_name].push(callback);
263
    Module_OnMessageFunctions[alias_name].push(callback);
210
}
264
}
211
 
265
 
212
function Module_OnMessage(full_id, command, variables)
266
function Module_OnMessage(full_id, command, variables)
213
{
267
{
214
    var id_parts = full_id.split(":", 2);
268
    var id_parts = full_id.split(":", 2);
215
    var aliases_data = {};
269
    var aliases_data = {};
216
   
270
 
-
 
271
    var aliases_data = Module_LookupAliases({
217
    if (Module_MessageAliasLookupFunctions[id_parts[0]])
272
        "module_name" : id_parts[0],
218
    {
-
 
219
        aliases_data = Module_MessageAliasLookupFunctions[id_parts[0]](id_parts[1], command, variables);
273
        "module_id"   : id_parts[1],
-
 
274
        "group"       : false
220
    }
275
    });
221
   
276
   
222
    for (var alias_name in alias_data)
277
    for (var alias_name in aliases_data)
223
    {
278
    {
-
 
279
        var ok = true;
-
 
280
 
-
 
281
        if (aliases_data[alias_name]["specific"])
-
 
282
        {
-
 
283
            var ok = true;
-
 
284
           
-
 
285
            for (var name in variables)
-
 
286
            {
-
 
287
                if (aliases_data[alias_name]["specific"][name] && aliases_data[alias_name]["specific"][name] != variables[name])
-
 
288
                {
-
 
289
                    ok = false;
-
 
290
                    break;
-
 
291
                }
-
 
292
            }
-
 
293
        }
-
 
294
       
224
        if (Module_OnMessageFunctions[alias_name])
295
        if (Module_OnMessageFunctions[alias_name] && ok)
225
        {
296
        {
226
            for (var n in Module_OnMessageFunctions[alias_name])
297
            for (var n in Module_OnMessageFunctions[alias_name])
227
            {
298
            {
228
                Module_OnMessageFunctions[alias_name][n](alias_name, command, variables);
299
                Module_OnMessageFunctions[alias_name][n](alias_name, command, variables);
229
            }
300
            }
230
        }
301
        }
231
    }
302
    }
232
}
303
}
233
 
304
 
234
function Module_OnChange(full_id, available)
305
function Module_OnChange(full_id, available)
235
{
306
{
236
    var id_parts = full_id.split(":", 2);
307
    var id_parts = full_id.split(":", 2);
-
 
308
    var aliases_data = {};
237
   
309
   
238
    var aliases_data = Module_LookupAliases({
310
    var aliases_data_all = Module_LookupAliases({
239
        "module_name" : id_parts[0],
311
        "module_name" : id_parts[0],
240
        "module_id"   : id_parts[1],
312
        "module_id"   : id_parts[1],
-
 
313
        "group"       : false
241
    });
314
    });
242
   
315
   
243
    for (var alias_name in alias_data)
316
    for (var alias_name in aliases_data)
244
    {
317
    {
-
 
318
        var ok = true;
-
 
319
       
-
 
320
        if (aliases_data[alias_name]["specific"])
-
 
321
        {
-
 
322
            var ok = true;
-
 
323
           
-
 
324
            for (var name in variables)
-
 
325
            {
-
 
326
                if (aliases_data[alias_name]["specific"][name] && aliases_data[alias_name]["specific"][name] != variables[name])
-
 
327
                {
-
 
328
                    ok = false;
-
 
329
                    break;
-
 
330
                }
-
 
331
            }
-
 
332
        }
-
 
333
       
245
        if (Module_OnChangeFunctions[alias_name])
334
        if (Module_OnChangeFunctions[alias_name] && ok)
246
        {
335
        {
247
            for (var n in Module_OnChangeFunctions[alias_name])
336
            for (var n in Module_OnChangeFunctions[alias_name])
248
            {
337
            {
249
                Module_OnChangeFunctions[alias_name][n](alias_name, available);
338
                Module_OnChangeFunctions[alias_name][n](alias_name, available);
250
            }
339
            }