mirror of
https://github.com/netbymatt/ws4kp.git
synced 2026-04-14 07:39:29 -07:00
better error handling for api.weather.gov
This commit is contained in:
@@ -8016,13 +8016,6 @@ const _StationInfo = {
|
||||
Latitude: 41.8666,
|
||||
Longitude: -87.5833,
|
||||
},
|
||||
KIGQ: {
|
||||
StationId: 'KIGQ',
|
||||
City: 'Chicago/Lansing',
|
||||
State: 'IL',
|
||||
Latitude: 41.5333,
|
||||
Longitude: -87.5333,
|
||||
},
|
||||
KZAU: {
|
||||
StationId: 'KZAU',
|
||||
City: 'Chicago/Artcc',
|
||||
@@ -8051,13 +8044,6 @@ const _StationInfo = {
|
||||
Latitude: 39.8333,
|
||||
Longitude: -88.85,
|
||||
},
|
||||
KDKB: {
|
||||
StationId: 'KDKB',
|
||||
City: 'De Kalb',
|
||||
State: 'IL',
|
||||
Latitude: 41.9333,
|
||||
Longitude: -88.7,
|
||||
},
|
||||
KC73: {
|
||||
StationId: 'KC73',
|
||||
City: 'Dixon',
|
||||
@@ -8212,20 +8198,6 @@ const _StationInfo = {
|
||||
Latitude: 41.45,
|
||||
Longitude: -90.5166,
|
||||
},
|
||||
KC56: {
|
||||
StationId: 'KC56',
|
||||
City: 'Monee',
|
||||
State: 'IL',
|
||||
Latitude: 41.3833,
|
||||
Longitude: -87.6833,
|
||||
},
|
||||
KC09: {
|
||||
StationId: 'KC09',
|
||||
City: 'Morris-Washburn',
|
||||
State: 'IL',
|
||||
Latitude: 41.4333,
|
||||
Longitude: -88.4166,
|
||||
},
|
||||
KAJG: {
|
||||
StationId: 'KAJG',
|
||||
City: 'Mount Carmel',
|
||||
@@ -8317,13 +8289,6 @@ const _StationInfo = {
|
||||
Latitude: 42.2,
|
||||
Longitude: -89.1,
|
||||
},
|
||||
KRPJ: {
|
||||
StationId: 'KRPJ',
|
||||
City: 'Rochelle/Koritz',
|
||||
State: 'IL',
|
||||
Latitude: 41.8833,
|
||||
Longitude: -89.0833,
|
||||
},
|
||||
KLOT: {
|
||||
StationId: 'KLOT',
|
||||
City: 'Romeoville/Chi',
|
||||
@@ -23777,13 +23742,6 @@ const _StationInfo = {
|
||||
Latitude: 43.4166,
|
||||
Longitude: -88.7,
|
||||
},
|
||||
KENW: {
|
||||
StationId: 'KENW',
|
||||
City: 'Kenosha',
|
||||
State: 'WI',
|
||||
Latitude: 42.6,
|
||||
Longitude: -87.9333,
|
||||
},
|
||||
KLSE: {
|
||||
StationId: 'KLSE',
|
||||
City: 'La Crosse',
|
||||
@@ -24085,13 +24043,6 @@ const _StationInfo = {
|
||||
Latitude: 43.1666,
|
||||
Longitude: -88.7166,
|
||||
},
|
||||
KUES: {
|
||||
StationId: 'KUES',
|
||||
City: 'Waukesha Cnty',
|
||||
State: 'WI',
|
||||
Latitude: 43.05,
|
||||
Longitude: -88.25,
|
||||
},
|
||||
KPCZ: {
|
||||
StationId: 'KPCZ',
|
||||
City: 'Waupaca',
|
||||
|
||||
@@ -55,6 +55,7 @@ const icons = (() => {
|
||||
return addPath('Cloudy.gif');
|
||||
|
||||
case 'fog':
|
||||
case 'fog-n':
|
||||
return addPath('Fog.gif');
|
||||
|
||||
case 'rain_sleet':
|
||||
@@ -124,7 +125,7 @@ const icons = (() => {
|
||||
return addPath('Blowing Snow.gif');
|
||||
|
||||
default:
|
||||
console.log(`Unable to locate regional icon for ${link} ${isNightTime}`);
|
||||
console.log(`Unable to locate regional icon for ${conditionName} ${link} ${isNightTime}`);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
@@ -245,7 +246,7 @@ const icons = (() => {
|
||||
return addPath('Blowing-Snow.gif');
|
||||
|
||||
default:
|
||||
console.log(`Unable to locate icon for ${link} ${isNightTime}`);
|
||||
console.log(`Unable to locate icon for ${conditionName} ${link} ${isNightTime}`);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -50,6 +50,12 @@ class LatestObservations extends WeatherDisplay {
|
||||
// cut down to the maximum of 7
|
||||
this.data = actualConditions.slice(0,this.MaximumRegionalStations);
|
||||
|
||||
// test for at least one station
|
||||
if (this.data.length < 1) {
|
||||
this.setStatus(STATUS.noData);
|
||||
return;
|
||||
}
|
||||
|
||||
this.drawCanvas();
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,11 @@ class LocalForecast extends WeatherDisplay {
|
||||
|
||||
// get raw data
|
||||
const rawData = await this.getRawData(weatherParameters);
|
||||
// check for data
|
||||
if (!rawData) {
|
||||
this.setStatus(STATUS.failed);
|
||||
return;
|
||||
}
|
||||
// parse raw data
|
||||
const conditions = this.parseLocalForecast(rawData);
|
||||
|
||||
@@ -78,7 +83,7 @@ class LocalForecast extends WeatherDisplay {
|
||||
|
||||
this.currentScreen = 0;
|
||||
this.timing.totalScreens = this.screenTexts.length;
|
||||
this.drawCanvas();
|
||||
this.setStatus(STATUS.loaded);
|
||||
}
|
||||
|
||||
// get the unformatted data (also used by extended forecast)
|
||||
@@ -124,11 +129,7 @@ class LocalForecast extends WeatherDisplay {
|
||||
this.screenTexts[this.screenIndex].split('\n').forEach((text, index) => {
|
||||
draw.text(this.context, 'Star4000', '24pt', '#FFFFFF', 75, 140+40*index, text, 2);
|
||||
});
|
||||
|
||||
|
||||
this.finishDraw();
|
||||
this.setStatus(STATUS.loaded);
|
||||
|
||||
}
|
||||
|
||||
// format the forecast
|
||||
|
||||
@@ -16,22 +16,19 @@ class Radar extends WeatherDisplay {
|
||||
{time: 1, si: 2},
|
||||
{time: 1, si: 3},
|
||||
{time: 1, si: 4},
|
||||
{time: 1, si: 5},
|
||||
{time: 4, si: 6},
|
||||
{time: 4, si: 5},
|
||||
{time: 1, si: 0},
|
||||
{time: 1, si: 1},
|
||||
{time: 1, si: 2},
|
||||
{time: 1, si: 3},
|
||||
{time: 1, si: 4},
|
||||
{time: 1, si: 5},
|
||||
{time: 4, si: 6},
|
||||
{time: 4, si: 5},
|
||||
{time: 1, si: 0},
|
||||
{time: 1, si: 1},
|
||||
{time: 1, si: 2},
|
||||
{time: 1, si: 3},
|
||||
{time: 1, si: 4},
|
||||
{time: 1, si: 5},
|
||||
{time: 12, si: 6},
|
||||
{time: 12, si: 5},
|
||||
];
|
||||
|
||||
// pre-load background image (returns promise)
|
||||
@@ -214,10 +211,12 @@ class Radar extends WeatherDisplay {
|
||||
this.data = radarInfo.map(radar=>radar.canvas);
|
||||
|
||||
this.times = radarInfo.map(radar=>radar.time);
|
||||
this.setStatus(STATUS.loaded);
|
||||
}
|
||||
|
||||
async drawCanvas() {
|
||||
super.drawCanvas();
|
||||
if (this.screenIndex === -1) return;
|
||||
this.context.drawImage(await this.backgroundImage, 0, 0);
|
||||
const {DateTime} = luxon;
|
||||
// Title
|
||||
@@ -244,7 +243,6 @@ class Radar extends WeatherDisplay {
|
||||
draw.text(this.context, 'Star4000 Small', '24pt', '#ffffff', 438, 105, this.times[this.screenIndex].toLocaleString(DateTime.TIME_SIMPLE), 2, 'center');
|
||||
|
||||
this.finishDraw();
|
||||
this.setStatus(STATUS.loaded);
|
||||
}
|
||||
|
||||
// utility latitude/pixel conversions
|
||||
|
||||
@@ -115,6 +115,12 @@ class RegionalForecast extends WeatherDisplay {
|
||||
// filter out any false (unavailable data)
|
||||
const regionalData = regionalDataAll.filter(data => data);
|
||||
|
||||
// test for data present
|
||||
if (regionalData.length === 0) {
|
||||
this.setStatus(STATUS.noData);
|
||||
return;
|
||||
}
|
||||
|
||||
// return the weather data and offsets
|
||||
this.data = {
|
||||
regionalData,
|
||||
@@ -123,7 +129,6 @@ class RegionalForecast extends WeatherDisplay {
|
||||
};
|
||||
|
||||
this.setStatus(STATUS.loaded);
|
||||
this.drawCanvas();
|
||||
}
|
||||
|
||||
buildForecast (forecast, city, cityXY) {
|
||||
|
||||
@@ -59,6 +59,14 @@ class TravelForecast extends WeatherDisplay {
|
||||
// wait for all forecasts
|
||||
const forecasts = await Promise.all(forecastPromises);
|
||||
this.data = forecasts;
|
||||
|
||||
// test for some data available in at least one forecast
|
||||
const hasData = this.data.reduce((acc,forecast) => acc || forecast.high, false);
|
||||
if (!hasData) {
|
||||
this.setStatus(STATUS.noData);
|
||||
return;
|
||||
}
|
||||
|
||||
this.drawCanvas(true);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user