UNPKG

iobroker.nightscout

Version:

Provides nightscout server and client for sugar monitoring

522 lines (486 loc) 24.2 kB
<html> <head> <!-- Load ioBroker scripts and styles--> <link rel="stylesheet" type="text/css" href="../../css/adapter.css"/> <link rel="stylesheet" type="text/css" href="../../lib/css/materialize.css"> <script type="text/javascript" src="../../lib/js/jquery-3.2.1.min.js"></script> <script type="text/javascript" src="../../socket.io/socket.io.js"></script> <script type="text/javascript" src="../../js/translate.js"></script> <script type="text/javascript" src="../../lib/js/materialize.js"></script> <script type="text/javascript" src="../../js/adapter-settings.js"></script> <!-- Load our own files --> <link rel="stylesheet" type="text/css" href="style.css"/> <script type="text/javascript" src="words.js"></script> <style> .license_text { padding-bottom: 20px; } .modal-sub-content { width: 100%; overflow: auto; height: calc(100% - 60px); } .m .modal-content { height: calc(100% - 54px) !important; width: 100% !important; } </style> <script type="text/javascript"> var envs; function showHideSettings() { if ($('#local').prop('checked')) { $('.server').show(); $('.clientOnly').hide(); if ($('#secure').prop('checked')) { $('.col-leEnabled').show(); if ($('#leEnabled').prop('checked')) { $('.col-certPublic').hide(); $('.col-certPrivate').hide(); $('.col-certChained').hide(); } else { $('.col-certPublic').show(); $('.col-certPrivate').show(); $('.col-certChained').show(); } } else { $('.col-certPublic').hide(); $('.col-certPrivate').hide(); $('.col-certChained').hide(); $('.col-leEnabled').hide(); } } else { $('.server').hide(); $('.clientOnly').show(); } } function load(settings, onChange) { if (!settings) return; getIPs(function (ips) { for (var i = 0; i < ips.length; i++) { $('#bind').append('<option value="' + ips[i].address + '">' + ips[i].name + '</option>'); } $('#bind.value').val(settings.bind).select(); }); $('.value-enable[data-value="pump"]').on('change', function () { if ($(this).prop('checked')) { $('.pump').show(); } else { $('.pump').hide(); } }); $('.value-enable').on('change', function () { onChange(); }); $('.value-pump').on('change', function () { onChange(); }); var enabled = (settings.enabled || '').trim().split(' '); var pumpEnabled = false; for (var e = 0; e < enabled.length; e++) { var val = enabled[e].trim(); val && $('.value-enable[data-value="' + val + '"]').prop('checked', true); if (val === 'pump') { pumpEnabled = true; } } if (pumpEnabled) { $('.pump').show(); } else { $('.pump').hide(); } var pump = (settings.pumpFields || '').trim().split(' '); for (var p = 0; p < pump.length; p++) { var pVal = pump[p].trim(); pVal && $('.value-pump[data-value="' + pVal + '"]').prop('checked', true); } $('.value').each(function () { var $key = $(this); var id = $key.attr('id'); if ($key.attr('type') === 'checkbox') { // do not call onChange direct, because onChange could expect some arguments $key.prop('checked', settings[id]).on('change', function () { showHideSettings(); onChange(); }); } else { // do not call onChange direct, because onChange could expect some arguments $key.val(settings[id]) .on('change', () => onChange()) .on('keyup', () => onChange()); } }); showHideSettings(); onChange(false); fillSelectCertificates('#certPublic', 'public', settings.certPublic); fillSelectCertificates('#certPrivate', 'private', settings.certPrivate); fillSelectCertificates('#certChained', 'chained', settings.certChained); envs = settings.envs || []; values2table('envs', envs, onChange); var $dialogLicense = $('#dialog-license-main'); $dialogLicense.find('.license_diag').on('change', function () { if ($(this).prop('checked')) { $dialogLicense.find('.license_agree').removeClass('disabled'); } else { $dialogLicense.find('.license_agree').addClass('disabled'); } }); if (!settings.licenseAccepted) { $dialogLicense.find('.license_agree').addClass('disabled'); $dialogLicense.modal({ dismissible: false, complete: function () { } }).modal('open'); $dialogLicense.find('.license_disagree').on('click', function () { $('.btn-cancel').trigger('click'); }); $dialogLicense.find('.license_agree').on('click', function () { onChange(); }); } // reinitialize all the Materialize labels on the page if you are dynamically adding inputs: M && M.updateTextFields(); } function save(callback) { var obj = {}; $('.value').each(function () { var $this = $(this); if ($this.attr('type') === 'checkbox') { obj[$this.attr('id')] = $this.prop('checked'); } else { obj[$this.attr('id')] = $this.val(); } }); if ($('#secure').prop('checked') && (!$('#certPrivate').val() || !$('#certPublic').val())) { showToast(null, _('Set certificates or load it first in the system settings (right top).')); return; } obj.enabled = []; $('.value-enable').each(function () { $(this).prop('checked') && obj.enabled.push($(this).data('value')); }); obj.enabled = obj.enabled.join(' '); obj.pumpFields = []; $('.value-pump').each(function () { $(this).prop('checked') && obj.pumpFields.push($(this).data('value')); }); obj.pumpFields = obj.pumpFields.join(' '); obj.envs = table2values('envs'); obj.licenseAccepted = true; callback(obj); } </script> </head> <body> <div class="m adapter-container"> <div class="row"> <div class="col s12"> <ul class="tabs"> <li class="tab col s3"><a href="#tab-settings" class="translate active">Settings</a></li> <li class="tab col s3 server"><a href="#tab-main" class="translate">Main settings</a></li> <li class="tab col s3 server"><a href="#tab-components" class="translate">Components</a></li> <li class="tab col s3 server"><a href="#tab-envs" class="translate">Custom settings</a></li> </ul> </div> <div id="tab-settings" class="col s12 page"> <div class="row"> <div class="col s6"> <img src="nightscout.png" class="logo" alt="logo"/> </div> </div> <div class="row" style="padding-bottom: 20px"> <div class="col s12 m4"> <input class="value" id="local" type="checkbox"/> <span class="translate" for="local">use integrated nightscout server</span> </div> </div> <div class="row server"> <div class="col s12 m8 l5"> <select class="value" id="bind"></select> <label class="translate" for="bind">IP</label> </div> <div class="col s12 m4 l1"> <input class="value" id="port" size="5" maxlength="5" type="number"/> <label class="translate" for="port">Port</label> </div> </div> <div class="row server" style="padding-bottom: 20px"> <div class="col s12 m4"> <input class="value" id="secure" type="checkbox"/> <span class="translate" for="secure">Secure(HTTPS)</span> </div> <div class="col s12 m4 col-leEnabled"> <input class="value" id="leEnabled" type="checkbox" data-link="lets-encrypt-certificates"/> <span for="leEnabled" class="translate">Use Lets Encrypt certificates</span> </div> </div> <div class="row server"> <div class="col s12 m4 col-certPublic"> <select id="certPublic" class="value"></select> <label class="translate" for="certPublic">Public certificate</label> </div> <div class="col s12 m4 col-certPrivate"> <select id="certPrivate" class="value"></select> <label class="translate" for="certPrivate">Private certificate</label> </div> <div class="col s12 m4 col-certChained"> <select id="certChained" class="value"></select> <label class="translate" for="certChained">Chained certificate</label> </div> </div> <div class="row clientOnly" style="padding-bottom: 20px"> <div class="col s12 m4"> <input class="value" id="url" type="text"/> <label class="translate" for="url">remote nightscout URL</label> </div> </div> <div class="row clientOnly" style="padding-bottom: 20px"> <div class="col s12 m4"> <input class="value" id="remoteSecret" type="text"/> <label class="translate" for="remoteSecret">remote API secret</label> </div> </div> </div> <div id="tab-main" class="col s12 page server"> <div class="row"> <div class="input-field col s12 m6 l4"> <input id="mongo" class="value" type="text"/> <label for="mongo" class="translate">Mongo connection string</label> </div> </div> <div class="row"> <div class="input-field col s12 m6 l4"> <input id="secret" class="value" type="text"/> <label for="secret" class="translate">API Secret</label> <span class="translate">minimum 12 characters</span> </div> <div class="col s12 m4"> <input class="value" id="allowUnauthorized" type="checkbox"/> <span for="allowUnauthorized" class="translate">Allow unauthorized users</span> </div> </div> <div class="row"> <div class="input-field col s12 m4 l3"> <select id="language" class="value"> <option value="" class="translate">system</option> <option value="en">English</option> <option value="de">Deutsch</option> <option value="ru">русский</option> <option value="pt">Portugues</option> <option value="nl">Nederlands</option> <option value="fr">français</option> <option value="it">Italiano</option> <option value="es">Espanol</option> <option value="pl">Polski</option> <option value="zh-cn">简体中文</option> </select> <label class="translate" for="language">Language</label> </div> <div class="input-field col s12 m4 l2"> <select id="units" class="value"> <option value="mg/dl" class="translate">mg/dl</option> <option value="mmol" class="translate">mmol</option> </select> <label class="translate" for="units">Units</label> </div> </div> </div> <div id="tab-components" class="col s12 page"> <div class="row"> <h4>Components</h4> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="careportal"/> <span class="translate">Careportal</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="rawbg"/> <span class="translate">Raw BG</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="iob"/> <span class="translate">Insulin-on-Board</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="delta"/> <span class="translate">BG Delta</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="direction"/> <span class="translate">BG Direction</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="upbat"/> <span class="translate">Uploader Battery</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="timeago"/> <span class="translate">Time Ago</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="devicestatus"/> <span class="translate">Device Status</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="errorcodes"/> <span class="translate">CGM Error Codes</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="ar2"/> <span class="translate">AR2 Forecasting</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="simplealarms"/> <span class="translate">Simple BG Alarms</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="profile"/> <span class="translate">Treatment Profile</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="boluscalc"/> <span class="translate">Bolus Wizard</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="food"/> <span class="translate">Custom Foods</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="cob"/> <span class="translate">Carbs-on-Board</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="bwp"/> <span class="translate">Bolus Wizard Preview</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="cage"/> <span class="translate">Cannula Age</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="sage"/> <span class="translate">Sensor Age</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="iage"/> <span class="translate">Insulin Age</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="bage"/> <span class="translate">Battery Age</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="treatmentnotify"/> <span class="translate">Treatment Notifications</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="basal"/> <span class="translate">Basal Profile</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="bridge"/> <span class="translate">Share2Nightscout bridge</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="mmconnect"/> <span class="translate">MiniMed Connect bridge</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="pump"/> <span class="translate">Pump Monitoring</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="openaps"/> <span class="translate">OpenAPS</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="loop"/> <span class="translate">Loop</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="override"/> <span class="translate">Override Mode</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="xdrip-js"/> <span class="translate">xDrip-js</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-enable" type="checkbox" data-value="cors"/> <span class="translate">CORS</span> </div> </div> <div class="row pump"> <h4>Pump settings</h4> <div class="input-field col s6 m4 l2"> <input class="value-pump" type="checkbox" data-value="reservoir"/> <span class="translate">Reservoir</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-pump" type="checkbox" data-value="battery"/> <span class="translate">Battery</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-pump" type="checkbox" data-value="clock"/> <span class="translate">Clock</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-pump" type="checkbox" data-value="status"/> <span class="translate">Status</span> </div> <div class="input-field col s6 m4 l2"> <input class="value-pump" type="checkbox" data-value="device"/> <span class="translate">Device</span> </div> </div> </div> <div id="tab-envs" class="col s12 page"> <div><span class="translate">The possible environment variables could be found here:</span><a href="https://github.com/nightscout/cgm-remote-monitor#environment" target="_blank">link</a></div> <div class="col s12" id="envs"> <a class="btn-floating waves-effect waves-light blue table-button-add"><i class="material-icons">add</i></a> <div class="table-values-div"> <table class="table-values"> <thead> <tr> <th data-name="name" class="translate">name</th> <th data-name="value" class="translate">value</th> <th data-buttons="delete up down"></th> </tr> </thead> </table> </div> </div> </div> </div> <div id="dialog-license-main" class="modal modal-fixed-footer"> <div class="modal-content"> <div class="col s12 m6 l3"> <h5 class="translate">Disclaimer</h5> </div> <div class="modal-sub-content"> <div class="row license-text"> <div class="col s12"> <div class="translate license_text" style="color: red">license_text_1</div> <div class="translate license_text">license_text_2</div> <div class="translate license_text">license_text_3</div> <div class="translate license_text">license_text_4</div> <div class="translate license_text">license_text_5</div> </div> </div> <div class="row"> <div class="col s12 m6 l9 license-checkbox-box"> <input class="license_diag filled-in" type="checkbox"/> <span class="translate license_checkbox" for="license_diag">Have read and understood</span> </div> </div> </div> </div> <div class="modal-footer"> <a class="license_agree modal-action modal-close waves-effect waves-green btn"><span class="translate">agree</span></a> <a class="license_disagree modal-action modal-close waves-effect waves-green btn"><span class="translate">close</span></a> </div> </div> </div> </body> </html>