node-red-contrib-homematic
Version:
node-red node to control homematic devices
204 lines (195 loc) • 7.63 kB
HTML
<script type="text/x-red" data-template-name="homematic">
<div class="form-row" id="node-form-ccu">
<label for="node-input-ccu"><i class="fa fa-dot-circle-o"></i> CCU</label>
<input type="text" id="node-input-ccu">
</div>
<div class="form-row" id="node-form-device">
<label for="node-input-device"><i class="fa fa-dot-circle-o"></i> Device</label>
<input type="text" id="node-input-device">
</div>
<div class="form-row" id="node-form-function">
<label for="node-input-function"><i class="fa fa-list"></i> Function</label>
<select id="node-input-function">
<option value=""></option>
<option value="setValue">setValue</option>
<option value="getValue">getValue</option>
</select>
</div>
<div class="form-row" id="node-form-attribute">
<label for="node-input-attribute"><i class="fa fa-list"></i> Attribute</label>
<select id="node-input-attribute">
<option value=""></option>
<option value="ACTUAL_TEMPERATURE">ACTUAL_TEMPERATURE</option>
<option value="ACTUAL_HUMIDITY">ACTUAL_HUMIDITY</option>
<option value="ABS_HUMIDITY">ABS_HUMIDITY</option>
<option value="HUMIDITY">HUMIDITY</option>
<option value="SET_TEMPERATURE">SET_TEMPERATURE</option>
<option value="MANU_MODE">MANU_MODE</option>
<option value="AUTO_MODE">AUTO_MODE</option>
<option value="BOOST_MODE">BOOST_MODE</option>
<option value="COMFORT_MODE">COMFORT_MODE</option>
<option value="LOWERING_MODE">LOWERING_MODE</option>
<option value="PARTY_MODE">PARTY_MODE</option>
<option value="PARTY_MODE_SUBMIT">PARTY_MODE_SUBMIT</option>
<option value="PARTY_TEMPERATURE">PARTY_TEMPERATURE</option>
<option value="PARTY_SET_POINT_TEMPERATURE">PARTY_SET_POINT_TEMPERATURE</option>
<option value="LEVEL">LEVEL</option>
<option value="STATE">STATE</option>
<option value="OPEN">OPEN</option>
<option value="BRIGHTNESS">BRIGHTNESS</option>
<option value="MOTION">MOTION</option>
<option value="LOWBAT">LOWBAT</option>
<option value="ACTIVE_PROFILE">ACTIVE_PROFILE</option>
<option value="WINDOW_STATE">WINDOW_STATE</option>
<option value="SET_POINT_TEMPERATURE">SET_POINT_TEMPERATURE</option>
<option value="SET_POINT_MODE">SET_POINT_MODE</option>
<option value="CONFIG_PENDING">CONFIG_PENDING</option>
<option value="CURRENT">CURRENT</option>
<option value="FREQUENCY">FREQUENCY</option>
<option value="VOLTAGE">VOLTAGE</option>
<option value="POWER">POWER</option>
<option value="RAMP_TIME">RAMP_TIME</option>
</select>
</div>
<div class="form-row hidden" id="node-form-value">
<label for="node-input-value"><i class="fa fa-sign-out"></i> Value</label>
<input type="text" id="node-input-value" placeholder="Value">
</div>
<div class="form-row" id="node-form-nodeName">
<label for="node-input-nodeName"><i class="fa fa-tag"></i> Node Name</label>
<input type="text" id="node-input-nodeName" placeholder="Homematic">
</div>
</script>
<script type="text/x-red" data-help-name="homematic">
<p>This Node provides predefined commands to control Homematic devices.</p>
<p>Choose function, channel, attribute and value you want to set</p>
<p></p>
<p><b>Outputs:</b> a msg object containing "remote script calls" which can be send to the CCU using the http-request node.</p>
<p><b>Find more infos on:</b></p>
<p>
<a href="https://github.com/firsttris/node-red-contrib-homematic" target="_blank">node-red-contrib-homematic Github page</a>
</p>
</script>
<script type="text/javascript">
RED.nodes.registerType('homematic', {
category: 'function',
color: "#ecf0f1",
defaults: {
ccu: {
type: "ccu-address"
},
device: {
type: "homematic-device"
},
function: {
value: "",
required: true
},
attribute: {
value: "",
required: true
},
value: {
value: ""
},
nodeName: {
value: ""
}
},
inputs: 1,
outputs: 1,
icon: "envelope.png",
label: function () {
if (this.nodeName) {
return this.nodeName
} else if (this.function) {
return this.function + " " + this.value;
} else {
return "homematic"
}
},
labelStyle: function () {
return (this.nodeName) ? "node_label_italic" : "";
},
oneditprepare: function () {
$("#node-input-function").change(function () {
var selectedMethod = $("#node-input-function").val();
if (selectedMethod === "setValue") {
$("#node-form-value").show();
}
if (selectedMethod === "getValue") {
$("#node-form-value").hide();
}
});
$("#node-input-function").change();
}
});
</script>
<script type="text/x-red" data-template-name="ccu-address">
<div class="form-row">
<label for="node-config-input-host"><i class="fa fa-tag"></i> Host</label>
<input type="text" id="node-config-input-host" placeholder="Host">
</div>
<div class="form-row">
<label for="node-config-input-interfaceName"><i class="fa fa-globe"></i> Interface</label>
<select id="node-config-input-interfaceName">
<option value="HmIP-RF.">HmIP-RF</option>
<option value="BidCos-Wired.">BidCos-Wired</option>
<option value="BidCos-RF.">BidCos-RF</option>
</select>
</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="Name">
</div>
</script>
<script type="text/x-red" data-help-name="ccu-address">
<p>Configure IP and Interface of your CCU</p>
<p><i>CCU2 uses BidCos-RF</i></p>
</script>
<script type="text/javascript">
RED.nodes.registerType('ccu-address', {
category: 'config',
defaults: {
host: { value: "" },
interfaceName: { value: "" },
name: { value: "" }
},
label: function () {
if (this.name) {
return this.name;
} else {
return this.host;
}
}
});
</script>
<script type="text/x-red" data-template-name="homematic-device">
<div class="form-row">
<label for="node-config-input-channel"><i class="fa fa-tag"></i> Channel</label>
<input type="text" id="node-config-input-channel" placeholder="Channel">
</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="Name">
</div>
</script>
<script type="text/x-red" data-help-name="homematic-device">
<p>Configure your channels (devices)</p>
</script>
<script type="text/javascript">
RED.nodes.registerType('homematic-device', {
category: 'config',
defaults: {
channel: { channel: "" },
name: { value: "" }
},
label: function () {
if (this.name) {
return this.name;
} else {
return this.channel;
}
}
});
</script>