Subversion Repositories HomeAutomation

Rev

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

Rev 1646 Rev 1647
Line 2... Line 2...
2
Require("plugin/storage.js");
2
Require("plugin/storage.js");
3
 
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);
-
 
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;
8
   
63
   
9
    if (arg_index == 0)
64
    if (arg_index == 0)
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
    {
68
        var alias_data = eval("(" + alias_data_string + ")");
123
        var alias_data = eval("(" + alias_data_string + ")");
69
       
124
       
70
        if (alias_data["group"])
125
        if (alias_data["group"])
71
        {
126
        {
72
            for (var n in alias_data["aliases"])
127
            for (var n in alias_data["aliases"])
73
            {
128
            {
74
                var aliases_data_sub = Module_ResolveAlias(alias_data["aliases"][n], filter_module_names);
129
                var aliases_data_sub = Module_ResolveAlias(alias_data["aliases"][n], filter_module_names);
75
               
130
               
76
                for (var name in aliases_data_sub)
131
                for (var name in aliases_data_sub)
77
                {
132
                {
78
                    aliases_data[name] = aliases_data_sub[name];
133
                    aliases_data[name] = aliases_data_sub[name];
79
                }
134
                }
80
            }
135
            }
81
        }
136
        }
82
        else
137
        else
83
        {
138
        {
84
            if (in_array(filter_module_names, alias_data["module_name"]))
139
            if (in_array(filter_module_names, alias_data["module_name"]))
85
            {
140
            {
86
                aliases_data[alias_name] = alias_data;
141
                aliases_data[alias_name] = alias_data;
87
            }
142
            }
88
        }
143
        }
89
    }
144
    }
90
   
145
   
91
    return aliases_data;
146
    return aliases_data;
92
}
147
}
93
 
148
 
94
function Module_LookupAliases(match_filter)
149
function Module_LookupAliases(match_filter)
95
{
150
{
96
    var aliases_data_filtered = {};
151
    var aliases_data_filtered = {};
97
    var aliases_data = Storage_GetParameters("alias");
152
    var aliases_data = Storage_GetParameters("alias");
Line 101... Line 156...
101
        var alias_data = eval("(" + aliases_data[name] + ")");
156
        var alias_data = eval("(" + aliases_data[name] + ")");
102
       
157
       
103
        var valid = true;
158
        var valid = true;
104
       
159
       
105
        for (var key in match_filter)
160
        for (var key in match_filter)
106
        {
161
        {
107
            if (alias_data[key] != match_filter[key])
162
            if (alias_data[key] != match_filter[key])
108
            {
163
            {
109
                valid = false;
164
                valid = false;
110
                break;
165
                break;
111
            }
166
            }
Line 113... Line 168...
113
       
168
       
114
        if (valid)
169
        if (valid)
115
        {
170
        {
116
            aliases_data_filtered[name] = alias_data;
171
            aliases_data_filtered[name] = alias_data;
117
        }
172
        }
118
    }
173
    }
119
   
174
   
120
    return aliases_data_filtered;
175
    return aliases_data_filtered;
121
}
176
}
122
 
177
 
123
function Module_GetAliasNames(filter_module_names)
178
function Module_GetAliasNames(filter_module_names)
124
{
179
{
125
    var aliases_name_filtered = [];
180
    var aliases_name_filtered = [];
126
    var aliases_data = Storage_GetParameters("alias");
181
    var aliases_data = Storage_GetParameters("alias");
Line 131... Line 186...
131
       
186
       
132
        if (!filter_module_names || in_array(filter_module_names, alias_data["module_name"]))
187
        if (!filter_module_names || in_array(filter_module_names, alias_data["module_name"]))
133
        {
188
        {
134
            aliases_name_filtered.push(name)
189
            aliases_name_filtered.push(name)
135
        }
190
        }
136
    }
191
    }
137
   
192
   
138
    return aliases_name_filtered;
193
    return aliases_name_filtered;
139
}
194
}
140
 
195
 
141
function Module_GetAvailableIds(filter_module_names)
196
function Module_GetAvailableIds(filter_module_names)
142
{
197
{
143
    var result_list = [];
198
    var result_list = [];
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;
157
}
212
}
-
 
213
 
-
 
214
function Module_GetNames()
-
 
215
{
-
 
216
    return [ "Dimmer230", "irTransmit" ];
-
 
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({
-
 
272
        "module_name" : id_parts[0],
-
 
273
        "module_id"   : id_parts[1],
-
 
274
        "group"       : false
-
 
275
    });
-
 
276
   
-
 
277
    for (var alias_name in aliases_data)
-
 
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
       
217
    if (Module_MessageAliasLookupFunctions[id_parts[0]])
295
        if (Module_OnMessageFunctions[alias_name] && ok)
218
    {
296
        {
-
 
297
            for (var n in Module_OnMessageFunctions[alias_name])
-
 
298
            {
219
        aliases_data = Module_MessageAliasLookupFunctions[id_parts[0]](id_parts[1], command, variables);
299
                Module_OnMessageFunctions[alias_name][n](alias_name, command, variables);
-
 
300
            }
-
 
301
        }
220
    }
302
    }
-
 
303
}
-
 
304
 
-
 
305
function Module_OnChange(full_id, available)
-
 
306
{
-
 
307
    var id_parts = full_id.split(":", 2);
-
 
308
    var aliases_data = {};
-
 
309
   
-
 
310
    var aliases_data_all = Module_LookupAliases({
-
 
311
        "module_name" : id_parts[0],
-
 
312
        "module_id"   : id_parts[1],
-
 
313
        "group"       : false
-
 
314
    });
221
   
315
   
222
    for (var alias_name in alias_data)
316
    for (var alias_name in aliases_data)
-
 
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)
223
    {
325
            {
224
        if (Module_OnMessageFunctions[alias_name])
326
                if (aliases_data[alias_name]["specific"][name] && aliases_data[alias_name]["specific"][name] != variables[name])
225
        {
327
                {
226
            for (var n in Module_OnMessageFunctions[alias_name])
328
                    ok = false;
227
            {
329
                    break;
228
                Module_OnMessageFunctions[alias_name][n](alias_name, command, variables);
-
 
229
            }
330
                }
230
        }
-
 
231
    }
331
            }
232
}
332
        }
233
 
333
       
234
function Module_OnChange(full_id, available)
-
 
235
{
-
 
236
    var id_parts = full_id.split(":", 2);
-
 
237
   
-
 
238
    var aliases_data = Module_LookupAliases({
-
 
239
        "module_name" : id_parts[0],
-
 
240
        "module_id"   : id_parts[1],
-
 
241
    });
-
 
242
   
-
 
243
    for (var alias_name in alias_data)
-
 
244
    {
-
 
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
            }