{"id":955,"date":"2025-11-20T14:17:22","date_gmt":"2025-11-20T19:17:22","guid":{"rendered":"https:\/\/scootercam.net\/?p=955"},"modified":"2025-11-20T14:17:26","modified_gmt":"2025-11-20T19:17:26","slug":"tempest-weather-plugin","status":"publish","type":"post","link":"https:\/\/scootercam.net\/blog\/tempest-weather-plugin\/","title":{"rendered":"Tempest Weather Plugin"},"content":{"rendered":"\n<p>Scootercam Tempest Weather Plugin v4.0<\/p>\n\n\n\n<p>A comprehensive WordPress plugin for displaying weather data from your WeatherFlow Tempest weather station.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udccb Table of Contents<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/claude.ai\/chat\/7f4d3f82-c8be-477b-a502-10b07ef51032#installation\">Installation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/claude.ai\/chat\/7f4d3f82-c8be-477b-a502-10b07ef51032#configuration\">Configuration<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/claude.ai\/chat\/7f4d3f82-c8be-477b-a502-10b07ef51032#available-shortcodes\">Available Shortcodes<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/claude.ai\/chat\/7f4d3f82-c8be-477b-a502-10b07ef51032#features\">Features<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/claude.ai\/chat\/7f4d3f82-c8be-477b-a502-10b07ef51032#cache-management\">Cache Management<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/claude.ai\/chat\/7f4d3f82-c8be-477b-a502-10b07ef51032#troubleshooting\">Troubleshooting<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/claude.ai\/chat\/7f4d3f82-c8be-477b-a502-10b07ef51032#changelog\">Changelog<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 Installation<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Upload <code>scootercam-tempest-weather.php<\/code> to <code>\/wp-content\/plugins\/scootercam-tempest-weather\/<\/code><\/li>\n\n\n\n<li>Activate the plugin through the &#8216;Plugins&#8217; menu in WordPress<\/li>\n\n\n\n<li>Go to <strong>Settings \u2192 Tempest Weather<\/strong> to configure<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2699\ufe0f Configuration<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Getting Your API Credentials<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Visit <a href=\"https:\/\/tempestwx.com\/settings\/tokens\">tempestwx.com\/settings\/tokens<\/a><\/li>\n\n\n\n<li>Click &#8220;Create Token&#8221; to generate your Personal Access Token<\/li>\n\n\n\n<li>Copy the token<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Finding Your Station ID<\/h3>\n\n\n\n<p>Your Station ID is in your Tempest dashboard URL:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;tempestwx.com\/station\/198109\n                                ^^^^^^ This is your Station ID\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Finding Your Device ID<\/h3>\n\n\n\n<p><strong>IMPORTANT:<\/strong> Your Device ID is NOT the same as your serial number!<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u274c Serial Number: ST-00194473 (printed on device)<\/li>\n\n\n\n<li>\u2705 Device ID: 461557 (internal API ID)<\/li>\n<\/ul>\n\n\n\n<p><strong>How to Find Your Device ID:<\/strong><\/p>\n\n\n\n<p><strong>Method 1 &#8211; Use the Diagnostic Tool:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Download <code>tempest-test-198109.php<\/code> (included with plugin)<\/li>\n\n\n\n<li>Upload to your WordPress root directory<\/li>\n\n\n\n<li>Visit <code>https:\/\/yoursite.com\/tempest-test-198109.php<\/code><\/li>\n\n\n\n<li>Find your Device ID in the results<\/li>\n<\/ol>\n\n\n\n<p><strong>Method 2 &#8211; API Endpoint:<\/strong> Visit this URL (replace YOUR_STATION_ID and YOUR_TOKEN):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;swd.weatherflow.com\/swd\/rest\/stations\/YOUR_STATION_ID?token=YOUR_TOKEN\n<\/code><\/pre>\n\n\n\n<p>Look for the &#8220;device_id&#8221; field in the JSON response.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">WordPress Settings<\/h3>\n\n\n\n<p><strong>Settings \u2192 Tempest Weather:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>API Token:<\/strong> Your Personal Access Token<\/li>\n\n\n\n<li><strong>Station ID:<\/strong> Your numeric station ID (e.g., 198109)<\/li>\n\n\n\n<li><strong>Device ID:<\/strong> Your numeric device ID (e.g., 461557)<\/li>\n\n\n\n<li><strong>Cache Settings:<\/strong> Configure how long data is cached (see Cache Management)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcca Available Shortcodes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Display Shortcodes (Cards &amp; Tables)<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Current Conditions<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;scootercam_tempest_current]\n<\/code><\/pre>\n\n\n\n<p>Displays current weather conditions in a classic table format.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;scootercam_tempest_current_card]\n<\/code><\/pre>\n\n\n\n<p>Displays current conditions in a modern card layout.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Forecasts<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;scootercam_tempest_daily_forecast]\n<\/code><\/pre>\n\n\n\n<p>Displays 10-day forecast in table format.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;scootercam_tempest_hourly_forecast]\n<\/code><\/pre>\n\n\n\n<p>Displays 24-hour forecast in table format.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Chart Shortcodes<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">24-Hour Chart<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;scootercam_tempest_chart_24hr]<\/code><\/pre>\n\n\n<p>[scootercam_tempest_chart_24hr metrics=&#8221;temp,wind,pressure&#8221; height=&#8221;400&#8243;]<\/p>\n\n\n\n<p><strong>Attributes:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>metrics<\/code> &#8211; Comma-separated list: temp, wind, pressure, humidity, rain (default: temp,wind)<\/li>\n\n\n\n<li><code>height<\/code> &#8211; Chart height in pixels (default: 400)<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">7-Day Chart<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;scootercam_tempest_chart_7day]<\/code><\/pre>\n\n\n<p>[scootercam_tempest_chart_7day metrics=&#8221;temp,rain&#8221; height=&#8221;400&#8243;]<\/p>\n\n\n\n<p><strong>Attributes:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>metrics<\/code> &#8211; Available: temp, rain, wind (default: temp,rain,wind)<\/li>\n\n\n\n<li><code>height<\/code> &#8211; Chart height in pixels (default: 400)<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Custom Time Range Chart<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;scootercam_tempest_chart_custom hours=\"12\" metrics=\"temp\" height=\"300\" title=\"Last 12 Hours\"]\n<\/code><\/pre>\n\n\n\n<p><strong>Attributes:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>hours<\/code> &#8211; Number of hours to display (default: 24)<\/li>\n\n\n\n<li><code>metrics<\/code> &#8211; Same as 24hr chart (default: temp)<\/li>\n\n\n\n<li><code>height<\/code> &#8211; Chart height in pixels (default: 400)<\/li>\n\n\n\n<li><code>title<\/code> &#8211; Custom chart title (default: blank)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Statistics Shortcodes<\/h3>\n\n\n\n<p>Display high\/low\/max values for a time period with timestamps.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;scootercam_tempest_stats_today]\n<\/code><\/pre>\n\n\n\n<p>Today&#8217;s statistics (midnight to now in your timezone).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;scootercam_tempest_stats_yesterday]\n<\/code><\/pre>\n\n\n\n<p>Yesterday&#8217;s statistics.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;scootercam_tempest_stats_week]\n<\/code><\/pre>\n\n\n\n<p>This week&#8217;s statistics (Monday to now).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;scootercam_tempest_stats_month]\n<\/code><\/pre>\n\n\n\n<p>This month&#8217;s statistics.<\/p>\n\n\n\n<p><strong>Output includes:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>High\/Low Temperature (with time occurred)<\/li>\n\n\n\n<li>Max Wind Speed (with time)<\/li>\n\n\n\n<li>Total Rainfall<\/li>\n\n\n\n<li>High\/Low Pressure (with time)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Records Shortcodes<\/h3>\n\n\n\n<p>Display all-time or monthly record values with dates.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;scootercam_tempest_records_all]\n<\/code><\/pre>\n\n\n\n<p>All-time records (last 90 days of data).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;scootercam_tempest_records_month]\n<\/code><\/pre>\n\n\n\n<p>This month&#8217;s records.<\/p>\n\n\n\n<p><strong>Output includes:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Highest\/Lowest Temperature (with date)<\/li>\n\n\n\n<li>Max Wind Speed (with date)<\/li>\n\n\n\n<li>Max Daily Rainfall (with date)<\/li>\n\n\n\n<li>Highest\/Lowest Pressure (with date)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Individual Data Shortcodes<\/h3>\n\n\n\n<p>Display single data points inline with text.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;tempest-temp]<\/code><\/pre>\n\n\n<p>[tempest-temp units=&#8221;f&#8221; decimals=&#8221;1&#8243;]<\/p>\n\n\n\n<p>Current temperature (default: Fahrenheit, 1 decimal).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;tempest-humidity]<\/code><\/pre>\n\n\n<p>[tempest-humidity decimals=&#8221;0&#8243;]<\/p>\n\n\n\n<p>Current humidity percentage.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;tempest-pressure]<\/code><\/pre>\n\n\n<p>[tempest-pressure units=&#8221;inhg&#8221; decimals=&#8221;2&#8243;]<\/p>\n\n\n\n<p>Current barometric pressure (units: inhg or mb).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;tempest-wind-speed]<\/code><\/pre>\n\n\n<p>[tempest-wind-speed units=&#8221;mph&#8221; decimals=&#8221;1&#8243;]<\/p>\n\n\n\n<p>Current wind speed (units: mph, kph, or mps).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;tempest-wind-gust]\n<\/code><\/pre>\n\n\n\n<p>Current wind gust speed.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;tempest-wind-direction]<\/code><\/pre>\n\n\n<p>[tempest-wind-direction format=&#8221;cardinal&#8221;]<\/p>\n\n\n\n<p>Wind direction (format: degrees or cardinal like &#8220;NW&#8221;).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;tempest-rain-rate]<\/code><\/pre>\n\n\n<p>[tempest-rain-rate units=&#8221;in&#8221; decimals=&#8221;2&#8243;]<\/p>\n\n\n\n<p>Current rain rate (units: in or mm).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;tempest-rain-today]\n<\/code><\/pre>\n\n\n\n<p>Total rainfall today.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;tempest-uv]\n<\/code><\/pre>\n\n\n\n<p>Current UV index.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;tempest-solar]\n<\/code><\/pre>\n\n\n\n<p>Current solar radiation (W\/m\u00b2).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;tempest-lightning]<\/code><\/pre>\n\n\n<p>[tempest-lightning units=&#8221;mi&#8221;]<\/p>\n\n\n\n<p>Last lightning strike distance (units: mi or km).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;tempest-feels-like]<\/code><\/pre>\n\n\n<p>[tempest-feels-like units=&#8221;f&#8221; decimals=&#8221;1&#8243;]<\/p>\n\n\n\n<p>Feels-like temperature.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;tempest-dewpoint]<\/code><\/pre>\n\n\n<p>[tempest-dewpoint units=&#8221;f&#8221; decimals=&#8221;1&#8243;]<\/p>\n\n\n\n<p>Dew point temperature.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;tempest-data field=\"field_name\"]\n<\/code><\/pre>\n\n\n\n<p>Any raw API field value.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Trend Shortcode (NEW!)<\/h3>\n\n\n\n<p>Display trend indicators showing whether values are rising, falling, or steady.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;tempest-trend field=\"temp_f\" hours=\"3\" format=\"icon\"]\n<\/code><\/pre>\n\n\n\n<p><strong>Attributes:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>field<\/code> &#8211; Available: temp_f, temp_c, humidity, pressure, wind, rain (default: temp_f)<\/li>\n\n\n\n<li><code>hours<\/code> &#8211; Time period to compare (default: 3)<\/li>\n\n\n\n<li><code>format<\/code> &#8211; Output format:\n<ul class=\"wp-block-list\">\n<li><code>icon<\/code> &#8211; Just arrow: \u2191 \u2193 \u2192 (default)<\/li>\n\n\n\n<li><code>text<\/code> &#8211; Just text: Rising, Falling, Steady<\/li>\n\n\n\n<li><code>value<\/code> &#8211; Just change amount: +2.5<\/li>\n\n\n\n<li><code>all<\/code> &#8211; Everything: \u2191 Rising (+2.5 over 3h)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Temperature: &#91;tempest-temp] &#91;tempest-trend field=\"temp_f\" hours=\"3\"]\nOutput: Temperature: 42.5\u00b0F \u2191<\/code><\/pre>\n\n\n<p>[tempest-trend field=&#8221;temp_f&#8221; hours=&#8221;6&#8243; format=&#8221;all&#8221;]<\/p>\n\n\n\n<p>Output: \u2191 Rising (+2.5 over 6h)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Example Usage<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;h2&gt;Current Conditions&lt;\/h2&gt;<\/code><\/pre>\n\n\n<p>[scootercam_tempest_current_card]<\/p>\n\n\n\n<p>&lt;p&gt;The temperature is currently [tempest-temp] [tempest-trend] with winds at [tempest-wind-speed units=&#8221;mph&#8221; decimals=&#8221;0&#8243;] mph from the [tempest-wind-direction format=&#8221;cardinal&#8221;].&lt;\/p&gt; &lt;h2&gt;Today&#8217;s Weather&lt;\/h2&gt;<\/p>\n\n\n<p>[scootercam_tempest_stats_today]<\/p>\n\n\n\n<p>&lt;h2&gt;Last 24 Hours&lt;\/h2&gt;<\/p>\n\n\n<p>[scootercam_tempest_chart_24hr metrics=&#8221;temp,wind,pressure&#8221; height=&#8221;400&#8243;]<\/p>\n\n\n\n<p>&lt;h2&gt;10-Day Forecast&lt;\/h2&gt;<\/p>\n\n\n<p>[scootercam_tempest_daily_forecast]<\/p>\n\n\n\n<p>&lt;h2&gt;All-Time Records&lt;\/h2&gt;<\/p>\n\n\n<p>[scootercam_tempest_records_all]<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udfaf Features<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Smart Caching<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Configurable cache durations for different data types<\/li>\n\n\n\n<li>Current conditions: 5 minutes (default)<\/li>\n\n\n\n<li>Historical data: 15 minutes (default)<\/li>\n\n\n\n<li>Forecasts: 30 minutes (default)<\/li>\n\n\n\n<li>Manual cache clearing available<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Timezone Aware<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>All times display in your WordPress timezone setting<\/li>\n\n\n\n<li>Statistics periods calculated correctly for your timezone<\/li>\n\n\n\n<li>No more UTC confusion!<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Responsive Design<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Charts automatically resize for mobile<\/li>\n\n\n\n<li>Grid layouts adapt to screen size<\/li>\n\n\n\n<li>Touch-friendly interfaces<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Auto-Refresh<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Current conditions cards refresh every 5 minutes via JavaScript<\/li>\n\n\n\n<li>No page reload needed<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Debug Mode<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Admins see detailed debug information<\/li>\n\n\n\n<li>Shows observation counts, time ranges, cache status<\/li>\n\n\n\n<li>Helps troubleshoot issues<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Cache Management<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Cache Durations<\/h3>\n\n\n\n<p>Configure in <strong>Settings \u2192 Tempest Weather<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Current Conditions Cache:<\/strong> How long to cache live weather data (default: 300 seconds = 5 minutes)<\/li>\n\n\n\n<li><strong>Historical Data Cache:<\/strong> How long to cache charts\/stats (default: 900 seconds = 15 minutes)<\/li>\n\n\n\n<li><strong>Forecast Cache:<\/strong> How long to cache forecasts (default: 1800 seconds = 30 minutes)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Best Practices<\/h3>\n\n\n\n<p><strong>For public websites with moderate traffic:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Current: 5 minutes (fresh enough for visitors)<\/li>\n\n\n\n<li>Historical: 15-30 minutes (historical data doesn&#8217;t change)<\/li>\n\n\n\n<li>Forecast: 30 minutes (forecasts update hourly)<\/li>\n<\/ul>\n\n\n\n<p><strong>For low-traffic sites:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Can increase all values to reduce API calls<\/li>\n\n\n\n<li>Historical data can cache for 1+ hours<\/li>\n<\/ul>\n\n\n\n<p><strong>For real-time monitoring:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Reduce current conditions to 2-3 minutes<\/li>\n\n\n\n<li>Keep historical\/forecast longer<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Manual Cache Clear<\/h3>\n\n\n\n<p><strong>Settings \u2192 Tempest Weather \u2192 Cache Management<\/strong><\/p>\n\n\n\n<p>Click &#8220;Clear All Cached Data&#8221; button to immediately clear all cached weather data. Useful when:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Testing changes<\/li>\n\n\n\n<li>Data seems stale or incorrect<\/li>\n\n\n\n<li>After changing API credentials<\/li>\n\n\n\n<li>Troubleshooting issues<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udc1b Troubleshooting<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Charts Not Displaying<\/h3>\n\n\n\n<p><strong>Symptom:<\/strong> Blank gray area where chart should be<\/p>\n\n\n\n<p><strong>Solutions:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Check browser console (F12) for JavaScript errors<\/li>\n\n\n\n<li>Clear WordPress cache<\/li>\n\n\n\n<li>Hard refresh browser (Ctrl+Shift+R)<\/li>\n\n\n\n<li>Verify Chart.js is loading (check Network tab in browser dev tools)<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Wrong Times Displayed<\/h3>\n\n\n\n<p><strong>Symptom:<\/strong> Times are off by several hours<\/p>\n\n\n\n<p><strong>Solution:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to <strong>Settings \u2192 General \u2192 Timezone<\/strong><\/li>\n\n\n\n<li>Set to your city or manual UTC offset<\/li>\n\n\n\n<li>Clear plugin cache (Settings \u2192 Tempest Weather)<\/li>\n\n\n\n<li>Refresh page<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">&#8220;No Historical Data&#8221; Errors<\/h3>\n\n\n\n<p><strong>Symptoms:<\/strong> Charts or stats show errors<\/p>\n\n\n\n<p><strong>Solutions:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Verify your <strong>Device ID<\/strong> is correct (not serial number!)<\/li>\n\n\n\n<li>Use diagnostic tool to confirm: <code>tempest-test-198109.php<\/code><\/li>\n\n\n\n<li>Ensure station has been online for 24+ hours<\/li>\n\n\n\n<li>Check error log for API errors<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">API Errors (404, 401, etc.)<\/h3>\n\n\n\n<p><strong>Solutions:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>401 Unauthorized:<\/strong> API token is invalid or expired\n<ul class=\"wp-block-list\">\n<li>Generate new token at tempestwx.com\/settings\/tokens<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>404 Not Found:<\/strong> Station ID or Device ID is incorrect\n<ul class=\"wp-block-list\">\n<li>Use diagnostic tool to verify IDs<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Check error log for specific API URLs and responses<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Stats Show Future Times<\/h3>\n\n\n\n<p><strong>Symptom:<\/strong> &#8220;Low temp at 7:00 PM&#8221; but it&#8217;s only 11 AM<\/p>\n\n\n\n<p><strong>Solution:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Clear the plugin cache<\/li>\n\n\n\n<li>This was a timezone issue fixed in v4.0<\/li>\n\n\n\n<li>Make sure you&#8217;re running v4.0 or later<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">High and Low Temps Are Same<\/h3>\n\n\n\n<p><strong>Symptom:<\/strong> High and low show identical values<\/p>\n\n\n\n<p><strong>Solutions:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Verify your Device ID is numeric (e.g., 461557, not ST-00194473)<\/li>\n\n\n\n<li>Check that station has been recording for several hours<\/li>\n\n\n\n<li>Clear cache to force fresh data<\/li>\n\n\n\n<li>Check debug info (visible to admins) for observation count<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcdd Changelog<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">v4.0 (November 2025)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>FIXED:<\/strong> Major timezone issue &#8211; stats periods now correctly calculated in WordPress timezone<\/li>\n\n\n\n<li><strong>FIXED:<\/strong> Times showing in UTC instead of local time<\/li>\n\n\n\n<li><strong>FIXED:<\/strong> &#8220;Today&#8221; starting at wrong time for non-UTC timezones<\/li>\n\n\n\n<li><strong>ADDED:<\/strong> Cache clear button in settings<\/li>\n\n\n\n<li><strong>IMPROVED:<\/strong> Debug output now shows timezone-aware timestamps<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">v3.9 (November 2025)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ADDED:<\/strong> Timestamps to statistics displays (high\/low temps now show when they occurred)<\/li>\n\n\n\n<li><strong>ADDED:<\/strong> Times show as &#8220;3:15 PM&#8221; for today\/yesterday, &#8220;Nov 15, 3:15 PM&#8221; for longer periods<\/li>\n\n\n\n<li><strong>FIXED:<\/strong> All date formatting now uses WordPress timezone (wp_date function)<\/li>\n\n\n\n<li><strong>IMPROVED:<\/strong> Better styling for record dates<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">v3.8 (November 2025)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ADDED:<\/strong> [tempest-trend] shortcode for showing rising\/falling indicators<\/li>\n\n\n\n<li><strong>IMPROVED:<\/strong> Reduced logging &#8211; only errors logged, not successful API calls<\/li>\n\n\n\n<li><strong>IMPROVED:<\/strong> Better stat and record styling with CSS<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">v3.7 (November 2025)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ADDED:<\/strong> CSS styling for records and stats displays<\/li>\n\n\n\n<li><strong>FIXED:<\/strong> Record dates now visible and properly formatted<\/li>\n\n\n\n<li><strong>IMPROVED:<\/strong> Grid layouts for stats and records<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">v3.6 (November 2025)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ADDED:<\/strong> Trend shortcode functionality<\/li>\n\n\n\n<li><strong>IMPROVED:<\/strong> Documentation in admin panel<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">v3.5 (November 2025)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>FIXED:<\/strong> Charts rendering &#8211; fixed &#8220;Canvas exceeds max size&#8221; error<\/li>\n\n\n\n<li><strong>FIXED:<\/strong> Canvas elements properly constrained by height attribute<\/li>\n\n\n\n<li><strong>IMPROVED:<\/strong> Chart.js loads in header for faster initialization<\/li>\n\n\n\n<li><strong>ADDED:<\/strong> Better error messages and debugging for charts<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">v3.4 (November 2025)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ADDED:<\/strong> Configurable cache durations in settings<\/li>\n\n\n\n<li><strong>ADDED:<\/strong> Separate cache settings for current\/historical\/forecast data<\/li>\n\n\n\n<li><strong>IMPROVED:<\/strong> Better cache strategy<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">v3.3 (November 2025)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>FIXED:<\/strong> Historical data now works &#8211; added time_start and time_end parameters to all API calls<\/li>\n\n\n\n<li><strong>FIXED:<\/strong> Stats now show actual high\/low temps instead of same value<\/li>\n\n\n\n<li><strong>FIXED:<\/strong> Charts display full time ranges with hundreds of observations<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">v3.2 (November 2025)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>FIXED:<\/strong> Corrected API endpoint format &#8211; now uses \/observations\/device\/{id}<\/li>\n\n\n\n<li><strong>CLARIFIED:<\/strong> Device ID vs Serial Number in documentation<\/li>\n\n\n\n<li><strong>IMPROVED:<\/strong> Better error messages and setup instructions<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">v3.1 (November 2025)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ADDED:<\/strong> Chart shortcodes (24hr, 7-day, custom)<\/li>\n\n\n\n<li><strong>ADDED:<\/strong> Statistics shortcodes (today, yesterday, week, month)<\/li>\n\n\n\n<li><strong>ADDED:<\/strong> Records tracking (all-time, monthly)<\/li>\n\n\n\n<li><strong>FIXED:<\/strong> API endpoint issues<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">v3.0 (November 2025)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ADDED:<\/strong> Modern card-based current conditions display<\/li>\n\n\n\n<li><strong>IMPROVED:<\/strong> Responsive design<\/li>\n\n\n\n<li><strong>ADDED:<\/strong> Auto-refresh functionality<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">v2.x and earlier<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Basic weather data display<\/li>\n\n\n\n<li>Forecast tables<\/li>\n\n\n\n<li>Individual data shortcodes<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd17 Resources<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>WeatherFlow API Documentation:<\/strong> <a href=\"https:\/\/weatherflow.github.io\/Tempest\/api\/\">weatherflow.github.io\/Tempest<\/a><\/li>\n\n\n\n<li><strong>Your Tempest Dashboard:<\/strong> <a href=\"https:\/\/tempestwx.com\/\">tempestwx.com<\/a><\/li>\n\n\n\n<li><strong>API Token Management:<\/strong> <a href=\"https:\/\/tempestwx.com\/settings\/tokens\">tempestwx.com\/settings\/tokens<\/a><\/li>\n\n\n\n<li><strong>Support:<\/strong> Check WordPress error log for detailed API errors<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcc4 License<\/h2>\n\n\n\n<p>This plugin is provided as-is for use with WeatherFlow Tempest weather stations.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude4f Credits<\/h2>\n\n\n\n<p>Developed for ScooterCam.net weather monitoring system. Uses WeatherFlow Tempest API for data. Charts powered by Chart.js.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Version:<\/strong> 4.0<br><strong>Last Updated:<\/strong> November 20, 2025<br><strong>Requires:<\/strong> WordPress 5.0+, PHP 7.4+<br><strong>Compatible:<\/strong> WeatherFlow Tempest Personal Weather Stations<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Scootercam Tempest Weather Plugin v4.0 A comprehensive WordPress plugin for displaying weather data from your WeatherFlow Tempest weather station. \ud83d\udccb Table of Contents \ud83d\ude80 Installation \u2699\ufe0f Configuration Getting Your API Credentials Finding Your Station ID Your Station ID is in your Tempest dashboard URL: Finding Your Device ID IMPORTANT: Your Device ID is NOT the &#8230; <a title=\"Tempest Weather Plugin\" class=\"read-more\" href=\"https:\/\/scootercam.net\/blog\/tempest-weather-plugin\/\" aria-label=\"Read more about Tempest Weather Plugin\">Read more<\/a><\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[38],"tags":[],"class_list":["post-955","post","type-post","status-publish","format-standard","hentry","category-plugins"],"_links":{"self":[{"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/posts\/955","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/comments?post=955"}],"version-history":[{"count":1,"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/posts\/955\/revisions"}],"predecessor-version":[{"id":956,"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/posts\/955\/revisions\/956"}],"wp:attachment":[{"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/media?parent=955"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/categories?post=955"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/tags?post=955"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}