UNPKG

meteoalarm-card

Version:

Meteoalarm card for Home Assistant Lovelace UI

96 lines (85 loc) 2.96 kB
import { HassEntity } from 'home-assistant-js-websocket'; import { MeteoalarmAlert, MeteoalarmEventType, MeteoalarmIntegration, MeteoalarmIntegrationEntityType, MeteoalarmIntegrationMetadata, MeteoalarmLevelType, } from '../types'; const STATE_GREEN = 'Vert'; const STATE_YELLOW = 'Jaune'; const STATE_ORANGE = 'Orange'; const STATE_RED = 'Rouge'; // The list of event alert is located here // https://github.com/hacf-fr/meteofrance-api/blob/master/src/meteofrance_api/const.py const EVENT_WIND = 'Vent violent'; const EVENT_RAIN_FLOOD = 'Pluie-inondation'; const EVENT_THUNDERSTORMS = 'Orages'; const EVENT_FLOOD = 'Inondation'; const EVENT_SNOW_ICE = 'Neige-verglas'; const EVENT_HIGH_TEMPERATURE = 'Canicule'; const EVENT_LOW_TEMPERATURE = 'Grand-froid'; const EVENT_AVALANCHES = 'Avalanches'; const EVENT_COASTAL = 'Vagues-submersion'; const EVENT_TYPES = { [EVENT_WIND]: MeteoalarmEventType.Wind, [EVENT_RAIN_FLOOD]: MeteoalarmEventType.Flooding, [EVENT_THUNDERSTORMS]: MeteoalarmEventType.Thunderstorms, [EVENT_FLOOD]: MeteoalarmEventType.Flooding, [EVENT_SNOW_ICE]: MeteoalarmEventType.SnowIce, [EVENT_HIGH_TEMPERATURE]: MeteoalarmEventType.HighTemperature, [EVENT_LOW_TEMPERATURE]: MeteoalarmEventType.LowTemperature, [EVENT_AVALANCHES]: MeteoalarmEventType.Avalanches, [EVENT_COASTAL]: MeteoalarmEventType.CoastalEvent, }; const LEVEL_TYPES = { [STATE_YELLOW]: MeteoalarmLevelType.Yellow, [STATE_ORANGE]: MeteoalarmLevelType.Orange, [STATE_RED]: MeteoalarmLevelType.Red, }; export default class MeteoFrance implements MeteoalarmIntegration { public get metadata(): MeteoalarmIntegrationMetadata { return { key: 'meteofrance', name: 'Météo-France', type: MeteoalarmIntegrationEntityType.SingleEntity, returnHeadline: false, returnMultipleAlerts: true, entitiesCount: 1, monitoredConditions: [ MeteoalarmEventType.Wind, MeteoalarmEventType.Flooding, MeteoalarmEventType.Thunderstorms, MeteoalarmEventType.Flooding, MeteoalarmEventType.SnowIce, MeteoalarmEventType.HighTemperature, MeteoalarmEventType.LowTemperature, MeteoalarmEventType.Avalanches, MeteoalarmEventType.CoastalEvent, ], }; } public supports(entity: HassEntity): boolean { return ( entity.attributes.attribution == 'Data provided by Météo-France' && entity.attributes[EVENT_WIND] != undefined ); } public alertActive(entity: HassEntity): boolean { return entity.state !== STATE_GREEN; } public getAlerts(entity: HassEntity): MeteoalarmAlert[] { const result: MeteoalarmAlert[] = []; for (const [eventName, event] of Object.entries(EVENT_TYPES)) { const eventLevel = entity.attributes[eventName]; if (!eventLevel) continue; if (eventLevel === STATE_GREEN) continue; result.push({ level: LEVEL_TYPES[eventLevel], event: event, }); } return result; } }