Subversion Repositories HomeAutomation

Rev

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

Rev Author Line No. Line
1602 runge 1
 
1644 runge 2
Require("plugin/storage.js");
1603 runge 3
 
1644 runge 4
function Module_CreateAliasGroupAutoComplete(args)
1624 runge 5
{
1644 runge 6
    // args[0] == command name
7
    var arg_index = args.length - 2;
8
 
9
    if (arg_index == 0)
1603 runge 10
    {
1644 runge 11
        return Module_GetAliasNames();
1603 runge 12
    }
1644 runge 13
    else if (arg_index == 1)
14
    {
15
        return [ "Dimmer230", "irTransmit" ];
16
    }
17
    else if (arg_index >= 2)
18
    {
19
        return Module_GetAliasNames([ args[2] ])
20
    }
1603 runge 21
 
1644 runge 22
    return [];
1603 runge 23
}
24
 
1644 runge 25
function Module_CreateAliasGroup(alias_group_name, module_type, alias_name1, alias_name2)
1602 runge 26
{
1644 runge 27
    if (arguments.length < 3)
1604 runge 28
    {
1644 runge 29
        throw("Not enought parameters given");
1604 runge 30
    }
31
 
1644 runge 32
    alias_group_name = arguments[0];
33
    module_type = arguments[1];
34
    var aliases = [];
1603 runge 35
 
1644 runge 36
    for (var n = 2; n < arguments.length; n++)
1603 runge 37
    {
1644 runge 38
        if (arguments[n].length > 0)
39
        {
40
            var aliases_data = Module_ResolveAlias(arguments[n]);
41
            aliases.push(arguments[n]);
42
        }
1603 runge 43
    }
1602 runge 44
 
1644 runge 45
    if (aliases.length == 0)
1604 runge 46
    {
1644 runge 47
        throw("No valid aliases were found, aborting creation of group alias");
1604 runge 48
    }
49
 
1644 runge 50
    var alias_data = {
51
        "group"       : true,
52
        "name"        : alias_group_name,
53
        "module_name" : module_type,
54
        "aliases"     : aliases
55
    };
1603 runge 56
 
1644 runge 57
    return Storage_SetParameter("alias", alias_group_name, JSON.stringify(alias_data));
1602 runge 58
}
1644 runge 59
Console_RegisterCommand(Module_CreateAliasGroup, Module_CreateAliasGroupAutoComplete);
1602 runge 60
 
1644 runge 61
function Module_ResolveAlias(alias_name, filter_module_names)
1602 runge 62
{
1644 runge 63
    var aliases_data = {};
64
    var alias_data_string = Storage_GetParameter("alias", alias_name);
1602 runge 65
 
1644 runge 66
    if (alias_data_string)
1602 runge 67
    {
1644 runge 68
        var alias_data = eval("(" + alias_data_string + ")");
1603 runge 69
 
1644 runge 70
        if (alias_data["group"])
1603 runge 71
        {
1644 runge 72
            for (var n in alias_data["aliases"])
73
            {
74
                var aliases_data_sub = Module_ResolveAlias(alias_data["aliases"][n]);
75
 
76
                for (var name in aliases_data_sub)
77
                {
78
                    aliases_data[name] = aliases_data_sub[name];
79
                }
80
            }
1603 runge 81
        }
1644 runge 82
        else
83
        {
84
            if (in_array(filter_module_names, alias_data["module_name"]))
85
            {
86
                aliases_data[alias_name] = alias_data;
87
            }
88
        }
1602 runge 89
    }
90
 
1644 runge 91
    return aliases_data;
1602 runge 92
}
1603 runge 93
 
1644 runge 94
function Module_LookupAliases(match_filter)
1603 runge 95
{
1644 runge 96
    var aliases_data_filtered = {};
97
    var aliases_data = Storage_GetParameters("alias");
1603 runge 98
 
1644 runge 99
    for (var name in aliases_data)
100
    {
101
        var alias_data = eval("(" + aliases_data[name] + ")");
102
 
103
        var valid = true;
104
 
105
        for (var key in match_filter)
106
        {
107
            if (alias_data[key] != match_filter[key])
108
            {
109
                valid = false;
110
                break;
111
            }
112
        }
113
 
114
        if (valid)
115
        {
116
            aliases_data_filtered[name] = alias_data;
117
        }
118
    }
119
 
120
    return aliases_data_filtered;
1603 runge 121
}
122
 
1644 runge 123
function Module_GetAliasNames(filter_module_names)
1603 runge 124
{
1644 runge 125
    var aliases_name_filtered = [];
126
    var aliases_data = Storage_GetParameters("alias");
127
 
128
    for (var name in aliases_data)
1603 runge 129
    {
1644 runge 130
        var alias_data = eval("(" + aliases_data[name] + ")");
131
 
132
        if (!filter_module_names || in_array(filter_module_names, alias_data["module_name"]))
133
        {
134
            aliases_name_filtered.push(name)
135
        }
1603 runge 136
    }
1644 runge 137
 
138
    return aliases_name_filtered;
1603 runge 139
}
140
 
1644 runge 141
function Module_GetAvailableIds(filter_module_names)
1603 runge 142
{
1644 runge 143
    var result_list = [];
144
    var available_modules = ModuleExport_GetAvailableModules();
1603 runge 145
 
1644 runge 146
    for (var n in available_modules)
1603 runge 147
    {
1644 runge 148
        var id_parts = available_modules[n].split(":", 2);
149
 
150
        if (in_array(filter_module_names, id_parts[0]))
1603 runge 151
        {
1644 runge 152
            result_list.push(id_parts[1]);
1603 runge 153
        }
154
    }
155
 
1644 runge 156
    return result_list;
1603 runge 157
}
158
 
1644 runge 159
function Module_SendMessage(module_name, module_id, command, variables)
1614 runge 160
{
1644 runge 161
    var args = [];
1614 runge 162
 
1644 runge 163
    args.push(module_name + ":" + module_id);
164
    args.push(command);
1619 runge 165
 
1644 runge 166
    var length = 0;
167
    for (var key in variables)
1614 runge 168
    {
1644 runge 169
        length++;
1614 runge 170
    }
171
 
1644 runge 172
    Log("length=" + length);
173
 
174
    args.push(length);
175
 
176
    for (var key in variables)
177
    {
178
        args.push(key);
179
        args.push(variables[key]);
180
    }
181
 
182
    return ModuleExport_SendMessage.apply(null, Array.prototype.slice.call(args, 0));
1614 runge 183
}
184
 
1644 runge 185
var Module_MessageAliasLookupFunctions = {};
186
var Module_OnChangeFunctions = {};
187
var Module_OnMessageFunctions = {};
188
 
189
function Module_RegisterMessageAliasLookup(module_name, callback)
1603 runge 190
{
1644 runge 191
    Module_MessageAliasLookupFunctions[module_name] = callback;
192
}
193
 
194
function Module_RegisterToOnChange(alias_name, callback)
195
{
196
    if (!Module_OnChangeFunctions[alias_name])
1603 runge 197
    {
1644 runge 198
        Module_OnChangeFunctions[alias_name] = [];
1603 runge 199
    }
200
 
1644 runge 201
    Module_OnChangeFunctions[alias_name].push(callback);
1603 runge 202
}
203
 
1644 runge 204
function Module_RegisterToOnMessage(alias_name, callback)
1603 runge 205
{
1644 runge 206
    if (!Module_OnMessageFunctions[alias_name])
1603 runge 207
    {
1644 runge 208
        Module_OnMessageFunctions[alias_name] = [];
1603 runge 209
    }
1644 runge 210
 
211
    Module_OnMessageFunctions[alias_name].push(callback);
1603 runge 212
}
1609 runge 213
 
1644 runge 214
function Module_OnMessage(full_id, command, variables)
1609 runge 215
{
1644 runge 216
    var id_parts = full_id.split(":", 2);
217
    var aliases_data = {};
1609 runge 218
 
1644 runge 219
    if (Module_MessageAliasLookupFunctions[id_parts[0]])
1609 runge 220
    {
1644 runge 221
        aliases_data = Module_MessageAliasLookupFunctions[id_parts[0]](id_parts[1], command, variables);
1609 runge 222
    }
223
 
1644 runge 224
    for (var alias_name in alias_data)
225
    {
226
        if (Module_OnMessageFunctions[alias_name])
227
        {
228
            for (var n in Module_OnMessageFunctions[alias_name])
229
            {
230
                Module_OnMessageFunctions[alias_name][n](alias_name, command, variables);
231
            }
232
        }
233
    }
1609 runge 234
}
235
 
1644 runge 236
function Module_OnChange(full_id, available)
1642 runge 237
{
1644 runge 238
    var id_parts = full_id.split(":", 2);
239
 
240
    var aliases_data = Module_LookupAliases({
241
        "module_name" : id_parts[0],
242
        "module_id"   : id_parts[1],
243
    });
244
 
245
    for (var alias_name in alias_data)
246
    {
247
        if (Module_OnChangeFunctions[alias_name])
248
        {
249
            for (var n in Module_OnChangeFunctions[alias_name])
250
            {
251
                Module_OnChangeFunctions[alias_name][n](alias_name, available);
252
            }
253
        }
254
    }
1642 runge 255
}