node-red-contrib-hikvision-ultimate
Version:
A native set of nodes for Hikvision (and compatible) Cameras, Alarms, Radars, NVR, Doorbells, etc.
144 lines (136 loc) • 6.91 kB
HTML
<script type="text/javascript">
RED.nodes.registerType('AXPro-config', {
category: 'config',
defaults: {
host: { value: "", required: true },
port: { value: 80, required: true, validate: RED.validators.number() },
name: { value: "Ax Pro" },
authentication: { value: "sha256-salted" },
protocol: { value: "http" },
heartbeattimerdisconnectionlimit: { value: 2 },
debuglevel: { value: "no" },
deviceinfo: { value: {} }
},
credentials: {
user: { type: "text" },
password: { type: "password" }
},
oneditprepare: function () {
var node = this;
var discoveredDevices = [];
function applyDiscoveredDevice(index) {
var device = discoveredDevices[index];
if (!device) return;
if (device.host) $("#node-config-input-host").val(device.host);
if (device.port) $("#node-config-input-port").val(device.port);
if (device.name && (!$("#node-config-input-name").val() || $("#node-config-input-name").val() === "Ax Pro")) $("#node-config-input-name").val(device.name);
}
function refreshDiscoveredDevices() {
var button = $("#node-config-input-discover-devices");
var select = $("#node-config-input-discovered-device");
button.val("Searching...");
button.prop("disabled", true);
select.empty().append('<option value="">Searching Hikvision devices...</option>');
$.getJSON("hikvisionUltimateDiscoverOnlineDevices", function (data) {
discoveredDevices = Array.isArray(data) ? data : [];
select.empty();
if (discoveredDevices.length === 0) {
select.append('<option value="">No devices found</option>');
return;
}
select.append('<option value="">Select discovered device...</option>');
discoveredDevices.forEach(function (device, index) {
select.append($("<option></option>").attr("value", index).text(device.label || (device.host + ":" + device.port)));
});
}).fail(function () {
select.empty().append('<option value="">Discovery unavailable</option>');
}).always(function () {
button.val("Discover");
button.prop("disabled", false);
});
}
$("#node-config-input-discovered-device").change(function () { applyDiscoveredDevice($(this).val()); });
$("#node-config-input-discover-devices").click(refreshDiscoveredDevices);
refreshDiscoveredDevices();
},
oneditsave: function () {
},
label: function () {
return typeof this.name === undefined ? (this.host + ":" + this.port) : this.name + " " + (this.host + ":" + this.port);
}
});
</script>
<script type="text/html" data-template-name="AXPro-config">
<div class="form-row">
<b>AX Pro config</b>    <span style="color:red"><i class="fa fa-question-circle"></i> <a target="_blank" href="https://github.com/Supergiovane/node-red-contrib-hikvision-ultimate"><u>Help online</u></a></span>
<br/>
<br/>
</div>
<div class="form-row">
<label for="node-config-input-discovered-device">
<i class="fa fa-search"></i> Discover
</label>
<select id="node-config-input-discovered-device" style="width:45%"></select>
<input type="button" id="node-config-input-discover-devices" class="ui-button ui-corner-all ui-widget" style="width:110px;margin-left:6px" value="Discover">
</div>
<div class="form-row">
<label for="node-config-input-name" >
<i class="fa fa-tag"></i> Name
</label>
<input type="text" id="node-config-input-name" placeholder="Click Connect to check the alarm panel connection">
</div>
<div class="form-row">
<label for="node-config-input-host">
<i class="fa fa-server"></i> AX Pro IP
</label>
<input type="text" id="node-config-input-host" placeholder="">
</div>
<div class="form-row">
<label for="node-config-input-port"> Port</label>
<input type="text" id="node-config-input-port" placeholder="">
</div>
<div class="form-row">
<label for="node-config-input-protocol"><i class="fa fa-sign-in"></i> Protocol</label>
<select type="text" id="node-config-input-protocol">
<option value="http">Http</option>
<option value="https">Https</option>
</select>
</div>
<div class="form-row">
<label for="node-config-input-user"> Hik-Connect Username</label>
<input type="text" id="node-config-input-user" placeholder="">
</div>
<div class="form-row">
<label for="node-config-input-password"> Hik-Connect Password</label>
<input type="password" id="node-config-input-password" placeholder="">
</div>
<div class="form-row">
<label for="node-config-input-authentication"><i class="fa fa-sign-in"></i> Auth.</label>
<select type="text" id="node-config-input-authentication">
<option value="sha256-salted">sha256-salted</option>
</select>
</div>
<div class="form-row">
<label for="node-config-input-heartbeattimerdisconnectionlimit"><i class="fa fa-exclamation-triangle"></i> Emit error</label>
<select type="text" id="node-config-input-heartbeattimerdisconnectionlimit">
<option value=1>after 1 failed reconnection attempt (not recommended)</option>
<option value=2>after 2 failed reconnection attempts (Default)</option>
<option value=3>after 3 failed reconnection attempts</option>
<option value=4>after 4 failed reconnection attempts</option>
</select>
</div>
<div class="form-row">
<label for="node-config-input-debuglevel"><i class="fa fa-exclamation-triangle"></i> Debug level</label>
<select type="text" id="node-config-input-debuglevel">
<option value="no">No. No debug text please.</option>
<option value="yes">Turn on the debug mode.</option>
</select>
</div>
<div class="form-tips" style="margin-top:11px">
Above option: after connection error, the node try to reconnect for the number of times selected, then emits a connection error on PIN 2. Increase this number for slow LANs, like VPN
</div>
<br/>
<div class="form-row">
<input type="hidden" id="node-config-input-deviceinfo" placeholder="">
</div>
</script>