├── Screenshot-Grafana.png ├── Screenshot_Grafana_Watering.png ├── telegraf ├── openweathermap.conf └── ecowitt.conf ├── LICENSE ├── README.md └── grafana ├── Watering-dashboard.json ├── Local-Weather-Dashboard.json └── Local-Weather-Dashboard-2.0.json /Screenshot-Grafana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Slocan/weatherDashboard/HEAD/Screenshot-Grafana.png -------------------------------------------------------------------------------- /Screenshot_Grafana_Watering.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Slocan/weatherDashboard/HEAD/Screenshot_Grafana_Watering.png -------------------------------------------------------------------------------- /telegraf/openweathermap.conf: -------------------------------------------------------------------------------- 1 | [[inputs.openweathermap]] 2 | ## OpenWeatherMap API key. 3 | app_id = "xxx" 4 | 5 | ## City ID's to collect weather data from. 6 | city_id = ["6090786"] 7 | 8 | ## Language of the description field. Can be one of "ar", "bg", 9 | ## "ca", "cz", "de", "el", "en", "fa", "fi", "fr", "gl", "hr", "hu", 10 | ## "it", "ja", "kr", "la", "lt", "mk", "nl", "pl", "pt", "ro", "ru", 11 | ## "se", "sk", "sl", "es", "tr", "ua", "vi", "zh_cn", "zh_tw" 12 | # lang = "en" 13 | 14 | ## APIs to fetch; can contain "weather" or "forecast". 15 | fetch = ["weather", "forecast"] 16 | 17 | ## OpenWeatherMap base URL 18 | # base_url = "https://api.openweathermap.org/" 19 | 20 | ## Timeout for HTTP response. 21 | # response_timeout = "5s" 22 | 23 | ## Preferred unit system for temperature and wind speed. Can be one of 24 | ## "metric", "imperial", or "standard". 25 | # units = "metric" 26 | 27 | ## Query interval; OpenWeatherMap weather data is updated every 10 28 | ## minutes. 29 | interval = "10m" 30 | -------------------------------------------------------------------------------- /telegraf/ecowitt.conf: -------------------------------------------------------------------------------- 1 | [[inputs.http_listener_v2]] 2 | ## Address and port to host HTTP listener on 3 | service_address = ":7080" 4 | 5 | ## Path to listen to. 6 | path = "/telegraf" 7 | 8 | ## HTTP methods to accept. 9 | methods = ["POST", "PUT"] 10 | 11 | ## maximum duration before timing out read of the request 12 | # read_timeout = "10s" 13 | ## maximum duration before timing out write of the response 14 | # write_timeout = "10s" 15 | 16 | ## Maximum allowed http request body size in bytes. 17 | ## 0 means to use the default of 524,288,000 bytes (500 mebibytes) 18 | max_body_size = "1MB" 19 | 20 | ## Data format to consume. 21 | ## Part of the request to consume. Available options are "body" and 22 | ## "query". 23 | data_source = "body" 24 | 25 | ## Data format to consume. 26 | ## Each data format has its own unique set of configuration options, read 27 | ## more about them here: 28 | ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md 29 | data_format = "form_urlencoded" 30 | form_urlencoded_tag_keys = ["stationtype", "model", "PASSKEY"] 31 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Slocan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Local Weather Dashboard 2 | 3 | Code repository for custom weather dashboard in Grafana, using data from a Ecowitt GW1000 gateway. A second dashboard uses data from soil moisture sensors WH51 to determine the last time plants were watered. 4 | 5 | ![Local Weather Dashboard](/Screenshot-Grafana.png?raw=true "Grafana Screenshot") 6 | ![Watering Dashboard](/Screenshot_Grafana_Watering.png?raw=true "Grafana Screenshot") 7 | 8 | ## Pre-requisites 9 | 10 | Requirements: 11 | - Telegraf 12 | - Grafana 13 | - Influxdb 14 | 15 | Recommended: 16 | - Apache or Nginx, acting as proxy to provide authentication and TLS encryption 17 | 18 | ## Installation 19 | 20 | - Copy the .conf files from the telegraf folder to:\ 21 | /etc/telegraf/telegraf.d/\ 22 | After restarting telegraf, it will listen on port 7080 to receive the data from the gateway. Review your network to allow traffic to this port from the gateway. 23 | 24 | - In grafana, Import the json from the grafana folder as a new dashboard 25 | 26 | - In the Ecowitt WS app, set the Customzied upload to: 27 | Protocol: Ecowitt\ 28 | Server IP/Hostname: \ 29 | Path: /telegraf\ 30 | Port: 7080\ 31 | Upload interval: 30\ 32 | 33 | ## License 34 | [MIT](https://choosealicense.com/licenses/mit/) 35 | -------------------------------------------------------------------------------- /grafana/Watering-dashboard.json: -------------------------------------------------------------------------------- 1 | { 2 | "annotations": { 3 | "list": [ 4 | { 5 | "builtIn": 1, 6 | "datasource": "-- Grafana --", 7 | "enable": true, 8 | "hide": true, 9 | "iconColor": "rgba(0, 211, 255, 1)", 10 | "name": "Annotations & Alerts", 11 | "type": "dashboard" 12 | } 13 | ] 14 | }, 15 | "editable": true, 16 | "gnetId": null, 17 | "graphTooltip": 0, 18 | "id": 3, 19 | "links": [], 20 | "panels": [ 21 | { 22 | "datasource": null, 23 | "fieldConfig": { 24 | "defaults": { 25 | "color": { 26 | "mode": "thresholds" 27 | }, 28 | "mappings": [ 29 | { 30 | "from": "", 31 | "id": 1, 32 | "text": "", 33 | "to": "", 34 | "type": 2 35 | } 36 | ], 37 | "thresholds": { 38 | "mode": "absolute", 39 | "steps": [ 40 | { 41 | "color": "green", 42 | "value": null 43 | } 44 | ] 45 | }, 46 | "unit": "dateTimeFromNow" 47 | }, 48 | "overrides": [] 49 | }, 50 | "gridPos": { 51 | "h": 8, 52 | "w": 12, 53 | "x": 0, 54 | "y": 0 55 | }, 56 | "id": 6, 57 | "options": { 58 | "colorMode": "value", 59 | "graphMode": "area", 60 | "justifyMode": "auto", 61 | "orientation": "auto", 62 | "reduceOptions": { 63 | "calcs": [ 64 | "lastNotNull" 65 | ], 66 | "fields": "/^Time$/", 67 | "values": false 68 | }, 69 | "text": {}, 70 | "textMode": "auto" 71 | }, 72 | "pluginVersion": "7.5.5", 73 | "targets": [ 74 | { 75 | "groupBy": [ 76 | { 77 | "params": [ 78 | "$__interval" 79 | ], 80 | "type": "time" 81 | }, 82 | { 83 | "params": [ 84 | "null" 85 | ], 86 | "type": "fill" 87 | } 88 | ], 89 | "measurement": "http_listener_v2", 90 | "orderByTime": "ASC", 91 | "policy": "default", 92 | "query": "SELECT derivative(mean(\"soilmoisture1\"),10s) AS \"Planter\" FROM \"http_listener_v2\" WHERE $timeFilter GROUP BY time(5m) fill(null)", 93 | "rawQuery": true, 94 | "refId": "A", 95 | "resultFormat": "time_series", 96 | "select": [ 97 | [ 98 | { 99 | "params": [ 100 | "soilmoisture1" 101 | ], 102 | "type": "field" 103 | }, 104 | { 105 | "params": [], 106 | "type": "mean" 107 | }, 108 | { 109 | "params": [ 110 | "Planter" 111 | ], 112 | "type": "alias" 113 | } 114 | ] 115 | ], 116 | "tags": [] 117 | } 118 | ], 119 | "title": "Planter Last Watered", 120 | "transformations": [ 121 | { 122 | "id": "filterByValue", 123 | "options": { 124 | "filters": [ 125 | { 126 | "config": { 127 | "id": "lower", 128 | "options": { 129 | "value": 0.05 130 | } 131 | }, 132 | "fieldName": "http_listener_v2.Planter" 133 | } 134 | ], 135 | "match": "any", 136 | "type": "exclude" 137 | } 138 | } 139 | ], 140 | "type": "stat" 141 | }, 142 | { 143 | "datasource": null, 144 | "fieldConfig": { 145 | "defaults": { 146 | "color": { 147 | "mode": "thresholds" 148 | }, 149 | "mappings": [], 150 | "thresholds": { 151 | "mode": "absolute", 152 | "steps": [ 153 | { 154 | "color": "green", 155 | "value": null 156 | } 157 | ] 158 | }, 159 | "unit": "dateTimeFromNow" 160 | }, 161 | "overrides": [] 162 | }, 163 | "gridPos": { 164 | "h": 8, 165 | "w": 12, 166 | "x": 12, 167 | "y": 0 168 | }, 169 | "id": 7, 170 | "options": { 171 | "colorMode": "value", 172 | "graphMode": "area", 173 | "justifyMode": "auto", 174 | "orientation": "auto", 175 | "reduceOptions": { 176 | "calcs": [ 177 | "lastNotNull" 178 | ], 179 | "fields": "/^Time$/", 180 | "values": false 181 | }, 182 | "text": {}, 183 | "textMode": "auto" 184 | }, 185 | "pluginVersion": "7.5.5", 186 | "targets": [ 187 | { 188 | "groupBy": [ 189 | { 190 | "params": [ 191 | "$__interval" 192 | ], 193 | "type": "time" 194 | }, 195 | { 196 | "params": [ 197 | "null" 198 | ], 199 | "type": "fill" 200 | } 201 | ], 202 | "measurement": "http_listener_v2", 203 | "orderByTime": "ASC", 204 | "policy": "default", 205 | "query": "SELECT derivative(mean(\"soilmoisture2\"),10s) AS \"Bonsai\" FROM \"http_listener_v2\" WHERE $timeFilter GROUP BY time(5m) fill(null)", 206 | "rawQuery": true, 207 | "refId": "A", 208 | "resultFormat": "time_series", 209 | "select": [ 210 | [ 211 | { 212 | "params": [ 213 | "soilmoisture1" 214 | ], 215 | "type": "field" 216 | }, 217 | { 218 | "params": [], 219 | "type": "mean" 220 | }, 221 | { 222 | "params": [ 223 | "Planter" 224 | ], 225 | "type": "alias" 226 | } 227 | ] 228 | ], 229 | "tags": [] 230 | } 231 | ], 232 | "title": "Bonsai Last Watered", 233 | "transformations": [ 234 | { 235 | "id": "filterByValue", 236 | "options": { 237 | "filters": [ 238 | { 239 | "config": { 240 | "id": "lower", 241 | "options": { 242 | "value": 0.1 243 | } 244 | }, 245 | "fieldName": "http_listener_v2.Bonsai" 246 | } 247 | ], 248 | "match": "any", 249 | "type": "exclude" 250 | } 251 | } 252 | ], 253 | "type": "stat" 254 | }, 255 | { 256 | "aliasColors": {}, 257 | "bars": false, 258 | "dashLength": 10, 259 | "dashes": false, 260 | "datasource": null, 261 | "fieldConfig": { 262 | "defaults": {}, 263 | "overrides": [] 264 | }, 265 | "fill": 1, 266 | "fillGradient": 0, 267 | "gridPos": { 268 | "h": 9, 269 | "w": 24, 270 | "x": 0, 271 | "y": 8 272 | }, 273 | "hiddenSeries": false, 274 | "id": 2, 275 | "legend": { 276 | "avg": false, 277 | "current": false, 278 | "max": false, 279 | "min": false, 280 | "show": true, 281 | "total": false, 282 | "values": false 283 | }, 284 | "lines": true, 285 | "linewidth": 1, 286 | "nullPointMode": "connected", 287 | "options": { 288 | "alertThreshold": true 289 | }, 290 | "percentage": false, 291 | "pluginVersion": "7.5.5", 292 | "pointradius": 2, 293 | "points": false, 294 | "renderer": "flot", 295 | "seriesOverrides": [], 296 | "spaceLength": 10, 297 | "stack": false, 298 | "steppedLine": false, 299 | "targets": [ 300 | { 301 | "alias": "$col", 302 | "groupBy": [ 303 | { 304 | "params": [ 305 | "$__interval" 306 | ], 307 | "type": "time" 308 | }, 309 | { 310 | "params": [ 311 | "null" 312 | ], 313 | "type": "fill" 314 | } 315 | ], 316 | "measurement": "http_listener_v2", 317 | "orderByTime": "ASC", 318 | "policy": "default", 319 | "refId": "A", 320 | "resultFormat": "time_series", 321 | "select": [ 322 | [ 323 | { 324 | "params": [ 325 | "soilmoisture1" 326 | ], 327 | "type": "field" 328 | }, 329 | { 330 | "params": [], 331 | "type": "mean" 332 | }, 333 | { 334 | "params": [ 335 | "Planter" 336 | ], 337 | "type": "alias" 338 | } 339 | ], 340 | [ 341 | { 342 | "params": [ 343 | "soilmoisture2" 344 | ], 345 | "type": "field" 346 | }, 347 | { 348 | "params": [], 349 | "type": "mean" 350 | }, 351 | { 352 | "params": [ 353 | "Bonsai" 354 | ], 355 | "type": "alias" 356 | } 357 | ] 358 | ], 359 | "tags": [] 360 | } 361 | ], 362 | "thresholds": [], 363 | "timeFrom": null, 364 | "timeRegions": [], 365 | "timeShift": null, 366 | "title": "Soil Moisture", 367 | "tooltip": { 368 | "shared": true, 369 | "sort": 0, 370 | "value_type": "individual" 371 | }, 372 | "type": "graph", 373 | "xaxis": { 374 | "buckets": null, 375 | "mode": "time", 376 | "name": null, 377 | "show": true, 378 | "values": [] 379 | }, 380 | "yaxes": [ 381 | { 382 | "$$hashKey": "object:1212", 383 | "format": "short", 384 | "label": null, 385 | "logBase": 1, 386 | "max": "60", 387 | "min": "20", 388 | "show": true 389 | }, 390 | { 391 | "$$hashKey": "object:1213", 392 | "format": "short", 393 | "label": null, 394 | "logBase": 1, 395 | "max": null, 396 | "min": null, 397 | "show": false 398 | } 399 | ], 400 | "yaxis": { 401 | "align": false, 402 | "alignLevel": null 403 | } 404 | }, 405 | { 406 | "aliasColors": {}, 407 | "bars": false, 408 | "dashLength": 10, 409 | "dashes": false, 410 | "datasource": null, 411 | "fieldConfig": { 412 | "defaults": {}, 413 | "overrides": [] 414 | }, 415 | "fill": 1, 416 | "fillGradient": 0, 417 | "gridPos": { 418 | "h": 8, 419 | "w": 12, 420 | "x": 0, 421 | "y": 17 422 | }, 423 | "hiddenSeries": false, 424 | "id": 4, 425 | "legend": { 426 | "avg": false, 427 | "current": false, 428 | "max": false, 429 | "min": false, 430 | "show": true, 431 | "total": false, 432 | "values": false 433 | }, 434 | "lines": true, 435 | "linewidth": 1, 436 | "nullPointMode": "null", 437 | "options": { 438 | "alertThreshold": true 439 | }, 440 | "percentage": false, 441 | "pluginVersion": "7.5.5", 442 | "pointradius": 2, 443 | "points": false, 444 | "renderer": "flot", 445 | "seriesOverrides": [], 446 | "spaceLength": 10, 447 | "stack": false, 448 | "steppedLine": false, 449 | "targets": [ 450 | { 451 | "groupBy": [ 452 | { 453 | "params": [ 454 | "$__interval" 455 | ], 456 | "type": "time" 457 | }, 458 | { 459 | "params": [ 460 | "null" 461 | ], 462 | "type": "fill" 463 | } 464 | ], 465 | "measurement": "http_listener_v2", 466 | "orderByTime": "ASC", 467 | "policy": "default", 468 | "query": "SELECT derivative(mean(\"soilmoisture1\"), 10s) FROM \"http_listener_v2\" WHERE $timeFilter GROUP BY time($__interval) fill(null)", 469 | "rawQuery": true, 470 | "refId": "A", 471 | "resultFormat": "time_series", 472 | "select": [ 473 | [ 474 | { 475 | "params": [ 476 | "soilmoisture1" 477 | ], 478 | "type": "field" 479 | }, 480 | { 481 | "params": [], 482 | "type": "mean" 483 | }, 484 | { 485 | "params": [ 486 | "10s" 487 | ], 488 | "type": "derivative" 489 | } 490 | ] 491 | ], 492 | "tags": [] 493 | }, 494 | { 495 | "groupBy": [ 496 | { 497 | "params": [ 498 | "$__interval" 499 | ], 500 | "type": "time" 501 | }, 502 | { 503 | "params": [ 504 | "null" 505 | ], 506 | "type": "fill" 507 | } 508 | ], 509 | "hide": false, 510 | "orderByTime": "ASC", 511 | "policy": "default", 512 | "query": "SELECT derivative(mean(\"soilmoisture2\"), 10s) FROM \"http_listener_v2\" WHERE $timeFilter GROUP BY time($__interval) fill(null)", 513 | "rawQuery": true, 514 | "refId": "B", 515 | "resultFormat": "time_series", 516 | "select": [ 517 | [ 518 | { 519 | "params": [ 520 | "value" 521 | ], 522 | "type": "field" 523 | }, 524 | { 525 | "params": [], 526 | "type": "mean" 527 | } 528 | ] 529 | ], 530 | "tags": [] 531 | } 532 | ], 533 | "thresholds": [], 534 | "timeFrom": null, 535 | "timeRegions": [], 536 | "timeShift": null, 537 | "title": "Panel Title", 538 | "tooltip": { 539 | "shared": true, 540 | "sort": 0, 541 | "value_type": "individual" 542 | }, 543 | "type": "graph", 544 | "xaxis": { 545 | "buckets": null, 546 | "mode": "time", 547 | "name": null, 548 | "show": true, 549 | "values": [] 550 | }, 551 | "yaxes": [ 552 | { 553 | "$$hashKey": "object:1460", 554 | "format": "short", 555 | "label": null, 556 | "logBase": 1, 557 | "max": null, 558 | "min": null, 559 | "show": true 560 | }, 561 | { 562 | "$$hashKey": "object:1461", 563 | "format": "short", 564 | "label": null, 565 | "logBase": 1, 566 | "max": null, 567 | "min": null, 568 | "show": true 569 | } 570 | ], 571 | "yaxis": { 572 | "align": false, 573 | "alignLevel": null 574 | } 575 | } 576 | ], 577 | "schemaVersion": 27, 578 | "style": "dark", 579 | "tags": [], 580 | "templating": { 581 | "list": [] 582 | }, 583 | "time": { 584 | "from": "now-15d", 585 | "to": "now" 586 | }, 587 | "timepicker": {}, 588 | "timezone": "", 589 | "title": "Watering", 590 | "uid": "35emHZrMz", 591 | "version": 4 592 | } 593 | -------------------------------------------------------------------------------- /grafana/Local-Weather-Dashboard.json: -------------------------------------------------------------------------------- 1 | { 2 | "annotations": { 3 | "list": [ 4 | { 5 | "builtIn": 1, 6 | "datasource": "-- Grafana --", 7 | "enable": true, 8 | "hide": true, 9 | "iconColor": "rgba(0, 211, 255, 1)", 10 | "name": "Annotations & Alerts", 11 | "type": "dashboard" 12 | } 13 | ] 14 | }, 15 | "editable": true, 16 | "gnetId": null, 17 | "graphTooltip": 0, 18 | "id": 1, 19 | "links": [], 20 | "panels": [ 21 | { 22 | "datasource": null, 23 | "fieldConfig": { 24 | "defaults": { 25 | "custom": {} 26 | }, 27 | "overrides": [] 28 | }, 29 | "gridPos": { 30 | "h": 6, 31 | "w": 5, 32 | "x": 0, 33 | "y": 0 34 | }, 35 | "id": 9, 36 | "options": { 37 | "bgColor": "rgb(20, 22, 25)", 38 | "clockType": "custom", 39 | "countdownSettings": { 40 | "endCountdownTime": "2021-03-14T19:56:01-07:00", 41 | "endText": "00:00:00" 42 | }, 43 | "dateSettings": { 44 | "dateFormat": "YYYY-MM-DD", 45 | "fontSize": "35px", 46 | "fontWeight": "normal", 47 | "showDate": true 48 | }, 49 | "mode": "time", 50 | "timeSettings": { 51 | "customFormat": "HH:mm", 52 | "fontSize": "85px", 53 | "fontWeight": "normal" 54 | }, 55 | "timezone": "", 56 | "timezoneSettings": { 57 | "fontSize": "12px", 58 | "fontWeight": "normal", 59 | "showTimezone": false, 60 | "zoneFormat": "offsetAbbv" 61 | } 62 | }, 63 | "pluginVersion": "7.4.3", 64 | "targets": [ 65 | { 66 | "groupBy": [ 67 | { 68 | "params": [ 69 | "$__interval" 70 | ], 71 | "type": "time" 72 | }, 73 | { 74 | "params": [ 75 | "null" 76 | ], 77 | "type": "fill" 78 | } 79 | ], 80 | "orderByTime": "ASC", 81 | "policy": "default", 82 | "refId": "A", 83 | "resultFormat": "time_series", 84 | "select": [ 85 | [ 86 | { 87 | "params": [ 88 | "value" 89 | ], 90 | "type": "field" 91 | }, 92 | { 93 | "params": [], 94 | "type": "mean" 95 | } 96 | ] 97 | ], 98 | "tags": [] 99 | } 100 | ], 101 | "timeFrom": null, 102 | "timeShift": null, 103 | "title": "", 104 | "type": "grafana-clock-panel" 105 | }, 106 | { 107 | "datasource": null, 108 | "fieldConfig": { 109 | "defaults": { 110 | "color": { 111 | "mode": "thresholds" 112 | }, 113 | "custom": {}, 114 | "mappings": [], 115 | "max": 35, 116 | "min": -5, 117 | "thresholds": { 118 | "mode": "absolute", 119 | "steps": [ 120 | { 121 | "color": "blue", 122 | "value": null 123 | }, 124 | { 125 | "color": "green", 126 | "value": 21 127 | }, 128 | { 129 | "color": "#EAB839", 130 | "value": 24 131 | }, 132 | { 133 | "color": "#6ED0E0", 134 | "value": 35 135 | } 136 | ] 137 | }, 138 | "unit": "celsius" 139 | }, 140 | "overrides": [] 141 | }, 142 | "gridPos": { 143 | "h": 6, 144 | "w": 7, 145 | "x": 5, 146 | "y": 0 147 | }, 148 | "id": 4, 149 | "options": { 150 | "reduceOptions": { 151 | "calcs": [ 152 | "lastNotNull" 153 | ], 154 | "fields": "", 155 | "values": false 156 | }, 157 | "showThresholdLabels": false, 158 | "showThresholdMarkers": true, 159 | "text": {} 160 | }, 161 | "pluginVersion": "7.4.3", 162 | "targets": [ 163 | { 164 | "groupBy": [ 165 | { 166 | "params": [ 167 | "$__interval" 168 | ], 169 | "type": "time" 170 | }, 171 | { 172 | "params": [ 173 | "null" 174 | ], 175 | "type": "fill" 176 | } 177 | ], 178 | "measurement": "http_listener_v2", 179 | "orderByTime": "ASC", 180 | "policy": "default", 181 | "query": "SELECT (mean(\"tempinf\") - 32) * 5 / 9 FROM \"http_listener_v2\" WHERE $timeFilter GROUP BY time($__interval) fill(null)", 182 | "rawQuery": true, 183 | "refId": "A", 184 | "resultFormat": "time_series", 185 | "select": [ 186 | [ 187 | { 188 | "params": [ 189 | "tempinf" 190 | ], 191 | "type": "field" 192 | }, 193 | { 194 | "params": [], 195 | "type": "mean" 196 | }, 197 | { 198 | "params": [ 199 | " ( - 32) / 100" 200 | ], 201 | "type": "math" 202 | } 203 | ] 204 | ], 205 | "tags": [] 206 | } 207 | ], 208 | "timeFrom": "24h", 209 | "title": "Indoor Temperature", 210 | "type": "gauge" 211 | }, 212 | { 213 | "datasource": null, 214 | "fieldConfig": { 215 | "defaults": { 216 | "color": { 217 | "mode": "thresholds" 218 | }, 219 | "custom": {}, 220 | "mappings": [], 221 | "max": 100, 222 | "min": 0, 223 | "thresholds": { 224 | "mode": "absolute", 225 | "steps": [ 226 | { 227 | "color": "light-orange", 228 | "value": null 229 | }, 230 | { 231 | "color": "light-green", 232 | "value": 30 233 | }, 234 | { 235 | "color": "light-blue", 236 | "value": 50 237 | }, 238 | { 239 | "color": "light-blue", 240 | "value": 100 241 | } 242 | ] 243 | }, 244 | "unit": "humidity" 245 | }, 246 | "overrides": [] 247 | }, 248 | "gridPos": { 249 | "h": 6, 250 | "w": 5, 251 | "x": 12, 252 | "y": 0 253 | }, 254 | "id": 7, 255 | "options": { 256 | "displayMode": "gradient", 257 | "orientation": "auto", 258 | "reduceOptions": { 259 | "calcs": [ 260 | "lastNotNull" 261 | ], 262 | "fields": "", 263 | "values": false 264 | }, 265 | "showUnfilled": true, 266 | "text": {} 267 | }, 268 | "pluginVersion": "7.4.3", 269 | "targets": [ 270 | { 271 | "alias": "Indoor Humidity", 272 | "groupBy": [ 273 | { 274 | "params": [ 275 | "$__interval" 276 | ], 277 | "type": "time" 278 | }, 279 | { 280 | "params": [ 281 | "null" 282 | ], 283 | "type": "fill" 284 | } 285 | ], 286 | "measurement": "http_listener_v2", 287 | "orderByTime": "ASC", 288 | "policy": "default", 289 | "refId": "A", 290 | "resultFormat": "time_series", 291 | "select": [ 292 | [ 293 | { 294 | "params": [ 295 | "humidityin" 296 | ], 297 | "type": "field" 298 | }, 299 | { 300 | "params": [], 301 | "type": "mean" 302 | } 303 | ] 304 | ], 305 | "tags": [] 306 | }, 307 | { 308 | "alias": "Outdoor Humidity", 309 | "groupBy": [ 310 | { 311 | "params": [ 312 | "$__interval" 313 | ], 314 | "type": "time" 315 | }, 316 | { 317 | "params": [ 318 | "null" 319 | ], 320 | "type": "fill" 321 | } 322 | ], 323 | "hide": false, 324 | "measurement": "http_listener_v2", 325 | "orderByTime": "ASC", 326 | "policy": "default", 327 | "refId": "B", 328 | "resultFormat": "time_series", 329 | "select": [ 330 | [ 331 | { 332 | "params": [ 333 | "humidity1" 334 | ], 335 | "type": "field" 336 | }, 337 | { 338 | "params": [], 339 | "type": "mean" 340 | } 341 | ] 342 | ], 343 | "tags": [] 344 | } 345 | ], 346 | "timeFrom": "24h", 347 | "title": "Humidity", 348 | "type": "bargauge" 349 | }, 350 | { 351 | "datasource": null, 352 | "fieldConfig": { 353 | "defaults": { 354 | "color": { 355 | "mode": "thresholds" 356 | }, 357 | "custom": {}, 358 | "mappings": [], 359 | "max": 35, 360 | "min": -5, 361 | "thresholds": { 362 | "mode": "absolute", 363 | "steps": [ 364 | { 365 | "color": "blue", 366 | "value": null 367 | }, 368 | { 369 | "color": "green", 370 | "value": 12 371 | }, 372 | { 373 | "color": "#EAB839", 374 | "value": 24 375 | }, 376 | { 377 | "color": "#6ED0E0", 378 | "value": 35 379 | } 380 | ] 381 | }, 382 | "unit": "celsius" 383 | }, 384 | "overrides": [] 385 | }, 386 | "gridPos": { 387 | "h": 6, 388 | "w": 7, 389 | "x": 17, 390 | "y": 0 391 | }, 392 | "id": 5, 393 | "options": { 394 | "reduceOptions": { 395 | "calcs": [ 396 | "lastNotNull" 397 | ], 398 | "fields": "", 399 | "values": false 400 | }, 401 | "showThresholdLabels": false, 402 | "showThresholdMarkers": true, 403 | "text": {} 404 | }, 405 | "pluginVersion": "7.4.3", 406 | "targets": [ 407 | { 408 | "groupBy": [ 409 | { 410 | "params": [ 411 | "$__interval" 412 | ], 413 | "type": "time" 414 | }, 415 | { 416 | "params": [ 417 | "null" 418 | ], 419 | "type": "fill" 420 | } 421 | ], 422 | "measurement": "http_listener_v2", 423 | "orderByTime": "ASC", 424 | "policy": "default", 425 | "query": "SELECT (mean(\"temp1f\") - 32) * 5 / 9 FROM \"http_listener_v2\" WHERE $timeFilter GROUP BY time($__interval) fill(null)", 426 | "rawQuery": true, 427 | "refId": "A", 428 | "resultFormat": "time_series", 429 | "select": [ 430 | [ 431 | { 432 | "params": [ 433 | "tempinf" 434 | ], 435 | "type": "field" 436 | }, 437 | { 438 | "params": [], 439 | "type": "mean" 440 | }, 441 | { 442 | "params": [ 443 | " ( - 32) / 100" 444 | ], 445 | "type": "math" 446 | } 447 | ] 448 | ], 449 | "tags": [] 450 | } 451 | ], 452 | "timeFrom": "24h", 453 | "title": "Outdoor Temperature", 454 | "type": "gauge" 455 | }, 456 | { 457 | "datasource": null, 458 | "description": "", 459 | "fieldConfig": { 460 | "defaults": { 461 | "color": { 462 | "fixedColor": "rgb(255, 255, 255)", 463 | "mode": "continuous-BlPu" 464 | }, 465 | "custom": {}, 466 | "mappings": [], 467 | "thresholds": { 468 | "mode": "absolute", 469 | "steps": [ 470 | { 471 | "color": "green", 472 | "value": null 473 | }, 474 | { 475 | "color": "#EAB839", 476 | "value": 10 477 | }, 478 | { 479 | "color": "#6ED0E0", 480 | "value": 20 481 | } 482 | ] 483 | }, 484 | "unit": "Date & time" 485 | }, 486 | "overrides": [ 487 | { 488 | "matcher": { 489 | "id": "byName", 490 | "options": "Sunrise" 491 | }, 492 | "properties": [ 493 | { 494 | "id": "unit", 495 | "value": "time: hh:mm" 496 | } 497 | ] 498 | }, 499 | { 500 | "matcher": { 501 | "id": "byName", 502 | "options": "Sunset" 503 | }, 504 | "properties": [ 505 | { 506 | "id": "unit", 507 | "value": "time: HH:mm" 508 | } 509 | ] 510 | } 511 | ] 512 | }, 513 | "gridPos": { 514 | "h": 7, 515 | "w": 5, 516 | "x": 0, 517 | "y": 6 518 | }, 519 | "id": 18, 520 | "options": { 521 | "colorMode": "value", 522 | "graphMode": "none", 523 | "justifyMode": "auto", 524 | "orientation": "horizontal", 525 | "reduceOptions": { 526 | "calcs": [ 527 | "lastNotNull" 528 | ], 529 | "fields": "", 530 | "values": false 531 | }, 532 | "text": {}, 533 | "textMode": "value" 534 | }, 535 | "pluginVersion": "7.4.3", 536 | "targets": [ 537 | { 538 | "alias": "", 539 | "groupBy": [], 540 | "measurement": "weather", 541 | "orderByTime": "ASC", 542 | "policy": "default", 543 | "refId": "A", 544 | "resultFormat": "table", 545 | "select": [ 546 | [ 547 | { 548 | "params": [ 549 | "sunrise" 550 | ], 551 | "type": "field" 552 | }, 553 | { 554 | "params": [ 555 | " / 1000 /1000" 556 | ], 557 | "type": "math" 558 | }, 559 | { 560 | "params": [ 561 | "Sunrise" 562 | ], 563 | "type": "alias" 564 | } 565 | ], 566 | [ 567 | { 568 | "params": [ 569 | "sunset" 570 | ], 571 | "type": "field" 572 | }, 573 | { 574 | "params": [ 575 | " / 1000 /1000" 576 | ], 577 | "type": "math" 578 | }, 579 | { 580 | "params": [ 581 | "Sunset" 582 | ], 583 | "type": "alias" 584 | } 585 | ] 586 | ], 587 | "tags": [] 588 | } 589 | ], 590 | "timeFrom": "24h", 591 | "title": "Sunrise & Sunset", 592 | "type": "stat" 593 | }, 594 | { 595 | "datasource": null, 596 | "fieldConfig": { 597 | "defaults": { 598 | "color": { 599 | "mode": "thresholds" 600 | }, 601 | "custom": {}, 602 | "mappings": [ 603 | { 604 | "from": "0.01", 605 | "id": 1, 606 | "text": "Improving", 607 | "to": "1", 608 | "type": 2 609 | }, 610 | { 611 | "from": "-1", 612 | "id": 2, 613 | "text": "Worsening", 614 | "to": "-0.01", 615 | "type": 2 616 | }, 617 | { 618 | "from": "-0.01", 619 | "id": 3, 620 | "text": "Stable", 621 | "to": "0.01", 622 | "type": 2 623 | } 624 | ], 625 | "thresholds": { 626 | "mode": "absolute", 627 | "steps": [] 628 | } 629 | }, 630 | "overrides": [] 631 | }, 632 | "gridPos": { 633 | "h": 7, 634 | "w": 4, 635 | "x": 5, 636 | "y": 6 637 | }, 638 | "id": 11, 639 | "interval": null, 640 | "options": { 641 | "colorMode": "value", 642 | "graphMode": "area", 643 | "justifyMode": "auto", 644 | "orientation": "auto", 645 | "reduceOptions": { 646 | "calcs": [ 647 | "lastNotNull" 648 | ], 649 | "fields": "", 650 | "values": false 651 | }, 652 | "text": {}, 653 | "textMode": "auto" 654 | }, 655 | "pluginVersion": "7.4.3", 656 | "targets": [ 657 | { 658 | "groupBy": [ 659 | { 660 | "params": [ 661 | "3h" 662 | ], 663 | "type": "time" 664 | }, 665 | { 666 | "params": [ 667 | "null" 668 | ], 669 | "type": "fill" 670 | } 671 | ], 672 | "measurement": "http_listener_v2", 673 | "orderByTime": "ASC", 674 | "policy": "default", 675 | "refId": "A", 676 | "resultFormat": "time_series", 677 | "select": [ 678 | [ 679 | { 680 | "params": [ 681 | "baromabsin" 682 | ], 683 | "type": "field" 684 | }, 685 | { 686 | "params": [], 687 | "type": "mean" 688 | }, 689 | { 690 | "params": [ 691 | "1h" 692 | ], 693 | "type": "derivative" 694 | } 695 | ] 696 | ], 697 | "tags": [] 698 | } 699 | ], 700 | "timeFrom": "24h", 701 | "timeShift": null, 702 | "title": " ", 703 | "transformations": [], 704 | "type": "stat" 705 | }, 706 | { 707 | "aliasColors": { 708 | "Rain": "dark-blue", 709 | "weather.rain": "dark-blue" 710 | }, 711 | "bars": false, 712 | "dashLength": 10, 713 | "dashes": false, 714 | "datasource": null, 715 | "decimals": 1, 716 | "fieldConfig": { 717 | "defaults": { 718 | "color": {}, 719 | "custom": {}, 720 | "thresholds": { 721 | "mode": "absolute", 722 | "steps": [] 723 | } 724 | }, 725 | "overrides": [] 726 | }, 727 | "fill": 0, 728 | "fillGradient": 0, 729 | "gridPos": { 730 | "h": 7, 731 | "w": 8, 732 | "x": 9, 733 | "y": 6 734 | }, 735 | "hiddenSeries": false, 736 | "hideTimeOverride": true, 737 | "id": 16, 738 | "interval": "3h", 739 | "legend": { 740 | "alignAsTable": true, 741 | "avg": true, 742 | "current": true, 743 | "max": true, 744 | "min": true, 745 | "rightSide": false, 746 | "show": true, 747 | "total": false, 748 | "values": true 749 | }, 750 | "lines": true, 751 | "linewidth": 2, 752 | "nullPointMode": "null", 753 | "options": { 754 | "alertThreshold": false 755 | }, 756 | "percentage": false, 757 | "pluginVersion": "7.4.3", 758 | "pointradius": 2, 759 | "points": false, 760 | "renderer": "flot", 761 | "seriesOverrides": [ 762 | { 763 | "alias": "weather.rain", 764 | "yaxis": 2 765 | }, 766 | { 767 | "alias": "Rain", 768 | "yaxis": 1 769 | } 770 | ], 771 | "spaceLength": 10, 772 | "stack": false, 773 | "steppedLine": false, 774 | "targets": [ 775 | { 776 | "alias": "Temperature", 777 | "groupBy": [ 778 | { 779 | "params": [ 780 | "$interval" 781 | ], 782 | "type": "time" 783 | } 784 | ], 785 | "measurement": "weather", 786 | "orderByTime": "ASC", 787 | "policy": "default", 788 | "query": "SELECT last(\"temperature\") FROM \"weather\" WHERE $timeFilter GROUP BY time($interval) ", 789 | "rawQuery": false, 790 | "refId": "A", 791 | "resultFormat": "table", 792 | "select": [ 793 | [ 794 | { 795 | "params": [ 796 | "temperature" 797 | ], 798 | "type": "field" 799 | }, 800 | { 801 | "params": [], 802 | "type": "median" 803 | }, 804 | { 805 | "params": [ 806 | "Temperature forecast" 807 | ], 808 | "type": "alias" 809 | } 810 | ] 811 | ], 812 | "tags": [], 813 | "tz": "" 814 | } 815 | ], 816 | "thresholds": [], 817 | "timeFrom": null, 818 | "timeRegions": [], 819 | "timeShift": null, 820 | "title": "Temperature forecast", 821 | "tooltip": { 822 | "shared": true, 823 | "sort": 0, 824 | "value_type": "individual" 825 | }, 826 | "transformations": [], 827 | "type": "graph", 828 | "xaxis": { 829 | "buckets": null, 830 | "mode": "time", 831 | "name": null, 832 | "show": true, 833 | "values": [] 834 | }, 835 | "yaxes": [ 836 | { 837 | "$$hashKey": "object:538", 838 | "format": "celsius", 839 | "label": null, 840 | "logBase": 1, 841 | "max": "25", 842 | "min": "-5", 843 | "show": true 844 | }, 845 | { 846 | "$$hashKey": "object:539", 847 | "format": "lengthmm", 848 | "label": null, 849 | "logBase": 1, 850 | "max": "10", 851 | "min": "0", 852 | "show": false 853 | } 854 | ], 855 | "yaxis": { 856 | "align": false, 857 | "alignLevel": null 858 | } 859 | }, 860 | { 861 | "aliasColors": { 862 | "Rain": "dark-blue", 863 | "weather.rain": "dark-blue" 864 | }, 865 | "bars": true, 866 | "dashLength": 10, 867 | "dashes": false, 868 | "datasource": null, 869 | "fieldConfig": { 870 | "defaults": { 871 | "color": {}, 872 | "custom": {}, 873 | "thresholds": { 874 | "mode": "absolute", 875 | "steps": [] 876 | } 877 | }, 878 | "overrides": [] 879 | }, 880 | "fill": 1, 881 | "fillGradient": 0, 882 | "gridPos": { 883 | "h": 7, 884 | "w": 7, 885 | "x": 17, 886 | "y": 6 887 | }, 888 | "hiddenSeries": false, 889 | "id": 15, 890 | "interval": "3h", 891 | "legend": { 892 | "avg": false, 893 | "current": false, 894 | "max": false, 895 | "min": false, 896 | "show": true, 897 | "total": false, 898 | "values": false 899 | }, 900 | "lines": false, 901 | "linewidth": 2, 902 | "nullPointMode": "null", 903 | "options": { 904 | "alertThreshold": false 905 | }, 906 | "percentage": false, 907 | "pluginVersion": "7.4.3", 908 | "pointradius": 2, 909 | "points": false, 910 | "renderer": "flot", 911 | "seriesOverrides": [ 912 | { 913 | "alias": "weather.rain", 914 | "yaxis": 2 915 | }, 916 | { 917 | "alias": "Rain", 918 | "yaxis": 1 919 | } 920 | ], 921 | "spaceLength": 10, 922 | "stack": false, 923 | "steppedLine": true, 924 | "targets": [ 925 | { 926 | "alias": "Rain", 927 | "groupBy": [ 928 | { 929 | "params": [ 930 | "$interval" 931 | ], 932 | "type": "time" 933 | } 934 | ], 935 | "measurement": "weather", 936 | "orderByTime": "ASC", 937 | "policy": "default", 938 | "refId": "A", 939 | "resultFormat": "time_series", 940 | "select": [ 941 | [ 942 | { 943 | "params": [ 944 | "rain" 945 | ], 946 | "type": "field" 947 | }, 948 | { 949 | "params": [], 950 | "type": "median" 951 | } 952 | ] 953 | ], 954 | "tags": [] 955 | } 956 | ], 957 | "thresholds": [], 958 | "timeFrom": null, 959 | "timeRegions": [], 960 | "timeShift": null, 961 | "title": "Rain for the next 24h", 962 | "tooltip": { 963 | "shared": true, 964 | "sort": 0, 965 | "value_type": "individual" 966 | }, 967 | "type": "graph", 968 | "xaxis": { 969 | "buckets": null, 970 | "mode": "time", 971 | "name": null, 972 | "show": true, 973 | "values": [] 974 | }, 975 | "yaxes": [ 976 | { 977 | "$$hashKey": "object:538", 978 | "format": "lengthmm", 979 | "label": null, 980 | "logBase": 1, 981 | "max": "15", 982 | "min": "0", 983 | "show": true 984 | }, 985 | { 986 | "$$hashKey": "object:539", 987 | "format": "lengthmm", 988 | "label": null, 989 | "logBase": 1, 990 | "max": "10", 991 | "min": "0", 992 | "show": false 993 | } 994 | ], 995 | "yaxis": { 996 | "align": false, 997 | "alignLevel": null 998 | } 999 | }, 1000 | { 1001 | "datasource": null, 1002 | "fieldConfig": { 1003 | "defaults": { 1004 | "color": { 1005 | "mode": "palette-classic" 1006 | }, 1007 | "custom": { 1008 | "axisLabel": "", 1009 | "axisPlacement": "auto", 1010 | "barAlignment": 0, 1011 | "drawStyle": "line", 1012 | "fillOpacity": 10, 1013 | "gradientMode": "opacity", 1014 | "hideFrom": { 1015 | "graph": false, 1016 | "legend": false, 1017 | "tooltip": false 1018 | }, 1019 | "lineInterpolation": "linear", 1020 | "lineWidth": 1, 1021 | "pointSize": 5, 1022 | "scaleDistribution": { 1023 | "type": "linear" 1024 | }, 1025 | "showPoints": "never", 1026 | "spanNulls": true 1027 | }, 1028 | "mappings": [], 1029 | "max": 35, 1030 | "min": -5, 1031 | "thresholds": { 1032 | "mode": "absolute", 1033 | "steps": [ 1034 | { 1035 | "color": "green", 1036 | "value": null 1037 | }, 1038 | { 1039 | "color": "red", 1040 | "value": 80 1041 | } 1042 | ] 1043 | }, 1044 | "unit": "celsius" 1045 | }, 1046 | "overrides": [] 1047 | }, 1048 | "gridPos": { 1049 | "h": 8, 1050 | "w": 24, 1051 | "x": 0, 1052 | "y": 13 1053 | }, 1054 | "id": 2, 1055 | "options": { 1056 | "graph": {}, 1057 | "legend": { 1058 | "calcs": [ 1059 | "min", 1060 | "max" 1061 | ], 1062 | "displayMode": "table", 1063 | "placement": "right" 1064 | }, 1065 | "tooltipOptions": { 1066 | "mode": "single" 1067 | } 1068 | }, 1069 | "pluginVersion": "7.4.3", 1070 | "targets": [ 1071 | { 1072 | "alias": "Indoor", 1073 | "groupBy": [ 1074 | { 1075 | "params": [ 1076 | "$__interval" 1077 | ], 1078 | "type": "time" 1079 | }, 1080 | { 1081 | "params": [ 1082 | "null" 1083 | ], 1084 | "type": "fill" 1085 | } 1086 | ], 1087 | "measurement": "http_listener_v2", 1088 | "orderByTime": "ASC", 1089 | "policy": "default", 1090 | "query": "SELECT (mean(\"tempinf\")-32) * 5/9 FROM \"http_listener_v2\" WHERE $timeFilter GROUP BY time($__interval) fill(null)", 1091 | "rawQuery": true, 1092 | "refId": "A", 1093 | "resultFormat": "time_series", 1094 | "select": [ 1095 | [ 1096 | { 1097 | "params": [ 1098 | "tempinf" 1099 | ], 1100 | "type": "field" 1101 | }, 1102 | { 1103 | "params": [], 1104 | "type": "mean" 1105 | } 1106 | ] 1107 | ], 1108 | "tags": [] 1109 | }, 1110 | { 1111 | "alias": "Outdoor", 1112 | "groupBy": [ 1113 | { 1114 | "params": [ 1115 | "$__interval" 1116 | ], 1117 | "type": "time" 1118 | }, 1119 | { 1120 | "params": [ 1121 | "null" 1122 | ], 1123 | "type": "fill" 1124 | } 1125 | ], 1126 | "hide": false, 1127 | "measurement": "http_listener_v2", 1128 | "orderByTime": "ASC", 1129 | "policy": "default", 1130 | "query": "SELECT (mean(\"temp1f\")-32)*5/9 FROM \"http_listener_v2\" WHERE $timeFilter GROUP BY time($__interval) fill(null)", 1131 | "rawQuery": true, 1132 | "refId": "B", 1133 | "resultFormat": "time_series", 1134 | "select": [ 1135 | [ 1136 | { 1137 | "params": [ 1138 | "temp1f" 1139 | ], 1140 | "type": "field" 1141 | }, 1142 | { 1143 | "params": [], 1144 | "type": "mean" 1145 | } 1146 | ] 1147 | ], 1148 | "tags": [] 1149 | } 1150 | ], 1151 | "timeFrom": "24h", 1152 | "timeShift": null, 1153 | "title": "", 1154 | "type": "timeseries" 1155 | }, 1156 | { 1157 | "aliasColors": {}, 1158 | "bars": false, 1159 | "dashLength": 10, 1160 | "dashes": false, 1161 | "datasource": null, 1162 | "fieldConfig": { 1163 | "defaults": { 1164 | "custom": {} 1165 | }, 1166 | "overrides": [] 1167 | }, 1168 | "fill": 1, 1169 | "fillGradient": 0, 1170 | "gridPos": { 1171 | "h": 7, 1172 | "w": 24, 1173 | "x": 0, 1174 | "y": 21 1175 | }, 1176 | "hiddenSeries": false, 1177 | "id": 13, 1178 | "legend": { 1179 | "avg": false, 1180 | "current": false, 1181 | "max": false, 1182 | "min": false, 1183 | "show": true, 1184 | "total": false, 1185 | "values": false 1186 | }, 1187 | "lines": true, 1188 | "linewidth": 1, 1189 | "nullPointMode": "null", 1190 | "options": { 1191 | "alertThreshold": true 1192 | }, 1193 | "percentage": false, 1194 | "pluginVersion": "7.4.3", 1195 | "pointradius": 2, 1196 | "points": false, 1197 | "renderer": "flot", 1198 | "seriesOverrides": [], 1199 | "spaceLength": 10, 1200 | "stack": false, 1201 | "steppedLine": false, 1202 | "targets": [ 1203 | { 1204 | "groupBy": [ 1205 | { 1206 | "params": [ 1207 | "$__interval" 1208 | ], 1209 | "type": "time" 1210 | }, 1211 | { 1212 | "params": [ 1213 | "null" 1214 | ], 1215 | "type": "fill" 1216 | } 1217 | ], 1218 | "measurement": "http_listener_v2", 1219 | "orderByTime": "ASC", 1220 | "policy": "default", 1221 | "refId": "A", 1222 | "resultFormat": "time_series", 1223 | "select": [ 1224 | [ 1225 | { 1226 | "params": [ 1227 | "baromrelin" 1228 | ], 1229 | "type": "field" 1230 | }, 1231 | { 1232 | "params": [], 1233 | "type": "mean" 1234 | } 1235 | ] 1236 | ], 1237 | "tags": [] 1238 | } 1239 | ], 1240 | "thresholds": [], 1241 | "timeFrom": "24h", 1242 | "timeRegions": [], 1243 | "timeShift": null, 1244 | "title": "Barometric Pressure", 1245 | "tooltip": { 1246 | "shared": true, 1247 | "sort": 0, 1248 | "value_type": "individual" 1249 | }, 1250 | "type": "graph", 1251 | "xaxis": { 1252 | "buckets": null, 1253 | "mode": "time", 1254 | "name": null, 1255 | "show": true, 1256 | "values": [] 1257 | }, 1258 | "yaxes": [ 1259 | { 1260 | "$$hashKey": "object:276", 1261 | "format": "short", 1262 | "label": null, 1263 | "logBase": 1, 1264 | "max": null, 1265 | "min": null, 1266 | "show": true 1267 | }, 1268 | { 1269 | "$$hashKey": "object:277", 1270 | "format": "short", 1271 | "label": null, 1272 | "logBase": 1, 1273 | "max": null, 1274 | "min": null, 1275 | "show": true 1276 | } 1277 | ], 1278 | "yaxis": { 1279 | "align": false, 1280 | "alignLevel": null 1281 | } 1282 | } 1283 | ], 1284 | "refresh": "5m", 1285 | "schemaVersion": 27, 1286 | "style": "dark", 1287 | "tags": [], 1288 | "templating": { 1289 | "list": [] 1290 | }, 1291 | "time": { 1292 | "from": "now", 1293 | "to": "now+24h" 1294 | }, 1295 | "timepicker": {}, 1296 | "timezone": "", 1297 | "title": "Local Weather", 1298 | "uid": "iJpRv_8Gk", 1299 | "version": 22 1300 | } 1301 | -------------------------------------------------------------------------------- /grafana/Local-Weather-Dashboard-2.0.json: -------------------------------------------------------------------------------- 1 | { 2 | "annotations": { 3 | "list": [ 4 | { 5 | "builtIn": 1, 6 | "datasource": "-- Grafana --", 7 | "enable": true, 8 | "hide": true, 9 | "iconColor": "rgba(0, 211, 255, 1)", 10 | "name": "Annotations & Alerts", 11 | "type": "dashboard" 12 | } 13 | ] 14 | }, 15 | "editable": true, 16 | "gnetId": null, 17 | "graphTooltip": 0, 18 | "id": 1, 19 | "links": [], 20 | "panels": [ 21 | { 22 | "datasource": null, 23 | "fieldConfig": { 24 | "defaults": { 25 | "color": { 26 | "mode": "thresholds" 27 | }, 28 | "mappings": [], 29 | "thresholds": { 30 | "mode": "absolute", 31 | "steps": [ 32 | { 33 | "color": "green", 34 | "value": null 35 | }, 36 | { 37 | "color": "#6ED0E0", 38 | "value": -10 39 | }, 40 | { 41 | "color": "semi-dark-green", 42 | "value": 12 43 | }, 44 | { 45 | "color": "#EAB839", 46 | "value": 24 47 | }, 48 | { 49 | "color": "red", 50 | "value": 36 51 | }, 52 | { 53 | "color": "rgb(52, 2, 2)", 54 | "value": 48 55 | } 56 | ] 57 | }, 58 | "unit": "celsius" 59 | }, 60 | "overrides": [] 61 | }, 62 | "gridPos": { 63 | "h": 6, 64 | "w": 9, 65 | "x": 0, 66 | "y": 0 67 | }, 68 | "hideTimeOverride": true, 69 | "id": 5, 70 | "options": { 71 | "colorMode": "value", 72 | "graphMode": "area", 73 | "justifyMode": "auto", 74 | "orientation": "auto", 75 | "reduceOptions": { 76 | "calcs": [ 77 | "lastNotNull" 78 | ], 79 | "fields": "", 80 | "values": false 81 | }, 82 | "text": { 83 | "valueSize": 50 84 | }, 85 | "textMode": "auto" 86 | }, 87 | "pluginVersion": "7.5.5", 88 | "targets": [ 89 | { 90 | "groupBy": [ 91 | { 92 | "params": [ 93 | "$__interval" 94 | ], 95 | "type": "time" 96 | }, 97 | { 98 | "params": [ 99 | "null" 100 | ], 101 | "type": "fill" 102 | } 103 | ], 104 | "measurement": "http_listener_v2", 105 | "orderByTime": "ASC", 106 | "policy": "default", 107 | "query": "SELECT (mean(\"temp1f\") - 32) * 5 / 9 FROM \"http_listener_v2\" WHERE $timeFilter GROUP BY time($__interval) fill(null)", 108 | "rawQuery": true, 109 | "refId": "A", 110 | "resultFormat": "time_series", 111 | "select": [ 112 | [ 113 | { 114 | "params": [ 115 | "tempinf" 116 | ], 117 | "type": "field" 118 | }, 119 | { 120 | "params": [], 121 | "type": "mean" 122 | }, 123 | { 124 | "params": [ 125 | " ( - 32) / 100" 126 | ], 127 | "type": "math" 128 | } 129 | ] 130 | ], 131 | "tags": [] 132 | } 133 | ], 134 | "timeFrom": "24h", 135 | "timeShift": null, 136 | "title": "Outdoor Temperature", 137 | "type": "stat" 138 | }, 139 | { 140 | "datasource": null, 141 | "fieldConfig": { 142 | "defaults": { 143 | "color": { 144 | "mode": "thresholds" 145 | }, 146 | "mappings": [], 147 | "thresholds": { 148 | "mode": "absolute", 149 | "steps": [ 150 | { 151 | "color": "green", 152 | "value": null 153 | }, 154 | { 155 | "color": "#6ED0E0", 156 | "value": -10 157 | }, 158 | { 159 | "color": "semi-dark-green", 160 | "value": 12 161 | }, 162 | { 163 | "color": "#EAB839", 164 | "value": 24 165 | }, 166 | { 167 | "color": "red", 168 | "value": 36 169 | }, 170 | { 171 | "color": "rgb(52, 2, 2)", 172 | "value": 48 173 | } 174 | ] 175 | }, 176 | "unit": "celsius" 177 | }, 178 | "overrides": [] 179 | }, 180 | "gridPos": { 181 | "h": 6, 182 | "w": 7, 183 | "x": 9, 184 | "y": 0 185 | }, 186 | "hideTimeOverride": true, 187 | "id": 24, 188 | "options": { 189 | "colorMode": "value", 190 | "graphMode": "area", 191 | "justifyMode": "auto", 192 | "orientation": "auto", 193 | "reduceOptions": { 194 | "calcs": [ 195 | "lastNotNull" 196 | ], 197 | "fields": "", 198 | "values": false 199 | }, 200 | "text": { 201 | "valueSize": 50 202 | }, 203 | "textMode": "auto" 204 | }, 205 | "pluginVersion": "7.5.5", 206 | "targets": [ 207 | { 208 | "groupBy": [ 209 | { 210 | "params": [ 211 | "$__interval" 212 | ], 213 | "type": "time" 214 | }, 215 | { 216 | "params": [ 217 | "null" 218 | ], 219 | "type": "fill" 220 | } 221 | ], 222 | "measurement": "http_listener_v2", 223 | "orderByTime": "ASC", 224 | "policy": "default", 225 | "query": "SELECT (mean(\"tempinf\") - 32) * 5 / 9 FROM \"http_listener_v2\" WHERE $timeFilter GROUP BY time($__interval) fill(null)", 226 | "rawQuery": true, 227 | "refId": "A", 228 | "resultFormat": "time_series", 229 | "select": [ 230 | [ 231 | { 232 | "params": [ 233 | "tempinf" 234 | ], 235 | "type": "field" 236 | }, 237 | { 238 | "params": [], 239 | "type": "mean" 240 | }, 241 | { 242 | "params": [ 243 | " ( - 32) / 100" 244 | ], 245 | "type": "math" 246 | } 247 | ] 248 | ], 249 | "tags": [] 250 | } 251 | ], 252 | "timeFrom": "24h", 253 | "timeShift": null, 254 | "title": "Indoor Temperature", 255 | "type": "stat" 256 | }, 257 | { 258 | "datasource": null, 259 | "fieldConfig": { 260 | "defaults": { 261 | "color": { 262 | "mode": "thresholds" 263 | }, 264 | "mappings": [], 265 | "max": 60, 266 | "min": 0, 267 | "thresholds": { 268 | "mode": "absolute", 269 | "steps": [ 270 | { 271 | "color": "rgb(255, 255, 255)", 272 | "value": null 273 | }, 274 | { 275 | "color": "dark-green", 276 | "value": 10 277 | }, 278 | { 279 | "color": "dark-yellow", 280 | "value": 20 281 | }, 282 | { 283 | "color": "red", 284 | "value": 30 285 | }, 286 | { 287 | "color": "rgb(75, 1, 3)", 288 | "value": 40 289 | } 290 | ] 291 | }, 292 | "unit": "celsius" 293 | }, 294 | "overrides": [] 295 | }, 296 | "gridPos": { 297 | "h": 6, 298 | "w": 8, 299 | "x": 16, 300 | "y": 0 301 | }, 302 | "hideTimeOverride": true, 303 | "id": 23, 304 | "options": { 305 | "colorMode": "value", 306 | "graphMode": "area", 307 | "justifyMode": "auto", 308 | "orientation": "auto", 309 | "reduceOptions": { 310 | "calcs": [ 311 | "lastNotNull" 312 | ], 313 | "fields": "", 314 | "values": false 315 | }, 316 | "text": { 317 | "valueSize": 50 318 | }, 319 | "textMode": "value" 320 | }, 321 | "pluginVersion": "7.5.5", 322 | "targets": [ 323 | { 324 | "groupBy": [ 325 | { 326 | "params": [ 327 | "$__interval" 328 | ], 329 | "type": "time" 330 | }, 331 | { 332 | "params": [ 333 | "null" 334 | ], 335 | "type": "fill" 336 | } 337 | ], 338 | "measurement": "http_listener_v2", 339 | "orderByTime": "ASC", 340 | "policy": "default", 341 | "query": "SELECT (mean(\"temp5f\") - 32) * 5 / 9 FROM \"http_listener_v2\" WHERE $timeFilter GROUP BY time($__interval) fill(null)", 342 | "rawQuery": true, 343 | "refId": "A", 344 | "resultFormat": "time_series", 345 | "select": [ 346 | [ 347 | { 348 | "params": [ 349 | "tempinf" 350 | ], 351 | "type": "field" 352 | }, 353 | { 354 | "params": [], 355 | "type": "mean" 356 | }, 357 | { 358 | "params": [ 359 | " ( - 32) / 100" 360 | ], 361 | "type": "math" 362 | } 363 | ] 364 | ], 365 | "tags": [] 366 | } 367 | ], 368 | "timeFrom": "24h", 369 | "timeShift": null, 370 | "title": "Master Bedroom Temperature", 371 | "type": "stat" 372 | }, 373 | { 374 | "datasource": null, 375 | "fieldConfig": { 376 | "defaults": {}, 377 | "overrides": [] 378 | }, 379 | "gridPos": { 380 | "h": 7, 381 | "w": 6, 382 | "x": 0, 383 | "y": 6 384 | }, 385 | "id": 9, 386 | "options": { 387 | "bgColor": "rgb(20, 22, 25)", 388 | "clockType": "custom", 389 | "countdownSettings": { 390 | "endCountdownTime": "2021-03-14T19:56:01-07:00", 391 | "endText": "00:00:00" 392 | }, 393 | "dateSettings": { 394 | "dateFormat": "YYYY-MM-DD", 395 | "fontSize": "35px", 396 | "fontWeight": "normal", 397 | "showDate": true 398 | }, 399 | "mode": "time", 400 | "timeSettings": { 401 | "customFormat": "HH:mm", 402 | "fontSize": "85px", 403 | "fontWeight": "normal" 404 | }, 405 | "timezone": "", 406 | "timezoneSettings": { 407 | "fontSize": "12px", 408 | "fontWeight": "normal", 409 | "showTimezone": false, 410 | "zoneFormat": "offsetAbbv" 411 | } 412 | }, 413 | "pluginVersion": "7.4.3", 414 | "targets": [ 415 | { 416 | "groupBy": [ 417 | { 418 | "params": [ 419 | "$__interval" 420 | ], 421 | "type": "time" 422 | }, 423 | { 424 | "params": [ 425 | "null" 426 | ], 427 | "type": "fill" 428 | } 429 | ], 430 | "orderByTime": "ASC", 431 | "policy": "default", 432 | "refId": "A", 433 | "resultFormat": "time_series", 434 | "select": [ 435 | [ 436 | { 437 | "params": [ 438 | "value" 439 | ], 440 | "type": "field" 441 | }, 442 | { 443 | "params": [], 444 | "type": "mean" 445 | } 446 | ] 447 | ], 448 | "tags": [] 449 | } 450 | ], 451 | "timeFrom": null, 452 | "timeShift": null, 453 | "type": "grafana-clock-panel" 454 | }, 455 | { 456 | "aliasColors": { 457 | "Rain": "dark-blue", 458 | "weather.rain": "dark-blue" 459 | }, 460 | "bars": true, 461 | "dashLength": 10, 462 | "dashes": false, 463 | "datasource": null, 464 | "fieldConfig": { 465 | "defaults": {}, 466 | "overrides": [] 467 | }, 468 | "fill": 1, 469 | "fillGradient": 0, 470 | "gridPos": { 471 | "h": 7, 472 | "w": 10, 473 | "x": 6, 474 | "y": 6 475 | }, 476 | "hiddenSeries": false, 477 | "id": 15, 478 | "interval": "3h", 479 | "legend": { 480 | "avg": false, 481 | "current": false, 482 | "max": false, 483 | "min": false, 484 | "show": true, 485 | "total": false, 486 | "values": false 487 | }, 488 | "lines": false, 489 | "linewidth": 2, 490 | "nullPointMode": "null", 491 | "options": { 492 | "alertThreshold": false 493 | }, 494 | "percentage": false, 495 | "pluginVersion": "7.5.5", 496 | "pointradius": 2, 497 | "points": false, 498 | "renderer": "flot", 499 | "seriesOverrides": [ 500 | { 501 | "alias": "weather.rain", 502 | "yaxis": 2 503 | }, 504 | { 505 | "alias": "Rain", 506 | "yaxis": 1 507 | } 508 | ], 509 | "spaceLength": 10, 510 | "stack": false, 511 | "steppedLine": true, 512 | "targets": [ 513 | { 514 | "alias": "Rain", 515 | "groupBy": [ 516 | { 517 | "params": [ 518 | "$interval" 519 | ], 520 | "type": "time" 521 | } 522 | ], 523 | "measurement": "weather", 524 | "orderByTime": "ASC", 525 | "policy": "default", 526 | "refId": "A", 527 | "resultFormat": "time_series", 528 | "select": [ 529 | [ 530 | { 531 | "params": [ 532 | "rain" 533 | ], 534 | "type": "field" 535 | }, 536 | { 537 | "params": [], 538 | "type": "median" 539 | } 540 | ] 541 | ], 542 | "tags": [] 543 | } 544 | ], 545 | "thresholds": [], 546 | "timeFrom": null, 547 | "timeRegions": [], 548 | "timeShift": null, 549 | "title": "Rain for the next 24h", 550 | "tooltip": { 551 | "shared": true, 552 | "sort": 0, 553 | "value_type": "individual" 554 | }, 555 | "type": "graph", 556 | "xaxis": { 557 | "buckets": null, 558 | "mode": "time", 559 | "name": null, 560 | "show": true, 561 | "values": [] 562 | }, 563 | "yaxes": [ 564 | { 565 | "$$hashKey": "object:538", 566 | "format": "lengthmm", 567 | "label": null, 568 | "logBase": 1, 569 | "max": "15", 570 | "min": "0", 571 | "show": true 572 | }, 573 | { 574 | "$$hashKey": "object:539", 575 | "format": "lengthmm", 576 | "label": null, 577 | "logBase": 1, 578 | "max": "10", 579 | "min": "0", 580 | "show": false 581 | } 582 | ], 583 | "yaxis": { 584 | "align": false, 585 | "alignLevel": null 586 | } 587 | }, 588 | { 589 | "datasource": null, 590 | "fieldConfig": { 591 | "defaults": { 592 | "color": { 593 | "mode": "thresholds" 594 | }, 595 | "mappings": [], 596 | "max": 100, 597 | "min": 5, 598 | "thresholds": { 599 | "mode": "absolute", 600 | "steps": [ 601 | { 602 | "color": "green", 603 | "value": null 604 | }, 605 | { 606 | "color": "#EAB839", 607 | "value": 5 608 | }, 609 | { 610 | "color": "dark-green", 611 | "value": 35 612 | }, 613 | { 614 | "color": "red", 615 | "value": 80 616 | } 617 | ] 618 | } 619 | }, 620 | "overrides": [] 621 | }, 622 | "gridPos": { 623 | "h": 7, 624 | "w": 8, 625 | "x": 16, 626 | "y": 6 627 | }, 628 | "hideTimeOverride": true, 629 | "id": 7, 630 | "options": { 631 | "displayMode": "gradient", 632 | "orientation": "horizontal", 633 | "reduceOptions": { 634 | "calcs": [ 635 | "lastNotNull" 636 | ], 637 | "fields": "", 638 | "values": false 639 | }, 640 | "showUnfilled": true, 641 | "text": {} 642 | }, 643 | "pluginVersion": "7.5.5", 644 | "targets": [ 645 | { 646 | "alias": "Indoor Humidity", 647 | "groupBy": [ 648 | { 649 | "params": [ 650 | "$__interval" 651 | ], 652 | "type": "time" 653 | }, 654 | { 655 | "params": [ 656 | "null" 657 | ], 658 | "type": "fill" 659 | } 660 | ], 661 | "measurement": "http_listener_v2", 662 | "orderByTime": "ASC", 663 | "policy": "default", 664 | "refId": "A", 665 | "resultFormat": "time_series", 666 | "select": [ 667 | [ 668 | { 669 | "params": [ 670 | "humidityin" 671 | ], 672 | "type": "field" 673 | }, 674 | { 675 | "params": [], 676 | "type": "mean" 677 | } 678 | ] 679 | ], 680 | "tags": [] 681 | }, 682 | { 683 | "alias": "Outdoor Humidity", 684 | "groupBy": [ 685 | { 686 | "params": [ 687 | "$__interval" 688 | ], 689 | "type": "time" 690 | }, 691 | { 692 | "params": [ 693 | "null" 694 | ], 695 | "type": "fill" 696 | } 697 | ], 698 | "hide": false, 699 | "measurement": "http_listener_v2", 700 | "orderByTime": "ASC", 701 | "policy": "default", 702 | "refId": "B", 703 | "resultFormat": "time_series", 704 | "select": [ 705 | [ 706 | { 707 | "params": [ 708 | "humidity1" 709 | ], 710 | "type": "field" 711 | }, 712 | { 713 | "params": [], 714 | "type": "mean" 715 | } 716 | ] 717 | ], 718 | "tags": [] 719 | }, 720 | { 721 | "alias": "$col", 722 | "groupBy": [ 723 | { 724 | "params": [ 725 | "$__interval" 726 | ], 727 | "type": "time" 728 | }, 729 | { 730 | "params": [ 731 | "null" 732 | ], 733 | "type": "fill" 734 | } 735 | ], 736 | "hide": false, 737 | "measurement": "http_listener_v2", 738 | "orderByTime": "ASC", 739 | "policy": "default", 740 | "refId": "C", 741 | "resultFormat": "time_series", 742 | "select": [ 743 | [ 744 | { 745 | "params": [ 746 | "soilmoisture1" 747 | ], 748 | "type": "field" 749 | }, 750 | { 751 | "params": [], 752 | "type": "mean" 753 | }, 754 | { 755 | "params": [ 756 | "Planter" 757 | ], 758 | "type": "alias" 759 | } 760 | ], 761 | [ 762 | { 763 | "params": [ 764 | "soilmoisture2" 765 | ], 766 | "type": "field" 767 | }, 768 | { 769 | "params": [], 770 | "type": "mean" 771 | }, 772 | { 773 | "params": [ 774 | "Bonsai" 775 | ], 776 | "type": "alias" 777 | } 778 | ] 779 | ], 780 | "tags": [] 781 | }, 782 | { 783 | "alias": "Master Bedroom", 784 | "groupBy": [ 785 | { 786 | "params": [ 787 | "$__interval" 788 | ], 789 | "type": "time" 790 | }, 791 | { 792 | "params": [ 793 | "null" 794 | ], 795 | "type": "fill" 796 | } 797 | ], 798 | "hide": false, 799 | "measurement": "http_listener_v2", 800 | "orderByTime": "ASC", 801 | "policy": "default", 802 | "refId": "D", 803 | "resultFormat": "time_series", 804 | "select": [ 805 | [ 806 | { 807 | "params": [ 808 | "humidity5" 809 | ], 810 | "type": "field" 811 | }, 812 | { 813 | "params": [], 814 | "type": "mean" 815 | }, 816 | { 817 | "params": [ 818 | "Planter" 819 | ], 820 | "type": "alias" 821 | } 822 | ] 823 | ], 824 | "tags": [] 825 | } 826 | ], 827 | "timeFrom": "24h", 828 | "timeShift": null, 829 | "title": "Humidity", 830 | "type": "bargauge" 831 | }, 832 | { 833 | "datasource": null, 834 | "fieldConfig": { 835 | "defaults": { 836 | "color": { 837 | "mode": "thresholds" 838 | }, 839 | "mappings": [], 840 | "min": -0.05, 841 | "thresholds": { 842 | "mode": "absolute", 843 | "steps": [ 844 | { 845 | "color": "rgb(45, 0, 2)", 846 | "value": null 847 | }, 848 | { 849 | "color": "dark-red", 850 | "value": -0.03 851 | }, 852 | { 853 | "color": "dark-yellow", 854 | "value": -0.015 855 | }, 856 | { 857 | "color": "light-green", 858 | "value": -0.005 859 | }, 860 | { 861 | "color": "dark-green", 862 | "value": 0.005 863 | } 864 | ] 865 | }, 866 | "unit": "short" 867 | }, 868 | "overrides": [] 869 | }, 870 | "gridPos": { 871 | "h": 3, 872 | "w": 9, 873 | "x": 0, 874 | "y": 13 875 | }, 876 | "hideTimeOverride": true, 877 | "id": 11, 878 | "interval": null, 879 | "options": { 880 | "colorMode": "value", 881 | "graphMode": "area", 882 | "justifyMode": "auto", 883 | "orientation": "auto", 884 | "reduceOptions": { 885 | "calcs": [ 886 | "lastNotNull" 887 | ], 888 | "fields": "", 889 | "values": false 890 | }, 891 | "text": {}, 892 | "textMode": "auto" 893 | }, 894 | "pluginVersion": "7.5.5", 895 | "targets": [ 896 | { 897 | "groupBy": [ 898 | { 899 | "params": [ 900 | "3h" 901 | ], 902 | "type": "time" 903 | }, 904 | { 905 | "params": [ 906 | "null" 907 | ], 908 | "type": "fill" 909 | } 910 | ], 911 | "measurement": "http_listener_v2", 912 | "orderByTime": "ASC", 913 | "policy": "default", 914 | "refId": "A", 915 | "resultFormat": "time_series", 916 | "select": [ 917 | [ 918 | { 919 | "params": [ 920 | "baromabsin" 921 | ], 922 | "type": "field" 923 | }, 924 | { 925 | "params": [], 926 | "type": "mean" 927 | }, 928 | { 929 | "params": [ 930 | "1h" 931 | ], 932 | "type": "derivative" 933 | } 934 | ] 935 | ], 936 | "tags": [] 937 | } 938 | ], 939 | "timeFrom": "24h", 940 | "timeShift": null, 941 | "title": " Barometric Pressure Change", 942 | "transformations": [], 943 | "type": "stat" 944 | }, 945 | { 946 | "datasource": null, 947 | "description": "", 948 | "fieldConfig": { 949 | "defaults": { 950 | "color": { 951 | "fixedColor": "rgb(255, 255, 255)", 952 | "mode": "continuous-BlPu" 953 | }, 954 | "mappings": [], 955 | "thresholds": { 956 | "mode": "absolute", 957 | "steps": [ 958 | { 959 | "color": "green", 960 | "value": null 961 | }, 962 | { 963 | "color": "#EAB839", 964 | "value": 10 965 | }, 966 | { 967 | "color": "#6ED0E0", 968 | "value": 20 969 | } 970 | ] 971 | }, 972 | "unit": "Date & time" 973 | }, 974 | "overrides": [ 975 | { 976 | "matcher": { 977 | "id": "byName", 978 | "options": "Sunrise" 979 | }, 980 | "properties": [ 981 | { 982 | "id": "unit", 983 | "value": "time: hh:mm" 984 | } 985 | ] 986 | }, 987 | { 988 | "matcher": { 989 | "id": "byName", 990 | "options": "Sunset" 991 | }, 992 | "properties": [ 993 | { 994 | "id": "unit", 995 | "value": "time: HH:mm" 996 | } 997 | ] 998 | } 999 | ] 1000 | }, 1001 | "gridPos": { 1002 | "h": 3, 1003 | "w": 6, 1004 | "x": 9, 1005 | "y": 13 1006 | }, 1007 | "hideTimeOverride": true, 1008 | "id": 18, 1009 | "options": { 1010 | "colorMode": "value", 1011 | "graphMode": "none", 1012 | "justifyMode": "auto", 1013 | "orientation": "vertical", 1014 | "reduceOptions": { 1015 | "calcs": [ 1016 | "lastNotNull" 1017 | ], 1018 | "fields": "", 1019 | "values": false 1020 | }, 1021 | "text": {}, 1022 | "textMode": "value" 1023 | }, 1024 | "pluginVersion": "7.5.5", 1025 | "targets": [ 1026 | { 1027 | "alias": "", 1028 | "groupBy": [], 1029 | "measurement": "weather", 1030 | "orderByTime": "ASC", 1031 | "policy": "default", 1032 | "refId": "A", 1033 | "resultFormat": "table", 1034 | "select": [ 1035 | [ 1036 | { 1037 | "params": [ 1038 | "sunrise" 1039 | ], 1040 | "type": "field" 1041 | }, 1042 | { 1043 | "params": [ 1044 | " / 1000 /1000" 1045 | ], 1046 | "type": "math" 1047 | }, 1048 | { 1049 | "params": [ 1050 | "Sunrise" 1051 | ], 1052 | "type": "alias" 1053 | } 1054 | ], 1055 | [ 1056 | { 1057 | "params": [ 1058 | "sunset" 1059 | ], 1060 | "type": "field" 1061 | }, 1062 | { 1063 | "params": [ 1064 | " / 1000 /1000" 1065 | ], 1066 | "type": "math" 1067 | }, 1068 | { 1069 | "params": [ 1070 | "Sunset" 1071 | ], 1072 | "type": "alias" 1073 | } 1074 | ] 1075 | ], 1076 | "tags": [] 1077 | } 1078 | ], 1079 | "timeFrom": "24h", 1080 | "title": "Sunrise & Sunset", 1081 | "type": "stat" 1082 | }, 1083 | { 1084 | "datasource": null, 1085 | "description": "", 1086 | "fieldConfig": { 1087 | "defaults": { 1088 | "color": { 1089 | "mode": "thresholds" 1090 | }, 1091 | "mappings": [], 1092 | "thresholds": { 1093 | "mode": "absolute", 1094 | "steps": [ 1095 | { 1096 | "color": "green", 1097 | "value": null 1098 | } 1099 | ] 1100 | }, 1101 | "unit": "d" 1102 | }, 1103 | "overrides": [] 1104 | }, 1105 | "gridPos": { 1106 | "h": 3, 1107 | "w": 9, 1108 | "x": 15, 1109 | "y": 13 1110 | }, 1111 | "hideTimeOverride": true, 1112 | "id": 22, 1113 | "interval": "5m", 1114 | "options": { 1115 | "colorMode": "value", 1116 | "graphMode": "area", 1117 | "justifyMode": "auto", 1118 | "orientation": "auto", 1119 | "reduceOptions": { 1120 | "calcs": [ 1121 | "lastNotNull" 1122 | ], 1123 | "fields": "/^Time$/", 1124 | "values": false 1125 | }, 1126 | "text": { 1127 | "titleSize": 100 1128 | }, 1129 | "textMode": "auto" 1130 | }, 1131 | "pluginVersion": "7.5.5", 1132 | "targets": [ 1133 | { 1134 | "alias": "", 1135 | "groupBy": [ 1136 | { 1137 | "params": [ 1138 | "$__interval" 1139 | ], 1140 | "type": "time" 1141 | }, 1142 | { 1143 | "params": [ 1144 | "null" 1145 | ], 1146 | "type": "fill" 1147 | } 1148 | ], 1149 | "orderByTime": "ASC", 1150 | "policy": "default", 1151 | "query": "SELECT derivative(mean(\"soilmoisture1\"),10s) AS \"Planter\" FROM \"http_listener_v2\" WHERE $timeFilter GROUP BY time(2m) fill(null)", 1152 | "rawQuery": true, 1153 | "refId": "A", 1154 | "resultFormat": "table", 1155 | "select": [ 1156 | [ 1157 | { 1158 | "params": [ 1159 | "value" 1160 | ], 1161 | "type": "field" 1162 | }, 1163 | { 1164 | "params": [], 1165 | "type": "mean" 1166 | } 1167 | ] 1168 | ], 1169 | "tags": [] 1170 | } 1171 | ], 1172 | "timeFrom": "96h", 1173 | "timeShift": null, 1174 | "title": "Last Watering", 1175 | "transformations": [ 1176 | { 1177 | "id": "filterByValue", 1178 | "options": { 1179 | "filters": [ 1180 | { 1181 | "config": { 1182 | "id": "lower", 1183 | "options": { 1184 | "value": 0.25 1185 | } 1186 | }, 1187 | "fieldName": "Planter" 1188 | } 1189 | ], 1190 | "match": "all", 1191 | "type": "exclude" 1192 | } 1193 | } 1194 | ], 1195 | "type": "stat" 1196 | }, 1197 | { 1198 | "aliasColors": { 1199 | "Rain": "dark-blue", 1200 | "weather.rain": "dark-blue" 1201 | }, 1202 | "bars": false, 1203 | "dashLength": 10, 1204 | "dashes": false, 1205 | "datasource": null, 1206 | "decimals": 1, 1207 | "fieldConfig": { 1208 | "defaults": { 1209 | "unit": "celsius" 1210 | }, 1211 | "overrides": [ 1212 | { 1213 | "matcher": { 1214 | "id": "byName", 1215 | "options": "weather.rain" 1216 | }, 1217 | "properties": [ 1218 | { 1219 | "id": "unit", 1220 | "value": "lengthmm" 1221 | } 1222 | ] 1223 | } 1224 | ] 1225 | }, 1226 | "fill": 0, 1227 | "fillGradient": 0, 1228 | "gridPos": { 1229 | "h": 9, 1230 | "w": 24, 1231 | "x": 0, 1232 | "y": 16 1233 | }, 1234 | "hiddenSeries": false, 1235 | "hideTimeOverride": true, 1236 | "id": 16, 1237 | "interval": "3h", 1238 | "legend": { 1239 | "alignAsTable": true, 1240 | "avg": true, 1241 | "current": true, 1242 | "max": true, 1243 | "min": true, 1244 | "rightSide": false, 1245 | "show": true, 1246 | "total": false, 1247 | "values": true 1248 | }, 1249 | "lines": true, 1250 | "linewidth": 2, 1251 | "nullPointMode": "null", 1252 | "options": { 1253 | "alertThreshold": false 1254 | }, 1255 | "percentage": false, 1256 | "pluginVersion": "7.5.5", 1257 | "pointradius": 2, 1258 | "points": false, 1259 | "renderer": "flot", 1260 | "seriesOverrides": [ 1261 | { 1262 | "alias": "weather.rain", 1263 | "yaxis": 2 1264 | }, 1265 | { 1266 | "alias": "Rain", 1267 | "yaxis": 1 1268 | } 1269 | ], 1270 | "spaceLength": 10, 1271 | "stack": false, 1272 | "steppedLine": false, 1273 | "targets": [ 1274 | { 1275 | "alias": "Temperature", 1276 | "groupBy": [ 1277 | { 1278 | "params": [ 1279 | "$interval" 1280 | ], 1281 | "type": "time" 1282 | } 1283 | ], 1284 | "measurement": "weather", 1285 | "orderByTime": "ASC", 1286 | "policy": "default", 1287 | "query": "SELECT last(\"temperature\") FROM \"weather\" WHERE $timeFilter GROUP BY time($interval) ", 1288 | "rawQuery": false, 1289 | "refId": "A", 1290 | "resultFormat": "table", 1291 | "select": [ 1292 | [ 1293 | { 1294 | "params": [ 1295 | "temperature" 1296 | ], 1297 | "type": "field" 1298 | }, 1299 | { 1300 | "params": [], 1301 | "type": "median" 1302 | }, 1303 | { 1304 | "params": [ 1305 | "Temperature forecast" 1306 | ], 1307 | "type": "alias" 1308 | } 1309 | ] 1310 | ], 1311 | "tags": [], 1312 | "tz": "" 1313 | } 1314 | ], 1315 | "thresholds": [], 1316 | "timeFrom": null, 1317 | "timeRegions": [], 1318 | "timeShift": null, 1319 | "title": "Temperature forecast", 1320 | "tooltip": { 1321 | "shared": true, 1322 | "sort": 0, 1323 | "value_type": "individual" 1324 | }, 1325 | "transformations": [], 1326 | "type": "graph", 1327 | "xaxis": { 1328 | "buckets": null, 1329 | "mode": "time", 1330 | "name": null, 1331 | "show": true, 1332 | "values": [] 1333 | }, 1334 | "yaxes": [ 1335 | { 1336 | "$$hashKey": "object:538", 1337 | "format": "celsius", 1338 | "label": null, 1339 | "logBase": 1, 1340 | "max": "45", 1341 | "min": "-5", 1342 | "show": true 1343 | }, 1344 | { 1345 | "$$hashKey": "object:539", 1346 | "format": "lengthmm", 1347 | "label": null, 1348 | "logBase": 1, 1349 | "max": "10", 1350 | "min": "0", 1351 | "show": false 1352 | } 1353 | ], 1354 | "yaxis": { 1355 | "align": false, 1356 | "alignLevel": null 1357 | } 1358 | }, 1359 | { 1360 | "datasource": null, 1361 | "fieldConfig": { 1362 | "defaults": { 1363 | "color": { 1364 | "mode": "palette-classic" 1365 | }, 1366 | "custom": { 1367 | "axisLabel": "", 1368 | "axisPlacement": "auto", 1369 | "barAlignment": 0, 1370 | "drawStyle": "line", 1371 | "fillOpacity": 10, 1372 | "gradientMode": "opacity", 1373 | "hideFrom": { 1374 | "graph": false, 1375 | "legend": false, 1376 | "tooltip": false 1377 | }, 1378 | "lineInterpolation": "linear", 1379 | "lineWidth": 1, 1380 | "pointSize": 5, 1381 | "scaleDistribution": { 1382 | "type": "linear" 1383 | }, 1384 | "showPoints": "never", 1385 | "spanNulls": true 1386 | }, 1387 | "mappings": [], 1388 | "max": 45, 1389 | "min": -5, 1390 | "thresholds": { 1391 | "mode": "absolute", 1392 | "steps": [ 1393 | { 1394 | "color": "green", 1395 | "value": null 1396 | }, 1397 | { 1398 | "color": "red", 1399 | "value": 80 1400 | } 1401 | ] 1402 | }, 1403 | "unit": "celsius" 1404 | }, 1405 | "overrides": [] 1406 | }, 1407 | "gridPos": { 1408 | "h": 8, 1409 | "w": 24, 1410 | "x": 0, 1411 | "y": 25 1412 | }, 1413 | "id": 2, 1414 | "options": { 1415 | "graph": {}, 1416 | "legend": { 1417 | "calcs": [ 1418 | "min", 1419 | "max" 1420 | ], 1421 | "displayMode": "table", 1422 | "placement": "right" 1423 | }, 1424 | "tooltipOptions": { 1425 | "mode": "single" 1426 | } 1427 | }, 1428 | "pluginVersion": "7.4.3", 1429 | "targets": [ 1430 | { 1431 | "alias": "Indoor", 1432 | "groupBy": [ 1433 | { 1434 | "params": [ 1435 | "$__interval" 1436 | ], 1437 | "type": "time" 1438 | }, 1439 | { 1440 | "params": [ 1441 | "null" 1442 | ], 1443 | "type": "fill" 1444 | } 1445 | ], 1446 | "measurement": "http_listener_v2", 1447 | "orderByTime": "ASC", 1448 | "policy": "default", 1449 | "query": "SELECT (mean(\"tempinf\")-32) * 5/9 FROM \"http_listener_v2\" WHERE $timeFilter GROUP BY time($__interval) fill(null)", 1450 | "rawQuery": true, 1451 | "refId": "A", 1452 | "resultFormat": "time_series", 1453 | "select": [ 1454 | [ 1455 | { 1456 | "params": [ 1457 | "tempinf" 1458 | ], 1459 | "type": "field" 1460 | }, 1461 | { 1462 | "params": [], 1463 | "type": "mean" 1464 | } 1465 | ] 1466 | ], 1467 | "tags": [] 1468 | }, 1469 | { 1470 | "alias": "Outdoor", 1471 | "groupBy": [ 1472 | { 1473 | "params": [ 1474 | "$__interval" 1475 | ], 1476 | "type": "time" 1477 | }, 1478 | { 1479 | "params": [ 1480 | "null" 1481 | ], 1482 | "type": "fill" 1483 | } 1484 | ], 1485 | "hide": false, 1486 | "measurement": "http_listener_v2", 1487 | "orderByTime": "ASC", 1488 | "policy": "default", 1489 | "query": "SELECT (mean(\"temp1f\")-32)*5/9 FROM \"http_listener_v2\" WHERE $timeFilter GROUP BY time($__interval) fill(null)", 1490 | "rawQuery": true, 1491 | "refId": "B", 1492 | "resultFormat": "time_series", 1493 | "select": [ 1494 | [ 1495 | { 1496 | "params": [ 1497 | "temp1f" 1498 | ], 1499 | "type": "field" 1500 | }, 1501 | { 1502 | "params": [], 1503 | "type": "mean" 1504 | } 1505 | ] 1506 | ], 1507 | "tags": [] 1508 | }, 1509 | { 1510 | "alias": "Cheese Cave", 1511 | "groupBy": [ 1512 | { 1513 | "params": [ 1514 | "$__interval" 1515 | ], 1516 | "type": "time" 1517 | }, 1518 | { 1519 | "params": [ 1520 | "null" 1521 | ], 1522 | "type": "fill" 1523 | } 1524 | ], 1525 | "hide": false, 1526 | "measurement": "http_listener_v2", 1527 | "orderByTime": "ASC", 1528 | "policy": "default", 1529 | "query": "SELECT (mean(\"temp2f\")-32)*5/9 FROM \"http_listener_v2\" WHERE $timeFilter GROUP BY time($__interval) fill(null)", 1530 | "rawQuery": true, 1531 | "refId": "C", 1532 | "resultFormat": "time_series", 1533 | "select": [ 1534 | [ 1535 | { 1536 | "params": [ 1537 | "temp2f" 1538 | ], 1539 | "type": "field" 1540 | }, 1541 | { 1542 | "params": [], 1543 | "type": "mean" 1544 | } 1545 | ] 1546 | ], 1547 | "tags": [] 1548 | } 1549 | ], 1550 | "timeFrom": "24h", 1551 | "timeShift": null, 1552 | "title": "Temperature last 24 Hours", 1553 | "type": "timeseries" 1554 | }, 1555 | { 1556 | "aliasColors": {}, 1557 | "bars": false, 1558 | "dashLength": 10, 1559 | "dashes": false, 1560 | "datasource": null, 1561 | "fieldConfig": { 1562 | "defaults": {}, 1563 | "overrides": [] 1564 | }, 1565 | "fill": 1, 1566 | "fillGradient": 0, 1567 | "gridPos": { 1568 | "h": 8, 1569 | "w": 24, 1570 | "x": 0, 1571 | "y": 33 1572 | }, 1573 | "hiddenSeries": false, 1574 | "id": 13, 1575 | "legend": { 1576 | "avg": false, 1577 | "current": false, 1578 | "max": false, 1579 | "min": false, 1580 | "show": true, 1581 | "total": false, 1582 | "values": false 1583 | }, 1584 | "lines": true, 1585 | "linewidth": 1, 1586 | "nullPointMode": "null", 1587 | "options": { 1588 | "alertThreshold": true 1589 | }, 1590 | "percentage": false, 1591 | "pluginVersion": "7.5.5", 1592 | "pointradius": 2, 1593 | "points": false, 1594 | "renderer": "flot", 1595 | "seriesOverrides": [], 1596 | "spaceLength": 10, 1597 | "stack": false, 1598 | "steppedLine": false, 1599 | "targets": [ 1600 | { 1601 | "alias": "Barometric Pressure", 1602 | "groupBy": [ 1603 | { 1604 | "params": [ 1605 | "$__interval" 1606 | ], 1607 | "type": "time" 1608 | }, 1609 | { 1610 | "params": [ 1611 | "null" 1612 | ], 1613 | "type": "fill" 1614 | } 1615 | ], 1616 | "measurement": "http_listener_v2", 1617 | "orderByTime": "ASC", 1618 | "policy": "default", 1619 | "refId": "A", 1620 | "resultFormat": "time_series", 1621 | "select": [ 1622 | [ 1623 | { 1624 | "params": [ 1625 | "baromrelin" 1626 | ], 1627 | "type": "field" 1628 | }, 1629 | { 1630 | "params": [], 1631 | "type": "mean" 1632 | } 1633 | ] 1634 | ], 1635 | "tags": [] 1636 | } 1637 | ], 1638 | "thresholds": [], 1639 | "timeFrom": "24h", 1640 | "timeRegions": [], 1641 | "timeShift": null, 1642 | "title": "Barometric Pressure", 1643 | "tooltip": { 1644 | "shared": true, 1645 | "sort": 0, 1646 | "value_type": "individual" 1647 | }, 1648 | "type": "graph", 1649 | "xaxis": { 1650 | "buckets": null, 1651 | "mode": "time", 1652 | "name": null, 1653 | "show": true, 1654 | "values": [] 1655 | }, 1656 | "yaxes": [ 1657 | { 1658 | "$$hashKey": "object:276", 1659 | "format": "short", 1660 | "label": null, 1661 | "logBase": 1, 1662 | "max": null, 1663 | "min": null, 1664 | "show": true 1665 | }, 1666 | { 1667 | "$$hashKey": "object:277", 1668 | "format": "short", 1669 | "label": null, 1670 | "logBase": 1, 1671 | "max": null, 1672 | "min": null, 1673 | "show": true 1674 | } 1675 | ], 1676 | "yaxis": { 1677 | "align": false, 1678 | "alignLevel": null 1679 | } 1680 | } 1681 | ], 1682 | "refresh": "5m", 1683 | "schemaVersion": 27, 1684 | "style": "dark", 1685 | "tags": [], 1686 | "templating": { 1687 | "list": [] 1688 | }, 1689 | "time": { 1690 | "from": "now", 1691 | "to": "now+24h" 1692 | }, 1693 | "timepicker": {}, 1694 | "timezone": "", 1695 | "title": "Local Weather", 1696 | "uid": "iJpRv_8Gk", 1697 | "version": 83 1698 | } 1699 | --------------------------------------------------------------------------------