minor fixes
This commit is contained in:
parent
9a3f622941
commit
fa3cd39674
@ -1,6 +1,6 @@
|
||||
---
|
||||
name: 'HA Matter Bridge'
|
||||
version: '0.0.1-alpha'
|
||||
version: '0.0.2-alpha'
|
||||
slug: ha-matter-bridge
|
||||
description: This project serves as a proof of concept to connect HomeAssistant devices to Voice Assistants through the Matter Protocol.
|
||||
init: false
|
||||
|
@ -1,11 +0,0 @@
|
||||
version: '3'
|
||||
services:
|
||||
ha-bridge:
|
||||
build: .
|
||||
environment:
|
||||
- HA_HOST=${HA_HOST}
|
||||
- HA_PORT=${HA_PORT}
|
||||
- HA_ACCESS_TOKEN=${HA_ACCESS_TOKEN}
|
||||
volumes:
|
||||
- ./deviceData:/app/deviceData:rw
|
||||
network_mode: host
|
@ -1,12 +0,0 @@
|
||||
FROM node:18.19.0-alpine
|
||||
WORKDIR /app
|
||||
COPY ./package.json ./
|
||||
COPY ./package-lock.json ./
|
||||
COPY ./src ./src
|
||||
COPY ./tsconfig.json ./
|
||||
|
||||
|
||||
RUN npm install
|
||||
RUN npm install ts-node
|
||||
|
||||
CMD [ "npm", "run", "start" ]
|
@ -2,35 +2,21 @@ import { Logger } from '@project-chip/matter-node.js/log';
|
||||
import { HassEntity, StateChangedEvent } from './HAssTypes';
|
||||
import hass, { HassApi, HassWsOptions } from 'homeassistant-ws';
|
||||
|
||||
const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));
|
||||
|
||||
export class HAMiddleware {
|
||||
private logger = new Logger('HAMiddleware');
|
||||
private hassClient: HassApi;
|
||||
private static instance: HAMiddleware;
|
||||
private static callerOptions: Partial<HassWsOptions> | undefined;
|
||||
private requestFulfilled: boolean = true;
|
||||
private entities: { [k: string]: HassEntity } = {};
|
||||
private functionsToCallOnChange: {
|
||||
[k: string]: ((data: StateChangedEvent) => void) | undefined;
|
||||
} = {};
|
||||
|
||||
async waitCompletition(): Promise<void> {
|
||||
let waited = 0;
|
||||
const timeOut = 5000;
|
||||
while (!this.requestFulfilled && waited < timeOut) {
|
||||
await sleep(1000);
|
||||
waited += 1000;
|
||||
}
|
||||
}
|
||||
|
||||
stop(): void {
|
||||
this.hassClient.rawClient.ws.close();
|
||||
}
|
||||
|
||||
async callAService(domain: string, service: string, extraArgs?: unknown) {
|
||||
this.requestFulfilled = false;
|
||||
this.hassClient.callService(domain, service, extraArgs);
|
||||
await this.hassClient.callService(domain, service, extraArgs);
|
||||
}
|
||||
|
||||
subscribe() {
|
||||
@ -43,13 +29,15 @@ export class HAMiddleware {
|
||||
});
|
||||
}
|
||||
|
||||
subscrieToDevice(deviceId: string, fn: (event: StateChangedEvent) => void) {
|
||||
subscribeToDevice(
|
||||
deviceId: string,
|
||||
fn: (event: StateChangedEvent) => void
|
||||
) {
|
||||
this.functionsToCallOnChange[deviceId] = fn;
|
||||
this.logger.debug(this.functionsToCallOnChange);
|
||||
}
|
||||
|
||||
async getStates(): Promise<{ [k: string]: HassEntity }> {
|
||||
this.requestFulfilled = false;
|
||||
const states = await this.hassClient.getStates();
|
||||
const sorted = states.reduceRight<{ [k: string]: HassEntity }>(
|
||||
(last, current) => {
|
||||
@ -82,9 +70,7 @@ export class HAMiddleware {
|
||||
}
|
||||
|
||||
async getServices() {
|
||||
this.requestFulfilled = false;
|
||||
const states = await this.hassClient.getServices();
|
||||
|
||||
return states;
|
||||
}
|
||||
|
||||
@ -96,7 +82,6 @@ export class HAMiddleware {
|
||||
callerOptions?: Partial<HassWsOptions> | undefined
|
||||
): Promise<HAMiddleware> {
|
||||
if (!HAMiddleware.instance) {
|
||||
HAMiddleware.callerOptions = callerOptions;
|
||||
const client = await hass(callerOptions);
|
||||
HAMiddleware.instance = new HAMiddleware(client);
|
||||
}
|
||||
|
@ -6,7 +6,7 @@ import { HAMiddleware } from '../home-assistant/HAmiddleware';
|
||||
|
||||
const LOGGER = new Logger('Mapper');
|
||||
|
||||
async function setHasEnties(
|
||||
async function setHasEntities(
|
||||
haMiddleware: HAMiddleware,
|
||||
bridge: Bridge
|
||||
): Promise<void> {
|
||||
@ -22,6 +22,6 @@ export async function addAllDevicesToBridge(
|
||||
haMiddleware: HAMiddleware,
|
||||
bridge: Bridge
|
||||
): Promise<void> {
|
||||
await setHasEnties(haMiddleware, bridge);
|
||||
await setHasEntities(haMiddleware, bridge);
|
||||
haMiddleware.subscribe();
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ import { AddHaDeviceToBridge, Bridge, HAMiddleware } from '../MapperType';
|
||||
import { Logger } from '@project-chip/matter-node.js/log';
|
||||
|
||||
const LOGGER = new Logger('DimmableLight');
|
||||
export const addDimmerableLightDevice: AddHaDeviceToBridge = (
|
||||
export const addDimmableLightDevice: AddHaDeviceToBridge = (
|
||||
haEntity: HassEntity,
|
||||
haMiddleware: HAMiddleware,
|
||||
bridge: Bridge
|
||||
@ -63,7 +63,7 @@ export const addDimmerableLightDevice: AddHaDeviceToBridge = (
|
||||
);
|
||||
});
|
||||
|
||||
haMiddleware.subscrieToDevice(
|
||||
haMiddleware.subscribeToDevice(
|
||||
haEntity.entity_id,
|
||||
(event: StateChangedEvent) => {
|
||||
LOGGER.debug(`Event for device ${haEntity.entity_id}`);
|
@ -8,7 +8,7 @@ import {
|
||||
import { AddHaDeviceToBridge, Bridge, HAMiddleware } from '../MapperType';
|
||||
import { Logger } from '@project-chip/matter-node.js/log';
|
||||
|
||||
const LOGGER = new Logger('OnOfflIght');
|
||||
const LOGGER = new Logger('OnOffLight');
|
||||
export const addOnOffLightDevice: AddHaDeviceToBridge = (
|
||||
haEntity: HassEntity,
|
||||
haMiddleware: HAMiddleware,
|
||||
@ -42,7 +42,7 @@ export const addOnOffLightDevice: AddHaDeviceToBridge = (
|
||||
`Identify called for OnOffDevice ${haEntity.attributes['friendly_name']} with id: ${serialFromId} and identifyTime: ${identifyTime}`
|
||||
)
|
||||
);
|
||||
haMiddleware.subscrieToDevice(
|
||||
haMiddleware.subscribeToDevice(
|
||||
haEntity.entity_id,
|
||||
(event: StateChangedEvent) => {
|
||||
LOGGER.debug(`Event for device ${haEntity.entity_id}`);
|
||||
|
@ -2,11 +2,11 @@ import { Logger } from '@project-chip/matter-node.js/log';
|
||||
import { HAMiddleware } from '../../../home-assistant/HAmiddleware';
|
||||
import { HassEntity } from '../../../home-assistant/HAssTypes';
|
||||
import { AddHaDeviceToBridge, Bridge } from '../MapperType';
|
||||
import { addDimmerableLightDevice } from './DimmerableLightDevice';
|
||||
import { addDimmableLightDevice } from './DimmableLightDevice';
|
||||
import { addOnOffLightDevice } from './OnOffLightDevice';
|
||||
import { Device } from '@project-chip/matter-node.js/device';
|
||||
|
||||
export * from './DimmerableLightDevice';
|
||||
export * from './DimmableLightDevice';
|
||||
export * from './OnOffLightDevice';
|
||||
|
||||
const LOGGER = new Logger('Lights');
|
||||
@ -16,8 +16,8 @@ const LIGHTS_MAP_FUNCTIONS: Map<string, AddHaDeviceToBridge> = new Map<
|
||||
AddHaDeviceToBridge
|
||||
>([
|
||||
['onoff', addOnOffLightDevice],
|
||||
['rgb', addDimmerableLightDevice],
|
||||
['brightness', addDimmerableLightDevice],
|
||||
['rgb', addDimmableLightDevice],
|
||||
['brightness', addDimmableLightDevice],
|
||||
]);
|
||||
|
||||
const LIGHTS_MAP: Map<string, Device> = new Map<string, Device>();
|
||||
|
@ -29,7 +29,7 @@ export class Bridge {
|
||||
private ready = false;
|
||||
|
||||
private matterServer: MatterServer;
|
||||
private static instace: Bridge;
|
||||
private static instance: Bridge;
|
||||
private logger = new Logger('bridge');
|
||||
private storageManager: StorageManager;
|
||||
private aggregator: Aggregator;
|
||||
@ -49,10 +49,10 @@ export class Bridge {
|
||||
matterServer: MatterServer,
|
||||
storageManager: StorageManager
|
||||
): Bridge {
|
||||
if (!Bridge.instace) {
|
||||
this.instace = new Bridge(matterServer, storageManager);
|
||||
if (!Bridge.instance) {
|
||||
this.instance = new Bridge(matterServer, storageManager);
|
||||
}
|
||||
return Bridge.instace;
|
||||
return Bridge.instance;
|
||||
}
|
||||
|
||||
private async setupContextAndCommissioningServer(): Promise<CommissioningServer> {
|
||||
|
@ -1 +1,3 @@
|
||||
name: ha-matter-bridge
|
||||
maintainer: Jatus93
|
||||
url: https://github.com/Jatus93/ha-matter-bridge
|
Loading…
Reference in New Issue
Block a user