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
}