From fac9bf7d9bc7356136a629724e9018840e8ba29e Mon Sep 17 00:00:00 2001 From: shaulbd Date: Fri, 6 Oct 2023 11:29:38 -0400 Subject: [PATCH 1/3] Fix error: "Special Weather" Alert Type Not Found --- src/integrations/weatheralerts.ts | 260 +++++++++++++++--------------- 1 file changed, 130 insertions(+), 130 deletions(-) diff --git a/src/integrations/weatheralerts.ts b/src/integrations/weatheralerts.ts index de41453..fa05e50 100644 --- a/src/integrations/weatheralerts.ts +++ b/src/integrations/weatheralerts.ts @@ -1,130 +1,130 @@ -import { HassEntity } from 'home-assistant-js-websocket'; -import { - MeteoalarmAlert, - MeteoalarmEventType, - MeteoalarmIntegration, - MeteoalarmIntegrationEntityType, - MeteoalarmIntegrationMetadata, - MeteoalarmLevelType -} from '../types'; -import { Utils } from '../utils'; - -type WeatheralertsAlert = { - event: string, - severity: string, - title: string -} - -type WeatheralertsEntity = HassEntity & { - attributes: { - integration: string, - alerts: WeatheralertsAlert[] - } -} - -export default class Weatheralerts implements MeteoalarmIntegration { - public get metadata(): MeteoalarmIntegrationMetadata { - return { - key: 'weatheralerts', - name: 'Weatheralerts', - type: MeteoalarmIntegrationEntityType.SingleEntity, - returnHeadline: true, - returnMultipleAlerts: true, - entitiesCount: 1, - monitoredConditions: Utils.convertEventTypesForMetadata(this.eventTypes) - }; - } - - public supports(entity: WeatheralertsEntity): boolean { - return entity.attributes.integration == 'weatheralerts'; - } - - public alertActive(entity: WeatheralertsEntity): boolean { - return Number(entity.state) > 0; - } - - private get eventTypes(): { [key: string]: MeteoalarmEventType } { - // Event types from: https://www.weather.gov/lwx/WarningsDefined - return { - 'Winter Storm': MeteoalarmEventType.SnowIce, - 'Blizzard': MeteoalarmEventType.SnowIce, - 'Ice Storm': MeteoalarmEventType.SnowIce, - 'Winter Weather': MeteoalarmEventType.SnowIce, - 'Freeze': MeteoalarmEventType.LowTemperature, - 'Frost': MeteoalarmEventType.LowTemperature, - 'Wind Chill': MeteoalarmEventType.LowTemperature, - 'Fire Weather': MeteoalarmEventType.ForestFire, - 'Red Flag': MeteoalarmEventType.ForestFire, - 'Dense Fog': MeteoalarmEventType.Fog, - 'High Wind': MeteoalarmEventType.Wind, - 'Wind': MeteoalarmEventType.Wind, - 'Severe Thunderstorm': MeteoalarmEventType.Thunderstorms, - 'Tornado': MeteoalarmEventType.Tornado, - 'Extreme Wind': MeteoalarmEventType.Wind, - 'Small Craft': MeteoalarmEventType.Wind, - 'Gale': MeteoalarmEventType.SeaEvent, - 'Storm': MeteoalarmEventType.Thunderstorms, - 'Hurricane Force Wind': MeteoalarmEventType.Hurricane, - 'Special Marine': MeteoalarmEventType.Unknown, - 'Coastal Flood': MeteoalarmEventType.Flooding, - 'Flash Flood': MeteoalarmEventType.Flooding, - 'Flood': MeteoalarmEventType.Flooding, - 'River Flood': MeteoalarmEventType.Flooding, - 'Excessive Heat': MeteoalarmEventType.HighTemperature, - 'Heat': MeteoalarmEventType.HighTemperature, - 'Tropical Storm': MeteoalarmEventType.Hurricane, - 'Hurricane': MeteoalarmEventType.Hurricane, - 'Air Quality': MeteoalarmEventType.AirQuality, - 'Rip Current': MeteoalarmEventType.CoastalEvent, - 'Special Weather': MeteoalarmEventType.Unknown, - 'High Surf': MeteoalarmEventType.CoastalEvent, - 'Hazardous Seas': MeteoalarmEventType.SeaEvent, - 'Beach Hazard': MeteoalarmEventType.CoastalEvent, - 'Blowing Dust': MeteoalarmEventType.Dust - }; - } - - private get eventLevels(): { [key: string]: MeteoalarmLevelType } { - // Event types from: https://www.weather.gov/lwx/WarningsDefined - return { - 'Warning': MeteoalarmLevelType.Red, - 'Statement': MeteoalarmLevelType.Orange, - 'Watch': MeteoalarmLevelType.Orange, - 'Advisory': MeteoalarmLevelType.Yellow, - 'Alert': MeteoalarmLevelType.Yellow - }; - } - - public getAlerts(entity: WeatheralertsEntity): MeteoalarmAlert[] { - const { alerts } = entity.attributes; - - const result: MeteoalarmAlert[] = []; - - for(const alert of alerts) { - const fullAlertName = alert.event; - let alertLevel: MeteoalarmLevelType | undefined = undefined; - let alertType: MeteoalarmEventType | undefined = undefined; - - for(const [levelName, level] of Object.entries(this.eventLevels)) { - if(!fullAlertName.includes(levelName)) continue; - alertLevel = level; - const alertName = fullAlertName.replace(levelName, '').trim(); - alertType = this.eventTypes[alertName]; - if(!alertType) { - throw Error(`Unknown weatheralerts alert type: ${alertName}`); - } - } - - if(!alertLevel) { - throw Error(`Unknown weatheralerts alert level: ${fullAlertName}`); - } - - result.push({ - headline: fullAlertName, - level: alertLevel, - event: alertType! - }); - } - return result; - } -} +import { HassEntity } from 'home-assistant-js-websocket'; +import { + MeteoalarmAlert, + MeteoalarmEventType, + MeteoalarmIntegration, + MeteoalarmIntegrationEntityType, + MeteoalarmIntegrationMetadata, + MeteoalarmLevelType +} from '../types'; +import { Utils } from '../utils'; + +type WeatheralertsAlert = { + event: string, + severity: string, + title: string +} + +type WeatheralertsEntity = HassEntity & { + attributes: { + integration: string, + alerts: WeatheralertsAlert[] + } +} + +export default class Weatheralerts implements MeteoalarmIntegration { + public get metadata(): MeteoalarmIntegrationMetadata { + return { + key: 'weatheralerts', + name: 'Weatheralerts', + type: MeteoalarmIntegrationEntityType.SingleEntity, + returnHeadline: true, + returnMultipleAlerts: true, + entitiesCount: 1, + monitoredConditions: Utils.convertEventTypesForMetadata(this.eventTypes) + }; + } + + public supports(entity: WeatheralertsEntity): boolean { + return entity.attributes.integration == 'weatheralerts'; + } + + public alertActive(entity: WeatheralertsEntity): boolean { + return Number(entity.state) > 0; + } + + private get eventTypes(): { [key: string]: MeteoalarmEventType } { + // Event types from: https://www.weather.gov/lwx/WarningsDefined + return { + 'Winter Storm': MeteoalarmEventType.SnowIce, + 'Blizzard': MeteoalarmEventType.SnowIce, + 'Ice Storm': MeteoalarmEventType.SnowIce, + 'Winter Weather': MeteoalarmEventType.SnowIce, + 'Freeze': MeteoalarmEventType.LowTemperature, + 'Frost': MeteoalarmEventType.LowTemperature, + 'Wind Chill': MeteoalarmEventType.LowTemperature, + 'Fire Weather': MeteoalarmEventType.ForestFire, + 'Red Flag': MeteoalarmEventType.ForestFire, + 'Dense Fog': MeteoalarmEventType.Fog, + 'High Wind': MeteoalarmEventType.Wind, + 'Wind': MeteoalarmEventType.Wind, + 'Severe Thunderstorm': MeteoalarmEventType.Thunderstorms, + 'Tornado': MeteoalarmEventType.Tornado, + 'Extreme Wind': MeteoalarmEventType.Wind, + 'Small Craft': MeteoalarmEventType.Wind, + 'Gale': MeteoalarmEventType.SeaEvent, + 'Storm': MeteoalarmEventType.Thunderstorms, + 'Hurricane Force Wind': MeteoalarmEventType.Hurricane, + 'Special Marine': MeteoalarmEventType.Unknown, + 'Coastal Flood': MeteoalarmEventType.Flooding, + 'Flash Flood': MeteoalarmEventType.Flooding, + 'Flood': MeteoalarmEventType.Flooding, + 'River Flood': MeteoalarmEventType.Flooding, + 'Excessive Heat': MeteoalarmEventType.HighTemperature, + 'Heat': MeteoalarmEventType.HighTemperature, + 'Tropical Storm': MeteoalarmEventType.Hurricane, + 'Hurricane': MeteoalarmEventType.Hurricane, + 'Air Quality': MeteoalarmEventType.AirQuality, + 'Rip Current': MeteoalarmEventType.CoastalEvent, + 'Special Weather': MeteoalarmEventType.Unknown, + 'High Surf': MeteoalarmEventType.CoastalEvent, + 'Hazardous Seas': MeteoalarmEventType.SeaEvent, + 'Beach Hazard': MeteoalarmEventType.CoastalEvent, + 'Blowing Dust': MeteoalarmEventType.Dust + }; + } + + private get eventLevels(): { [key: string]: MeteoalarmLevelType } { + // Event types from: https://www.weather.gov/lwx/WarningsDefined + return { + 'Warning': MeteoalarmLevelType.Red, + 'Statement': MeteoalarmLevelType.Orange, + 'Watch': MeteoalarmLevelType.Orange, + 'Advisory': MeteoalarmLevelType.Yellow, + 'Alert': MeteoalarmLevelType.Yellow + }; + } + + public getAlerts(entity: WeatheralertsEntity): MeteoalarmAlert[] { + const { alerts } = entity.attributes; + + const result: MeteoalarmAlert[] = []; + + for(const alert of alerts) { + const fullAlertName = alert.event; + let alertLevel: MeteoalarmLevelType | undefined = undefined; + let alertType: MeteoalarmEventType | undefined = undefined; + + for(const [levelName, level] of Object.entries(this.eventLevels)) { + if(!fullAlertName.includes(levelName)) continue; + alertLevel = level; + const alertName = fullAlertName.replace(levelName, '').trim(); + alertType = this.eventTypes[alertName]; + if(alertType == undefined) { + throw Error(`Unknown weatheralerts alert type: ${alertName}`); + } + } + + if(!alertLevel) { + throw Error(`Unknown weatheralerts alert level: ${fullAlertName}`); + } + + result.push({ + headline: fullAlertName, + level: alertLevel, + event: alertType! + }); + } + return result; + } +} From 9ad3033a1f5fdddd984b952f86de6bf6bb732918 Mon Sep 17 00:00:00 2001 From: Bartosz Dokurno Date: Tue, 10 Oct 2023 13:40:25 +0200 Subject: [PATCH 2/3] fix newlines (maybe) --- src/integrations/weatheralerts.ts | 260 +++++++++++++++--------------- 1 file changed, 130 insertions(+), 130 deletions(-) diff --git a/src/integrations/weatheralerts.ts b/src/integrations/weatheralerts.ts index fa05e50..a2974d7 100644 --- a/src/integrations/weatheralerts.ts +++ b/src/integrations/weatheralerts.ts @@ -1,130 +1,130 @@ -import { HassEntity } from 'home-assistant-js-websocket'; -import { - MeteoalarmAlert, - MeteoalarmEventType, - MeteoalarmIntegration, - MeteoalarmIntegrationEntityType, - MeteoalarmIntegrationMetadata, - MeteoalarmLevelType -} from '../types'; -import { Utils } from '../utils'; - -type WeatheralertsAlert = { - event: string, - severity: string, - title: string -} - -type WeatheralertsEntity = HassEntity & { - attributes: { - integration: string, - alerts: WeatheralertsAlert[] - } -} - -export default class Weatheralerts implements MeteoalarmIntegration { - public get metadata(): MeteoalarmIntegrationMetadata { - return { - key: 'weatheralerts', - name: 'Weatheralerts', - type: MeteoalarmIntegrationEntityType.SingleEntity, - returnHeadline: true, - returnMultipleAlerts: true, - entitiesCount: 1, - monitoredConditions: Utils.convertEventTypesForMetadata(this.eventTypes) - }; - } - - public supports(entity: WeatheralertsEntity): boolean { - return entity.attributes.integration == 'weatheralerts'; - } - - public alertActive(entity: WeatheralertsEntity): boolean { - return Number(entity.state) > 0; - } - - private get eventTypes(): { [key: string]: MeteoalarmEventType } { - // Event types from: https://www.weather.gov/lwx/WarningsDefined - return { - 'Winter Storm': MeteoalarmEventType.SnowIce, - 'Blizzard': MeteoalarmEventType.SnowIce, - 'Ice Storm': MeteoalarmEventType.SnowIce, - 'Winter Weather': MeteoalarmEventType.SnowIce, - 'Freeze': MeteoalarmEventType.LowTemperature, - 'Frost': MeteoalarmEventType.LowTemperature, - 'Wind Chill': MeteoalarmEventType.LowTemperature, - 'Fire Weather': MeteoalarmEventType.ForestFire, - 'Red Flag': MeteoalarmEventType.ForestFire, - 'Dense Fog': MeteoalarmEventType.Fog, - 'High Wind': MeteoalarmEventType.Wind, - 'Wind': MeteoalarmEventType.Wind, - 'Severe Thunderstorm': MeteoalarmEventType.Thunderstorms, - 'Tornado': MeteoalarmEventType.Tornado, - 'Extreme Wind': MeteoalarmEventType.Wind, - 'Small Craft': MeteoalarmEventType.Wind, - 'Gale': MeteoalarmEventType.SeaEvent, - 'Storm': MeteoalarmEventType.Thunderstorms, - 'Hurricane Force Wind': MeteoalarmEventType.Hurricane, - 'Special Marine': MeteoalarmEventType.Unknown, - 'Coastal Flood': MeteoalarmEventType.Flooding, - 'Flash Flood': MeteoalarmEventType.Flooding, - 'Flood': MeteoalarmEventType.Flooding, - 'River Flood': MeteoalarmEventType.Flooding, - 'Excessive Heat': MeteoalarmEventType.HighTemperature, - 'Heat': MeteoalarmEventType.HighTemperature, - 'Tropical Storm': MeteoalarmEventType.Hurricane, - 'Hurricane': MeteoalarmEventType.Hurricane, - 'Air Quality': MeteoalarmEventType.AirQuality, - 'Rip Current': MeteoalarmEventType.CoastalEvent, - 'Special Weather': MeteoalarmEventType.Unknown, - 'High Surf': MeteoalarmEventType.CoastalEvent, - 'Hazardous Seas': MeteoalarmEventType.SeaEvent, - 'Beach Hazard': MeteoalarmEventType.CoastalEvent, - 'Blowing Dust': MeteoalarmEventType.Dust - }; - } - - private get eventLevels(): { [key: string]: MeteoalarmLevelType } { - // Event types from: https://www.weather.gov/lwx/WarningsDefined - return { - 'Warning': MeteoalarmLevelType.Red, - 'Statement': MeteoalarmLevelType.Orange, - 'Watch': MeteoalarmLevelType.Orange, - 'Advisory': MeteoalarmLevelType.Yellow, - 'Alert': MeteoalarmLevelType.Yellow - }; - } - - public getAlerts(entity: WeatheralertsEntity): MeteoalarmAlert[] { - const { alerts } = entity.attributes; - - const result: MeteoalarmAlert[] = []; - - for(const alert of alerts) { - const fullAlertName = alert.event; - let alertLevel: MeteoalarmLevelType | undefined = undefined; - let alertType: MeteoalarmEventType | undefined = undefined; - - for(const [levelName, level] of Object.entries(this.eventLevels)) { - if(!fullAlertName.includes(levelName)) continue; - alertLevel = level; - const alertName = fullAlertName.replace(levelName, '').trim(); - alertType = this.eventTypes[alertName]; - if(alertType == undefined) { - throw Error(`Unknown weatheralerts alert type: ${alertName}`); - } - } - - if(!alertLevel) { - throw Error(`Unknown weatheralerts alert level: ${fullAlertName}`); - } - - result.push({ - headline: fullAlertName, - level: alertLevel, - event: alertType! - }); - } - return result; - } -} +import { HassEntity } from 'home-assistant-js-websocket'; +import { + MeteoalarmAlert, + MeteoalarmEventType, + MeteoalarmIntegration, + MeteoalarmIntegrationEntityType, + MeteoalarmIntegrationMetadata, + MeteoalarmLevelType +} from '../types'; +import { Utils } from '../utils'; + +type WeatheralertsAlert = { + event: string, + severity: string, + title: string +} + +type WeatheralertsEntity = HassEntity & { + attributes: { + integration: string, + alerts: WeatheralertsAlert[] + } +} + +export default class Weatheralerts implements MeteoalarmIntegration { + public get metadata(): MeteoalarmIntegrationMetadata { + return { + key: 'weatheralerts', + name: 'Weatheralerts', + type: MeteoalarmIntegrationEntityType.SingleEntity, + returnHeadline: true, + returnMultipleAlerts: true, + entitiesCount: 1, + monitoredConditions: Utils.convertEventTypesForMetadata(this.eventTypes) + }; + } + + public supports(entity: WeatheralertsEntity): boolean { + return entity.attributes.integration == 'weatheralerts'; + } + + public alertActive(entity: WeatheralertsEntity): boolean { + return Number(entity.state) > 0; + } + + private get eventTypes(): { [key: string]: MeteoalarmEventType } { + // Event types from: https://www.weather.gov/lwx/WarningsDefined + return { + 'Winter Storm': MeteoalarmEventType.SnowIce, + 'Blizzard': MeteoalarmEventType.SnowIce, + 'Ice Storm': MeteoalarmEventType.SnowIce, + 'Winter Weather': MeteoalarmEventType.SnowIce, + 'Freeze': MeteoalarmEventType.LowTemperature, + 'Frost': MeteoalarmEventType.LowTemperature, + 'Wind Chill': MeteoalarmEventType.LowTemperature, + 'Fire Weather': MeteoalarmEventType.ForestFire, + 'Red Flag': MeteoalarmEventType.ForestFire, + 'Dense Fog': MeteoalarmEventType.Fog, + 'High Wind': MeteoalarmEventType.Wind, + 'Wind': MeteoalarmEventType.Wind, + 'Severe Thunderstorm': MeteoalarmEventType.Thunderstorms, + 'Tornado': MeteoalarmEventType.Tornado, + 'Extreme Wind': MeteoalarmEventType.Wind, + 'Small Craft': MeteoalarmEventType.Wind, + 'Gale': MeteoalarmEventType.SeaEvent, + 'Storm': MeteoalarmEventType.Thunderstorms, + 'Hurricane Force Wind': MeteoalarmEventType.Hurricane, + 'Special Marine': MeteoalarmEventType.Unknown, + 'Coastal Flood': MeteoalarmEventType.Flooding, + 'Flash Flood': MeteoalarmEventType.Flooding, + 'Flood': MeteoalarmEventType.Flooding, + 'River Flood': MeteoalarmEventType.Flooding, + 'Excessive Heat': MeteoalarmEventType.HighTemperature, + 'Heat': MeteoalarmEventType.HighTemperature, + 'Tropical Storm': MeteoalarmEventType.Hurricane, + 'Hurricane': MeteoalarmEventType.Hurricane, + 'Air Quality': MeteoalarmEventType.AirQuality, + 'Rip Current': MeteoalarmEventType.CoastalEvent, + 'Special Weather': MeteoalarmEventType.Unknown, + 'High Surf': MeteoalarmEventType.CoastalEvent, + 'Hazardous Seas': MeteoalarmEventType.SeaEvent, + 'Beach Hazard': MeteoalarmEventType.CoastalEvent, + 'Blowing Dust': MeteoalarmEventType.Dust + }; + } + + private get eventLevels(): { [key: string]: MeteoalarmLevelType } { + // Event types from: https://www.weather.gov/lwx/WarningsDefined + return { + 'Warning': MeteoalarmLevelType.Red, + 'Statement': MeteoalarmLevelType.Orange, + 'Watch': MeteoalarmLevelType.Orange, + 'Advisory': MeteoalarmLevelType.Yellow, + 'Alert': MeteoalarmLevelType.Yellow + }; + } + + public getAlerts(entity: WeatheralertsEntity): MeteoalarmAlert[] { + const { alerts } = entity.attributes; + + const result: MeteoalarmAlert[] = []; + + for(const alert of alerts) { + const fullAlertName = alert.event; + let alertLevel: MeteoalarmLevelType | undefined = undefined; + let alertType: MeteoalarmEventType | undefined = undefined; + + for(const [levelName, level] of Object.entries(this.eventLevels)) { + if(!fullAlertName.includes(levelName)) continue; + alertLevel = level; + const alertName = fullAlertName.replace(levelName, '').trim(); + alertType = this.eventTypes[alertName]; + if(alertType == undefined) { + throw Error(`Unknown weatheralerts alert type: ${alertName}`); + } + } + + if(!alertLevel) { + throw Error(`Unknown weatheralerts alert level: ${fullAlertName}`); + } + + result.push({ + headline: fullAlertName, + level: alertLevel, + event: alertType! + }); + } + return result; + } +} From bcf81da9c90c254e5292ad7add6e5591e73fe198 Mon Sep 17 00:00:00 2001 From: shaulbd Date: Wed, 11 Oct 2023 18:56:21 -0400 Subject: [PATCH 3/3] Fix alert level check --- src/integrations/weatheralerts.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/integrations/weatheralerts.ts b/src/integrations/weatheralerts.ts index a2974d7..b0fe980 100644 --- a/src/integrations/weatheralerts.ts +++ b/src/integrations/weatheralerts.ts @@ -115,7 +115,7 @@ export default class Weatheralerts implements MeteoalarmIntegration { } } - if(!alertLevel) { + if(alertLevel == undefined) { throw Error(`Unknown weatheralerts alert level: ${fullAlertName}`); }