Subversion Repositories HomeAutomation

Rev

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

Rev Author Line No. Line
1765 linlun 1
 
2
PID_ModuleNames    = [ "PID" ];
3
PID_Intervals      = function() { return [ 1, 5, 10, 15, 20 ]; };
4
//PID_Energy         = function() { return [ 0, 500, 1000, 5000, 10000 ]; };
5
PID_Temperatures	= function() { return [ 20, 25, 30, 35 ]; };
6
PID_Aliases        = function() { return Module_GetAliasNames(PID_ModuleNames); };
7
PID_AvailableIds   = function() { return Module_GetAvailableIds(PID_ModuleNames); };
8
 
9
function PID_SetReportInterval(alias_name, interval)
10
{
11
	if (arguments.length < 2)
12
	{
13
		Log("\033[31mNot enough parameters given.\033[0m\n");
14
		return false;
15
	}
16
 
17
	var aliases_data = Module_ResolveAlias(alias_name, PID_ModuleNames);
18
	var found = false;
19
 
20
	for (var name in aliases_data)
21
	{
22
		var variables = {"Time"     : interval };
23
 
24
		if (Module_SendMessage(aliases_data[name]["module_name"], aliases_data[name]["module_id"], "Report_Interval", variables))
25
		{
26
			//Log("\033[32mCommand sent successfully to " + name + ".\033[0m\n");
27
		}
28
		else
29
		{
30
			Log("\033[31mFailed to send command to " + name + ".\033[0m\n");
31
		}
32
 
33
		found = true;
34
	}
35
 
36
	if (!found)
37
	{
38
		Log("\033[31mNo aliases by the name " + alias_name + " were applicable for this command.\033[0m\n");
39
		return false;
40
	}
41
 
42
	return true;
43
}
44
Console_RegisterCommand(PID_SetReportInterval, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, PID_Aliases(), PID_Intervals()); });
45
 
46
 
47
function PID_setValue(alias_name, temperature)
48
{
49
	if (arguments.length < 2)
50
	{
51
		Log("\033[31mNot enough parameters given.\033[0m\n");
52
		return false;
53
	}
54
	var aliases_data = Module_ResolveAlias(alias_name, PID_ModuleNames);
55
	var found = false;
56
 
57
	Log ("Called SetValue: "+temperature+"\n");
58
 
59
	for (var name in aliases_data)
60
	{
61
		var variables = {	"Value"     : temperature,
62
					"SensorId"     : 0 };
63
 
64
		if (Module_SendMessage(aliases_data[name]["module_name"], aliases_data[name]["module_id"], "Temperature_Celsius", variables))
65
		{
66
			Log("\033[32mCommand sent successfully to " + name + ".\033[0m\n");
67
		}
68
		else
69
		{
70
			Log("\033[31mFailed to send command to " + name + ".\033[0m\n");
71
		}
72
 
73
		found = true;
74
	}
75
 
76
	if (!found)
77
	{
78
		Log("\033[31mNo aliases by the name " + alias_name + " were applicable for this command.\033[0m\n");
79
		return false;
80
	}
81
 
82
	return true;
83
}
84
Console_RegisterCommand(PID_setValue, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, PID_Aliases(), PID_Temperatures());  });
85
 
86
 
87
function PID_setParameters(alias_name, KP,KI,KD,Time,Unit)
88
{
89
	if (arguments.length < 6)
90
	{
91
		Log("\033[31mNot enough parameters given.\033[0m\n");
92
		return false;
93
	}
94
	var aliases_data = Module_ResolveAlias(alias_name, PID_ModuleNames);
95
	var found = false;
96
 
97
	for (var name in aliases_data)
98
	{
99
		var variables = {	"K_P"     : KP,
100
					"K_I"     : KI,
101
					"K_D"     : KD,
102
					"RegulatorTime"     : Time,
103
					"TimeUnit"     : Unit };
104
 
105
		if (Module_SendMessage(aliases_data[name]["module_name"], aliases_data[name]["module_id"], "CONFIG_PARAMETER", variables))
106
		{
107
			Log("\033[32mCommand sent successfully to " + name + ".\033[0m");
108
			Log("\033[32mK_P = " + KP + "K_I = " + KI + "K_D = " + KD + "RegTime = " + Time + "Unit = " + Unit + ".\033[0m\n");
109
		}
110
		else
111
		{
112
			Log("\033[31mFailed to send command to " + name + ".\033[0m\n");
113
		}
114
 
115
		found = true;
116
	}
117
 
118
	if (!found)
119
	{
120
		Log("\033[31mNo aliases by the name " + alias_name + " were applicable for this command.\033[0m\n");
121
		return false;
122
	}
123
 
124
	return true;
125
}
126
 
127
function PID_getConfiguration(alias_name)
128
{
129
	if (arguments.length < 1)
130
	{
131
		Log("\033[31mNot enough parameters given.\033[0m\n");
132
		return false;
133
	}
134
	var aliases_data = Module_ResolveAlias(alias_name, PID_ModuleNames);
135
	var found = false;
136
 
137
	for (var name in aliases_data)
138
	{
139
		var variables = {};
140
 
141
		if (Module_SendMessage(aliases_data[name]["module_name"], aliases_data[name]["module_id"], "CONFIG_SENSOR", variables))
142
		{
143
			//Log("\033[32mCommand sent successfully to " + name + ".\033[0m\n");
144
		}
145
		else
146
		{
147
			Log("\033[31mFailed to send command 1 to " + name + ".\033[0m\n");
148
		}
149
		if (Module_SendMessage(aliases_data[name]["module_name"], aliases_data[name]["module_id"], "CONFIG_ACTUATOR", variables))
150
		{
151
			//Log("\033[32mCommand sent successfully to " + name + ".\033[0m\n");
152
		}
153
		else
154
		{
155
			Log("\033[31mFailed to send command 2 to " + name + ".\033[0m\n");
156
		}
157
		if (Module_SendMessage(aliases_data[name]["module_name"], aliases_data[name]["module_id"], "CONFIG_PARAMETER", variables))
158
		{
159
			//Log("\033[32mCommand sent successfully to " + name + ".\033[0m\n");
160
		}
161
		else
162
		{
163
			Log("\033[31mFailed to send command 3 to " + name + ".\033[0m\n");
164
		}
165
		if (Module_SendMessage(aliases_data[name]["module_name"], aliases_data[name]["module_id"], "Report_Interval", variables))
166
		{
167
			//Log("\033[32mCommand sent successfully to " + name + ".\033[0m\n");
168
		}
169
		else
170
		{
171
			Log("\033[31mFailed to send command 4 to " + name + ".\033[0m\n");
172
		}
173
 
174
		found = true;
175
	}
176
 
177
	if (!found)
178
	{
179
		Log("\033[31mNo aliases by the name " + alias_name + " were applicable for this command.\033[0m\n");
180
		return false;
181
	}
182
 
183
	return true;
184
}
185
Console_RegisterCommand(PID_getConfiguration, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, PID_Aliases()); });
186
 
187
function PID_OnMessage(module_name, module_id, command, variables)
188
{
189
	if (in_array(PID_ModuleNames, module_name))
190
	{
191
		var aliases_data = Module_LookupAliases({
192
			"module_name" : module_name,
193
			"module_id"   : module_id,
194
			"group"       : false
195
		});
196
 
197
		switch (command)
198
		{
199
			case "DEBUG":
200
				for (var alias_name in aliases_data)
201
				{
202
					var last_value = {};
203
					var last_value_string = Storage_GetParameter("LastValues", alias_name);
204
 
205
					if (last_value_string)
206
					{
207
						last_value = eval("(" + last_value_string + ")");
208
					}
209
 
2076 linlun 210
					last_value["Debug"] = { "value" : { "P_term" : variables["P_term"],"I_term" : variables["I_term"],"D_term" : variables["D_term"],"Sum" : variables["Sum"] }, "timestamp" : get_time() };
1765 linlun 211
					Storage_SetParameter("LastValues", alias_name, JSON.stringify(last_value));
212
					//Log("Got message DEBUG");
213
				}
214
			break;
215
			case "CONFIG_SENSOR":
216
				for (var alias_name in aliases_data)
217
				{
218
					var last_value = {};
219
					var last_value_string = Storage_GetParameter("LastValues", alias_name);
220
 
221
					if (last_value_string)
222
					{
223
						last_value = eval("(" + last_value_string + ")");
224
					}
225
 
2076 linlun 226
					last_value["Sensor"] = { "value" : { "sensorModuleType" : variables["sensorModuleType"],"sensorModuleId" : variables["sensorModuleId"],"sensorId" : variables["sensorId"] }, "timestamp" : get_time() };
1765 linlun 227
					Storage_SetParameter("LastValues", alias_name, JSON.stringify(last_value));
228
				}
229
			break;
230
			case "CONFIG_ACTUATOR":
231
				for (var alias_name in aliases_data)
232
				{
233
					var last_value = {};
234
					var last_value_string = Storage_GetParameter("LastValues", alias_name);
235
 
236
					if (last_value_string)
237
					{
238
						last_value = eval("(" + last_value_string + ")");
239
					}
240
 
2076 linlun 241
					last_value["Actuator"] = { "value" : { "actuatorModuleType" : variables["actuatorModuleType"],"actuatorModuleId" : variables["actuatorModuleId"],"actuatorId" : variables["actuatorId"] }, "timestamp" : get_time() };
1765 linlun 242
					Storage_SetParameter("LastValues", alias_name, JSON.stringify(last_value));
243
				}
244
			break;
245
			case "CONFIG_PARAMETER":
246
				for (var alias_name in aliases_data)
247
				{
248
					var last_value = {};
249
					var last_value_string = Storage_GetParameter("LastValues", alias_name);
250
 
251
					if (last_value_string)
252
					{
253
						last_value = eval("(" + last_value_string + ")");
254
					}
255
 
2076 linlun 256
					last_value["Parameters"] = { "value" : { "K_P" : variables["K_P"],"K_I" : variables["K_I"],"K_D" : variables["K_D"],"TimeUnit" : variables["TimeUnit"],"RegulatorTime" : variables["RegulatorTime"] }, "timestamp" : get_time() };
1765 linlun 257
					Storage_SetParameter("LastValues", alias_name, JSON.stringify(last_value));
258
				}
259
			break;
260
			case "PID_STATUS":
261
				for (var alias_name in aliases_data)
262
				{
263
					var last_value = {};
264
					var last_value_string = Storage_GetParameter("LastValues", alias_name);
265
 
266
					if (last_value_string)
267
					{
268
						last_value = eval("(" + last_value_string + ")");
269
					}
270
 
2076 linlun 271
					last_value["PID_status"] = { "value" : { "Measurment" : variables["Measurment"],"Reference" : variables["Reference"],"PWM" : variables["PWM"],"Sum" : variables["Sum"] }, "timestamp" : get_time() };
1765 linlun 272
					Storage_SetParameter("LastValues", alias_name, JSON.stringify(last_value));
273
				}
274
	//log("PID status: mea:" + this.Measurment + " ref:" + this.Reference + " pwm:" + this.PWM/100 + " sum:" + this.Sum + "\n");
275
				//this.callEvent("newValue", canMessage.getData("Id"));
276
 
277
	//var self = this;
278
	//	this.myHTTP.request(function(result, header, content) { self.httpCallback(result, header, content); }, "linuxz.mine.nu/canlogg/add.php?measurment="+ this.Measurment + "&reference="+this.Reference+"&pwm="+this.PWM/100+"&sum="+this.Sum+"&p="+this.K_P+"&i="+this.K_I+"&d="+this.K_D+"&timeunit="+this.TimeUnit+"&pidtime="+this.RegulatorTime+"");
279
			break;
280
			case "Temperature_Celsius":
281
				for (var alias_name in aliases_data)
282
				{
283
					var last_value = {};
284
					var last_value_string = Storage_GetParameter("LastValues", alias_name);
285
 
286
					if (last_value_string)
287
					{
288
						last_value = eval("(" + last_value_string + ")");
289
					}
290
 
2076 linlun 291
					last_value["Reference"] = { "value" : variables["Value"], "timestamp" : get_time() };
1765 linlun 292
					Storage_SetParameter("LastValues", alias_name, JSON.stringify(last_value));
293
				}	
294
				break;
295
			case "Report_Interval":
296
				this.myReportInterval = canMessage.getData("Time");
297
				break;
298
		}
299
	}
300
}
301
Module_RegisterToOnMessage("all", PID_OnMessage);