iobroker.nightscout
Version:
Provides nightscout server and client for sugar monitoring
522 lines (486 loc) • 24.2 kB
HTML
<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) ;
width: 100% ;
}
</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>