[RELEASE] Weather-Display With OWM-Alerts Forecast Driver

Still getting this:
2025-02-10 05:31:44.259 PM

error

java.lang.NullPointerException: Cannot invoke method toBigDecimal() on null object on line 769 (method pollOWMHandler)

Enable ext logging:

Summary

dev:152025-02-10 05:38:43.407 PM

error

java.lang.NullPointerException: Cannot invoke method toBigDecimal() on null object on line 769 (method pollOWMHandler)

dev:152025-02-10 05:38:43.273 PM

info

Weather-Display Driver - INFO: getCondCode Inputs: 600, true; Result: flurries

dev:152025-02-10 05:38:43.269 PM

info

Weather-Display Driver - INFO: getCondCode Inputs: 804, false; Result: nt_cloudy

dev:152025-02-10 05:38:43.264 PM

info

Weather-Display Driver - INFO: OpenWeatherMap Data: [current:[sunrise:1739193438, temp:12.83, visibility:2464, uvi:0, pressure:1035, clouds:100, feels_like:4.55, wind_gust:11.99, dt:1739230722, wind_deg:319, dew_point:9.1, sunset:1739230363, weather:[[icon:04n, description:overcast clouds, main:Clouds, id:804]], humidity:83, wind_speed:5.01], timezone:America/Chicago, timezone_offset:-21600, daily:[[moonset:1739191020, summary:Expect a day of partly cloudy with snow, sunrise:1739193438, temp:[min:2.16, max:15.04, eve:12.83, night:6.67, day:13.06, morn:2.77], moon_phase:0.44, uvi:1.82, moonrise:1739222880, pressure:1036, clouds:40, feels_like:[eve:0.64, night:-5.93, day:1.08, morn:-9.69], wind_gust:25.5, dt:1739210400, pop:0.33, wind_deg:293, dew_point:4.71, snow:0.11, sunset:1739230363, weather:[[icon:13d, description:light snow, main:Snow, id:600]], humidity:73, wind_speed:12.01], [moonset:1739279340, summary:There will be partly cloudy today, sunrise:1739279755, temp:[min:-6.11, max:4.75, eve:2.35, night:2.37, day:0.86, morn:-5.21], moon_phase:0.47, uvi:2.17, moonrise:1739313660, pressure:1035, clouds:84, feels_like:[eve:-6.52, night:2.37, day:-11.4, morn:-17.81], wind_gust:19.46, dt:1739296800, pop:0, wind_deg:324, dew_point:-11.63, sunset:1739316848, weather:[[icon:04d, description:broken clouds, main:Clouds, id:803]], humidity:64, wind_speed:11.52], [moonset:1739367240, summary:There will be partly cloudy today, sunrise:1739366071, temp:[min:2.43, max:10.98, eve:9.14, night:4.98, day:8.02, morn:2.79], moon_phase:0.5, uvi:1.62, moonrise:1739404320, pressure:1026, clouds:100, feels_like:[eve:-0.67, night:-5.13, day:-0.8, morn:-4.47], wind_gust:14.47, dt:1739383200, pop:0, wind_deg:351, dew_point:-2.87, sunset:1739403332, weather:[[icon:04d, description:overcast clouds, main:Clouds, id:804]], humidity:66, wind_speed:7.4], [moonset:1739454840, summary:There will be partly cloudy until morning, then clearing, sunrise:1739452385, temp:[min:-3.84, max:12.7, eve:7.32, night:10.18, day:6.89, morn:-3.12], moon_phase:0.54, uvi:2.35, moonrise:1739494740, pressure:1030, clouds:6, feels_like:[eve:-3.14, night:-2.42, day:-5.71, morn:-15.72], wind_gust:32.82, dt:1739469600, pop:0, wind_deg:192, dew_point:-4.81, sunset:1739489816, weather:[[icon:01d, description:clear sky, main:Clear, id:800]], humidity:64, wind_speed:12.19], [moonset:1739542260, summary:Expect a day of partly cloudy with snow, sunrise:1739538698, temp:[min:12.54, max:22.93, eve:22.23, night:20.64, day:22.93, morn:13.78], moon_phase:0.57, uvi:2.06, moonrise:1739585040, pressure:1023, clouds:100, feels_like:[eve:12.07, night:12.51, day:10.33, morn:1.18], wind_gust:37.31, dt:1739556000, pop:1, wind_deg:186, dew_point:11.48, snow:4.26, sunset:1739576299, weather:[[icon:13d, description:snow, main:Snow, id:601]], humidity:62, wind_speed:15.9], [moonset:1739629620, summary:Expect a day of partly cloudy with snow, sunrise:1739625010, temp:[min:6.75, max:20.32, eve:11.21, night:6.75, day:18.93, morn:18.41], moon_phase:0.6, uvi:3, moonrise:1739675280, pressure:1019, clouds:100, feels_like:[eve:-1.39, night:-5.85, day:6.33, morn:6.19], wind_gust:27.04, dt:1739642400, pop:1, wind_deg:13, dew_point:13.89, snow:2.06, sunset:1739662783, weather:[[icon:13d, description:light snow, main:Snow, id:600]], humidity:83, wind_speed:16.06], [moonset:1739717040, summary:Expect a day of partly cloudy with clear spells, sunrise:1739711321, temp:[min:-4.43, max:6.62, eve:-0.71, night:-3.24, day:3.6, morn:-4.43], moon_phase:0.63, uvi:3, moonrise:1739765460, pressure:1029, clouds:49, feels_like:[eve:-12.39, night:-15.84, day:-9, morn:-17.03], wind_gust:23.62, dt:1739728800, pop:0, wind_deg:302, dew_point:-6.05, sunset:1739749266, weather:[[icon:03d, description:scattered clouds, main:Clouds, id:802]], humidity:72, wind_speed:12.84], [moonset:1739804460, summary:You can expect partly cloudy in the morning, with snow in the afternoon, sunrise:1739797630, temp:[min:-9.51, max:11.39, eve:9.63, night:7.79, day:7.25, morn:-9.51], moon_phase:0.66, uvi:3, moonrise:1739855760, pressure:1027, clouds:67, feels_like:[eve:2.93, night:1.15, day:-0.98, morn:-20.52], wind_gust:17.56, dt:1739815200, pop:0.23, wind_deg:282, dew_point:-1.91, snow:0.42, sunset:1739835749, weather:[[icon:13d, description:light snow, main:Snow, id:600]], humidity:72, wind_speed:6.6]], lon:-92.675, lat:44.302]

dev:152025-02-10 05:38:43.142 PM

info

Weather-Display Driver - INFO: Weather-Display Data: Status: 200

dev:152025-02-10 05:38:42.660 PM

info

Weather-Display Driver - INFO: Poll OpenWeatherMap.org: [uri:https://api.openweathermap.org/data/3.0/onecall?lat=44.302049&lon=-92.674974&exclude=minutely,hourly&mode=json&units=imperial&appid=dfc428b880e32e011c4de48185f7e389, timeout:20]

dev:152025-02-10 05:38:42.653 PM

info

Weather-Display Driver - INFO: Polling Weather-Display: [uri:https://curtiszmweather.com/weatherapi/src/everything.php, timeout:20]

dev:152025-02-10 05:38:37.464 PM

info

Weather-Display Driver - INFO: myStationPoll: 5Minutes

dev:152025-02-10 05:38:37.407 PM

info

Weather-Display Driver - INFO: pollInterval: 3Hours

dev:152025-02-10 05:38:33.095 PM

info

Weather-Display Driver - INFO: weather.gov Data: [features:, type:FeatureCollection, title:Current watches, warnings, and advisories for 44.302049 N, 92.674974 W, @context:[@version:1.1], updated:2025-02-08T20:54:42+00:00]

dev:152025-02-10 05:38:33.090 PM

info

Weather-Display Driver - INFO: Polling weather.gov

dev:152025-02-10 05:38:32.728 PM

info

Weather-Display Driver - INFO: OWM Location City Code: 5053812

dev:152025-02-10 05:38:32.725 PM

info

Weather-Display Driver - INFO: OpenWeatherMap Location Data: [count:1, cod:200, message:accurate, list:[[dt:1739229012, rain:null, coord:[lon:-92.6691, lat:44.2941], snow:null, name:Zumbrota, weather:[[icon:04d, description:overcast clouds, main:Clouds, id:804]], main:[temp:263.26, temp_min:262.04, grnd_level:990, humidity:83, pressure:1034, sea_level:1034, feels_like:258.79, temp_max:264.79], id:5053812, clouds:[all:100], sys:[country:US], wind:[deg:253, speed:2.24]]]]

dev:152025-02-10 05:38:32.712 PM

info

Weather-Display Driver - INFO: Polling OpenWeatherMap.org Location

dev:152025-02-10 05:38:32.599 PM

info

You are using the current version of this driver

dev:152025-02-10 05:38:32.300 PM

info

Weather-Display Driver - INFO: Poll api.weather.gov/alerts/active: [uri:https://api.weather.gov/alerts/active?status=actual&message_type=alert,update&point=44.302049,-92.674974, requestContentType:application/json, contentType:application/json, timeout:20]

dev:152025-02-10 05:38:32.294 PM

info

Weather-Display Driver - INFO: Poll OpenWeatherMap.org Location: [uri:https://api.openweathermap.org/data/2.5/find?lat=44.302049&lon=-92.674974&cnt=1&appid=dfc428b880e32e011c4de48185f7e389, timeout:20]

dev:152025-02-10 05:38:32.208 PM

info

Weather-Display Driver - INFO: running updated()

Your data return from Weather-Display does not look like it is complete? It is missing a lot of data that my station is returning. The error you are getting is because it is looking for 'rainfall' in that return and that is nowhere in your JSON data return. My JSON return data starts with:

[endpoint:[copyright:Copyright © 2016 Wayne D Grant (www.waynedgrant.com), github_project:https://github.com/waynedgrant/json-webservice-wdlive, version:1.8,

Yours does not? I would start by going back and making sure your data pull from Weather-Display (using Wayne D Grant's code, instructions are in one of the first posts in this thread) is working without errors.

UPDATED: V 0.6.5

  • Replaced small icons with unicode characters in dashboard tiles.

This significantly reduced the character size of the tiles allowing the direct reference to the icon repository (instead of the TinyURL). Using a direct reference allows hotlinking to the Github location for the icons that are still used. You can replace the TinyURL with the direct reference "https://raw.githubusercontent.com/HubitatCommunity/WeatherIcons/master/" for the Alternative Icon location in the driver.

Thanks to @swade and @dJOS for the solution to this.

I finally got around to giving folk a choice in icon styles. :slight_smile:

UPDATED: 0.6.6. 03/19/2026

MAJOR RE-WRITE. UPDATED TO 0.7.0. 08/28/2026
If AI coding scares you or makes you uncomfortable, don't update to this driver now or in the future.. Claude.ai did most of the work to implement the changes below. I have run it for a little while it it works for me with no errors or warnings. Your mileage may vary.

As most of you know I had been maintaining two weather drivers. One for those without a Personal Weather Station (PWS) and this one for those with a PWS and use Weather-Display software. Once @jshimota released his updated OpenWeatherMap Multi-API Weather Driver I deprecated my OWM driver as I do not intend to maintain that going forward. I then asked Claude.ai to take @jshimota's new OpenWeatherMap Multi-API Weather Driver and my Weather-Display driver and merge them. The summary of the changes implemented is here:

What's New for v0.7.0

This is a code-style modernization of Weather-Display With OWM-Alerts Forecast Driver, bringing it in line with the conventions of the community's newer OpenWeatherMap Multi-API Weather Driver, while keeping this driver's own data sources (your PWS via Weather-Display, OpenWeatherMap forecast/alerts, NWS alerts).

Bottom line for anyone transitioning
No dashboards, rules, or apps need to change. Every existing attribute name, preference name, and dashboard tile (myTile, threedayfcstTile, alertTile, all your wind_/forecast/cloud*/etc. attributes) is unchanged. Update the driver code, save, and it keeps working exactly as before — new features are all opt-in.

Bugs fixed (you may notice slightly different behavior — for the better)

  • betwixt attribute was never actually populated (a "slice of day" value was computed but never stored) — now shows real values if you have that optional attribute enabled.
  • updateLux() referenced an undefined variable in its log line, which could throw on every poll.
  • "Manual Poll Only" for the station/forecast interval dropdowns silently fell back to a 3-hour schedule instead of disabling scheduled polling — now works as labeled.
  • schedule/runIn/runEvery10Minutes/unschedule calls now pass handler names as quoted strings — the old unquoted form could trigger a Hubitat platform Ambiguous method overloading error that aborted scheduling.
  • rainToday null-safety fix in the OpenWeatherMap forecast handler — could throw a NullPointerException on early polls (this one existed in your original driver too).
  • JSON parsing is now crash-proof across all 5 handlers (Weather-Display, OpenWeatherMap current, OpenWeatherMap location lookup, NWS alerts, version-check) — a malformed/truncated response now logs an error and skips that poll instead of throwing and leaving tiles stale.
  • A preference-default bug: the per-attribute "Publish" checkboxes read attribute.default, but the underlying data uses the key defa — silently resolved to null (harmless today since everything already defaulted off, but would've silently broken if any toggle were ever meant to default on).
  • API key is now redacted from logs by default (new toggle to re-expose it if you want it for debugging).

New optional features (all off by default — enable via "Display All Optional Attributes")

  • Sun/moon altitude & azimuth — currentSunAltitude/currentSunAzimuth/currentMoonAltitude/currentMoonAzimuth (+ text variants).
  • Per-day moon phase detail sourced from OpenWeatherMap — today/tom/tda MoonPhase (value, text, PNG image, SVG image, emoji) — plus a new currentMoonPhaseTile dashboard tile.
  • Wind direction image/emoji — windDirImageUrl/windDirectionImage/windDirectionEmojiIcon, alongside the existing text-only wind_direction/wind_cardinal.
  • Tile debug badge — optional character-count overlay on tiles, for troubleshooting tile-length issues.
  • New commands: clearAllDriverStates, clearAllAttributes, clearAllSchedules.
  • Independent logging levels — Info/Error/Warn/Debug/Trace toggles instead of one "Extended Logging" switch (Debug auto-disables after 30 minutes, matching the old behavior's spirit).

Under the hood (for the curious — no action needed)

  • Replaced a custom static, cross-device data store with Hubitat's native per-device state map.
  • Consolidated two duplicated wind-direction lookup tables into one shared helper.
  • Consolidated two independent solar-position algorithms into one — the existing altitude/azimuth attributes are now computed by the same algorithm that feeds the new sun-angle attributes (previously two separate implementations that could disagree by fractions of a degree). Values will shift very slightly (sub-degree) from before — cosmetic only.
  • Removed confirmed-dead code: getstdImgName(), getcondText(), getThisCopyright(), and unused fields in the icon lookup table.
  • Extracted dashboard-tile HTML building into a single generateTiles() function.
  • Replaced the old publish/attribute-hide mechanism with a version that also skips redundant events when nothing changed.

As with any changes .... I am sure something was broken that I didn't test. Let me know what those may be and I'll ask Claude.ai to look into it. If AI coding scares you or makes you uncomfortable, don't update this to driver now or in the future.

Thanks.

Wow. Nice! you got busy telling Claude what to do. :slight_smile:
Your code looks gorgeous - at least Gemini and ChatGPT says so.

Tongue in cheek!

UPDATE V0.7.1. 08/29/2026. Bug Fixes

  1. LUTable converted from a linearly-scanned List<Map> (56 entries) to a Map<Integer,Map> keyed by condition id — icon/condition lookups (getImgName, getCondCode, the lux-estimation lookup) are now O(1) instead of O(n).
  2. Redundant string→BigDecimal re-parsing eliminated in generateTiles() and PostPoll() — values like pressure, wind, rainToday, forecast highs/lows, and precip amounts were being parsed from state two or more times per poll for the same tile/attribute build; each is now parsed once into a local variable and reused.
  3. Fixed a tile icon vs. text mismatch: state.imgName0 (the icon myTile/threedayfcstTile actually display) was only ever set from the OpenWeatherMap poll — Weather-Display's own poll updated condition_text immediately but never touched the tile icon, so a tile could show a stale/forecast-derived icon (e.g. clouds) right next to fresh, accurate text (e.g. "Clear Night"). imgName0 now updates from Weather-Display's own condition whenever WD polls, not just when OpenWeatherMap happens to poll.
  4. Fixed a related broken-image bug: the Weather-Display icon path was missing its base URL prefix entirely, so condition_icon, condition_iconWithText, and condition_icon_url would render as broken images whenever Weather-Display was the primary source. Now correctly prefixed with the configured icon location, matching the OpenWeatherMap path's behavior.

Hi Matthew, I just updated to the latest version. I have been using your Weather-Display With OWM for several years. I wanted to inquire specifically about the Illuminance value. I currently have a Tempest weather station configured in Weather Display. When I evaluate the attributes I can see they all come across fine, except for Illuminance. I have the setting "Illuminance from Weather-Display?" toggled on, but the value shown is much different than what it should be. Is it perhaps using a calculated value or a value from OpenWeatherMap? Example: showing as 3075 instead of 36358 as reported by Tempest. Worth noting that other Tempest values such as UV Index, Solar Radiation are correct.

Description on what the driver does. It has been this way for years so I do not intend to alter it now. Feel free to alter the code to your liking.