mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 10:02:05 +00:00
✨ Add loadOptions for Home Assistant
This commit is contained in:
@@ -4,15 +4,17 @@ import {
|
||||
|
||||
import {
|
||||
IExecuteFunctions,
|
||||
ILoadOptionsFunctions,
|
||||
} from 'n8n-core';
|
||||
|
||||
import {
|
||||
IDataObject,
|
||||
INodePropertyOptions,
|
||||
NodeApiError,
|
||||
NodeOperationError,
|
||||
} from 'n8n-workflow';
|
||||
|
||||
export async function homeAssistantApiRequest(this: IExecuteFunctions, method: string, resource: string, body: IDataObject = {}, qs: IDataObject = {}, uri?: string, option: IDataObject = {}) {
|
||||
export async function homeAssistantApiRequest(this: IExecuteFunctions | ILoadOptionsFunctions, method: string, resource: string, body: IDataObject = {}, qs: IDataObject = {}, uri?: string, option: IDataObject = {}) {
|
||||
const credentials = await this.getCredentials('homeAssistantApi');
|
||||
|
||||
if (credentials === undefined) {
|
||||
@@ -35,8 +37,51 @@ export async function homeAssistantApiRequest(this: IExecuteFunctions, method: s
|
||||
delete options.body;
|
||||
}
|
||||
try {
|
||||
return await this.helpers.request(options);
|
||||
if (this.helpers.request) {
|
||||
return await this.helpers.request(options);
|
||||
}
|
||||
} catch (error) {
|
||||
throw new NodeApiError(this.getNode(), error);
|
||||
}
|
||||
}
|
||||
|
||||
export async function getHomeAssistantEntities(this: IExecuteFunctions | ILoadOptionsFunctions, domain = '') {
|
||||
const returnData: INodePropertyOptions[] = [];
|
||||
const entities = await homeAssistantApiRequest.call(this, 'GET', '/states');
|
||||
for (const entity of entities) {
|
||||
const entityId = entity.entity_id as string;
|
||||
if (domain === '' || domain && entityId.startsWith(domain)) {
|
||||
const entityName = entity.attributes.friendly_name as string || entityId;
|
||||
returnData.push({
|
||||
name: entityName,
|
||||
value: entityId,
|
||||
});
|
||||
}
|
||||
}
|
||||
return returnData;
|
||||
}
|
||||
|
||||
export async function getHomeAssistantServices(this: IExecuteFunctions | ILoadOptionsFunctions, domain = '') {
|
||||
const returnData: INodePropertyOptions[] = [];
|
||||
const services = await homeAssistantApiRequest.call(this, 'GET', '/services');
|
||||
if (domain === '') {
|
||||
// If no domain specified return domains
|
||||
const domains = services.map(({ domain }: IDataObject) => domain as string).sort();
|
||||
returnData.push(...domains.map((service: string) => ({ name: service, value: service })));
|
||||
return returnData;
|
||||
} else {
|
||||
// If we have a domain, return all relevant services
|
||||
const domainServices = services.filter((service: IDataObject) => service.domain === domain);
|
||||
for (const domainService of domainServices) {
|
||||
for (const [serviceID, value] of Object.entries(domainService.services)) {
|
||||
const serviceProperties = value as IDataObject;
|
||||
const serviceName = serviceProperties.description || serviceID;
|
||||
returnData.push({
|
||||
name: serviceName as string,
|
||||
value: serviceID,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
return returnData;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user