node-red-contrib-bluelinky
Version:
A Node Red Library for BlueLinky, a Hyundai and Kia 3rd-party wrapper
681 lines (627 loc) • 20.8 kB
HTML
<script type="text/javascript">
RED.nodes.registerType('car-status', {
category: 'bluelinky',
color: '#3FADB5',
defaults: {
name: { value: 'Get status' },
dorefresh: { value: true },
parsed: { value: false },
bluelinky: { value: 'Bluelinky config', type: 'bluelinky' },
},
inputs: 1,
outputs: 1,
icon: 'bluelinky.png',
label: function () {
return this.name || 'car-status';
},
});
</script>
<script type="text/javascript">
RED.nodes.registerType('car-fullstatus', {
category: 'bluelinky',
color: '#3FADB5',
defaults: {
name: { value: 'Get full status' },
dorefresh: { value: true },
bluelinky: { value: 'Bluelinky config', type: 'bluelinky' },
},
inputs: 1,
outputs: 1,
icon: 'bluelinky.png',
label: function () {
return this.name || 'car-fullstatus';
},
});
</script>
<script type="text/javascript">
RED.nodes.registerType('get-tripinfo', {
category: 'bluelinky',
color: '#3FADB5',
defaults: {
name: { value: 'Tripinfo' },
bluelinky: { value: 'Bluelinky config', type: 'bluelinky' },
},
inputs: 1,
outputs: 1,
icon: 'bluelinky.png',
label: function () {
return this.name || 'get-tripinfo';
},
});
</script>
<script type="text/javascript">
RED.nodes.registerType('get-drivehistory', {
category: 'bluelinky',
color: '#3FADB5',
defaults: {
name: { value: 'DriveHistory' },
bluelinky: { value: 'Bluelinky config', type: 'bluelinky' },
},
inputs: 1,
outputs: 1,
icon: 'bluelinky.png',
label: function () {
return this.name || 'get-drivehistory';
},
});
</script>
<script type="text/javascript">
RED.nodes.registerType('get-monthlyreport', {
category: 'bluelinky',
color: '#3FADB5',
defaults: {
name: { value: 'Get monthly report' },
bluelinky: { value: 'Bluelinky config', type: 'bluelinky' },
},
inputs: 1,
outputs: 1,
icon: 'bluelinky.png',
label: function () {
return this.name || 'get-monthlyreport';
},
});
</script>
<script type="text/javascript">
RED.nodes.registerType('set-navigation', {
category: 'bluelinky',
color: '#3FADB5',
defaults: {
name: { value: 'Set navigation' },
bluelinky: { value: 'Bluelinky config', type: 'bluelinky' },
},
inputs: 1,
outputs: 1,
icon: 'bluelinky.png',
label: function () {
return this.name || 'set-navigation';
},
});
</script>
<script type="text/javascript">
RED.nodes.registerType('set-chargetargets', {
category: 'bluelinky',
color: '#3FADB5',
defaults: {
name: { value: 'Set charge targets' },
bluelinky: { value: 'Bluelinky config', type: 'bluelinky' },
},
inputs: 1,
outputs: 1,
icon: 'bluelinky.png',
label: function () {
return this.name || 'set-chargetargets';
},
});
</script>
<script type="text/javascript">
RED.nodes.registerType('get-chargetargets', {
category: 'bluelinky',
color: '#3FADB5',
defaults: {
name: { value: 'Get charge targets' },
bluelinky: { value: 'Bluelinky config', type: 'bluelinky' },
},
inputs: 1,
outputs: 1,
icon: 'bluelinky.png',
label: function () {
return this.name || 'get-chargetargets';
},
});
</script>
<script type="text/javascript">
RED.nodes.registerType('start-car', {
category: 'bluelinky',
color: '#3FADB5',
defaults: {
name: { value: 'Start car' },
bluelinky: { value: 'Bluelinky config', type: 'bluelinky' },
},
inputs: 1,
outputs: 1,
icon: 'bluelinky.png',
label: function () {
return this.name || 'start-car';
},
});
</script>
<script type="text/javascript">
RED.nodes.registerType('stop-car', {
category: 'bluelinky',
color: '#3FADB5',
defaults: {
name: { value: 'Stop car' },
bluelinky: { value: 'Bluelinky config', type: 'bluelinky' },
},
inputs: 1,
outputs: 1,
icon: 'bluelinky.png',
label: function () {
return this.name || 'stop-car';
},
});
</script>
<script type="text/javascript">
RED.nodes.registerType('car-odometer', {
category: 'bluelinky',
color: '#3FADB5',
defaults: {
name: { value: 'Get car odometer' },
bluelinky: { value: 'Bluelinky config', type: 'bluelinky' },
},
inputs: 1,
outputs: 1,
icon: 'bluelinky.png',
label: function () {
return this.name || 'car-odometer';
},
});
</script>
<script type="text/javascript">
RED.nodes.registerType('car-location', {
category: 'bluelinky',
color: '#3FADB5',
defaults: {
name: { value: 'Get car location' },
bluelinky: { value: 'Bluelinky config', type: 'bluelinky' },
},
inputs: 1,
outputs: 1,
icon: 'bluelinky.png',
label: function () {
return this.name || 'car-location';
},
});
</script>
<script type="text/javascript">
RED.nodes.registerType('unlock-car', {
category: 'bluelinky',
color: '#3FADB5',
defaults: {
name: { value: 'Unlock car' },
bluelinky: { value: 'Bluelinky config', type: 'bluelinky' },
},
inputs: 1,
outputs: 1,
icon: 'bluelinky.png',
label: function () {
return this.name || 'unlock-car';
},
});
</script>
<script type="text/javascript">
RED.nodes.registerType('lock-car', {
category: 'bluelinky',
color: '#3FADB5',
defaults: {
name: { value: 'Lock car' },
bluelinky: { value: 'Bluelinky config', type: 'bluelinky' },
},
inputs: 1,
outputs: 1,
icon: 'bluelinky.png',
label: function () {
return this.name || 'lock-car';
},
});
</script>
<script type="text/javascript">
RED.nodes.registerType('start-charge', {
category: 'bluelinky',
color: '#3FADB5',
defaults: {
name: { value: 'Start Charging' },
bluelinky: { value: 'Bluelinky config', type: 'bluelinky' },
},
inputs: 1,
outputs: 1,
icon: 'bluelinky.png',
label: function () {
return this.name || 'start-charge';
},
});
</script>
<script type="text/javascript">
RED.nodes.registerType('stop-charge', {
category: 'bluelinky',
color: '#3FADB5',
defaults: {
name: { value: 'Stop Charging' },
bluelinky: { value: 'Bluelinky config', type: 'bluelinky' },
},
inputs: 1,
outputs: 1,
icon: 'bluelinky.png',
label: function () {
return this.name || 'stop-charge';
},
});
</script>
<script type="text/javascript">
RED.nodes.registerType('login', {
category: 'bluelinky',
color: '#3FADB5',
defaults: {
name: { value: 'Login' },
bluelinky: { value: 'Bluelinky config', type: 'bluelinky' },
},
inputs: 1,
outputs: 1,
icon: 'bluelinky.png',
label: function () {
return this.name || 'login';
},
});
</script>
<script type="text/javascript">
RED.nodes.registerType('bluelinky', {
category: 'config',
defaults: {
username: { required: true },
password: { required: true },
region: { value: 'EU', required: true },
pin: { required: true, validate: RED.validators.number() },
vin: { required: true },
brand: { value: 'hyundai', required: true },
language: { value: 'en', required: false },
},
label: function () {
return this.vin;
},
});
</script>
<script type="text/html" data-template-name="car-status">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name" />
</div>
<div class="form-row">
<label for="node-input-dorefresh"> Refresh </label>
<input type="checkbox" style="display: inline-block; width: auto; vertical-align: top;" id="node-input-dorefresh" />
</div>
<div class="form-row">
<label for="node-input-parsed"> Parsed (Simpler object returned) </label>
<input type="checkbox" style="display: inline-block; width: auto; vertical-align: top;" id="node-input-parsed" />
</div>
<div class="form-row">
<label for="node-input-bluelinky"><i class="icon-tag"></i> Config</label>
<input type="text" id="node-input-bluelinky" placeholder="Name" />
</div>
</script>
<script type="text/html" data-help-name="car-status">
<p>Get the status of the configured vehicle</p>
</script>
<script type="text/html" data-template-name="car-fullstatus">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name" />
</div>
<div class="form-row">
<label for="node-input-dorefresh"> Refresh </label>
<input type="checkbox" style="display: inline-block; width: auto; vertical-align: top;" id="node-input-dorefresh" />
</div>
<div class="form-row">
<label for="node-input-bluelinky"><i class="icon-tag"></i> Config</label>
<input type="text" id="node-input-bluelinky" placeholder="Name" />
</div>
</script>
<script type="text/html" data-help-name="car-fullstatus">
<p>Get the full status of the configured vehicle, always unparsed</p>
</script>
<script type="text/html" data-template-name="get-monthlyreport">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name" />
</div>
<div class="form-row">
<label for="node-input-bluelinky"><i class="icon-tag"></i> Config</label>
<input type="text" id="node-input-bluelinky" placeholder="Name" />
</div>
</script>
<script type="text/html" data-help-name="get-monthlyreport">
<p>[EU] Gets a report of last month</p>
</script>
<script type="text/html" data-template-name="get-drivehistory">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name" />
</div>
<div class="form-row">
<label for="node-input-bluelinky"><i class="icon-tag"></i> Config</label>
<input type="text" id="node-input-bluelinky" placeholder="Name" />
</div>
</script>
<script type="text/html" data-help-name="get-drivehistory">
<p>[EU] Gets info about the energy consumption in a timeperiod, required config as msg.payload:</p>
<p>0 = day, 1 = month, 2 = all</p>
<p>If omitted, day is used.</p>
for example:
<pre>
msg.payload = 0
</pre>
</script>
<script type="text/html" data-template-name="get-tripinfo">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name" />
</div>
<div class="form-row">
<label for="node-input-bluelinky"><i class="icon-tag"></i> Config</label>
<input type="text" id="node-input-bluelinky" placeholder="Name" />
</div>
</script>
<script type="text/html" data-help-name="get-tripinfo">
<p>[EU] Gets info about the trips of a day, required config as msg.payload:</p>
<p>If day is omitted, you are getting a summary of the month</p>
<p>If month and year are also omitted, summary of this month</p>
for example:
<pre>
{ "year": 2021, "month": 3 }
or
{ "year": 2021, "month": 3, "day": 24}
</pre>
</script>
<script type="text/html" data-template-name="set-navigation">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name" />
</div>
<div class="form-row">
<label for="node-input-bluelinky"><i class="icon-tag"></i> Config</label>
<input type="text" id="node-input-bluelinky" placeholder="Name" />
</div>
</script>
<script type="text/html" data-help-name="set-navigation">
<p>For EVs:</p>
<p>Sets your navigation to max three waypoints, required config as msg.payload:</p>
<p></p>
</script>
<script type="text/html" data-template-name="set-chargetargets">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name" />
</div>
<div class="form-row">
<label for="node-input-bluelinky"><i class="icon-tag"></i> Config</label>
<input type="text" id="node-input-bluelinky" placeholder="Name" />
</div>
</script>
<script type="text/html" data-help-name="set-chargetargets">
<p>[EU][EV] Sets your charge targets, required config as msg.payload:</p>
<p></p>
<pre>
{"fast": number, "slow": number}
</pre>
</script>
<script type="text/html" data-template-name="get-chargetargets">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name" />
</div>
<div class="form-row">
<label for="node-input-bluelinky"><i class="icon-tag"></i> Config</label>
<input type="text" id="node-input-bluelinky" placeholder="Name" />
</div>
</script>
<script type="text/html" data-help-name="get-chargetargets">
<p>Get the charge targets of the configured vehicle</p>
</script>
<script type="text/html" data-template-name="start-car">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name" />
</div>
<div class="form-row">
<label for="node-input-bluelinky"><i class="icon-tag"></i> Config</label>
<input type="text" id="node-input-bluelinky" placeholder="Name" />
</div>
</script>
<script type="text/html" data-help-name="start-car">
<p>For ICE (Internal combustion engine) cars:</p>
<p>Starts your engine, required config as msg.payload:</p>
<p></p>
<pre>
{
airCtrl?: boolean | string;
igniOnDuration: number;
airTempvalue?: number;
defrost?: boolean | string;
heating1?: boolean | string;
}
</pre>
<br />
<p>For EVs:</p>
<p>Starts your climate, required config as msg.payload:</p>
<p>Defrost defrosts the frontwindow, windscreenheating heats the backwindow, mirrors and steering wheel.</p>
<pre>
{
defrost: boolean;
windscreenHeating: boolean;
temperature: number;
unit: string;
}
</pre>
</script>
<script type="text/html" data-template-name="stop-car">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name" />
</div>
<div class="form-row">
<label for="node-input-bluelinky"><i class="icon-tag"></i> Config</label>
<input type="text" id="node-input-bluelinky" placeholder="Name" />
</div>
</script>
<script type="text/html" data-help-name="stop-car">
<p>For ICE (Internal combustion engine) cars:</p>
<p>Stops your engine</p>
<p>
<br />
</p>
<p>For EVs:</p>
<p>Stops your climate</p>
<p></p>
</script>
<script type="text/html" data-template-name="car-location">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name" />
</div>
<div class="form-row">
<label for="node-input-bluelinky"><i class="icon-tag"></i> Config</label>
<input type="text" id="node-input-bluelinky" placeholder="Name" />
</div>
</script>
<script type="text/html" data-help-name="car-location">
<p>Get the location of the configured vehicle</p>
</script>
<script type="text/html" data-template-name="car-odometer">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name" />
</div>
<div class="form-row">
<label for="node-input-bluelinky"><i class="icon-tag"></i> Config</label>
<input type="text" id="node-input-bluelinky" placeholder="Name" />
</div>
</script>
<script type="text/html" data-help-name="car-odometer">
<p>Get the odometer of the configured vehicle</p>
</script>
<script type="text/html" data-template-name="start-charge">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name" />
</div>
<div class="form-row">
<label for="node-input-bluelinky"><i class="icon-tag"></i> Config</label>
<input type="text" id="node-input-bluelinky" placeholder="Name" />
</div>
</script>
<script type="text/html" data-help-name="start-charge">
<p>Starts charging the configured vehicle</p>
</script>
<script type="text/html" data-template-name="stop-charge">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name" />
</div>
<div class="form-row">
<label for="node-input-bluelinky"><i class="icon-tag"></i> Config</label>
<input type="text" id="node-input-bluelinky" placeholder="Name" />
</div>
</script>
<script type="text/html" data-help-name="stop-charge">
<p>Stops charging the configured vehicle</p>
</script>
<script type="text/html" data-help-name="login">
<p>Forces bluelinky to login again</p>
</script>
<script type="text/html" data-template-name="login">
<div class="form-row">
<label for="node-input-bluelinky"><i class="icon-tag"></i> Config</label>
<input type="text" id="node-input-bluelinky" placeholder="Name" />
</div>
</script>
<script type="text/html" data-template-name="unlock-car">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name" />
</div>
<div class="form-row">
<label for="node-input-bluelinky"><i class="icon-tag"></i> Config</label>
<input type="text" id="node-input-bluelinky" placeholder="Name" />
</div>
</script>
<script type="text/html" data-help-name="unlock-car">
<p>Unlock the configured vehicle</p>
</script>
<script type="text/html" data-template-name="lock-car">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name" />
</div>
<div class="form-row">
<label for="node-input-bluelinky"><i class="icon-tag"></i> Config</label>
<input type="text" id="node-input-bluelinky" placeholder="Name" />
</div>
</script>
<script type="text/html" data-help-name="lock-car">
<p>Lock the configured vehicle</p>
</script>
<script type="text/html" data-template-name="bluelinky">
<div class="form-row">
<label for="node-config-input-name"><i class="icon-bookmark"></i> Name</label>
<input type="text" id="node-config-input-name" value="Bluelinky" />
</div>
<div class="form-row">
<label for="node-config-input-username"><i class="icon-bookmark"></i> Username</label>
<input type="text" id="node-config-input-username" />
</div>
<div class="form-row">
<label for="node-config-input-password"><i class="icon-bookmark"></i> Password</label>
<input type="password" id="node-config-input-password" />
</div>
<div class="form-row">
<label for="node-config-input-region"><i class="icon-bookmark"></i> Region</label>
<select id="node-config-input-region">
<option value="US">USA</option>
<option value="EU">Europe</option>
<option value="CA">Canada</option>
</select>
</div>
<div class="form-row">
<label for="node-config-input-pin"><i class="icon-bookmark"></i> Pin</label>
<input type="password" id="node-config-input-pin" />
</div>
<div class="form-row">
<label for="node-config-input-vin"><i class="icon-bookmark"></i> Vin</label>
<input type="text" id="node-config-input-vin" />
</div>
<div class="form-row">
<label for="node-config-input-brand"><i class="icon-bookmark"></i> Brand</label>
<select id="node-config-input-brand">
<option value="kia">Kia</option>
<option value="hyundai">Hyundai</option>
</select>
</div>
<div class="form-row">
<label for="node-config-input-language"><i class="icon-bookmark"></i> Language[Only for EU]</label>
<select id="node-config-input-language">
<option value="de">German</option>
<option value="en">English</option>
<option value="it">Italian</option>
<option value="es">Spanish</option>
<option value="sv">Swedish</option>
<option value="nl">Dutch</option>
<option value="no">Norwegian</option>
<option value="cs">Czech</option>
<option value="sk">Slovak</option>
<option value="hu">Hungarian</option>
<option value="da">Danish</option>
<option value="pl">Polish</option>
<option value="fi">Finnish</option>
<option value="pt">Portuguese</option>
</select>
</div>
</script>