diff --git a/hassio/src/dashboard/hassio-addons.ts b/hassio/src/dashboard/hassio-addons.ts
index a28c7c1da8..e9e44c7fad 100644
--- a/hassio/src/dashboard/hassio-addons.ts
+++ b/hassio/src/dashboard/hassio-addons.ts
@@ -25,6 +25,9 @@ class HassioAddons extends LitElement {
@property({ attribute: false }) public supervisor!: Supervisor;
protected render(): TemplateResult {
+ this.supervisor
+ ?.callApi({ endpoint: "/supervisor/ping", rest: false })
+ .then((result) => console.log("result", result));
return html`
Add-ons
diff --git a/hassio/src/supervisor-base-element.ts b/hassio/src/supervisor-base-element.ts
index 9abdf473a5..3e0a5839f1 100644
--- a/hassio/src/supervisor-base-element.ts
+++ b/hassio/src/supervisor-base-element.ts
@@ -7,7 +7,10 @@ import {
} from "lit-element";
import { atLeastVersion } from "../../src/common/config/version";
import { fetchHassioAddonsInfo } from "../../src/data/hassio/addon";
-import { HassioResponse } from "../../src/data/hassio/common";
+import {
+ hassioApiResultExtractor,
+ HassioResponse,
+} from "../../src/data/hassio/common";
import {
fetchHassioHassOsInfo,
fetchHassioHostInfo,
@@ -23,6 +26,9 @@ import {
getSupervisorEventCollection,
subscribeSupervisorEvents,
Supervisor,
+ supervisorApiRequest,
+ SupervisorAPIRequestParams,
+ supervisorApiWsRequest,
SupervisorObject,
supervisorStore,
} from "../../src/data/supervisor/supervisor";
@@ -56,7 +62,11 @@ export class SupervisorBaseElement extends urlSyncMixin(
}
protected _updateSupervisor(obj: Partial): void {
- this.supervisor = { ...this.supervisor!, ...obj };
+ this.supervisor = {
+ ...this.supervisor!,
+ ...obj,
+ callApi: (params) => this._callAPI(params),
+ };
}
protected firstUpdated(changedProps: PropertyValues): void {
@@ -142,10 +152,48 @@ export class SupervisorBaseElement extends urlSyncMixin(
os,
network,
resolution,
+ callApi: (params) => this._callAPI(params),
};
this.addEventListener("supervisor-update", (ev) =>
this._updateSupervisor(ev.detail)
);
}
+
+ private async _callAPI(params: SupervisorAPIRequestParams): Promise {
+ const hasHass = this.hass !== undefined;
+ const canUseWS =
+ !params.rest &&
+ hasHass &&
+ atLeastVersion(this.hass.config.version, 2021, 2, 4);
+
+ if (canUseWS) {
+ const connection = hasHass ? this.hass.connection : params.connection;
+ if (connection === undefined) {
+ throw Error(`No connection found, aborting API call - ${params}`);
+ }
+ const requestParams: supervisorApiRequest = {
+ ...params,
+ };
+ delete requestParams.rest;
+ delete requestParams.connection;
+ return await supervisorApiWsRequest(connection, requestParams);
+ } else {
+ const method =
+ params.method === "post"
+ ? "POST"
+ : params.method === "put"
+ ? "PUT"
+ : params.method === "delete"
+ ? "DELETE"
+ : "GET";
+ return hassioApiResultExtractor(
+ await this.hass.callApi>(
+ method,
+ `hassio${params.endpoint}`,
+ params.data
+ )
+ );
+ }
+ }
}
diff --git a/src/data/supervisor/supervisor.ts b/src/data/supervisor/supervisor.ts
index 1dbaecef2c..5236d153bb 100644
--- a/src/data/supervisor/supervisor.ts
+++ b/src/data/supervisor/supervisor.ts
@@ -41,7 +41,6 @@ export type SupervisorObject =
interface supervisorApiRequest {
endpoint: string;
method?: "get" | "post" | "delete" | "put";
- force_rest?: boolean;
data?: any;
}
@@ -52,6 +51,14 @@ export interface SupervisorEvent {
[key: string]: any;
}
+export interface SupervisorAPIRequestParams {
+ connection?: any;
+ rest?: boolean;
+ data?: any;
+ endpoint: string;
+ method?: "get" | "post" | "delete" | "put";
+}
+
export interface Supervisor {
host: HassioHostInfo;
supervisor: HassioSupervisorInfo;
@@ -61,6 +68,7 @@ export interface Supervisor {
resolution: HassioResolution;
os: HassioHassOSInfo;
addon: HassioAddonsInfo;
+ callApi(params: SupervisorAPIRequestParams): Promise;
}
export const supervisorApiWsRequest = (