Subversion Repositories HomeAutomation

Rev

Rev 1644 | Rev 1647 | 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
            {
1646 runge 74
                var aliases_data_sub = Module_ResolveAlias(alias_data["aliases"][n], filter_module_names);
1644 runge 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
    args.push(length);
173
 
174
    for (var key in variables)
175
    {
176
        args.push(key);
177
        args.push(variables[key]);
178
    }
179
 
180
    return ModuleExport_SendMessage.apply(null, Array.prototype.slice.call(args, 0));
1614 runge 181
}
182
 
1644 runge 183
var Module_MessageAliasLookupFunctions = {};
184
var Module_OnChangeFunctions = {};
185
var Module_OnMessageFunctions = {};
186
 
187
function Module_RegisterMessageAliasLookup(module_name, callback)
1603 runge 188
{
1644 runge 189
    Module_MessageAliasLookupFunctions[module_name] = callback;
190
}
191
 
192
function Module_RegisterToOnChange(alias_name, callback)
193
{
194
    if (!Module_OnChangeFunctions[alias_name])
1603 runge 195
    {
1644 runge 196
        Module_OnChangeFunctions[alias_name] = [];
1603 runge 197
    }
198
 
1644 runge 199
    Module_OnChangeFunctions[alias_name].push(callback);
1603 runge 200
}
201
 
1644 runge 202
function Module_RegisterToOnMessage(alias_name, callback)
1603 runge 203
{
1644 runge 204
    if (!Module_OnMessageFunctions[alias_name])
1603 runge 205
    {
1644 runge 206
        Module_OnMessageFunctions[alias_name] = [];
1603 runge 207
    }
1644 runge 208
 
209
    Module_OnMessageFunctions[alias_name].push(callback);
1603 runge 210
}
1609 runge 211
 
1644 runge 212
function Module_OnMessage(full_id, command, variables)
1609 runge 213
{
1644 runge 214
    var id_parts = full_id.split(":", 2);
215
    var aliases_data = {};
1609 runge 216
 
1644 runge 217
    if (Module_MessageAliasLookupFunctions[id_parts[0]])
1609 runge 218
    {
1644 runge 219
        aliases_data = Module_MessageAliasLookupFunctions[id_parts[0]](id_parts[1], command, variables);
1609 runge 220
    }
221
 
1644 runge 222
    for (var alias_name in alias_data)
223
    {
224
        if (Module_OnMessageFunctions[alias_name])
225
        {
226
            for (var n in Module_OnMessageFunctions[alias_name])
227
            {
228
                Module_OnMessageFunctions[alias_name][n](alias_name, command, variables);
229
            }
230
        }
231
    }
1609 runge 232
}
233
 
1644 runge 234
function Module_OnChange(full_id, available)
1642 runge 235
{
1644 runge 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])
246
        {
247
            for (var n in Module_OnChangeFunctions[alias_name])
248
            {
249
                Module_OnChangeFunctions[alias_name][n](alias_name, available);
250
            }
251
        }
252
    }
1642 runge 253
}