node-red-contrib-genetic-charging-strategy
Version:
A module for Node-RED that adds a battery charging strategy to node-red-contrib-power-saver. It uses genetic algorithms to find the best schedule
121 lines (113 loc) • 3.61 kB
HTML
<script type="text/javascript">
RED.nodes.registerType('enell-strategy-genetic-charging', {
category: 'Power Saver',
color: '#a6bbcf',
defaults: {
name: { value: '' },
populationSize: {
value: 20,
required: true,
validate: RED.validators.number(),
},
generations: {
value: 400,
required: true,
validate: RED.validators.number(),
},
mutationRate: {
value: 3,
required: true,
validate: RED.validators.number(),
},
numberOfPricePeriods: {
value: 8,
required: true,
validate: RED.validators.number(),
},
batteryMaxEnergy: {
value: 5,
required: true,
validate: RED.validators.number(),
},
batteryMaxInputPower: {
value: 2.5,
required: true,
validate: RED.validators.number(),
},
batteryMaxOutputPower: {
value: 2.5,
required: true,
validate: RED.validators.number(),
},
averageConsumption: {
value: 1.5,
required: true,
validate: RED.validators.number(),
},
batteryIdleLoss: {
value: 0,
required: true,
default: 0,
validate: RED.validators.number(),
},
},
inputs: 1,
outputs: 1,
icon: 'font-awesome/fa-battery',
label: function () {
return this.name || 'Battery charging schedule';
},
});
</script>
<script type="text/html" data-template-name="enell-strategy-genetic-charging">
<div class="form-row">
<label for="node-input-name" style="width: 240px"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name" />
</div>
<h3>Energy settings</h3>
<div class="form-row">
<label for="node-input-batteryMaxEnergy" style="width: 240px">Battery capacity (kWh)</label>
<input type="text" id="node-input-batteryMaxEnergy" />
</div>
<div class="form-row">
<label for="node-input-batteryMaxInputPower" style="width: 240px"
>Max battery input power (kW)</label
>
<input type="text" id="node-input-batteryMaxInputPower" />
</div>
<div class="form-row">
<label for="node-input-averageConsumption" style="width: 240px"
>Average consumption per hour (kW)</label
>
<input type="text" id="node-input-averageConsumption" />
</div>
<div class="form-row">
<label for="node-input-batteryIdleLoss" style="width: 240px">Battery idle loss (kWh/h)</label>
<input type="text" id="node-input-batteryIdleLoss" />
</div>
<h3>Genetic algorithm</h3>
<div class="form-row">
<label for="node-input-populationSize" style="width: 240px">Population size</label>
<input type="text" id="node-input-populationSize" />
</div>
<div class="form-row">
<label for="node-input-generations" style="width: 240px">Number of generations</label>
<input type="text" id="node-input-generations" />
</div>
<div class="form-row">
<label for="node-input-mutationRate" style="width: 240px">Mutation chance (%)</label>
<input type="text" id="node-input-mutationRate" />
</div>
<div class="form-row">
<label for="node-input-numberOfPricePeriods" style="width: 240px"
>Number of charging/discharging periods</label
>
<input type="text" id="node-input-numberOfPricePeriods" />
</div>
</script>
<script type="text/html" data-help-name="enell-strategy-genetic-charging">
<p>
A strategy addon for powersaver to calculate the optimal batter charging schedule using genetic
algorithms
</p>
</script>