UNPKG

node-red-contrib-tesla

Version:

Node red module to control Tesla vehicles and devices

496 lines (482 loc) 17.4 kB
<script type="text/javascript"> RED.nodes.registerType('tesla-config', { category: 'config', defaults: { email: {value: "", required: true}, }, credentials: { refresh_token: {type: "password"} }, label: function () { return this.email; } }); </script> <script type="text/html" data-template-name="tesla-config"> <div class="form-tips" style="margin-bottom: 20px;"> <h3>Getting Started:</h3> <p>You need to use a third party solution or application to generate a Tesla refresh token. Check the readme for more information.</p> </div> <div class="form-row"> <label for="node-config-input-email"><i class="icon-email"></i> E-mail address</label> <input type="text" id="node-config-input-email"> </div> <div class="form-row"> <label for="node-config-input-refresh_token"><i class="icon-bookmark"></i> Refresh token</label> <input type="password" id="node-config-input-refresh_token"> </div> </script> <script type="text/javascript"> function refreshVehicleList(nodeId, selectedId) { if (!nodeId) { return; } $.getJSON('getvehicles/' + nodeId, function (data) { $("#node-input-lookup-vehicles-icon").addClass('fa-search'); $("#node-input-lookup-vehicles-icon").removeClass('spinner'); $("#node-input-lookup-vehicles").removeClass('disabled'); let vehicles = data || []; $('#node-input-vehicleID').empty(); $.each(vehicles, function (i, item) { $('#node-input-vehicleID').append($('<option>', { value: item.id, text: item.name, selected: selectedId === item.id })); }); }); } RED.nodes.registerType('tesla-api', { category: 'function', color: '#ff4b50', defaults: { teslaConfig: {value: "", type: "tesla-config"}, command: {value: "", required: false}, name: {value: ""}, vehicleID: {value: "", required: false}, autoWakeUp: {value: true, required: false}, }, inputs: 1, outputs: 1, icon: "tesla.png", label: function () { return this.name || "Tesla API"; }, oneditprepare: function () { var node = this; refreshVehicleList(node.id, node.vehicleID); $("#node-input-lookup-vehicles").click(function () { $("#node-input-lookup-vehicles-icon").removeClass('fa-search'); $("#node-input-lookup-vehicles-icon").addClass('spinner'); $("#node-input-lookup-vehicles").addClass('disabled'); refreshVehicleList(node.id, node.vehicleID); }); } }); </script> <script type="text/html" data-template-name="tesla-api"> <div class="form-row"> <label for="node-input-teslaConfig" style="white-space: nowrap; width: 125px"> <i class="icon-tag"></i> Tesla account </label> <input type="text" id="node-input-teslaConfig" placeholder="Select tesla account"> </div> <div class="form-row"> <label for="node-input-command" style="white-space: nowrap; width: 125px"><i class="icon-tag"></i> Command</label> <select id="node-input-command" style="width: 70%"> <option value="vehicles">vehicles - A list of all vehicles available in your account</option> <option value="vehicle">vehicle - retrieve general vehicle information</option> <option value="vehicleData">vehicleData - retrieve all vehicle state data in a single call</option> <option value="chargeState">chargeState - retrieve the charge_state data</option> <option value="climateState">climateState - retrieve the climate_state data</option> <option value="vehicleConfig">vehicleConfig - retrieve the vehicle_config data</option> <option value="vehicleState">vehicleState - retrieve the vehicle_state data</option> <option value="driveState">driveState - retrieve the drive_state data</option> <option value="guiSettings">guiSettings</option> <option value="wakeUp">wakeUp</option> <option value="chargeStandard">chargeStandard</option> <option value="chargeMaxRange">chargeMaxRange</option> <option value="doorLock">doorLock</option> <option value="doorUnlock">doorUnlock</option> <option value="climateStart">climateStart</option> <option value="climateStop">climateStop</option> <option value="flashLights">flashLights</option> <option value="honkHorn">honkHorn</option> <option value="maxDefrost">maxDefrost</option> <option value="mediaTogglePlayback">mediaTogglePlayback</option> <option value="mediaPlayNext">mediaPlayNext</option> <option value="mediaPlayPrevious">mediaPlayPrevious</option> <option value="mediaPlayNextFavorite">mediaPlayNextFavorite</option> <option value="mediaPlayPreviousFavorite">mediaPlayPreviousFavorite</option> <option value="mediaVolumeUp">mediaVolumeUp</option> <option value="mediaVolumeDown">mediaVolumeDown</option> <option value="mobileEnabled">mobileEnabled</option> <option value="navigationRequest">navigationRequest</option> <option value="nearbyChargers">nearbyChargers</option> <option value="openChargePort">openChargePort</option> <option value="openFrunk">openFrunk</option> <option value="openTrunk">openTrunk</option> <option value="remoteStart">remoteStart</option> <option value="resetValetPin">resetValetPin</option> <option value="scheduleSoftwareUpdate">scheduleSoftwareUpdate</option> <option value="seatHeater">seatHeater</option> <option value="setChargeLimit">setChargeLimit</option> <option value="setChargingAmps">setChargingAmps</option> <option value="setScheduledCharging">setScheduledCharging</option> <option value="setScheduledDeparture">setScheduledDeparture</option> <option value="setSentryMode">setSentryMode</option> <option value="setTemps">setTemps</option> <option value="setValetMode">setValetMode</option> <option value="speedLimitActivate">speedLimitActivate</option> <option value="speedLimitDeactivate">speedLimitDeactivate</option> <option value="speedLimitClearPin">speedLimitClearPin</option> <option value="speedLimitSetLimit">speedLimitSetLimit</option> <option value="startCharge">startCharge</option> <option value="steeringHeater">steeringHeater</option> <option value="stopCharge">stopCharge</option> <option value="sunRoofControl">sunRoofControl</option> <option value="sunRoofMove">sunRoofMove</option> <option value="windowControl">windowControl</option> <option value="vinDecode">vinDecode</option> <option value="getModel">getModel</option> <option value="getPaintColor">getPaintColor</option> </select> </div> <div class="form-tips"><b>Tip:</b> You can also send msg.command to set the command. If msg.command is set, it will overwrite any choice set below.</div> <div class="form-row" style="margin-top: 20px;"> <label for="node-input-vehicleID" style="white-space: nowrap; width: 125px">Vehicle or Device</label> <div style="display: inline-block; position: relative; width: 70%; height: 20px;"> <div style="position: absolute; left: 0; right: 40px;"> <select id="node-input-vehicleID" style="width: 100%"></select> </div> <a id="node-input-lookup-vehicles" class="red-ui-button" style="position: absolute; right: 0; top: 0;"> <i id="node-input-lookup-vehicles-icon" class="fa fa-search"></i> </a> </div> </div> <div class="form-tips"> <p>This node must be deployed first before you can get a list of vehicles.</p> </div> <div style="margin-top: 20px;"> <label for="node-input-autoWakeUp"> <input type="checkbox" id="node-input-autoWakeUp" style="position: relative; top: -4px; margin-right: 5px;"/>&nbsp; <span>Wakeup car automatically</span> </label> </div> <div class="form-row"> <label for="node-input-name" style="white-space: nowrap; width: 125px"><i class="icon-tag"></i> Name</label> <input type="text" id="node-input-name" placeholder="Name"> </div> </script> <script type="text/html" data-help-name="tesla-api"> <p>A node that can retrieve data and send commands to the tesla api.</p> <h2>Input:</h2> <p>The msg.command property can be set to override which command to send. See below for a list of valid commands.</p> <p>Some commands need additional data. Example: The setChargeLimit command requires the amt argument (an integer representing the target charge percentage). If this is the case, wrap the arguments in a commandArgs object and set that to the msg object. In the above example, set mgs.commandArgs.amt to a number between 50 and 100.</p> <h2>Output</h2> <p>The msg.payload property will be set to the command output. The structure varies per command. Any other msg properties will be left intact.</p> <h2>Command list</h2> <p>Look for more information about the commands on <a target="_blank" href="https://github.com/mseminatore/TeslaJS/blob/master/docs/DOCS.md#functions"> this page </a>. </p> <table> <thead> <tr> <th>Command name</th> <th>Description</th> <th>arguments</th> </tr> </thead> <tbody> <tr> <td>vehicles</td> <td>A list of all vehicles available in your account</td> <td></td> </tr> <tr> <td>vehicle</td> <td>retrieve general vehicle information</td> <td></td> </tr> <tr> <td>vehicleData</td> <td>retrieve all vehicle state data in a single call</td> <td></td> </tr> <tr> <td>chargeState</td> <td>retrieve the charge_state data</td> <td></td> </tr> <tr> <td>climateState</td> <td>retrieve the climate_state data</td> <td></td> </tr> <tr> <td>vehicleConfig</td> <td>retrieve the vehicle_config data</td> <td></td> </tr> <tr> <td>vehicleState</td> <td>retrieve the vehicle_state data</td> <td></td> </tr> <tr> <td>driveState</td> <td>retrieve the drive_state data</td> <td></td> </tr> <tr> <td>guiSettings</td> <td>guiSettings</td> <td></td> </tr> <tr> <td>wakeUp</td> <td>wakeUp</td> <td></td> </tr> <tr> <td>chargeStandard</td> <td>chargeStandard</td> <td></td> </tr> <tr> <td>chargeMaxRange</td> <td>chargeMaxRange</td> <td></td> </tr> <tr> <td>doorLock</td> <td>doorLock</td> <td></td> </tr> <tr> <td>doorUnlock</td> <td>doorUnlock</td> <td></td> </tr> <tr> <td>climateStart</td> <td>climateStart</td> <td></td> </tr> <tr> <td>climateStop</td> <td>climateStop</td> <td></td> </tr> <tr> <td>flashLights</td> <td>flashLights</td> <td></td> </tr> <tr> <td>honkHorn</td> <td>honkHorn</td> <td></td> </tr> <tr> <td>maxDefrost</td> <td>maxDefrost</td> <td></td> </tr> <tr> <td>mediaTogglePlayback</td> <td>mediaTogglePlayback</td> <td></td> </tr> <tr> <td>mediaPlayNext</td> <td>mediaPlayNext</td> <td></td> </tr> <tr> <td>mediaPlayPrevious</td> <td>mediaPlayPrevious</td> <td></td> </tr> <tr> <td>mediaPlayNextFavorite</td> <td>mediaPlayNextFavorite</td> <td></td> </tr> <tr> <td>mediaPlayPreviousFavorite</td> <td>mediaPlayPreviousFavorite</td> <td></td> </tr> <tr> <td>mediaVolumeUp</td> <td>mediaVolumeUp</td> <td></td> </tr> <tr> <td>mediaVolumeDown</td> <td>mediaVolumeDown</td> <td></td> </tr> <tr> <td>mobileEnabled</td> <td>mobileEnabled</td> <td></td> </tr> <tr> <td>navigationRequest</td> <td>navigationRequest</td> <td>subject, text, locale</td> </tr> <tr> <td>nearbyChargers</td> <td>nearbyChargers</td> <td></td> </tr> <tr> <td>openChargePort</td> <td>openChargePort</td> <td></td> </tr> <tr> <td>openFrunk</td> <td>openFrunk</td> <td></td> </tr> <tr> <td>openTrunk</td> <td>openTrunk</td> <td></td> </tr> <tr> <td>remoteStart</td> <td>remoteStart</td> <td></td> </tr> <tr> <td>resetValetPin</td> <td>resetValetPin</td> <td></td> </tr> <tr> <td>scheduleSoftwareUpdate</td> <td>scheduleSoftwareUpdate</td> <td>offset</td> </tr> <tr> <td>seatHeater</td> <td>seatHeater</td> <td>heater, level</td> </tr> <tr> <td>setChargeLimit</td> <td>setChargeLimit</td> <td>amt</td> </tr> <tr> <td>setChargingAmps</td> <td>setChargingAmps</td> <td>amps</td> </tr> <tr> <td>setScheduledCharging</td> <td>setScheduledCharging</td> <td>enable, time</td> </tr> <tr> <td>setScheduledDeparture</td> <td>setScheduledDeparture</td> <td>enable, departure_time, preconditioning_enabled, preconditioning_weekdays_only, off_peak_charging_enabled, off_peak_charging_weekdays_only, end_off_peak_time </td> </tr> <tr> <td>setSentryMode</td> <td>setSentryMode</td> <td>onoff</td> </tr> <tr> <td>setTemps</td> <td>setTemps</td> <td>driver, pass</td> </tr> <tr> <td>setValetMode</td> <td>setValetMode</td> <td>onoff, pin</td> </tr> <tr> <td>speedLimitActivate</td> <td>speedLimitActivate</td> <td>pin</td> </tr> <tr> <td>speedLimitDeactivate</td> <td>speedLimitDeactivate</td> <td>pin</td> </tr> <tr> <td>speedLimitClearPin</td> <td>speedLimitClearPin</td> <td>pin</td> </tr> <tr> <td>speedLimitSetLimit</td> <td>speedLimitSetLimit</td> <td>limit</td> </tr> <tr> <td>startCharge</td> <td>startCharge</td> <td></td> </tr> <tr> <td>steeringHeater</td> <td>steeringHeater</td> <td>level</td> </tr> <tr> <td>stopCharge</td> <td>stopCharge</td> <td></td> </tr> <tr> <td>sunRoofControl</td> <td>sunRoofControl</td> <td>state</td> </tr> <tr> <td>sunRoofMove</td> <td>sunRoofMove</td> <td>percent</td> </tr> <tr> <td>windowControl</td> <td>windowControl</td> <td>command</td> </tr> <tr> <td>vinDecode</td> <td>vinDecode</td> <td></td> </tr> <tr> <td>getModel</td> <td>getModel</td> <td></td> </tr> <tr> <td>getPaintColor</td> <td>getPaintColor</td> <td></td> </tr> </tbody> </table> </script>