# HG changeset patch # User Michiel Broek # Date 1553687457 -3600 # Node ID 26c6f8e5d58ebcbeacd79c75297cf5a0e3dfd49c # Parent 2987e5bb830d6cfa80ef95ddfaabb0c68ea75e17 Added webcam_url and webcam_light fields to the mon_fermenters database table. Currently these fields need to be set using phpMyAdmin or another tool. If the webcam_url field is set, then on the mon_fermenter webpage a button is added to show a webcam page. diff -r 2987e5bb830d -r 26c6f8e5d58e bmsd/bms.h --- a/bmsd/bms.h Mon Mar 25 20:47:25 2019 +0100 +++ b/bmsd/bms.h Wed Mar 27 12:50:57 2019 +0100 @@ -201,6 +201,8 @@ char *profile_steps; ///< Profile steps in JSON float yeast_lo; ///< Yeast minimum temperature float yeast_hi; ///< Yeast maximum temperature + char *webcam_url; ///< Webcam url to the stream + int webcam_light; ///< Webcam control lights } sys_fermenter_list; diff -r 2987e5bb830d -r 26c6f8e5d58e bmsd/mysql.c --- a/bmsd/mysql.c Mon Mar 25 20:47:25 2019 +0100 +++ b/bmsd/mysql.c Wed Mar 27 12:50:57 2019 +0100 @@ -207,6 +207,8 @@ fermenter->stage = xstrcpy(row[43]); fermenter->yeast_lo = atof(row[45]); fermenter->yeast_hi = atof(row[46]); + fermenter->webcam_url = xstrcpy(row[47]); + fermenter->webcam_light = atoi(row[48]); if (fermenters == NULL) { fermenters = fermenter; @@ -291,6 +293,8 @@ free(tmpf->profile_state); if (tmpf->profile_steps) free(tmpf->profile_steps); + if (tmpf->webcam_url) + free(tmpf->webcam_url); free(tmpf); } for (tmpn = nodes; tmpn; tmpn = oldtmpn) { @@ -421,7 +425,7 @@ "mode='%s', alarm='%d', setpoint_high='%.3f', setpoint_low='%.3f', " \ "profile_uuid='%s', profile_name='%s', profile_state='%s', profile_percent='%d', " \ "profile_inittemp_high='%.3f', profile_inittemp_low='%.3f', profile_steps='%s', stage='%s', " \ - "yeast_lo='%.1f', yeast_hi='%.1f'", + "yeast_lo='%.1f', yeast_hi='%.1f', webcam_url='%s', webcam_light='%d'", fermenter->uuid, fermenter->alias, fermenter->node, fermenter->online ? "Y":"N", fermenter->beercode ? fermenter->beercode : "", fermenter->beername ? fermenter->beername : "", fermenter->beeruuid ? fermenter->beeruuid : "", @@ -438,7 +442,8 @@ fermenter->profile_uuid ? fermenter->profile_uuid : "", fermenter->profile_name ? fermenter->profile_name : "", fermenter->profile_state ? fermenter->profile_state : "", fermenter->profile_percent, fermenter->profile_inittemp_high, fermenter->profile_inittemp_low, - fermenter->profile_steps ? fermenter->profile_steps : "", fermenter->stage, fermenter->yeast_lo, fermenter->yeast_hi); + fermenter->profile_steps ? fermenter->profile_steps : "", fermenter->stage, fermenter->yeast_lo, fermenter->yeast_hi, + fermenter->webcam_url ? fermenter->webcam_url : "", fermenter->webcam_light); // printf("%s\n", query); @@ -470,7 +475,7 @@ "mode='%s', alarm='%d', setpoint_high='%.3f', setpoint_low='%.3f', " \ "profile_uuid='%s', profile_name='%s', profile_state='%s', profile_percent='%d', " \ "profile_inittemp_high='%.3f', profile_inittemp_low='%.3f', profile_steps='%s', stage='%s', " \ - "yeast_lo='%.1f', yeast_hi='%.1f' WHERE uuid='%s'", + "yeast_lo='%.1f', yeast_hi='%.1f', webcam_url='%s', webcam_light='%d' WHERE uuid='%s'", fermenter->online ? "Y":"N", fermenter->beercode ? fermenter->beercode : "", fermenter->beername ? fermenter->beername : "", fermenter->beeruuid ? fermenter->beeruuid : "", fermenter->air_address ? fermenter->air_address : "", fermenter->air_state ? fermenter->air_state : "", fermenter->air_temperature, @@ -486,7 +491,8 @@ fermenter->profile_uuid ? fermenter->profile_uuid : "", fermenter->profile_name ? fermenter->profile_name : "", fermenter->profile_state ? fermenter->profile_state : "", fermenter->profile_percent, fermenter->profile_inittemp_high, fermenter->profile_inittemp_low, - fermenter->profile_steps ? fermenter->profile_steps : "", fermenter->stage, fermenter->yeast_lo, fermenter->yeast_hi, fermenter->uuid); + fermenter->profile_steps ? fermenter->profile_steps : "", fermenter->stage, fermenter->yeast_lo, fermenter->yeast_hi, + fermenter->webcam_url ? fermenter->webcam_url : "", fermenter->webcam_light, fermenter->uuid); // printf("%s\n", query); diff -r 2987e5bb830d -r 26c6f8e5d58e doc/bms-ch3.sgml --- a/doc/bms-ch3.sgml Mon Mar 25 20:47:25 2019 +0100 +++ b/doc/bms-ch3.sgml Wed Mar 27 12:50:57 2019 +0100 @@ -156,10 +156,6 @@ "uuid": "48c9ae27-3f58-41c9-ae4b-1d57b249c45a", "alias": "unit1", "product": { - "code": "CB0063", - "name": "Schot voor de boeg" - }, - "product": { "uuid": "1eb0c7bf-bf06-491c-a086-ac5478d521b9", "code": "CB0001", "name": "Hoppy Housebeer" @@ -213,6 +209,10 @@ "low": 21.0, "high": 21.0 }, + "webcam": { + "url":"https://the.webcamserver.com:8090/?action=stream", + "light": 1 + }, "alarm": 0, "profile": { "uuid": "c93ad1bb-0446-4788-9c43-83990c5f8b82", diff -r 2987e5bb830d -r 26c6f8e5d58e www/js/mon_fermenter.js --- a/www/js/mon_fermenter.js Mon Mar 25 20:47:25 2019 +0100 +++ b/www/js/mon_fermenter.js Wed Mar 27 12:50:57 2019 +0100 @@ -334,7 +334,9 @@ { name: 'stage', type: 'string' }, { name: 'beeruuid', type: 'string' }, { name: 'yeast_lo', type: 'float' }, - { name: 'yeast_hi', type: 'float' } + { name: 'yeast_hi', type: 'float' }, + { name: 'webcam_url', type: 'string' }, + { name: 'webcam_light', type: 'int' } ], id: 'record', url: url @@ -467,6 +469,11 @@ $("#Profile2").hide(); $("#status_profile").html(''); } + if (record.online && (record.webcam_url != "")) { + $("#Camera").show(); + } else { + $("#Camera").hide(); + } yl = record.yeast_lo; yh = record.yeast_hi; @@ -675,5 +682,10 @@ var url="log_fermentation.php?code=" + record.beercode + "&name=" + record.beername; window.open(url); }); + $("#Camera").jqxButton({ template: "primary", width: '150px', theme: theme }); + $("#Camera").click(function () { + var url=record.webcam_url; + window.open(url); + }); createAbortElements(); }); diff -r 2987e5bb830d -r 26c6f8e5d58e www/mon_fermenter.php --- a/www/mon_fermenter.php Mon Mar 25 20:47:25 2019 +0100 +++ b/www/mon_fermenter.php Wed Mar 27 12:50:57 2019 +0100 @@ -81,6 +81,7 @@
+