Skip to content

Commit ebc93f8

Browse files
committed
improve QR scanner
1 parent 7cbb4ad commit ebc93f8

File tree

2 files changed

+48
-18
lines changed

2 files changed

+48
-18
lines changed

www/index.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,18 @@ <h3>Lokales Anlernen</h3>
214214
<td><input type="number" id="add-device-ip-time" value="60"/>s</td>
215215
<td><input type="button" id="add-device-ip-start" value="Anlernmodus aktivieren"/></td>
216216
</tr>
217+
<tr class="add-device-local">
218+
<td>QR Scanner</td>
219+
<td>
220+
<select id="qr-enable">
221+
<option>disable</option>
222+
<option>enable</option>
223+
</select>
224+
</td>
225+
</tr>
226+
<tr>
227+
<td colspan="3" id="qr-error" style="color: red;"></td>
228+
</tr>
217229
<tr class="add-device-local">
218230
<td colspan="3">
219231
<video id="qr"></video>

www/js/homematic-manager.js

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -139,12 +139,36 @@ scanner.addListener('scan', content => {
139139
$('#add-device-ip-key').val(key);
140140
}
141141
});
142-
Instascan.Camera.getCameras().then(c => {
143-
cameras = c;
144-
}).catch(e => {
145-
console.error(e);
142+
143+
function startScanner() {
144+
Instascan.Camera.getCameras().then(c => {
145+
if (c.length > 0) {
146+
scanner.start(c[0]).catch(e => {
147+
$('#qr-error').html(`Error: ${e.message}`);
148+
});
149+
} else {
150+
$('#qr-error').html(`Error: no camera found`);
151+
}
152+
}).catch(e => {
153+
$('#qr-error').html(`Error: ${e.message}`);
154+
});
155+
}
156+
157+
function stopScanner() {
158+
scanner.stop();
159+
$('#qr-error').html('');
160+
$('#qr-enable').val('disable');
161+
}
162+
163+
$('#qr-enable').change(() => {
164+
if ($('#qr-enable').val() === 'enable') {
165+
startScanner();
166+
} else {
167+
stopScanner();
168+
}
146169
});
147170

171+
148172
// Entrypoint
149173
getConfig();
150174

@@ -1022,15 +1046,18 @@ function initGridDevices() {
10221046
autoOpen: false,
10231047
modal: true,
10241048
width: 640,
1025-
height: 480,
1049+
height: 506,
10261050
buttons: [
10271051
{
10281052
text: _('Cancel'),
10291053
click() {
10301054
$(this).dialog('close');
10311055
}
10321056
}
1033-
]
1057+
],
1058+
beforeClose() {
1059+
stopScanner();
1060+
}
10341061
});
10351062
$dialogAddCountdown.dialog({
10361063
autoOpen: false,
@@ -1186,16 +1213,13 @@ function initGridDevices() {
11861213
case 'local':
11871214
$('.add-device-keyserver').hide();
11881215
$('.add-device-local').show();
1189-
if (cameras.length > 0) {
1190-
scanner.start(cameras[0]);
1191-
}
1216+
11921217
break;
11931218
default:
11941219
$('.add-device-local').hide();
11951220
$('.add-device-keyserver').show();
1196-
if (cameras.length > 0) {
1197-
scanner.stop();
1198-
}
1221+
$('#qr-enable').val('disable');
1222+
stopScanner();
11991223
}
12001224
}
12011225
});
@@ -1211,9 +1235,6 @@ function initGridDevices() {
12111235
const sgtin = $.trim($('#add-device-ip-address').val()).toUpperCase().replace(/-/g, '');
12121236
const key = $.trim($('#add-device-ip-key').val()).toUpperCase().replace(/-/g, '');
12131237
if (sgtin && key) {
1214-
if (cameras.length > 0) {
1215-
scanner.stop();
1216-
}
12171238
$('#dialog-add-device-ip').dialog('close');
12181239
rpcDialog(daemon, 'setInstallModeWithWhitelist', [true, time, [{
12191240
ADDRESS: sgtin,
@@ -1238,9 +1259,6 @@ function initGridDevices() {
12381259
break;
12391260
}
12401261
default: {
1241-
if (cameras.length > 0) {
1242-
scanner.stop();
1243-
}
12441262
$('#dialog-add-device-ip').dialog('close');
12451263
rpcAlert(daemon, 'setInstallMode', [true, time], err => {
12461264
if (!err) {

0 commit comments

Comments
 (0)