{"id":294194,"date":"2026-08-29T08:58:19","date_gmt":"2026-08-29T08:58:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/xtx-netatmo\/"},"modified":"2026-10-15T17:25:50","modified_gmt":"2026-10-15T17:25:50","slug":"xtx-integration-for-netatmo","status":"publish","type":"plugin","link":"https:\/\/tg.wordpress.org\/plugins\/xtx-integration-for-netatmo\/","author":15516942,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.1.3","stable_tag":"2.1.3","tested":"7.1.3","requires":"6.2","requires_php":"8.0","requires_plugins":null,"header_name":"XTX Integration for Netatmo","header_author":"Frank Neumann","header_description":"Connects to the Netatmo API, stores all sensor data locally and displays live dashboards, charts, history and forecasts via shortcodes.","assets_banners_color":"284c4e","last_updated":"2026-10-15 17:25:50","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/netatmo.frank-neumann.de\/","header_author_uri":"https:\/\/frank-neumann.de","rating":5,"author_block_rating":0,"active_installs":10,"downloads":842,"num_ratings":2,"support_threads":1,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.9.10":{"tag":"1.9.10","author":"xylaender","date":"2026-09-03 15:04:33","revision":3679940},"1.9.11":{"tag":"1.9.11","author":"xylaender","date":"2026-09-06 09:24:06","revision":3683228},"1.9.12":{"tag":"1.9.12","author":"xylaender","date":"2026-09-08 15:36:35","revision":3686930},"1.9.13":{"tag":"1.9.13","author":"xylaender","date":"2026-09-09 18:09:39","revision":3688815},"1.9.6.2":{"tag":"1.9.6.2","author":"xylaender","date":"2026-08-29 08:57:55","revision":3671275},"1.9.7":{"tag":"1.9.7","author":"xylaender","date":"2026-08-29 10:50:58","revision":3671421},"1.9.8":{"tag":"1.9.8","author":"xylaender","date":"2026-08-31 17:10:14","revision":3674682},"1.9.9":{"tag":"1.9.9","author":"xylaender","date":"2026-08-31 17:22:24","revision":3674713},"2.0.0":{"tag":"2.0.0","author":"xylaender","date":"2026-09-12 10:18:57","revision":3692559},"2.0.1":{"tag":"2.0.1","author":"xylaender","date":"2026-09-16 15:49:37","revision":3698929},"2.0.2":{"tag":"2.0.2","author":"xylaender","date":"2026-09-25 15:43:36","revision":3713282},"2.1.0":{"tag":"2.1.0","author":"xylaender","date":"2026-10-01 16:04:38","revision":3723448},"2.1.1":{"tag":"2.1.1","author":"xylaender","date":"2026-10-08 17:25:22","revision":3735245},"2.1.2":{"tag":"2.1.2","author":"xylaender","date":"2026-10-11 16:57:08","revision":3739822},"2.1.3":{"tag":"2.1.3","author":"xylaender","date":"2026-10-15 17:25:50","revision":3749023}},"upgrade_notice":{"2.1.3":"<p>New: [naws_radar], an animated rain radar around the station \u2014 switch it on under Settings \u203a Rain radar. New colours for records and the chart expand button. Fix: records, &quot;on this day&quot; and the sun path follow the base theme.<\/p>","2.1.2":"<p>Fix: no more &quot;HTTP 429&quot; from Open-Meteo in the forecast \u2014 a failed request pauses the provider and the last good forecast stays on the page. Fix: no lines across the history charts on the 29th of February. Nothing to reconfigure.<\/p>","2.1.1":"<p>New: a Signal column on the Modules page shows the Wi-Fi of the base station and the radio link of every module. Fix: the forecast uses the decimal comma on German pages. Nothing to reconfigure.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3671348,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3671348,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3671348,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500-de.png":{"filename":"banner-1544x500-de.png","revision":3671363,"resolution":"1544x500","location":"assets","locale":"de","width":1544,"height":500},"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3671348,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250-de.png":{"filename":"banner-772x250-de.png","revision":3671363,"resolution":"772x250","location":"assets","locale":"de","width":772,"height":250},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3671348,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.9.10","1.9.11","1.9.12","1.9.13","1.9.6.2","1.9.7","1.9.8","1.9.9","2.0.0","2.0.1","2.0.2","2.1.0","2.1.1","2.1.2","2.1.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3671348,"resolution":"1","location":"assets","locale":"","width":2600,"height":3700},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3671348,"resolution":"2","location":"assets","locale":"","width":2600,"height":4900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3671348,"resolution":"3","location":"assets","locale":"","width":3000,"height":2048},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3671348,"resolution":"4","location":"assets","locale":"","width":3000,"height":2650},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3671348,"resolution":"5","location":"assets","locale":"","width":1116,"height":932},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3671348,"resolution":"6","location":"assets","locale":"","width":3000,"height":2640},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3671348,"resolution":"7","location":"assets","locale":"","width":3000,"height":1256}},"screenshots":{"1":"Live dashboard with sensor cards and 24h trend charts","2":"Year-over-year comparison charts for temperature and rainfall","3":"Admin settings page with Netatmo connection status","4":"REST API documentation in the admin panel","5":"Weather forecast widget","6":"Appearance page with live color preview","7":"Export \/ Import page for backups"}},"plugin_section":[],"plugin_tags":[2510,40864,7877,4899,269299],"plugin_category":[59],"plugin_contributors":[278161],"plugin_business_model":[],"class_list":["post-294194","plugin","type-plugin","status-publish","hentry","plugin_tags-chart","plugin_tags-netatmo","plugin_tags-temperature","plugin_tags-weather","plugin_tags-weather-station","plugin_category-utilities-and-tools","plugin_contributors-xylaender","plugin_committers-xylaender"],"banners":{"banner":"https:\/\/ps.w.org\/xtx-integration-for-netatmo\/assets\/banner-772x250.png?rev=3671348","banner_2x":"https:\/\/ps.w.org\/xtx-integration-for-netatmo\/assets\/banner-1544x500.png?rev=3671348","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/xtx-integration-for-netatmo\/assets\/icon.svg?rev=3671348","icon":"https:\/\/ps.w.org\/xtx-integration-for-netatmo\/assets\/icon.svg?rev=3671348","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/xtx-integration-for-netatmo\/assets\/screenshot-1.png?rev=3671348","caption":"Live dashboard with sensor cards and 24h trend charts"},{"src":"https:\/\/ps.w.org\/xtx-integration-for-netatmo\/assets\/screenshot-2.png?rev=3671348","caption":"Year-over-year comparison charts for temperature and rainfall"},{"src":"https:\/\/ps.w.org\/xtx-integration-for-netatmo\/assets\/screenshot-3.png?rev=3671348","caption":"Admin settings page with Netatmo connection status"},{"src":"https:\/\/ps.w.org\/xtx-integration-for-netatmo\/assets\/screenshot-4.png?rev=3671348","caption":"REST API documentation in the admin panel"},{"src":"https:\/\/ps.w.org\/xtx-integration-for-netatmo\/assets\/screenshot-5.png?rev=3671348","caption":"Weather forecast widget"},{"src":"https:\/\/ps.w.org\/xtx-integration-for-netatmo\/assets\/screenshot-6.png?rev=3671348","caption":"Appearance page with live color preview"},{"src":"https:\/\/ps.w.org\/xtx-integration-for-netatmo\/assets\/screenshot-7.png?rev=3671348","caption":"Export \/ Import page for backups"}],"raw_content":"<!--section=description-->\n<p><strong>XTX Integration for Netatmo<\/strong> connects your Netatmo hardware to WordPress. It reads all sensor data via the official Netatmo API, stores readings in your local database and displays them with beautiful live dashboards, animated charts and weather forecasts.<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>Full Netatmo Integration<\/strong> \u2013 OAuth2 authentication, automatic sync, all module types supported (Base, Outdoor, Wind, Rain, Indoor)<\/li>\n<li><strong>Live Dashboard<\/strong> \u2013 Real-time sensor cards with animated counters, 24h trend charts, pressure trend indicator, wind compass, CO2 air quality levels<\/li>\n<li><strong>Astronomy<\/strong> \u2013 Sunrise\/sunset, moon phase with illumination, next full moon<\/li>\n<li><strong>Derived Weather Data<\/strong> \u2013 Feels-like temperature, heat index, dew point, wind chill<\/li>\n<li><strong>Historical Charts<\/strong> \u2013 Year-over-year comparison for temperature, pressure and rainfall with interactive legend<\/li>\n<li><strong>Weather Forecast<\/strong> \u2013 5-day forecast based on station coordinates via Open-Meteo or Yr.no<\/li>\n<li><strong>REST API<\/strong> \u2013 Read-only JSON API with key authentication and rate limiting for external tools (Google Charts, Grafana, etc.)<\/li>\n<li><strong>Encrypted Storage<\/strong> \u2013 All credentials (OAuth tokens, client secret, API keys) are AES-256-GCM encrypted at rest<\/li>\n<li><strong>Configurable Units<\/strong> \u2013 C\/F, mm\/inch, mbar\/inHg\/mmHg, km\/h\/m\/s\/mph\/kn<\/li>\n<li><strong>Multilingual<\/strong> \u2013 Full German, English and Norwegian interface<\/li>\n<li><strong>18 Shortcodes<\/strong> \u2013 Dashboard, current readings, infobar, single value, computed value, sparkline, sparkline tiles, history charts, heatmap, records, this day in earlier years, sun path, wind rose, forecast, rain radar, table, widget, weather icon<\/li>\n<li><strong>Export \/ Import<\/strong> \u2013 Full backup and restore of weather data, modules and settings<\/li>\n<li><strong>E-Mail Notifications<\/strong> \u2013 battery, radio and Wi-Fi, station offline, failed syncs, frost, heat, gusts, rain, rain starting, CO\u2082; per-rule thresholds, one mail per state change and an all-clear when the state ends, and a master switch<\/li>\n<li><strong>Mobile-First Responsive<\/strong> \u2013 All views optimized for smartphones, tablets and desktops<\/li>\n<li><strong>130+ Configurable Colors<\/strong> \u2013 Full appearance customization with live preview<\/li>\n<li><strong>4 Icon Sets<\/strong> \u2013 Emoji, Outline, Filled, Minimal with per-sensor color control<\/li>\n<\/ul>\n\n<h4>Supported Modules<\/h4>\n\n<ul>\n<li><strong>NAMain<\/strong> \u2013 Base Station (Temperature, Humidity, CO2, Noise, Pressure)<\/li>\n<li><strong>NAModule1<\/strong> \u2013 Outdoor (Temperature, Humidity)<\/li>\n<li><strong>NAModule2<\/strong> \u2013 Wind (Speed, Direction, Gusts)<\/li>\n<li><strong>NAModule3<\/strong> \u2013 Rain Gauge (Hourly, Daily, Rolling 24h)<\/li>\n<li><strong>NAModule4<\/strong> \u2013 Additional Indoor (Temperature, Humidity, CO2)<\/li>\n<\/ul>\n\n<h4>Shortcodes<\/h4>\n\n<ul>\n<li><code>[naws_live]<\/code> \u2013 Live sensor tiles with 24h trend charts and wind rose<\/li>\n<li><code>[naws_current]<\/code> \u2013 Current readings of one or all modules as tiles or a list (<code>module_id<\/code>, <code>parameters<\/code>, <code>layout<\/code>, <code>title<\/code>)<\/li>\n<li><code>[naws_infobar]<\/code> \u2013 Astronomy bar with sunrise, moon phase, felt temperature<\/li>\n<li><code>[naws_value]<\/code> \u2013 Single inline sensor value<\/li>\n<li><code>[naws_calc]<\/code> \u2013 Single computed value (dew point, felt temperature, sunrise, moon phase, \u2026); full list on the Shortcodes page in the backend<\/li>\n<li><code>[naws_history]<\/code> \u2013 Year-over-year comparison charts (supports <code>year<\/code> parameter)<\/li>\n<li><code>[naws_heatmap]<\/code> \u2013 One year of outdoor daily average temperature as a calendar grid, one tile per day, with a year selector (<code>year<\/code>, <code>title<\/code>, <code>legend<\/code>)<\/li>\n<li><code>[naws_records]<\/code> \u2013 Fifteen records from the daily summary with their dates, as tiles or a table (<code>year<\/code>, <code>records<\/code>, <code>layout<\/code>, <code>title<\/code>)<\/li>\n<li><code>[naws_on_this_day]<\/code> \u2013 This calendar day in every earlier year, with the day's records marked (<code>date<\/code>, <code>title<\/code>)<\/li>\n<li><code>[naws_sunpath]<\/code> \u2013 The sun on its arc over the station, with sunrise, solar noon, sunset and the day length (<code>title<\/code>)<\/li>\n<li><code>[naws_windrose]<\/code> \u2013 Where the wind comes from and how hard, as a rose of 16 or 8 directions stacked by Beaufort class, with a period switcher (<code>period<\/code>, <code>from<\/code>, <code>to<\/code>, <code>measure<\/code>, <code>sectors<\/code>, <code>show<\/code>, <code>switcher<\/code>, <code>size<\/code>, <code>title<\/code>)<\/li>\n<li><code>[naws_sparkline]<\/code> \u2013 A curve the size of a word: the raw readings of the last hours or a column of the daily summary, rain as bars, the band between daily low and high, time and value on hover; as a card or a month block too (<code>param<\/code>, <code>hours<\/code>, <code>days<\/code>, <code>module<\/code>, <code>width<\/code>, <code>height<\/code>, <code>show<\/code>, <code>type<\/code>, <code>band<\/code>, <code>layout<\/code>, <code>title<\/code>)<\/li>\n<li><code>[naws_sparkline_tiles]<\/code> \u2013 The sparkline cards side by side in a grid that wraps by itself: temperature, humidity, pressure, wind, rain and CO2 by default (<code>params<\/code>, <code>hours<\/code>)<\/li>\n<li><code>[naws_forecast]<\/code> \u2013 Multi-day weather forecast<\/li>\n<li><code>[naws_radar]<\/code> \u2013 Animated rain radar around the station: Deutscher Wetterdienst in Germany (last hour plus two-hour nowcast), RainViewer elsewhere, on a grey OpenStreetMap map. Images are fetched by your server and served from your site (<code>width<\/code>, <code>height<\/code>, <code>km<\/code>, <code>source<\/code>). Must be switched on under Settings \u2192 Rain radar.<\/li>\n<li><code>[naws_table]<\/code> \u2013 Readings as a table over a period, grouped by hour, day, week, month or year (<code>module_id<\/code>, <code>parameters<\/code>, <code>period<\/code>, <code>limit<\/code>, <code>group_by<\/code>, <code>title<\/code>)<\/li>\n<li><code>[naws_weather_widget]<\/code> \u2013 Compact forecast widget for a sidebar (<code>days<\/code> 3 or 5, <code>width<\/code> 250\u2013500, <code>scheme<\/code> light, dark or transparent, <code>sparklines<\/code> 0 or 1)<\/li>\n<li><code>[naws_weather_icon]<\/code> \u2013 Just the animated icon for the current weather state (<code>size<\/code>); renders nothing when the state is unknown<\/li>\n<\/ul>\n\n<h3>Privacy &amp; External Services<\/h3>\n\n<p>This plugin connects to the following external services:<\/p>\n\n<h4>Netatmo API (api.netatmo.com)<\/h4>\n\n<ul>\n<li><strong>Purpose:<\/strong> Authenticate via OAuth2, fetch sensor readings and station data<\/li>\n<li><strong>Data sent:<\/strong> The Client ID and Client Secret of the Netatmo application you created, in exchange for an access token; afterwards the access or refresh token with every request, plus the station and module IDs whose measurements are being requested<\/li>\n<li><strong>When:<\/strong> During initial authentication, on every automatic sync cycle, on every token refresh, and while a historical import is running<\/li>\n<li><strong>Terms of service:<\/strong> <a href=\"https:\/\/dev.netatmo.com\/legal\">https:\/\/dev.netatmo.com\/legal<\/a><\/li>\n<li><strong>Privacy policy:<\/strong> <a href=\"https:\/\/legals.netatmo.com\/?goto=privacy\">https:\/\/legals.netatmo.com\/?goto=privacy<\/a><\/li>\n<\/ul>\n\n<h4>Open-Meteo API (api.open-meteo.com)<\/h4>\n\n<ul>\n<li><strong>Purpose:<\/strong> Fetch weather forecast data based on station coordinates (default provider)<\/li>\n<li><strong>Data sent:<\/strong> Latitude and longitude of your weather station<\/li>\n<li><strong>When:<\/strong> When the forecast shortcode is displayed (cached for 3 hours)<\/li>\n<li><strong>Terms and privacy:<\/strong> <a href=\"https:\/\/open-meteo.com\/en\/terms\">https:\/\/open-meteo.com\/en\/terms<\/a><\/li>\n<li><strong>Note:<\/strong> Open-Meteo is a free, open-source weather API. No API key or registration required.<\/li>\n<\/ul>\n\n<h4>Open-Meteo Geocoding API (geocoding-api.open-meteo.com)<\/h4>\n\n<ul>\n<li><strong>Purpose:<\/strong> Turn a place into coordinates, and coordinates into a place name for the forecast heading<\/li>\n<li><strong>Data sent:<\/strong> In \"manual\" location mode, the city name or postal code entered in the plugin settings. In \"automatic\" mode, the latitude and longitude of your weather station, rounded to two decimal places, in order to look up the name of the nearest place.<\/li>\n<li><strong>When:<\/strong> In manual mode whenever no cached result exists (cached for 7 days). In automatic mode exactly once \u2014 the resolved name is stored in the plugin settings and never looked up again.<\/li>\n<li><strong>Terms and privacy:<\/strong> <a href=\"https:\/\/open-meteo.com\/en\/terms\">https:\/\/open-meteo.com\/en\/terms<\/a><\/li>\n<li><strong>Documentation:<\/strong> <a href=\"https:\/\/open-meteo.com\/en\/docs\/geocoding-api\">https:\/\/open-meteo.com\/en\/docs\/geocoding-api<\/a><\/li>\n<\/ul>\n\n<h4>Yr.no \/ MET Norway API (api.met.no)<\/h4>\n\n<ul>\n<li><strong>Purpose:<\/strong> Fetch weather forecast data (optional provider, selectable in settings)<\/li>\n<li><strong>Data sent:<\/strong> Latitude and longitude of your weather station<\/li>\n<li><strong>When:<\/strong> When the forecast shortcode is displayed and Yr.no is selected as provider (cached for 3 hours)<\/li>\n<li><strong>Privacy policy:<\/strong> <a href=\"https:\/\/www.met.no\/en\/About-us\/privacy\">https:\/\/www.met.no\/en\/About-us\/privacy<\/a><\/li>\n<li><strong>Terms:<\/strong> <a href=\"https:\/\/developer.yr.no\/doc\/TermsOfService\/\">https:\/\/developer.yr.no\/doc\/TermsOfService\/<\/a><\/li>\n<li><strong>Note:<\/strong> Free API, no API key needed. MET Norway's terms require every client to identify itself, so requests to this service carry a User-Agent naming the plugin, its version and your site address \u2014 that address is how MET Norway would reach you before restricting a misbehaving client. This is sent to api.met.no only, and only while Yr.no is the selected provider.<\/li>\n<\/ul>\n\n<h4>Deutscher Wetterdienst (maps.dwd.de)<\/h4>\n\n<ul>\n<li><strong>Purpose:<\/strong> Radar images (measured and two-hour nowcast) for the rain radar <code>[naws_radar]<\/code> when the station is in Germany<\/li>\n<li><strong>Data sent:<\/strong> The map section around your station (as a bounding box) and the time of each image. No visitor data: your server fetches the images and your site serves them.<\/li>\n<li><strong>When:<\/strong> Only if \"Allow rain radar\" is on, after a page showed the radar, at most every 15 minutes<\/li>\n<li><strong>Terms and privacy:<\/strong> <a href=\"https:\/\/www.dwd.de\/EN\/service\/copyright\/copyright_node.html\">https:\/\/www.dwd.de\/EN\/service\/copyright\/copyright_node.html<\/a>, <a href=\"https:\/\/www.dwd.de\/EN\/service\/dataprotection\/dataprotection_node.html\">https:\/\/www.dwd.de\/EN\/service\/dataprotection\/dataprotection_node.html<\/a><\/li>\n<\/ul>\n\n<h4>RainViewer (api.rainviewer.com, tilecache.rainviewer.com)<\/h4>\n\n<ul>\n<li><strong>Purpose:<\/strong> Radar images for the rain radar <code>[naws_radar]<\/code> outside Germany<\/li>\n<li><strong>Data sent:<\/strong> The tile numbers of the map section around your station and the time of each image. No visitor data: your server fetches the images and your site serves them.<\/li>\n<li><strong>When:<\/strong> Only if \"Allow rain radar\" is on, after a page showed the radar, at most every 15 minutes<\/li>\n<li><strong>Terms and privacy:<\/strong> <a href=\"https:\/\/www.rainviewer.com\/terms.html\">https:\/\/www.rainviewer.com\/terms.html<\/a>, <a href=\"https:\/\/www.rainviewer.com\/privacy.html\">https:\/\/www.rainviewer.com\/privacy.html<\/a><\/li>\n<\/ul>\n\n<h4>OpenStreetMap tiles (tile.openstreetmap.org)<\/h4>\n\n<ul>\n<li><strong>Purpose:<\/strong> The background map of the rain radar <code>[naws_radar]<\/code><\/li>\n<li><strong>Data sent:<\/strong> The tile numbers of the map section around your station. Fetched once per map section and kept on your server.<\/li>\n<li><strong>When:<\/strong> Only if \"Allow rain radar\" is on, the first time a page shows a radar with that map section<\/li>\n<li><strong>Terms and privacy:<\/strong> <a href=\"https:\/\/operations.osmfoundation.org\/policies\/tiles\/\">https:\/\/operations.osmfoundation.org\/policies\/tiles\/<\/a>, <a href=\"https:\/\/osmfoundation.org\/wiki\/Privacy_Policy\">https:\/\/osmfoundation.org\/wiki\/Privacy_Policy<\/a><\/li>\n<\/ul>\n\n<p>No personal user data (names, emails, IP addresses) is collected or transmitted by this plugin. All sensor data is stored exclusively in your local WordPress database.<\/p>\n\n<h3>Third-Party Libraries<\/h3>\n\n<p>Two JavaScript libraries are bundled with this plugin, both under the MIT license, which is GPL-compatible. They ship in their minified distribution builds; the unminified source and the build tooling for each are available at the links below.<\/p>\n\n<h4>Chart.js 4.5.1<\/h4>\n\n<ul>\n<li><strong>File:<\/strong> <code>assets\/vendor\/chart.umd.min.js<\/code><\/li>\n<li><strong>License:<\/strong> MIT<\/li>\n<li><strong>Homepage:<\/strong> <a href=\"https:\/\/www.chartjs.org\">https:\/\/www.chartjs.org<\/a><\/li>\n<li><strong>Source and build tools:<\/strong> <a href=\"https:\/\/github.com\/chartjs\/Chart.js\">https:\/\/github.com\/chartjs\/Chart.js<\/a> \u2014 the exact release bundled here is <a href=\"https:\/\/github.com\/chartjs\/Chart.js\/releases\/tag\/v4.5.1\">v4.5.1<\/a><\/li>\n<li><strong>Used for:<\/strong> All charts \u2014 24h trend lines on the live dashboard and the year-over-year history charts<\/li>\n<\/ul>\n\n<h4>chartjs-adapter-date-fns 3.0.0<\/h4>\n\n<ul>\n<li><strong>File:<\/strong> <code>assets\/vendor\/chartjs-adapter-date-fns.bundle.min.js<\/code><\/li>\n<li><strong>License:<\/strong> MIT<\/li>\n<li><strong>Source and build tools:<\/strong> <a href=\"https:\/\/github.com\/chartjs\/chartjs-adapter-date-fns\">https:\/\/github.com\/chartjs\/chartjs-adapter-date-fns<\/a> \u2014 the exact release bundled here is <a href=\"https:\/\/github.com\/chartjs\/chartjs-adapter-date-fns\/releases\/tag\/v3.0.0\">v3.0.0<\/a><\/li>\n<li><strong>Used for:<\/strong> Time axis formatting in the charts. This is the bundled build, which includes date-fns (also MIT).<\/li>\n<\/ul>\n\n<p>No other third-party code is included. No library is loaded from a CDN; everything is served from your own installation. Libraries that ship with WordPress itself are used from WordPress and are not bundled.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>xtx-integration-for-netatmo<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin in WordPress Admin &gt; Plugins<\/li>\n<li>Go to <strong>XTX Netatmo &gt; Settings<\/strong><\/li>\n<li>Create a Netatmo developer app at <a href=\"https:\/\/dev.netatmo.com\">dev.netatmo.com<\/a><\/li>\n<li>Enter your Client ID and Client Secret<\/li>\n<li>Set the Redirect URI in your Netatmo app to: <code>https:\/\/yoursite.com\/wp-admin\/admin.php?page=naws-settings<\/code><\/li>\n<li>Click \"Connect to Netatmo\" and authorize<\/li>\n<li>Data syncs automatically \u2013 add shortcodes to any page<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20get%20netatmo%20api%20credentials%3F\"><h3>How do I get Netatmo API credentials?<\/h3><\/dt>\n<dd><p>Visit <a href=\"https:\/\/dev.netatmo.com\">dev.netatmo.com<\/a>, log in with your Netatmo account, create a new application and copy the Client ID and Client Secret.<\/p><\/dd>\n<dt id=\"how%20often%20does%20data%20update%3F\"><h3>How often does data update?<\/h3><\/dt>\n<dd><p>Netatmo sensors transmit every 5 minutes. The plugin sync interval is configurable (5\u20131440 minutes). Night mode reduces polling between 23:00\u201306:00.<\/p><\/dd>\n<dt id=\"can%20i%20import%20historical%20data%3F\"><h3>Can I import historical data?<\/h3><\/dt>\n<dd><p>Yes. The plugin includes a chunk-based historical importer that fetches data from the Netatmo getmeasure API without hitting rate limits.<\/p><\/dd>\n<dt id=\"is%20the%20rest%20api%20secure%3F\"><h3>Is the REST API secure?<\/h3><\/dt>\n<dd><p>Yes. Every endpoint is read-only, rate-limited, and requires an API key generated in the admin panel. The key is accepted in the X-NAWS-Key header only \u2014 never as a query parameter, so it cannot end up in access logs, the Referer header, browser history or a proxy along the way.<\/p><\/dd>\n<dt id=\"are%20my%20netatmo%20credentials%20safe%3F\"><h3>Are my Netatmo credentials safe?<\/h3><\/dt>\n<dd><p>All sensitive data (OAuth tokens, client ID, client secret, API keys) is encrypted with AES-256-GCM before being stored in the database.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20appearance%3F\"><h3>Can I customize the appearance?<\/h3><\/dt>\n<dd><p>Yes. The Appearance page offers 130+ configurable colors with live preview, 4 icon sets, per-sensor colors, chart theming and year comparison palettes.<\/p><\/dd>\n<dt id=\"can%20i%20back%20up%20my%20weather%20data%3F\"><h3>Can I back up my weather data?<\/h3><\/dt>\n<dd><p>Yes. The Export\/Import feature lets you download weather data, module configs and all settings as JSON. Ideal for migrating to a new WordPress installation.<\/p><\/dd>\n<dt id=\"which%20forecast%20providers%20are%20supported%3F\"><h3>Which forecast providers are supported?<\/h3><\/dt>\n<dd><p>Open-Meteo (global, default) and Yr.no \/ MET Norway (optimized for Northern Europe). Both are free and require no API key.<\/p><\/dd>\n<dt id=\"i%20don%27t%20receive%20notification%20e-mails\"><h3>I don't receive notification e-mails<\/h3><\/dt>\n<dd><p>Open XTX Netatmo \u2192 Notifications and press \"Send test mail\". If the page reports that the mail could not be sent, your server sends no mail at all: an SMTP plugin or your hosting provider fixes that, not the plugin. If the test mail arrives but no notifications do, check that the master switch and the rule are switched on and look at the log on the same page. Notifications go out only when a state changes; a battery that has been low since before you switched the rule on is reported at the next fetch, not again afterwards.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.1.3<\/h4>\n\n<ul>\n<li>Added: <code>[naws_radar]<\/code> \u2014 an animated rain radar around the station: Deutscher Wetterdienst in Germany (the last hour plus a two-hour nowcast), RainViewer elsewhere, on a grey OpenStreetMap map. Play runs through the images once; + and \u2212 zoom in around the station, and the enlarged map can be dragged. Your server fetches and stores the images, so visitors never contact a weather service. Nothing is fetched until \"Allow rain radar\" is switched on under Settings \u203a Rain radar; colours on a new Appearance tab, Rain radar.<\/li>\n<li>Added: a new Appearance tab, Records \u2014 block background, tile background, value and labels of <code>[naws_records]<\/code> and <code>[naws_on_this_day]<\/code>; an empty field follows the base theme. Under Chart Theming three colours for the expand button of the live and history charts.<\/li>\n<li>Fix: records, \"on this day\" and the sun path ignored the base theme; their background stayed white whatever was set.<\/li>\n<li>Fix: the expand button of the charts could turn red after a click under themes such as Hello Elementor.<\/li>\n<\/ul>\n\n<h4>2.1.2<\/h4>\n\n<ul>\n<li>Fix: the forecast showed \"Open-Meteo API HTTP 429\". Open-Meteo limits its free API per IP address, and the plugin asked again on every page view after a failure, which kept the address above the limit. A failed request now pauses the provider (after a 429 as long as Open-Meteo asks, otherwise 15 minutes; 5 minutes after other errors), the last good forecast stays on the page for up to 24 hours, and visitors read a plain sentence instead of an HTTP code. Yr.no and the place search of the manual location mode are covered as well.<\/li>\n<li>Fix: the 29th of February drew two almost flat lines across the daily charts of <code>[naws_history]<\/code> in a leap year. The day was placed after the 31st of December; the axis has 366 days now.<\/li>\n<\/ul>\n\n<h4>2.1.1<\/h4>\n\n<ul>\n<li>Added: a Signal column on the Modules page \u2014 the Wi-Fi of the base station as a fan, the radio link of every other module as four bars, each with a word (Excellent, Good, Fair, Weak) and Netatmo's raw value on hover. A device Netatmo reports as unreachable shows \"Not reachable\".<\/li>\n<li>Fix: <code>[naws_forecast]<\/code> printed decimal points on a German page (\"17.4 \/ 14.7 \u00b0C\"). Temperatures, precipitation, wind and gusts of the forecast use the site's decimal mark now.<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Added: <code>[naws_sparkline]<\/code> \u2014 a curve the size of a word, next to the number in running text: the raw readings of the last hours or a column of the daily summary, rain as bars, the band between daily low and high, a bubble with time and value on hover. <code>layout=\"tile\"<\/code> draws it as a card with value, low and high; <code>layout=\"month\"<\/code> as a block of daily means with the rain per day. Server-side SVG, complete without JavaScript; eight colours on a new Appearance tab, Sparkline.<\/li>\n<li>Added: <code>[naws_sparkline_tiles]<\/code> \u2014 the sparkline cards as a grid that wraps by itself: temperature, humidity, pressure, wind, rain and CO2 by default (<code>params<\/code>, <code>hours<\/code>).<\/li>\n<li>Added: sparklines in the sidebar widget. A switch under Appearance \u203a Sidebar widget, or <code>sparklines=\"1\"<\/code> on the shortcode, adds a 24-hour curve under the temperature and five tiles for humidity, pressure, wind, rain and CO2. Off by default.<\/li>\n<li>Changed: the forecast's colours can be set on a new Appearance tab, Forecast; texts, frames and the card background follow the base theme. The Appearance tabs are WordPress tabs now, wrap on a narrow screen and stay open after saving.<\/li>\n<li>Changed: the REST endpoint <code>\/daily<\/code> returns <code>humidity_avg<\/code>, <code>wind_avg<\/code>, <code>co2_avg<\/code> and <code>noise_avg<\/code> when asked for them.<\/li>\n<li>Fix: numbers follow the language of the page \u2014 \"23,4 \u00b0C\" and \"1.019,1 mbar\" on a German page \u2014 in the widget, the tables, single and computed values, the infobar, the heatmap, the e-mails and the axes and tooltips of the charts.<\/li>\n<li>Fix: the heatmap no longer colours today. The running mean of a day that is not over looked like a finished day; the cell now gets its colour the next day.<\/li>\n<li>Fix: <code>[naws_current]<\/code> shows its icons again instead of their SVG source as text.<\/li>\n<li>Fix: \"11 Minuten ago\" \u2014 relative times are translatable now (\"vor 11 Minuten\").<\/li>\n<\/ul>\n\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>Added: retention of raw readings, switchable. The settings page promised \"all data is stored permanently\" while the dashboard sidebar showed a \"Data Retention: 365\" that nothing applied. Retention is a real thing now, in a section of its own on the settings page and off by default: switch it on, give it a number of days (365 by default, never fewer than 30), and once a night, after the daily summary, the plugin deletes raw readings older than that and notes the run on the settings page and in the cron log. Only the raw readings go \u2014 the ten-minute values behind the live dashboard, <code>[naws_table]<\/code>, <code>[naws_chart]<\/code>, the wind rose and the REST readings endpoint. The daily table is never touched, so history, heatmap, records and climate indices keep their full range. Switching it on, and the manual purge, ask once more and say what is lost. An update changes nothing: the switch is off until you turn it on.<\/li>\n<li>Fix: the wind cards of the live dashboard ignored every colour setting. <code>[naws_live]<\/code> drew its compass, the pointer and the half-circle gauge for wind and gusts with literal colours; the \"Compass Needle\" colour went into the page as a variable nothing read, and for wind and gusts there was no field at all. The two cards now take their colours from a tab of their own, Appearance \u203a Live dashboard: wind \u2014 background (compass face and the empty part of the gauge), compass rose, compass pointer (the old \"Compass Needle\", same key, so a saved colour survives), gauge wind, gauge gusts, gauge peak gust of the day \u2014 with a preview built from the real compass and gauge. The defaults are the colours the dashboard has always used.<\/li>\n<li>Fix: the wind rose said \"no wind readings\" for a period that had readings \u2014 all of them calm. It now says \"Calm the whole time: 20 readings, all below 1 km\/h.\"<\/li>\n<li>Fix: the translators comments never reached the catalogues; the extractor looked for them inside the call's parentheses, where WordPress convention never puts them. The <code>.pot<\/code> and both <code>.po<\/code> files carry them now.<\/li>\n<\/ul>\n\n<p>Older versions: the complete changelog since 1.0.0 is kept in <a href=\"https:\/\/github.com\/Xyla1512\/Netatmo\/blob\/main\/CHANGELOG.md\">CHANGELOG.md<\/a> on GitHub.<\/p>","raw_excerpt":"Connects to the Netatmo API, stores all sensor data locally and displays live dashboards, animated charts, history and weather forecasts.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/294194","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=294194"}],"author":[{"embeddable":true,"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/xylaender"}],"wp:attachment":[{"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=294194"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=294194"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=294194"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=294194"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=294194"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=294194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}