meteoalarm-card
Version:
Meteoalarm card for Home Assistant Lovelace UI
93 lines (86 loc) • 2.72 kB
text/typescript
import { HassEntity } from 'home-assistant-js-websocket';
import {
MeteoalarmAlert,
MeteoalarmEventType,
MeteoalarmIntegration,
MeteoalarmIntegrationEntityType,
MeteoalarmIntegrationMetadata,
} from '../types';
type BurzeDzisNetEntity = HassEntity & {
attributes: {
attribution: string;
description?: string;
level?: number;
};
};
export default class BurzeDzisNet implements MeteoalarmIntegration {
public get metadata(): MeteoalarmIntegrationMetadata {
return {
key: 'burze_dzis_net',
name: 'Burze.dzis.net',
type: MeteoalarmIntegrationEntityType.SeparateEvents,
returnHeadline: true,
returnMultipleAlerts: true,
entitiesCount: 6,
monitoredConditions: [
MeteoalarmEventType.LowTemperature,
MeteoalarmEventType.HighTemperature,
MeteoalarmEventType.Rain,
MeteoalarmEventType.Thunderstorms,
MeteoalarmEventType.Tornado,
MeteoalarmEventType.Wind,
],
};
}
public supports(entity: BurzeDzisNetEntity): boolean {
return (
entity.attributes.attribution == 'Information provided by Burze.dzis.net.' &&
this.getEventType(entity) !== undefined
);
}
public alertActive(entity: BurzeDzisNetEntity): boolean {
return entity.state === 'on';
}
public getAlerts(entity: BurzeDzisNetEntity): MeteoalarmAlert {
const event = this.getEventType(entity)!;
return {
event: event,
level: entity.attributes.level!,
headline: entity.attributes.description,
};
}
private getEventType(entity: HassEntity): MeteoalarmEventType | undefined {
if (
entity.entity_id.endsWith('frost_warning') &&
entity.attributes.friendly_name?.endsWith('Ostrzeżenie - Mróz')
) {
return MeteoalarmEventType.LowTemperature;
} else if (
entity.entity_id.endsWith('heat_warning') &&
entity.attributes.friendly_name?.endsWith('Ostrzeżenie - Upał')
) {
return MeteoalarmEventType.HighTemperature;
} else if (
entity.entity_id.endsWith('precipitation_warning') &&
entity.attributes.friendly_name?.endsWith('Ostrzeżenie - Opad')
) {
return MeteoalarmEventType.Rain;
} else if (
entity.entity_id.endsWith('storm_warning') &&
entity.attributes.friendly_name?.endsWith('Ostrzeżenie - Burza')
) {
return MeteoalarmEventType.Thunderstorms;
} else if (
entity.entity_id.endsWith('tornado_warning') &&
entity.attributes.friendly_name?.endsWith('Ostrzeżenie - Trąba')
) {
return MeteoalarmEventType.Tornado;
} else if (
entity.entity_id.endsWith('wind_warning') &&
entity.attributes.friendly_name?.endsWith(' Ostrzeżenie - Wiatr')
) {
return MeteoalarmEventType.Wind;
}
return undefined;
}
}