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
}