node-red-contrib-s-tech-automation-tools
Version:
168 lines (159 loc) • 8.19 kB
HTML
<script type="text/javascript">
RED.nodes.registerType('ST-Regulator', {
category: 'S Tech tools',
color: '#FFD09D',
defaults: {
name: {value:null, required: true},
title: {value:null, required: true},
regultype: {value:"thermostat"},
strategy: {value:null},
min:{value:null, required: true},
max:{value:null, required: true},
target:{value:null},
hysteresis:{value:null},
invertrelay:{value:false},
locale:{value:"en-EN"},
channel: {value: null, required: true},
wbserver: {value:"", type:"WB-MQTT-Server"}
},
inputs:1,
outputs:1,
icon: "S-Tech.png",
label: function(){
return "S-Tech Regulator" + (this.title?" : "+this.title:"");
},
oneditprepare: function() {
$('#node-config-input-name').val(this.name);
$('#node-input-regultype').on('change',()=>{
var val = $('#node-input-regultype').find(":selected").val();
switch (val) {
case 'thermostat':
$('#node-input-strategy')
.find('option')
.remove()
.end()
.append('<option value="heating">Heating</option>')
.append('<option value="cooling">Cooling</option>')
.prop('disabled', false);
$('#node-input-strategy').val(this.strategy || 'heating')
$('#node-input-min').val(this.min || 15);
$('#node-input-max').val(this.max || 30);
$('#node-input-target').val(this.target || 20);
$('#node-input-hysteresis').val(this.hysteresis || 0.5);
break;
case 'hygrostat':
$('#node-input-strategy')
.find('option')
.remove()
.end()
.append('<option value="drying">Drying</option>')
.append('<option value="humidification">Humidification</option>')
.prop('disabled', false);
$('#node-input-strategy').val(this.strategy || 'drying')
$('#node-input-min').val(this.min || 20);
$('#node-input-max').val(this.max || 80);
$('#node-input-target').val(this.target || 35);
$('#node-input-hysteresis').val(this.hysteresis || 1);
break;
default:
$('#node-input-strategy')
.find('option')
.remove()
.end()
.prop('disabled', 'disabled');
break;
}
});
var userLocale = navigator.language || navigator.userLanguage;
document.getElementById('node-input-locale').value = userLocale;
},
oneditsave: function(){
this.name = $('#node-input-name').val();
this.title = $('#node-input-title').val();
this.regultype = $('#node-input-regultype').find(":selected").val();
this.strategy = $('#node-input-strategy').find(":selected").val();
this.min = $('#node-input-min').val();
this.max = $('#node-input-max').val();
this.target = $('#node-input-target').val();
this.hysteresis = ($('#node-input-hysteresis').val());
this.invertrelay = $('#node-input-invertrelay').prop('checked');
}
});
</script>
<script type="text/x-red" data-template-name="ST-Regulator">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
<div class="form-row">
<label for="node-input-title"><i class="fa fa-book"></i> Title</label>
<input type="text" id="node-input-title" placeholder="Title">
</div>
<div class="form-row">
<label for="node-input-wbserver"><i class="fa fa-server"></i> Server</span></label>
<input type="text" id="node-input-wbserver">
</div>
<div class="form-row">
<label for="node-input-regultype"><i class="fa fa-bookmark"></i> Type</label>
<select id="node-input-regultype" style="width: 70%;">
<option value="thermostat">Thermostat</option>
<option value="hygrostat">Hygrostat</option>
</select>
</div>
<div class="form-row">
<label for="node-input-strategy"><i class="fa fa-bullseye"></i> Strategy</label>
<select id="node-input-strategy" style="width: 70%;">
<option value="heating">Heating</option>
<option value="cooling">Cooling</option>
<option value="drying">Drying</option>
<option value="humidification">Humidification</option>
</select>
</div>
<div class="form-row">
<label for="node-input-min"><i class="fa fa-minus"></i> Min</label>
<input type="number" id="node-input-min">
</div>
<div class="form-row">
<label for="node-input-max"><i class="fa fa-plus"></i> Max</label>
<input type="number" id="node-input-max">
</div>
<div class="form-row">
<label for="node-input-target"><i class="fa fa-crosshairs"></i> Target</label>
<input type="number" id="node-input-target">
</div>
<div class="form-row">
<label for="node-input-hysteresis"><i class="fa fa-compress"></i> Hysteresis</label>
<input type="number" id="node-input-hysteresis" step="0.1">
</div>
<div class="form-row">
<input id="node-input-locale" name="locale" type="hidden">
</div>
<label for="node-input-invertrelay" style="width:70%">
<input type="checkbox" id="node-input-invertrelay" style="display:inline-block; width:22px; vertical-align:baseline;" autocomplete="off">
<span> Relay inverted control</span>
</label>
</script>
<script type="text/x-red" data-help-name="ST-Regulator">
<p>Этот узел создает устройство MQTT в нотации Wiren Board - виртуальный регулятор. Термостат или гигростат.</p>
<h3>Конфигурация:</h3>
<ul>
<li><strong>Name</strong> - Выберете любое имя для виртуального устройства. Это имя будет использоваться для MQTT топика.</li>
<li><strong>Title</strong> - Удобное для идентификации имя, будет показываться в интерфейсе Wirenboard.</li>
<li><strong>Server</strong> - Выберете экземпляр сервера MQTT для использования.</li>
<li><strong>Type</strong> - Выберете тип устройства.</li>
<li><strong>Strategy</strong> - Выберете стратегию регулировки.</li>
<li><strong>Min</strong> - Минимальное значение регулировки.</li>
<li><strong>Max</strong> - Максимальное значение регулировки.</li>
<li><strong>Target</strong> - Целевое значение по умолчанию.</li>
<li><strong>Hysteresis</strong> - Гистерезис регулирования.</li>
<li><strong>Relay inverted control</strong> - Инвертирование реле.</li>
</ul>
<h3>Вход:</h3>
<ul>
<li><strong>payload</strong> - Текущее значение температуры или влажности с датчика (Number).</li>
</ul>
<h3>Выход:</h3>
<ul>
<li><strong>payload</strong> - Отправляет команду (0 или 1) для реле нагрузки.</li>
</ul>
</script>