@gravypower/node-red-franklinwh
Version:
Node-RED node to control FranklinWH gateway
169 lines (149 loc) • 6.09 kB
HTML
<script type="text/javascript">
RED.nodes.registerType('franklinwh-set-reserve',{
category: 'FranklinWH',
color: '#a6bbcf',
defaults: {
name: {value:""},
server: {type:"franklinwh-config", required:true},
usePayload: {value: true},
reserveValue: {value:"", validate: function(v) {
if (this.usePayload) return true;
const num = Number(v);
return !v || (!isNaN(num) && num >= 5 && num <= 100);
}}
},
oneditprepare: function() {
const usePayload = $("#node-input-usePayload");
const reserveInput = $("#node-input-reserveValue");
usePayload.on("change", function() {
const usePayloadValue = $(this).is(":checked");
reserveInput.parent().toggle(!usePayloadValue);
});
// Set initial state
const usePayloadValue = usePayload.is(":checked");
reserveInput.parent().toggle(!usePayloadValue);
// Add input validation
reserveInput.on("input", function() {
const value = $(this).val();
if (value && (isNaN(value) || value < 5 || value > 100)) {
$(this).addClass("input-error");
} else {
$(this).removeClass("input-error");
}
});
},
inputs:1,
outputs:1,
icon: "font-awesome/fa-battery-half",
label: function() {
return this.name || "set reserve";
}
});
</script>
<script type="text/html" data-template-name="franklinwh-set-reserve">
<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-server"><i class="fa fa-globe"></i> Server</label>
<input type="text" id="node-input-server">
</div>
<div class="form-row">
<label for="node-input-usePayload"><i class="fa fa-random"></i> Use Payload</label>
<input type="checkbox" id="node-input-usePayload" style="display:inline-block; width:auto; vertical-align:top;">
<span> Use msg.payload for reserve value</span>
</div>
<div class="form-row">
<label for="node-input-reserveValue"><i class="fa fa-battery-half"></i> Reserve (%)</label>
<input type="number" id="node-input-reserveValue" min="5" max="100" step="1" placeholder="5-100">
</div>
</script>
<script type="text/html" data-help-name="franklinwh-set-reserve">
<p>Sets the battery reserve level for the FranklinWH system. The reserve level determines the minimum battery charge
that will be maintained for backup power purposes.</p>
<h3>Properties</h3>
<dl class="message-properties">
<dt>Name
<span class="property-type">string</span>
</dt>
<dd>Name of the node</dd>
<dt>Server
<span class="property-type">config</span>
</dt>
<dd>FranklinWH server configuration</dd>
<dt>Use Payload
<span class="property-type">boolean</span>
</dt>
<dd>If enabled, the reserve value will be taken from msg.payload. If disabled, the Default Reserve will be used.</dd>
<dt class="optional">Reserve (%)
<span class="property-type">number</span>
</dt>
<dd>Default reserve percentage to maintain (5-100%)</dd>
</dl>
<h3>Inputs</h3>
<dl class="message-properties">
<dt>payload
<span class="property-type">number</span>
</dt>
<dd>
When "Use Payload" is enabled, specifies the reserve percentage:
<ul>
<li>Must be a number between 5 and 100</li>
<li>Will be rounded to the nearest integer</li>
<li>Represents minimum battery charge percentage</li>
</ul>
</dd>
</dl>
<h3>Outputs</h3>
<dl class="message-properties">
<dt>payload
<span class="property-type">object</span>
</dt>
<dd>
An object containing:
<ul>
<li><code>reserve</code> - Set reserve value (number)</li>
<li><code>unit</code> - Unit of measurement ('%')</li>
<li><code>description</code> - Human-readable description of the change</li>
</ul>
</dd>
</dl>
<h3>Reserve Level Details</h3>
<p>The battery reserve level serves several important purposes:</p>
<ul>
<li><strong>Backup Power:</strong> Ensures minimum power available for emergencies</li>
<li><strong>Grid Outages:</strong> Maintains critical loads during power failures</li>
<li><strong>Battery Health:</strong> Prevents complete battery discharge</li>
</ul>
<p>Recommended settings:</p>
<ul>
<li><strong>5-20%:</strong> Minimal backup, maximize solar self-consumption</li>
<li><strong>20-30%:</strong> Standard backup for short outages</li>
<li><strong>30-50%:</strong> Extended backup for longer outages</li>
<li><strong>50%+:</strong> Maximum backup for critical applications</li>
</ul>
<h3>Status</h3>
<dl>
<dt>Grey ring</dt>
<dd>Waiting for input (when using payload)</dd>
<dt>Blue dot</dt>
<dd>Default reserve configured</dd>
<dt>Yellow dot</dt>
<dd>Setting reserve value</dd>
<dt>Green dot</dt>
<dd>Reserve successfully set</dd>
<dt>Red ring</dt>
<dd>Error occurred or missing configuration</dd>
</dl>
<h3>Example Flow</h3>
<pre>
[{"id":"n1","type":"inject","payload":"30"},
{"id":"n2","type":"franklinwh-set-reserve"},
{"id":"n3","type":"debug"}]
</pre>
<h3>References</h3>
<ul>
<li><a href="https://www.franklinwh.com/support" target="_blank">FranklinWH Documentation</a></li>
</ul>
</script>