Compare commits

..

5 Commits

Author SHA1 Message Date
Matt Walsh
7900e59aab 6.2.7 2025-11-05 05:24:14 +00:00
Matt Walsh
9b422dd697 expose more data for scroll messages 2025-11-05 05:24:04 +00:00
Matt Walsh
e4ce0b6cc6 update bug template 2025-11-04 05:49:10 +00:00
Matt Walsh
b0e5018179 6.2.6 2025-10-22 00:22:44 +00:00
Matt Walsh
6422589b5c fix wind speed on hourly close #157 2025-10-22 00:22:29 +00:00
7 changed files with 12 additions and 10 deletions

View File

@@ -12,3 +12,4 @@ Please do not report issues with api.weather.gov being down. It's a new service
Please include: Please include:
* Web browser and OS * Web browser and OS
* Headend Information text block from the very bottom of the web page * Headend Information text block from the very bottom of the web page
* How you're running Weatherstar (Node, Dockerfile, Dockerfile.server, etc.)

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "ws4kp", "name": "ws4kp",
"version": "6.2.5", "version": "6.2.7",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "ws4kp", "name": "ws4kp",
"version": "6.2.5", "version": "6.2.7",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"dotenv": "^17.0.1", "dotenv": "^17.0.1",

View File

@@ -1,6 +1,6 @@
{ {
"name": "ws4kp", "name": "ws4kp",
"version": "6.2.5", "version": "6.2.7",
"description": "Welcome to the WeatherStar 4000+ project page!", "description": "Welcome to the WeatherStar 4000+ project page!",
"main": "index.mjs", "main": "index.mjs",
"type": "module", "type": "module",

View File

@@ -231,7 +231,7 @@ class CurrentWeather extends WeatherDisplay {
this.setAutoReload(); this.setAutoReload();
if (stillWaiting) this.stillWaitingCallbacks.push(stillWaiting); if (stillWaiting) this.stillWaitingCallbacks.push(stillWaiting);
return new Promise((resolve) => { return new Promise((resolve) => {
if (this.data) resolve(this.data); if (this.data) resolve({ data: this.data, parameters: this.weatherParameters });
// data not available, put it into the data callback queue // data not available, put it into the data callback queue
this.getDataCallbacks.push(() => resolve(this.data)); this.getDataCallbacks.push(() => resolve(this.data));
}); });

View File

@@ -84,7 +84,7 @@ const incrementInterval = (force) => {
const drawScreen = async () => { const drawScreen = async () => {
// get the conditions // get the conditions
const data = await getCurrentWeather(); const { data, parameters } = await getCurrentWeather();
// create a data object (empty if no valid current weather conditions) // create a data object (empty if no valid current weather conditions)
const scrollData = data || {}; const scrollData = data || {};
@@ -100,7 +100,7 @@ const drawScreen = async () => {
// if we have no current weather and no hazards, there's nothing to display // if we have no current weather and no hazards, there's nothing to display
if (!data && (!scrollData.hazards || scrollData.hazards.length === 0)) return; if (!data && (!scrollData.hazards || scrollData.hazards.length === 0)) return;
const thisScreen = workingScreens[screenIndex](scrollData); const thisScreen = workingScreens[screenIndex](scrollData, parameters);
// update classes on the scroll area // update classes on the scroll area
mainScroll.classList.forEach((cls) => { if (cls !== 'scroll') mainScroll.classList.remove(cls); }); mainScroll.classList.forEach((cls) => { if (cls !== 'scroll') mainScroll.classList.remove(cls); });

View File

@@ -3,7 +3,7 @@
import STATUS from './status.mjs'; import STATUS from './status.mjs';
import { DateTime, Interval, Duration } from '../vendor/auto/luxon.mjs'; import { DateTime, Interval, Duration } from '../vendor/auto/luxon.mjs';
import { safeJson } from './utils/fetch.mjs'; import { safeJson } from './utils/fetch.mjs';
import { temperature as temperatureUnit, distanceKilometers } from './utils/units.mjs'; import { temperature as temperatureUnit, windSpeed as windUnit } from './utils/units.mjs';
import { getHourlyIcon } from './icons.mjs'; import { getHourlyIcon } from './icons.mjs';
import { directionToNSEW } from './utils/calc.mjs'; import { directionToNSEW } from './utils/calc.mjs';
import WeatherDisplay from './weatherdisplay.mjs'; import WeatherDisplay from './weatherdisplay.mjs';
@@ -191,7 +191,7 @@ class Hourly extends WeatherDisplay {
const parseForecast = async (data) => { const parseForecast = async (data) => {
// get unit converters // get unit converters
const temperatureConverter = temperatureUnit(); const temperatureConverter = temperatureUnit();
const distanceConverter = distanceKilometers(); const windConverter = windUnit();
// parse data // parse data
const temperature = expand(data.temperature.values); const temperature = expand(data.temperature.values);
@@ -210,8 +210,8 @@ const parseForecast = async (data) => {
temperature: temperatureConverter(temperature[idx]), temperature: temperatureConverter(temperature[idx]),
temperatureUnit: temperatureConverter.units, temperatureUnit: temperatureConverter.units,
apparentTemperature: temperatureConverter(apparentTemperature[idx]), apparentTemperature: temperatureConverter(apparentTemperature[idx]),
windSpeed: distanceConverter(windSpeed[idx]), windSpeed: windConverter(windSpeed[idx]),
windUnit: distanceConverter.units, windUnit: windConverter.units,
windDirection: directionToNSEW(windDirection[idx]), windDirection: directionToNSEW(windDirection[idx]),
probabilityOfPrecipitation: probabilityOfPrecipitation[idx], probabilityOfPrecipitation: probabilityOfPrecipitation[idx],
skyCover: skyCover[idx], skyCover: skyCover[idx],

View File

@@ -109,6 +109,7 @@ const getWeather = async (latLon, haveDataCallback) => {
weatherParameters.forecast = point.properties.forecast; weatherParameters.forecast = point.properties.forecast;
weatherParameters.forecastGridData = point.properties.forecastGridData; weatherParameters.forecastGridData = point.properties.forecastGridData;
weatherParameters.stations = stations.features; weatherParameters.stations = stations.features;
weatherParameters.relativeLocation = point.properties.relativeLocation.properties;
// update the main process for display purposes // update the main process for display purposes
populateWeatherParameters(weatherParameters, point.properties); populateWeatherParameters(weatherParameters, point.properties);