/drivers/<driver_id>/driver.compose.json
{
"name": { "en": "My Driver" },
"images": {
"small": "/drivers/my_driver/assets/images/small.png",
"large": "/drivers/my_driver/assets/images/large.png"
},
"pair": [
{
"id": "login_credentials",
"template": "login_credentials",
"options": {
"logo": "logo.png",
"title": {
"en": "Your custom title"
},
"usernameLabel": { "en": "E-mail address" },
"usernamePlaceholder": { "en": "john@doe.com" },
"passwordLabel": { "en": "Password" },
"passwordPlaceholder": { "en": "Password" }
}
},
{
"id": "list_devices",
"template": "list_devices",
"navigation": { "next": "add_devices" }
},
{
"id": "add_devices",
"template": "add_devices"
}
]
}
/drivers/<driver_id>/driver.js
const Homey = require("homey");
const DeviceAPI = require("device-api");
class Driver extends Homey.Driver {
async onPair(session) {
let username = "";
let password = "";
session.setHandler("login", async (data) => {
username = data.username;
password = data.password;
const credentialsAreValid = await DeviceAPI.testCredentials({
username,
password,
});
// return true to continue adding the device if the login succeeded
// return false to indicate to the user the login attempt failed
// thrown errors will also be shown to the user
return credentialsAreValid;
});
session.setHandler("list_devices", async () => {
const api = await DeviceAPI.login({ username, password });
const myDevices = await api.getDevices();
const devices = myDevices.map((myDevice) => {
return {
name: myDevice.name,
data: {
id: myDevice.id,
},
settings: {
// Store username & password in settings
// so the user can change them later
username,
password,
},
};
});
return devices;
});
}
}
module.exports = Driver;