{"id":13587404,"url":"https://github.com/lux4rd0/weatherflow-collector","last_synced_at":"2025-05-12T04:32:16.978Z","repository":{"id":41247641,"uuid":"346497821","full_name":"lux4rd0/weatherflow-collector","owner":"lux4rd0","description":"A WeatherFlow data collector for local-UDP, remote-socket, and remote-rest APIs. Feeds InfluxDB and Grafana Loki back-ends. Includes current conditions, forecasts, and historical details. Includes a collection of Grafana Dashboards.","archived":false,"fork":false,"pushed_at":"2023-12-25T05:21:33.000Z","size":24246,"stargazers_count":56,"open_issues_count":10,"forks_count":8,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-02-14T21:49:16.566Z","etag":null,"topics":["dashboards","docker","grafana","influxdb","loki","weather","weatherflow"],"latest_commit_sha":null,"homepage":"https://labs.lux4rd0.com/weatherflow-collector/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lux4rd0.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-03-10T21:32:24.000Z","updated_at":"2024-06-29T16:54:33.364Z","dependencies_parsed_at":"2024-06-29T17:04:29.921Z","dependency_job_id":null,"html_url":"https://github.com/lux4rd0/weatherflow-collector","commit_stats":null,"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lux4rd0%2Fweatherflow-collector","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lux4rd0%2Fweatherflow-collector/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lux4rd0%2Fweatherflow-collector/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lux4rd0%2Fweatherflow-collector/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lux4rd0","download_url":"https://codeload.github.com/lux4rd0/weatherflow-collector/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225119955,"owners_count":17423818,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dashboards","docker","grafana","influxdb","loki","weather","weatherflow"],"created_at":"2024-08-01T15:06:11.748Z","updated_at":"2024-11-18T03:14:18.399Z","avatar_url":"https://github.com/lux4rd0.png","language":"Shell","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"\n\n\n## About The Project\n\n\u003ccenter\u003e\u003cimg src=\"https://labs.lux4rd0.com/wp-content/uploads/2021/05/weatherflow_collector_header.png\"\u003e\u003c/center\u003e\n\n**weatherflow-collector** is an application that provides multiple ways of collecting data from the [WeatherFlow Tempest](https://weatherflow.com/tempest-weather-system/) weather system. Once deployed, this collection of Grafana dashboards will help visualize that data. If you're just getting started with Grafana, InfluxDB, and WeatherFlow Tempest, you may want to check out my [WeatherFlow Dashboards AIO](https://github.com/lux4rd0/weatherflow-dashboards-aio) (All In One) project. (It is still being updated.)\n\nA live set of dashboards using this collector [are available](https://labs.lux4rd0.com/weatherflow-collector/) for you to try out.\n\n## Getting Started\n\nThe project is typically deployed as a Docker container, which requires configurations based on how and where you want to collect and store the data.\n\n## Prerequisites\n\n- [Docker](https://docs.docker.com/install)\n- [Docker Compose](https://docs.docker.com/compose/install)\n- [InfluxDB V2](https://docs.influxdata.com/influxdb/v2/)\n- [Grafana 11.1.0](https://grafana.com/oss/grafana/)\n\n## Notice\n\nVersion 5.1 is the most recent release of the collector, and it has been completely rewritten. However, there are still some issues that I am working on resolving. If you come across something that isn't working as expected or if you have suggestions for new features, please open an issue, and I will address it. I'm also updating the documentation as quickly as possible, as there's quite a big difference between versions. \n\n## Deploying the WeatherFlow Collector\n\nUse the following [Docker container](https://hub.docker.com/r/lux4rd0/weatherflow-collector):\n\n    lux4rd0/weatherflow-collector:5.1.55\n    lux4rd0/weatherflow-collector:latest\n    \nThe provided container has a multi-architecture supporting both Linux/amd64 and Linux/arm64.\n\nCorrect environmental variables are required for the application to function. Below are the required minimum settings to get started:\n\n    WEATHERFLOW_COLLECTOR_API_TOKEN\n    WEATHERFLOW_COLLECTOR_INFLUXDB_URL\n    WEATHERFLOW_COLLECTOR_INFLUXDB_TOKEN\n    WEATHERFLOW_COLLECTOR_INFLUXDB_ORG\n    WEATHERFLOW_COLLECTOR_INFLUXDB_BUCKET\n\n\n#### `docker-compose.yml`\n\nA minimal compose.yaml file would look like:\n\n    name: weatherflow-collector-lux4rd0\n    services:\n      weatherflow-collector-lux4rd0:\n        container_name: weatherflow-collector-lux4rd0\n        environment:\n          TZ: America/Chicago\n          WEATHERFLOW_COLLECTOR_API_TOKEN: TOKEN\n          WEATHERFLOW_COLLECTOR_INFLUXDB_BUCKET: weatherflow\n          WEATHERFLOW_COLLECTOR_INFLUXDB_ORG: Lux4rd0\n          WEATHERFLOW_COLLECTOR_INFLUXDB_TOKEN: TOKEN\n          WEATHERFLOW_COLLECTOR_INFLUXDB_URL: http://weatherflow-collector.lux4rd0.com:8086\n        image: lux4rd0/weatherflow-collector:latest\n        network_mode: host\n        restart: always\n\nRunning `docker compose up -d` will spin up the WeatherFlow Collector container.\n\nIf you want to run this as a docker run command, that would look like:\n\n    docker run -d \\\n      --name weatherflow-collector-lux4rd0 \\\n      --env TZ=America/Chicago \\\n      --env WEATHERFLOW_COLLECTOR_API_TOKEN=TOKEN \\\n      --env WEATHERFLOW_COLLECTOR_INFLUXDB_BUCKET=weatherflow \\\n      --env WEATHERFLOW_COLLECTOR_INFLUXDB_ORG=Lux4rd0 \\\n      --env WEATHERFLOW_COLLECTOR_INFLUXDB_TOKEN=TOKEN \\\n      --env WEATHERFLOW_COLLECTOR_INFLUXDB_URL=http://weatherflow-collector.lux4rd0.com:8086 \\\n      --network host \\\n      --restart always \\\n      lux4rd0/weatherflow-collector:latest\n\n#### Optional Export Command (Still under rework with version 5.1):\n\nIf you want to export your data from the WeatherFlow cloud, run this Docker command substituting your own token:\n\n    docker run --rm \\\n      --name=weatherflow-collector-remote-export \\\n      -e WEATHERFLOW_COLLECTOR_COLLECTOR_TYPE=remote-export \\\n      -e WEATHERFLOW_COLLECTOR_FUNCTION=export \\\n      -e WEATHERFLOW_COLLECTOR_API_TOKEN=your_api_token \\\n      -e WEATHERFLOW_COLLECTOR_EXPORT_DAYS=20 \\\n      -v $(pwd):/weatherflow-collector/export \\\n      lux4rd0/weatherflow-collector:latest\n\nFiles will be created in your current working directory that look something like this:\n\n    weatherflow-collector_export-station_351-device_26040.csv\n    weatherflow-collector_export-station_351-device_16029.csv\n\n#### Optional Import Command (Still under rework with version 5.1):\n\nIf you want to import your data from the WeatherFlow cloud, run this Docker command substituting your own token:\n\n    docker run --rm \\\n      --name=weatherflow-collector-remote-export \\\n      -e WEATHERFLOW_COLLECTOR_COLLECTOR_TYPE=remote-export \\\n      -e WEATHERFLOW_COLLECTOR_FUNCTION=export \\\n      -e WEATHERFLOW_COLLECTOR_API_TOKEN=your_api_token \\\n      -e WEATHERFLOW_COLLECTOR_IMPORT_DAYS=20 \\\n      lux4rd0/weatherflow-collector:latest\n\nFiles will be created in your current working directory that look something like this:\n\n    weatherflow-collector_export-station_351-device_26040.csv\n    weatherflow-collector_export-station_351-device_16029.csv\n\n\n## Environmental flags:\n\n````WEATHERFLOW_COLLECTOR_API_TOKEN````\n\nYour WeatherFlow API token.\n\n````WEATHERFLOW_COLLECTOR_API_RATE_LIMIT````\n\nThe rate limit for API requests (default: 15).\n\n````WEATHERFLOW_COLLECTOR_API_DATA_SAVE_DIR````\n\nThe base directory where you can save your API data (default: \"api_data_saver\").\n\n````WEATHERFLOW_COLLECTOR_CONFIG_FILE````\n\nThe configuration file path for WeatherFlow stations (default: \"conf/weatherflow_station.conf\").\n\n````WEATHERFLOW_COLLECTOR_PRIMARY_SOURCE````\n\nPrimary source for data collection (default: \"collector_websocket\").\n\n````WEATHERFLOW_COLLECTOR_UDP_BUFFER_SIZE````\n\nUDP buffer size (default: 4096).\n\n````WEATHERFLOW_COLLECTOR_UDP_COLLECTOR_MAX_RETRIES````\n\nMaximum retries for UDP collector (default: 5).\n\n````WEATHERFLOW_COLLECTOR_UDP_COLLECTOR_PORT````\n\nPort for UDP collector (default: 50222).\n\n````WEATHERFLOW_COLLECTOR_UDP_COLLECTOR_RETRY_DELAY````\n\nRetry delay for UDP collector (default: 5).\n\n````WEATHERFLOW_COLLECTOR_UDP_LISTEN_ADDRESS````\n\nListen address for UDP (default: \"0.0.0.0\").\n\n````WEATHERFLOW_COLLECTOR_PROVIDER_WEBSOCKET_SERVER_CLEANUP_CONNECTIONS_INTERVAL````\n\nCleanup interval for WebSocket server connections (default: 60).\n\n````WEATHERFLOW_COLLECTOR_PROVIDER_WEBSOCKET_SERVER_MAX_CONNECTIONS````\n\nMaximum connections for WebSocket server (default: 100).\n\n````WEATHERFLOW_COLLECTOR_PROVIDER_WEBSOCKET_SERVER_PING_INTERVAL````\n\nPing interval for WebSocket server (default: 30).\n\n````WEATHERFLOW_COLLECTOR_PROVIDER_WEBSOCKET_SERVER_PING_TIMEOUT````\n\nPing timeout for WebSocket server (default: 10).\n\n````WEATHERFLOW_COLLECTOR_PROVIDER_WEBSOCKET_SERVER_HOST````\n\nHost for WebSocket server (default: \"0.0.0.0\").\n\n````WEATHERFLOW_COLLECTOR_PROVIDER_WEBSOCKET_SERVER_PORT````\n\nPort for WebSocket server (default: 6789).\n\n````WEATHERFLOW_COLLECTOR_PROVIDER_WEBSOCKET_RETRY_DELAY````\n\nRetry delay for WebSocket provider (default: 1).\n\n````WEATHERFLOW_COLLECTOR_PROVIDER_WEBSOCKET_MAX_DELAY````\n\nMaximum delay for WebSocket provider (default: 60).\n\n````WEATHERFLOW_COLLECTOR_PROVIDER_WEBSOCKET_MAX_RETRIES````\n\nMaximum retries for WebSocket provider (default: 20).\n\n````WEATHERFLOW_COLLECTOR_COLLECTOR_WEBSOCKET_RETRY_DELAY````\n\nRetry delay for WebSocket collector (default: 1).\n\n````WEATHERFLOW_COLLECTOR_COLLECTOR_WEBSOCKET_MAX_DELAY````\n\nMaximum delay for WebSocket collector (default: 60).\n\n````WEATHERFLOW_COLLECTOR_COLLECTOR_WEBSOCKET_MAX_RETRIES````\n\nMaximum retries for WebSocket collector (default: 20).\n\n````WEATHERFLOW_COLLECTOR_INFLUXDB_URL````\n\nURL for InfluxDB.\n\n````WEATHERFLOW_COLLECTOR_INFLUXDB_TOKEN````\n\nToken for InfluxDB.\n\n````WEATHERFLOW_COLLECTOR_INFLUXDB_ORG````\n\nOrganization for InfluxDB.\n\n````WEATHERFLOW_COLLECTOR_INFLUXDB_BUCKET````\n\nBucket for InfluxDB.\n\n````WEATHERFLOW_COLLECTOR_MYSQL_USER````\n\nMySQL user.\n\n````WEATHERFLOW_COLLECTOR_MYSQL_PASSWORD````\n\nMySQL password.\n\n````WEATHERFLOW_COLLECTOR_MYSQL_HOST````\n\nMySQL host.\n\n````WEATHERFLOW_COLLECTOR_MYSQL_DATABASE````\n\nMySQL database.\n\n````WEATHERFLOW_COLLECTOR_STORAGE_INFLUXDB_BATCH_SIZE````\n\nBatch size for InfluxDB storage (default: 2000).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_INFLUXDB_FLUSH_INTERVAL````\n\nFlush interval for InfluxDB storage (default: 1000).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_INFLUXDB_JITTER_INTERVAL````\n\nJitter interval for InfluxDB storage (default: 0).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_INFLUXDB_MAX_CLOSE_WAIT````\n\nMaximum close wait for InfluxDB storage (default: 300000).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_INFLUXDB_MAX_RETRIES````\n\nMaximum retries for InfluxDB storage (default: 5).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_INFLUXDB_MAX_RETRY_DELAY````\n\nMaximum retry delay for InfluxDB storage (default: 125000).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_INFLUXDB_MAX_RETRY_TIME````\n\nMaximum retry time for InfluxDB storage (default: 180000).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_INFLUXDB_RETRY_INTERVAL````\n\nRetry interval for InfluxDB storage (default: 5000).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_INFLUXDB_TIMEOUT````\n\nTimeout for InfluxDB storage (default: 30000).\n\n````WEATHERFLOW_COLLECTOR_EVENT_MANAGER_MAX_RETRIES````\n\nMaximum retries for event manager (default: 5).\n\n````WEATHERFLOW_COLLECTOR_EVENT_MANAGER_RETRY_DELAY````\n\nRetry delay for event manager (default: 1).\n\n````WEATHERFLOW_COLLECTOR_LOG_DIRECTORY````\n\nDirectory for logs (default: \"logs\").\n\n````WEATHERFLOW_COLLECTOR_COLLECTOR_EXPORT_ENABLED````\n\nEnable collector export (default: False).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_FILE_ENABLED````\n\nEnable file storage (default: False).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_INFLUXDB_ENABLED````\n\nEnable InfluxDB storage (default: True).\n\n````WEATHERFLOW_COLLECTOR_COLLECTOR_REST_EXPORT_ENABLED````\n\nEnable REST export (default: False).\n\n````WEATHERFLOW_COLLECTOR_COLLECTOR_REST_FORECASTS_ENABLED````\n\nEnable REST forecasts (default: True).\n\n````WEATHERFLOW_COLLECTOR_COLLECTOR_REST_IMPORT_ENABLED````\n\nEnable REST import (default: False).\n\n````WEATHERFLOW_COLLECTOR_COLLECTOR_REST_OBSERVATIONS_DEVICE_ENABLED````\n\nEnable REST observations for devices (default: True).\n\n````WEATHERFLOW_COLLECTOR_COLLECTOR_REST_OBSERVATIONS_STATION_ENABLED````\n\nEnable REST observations for stations (default: False).\n\n````WEATHERFLOW_COLLECTOR_COLLECTOR_REST_STATS_ENABLED````\n\nEnable REST stats (default: True).\n\n````WEATHERFLOW_COLLECTOR_SYSTEM_METRICS_ENABLED````\n\nEnable system metrics (default: True).\n\n````WEATHERFLOW_COLLECTOR_COLLECTOR_UDP_ENABLED````\n\nEnable UDP collector (default: True).\n\n````WEATHERFLOW_COLLECTOR_COLLECTOR_WEBSOCKET_ENABLED````\n\nEnable WebSocket collector (default: True).\n\n````WEATHERFLOW_COLLECTOR_PROVIDER_WEBSOCKET_SERVER_ENABLED````\n\nEnable WebSocket server provider (default: True).\n\n````WEATHERFLOW_COLLECTOR_HANDLER_ENABLED````\n\nEnable handler (default: True).\n\n````WEATHERFLOW_COLLECTOR_HANDLER_REST_STATS_SUPPRESS_WARNINGS_ENABLED````\n\nSuppress REST stats warnings (default: True).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_FILE_COLLECTOR_REST_FORECASTS_ENABLED````\n\nEnable file storage for REST forecasts (default: False).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_FILE_COLLECTOR_REST_IMPORT_ENABLED````\n\nEnable file storage for REST import (default: False).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_FILE_COLLECTOR_REST_EXPORT_ENABLED````\n\nEnable file storage for REST export (default: False).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_FILE_COLLECTOR_REST_OBSERVATIONS_DEVICE_ENABLED````\n\nEnable file storage for REST observations (device) (default: False).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_FILE_COLLECTOR_REST_OBSERVATIONS_STATION_ENABLED````\n\nEnable file storage for REST observations (station) (default: False).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_FILE_STATIONCONFIG_ENABLED````\n\nEnable file storage for station configuration (default: False).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_FILE_COLLECTOR_UDP_ENABLED````\n\nEnable file storage for UDP collector (default: False).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_FILE_COLLECTOR_WEBSOCKET_ENABLED````\n\nEnable file storage for WebSocket collector (default: False).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_FILE_COLLECTOR_REST_STATS_ENABLED````\n\nEnable file storage for REST stats (default: False).\n\n````WEATHERFLOW_COLLECTOR_ENABLE_INFLUXDB_DATA_STRUCTURE_TRACKING````\n\nEnable InfluxDB data structure tracking (default: False).\n\n````WEATHERFLOW_COLLECTOR_ENABLE_INFLUXDB_DATA_STRUCTURE_TRACKING_EXPORT_INTERVAL````\n\nThe export interval for InfluxDB data structure tracking (default: 60).\n\n````WEATHERFLOW_COLLECTOR_ENABLE_INFLUXDB_DATA_STRUCTURE_TRACKING_SAVE_DIR````\n\nThe save directory for InfluxDB data structure tracking (default: \"logs\").\n\n````WEATHERFLOW_COLLECTOR_EXPORT_COLLECTOR_STALE_SEGMENT_DAYS````\n\nStale segment days for export collector (default: 30).\n\n````WEATHERFLOW_COLLECTOR_REST_EXPORT_FETCH_OBSERVATIONS_WORKERS````\n\nWorkers for REST export fetch observations (default: 4).\n\n````WEATHERFLOW_COLLECTOR_COLLECTOR_REST_OBSERVATIONS_INTERVAL````\n\nInterval for REST observations (default: 60).\n\n````WEATHERFLOW_COLLECTOR_COLLECTOR_REST_IMPORT_FETCH_WORKERS````\n\nFetch workers for REST import (default: 16).\n\n````WEATHERFLOW_COLLECTOR_COLLECTOR_REST_FORECASTS_FETCH_INTERVAL````\n\nFetch interval for REST forecasts (default: 60).\n\n````WEATHERFLOW_COLLECTOR_COLLECTOR_REST_IMPORT_FETCH_OBSERVATIONS_DELAY_MS````\n\nFetch observations delay for REST import (default: 200).\n\n````WEATHERFLOW_COLLECTOR_STORAGE_INFLUXDB_WORKERS````\n\nWorkers for InfluxDB storage (default: 8).\n\n````WEATHERFLOW_COLLECTOR_COLLECTOR_REST_IMPORT_BATCH_SIZE````\n\nBatch size for REST import (default: 2000).\n\n````WEATHERFLOW_COLLECTOR_UTILS_HTTP_FETCH_RETRIES````\n\nHTTP fetch retries (default: 3).\n\n````WEATHERFLOW_COLLECTOR_UTILS_HTTP_FETCH_RETRY_WAIT````\n\nRetry wait for HTTP fetch (default: 2).\n\n````WEATHERFLOW_COLLECTOR_UTILS_HTTP_FETCH_TIMEOUT````\n\nTimeout for HTTP fetch (default: 30).\n\n````WEATHERFLOW_COLLECTOR_HEALTHCHECK_WEBSOCKETCOLLECTOR_TIMEOUT_SOCKET````\n\nThe parameter defines the maximum duration the WeatherFlow Collector WebSocket Client will wait without receiving any data before considering the connection inactive. If no data is received within this specified timeout period, the WebSocket connection is closed and re-established to ensure continuous data flow and system reliability (default: 60).\n\n````WEATHERFLOW_COLLECTOR_ENABLE_HEALTHCHECK_FORECAST````\n\nEnable health check for forecast (default: True).\n\n````WEATHERFLOW_COLLECTOR_ENABLE_HEALTHCHECK_REST````\n\nEnable health check for REST (default: True).\n\n````WEATHERFLOW_COLLECTOR_ENABLE_HEALTHCHECK_SOCKET````\n\nEnable health check for socket (default: True).\n\n````WEATHERFLOW_COLLECTOR_ENABLE_HEALTHCHECK_UDP````\n\nEnable health check for UDP (default: True).\n\n````WEATHERFLOW_COLLECTOR_HEALTHCHECK_INTERVAL_FORECAST````\n\nHealth check interval for forecast (default: 15).\n\n````WEATHERFLOW_COLLECTOR_HEALTHCHECK_INTERVAL_REST````\n\nHealth check interval for REST (default: 60).\n\n````WEATHERFLOW_COLLECTOR_HEALTHCHECK_INTERVAL_SOCKET````\n\nHealth check interval for socket (default: 5).\n\n````WEATHERFLOW_COLLECTOR_HEALTHCHECK_INTERVAL_UDP````\n\nHealth check interval for UDP (default: 10).\n\n````WEATHERFLOW_COLLECTOR_HEALTHCHECK_RECONNECT_SOCKET````\n\nReconnect interval for socket (default: 60).\n\n````WEATHERFLOW_COLLECTOR_HEALTHCHECK_RELISTEN_SOCKET````\n\nRelisten interval for socket (default: 10).\n\n````WEATHERFLOW_COLLECTOR_HEALTHCHECK_RETRY_DELAY_SOCKET````\n\nRetry delay for socket (default: 120).\n\n````WEATHERFLOW_COLLECTOR_HEALTHCHECK_STARTUP_DELAY_FORECAST````\n\nStartup delay for forecast health check (default: 60).\n\n````WEATHERFLOW_COLLECTOR_HEALTHCHECK_STARTUP_DELAY_REST````\n\nStartup delay for REST health check (default: 120).\n\n````WEATHERFLOW_COLLECTOR_HEALTHCHECK_STARTUP_DELAY_SOCKET````\n\nStartup delay for socket health check (default: 60).\n\n````WEATHERFLOW_COLLECTOR_HEALTHCHECK_STARTUP_DELAY_UDP````\n\nStartup delay for UDP health check (default: 60).\n\n````WEATHERFLOW_COLLECTOR_HEALTHCHECK_THRESHOLD_FORECAST````\n\nThreshold for forecast health check (default: 3000).\n\n````WEATHERFLOW_COLLECTOR_HEALTHCHECK_THRESHOLD_REST````\n\nThreshold for REST health check (default: 60).\n\n````WEATHERFLOW_COLLECTOR_HEALTHCHECK_THRESHOLD_SOCKET````\n\nThreshold for socket health check (default: 900).\n\n````WEATHERFLOW_COLLECTOR_HEALTHCHECK_THRESHOLD_UDP````\n\nThreshold for UDP health check (default: 10).\n\n````WEATHERFLOW_COLLECTOR_ENABLE_O11Y_FORECAST````\n\n\n\nThreshold for O11y UDP (default: 10).\n\n````WEATHERFLOW_COLLECTOR_ENABLE_IMPORT_EXPORT_CACHE````\n\nEnable import/export cache (default: True).\n\n````WEATHERFLOW_COLLECTOR_ENABLE_IMPORT_EXPORT_CACHE_EXCLUDE_RECENT_HOURS````\n\nExclude recent hours from import/export cache (default: True).\n\n````WEATHERFLOW_COLLECTOR_PROCESSOR_EXPORT_BUCKET````\n\nExport bucket for processor (default: \"month\").\n\n````WEATHERFLOW_COLLECTOR_PROCESSOR_EXPORT_FOLDER````\n\nExport folder for processor (default: \"export\").\n\n````WEATHERFLOW_COLLECTOR_PROCESSOR_EXPORT_WORKERS````\n\nWorkers for processor export (default: 8).\n\n````WEATHERFLOW_COLLECTOR_PROCESSOR_EXPORT_TYPE````\n\nExport type for processor (default: \"csv\").\n\n````WEATHERFLOW_COLLECTOR_PROCESSOR_EXPORT_CACHE_EXCLUDE_RECENT_HOURS````\n\nExclude recent hours from processor export cache (default: 48).\n\n````WEATHERFLOW_COLLECTOR_PROCESSOR_EXPORT_CACHE_FOLDER````\n\nCache folder for processor export (default: \"cache\").\n\n````WEATHERFLOW_COLLECTOR_PROCESSOR_EXPORT_CACHE_TTL````\n\nCache TTL for processor export (default: 7200).\n\n````WEATHERFLOW_COLLECTOR_LOGGER_CONSOLE_USE_COLOR_ENABLED````\n\nEnable color for console logger (default: True).\n\n````WEATHERFLOW_COLLECTOR_LOGGER_CONSOLE_ENABLED````\n\nEnable console logger (default: True).\n\n````WEATHERFLOW_COLLECTOR_LOGGER_FILE_USE_COLOR_ENABLED````\n\nEnable color for file logger (default: False).\n\n````WEATHERFLOW_COLLECTOR_LOGGER_FILE_ENABLED````\n\nEnable file logger (default: False).\n\n#### *Note - If a change is made to the location details of your WeatherFlow device (such as station name, public name, longitude, latitude, etc.) - please restart the docker container to pick up the changes.\n\n## Obtaining Your Tempest Authentication Token\n\nYou can obtain this by signing in to the Tempest Web App at [tempestwx.com](https://tempestwx.com/) and then going to Settings -\u003e Data Authorizations -\u003e Create Token.\n\n## Collector Details\n\n#### remote-socket\n\nThis setting grabs all of the metrics from your Tempest and all of the [derived metrics](https://weatherflow.github.io/Tempest/api/derived-metric-formulas.html), accomplished with WeatherFlow backend AI systems. The metrics don't have the same metrics resolution as the local-udp collector but support lightning suppression, sea level pressure adjustments, and additional events such as online and offline status.\n\n#### remote-rest\n\nThis setting is similar to the remote socket for obtaining WeatherFlow observations but only pulls data from a REST call once a minute (configurable). This collector also provides a few additional metrics, such as sea level pressure. I'm still figuring out which metrics make sense and which polling mechanism to implement, so I'm trying out both!\n\n#### local-udp\n\nThis setting provides a listener on UDP port 50222 for messages coming from your Tempest hub. It provides all of the raw observation details and details on the Hub and Tempest, such as RSSI Wi-Fi details, uptime, sensor details, and device battery voltage. The observation metrics have a slightly higher data resolution than the REST/Socket API calls provide. However, it does not give any of the [derived metrics](https://weatherflow.github.io/Tempest/api/derived-metric-formulas.html) available with the REST/Socket API calls.\n\n#### remote-forecast\n\nThis setting populates the WeatherFlow Forecast dashboards by polling the daily and hourly forecasts for your location and storing them in InfluxDB. The forecasting process runs on startup and every quarter-hour—00, 15, 30, and 45 minutes.\n\n#### remote-import\n\nThis setting populates the WeatherFlow local-udp metrics from the WeatherFlow Cloud.\n\n## Grafana Dashboards\n\nCollecting data is only half the fun. Now it's time to provision some Grafana Dashboards to visualize your great WeatherFlow data. You'll find a [folder of dashboards](https://github.com/lux4rd0/weatherflow-collector/tree/main/dashboards) with collectors and backends split out. You can also use the links/numbers next to each dashboard title to load the dashboards [directly from Grafana](https://grafana.com/grafana/dashboards?search=weatherflow%20collector).\n\n### Current Conditions - [14376](https://grafana.com/grafana/dashboards/14376)\n\n\u003ccenter\u003e\u003cimg src=\"./docs/images/weatherflow_collector-current_conditions.jpg\"\u003e\u003c/center\u003e\n\nThis dashboard provides a comprehensive overview of your station location, combining all \"at-a-glance\" metrics from your WeatherFlow device. The current conditions dashboard is divided up into:\n\n- **Temperature \u0026 Wind**: observed, feels like, forecast high and low, the chance of precipitation, humidity, sea level pressure, UV, wind speed, and direction.\n\n- **Sunrise \u0026 Sunset and Sky Conditions**\n\n- **Temperature \u0026 Brightness**: Heat index, wind chill, dry bulb, wet bulb, dew point, station pressure, brightness, solar radiation, and air density.\n\n- **Rain \u0026 Lightning**: Rain accumulation (today and yesterday), rain duration (today and yesterday), lightning last detected, last distance, and the number of lightning detections during the previous 3 hours.\n\n### Device Details - [14378](https://grafana.com/grafana/dashboards/14378)\n\n\u003ccenter\u003e\u003cimg src=\"./docs/images/weatherflow_collector-device_details.jpg\"\u003e\u003c/center\u003e\n\nThis dashboard provides the current status for the Tempest and your WeatherFlow hub, such as Uptime, Radio Status, RSSI, Reboot Count, I2C Bus Count Error, Radio Version, Network ID, Firmware Version, and Voltage.\n\nRSSI and Battery Voltage over time defaulted to the last seven days are shown at the top of the dashboard, while current device details are shown below.\n\nSensor Status measurements are shown with a number related to each per-minute collection from the device. Either \"Sensors OK\" is down or any failures, which sensor had the error. Note that if you have the Lightning Disturber enabled, you may see many failures as electromagnetic interference is being suppressed.\n\n### Forecast - [14380](https://grafana.com/grafana/dashboards/14380)\n\n\u003ccenter\u003e\u003cimg src=\"./docs/images/weatherflow_collector-forecast.jpg\"\u003e\u003c/center\u003e\n\nA daily and hourly forecast in table format with charts below them. The default time range includes the current day and nine upcoming days. The interval drop-down at the top defaults to 12 hours to provide for highs and lows forecasts. Clicking on any of the dates in the \"Forecast - Daily\" table will refresh the Forecast hourly table to that day's hourly forecasts. This can also be done from the top \"Forecast Day\" drop-down menu.\n\n### Forecast Vs. Observed - [14379](https://grafana.com/grafana/dashboards/14379)\n\n\u003ccenter\u003e\u003cimg src=\"./docs/images/weatherflow_collector-forecast_vs_observed.jpg\"\u003e\u003c/center\u003e\n\nAs forecast data is collected, this dashboard may be used to compare what was forecasted (by how many days out) versus the observed metric from your WeatherFlow device. Temperature, Humidity, Wind, and UV measurements are covered here. By default, \"All\" available forecast days are overlayed over the observed metric. You can choose \"Days Out\" from the top drop-down menu to compare individual forecasts.\n\n### Historical (remote) - [14382](https://grafana.com/grafana/dashboards/14382)\n\n\u003ccenter\u003e\u003cimg src=\"./docs/images/weatherflow_collector-historical_remote.jpg\"\u003e\u003c/center\u003e\n\nThis provides a place to view weather details over longer periods of time. It defaults to 30 days with a 12-hour interval to show highs and lows for each Air Temperature, Humidity, Station Pressure, Solar, and Wind metrics. It includes [derived metrics](https://weatherflow.github.io/Tempest/api/derived-metric-formulas.html) as well as Feels Like, Heat Index, Wind Chill, Dry Bulb, Wet Bulb, and Dew Point. Precipitation Accumulation is displayed for any day that precipitation is detected.\n\n### Overview - [14383](https://grafana.com/grafana/dashboards/14383)\n\n\u003ccenter\u003e\u003cimg src=\"./docs/images/weatherflow_collector-overview.jpg\"\u003e\u003c/center\u003e\n\nOverview is the default landing page for the WeatherFlow Collector AIO. It provides an overview of current weather metrics and live updates on wind and direction. You can choose other dashboards from the top right-hand dashboard panel or the top left-hand side drop-downs under \"WeatherFlow Collector Dashboards.\"\n\n### Rain and Lightning - [14384](https://grafana.com/grafana/dashboards/14384)\n\n\u003ccenter\u003e\u003cimg src=\"./docs/images/weatherflow_collector-rain_and_lightning.jpg\"\u003e\u003c/center\u003e\n\nA historical view (defaulted to seven days) shows the precipitation rate and daily accumulation. As you zoom into the specific precipitation events, change the Interval drop-down to smaller increments (up to 1-minute collections) for finer rates.\n\nFor lightning, strikes and distance are shown in a heat map visualization. Time is across the x-axis, while the number of detected lightning strikes is bucketed by color (dark blue to yellow). The Y-axis shows the bucketed distances (up to 40 miles away). Hover over each square for a histogram of each strike/distance count.\n\n\u003ccenter\u003e\u003cimg src=\"./docs/images/weatherflow_collector-rain_and_lightning_histogram.jpg\"\u003e\u003c/center\u003e\n\n### System Stats - [14385](https://grafana.com/grafana/dashboards/14385) (Not Currently Update)\n\n\u003ccenter\u003e\u003cimg src=\"./docs/images/weatherflow_collector-system_stats.jpg\"\u003e\u003c/center\u003e\n\nThis provides two different system metrics to understand the health of your weatherflow-collector. At the top shows which container is running and when it last started. A default Docker health check is enabled for each container that requires some data to be received and persisted every 60 seconds, or the container is marked unhealthy. This check happens every 5 seconds and will restart the container after three failed checks.\n\nThe second section shows how long it takes to receive and persist forecasts and observations.\n\n - **Forecast Build Duration** - Daily - between 1 and 2 seconds\n - **Forecast Build Duration** - Hourly - between 30 and 45 seconds (note - if this takes longer than 60 seconds, the Docker Health Check will currently recycle the container. A future update will change this to take a longer build duration into account. For now - set the \"WEATHERFLOW_COLLECTOR_DOCKER_HEALTHCHECK_ENABLED\" environmental variable to \"false.\"\n - **Rest Observations** - between 1 and 2 seconds\n\n### Today So Far - [14387](https://grafana.com/grafana/dashboards/14387)\n\n\u003ccenter\u003e\u003cimg src=\"./docs/images/weatherflow_collector-today_so_far_remote.jpg\"\u003e\u003c/center\u003e\n\nThis dashboard provides for the Temperature (Air, Feels Like, Heat Index, Wind Chill, Dry Bulb, Wet Bulb, Dew Point), Relative Humidity, Air Density, Station Pressure (with Trending), Accumulated Rain, Solar Radiation, Illuminance, UV, Lightning Strike, and Wind Speed from midnight to the current time. These reflect the WeatherFlow measurements from data sent to WeatherFlow and include [derived metrics](https://weatherflow.github.io/Tempest/api/derived-metric-formulas.html) in the response.\n\n## Grafana Datasource\n\nThis collector uses InfluxQL, and for the dashboards to function, you need to create a data source in Grafana using the credentials you set in InfluxDB V2. More details can be found on the InfluxDB V2 Web site:\n\nhttps://docs.influxdata.com/influxdb/v2/tools/grafana/?t=InfluxQL#configure-your-influxdb-connection\n\nThe biggest change here is:\n\n - Configure InfluxDB authentication:\n   \n   **Token authentication**\n   Under **Custom HTTP Headers**, select **Add Header**. Provide your InfluxDB API token:\n   \n   **Header**: Enter `Authorization`\n   \n   **Value**: Use the `Token` schema and provide your InfluxDB API token. For example:\n   \n       Token y0uR5uP3rSecr3tT0k3n\n\n## Multiple Devices\n\nThe data collector and dashboards support multiple WeatherFlow Tempest devices.\n\n### Time Zone Variable\n\nA TZ variable is required when running the Docker containers. (It's populated automatically from the `generate_docker-compose.sh` scripts) \n\nTZ is specific to each hub/device location and is required as part of the InluxDB query to identify day breaks and other 12/24 hour interval groups. For dashboards with multiple devices in different time zones, you may need to correctly switch the time zones from the top drop-down to group midnight/noon periods.\n\n## Roadmap\n\nSee the open issues for a list of proposed features (and known issues).\n\n## Contact\n\nDave Schmid: [@lux4rd0](https://twitter.com/lux4rd0) - dave@pulpfree.org\n\nProject Link: [https://github.com/lux4rd0/weatherflow-collector](https://github.com/lux4rd0/weatherflow-collector)\n\n## Acknowledgements\n\n- Grafana Labs - [https://grafana.com/](https://grafana.com/)\n- Grafana - [https://grafana.com/oss/grafana/](https://grafana.com/oss/grafana/)\n- Grafana Dashboard Community - [https://grafana.com/grafana/dashboards/](https://grafana.com/grafana/dashboards/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flux4rd0%2Fweatherflow-collector","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flux4rd0%2Fweatherflow-collector","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flux4rd0%2Fweatherflow-collector/lists"}