www/js/mon_ispindel.js

changeset 680
0bb48333d133
parent 655
f4e00869f39f
child 681
7ed5c380e21b
equal deleted inserted replaced
679:48f8f3fce7c0 680:0bb48333d133
23 23
24 $(document).ready(function() { 24 $(document).ready(function() {
25 25
26 var record = {}, 26 var record = {},
27 blank = {}, 27 blank = {},
28 newProduct = false,
29 newMode = false,
30 schedule = 0,
31 28
32 productSource = { 29 productSource = {
33 datatype: 'json', 30 datatype: 'json',
34 cache: false, 31 cache: false,
35 datafields: [ 32 datafields: [
52 row = records[i]; 49 row = records[i];
53 data.push(row); 50 data.push(row);
54 } 51 }
55 return data; 52 return data;
56 }, 53 },
57 loadError: function(jqXHR, status, error) { 54 loadError: function(jqXHR, status, error) { console.log(status + ' ' + error); },
58 $('#err').text(status + ' ' + error);
59 },
60 }), 55 }),
61 gaugeoptionst = { 56 gaugeoptionst = {
62 min: 10, max: 40, width: 375, height: 375, 57 min: 10, max: 40, width: 375, height: 375,
63 ranges: [{ startValue: 10, endValue: 20, style: { fill: '#3399FF', stroke: '#3399FF' }, endWidth: 10, startWidth: 10 }, 58 ranges: [{ startValue: 10, endValue: 20, style: { fill: '#3399FF', stroke: '#3399FF' }, endWidth: 10, startWidth: 10 },
64 { startValue: 20, endValue: 28, style: { fill: '#00CC33', stroke: '#00CC33' }, endWidth: 10, startWidth: 10 }, 59 { startValue: 20, endValue: 28, style: { fill: '#00CC33', stroke: '#00CC33' }, endWidth: 10, startWidth: 10 },
107 url: url 102 url: url
108 }, 103 },
109 dataAdapter = new $.jqx.dataAdapter(source, { 104 dataAdapter = new $.jqx.dataAdapter(source, {
110 loadComplete: function(records) { 105 loadComplete: function(records) {
111 record = dataAdapter.records[0]; 106 record = dataAdapter.records[0];
112 var oline = (record.online) ? 'On-line' : 'Off-line'; 107 updateScreen();
113 $('#info_uuid').html(record.uuid);
114 $('#info_system').html(record.node + '/' + record.alias);
115 $('#info_online').html(oline);
116 $('#info_beer').html(record.beercode + ' - ' + record.beername);
117 $('#info_mode').jqxDropDownList('selectItem', record.mode);
118 blank['name'] = record.alias; 108 blank['name'] = record.alias;
119 blank['code'] = record.alias.toUpperCase(); 109 blank['code'] = record.alias.toUpperCase();
120 blank['uuid'] = record.uuid; 110 blank['uuid'] = record.uuid;
121 111 }
122 if (record.online && (record.mode != 'OFF')) { 112 });
113
114 function updateScreen() {
115
116 $('#info_uuid').html(record.uuid);
117 $('#info_system').html(record.node + '/' + record.alias);
118 $('#info_beer').html(record.beercode + ' - ' + record.beername);
119 $('#info_mode').jqxDropDownList('selectItem', record.mode);
120
121 if (record.online) {
122 $('#info_online').html('On-line');
123 if (record.mode != 'OFF') {
123 $('#ispindel_powerled').html('<div class="LEDblue_on"></div>Power'); 124 $('#ispindel_powerled').html('<div class="LEDblue_on"></div>Power');
124 $('#select_beer').jqxDropDownList({ disabled: true }); 125 $('#select_beer').jqxDropDownList({ disabled: true });
125 $('#select_beer').jqxDropDownList('clearSelection'); 126 $('#select_beer').jqxDropDownList('clearSelection');
126 $('#select_beer').hide(); 127 $('#select_beer').hide();
127 } else { 128 } else {
135 $('#ispindel_alarmled').html('<div class="LEDred_off"></div>Alarm'); 136 $('#ispindel_alarmled').html('<div class="LEDred_off"></div>Alarm');
136 } 137 }
137 138
138 $('#gaugeContainer_temperature').jqxGauge({ caption: { value: record.temperature.toFixed(3) + '°C' }}); 139 $('#gaugeContainer_temperature').jqxGauge({ caption: { value: record.temperature.toFixed(3) + '°C' }});
139 $('#gaugeContainer_temperature').jqxGauge({ value: record.temperature }); 140 $('#gaugeContainer_temperature').jqxGauge({ value: record.temperature });
141 $('#gaugeContainer_temperature').jqxGauge({ disabled: false });
142 $('#gaugeContainer_gravity').jqxLinearGauge({ disabled: false });
140 143
141 var sg = plato_to_sg(record.gravity); 144 var sg = plato_to_sg(record.gravity);
142
143 $('#info_battery').val(record.battery); 145 $('#info_battery').val(record.battery);
144 $('#info_tilt').val(record.angle); 146 $('#info_tilt').val(record.angle);
145 $('#info_plato').val(record.gravity); 147 $('#info_plato').val(record.gravity);
146 $('#info_sg').val(sg); 148 $('#info_sg').val(sg);
147 149
148 if (record.og_gravity) { 150 if (record.og_gravity) {
149 var og = plato_to_sg(record.og_gravity); 151 var og = plato_to_sg(record.og_gravity);
150 var svg = calc_svg(og, sg); 152 var svg = calc_svg(og, sg);
151 153 var max = Math.ceil(og * 100, 0) * 10;
154
155 console.log ('set max ' + max);
156 $('#gaugeContainer_gravity').jqxLinearGauge({ max: max });
152 $('#vg_og1').html(og.toFixed(4)); 157 $('#vg_og1').html(og.toFixed(4));
153 $('#vg_og2').html(record.og_gravity.toFixed(1) + '&deg;P'); 158 $('#vg_og2').html(record.og_gravity.toFixed(1) + '&deg;P');
154 $('#vg_sg1').html(sg.toFixed(4)); 159 $('#vg_sg1').html(sg.toFixed(4));
155 $('#vg_sg2').html(record.gravity.toFixed(1) + '&deg;P'); 160 $('#vg_sg2').html(record.gravity.toFixed(1) + '&deg;P');
156 $('#vg_svg').html(svg.toFixed(1) + '%'); 161 $('#vg_svg').html(svg.toFixed(1) + '%');
157 $('#vg_abv').html(abvol(og, sg).toFixed(2) + '%'); 162 $('#vg_abv').html(abvol(og, sg).toFixed(2) + '%');
158 } else { 163 } else {
164 $('#gaugeContainer_gravity').jqxLinearGauge({ max: 1150 });
159 $('#vg_og1').html(''); 165 $('#vg_og1').html('');
160 $('#vg_og2').html(''); 166 $('#vg_og2').html('');
161 $('#vg_sg1').html(''); 167 $('#vg_sg1').html('');
162 $('#vg_sg2').html(''); 168 $('#vg_sg2').html('');
163 $('#vg_svg').html(''); 169 $('#vg_svg').html('');
170 batt = Math.round(batt / 1.17875 * 100); // 100% range 176 batt = Math.round(batt / 1.17875 * 100); // 100% range
171 if (batt > 100) 177 if (batt > 100)
172 batt = 100; 178 batt = 100;
173 $('#vg_batt').html(batt + '%'); 179 $('#vg_batt').html(batt + '%');
174 180
175
176 var gravity = sg * 1000; 181 var gravity = sg * 1000;
177 $('#gaugeContainer_gravity').jqxLinearGauge({ value: gravity }); 182 $('#gaugeContainer_gravity').jqxLinearGauge({ value: gravity });
178 } 183
179 }); 184 } else { // offline
185 $('#info_online').html('Off-line');
186 $('#ispindel_powerled').html('<div class="LEDblue_off"></div>Power');
187 $('#select_beer').show();
188 $('#select_beer').jqxDropDownList({ disabled: false });
189 $('#ispindel_alarmled').html('<div class="LEDred_on"></div>Alarm');
190 $('#gaugeContainer_temperature').jqxGauge({ disabled: true });
191 $('#gaugeContainer_gravity').jqxLinearGauge({ disabled: true });
192 }
193 }
180 194
181 $('#select_beer').jqxDropDownList({ 195 $('#select_beer').jqxDropDownList({
182 placeHolder: 'Kies bier:', 196 placeHolder: 'Kies bier:',
183 theme: theme, 197 theme: theme,
184 source: productlist, 198 source: productlist,
197 $('#info_tilt').jqxNumberInput(Show5dec); 211 $('#info_tilt').jqxNumberInput(Show5dec);
198 $('#info_plato').jqxNumberInput(Show2dec); 212 $('#info_plato').jqxNumberInput(Show2dec);
199 $('#info_sg').jqxNumberInput(Show4dec); 213 $('#info_sg').jqxNumberInput(Show4dec);
200 214
201 $('#gaugeContainer_temperature').jqxGauge(gaugeoptionst); 215 $('#gaugeContainer_temperature').jqxGauge(gaugeoptionst);
202 $('#gaugeContainer_temperature').jqxGauge({ caption: { value: 'Temp: 00.000' }}); 216 $('#gaugeContainer_temperature').jqxGauge({ caption: { value: '0.000°C' }});
203 $('#gaugeContainer_gravity').jqxLinearGauge(gaugeoptionsg); 217 $('#gaugeContainer_gravity').jqxLinearGauge(gaugeoptionsg);
204 218
205 srcMode = ['OFF', 'ON']; 219 srcMode = ['OFF', 'ON'];
206 $('#info_mode').jqxDropDownList({ theme: theme, source: srcMode, width: 100, height: 24, dropDownHeight: 65 }); 220 $('#info_mode').jqxDropDownList({ theme: theme, source: srcMode, width: 100, height: 24, dropDownHeight: 65 });
207 221
208 function sendProduct(code, name, uuid) { 222 // Get the data immediatly.
209
210 console.log('sendProduct(' + code + ', ' + name + ', ' + uuid + ')');
211 var data = 'uuid=' + record.uuid + '&beeruuid=' + uuid + '&beercode=' + code + '&beername=' + name;
212 $.ajax({
213 url: 'cmd_ispindel.php',
214 data: data,
215 type: 'POST',
216 success: function(data) {},
217 error: function(jqXHR, textStatus, errorThrown) { console.log('sendProduct() error'); }
218 });
219 }
220
221 function sendMode(mode) {
222
223 console.log('sendMode(' + mode + ')');
224 var data = 'uuid=' + record.uuid + '&mode=' + mode;
225 $.ajax({
226 url: 'cmd_ispindel.php',
227 data: data,
228 type: 'POST',
229 success: function(data) {},
230 error: function(jqXHR, textStatus, errorThrown) { console.log('sendMode() error'); }
231 });
232 }
233
234 // Get the data immediatly and then at regular intervals to refresh.
235 dataAdapter.dataBind(); 223 dataAdapter.dataBind();
236 setInterval(function() {
237 var skip = false;
238 if (newMode) {
239 sendMode(record.mode);
240 newMode = false;
241 skip = true;
242 }
243 if (newProduct) {
244 sendProduct(record.beercode, record.beername, record.beeruuid);
245 newProduct = false;
246 skip = true;
247 }
248 if (skip) {
249 schedule = 4; // 2 seconds wait to get the results
250 } else {
251 if (schedule > 0)
252 schedule--;
253 }
254
255 if (schedule <= 0) {
256 dataAdapter.dataBind();
257 schedule = 20;
258 }
259 }, 500);
260 224
261 $('#select_beer').on('select', function(event) { 225 $('#select_beer').on('select', function(event) {
262 if (event.args) { 226 if (event.args) {
263 var index = event.args.index, 227 var index = event.args.index,
264 datarecord = productlist.records[index]; 228 datarecord = productlist.records[index];
265 record.beercode = datarecord.code; 229 record.beercode = datarecord.code;
266 record.beername = datarecord.name; 230 record.beername = datarecord.name;
267 record.beeruuid = datarecord.uuid; 231 record.beeruuid = datarecord.uuid;
268 newProduct = true; 232 console.log('Select beer ' + record.beercode + ', ' + record.beername);
233 websocket.send('{"device":"ispindels","node":"' + record.node + '","unit":"' + record.alias +
234 '","beeruuid":"' + record.beeruuid + '","beercode":"' + record.beercode + '","beername":"' + record.beername + '"}');
269 } 235 }
270 }); 236 });
271 $('#info_mode').on('select', function(event) { 237 $('#info_mode').on('select', function(event) {
272 if (event.args) { 238 if (event.args && event.args.item.value != record.mode) {
273 record.mode = event.args.item.value; 239 record.mode = event.args.item.value;
274 newMode = true; 240 console.log('set mode ' + record.mode);
241 websocket.send('{"device":"ispindels","node":"' + record.node + '","unit":"' + record.alias + '","mode":"' + record.mode + '"}');
275 } 242 }
276 }); 243 });
277 244
278 // The chart button. 245 // The chart button.
279 $('#VLog').jqxButton({ template: 'primary', width: '150px', theme: theme }); 246 $('#VLog').jqxButton({ template: 'primary', width: '150px', theme: theme });
280 $('#VLog').click(function() { 247 $('#VLog').click(function() {
281 window.open('log_ispindel.php?code=' + record.beercode + '&name=' + record.beername); 248 window.open('log_ispindel.php?code=' + record.beercode + '&name=' + record.beername);
282 }); 249 });
250
251 websocket.onmessage = function(evt) {
252 var msg = evt.data;
253 var obj = JSON.parse(msg);
254 if (obj.device == "ispindels" && obj.node == record.node) {
255 console.log('ws got this device ' + msg);
256 record.online = obj.online;
257 if (obj.online) {
258 record.beeruuid = obj.beeruuid;
259 record.beercode = obj.beercode;
260 record.beername = obj.beername;
261 record.mode = obj.mode;
262 record.alarm = obj.alarm;
263 record.angle = obj.angle;
264 record.temperature = obj.temperature;
265 record.battery = obj.battery;
266 record.gravity = obj.gravity;
267 record.up_interval = obj.up_interval;
268 record.og_gravity = obj.og_gravity;
269 }
270 updateScreen();
271 }
272 ws_global(msg);
273 }
283 }); 274 });

mercurial