--- a/www/js/fermenter.js Thu May 02 15:49:16 2024 +0200 +++ b/www/js/fermenter.js Fri May 03 14:14:01 2024 +0200 @@ -98,16 +98,15 @@ { name: 'FW' }, { name: 'server_port', type: 'int' }, { name: 'websocket_port', type: 'int' }, - { name: 'thb_temp_uuid', map: 'THB>temperature>uuid' }, { name: 'temp_uuid', map: 'THB>temperature>uuid' }, { name: 'temp_state', map: 'THB>temperature>state' }, - { name: 'temp_value', map: 'THB>temperature>value', type: 'int' }, + { name: 'temp_value', map: 'THB>temperature>value', type: 'float' }, { name: 'hum_uuid', map: 'THB>humidity>uuid' }, { name: 'hum_state', map: 'THB>humidity>state' }, - { name: 'hum_value', map: 'THB>humidity>value', type: 'int' } + { name: 'hum_value', map: 'THB>humidity>value', type: 'float' } ], id: 'name', - url: 'getglobal.php' + url: 'dbglobal.php' }, globalData = new $.jqx.dataAdapter(globalSource, { loadComplete: function(records) { @@ -121,33 +120,40 @@ datafields: [ { name: 'type' }, { name: 'unit' }, + { name: 'beeruuid', map: 'metric>product>uuid' }, { name: 'beercode', map: 'metric>product>code' }, { name: 'beername', map: 'metric>product>name' }, - { name: 'yeast_lo', map: 'metric>product>yeast_lo' }, - { name: 'yeast_hi', map: 'metric>product>yeast_hi' }, + { name: 'yeast_lo', map: 'metric>product>yeast_lo', type: 'float' }, + { name: 'yeast_hi', map: 'metric>product>yeast_hi', type: 'float' }, + { name: 'air_address', map: 'metric>air>address' }, { name: 'air_state', map: 'metric>air>state' }, - { name: 'air_temperature', map: 'metric>air>temperature' }, + { name: 'air_temperature', map: 'metric>air>temperature', type: 'float' }, + { name: 'beer_address', map: 'metric>beer>address' }, { name: 'beer_state', map: 'metric>beer>state' }, - { name: 'beer_temperature', map: 'metric>beer>temperature' }, + { name: 'beer_temperature', map: 'metric>beer>temperature', type: 'float' }, + { name: 'chiller_address', map: 'metric>chiller>address' }, { name: 'chiller_state', map: 'metric>chiller>state' }, - { name: 'chiller_temperature', map: 'metric>chiller>temperature' }, - { name: 'heater_state', map: 'metric>heater>state' }, - { name: 'heater_usage', map: 'metric>heater>usage' }, - { name: 'cooler_state', map: 'metric>cooler>state' }, - { name: 'cooler_usage', map: 'metric>cooler>usage' }, - { name: 'fan_state', map: 'metric>fan>state' }, - { name: 'fan_usage', map: 'metric>fan>usage' }, + { name: 'chiller_temperature', map: 'metric>chiller>temperature', type: 'float' }, + { name: 'heater_address', map: 'metric>heater>address' }, + { name: 'heater_state', map: 'metric>heater>state', type: 'int' }, + { name: 'heater_usage', map: 'metric>heater>usage', type: 'int' }, + { name: 'cooler_address', map: 'metric>cooler>address' }, + { name: 'cooler_state', map: 'metric>cooler>state', type: 'int' }, + { name: 'cooler_usage', map: 'metric>cooler>usage', type: 'int' }, + { name: 'fan_address', map: 'metric>fan>address' }, + { name: 'fan_state', map: 'metric>fan>state', type: 'int' }, + { name: 'fan_usage', map: 'metric>fan>usage', type: 'int' }, { name: 'light_address', map: 'metric>light>address' }, - { name: 'light_state', map: 'metric>light>state' }, - { name: 'light_usage', map: 'metric>light>usage' }, + { name: 'light_state', map: 'metric>light>state', type: 'int' }, + { name: 'light_usage', map: 'metric>light>usage', type: 'int' }, { name: 'door_address', map: 'metric>door>address' }, - { name: 'door_state', map: 'metric>door>state' }, + { name: 'door_state', map: 'metric>door>state', type: 'int' }, { name: 'psu_address', map: 'metric>psu>address' }, - { name: 'psu_state', map: 'metric>psu>state' }, + { name: 'psu_state', map: 'metric>psu>state', type: 'int' }, { name: 'mode', map: 'metric>mode' }, { name: 'alarm', map: 'metric>alarm', type: 'int' }, - { name: 'setpoint_high', map: 'metric>setpoint>high' }, - { name: 'setpoint_low', map: 'metric>setpoint>low' }, + { name: 'setpoint_high', map: 'metric>setpoint>high', type: 'float' }, + { name: 'setpoint_low', map: 'metric>setpoint>low', type: 'float' }, { name: 'profile_uuid', map: 'metric>profile>uuid' }, { name: 'profile_name', map: 'metric>profile>name' }, { name: 'profile_state', map: 'metric>profile>state', type: 'string' }, @@ -155,10 +161,9 @@ { name: 'profile_inittemp_high', map: 'metric>profile>inittemp>high', type: 'float' }, { name: 'profile_inittemp_low', map: 'metric>profile>inittemp>low', type: 'float' }, { name: 'profile_steps', map: 'metric>profile>steps', type: 'string' }, - { name: 'stage', map: 'metric>stage', type: 'string' }, - { name: 'beeruuid', map: 'metric>product>uuid' } + { name: 'stage', map: 'metric>stage', type: 'string' } ], - id: 'alias', + id: 'unit', url: url }, dataAdapter = new $.jqx.dataAdapter(source, { @@ -169,24 +174,24 @@ }); function updateScreen() { - $('#room_thb').html(global.temp_value + '°C ' + global.hum_value + '% humidity'); + $('#room_thb').html(global.temp_value.toFixed(1) + '°C ' + global.hum_value.toFixed(1) + '% humidity'); $('#info_system').html(record.unit); $('#info_beer').html(record.beercode + ' - ' + record.beername); $('#info_mode').jqxDropDownList('selectItem', record.mode); $('#info_stage').jqxDropDownList('selectItem', record.stage); if (record.door_address) { - if (record.door_state != '0') { - $('#fermenter_doorled').html('<div class="LEDyellow_on"></div>Door'); - } else { - $('#fermenter_doorled').html('<div class="LEDyellow_off"></div>Door'); - } + if (record.door_state != '0') { + $('#fermenter_doorled').html('<div class="LEDyellow_on"></div>Door'); + } else { + $('#fermenter_doorled').html('<div class="LEDyellow_off"></div>Door'); + } } if (record.light_address) { - if (record.light_state != '0') { - $('#fermenter_lightled').html('<div class="LEDyellow_on"></div>Light'); - } else { - $('#fermenter_lightled').html('<div class="LEDyellow_off"></div>Light'); - } + if (record.light_state != '0') { + $('#fermenter_lightled').html('<div class="LEDyellow_on"></div>Light'); + } else { + $('#fermenter_lightled').html('<div class="LEDyellow_off"></div>Light'); + } } if (record.mode != 'OFF') { $('#fermenter_powerled').html('<div class="LEDblue_on"></div>Power'); @@ -209,25 +214,41 @@ $('#target_hi').jqxNumberInput({ readOnly: true, Width: 50, spinButtons: false }); } - $('.f_control_leds').show(); - if (record.heater_state != '0') { - $('#fermenter_led1').html('<div class="LEDgreen_on"></div>Heat'); + if (record.heater_address) { + if (record.heater_state != '0') { + $('#fermenter_led1').html('<div class="LEDgreen_on"></div>Heat'); + } else { + $('#fermenter_led1').html('<div class="LEDgreen_off"></div>Heat'); + } } else { - $('#fermenter_led1').html('<div class="LEDgreen_off"></div>Heat'); + $('#fermenter_led1').html('<div class="LEDgreen_hide"></div>Heat'); } - if (record.cooler_state != '0') { - $('#fermenter_led2').html('<div class="LEDgreen_on"></div>Cool'); + + if (record.cooler_address) { + if (record.cooler_state != '0') { + $('#fermenter_led2').html('<div class="LEDgreen_on"></div>Cool'); + } else { + $('#fermenter_led2').html('<div class="LEDgreen_off"></div>Cool'); + } } else { - $('#fermenter_led2').html('<div class="LEDgreen_off"></div>Cool'); + $('#fermenter_led2').html('<div class="LEDgreen_hide"></div>Cool'); } - if (record.fan_state != '0') { - $('#fermenter_led3').html('<div class="LEDgreen_on"></div>Fan'); + + if (record.fan_address) { + if (record.fan_state != '0') { + $('#fermenter_led3').html('<div class="LEDgreen_on"></div>Fan'); + } else { + $('#fermenter_led3').html('<div class="LEDgreen_off"></div>Fan'); + } } else { - $('#fermenter_led3').html('<div class="LEDgreen_off"></div>Fan'); + $('#fermenter_led3').html('<div class="LEDgreen_hide"></div>Fan'); } if (record.mode == 'NONE') { - $('.f_control_switches').show(); + $('#fermenter_toggle1,#fermenter_toggle2,#fermenter_toggle3').show(); + $('#fermenter_toggle1').jqxSwitchButton({ disabled: (record.heater_address) ? false:true }); + $('#fermenter_toggle2').jqxSwitchButton({ disabled: (record.cooler_address) ? false:true }); + $('#fermenter_toggle3').jqxSwitchButton({ disabled: (record.fan_address) ? false:true }); if ((record.heater_state != 0) != $('#fermenter_toggle1').jqxSwitchButton('val')) $('#fermenter_toggle1').val(record.heater_state != 0); if ((record.cooler_state != 0) != $('#fermenter_toggle2').jqxSwitchButton('val')) @@ -235,7 +256,8 @@ if ((record.fan_state != 0) != $('#fermenter_toggle3').jqxSwitchButton('val')) $('#fermenter_toggle3').val(record.fan_state != 0); } else { - $('.f_control_switches').hide(); + $('#fermenter_toggle1,#fermenter_toggle2,#fermenter_toggle3').jqxSwitchButton({ disabled:true }); + $('#fermenter_toggle1,#fermenter_toggle2,#fermenter_toggle3').hide(); } $('#info_profile').html(record.profile_name); @@ -291,29 +313,17 @@ $('#gaugeContainer_air').jqxGauge({ caption: { value: 'Air: ' + record.air_temperature.toFixed(3) }}); $('#gaugeContainer_air').jqxGauge({ value: record.air_temperature }); } - if (record.air_state == 'YES') { - $('#gaugeContainer_air').jqxGauge({ disabled: false }); - } else { - $('#gaugeContainer_air').jqxGauge({ disabled: true }); - } + $('#gaugeContainer_air').jqxGauge({ disabled: (record.air_state == 'YES') ? false:true }); if (record.beer_temperature !== undefined) { $('#gaugeContainer_beer').jqxGauge({ caption: { value: 'Beer: ' + record.beer_temperature.toFixed(3) }}); $('#gaugeContainer_beer').jqxGauge({ value: record.beer_temperature }); } - if (record.beer_state == 'YES') { - $('#gaugeContainer_beer').jqxGauge({ disabled: false }); - } else { - $('#gaugeContainer_beer').jqxGauge({ disabled: true }); - } + $('#gaugeContainer_beer').jqxGauge({ disabled: (record.beer_state == 'YES') ? false:true }); if (record.chiller_temperature !== undefined) { $('#gaugeContainer_chiller').jqxGauge({ value: record.chiller_temperature }); } - if (record.chiller_state == 'YES') { - $('#gaugeContainer_chiller').jqxGauge({ disabled: false }); - } else { - $('#gaugeContainer_chiller').jqxGauge({ disabled: true }); - } - } + $('#gaugeContainer_chiller').jqxGauge({ disabled: (record.chiller_state == 'YES') ? false:true }); + } /* Updatescreen */ $('#gaugeContainer_air').jqxGauge(gaugeoptions); $('#gaugeContainer_air').jqxGauge({ caption: { value: 'Air: 00.000' }}); @@ -442,7 +452,7 @@ var msg = evt.data; var obj = JSON.parse(msg); - console.log('ws got ' + msg); + // console.log('ws got ' + msg); if (obj.ping) { websocket.send('{"pong":' + obj.ping + '}'); @@ -459,6 +469,7 @@ global.room_hum = obj.THB.humidity; updateScreen(); } else if (obj.type == 'fermenter' && obj.unit == record.unit) { + console.log('ws got unit ' + msg); record.beeruuid = obj.metric.product.uuid; record.beercode = obj.metric.product.code; record.beername = obj.metric.product.name; @@ -476,14 +487,28 @@ record.chiller_state = obj.metric.chiller.state; record.chiller_temperature = obj.metric.chiller.temperature; } - if (obj.metric.heater) - record.heater_state = obj.metric.heater.state; - if (obj.metric.cooler) - record.cooler_state = obj.metric.cooler.state; - if (obj.metric.fan) + if (obj.metric.heater) { + record.heater_address = obj.metric.heater.address; + record.heater_state = obj.metric.heater.state; + } else { + record.heater_address = ''; + } + if (obj.metric.cooler) { + record.cooler_address = obj.metric.cooler.address; + record.cooler_state = obj.metric.cooler.state; + } else { + record.cooler_address = ''; + } + if (obj.metric.fan) { + record.fan_address = obj.metric.fan.address; record.fan_state = obj.metric.fan.state; - if (obj.metric.door) - record.door_state = obj.metric.door.state; + } else { + record.fan_address = ''; + } + if (obj.metric.door) { + record.door_address = obj.metric.door.address; + record.door_state = obj.metric.door.state; + } if (obj.metric.light) record.light_state = obj.metric.light.state; if (obj.metric.psu)