├── .dockerignore ├── .gitignore ├── .sample-env ├── Dockerfile ├── README.md ├── db └── datahack.duckdb ├── docker-compose.yml ├── duckdb ├── images ├── fastapi.png ├── meetup-ppt.pdf ├── modern-data-stack-white.png ├── prefect.png └── streamlit.png ├── pdm.lock ├── prefect_deploy ├── extract_file_flow-docker-deployment.yaml ├── init_db_flow-docker-deployment.yaml └── load_data_flow-docker-deployment.yaml ├── pyproject.toml ├── src ├── api │ ├── __init__.py │ ├── data.py │ ├── main.py │ └── test.py ├── data │ ├── metadata │ │ ├── gauge-data-20231205t183704.csv │ │ ├── rainfall-and-stream-heights-metadata-20230917t110000.csv │ │ └── rainfall-and-stream-heights-metadata-20231205t110000.csv │ ├── seeds │ │ ├── new-file-2023-10-05-17:10:23.879877.csv │ │ ├── new-file-2023-10-05-17:11:16.632489.csv │ │ ├── new-file-2023-10-05-18:07:58.391447.csv │ │ ├── new-file-2023-10-05-18:17:34.325358.csv │ │ ├── new-file-2023-10-05-18:17:45.400984.csv │ │ ├── new-file-2023-10-05-18:17:59.195173.csv │ │ ├── new-file-2023-10-05-18:18:28.429141.csv │ │ ├── new-file-2023-10-05-18:18:45.739367.csv │ │ ├── new-file-2023-10-05-18:18:57.889059.csv │ │ ├── new-file-2023-10-05-18:19:17.394254.csv │ │ ├── new-file-2023-10-05-18:19:28.808457.csv │ │ ├── new-file-2023-10-05-18:19:48.793286.csv │ │ ├── new-file-2023-10-05-18:51:44.635607.csv │ │ ├── new-file-2023-10-05-18:51:44.711355.csv │ │ ├── new-file-2023-10-05-19:05:55.767864.csv │ │ ├── new-file-2023-10-05-19:48:59.205641.csv │ │ ├── new-file-2023-10-05-19:48:59.239027.csv │ │ ├── new-file-2023-10-05-19:55:48.320220.csv │ │ ├── new-file-2023-10-05-20:05:57.132002.csv │ │ ├── new-file-2023-10-05-20:52:03.668056.csv │ │ ├── new-file-2023-10-05-20:52:03.780199.csv │ │ ├── new-file-2023-10-05-20:52:04.318864.csv │ │ ├── new-file-2023-10-05-21:35:17.591688.csv │ │ ├── new-file-2023-10-05-21:35:17.955718.csv │ │ ├── new-file-2023-10-05-22:26:16.253101.csv │ │ ├── new-file-2023-10-05-22:26:38.699548.csv │ │ ├── new-file-2023-10-05-22:26:38.701648.csv │ │ ├── new-file-2023-10-05-22:26:38.723993.csv │ │ ├── new-file-2023-10-05-22:36:00.357618.csv │ │ ├── new-file-2023-10-05-22:50:54.395626.csv │ │ ├── new-file-2023-10-05-23:06:00.764353.csv │ │ ├── new-file-2023-10-05_17:06:13.820600.csv │ │ ├── new-file-2023-10-10-19:01:22.313426.csv │ │ ├── new-file-2023-10-10-19:02:26.150635.csv │ │ ├── new-file-2023-10-10-19:15:39.563734.csv │ │ ├── new-file-2023-10-10-19:30:33.734274.csv │ │ ├── new-file-2023-10-10-19:45:31.936433.csv │ │ ├── new-file-2023-10-10-20:00:33.518306.csv │ │ ├── new-file-2023-10-10-23:02:58.761291.csv │ │ ├── new-file-2023-10-10-23:15:14.439670.csv │ │ ├── new-file-2023-10-10-23:30:26.352735.csv │ │ ├── new-file-2023-10-10-23:45:16.358898.csv │ │ ├── new-file-2023-10-11-00:00:15.131390.csv │ │ ├── new-file-2023-10-11-00:45:54.703592.csv │ │ ├── new-file-2023-10-11-00:45:54.822383.csv │ │ ├── new-file-2023-10-11-00:45:54.916062.csv │ │ ├── new-file-2023-10-11-01:01:47.245159.csv │ │ ├── new-file-2023-10-11-03:02:47.787995.csv │ │ ├── new-file-2023-10-11-03:02:49.371171.csv │ │ ├── new-file-2023-10-11-03:02:50.808991.csv │ │ ├── new-file-2023-10-11-03:02:51.882477.csv │ │ ├── new-file-2023-10-11-03:02:52.958816.csv │ │ ├── new-file-2023-10-11-05:03:39.826281.csv │ │ ├── new-file-2023-10-11-05:03:40.870376.csv │ │ ├── new-file-2023-10-11-05:03:42.523727.csv │ │ ├── new-file-2023-10-11-05:03:44.605503.csv │ │ ├── new-file-2023-10-11-05:03:45.025232.csv │ │ ├── new-file-2023-10-11-05:45:17.394414.csv │ │ ├── new-file-2023-10-11-06:00:15.073950.csv │ │ ├── new-file-2023-10-11-06:21:56.990802.csv │ │ ├── new-file-2023-10-11-06:30:15.454244.csv │ │ ├── new-file-2023-10-11-06:45:19.081323.csv │ │ ├── new-file-2023-10-11-07:00:15.306063.csv │ │ ├── new-file-2023-10-11-07:15:14.498067.csv │ │ ├── new-file-2023-10-11-07:30:14.247967.csv │ │ ├── new-file-2023-10-11-08:01:11.103234.csv │ │ ├── new-file-2023-10-11-08:01:11.164091.csv │ │ ├── new-file-2023-10-11-08:15:14.323575.csv │ │ ├── new-file-2023-10-11-08:30:14.853866.csv │ │ ├── new-file-2023-10-11-08:45:14.869677.csv │ │ ├── new-file-2023-10-11-09:00:14.440400.csv │ │ ├── new-file-2023-10-11-09:15:16.000017.csv │ │ ├── new-file-2023-10-11-09:30:15.634916.csv │ │ ├── new-file-2023-10-14-22:20:57.717826.csv │ │ ├── new-file-2023-10-14-22:30:14.461269.csv │ │ ├── new-file-2023-10-14-23:01:35.589887.csv │ │ ├── new-file-2023-10-14-23:01:35.645492.csv │ │ ├── new-file-2023-10-14-23:43:36.698126.csv │ │ ├── new-file-2023-10-14-23:43:36.818433.csv │ │ ├── new-file-2023-10-15-00:00:24.566499.csv │ │ ├── new-file-2023-10-15-00:00:24.648448.csv │ │ ├── new-file-2023-10-15-02:01:12.373963.csv │ │ ├── new-file-2023-10-15-02:43:08.669734.csv │ │ ├── new-file-2023-10-15-02:43:08.726784.csv │ │ ├── new-file-2023-10-15-02:59:21.292551.csv │ │ ├── new-file-2023-10-15-03:17:41.008380.csv │ │ ├── new-file-2023-10-15-03:17:41.093292.csv │ │ ├── new-file-2023-10-15-05:18:37.541866.csv │ │ ├── new-file-2023-10-15-05:18:37.659441.csv │ │ ├── new-file-2023-10-15-05:18:37.787352.csv │ │ ├── new-file-2023-10-15-05:57:38.480572.csv │ │ ├── new-file-2023-10-15-06:00:15.133883.csv │ │ ├── new-file-2023-10-15-06:15:22.820217.csv │ │ ├── new-file-2023-10-15-06:44:43.512864.csv │ │ ├── new-file-2023-10-15-06:45:14.837202.csv │ │ ├── new-file-2023-10-15-07:00:14.484112.csv │ │ ├── new-file-2023-10-15-07:15:16.811272.csv │ │ ├── new-file-2023-10-15-07:30:14.305748.csv │ │ ├── new-file-2023-10-15-08:08:11.974701.csv │ │ ├── new-file-2023-10-15-08:08:12.111844.csv │ │ ├── new-file-2023-10-15-08:15:30.218465.csv │ │ ├── new-file-2023-10-15-09:00:23.935385.csv │ │ ├── new-file-2023-10-15-09:35:30.873805.csv │ │ ├── new-file-2023-10-15-09:35:30.996238.csv │ │ ├── new-file-2023-10-15-09:52:19.117553.csv │ │ ├── new-file-2023-10-15-11:33:57.736047.csv │ │ └── new-file-2023-10-15-11:33:57.799858.csv │ └── staging │ │ └── new-file-2023-10-16-07:06:30.161624.csv ├── flows │ ├── __init__.py │ ├── db.py │ ├── deploy.sh │ ├── extract_flow.py │ ├── init_flow.py │ ├── load_flow.py │ └── transform_flow.py └── web │ ├── __init__.py │ ├── style.css │ └── weatherboard_app.py ├── style.css └── tests └── __init__.py /.dockerignore: -------------------------------------------------------------------------------- 1 | .git* 2 | **/*.pyc 3 | .venv 4 | .pdm-python -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | share/python-wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | cover/ 54 | 55 | # Translations 56 | *.mo 57 | *.pot 58 | 59 | # Django stuff: 60 | *.log 61 | local_settings.py 62 | db.sqlite3 63 | db.sqlite3-journal 64 | 65 | # Flask stuff: 66 | instance/ 67 | .webassets-cache 68 | 69 | # Scrapy stuff: 70 | .scrapy 71 | 72 | # Sphinx documentation 73 | docs/_build/ 74 | 75 | # PyBuilder 76 | .pybuilder/ 77 | target/ 78 | 79 | # Jupyter Notebook 80 | .ipynb_checkpoints 81 | 82 | # IPython 83 | profile_default/ 84 | ipython_config.py 85 | 86 | # pyenv 87 | # For a library or package, you might want to ignore these files since the code is 88 | # intended to run in multiple environments; otherwise, check them in: 89 | # .python-version 90 | 91 | # pipenv 92 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 93 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 94 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 95 | # install all needed dependencies. 96 | #Pipfile.lock 97 | 98 | # poetry 99 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 100 | # This is especially recommended for binary packages to ensure reproducibility, and is more 101 | # commonly ignored for libraries. 102 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 103 | #poetry.lock 104 | 105 | # pdm 106 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 107 | #pdm.lock 108 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 109 | # in version control. 110 | # https://pdm-project.org/#use-with-ide 111 | .pdm.toml 112 | .pdm-python 113 | .pdm-build/ 114 | 115 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 116 | __pypackages__/ 117 | 118 | # Celery stuff 119 | celerybeat-schedule 120 | celerybeat.pid 121 | 122 | # SageMath parsed files 123 | *.sage.py 124 | 125 | # Environments 126 | .env 127 | .venv 128 | env/ 129 | venv/ 130 | ENV/ 131 | env.bak/ 132 | venv.bak/ 133 | 134 | # Spyder project settings 135 | .spyderproject 136 | .spyproject 137 | 138 | # Rope project settings 139 | .ropeproject 140 | 141 | # mkdocs documentation 142 | /site 143 | 144 | # mypy 145 | .mypy_cache/ 146 | .dmypy.json 147 | dmypy.json 148 | 149 | # Pyre type checker 150 | .pyre/ 151 | 152 | # pytype static type analyzer 153 | .pytype/ 154 | 155 | # Cython debug symbols 156 | cython_debug/ 157 | 158 | # PyCharm 159 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 160 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 161 | # and can be added to the global gitignore or merged into this file. For a more nuclear 162 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 163 | #.idea/ 164 | 165 | # external modules 166 | *.mapbox_token 167 | -------------------------------------------------------------------------------- /.sample-env: -------------------------------------------------------------------------------- 1 | PREFECT_API_KEY=XXXXXXX 2 | PREFECT_API_URL=YYYYYYY 3 | MAPBOX_TOKEN=ZZZZZZZZZZ -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.11 2 | 3 | RUN mkdir /code 4 | 5 | WORKDIR /code 6 | ENV PATH="/code/.venv/bin:$PATH" 7 | 8 | #RUN pip install pdm fastapi uvicorn streamlit prefect httpx python-dotenv pandas duckdb==0.8.1 9 | 10 | COPY . /code 11 | 12 | RUN pip install pdm 13 | 14 | #RUN pdm config python.use_venv false && pdm install 15 | RUN pdm install && python .venv/bin/activate_this.py 16 | 17 | EXPOSE 8000 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # IoT Platform Using Modern Data Stack 2 | This project goal is to create an IoT platform from scratch using Modern Data Stack ( Prefect, DuckDB , FastAPI, Streamlit) 3 | 4 | ![IoT Platform](images/modern-data-stack-white.png "Modern Data Stack!") 5 | 6 | # Pre-requisites 7 | 8 | - Prefect Cloud account 9 | - Prefect API URL and Key 10 | - Mapbox Token 11 | - Docker desktop 12 | - [PDM ( Python Dependency Manager )](https://pdm-project.org/latest/) 13 | - [Prefect](https://www.prefect.io/) 14 | - [FastAPI](https://fastapi.tiangolo.com/) 15 | - [Streamlit](https://streamlit.io/) 16 | 17 | # How to Run 18 | 19 | 1. Install pdm 20 | 21 | `$ curl -sSLO https://pdm-project.org/install-pdm.py ` 22 | 23 | `$ python3 install-pdm.py [options]` 24 | 25 | 26 | 2. Install dependencies 27 | 28 | `$ pdm install` 29 | 30 | 31 | 3. Activate virtual environment 32 | 33 | `$ eval $(pdm venv activate)` 34 | 35 | 4. Create '.env' variable inside root directory by renaming .sample-env and then provide your credentials 36 | 37 | 5. Run docker from root directory 38 | 39 | `$ docker compose up` 40 | 41 | 42 | # How To Use 43 | 44 | 1. API - http://localhost:8000/docs 45 | 46 | ![FastAPI](images/fastapi.png "FastAPI") 47 | 48 | 2. Web UI (Streamlit App) - http://localhost:8015 49 | 50 | ![Streamlit App](images/streamlit.png "Streamlit App") 51 | 52 | 3. Prefect Cloud UI - https://app.prefect.cloud 53 | 54 | ![Prefect](images/prefect.png "Prefect Cloud") 55 | 56 | 57 | ### Meetup Presentation 58 | 59 | [Moder Data Stack PPT](images/meetup-ppt.pdf) -------------------------------------------------------------------------------- /db/datahack.duckdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datamatiks/iot-platform-modern-data-stack-poc/aa297ae569ef507fe040f3c67ad81650c91c5e11/db/datahack.duckdb -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.8" 2 | services: 3 | api: 4 | build: . 5 | command: uvicorn src.api.main:app --host 0.0.0.0 --proxy-headers --reload 6 | ports: 7 | - "8000:8000" 8 | volumes: 9 | - db:/code/db 10 | networks: 11 | default: 12 | aliases: 13 | - iot-platform-demo-api.dev 14 | flows: 15 | build: . 16 | #command: python src/app/etl_flow.py && prefect deployment run ingest-gauge-data/ingest-15-mins 17 | command: sh src/flows/deploy.sh 18 | - "8080:8080" 19 | volumes: 20 | - db:/code/db 21 | environment: 22 | - PREFECT_API_KEY=${PREFECT_API_KEY} 23 | - PREFECT_API_URL=${PREFECT_API_URL} 24 | web: 25 | build: . 26 | command: streamlit run src/web/weatherboard_app.py 27 | ports: 28 | - "8501:8501" 29 | volumes: 30 | - db:/code/db 31 | volumes: 32 | db: 33 | driver: local -------------------------------------------------------------------------------- /duckdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datamatiks/iot-platform-modern-data-stack-poc/aa297ae569ef507fe040f3c67ad81650c91c5e11/duckdb -------------------------------------------------------------------------------- /images/fastapi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datamatiks/iot-platform-modern-data-stack-poc/aa297ae569ef507fe040f3c67ad81650c91c5e11/images/fastapi.png -------------------------------------------------------------------------------- /images/meetup-ppt.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datamatiks/iot-platform-modern-data-stack-poc/aa297ae569ef507fe040f3c67ad81650c91c5e11/images/meetup-ppt.pdf -------------------------------------------------------------------------------- /images/modern-data-stack-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datamatiks/iot-platform-modern-data-stack-poc/aa297ae569ef507fe040f3c67ad81650c91c5e11/images/modern-data-stack-white.png -------------------------------------------------------------------------------- /images/prefect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datamatiks/iot-platform-modern-data-stack-poc/aa297ae569ef507fe040f3c67ad81650c91c5e11/images/prefect.png -------------------------------------------------------------------------------- /images/streamlit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datamatiks/iot-platform-modern-data-stack-poc/aa297ae569ef507fe040f3c67ad81650c91c5e11/images/streamlit.png -------------------------------------------------------------------------------- /prefect_deploy/extract_file_flow-docker-deployment.yaml: -------------------------------------------------------------------------------- 1 | ### 2 | ### A complete description of a Prefect Deployment for flow 'extract-file-flow' 3 | ### 4 | name: extract-file-dev-deploy-15mins 5 | description: null 6 | version: 0bc5c6c7e9e39e9311ec3a917f1e7687 7 | # The work queue that will handle this deployment's runs 8 | work_queue_name: my-demo-agent 9 | work_pool_name: null 10 | tags: [] 11 | parameters: {} 12 | schedule: 13 | interval: 900.0 14 | anchor_date: '2023-10-16T13:00:14.413188+00:00' 15 | timezone: UTC 16 | is_schedule_active: null 17 | infra_overrides: {} 18 | infrastructure: 19 | type: process 20 | env: {} 21 | labels: {} 22 | name: null 23 | command: null 24 | stream_output: true 25 | working_dir: /code 26 | block_type_slug: process 27 | _block_type_slug: process 28 | 29 | ### 30 | ### DO NOT EDIT BELOW THIS LINE 31 | ### 32 | flow_name: extract-file-flow 33 | manifest_path: null 34 | storage: null 35 | path: /code 36 | entrypoint: src/flows/extract_flow.py:extract_file_flow 37 | parameter_openapi_schema: 38 | title: Parameters 39 | type: object 40 | properties: 41 | name: 42 | title: name 43 | default: 'Gauge Data Extract' 44 | position: 0 45 | log_prints: 46 | title: log_prints 47 | default: true 48 | position: 1 49 | required: null 50 | definitions: null 51 | timestamp: '2023-10-10T13:00:14.413724+00:00' 52 | triggers: [] 53 | enforce_parameter_schema: null 54 | -------------------------------------------------------------------------------- /prefect_deploy/init_db_flow-docker-deployment.yaml: -------------------------------------------------------------------------------- 1 | ### 2 | ### A complete description of a Prefect Deployment for flow 'init-db-flow' 3 | ### 4 | name: init-db-dev-deploy 5 | description: null 6 | version: f9003a9cb52cd7bf30959189a5a18fd0 7 | # The work queue that will handle this deployment's runs 8 | work_queue_name: my-demo-agent 9 | work_pool_name: null 10 | tags: [] 11 | parameters: {} 12 | schedule: null 13 | is_schedule_active: null 14 | infra_overrides: {} 15 | infrastructure: 16 | type: process 17 | env: {} 18 | labels: {} 19 | name: null 20 | command: null 21 | stream_output: true 22 | working_dir: /code 23 | block_type_slug: process 24 | _block_type_slug: process 25 | 26 | ### 27 | ### DO NOT EDIT BELOW THIS LINE 28 | ### 29 | flow_name: init-db-flow 30 | manifest_path: null 31 | storage: null 32 | path: /code 33 | entrypoint: src/flows/init_flow.py:init_db_flow 34 | parameter_openapi_schema: 35 | title: Parameters 36 | type: object 37 | properties: 38 | name: 39 | title: name 40 | default: 'Initialize DB flow ' 41 | position: 0 42 | log_prints: 43 | title: log_prints 44 | default: true 45 | position: 1 46 | required: null 47 | definitions: null 48 | timestamp: '2023-10-10T12:04:49.589078+00:00' 49 | triggers: [] 50 | enforce_parameter_schema: null 51 | -------------------------------------------------------------------------------- /prefect_deploy/load_data_flow-docker-deployment.yaml: -------------------------------------------------------------------------------- 1 | ### 2 | ### A complete description of a Prefect Deployment for flow 'load-data-flow' 3 | ### 4 | name: load-data-dev-deploy 5 | description: null 6 | version: cda2af39d3eac1c273b086922a663d18 7 | # The work queue that will handle this deployment's runs 8 | work_queue_name: my-demo-agent 9 | work_pool_name: null 10 | tags: [] 11 | parameters: {} 12 | schedule: null 13 | is_schedule_active: null 14 | infra_overrides: {} 15 | infrastructure: 16 | type: process 17 | env: {} 18 | labels: {} 19 | name: null 20 | command: null 21 | stream_output: true 22 | working_dir: /code 23 | block_type_slug: process 24 | _block_type_slug: process 25 | 26 | ### 27 | ### DO NOT EDIT BELOW THIS LINE 28 | ### 29 | flow_name: load-data-flow 30 | manifest_path: null 31 | storage: null 32 | path: /code 33 | entrypoint: src/flows/load_flow.py:load_data_flow 34 | parameter_openapi_schema: 35 | title: Parameters 36 | type: object 37 | properties: 38 | name: 39 | title: name 40 | default: 'Load data to duckdb flow ' 41 | position: 0 42 | log_prints: 43 | title: log_prints 44 | default: true 45 | position: 1 46 | required: null 47 | definitions: null 48 | timestamp: '2023-10-10T13:06:59.369442+00:00' 49 | triggers: [] 50 | enforce_parameter_schema: null 51 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "iot-platform-demo" 3 | version = "0.0.1" 4 | description = "An IoT system demo" 5 | authors = [ 6 | {name = "nifrali", email = "francisco.liwa@gmail.com"}, 7 | ] 8 | dependencies = [ 9 | "duckdb>=0.9.2", 10 | "httpx>=0.25.0", 11 | "prefect>=2.13.4", 12 | "python-dotenv>=1.0.0", 13 | "pandas==2.0.0", 14 | "fastapi>=0.103.2", 15 | "uvicorn>=0.23.2", 16 | "streamlit>=1.27.2", 17 | "plost>=0.2.5", 18 | "streamlit-folium>=0.15.0", 19 | "plotly>=5.17.0", 20 | "streamlit-plotly-events>=0.0.6", 21 | ] 22 | requires-python = ">=3.11" 23 | readme = "README.md" 24 | license = {text = "MIT"} 25 | 26 | -------------------------------------------------------------------------------- /src/api/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datamatiks/iot-platform-modern-data-stack-poc/aa297ae569ef507fe040f3c67ad81650c91c5e11/src/api/__init__.py -------------------------------------------------------------------------------- /src/api/data.py: -------------------------------------------------------------------------------- 1 | import duckdb 2 | 3 | def get_conn(db=':memory:',is_shared=False): 4 | return duckdb.connect(database=db, read_only=is_shared) 5 | 6 | class Database(): 7 | 8 | def __init__(self): 9 | self.conn = get_conn('db/datahack.duckdb') 10 | self._metrics_df = self.__init_metrics_df(self.conn) 11 | self._attributes = self.__get_attributes() 12 | 13 | def __init_metrics_df(self, conn): 14 | metrics_df = conn.sql('SELECT * EXCLUDE(measured_day,measured_hour,measured_minute) FROM ingest_gauge_metrics').df() 15 | metrics_df = metrics_df.set_index("measured_datetime") 16 | metrics_df = metrics_df.astype('Float64') 17 | 18 | conn.close() 19 | return metrics_df 20 | 21 | def __get_attributes(self): 22 | conn = get_conn('db/datahack.duckdb') 23 | attrs_df = conn.sql('SELECT * FROM gauge_sensors_metadata').df() 24 | conn.close() 25 | return attrs_df #.to_csv(index=False) 26 | 27 | @property 28 | def metrics_df(self): 29 | return self._metrics_df 30 | 31 | @property 32 | def attributes(self): 33 | return self._attributes 34 | 35 | def get_gauge_metrics(self): 36 | print('Get metrics') 37 | return self.metrics_df 38 | 39 | def get_gauge_metadata(self): 40 | print('Get metadata') 41 | return self.attributes 42 | 43 | def get_daily_avg(self): 44 | print('Daily Avg') 45 | daily_mean = self.metrics_df.resample("D").mean() 46 | print(daily_mean) 47 | 48 | return daily_mean 49 | 50 | def get_daily_max(self): 51 | print('Daily Max') 52 | daily_max = self.metrics_df.resample("D").max() 53 | print(daily_max) 54 | 55 | return daily_max 56 | 57 | def get_daily_min(self): 58 | print('Daily Min') 59 | daily_min = self.metrics_df.resample("D").min() 60 | print(daily_min) 61 | 62 | return daily_min -------------------------------------------------------------------------------- /src/api/main.py: -------------------------------------------------------------------------------- 1 | 2 | from typing import Union 3 | from fastapi import FastAPI 4 | from fastapi.responses import StreamingResponse 5 | import io 6 | 7 | from .data import Database 8 | 9 | app = FastAPI() 10 | db = Database() 11 | 12 | @app.get("/") 13 | def read_root(): 14 | return {"Hello": "World"} 15 | 16 | 17 | @app.get("/items/{item_id}") 18 | def read_item(item_id: int, q: Union[str, None] = None): 19 | return {"item_id": item_id, "q": q} 20 | 21 | @app.get("/api/v1/daily_avg", response_class=StreamingResponse) 22 | def get_daily_avg(): 23 | avg_df = db.get_daily_avg() 24 | avg_df = avg_df.reset_index() 25 | 26 | return _to_csv(avg_df,'daily_avg') 27 | 28 | @app.get("/api/v1/daily_max", response_class=StreamingResponse) 29 | def get_daily_max(): 30 | max_df = db.get_daily_max() 31 | max_df = max_df.reset_index() 32 | 33 | return _to_csv(max_df,'daily_max') 34 | 35 | @app.get("/api/v1/daily_min" ,response_class=StreamingResponse) 36 | def get_daily_min(): 37 | min_df = db.get_daily_min() 38 | min_df = min_df.reset_index() 39 | 40 | return _to_csv(min_df,'daily_min') 41 | 42 | 43 | @app.get("/api/v1/metadata", response_class=StreamingResponse) 44 | def get_metadata(): 45 | mdf = db.get_gauge_metadata() 46 | return _to_csv(mdf,'metadata') 47 | 48 | @app.get("/api/v1/sensor_metrics", response_class=StreamingResponse) 49 | def get_sensor_metrics(): 50 | print("api/v1/sensor_metrics") 51 | gdf = db.get_gauge_metrics() 52 | gdf = gdf.reset_index() 53 | 54 | return _to_csv(gdf,'metrics') 55 | 56 | 57 | def _to_csv(df, fname): 58 | stream = io.StringIO() 59 | df.to_csv(stream, index=False) 60 | response = StreamingResponse( 61 | iter([stream.getvalue()]), media_type="text/csv") 62 | response.headers["Content-Disposition"] = f"attachment; filename={fname}.csv" 63 | 64 | return response -------------------------------------------------------------------------------- /src/api/test.py: -------------------------------------------------------------------------------- 1 | import duckdb 2 | 3 | def get_conn(db=':memory:',is_shared=False): 4 | return duckdb.connect(database=db, read_only=is_shared) 5 | 6 | 7 | 8 | conn = get_conn('../../db/datahack.duckdb') 9 | 10 | conn.sql('SELECT * FROM ingest_pipeline_audit_log').show() 11 | metrics_df = conn.sql('SELECT * EXCLUDE(measured_day,measured_hour,measured_minute) FROM ingest_gauge_metrics').df() 12 | metrics_df = metrics_df.set_index("measured_datetime") -------------------------------------------------------------------------------- /src/data/metadata/rainfall-and-stream-heights-metadata-20230917t110000.csv: -------------------------------------------------------------------------------- 1 | "Sensor ID","Location ID","Location Name","Sensor Type","Unit of Measure","Latitude","Longitude" 2 | "E1809","540801","Rachele Close, Forest Lake","Rainfall","mm","-27.631476","152.953555" 3 | "E1531","540118","Bancroft Park, Kelvin Grove","Stream Height AHD","m","-27.444481","153.005314" 4 | "E1515","540099","Chadston Close, Kenmore Hills","Rainfall","mm","-27.504712","152.924885" 5 | "E1512","540117","ABQ-2 Mt Coot -tha","Rainfall","mm","-27.463952","152.947533" 6 | "E2020","540071","Corinda High School, Corinda","Rainfall","mm","-27.546892","152.988372" 7 | "E1886","540800","Rosewood Place, Murarrie","Rainfall","mm","-27.465266","153.094268" 8 | "E2111","40788","Johnson Rd (Adermann Br), Forestdale","Stream Height AHD","m","-27.655308","153.000406" 9 | "E1594","540286","Mouth of Breakfast Ck, Newstead","Stream Height AHD","m","-27.441564","153.047296" 10 | "E1561","540124","Burralong St, Deagon","Stream Height AHD","m","-27.334180","153.058401" 11 | "E1560","540124","Burralong St, Deagon","Rainfall","mm","-27.334180","153.058401" 12 | "E1736","540029","Inala/Durack Bowls Club, Inala","Rainfall","mm","-27.588438","152.987051" 13 | "E2121","40789","King Ave, Durack","Stream Height AHD","m","-27.593567","152.996778" 14 | "E1518","540098","Wacol Sewage Treatment Plant, Wacol","Rainfall","mm","-27.579353","152.907165" 15 | "E1857","540685","Hawthorne AL","Stream Height AHD","m","-27.460250","153.053569" 16 | "E1855","540684","Port Office Gauge","Stream Height AHD","m","-27.471705","153.030841" 17 | "E1854","540378","Brumby Circuit, Sumner","Stream Height AHD","m","-27.565807","152.930385" 18 | "E1888","540803","BCC Asphalt Plant, Eagle Farm","Rainfall","mm","-27.439465","153.083616" 19 | "E1549","540134","Joachim St, Holland Park West","Stream Height AHD","m","-27.521486","153.055421" 20 | "E2114","40784","Beaudesert Rd (Telstra Exchange),Calamvale","Rainfall","mm","-27.610187","153.050145" 21 | "E1764","540201","Moggill (BCC) AL","Stream Height AHD","m","-27.587144","152.864111" 22 | "E1554","540132","Caswell St, East Brisbane","Rainfall","mm","-27.489611","153.049787" 23 | "E1710","540804","Royal Pde, Ashgrove","Stream Height AHD","m","-27.446550","152.970140" 24 | "E1596","540240","Tarana St, Camp Hill","Rainfall","mm","-27.495396","153.073013" 25 | "E1528","540129","Doughboy Parade, Hemmant","Stream Height AHD","m","-27.448810","153.125969" 26 | "E1850","540431","Frank Sleeman Pk, Boondall","Rainfall","mm","-27.361689","153.057626" 27 | "E1580","540278","Byrneside St, Wynnum","Stream Height AHD","m","-27.440702","153.169379" 28 | "E1548","540134","Joachim St, Holland Park West","Rainfall","mm","-27.521486","153.055421" 29 | "E1727","540097","Oxley Ck at New Beith","Stream Height AHD","m","-27.730453","152.946878" 30 | "E1839","540371","Jude St Reservoir, Bracken Ridge","Rainfall","mm","-27.321035","153.032052" 31 | "E1588","540274","Mouth of Oxley Ck, Graceville","Stream Height AHD","m","-27.524684","152.994663" 32 | "E1765","540682","Jindalee (BCC) AL","Stream Height AHD","m","-27.531969","152.928725" 33 | "E1540","540111","Osborne Rd, Everton Park","Stream Height AHD","m","-27.403391","152.978646" 34 | "E1884","540799","Lugg Street, Bardon","Stream Height AHD","m","-27.449165","152.991398" 35 | "E1852","540465","Green Hill Reservoir, Russell Tce Chapel Hill","Rainfall","mm","-27.495048","152.957743" 36 | "E2108","40788","Johnson Rd (Adermann Br), Forestdale","Rainfall","mm","-27.655308","153.000406" 37 | "E1563","540120","Brickyard Rd, Geebung","Rainfall","mm","-27.382354","153.058800" 38 | "E1742","540297","Pullenvale Hall, Pullenvale","Rainfall","mm","-27.523464","152.886260" 39 | "E1873","540785","Baroona Rd, Bardon","Rainfall","mm","-27.465000","152.991000" 40 | "E1755","540282","Harman Rec. Res., Manly","Rainfall","mm","-27.460602","153.182091" 41 | "E1804","540127","Greenwood St, Wishart","Stream Height AHD","m","-27.559989","153.104185" 42 | "E2023","540071","Corinda High School, Corinda","Stream Height AHD","m","-27.546892","152.988372" 43 | "E1845","540469","Pound Ck, Hendra Pony Club, Nundah","Stream Height AHD","m","-27.400186","153.075580" 44 | "E1572","540121","Collins Rd, Everton Hills","Rainfall","mm","-27.380613","152.979177" 45 | "E1849","540433","Muriel Ave, Moorooka","Stream Height AHD","m","-27.542053","153.013724" 46 | "E1527","540129","Doughboy Parade, Hemmant","Rainfall","mm","-27.448810","153.125969" 47 | "E2138","40790","Griffith Uni, Mt Gravatt Campus","Rainfall","mm","-27.544760","153.063690" 48 | "E1830","540126","Edwards Park (Merion Pl), Carindale","Rainfall","mm","-27.528264","153.105826" 49 | "E1879","540791","Chandler (Bacton Rd) AL","Rainfall","mm","-27.510199","153.153680" 50 | "E2116","40785","Blunder Ck at Richlands","Rainfall","mm","-27.599501","152.959274" 51 | "E1836","540125","Gagarra St, Eight Mile Plains","Rainfall","mm","-27.583147","153.089181" 52 | "E1851","540431","Frank Sleeman Pk, Boondall","Stream Height AHD","m","-27.361689","153.057626" 53 | "E1739","540225","Wynnum Sewage Treatment Plant, Lytton","Rainfall","mm","-27.418952","153.163377" 54 | "E1707","540128","Old Cleveland Rd, Carindale","Stream Height AHD","m","-27.501018","153.105435" 55 | "E1747","540470","Dulcie St, Salisbury","Rainfall","mm","-27.549406","153.037578" 56 | "E2125","40796","Beatty Rd, Acacia Ridge","Stream Height AHD","m","-27.584692","153.010010" 57 | "E1752","540802","Queens Parade, Brighton","Rainfall","mm","-27.298900","153.056000" 58 | "E1803","540127","Greenwood St, Wishart","Rainfall","mm","-27.559989","153.104185" 59 | "E1573","540121","Collins Rd, Everton Hills","Stream Height AHD","m","-27.380613","152.979177" 60 | "E1706","540128","Old Cleveland Rd, Carindale","Rainfall","mm","-27.501018","153.105435" 61 | "E1578","540239","Sedgley Park, Alderley","Rainfall","mm","-27.429908","153.006030" 62 | "E1847","540432","Marshall Rd (Behind Bunnings), Rocklea","Stream Height AHD","m","-27.553681","153.009734" 63 | "E1745","540296","Pinjarra & Moggill Rds, Pinjarra Hills","Stream Height AHD","m","-27.549567","152.890822" 64 | "E1524","540130","Mayne Railway Yards, Bowen Hills","Rainfall","mm","-27.441126","153.034819" 65 | "E1557","540548","U/S Nudgee Rd, Nundah","Rainfall","mm","-27.407093","153.073602" 66 | "E1749","540281","Anzac Park, Toowong","Rainfall","mm","-27.480220","152.979381" 67 | "E1844","540469","Pound Ck, Hendra Pony Club, Nundah","Rainfall","mm","-27.400186","153.075580" 68 | "E1507","540110","3 WAYS Brisbane Forest Park Mt. Nebo","Rainfall","mm","-27.443587","152.826974" 69 | "E1539","540111","Osborne Rd, Everton Park","Rainfall","mm","-27.403391","152.978646" 70 | "E1841","540369","Bulimba Library, Balmoral","Rainfall","mm","-27.452049","153.062915" 71 | "E1575","540478","McCord St, Gordon Park","Rainfall","mm","-27.416507","153.032495" 72 | "E1837","540322","Wynnum Bowls Club, Wynnum","Rainfall","mm","-27.443440","153.167319" 73 | "E1831","540126","Edwards Park (Merion Pl), Carindale","Stream Height AHD","m","-27.528264","153.105826" 74 | "E1576","540478","McCord St, Gordon Park","Stream Height AHD","m","-27.416507","153.032495" 75 | "E1856","540683","St Lucia AL","Stream Height AHD","m","-27.504001","153.005872" 76 | "E1564","540120","Brickyard Rd, Geebung","Stream Height AHD","m","-27.382354","153.058800" 77 | "E1892","540822","Arnwood Pl, Ekibin","Stream Height AHD","m","-27.513348","153.039186" 78 | "E1555","540132","Caswell St, East Brisbane","Stream Height AHD","m","-27.489611","153.049787" 79 | "E1763","540636","Trouts Road, Everton Park","Stream Height AHD","m","-27.392514","152.996723" 80 | "E1722","540061","Fortrose St, Kenmore","Stream Height AHD","m","-27.511376","152.926662" 81 | "E2141","540279","Rickertt Rd, Ransome","Rainfall","mm","-27.485587","153.171280" 82 | "E1702","540122","Pineapple St, Carseldine","Stream Height AHD","m","-27.352887","153.032022" 83 | "E1566","540114","Aspley Reservoir, Aspley","Rainfall","mm","-27.373988","153.009476" 84 | "E1875","540786","Gardner Rd, Rochedale","Rainfall","mm","-27.558197","153.121038" 85 | "E1838","540372","Luggage Point Sewage Treatment Plant","Rainfall","mm","-27.381052","153.147312" 86 | "E1843","540468","Cannery Ck (d/s Nudgee Rd), Northgate","Stream Height AHD","m","-27.392896","153.082018" 87 | "E1570","540113","Stringy Bark Drive, Aspley","Stream Height AHD","m","-27.370485","153.005329" 88 | "E2142","540279","Rickertt Rd, Ransome","Stream Height AHD","m","-27.485587","153.171280" 89 | "E1890","540805","Oxley Creek, U/S Ipswich Mtwy","Stream Height AHD","m","-27.564680","152.990390" 90 | "E1761","540466","Upper Kedron Rec. Res.,Upper Kedron","Rainfall","mm","-27.410440","152.922531" 91 | "E2129","40791","Musgrave Rd, Coopers Plains","Stream Height AHD","m","-27.561940","153.026996" 92 | "E1525","540130","Mayne Railway Yards, Bowen Hills","Stream Height AHD","m","-27.441126","153.034819" 93 | "E1558","540548","U/S Nudgee Rd, Nundah","Stream Height AHD","m","-27.407093","153.073602" 94 | -------------------------------------------------------------------------------- /src/data/metadata/rainfall-and-stream-heights-metadata-20231205t110000.csv: -------------------------------------------------------------------------------- 1 | "Sensor ID","Location ID","Location Name","Sensor Type","Unit of Measure","Latitude","Longitude" 2 | "E1809","540801","Rachele Close, Forest Lake","Rainfall","mm","-27.631476","152.953555" 3 | "E1531","540118","Bancroft Park, Kelvin Grove","Stream Height AHD","m","-27.444481","153.005314" 4 | "E1515","540099","Chadston Close, Kenmore Hills","Rainfall","mm","-27.504712","152.924885" 5 | "E1512","540117","ABQ-2 Mt Coot -tha","Rainfall","mm","-27.463952","152.947533" 6 | "E2020","540071","Corinda High School, Corinda","Rainfall","mm","-27.546892","152.988372" 7 | "E1886","540800","Rosewood Place, Murarrie","Rainfall","mm","-27.465266","153.094268" 8 | "E2111","40788","Johnson Rd (Adermann Br), Forestdale","Stream Height AHD","m","-27.655308","153.000406" 9 | "E1594","540286","Mouth of Breakfast Ck, Newstead","Stream Height AHD","m","-27.441564","153.047296" 10 | "E1561","540124","Burralong St, Deagon","Stream Height AHD","m","-27.334180","153.058401" 11 | "E1560","540124","Burralong St, Deagon","Rainfall","mm","-27.334180","153.058401" 12 | "E1736","540029","Inala/Durack Bowls Club, Inala","Rainfall","mm","-27.588438","152.987051" 13 | "E2121","40789","King Ave, Durack","Stream Height AHD","m","-27.593567","152.996778" 14 | "E1518","540098","Wacol Sewage Treatment Plant, Wacol","Rainfall","mm","-27.579353","152.907165" 15 | "E1857","540685","Hawthorne AL","Stream Height AHD","m","-27.460250","153.053569" 16 | "E1855","540684","Port Office Gauge","Stream Height AHD","m","-27.471705","153.030841" 17 | "E1854","540378","Brumby Circuit, Sumner","Stream Height AHD","m","-27.565807","152.930385" 18 | "E1888","540803","BCC Asphalt Plant, Eagle Farm","Rainfall","mm","-27.439465","153.083616" 19 | "E1549","540134","Joachim St, Holland Park West","Stream Height AHD","m","-27.521486","153.055421" 20 | "E2114","40784","Beaudesert Rd (Telstra Exchange),Calamvale","Rainfall","mm","-27.610187","153.050145" 21 | "E1764","540201","Moggill (BCC) AL","Stream Height AHD","m","-27.587144","152.864111" 22 | "E1554","540132","Caswell St, East Brisbane","Rainfall","mm","-27.489611","153.049787" 23 | "E1710","540804","Royal Pde, Ashgrove","Stream Height AHD","m","-27.446550","152.970140" 24 | "E1596","540240","Tarana St, Camp Hill","Rainfall","mm","-27.495396","153.073013" 25 | "E1528","540129","Doughboy Parade, Hemmant","Stream Height AHD","m","-27.448810","153.125969" 26 | "E1850","540431","Frank Sleeman Pk, Boondall","Rainfall","mm","-27.361689","153.057626" 27 | "E1580","540278","Byrneside St, Wynnum","Stream Height AHD","m","-27.440702","153.169379" 28 | "E1548","540134","Joachim St, Holland Park West","Rainfall","mm","-27.521486","153.055421" 29 | "E1727","540097","Oxley Ck at New Beith","Stream Height AHD","m","-27.730453","152.946878" 30 | "E1839","540371","Jude St Reservoir, Bracken Ridge","Rainfall","mm","-27.321035","153.032052" 31 | "E1588","540274","Mouth of Oxley Ck, Graceville","Stream Height AHD","m","-27.524684","152.994663" 32 | "E1765","540682","Jindalee (BCC) AL","Stream Height AHD","m","-27.531969","152.928725" 33 | "E1540","540111","Osborne Rd, Everton Park","Stream Height AHD","m","-27.403391","152.978646" 34 | "E1884","540799","Lugg Street, Bardon","Stream Height AHD","m","-27.449165","152.991398" 35 | "E1852","540465","Green Hill Reservoir, Russell Tce Chapel Hill","Rainfall","mm","-27.495048","152.957743" 36 | "E2108","40788","Johnson Rd (Adermann Br), Forestdale","Rainfall","mm","-27.655308","153.000406" 37 | "E1563","540120","Brickyard Rd, Geebung","Rainfall","mm","-27.382354","153.058800" 38 | "E1742","540297","Pullenvale Hall, Pullenvale","Rainfall","mm","-27.523464","152.886260" 39 | "E1873","540785","Baroona Rd, Bardon","Rainfall","mm","-27.465000","152.991000" 40 | "E1755","540282","Harman Rec. Res., Manly","Rainfall","mm","-27.460602","153.182091" 41 | "E1804","540127","Greenwood St, Wishart","Stream Height AHD","m","-27.559989","153.104185" 42 | "E2023","540071","Corinda High School, Corinda","Stream Height AHD","m","-27.546892","152.988372" 43 | "E1845","540469","Pound Ck, Hendra Pony Club, Nundah","Stream Height AHD","m","-27.400186","153.075580" 44 | "E1572","540121","Collins Rd, Everton Hills","Rainfall","mm","-27.380613","152.979177" 45 | "E1849","540433","Muriel Ave, Moorooka","Stream Height AHD","m","-27.542053","153.013724" 46 | "E1527","540129","Doughboy Parade, Hemmant","Rainfall","mm","-27.448810","153.125969" 47 | "E2138","40790","Griffith Uni, Mt Gravatt Campus","Rainfall","mm","-27.544760","153.063690" 48 | "E1830","540126","Edwards Park (Merion Pl), Carindale","Rainfall","mm","-27.528264","153.105826" 49 | "E1879","540791","Chandler (Bacton Rd) AL","Rainfall","mm","-27.510199","153.153680" 50 | "E2116","40785","Blunder Ck at Richlands","Rainfall","mm","-27.599501","152.959274" 51 | "E1836","540125","Gagarra St, Eight Mile Plains","Rainfall","mm","-27.583147","153.089181" 52 | "E1851","540431","Frank Sleeman Pk, Boondall","Stream Height AHD","m","-27.361689","153.057626" 53 | "E1739","540225","Wynnum Sewage Treatment Plant, Lytton","Rainfall","mm","-27.418952","153.163377" 54 | "E1707","540128","Old Cleveland Rd, Carindale","Stream Height AHD","m","-27.501018","153.105435" 55 | "E1747","540470","Dulcie St, Salisbury","Rainfall","mm","-27.549406","153.037578" 56 | "E2125","40796","Beatty Rd, Acacia Ridge","Stream Height AHD","m","-27.584692","153.010010" 57 | "E1752","540802","Queens Parade, Brighton","Rainfall","mm","-27.298900","153.056000" 58 | "E1803","540127","Greenwood St, Wishart","Rainfall","mm","-27.559989","153.104185" 59 | "E1573","540121","Collins Rd, Everton Hills","Stream Height AHD","m","-27.380613","152.979177" 60 | "E1706","540128","Old Cleveland Rd, Carindale","Rainfall","mm","-27.501018","153.105435" 61 | "E1578","540239","Sedgley Park, Alderley","Rainfall","mm","-27.429908","153.006030" 62 | "E1847","540432","Marshall Rd (Behind Bunnings), Rocklea","Stream Height AHD","m","-27.553681","153.009734" 63 | "E1745","540296","Pinjarra & Moggill Rds, Pinjarra Hills","Stream Height AHD","m","-27.549567","152.890822" 64 | "E1524","540130","Mayne Railway Yards, Bowen Hills","Rainfall","mm","-27.441126","153.034819" 65 | "E1557","540548","U/S Nudgee Rd, Nundah","Rainfall","mm","-27.407093","153.073602" 66 | "E1749","540281","Anzac Park, Toowong","Rainfall","mm","-27.480220","152.979381" 67 | "E1844","540469","Pound Ck, Hendra Pony Club, Nundah","Rainfall","mm","-27.400186","153.075580" 68 | "E1507","540110","3 WAYS Brisbane Forest Park Mt. Nebo","Rainfall","mm","-27.443587","152.826974" 69 | "E1539","540111","Osborne Rd, Everton Park","Rainfall","mm","-27.403391","152.978646" 70 | "E1841","540369","Bulimba Library, Balmoral","Rainfall","mm","-27.452049","153.062915" 71 | "E1575","540478","McCord St, Gordon Park","Rainfall","mm","-27.416507","153.032495" 72 | "E1837","540322","Wynnum Bowls Club, Wynnum","Rainfall","mm","-27.443440","153.167319" 73 | "E1831","540126","Edwards Park (Merion Pl), Carindale","Stream Height AHD","m","-27.528264","153.105826" 74 | "E1576","540478","McCord St, Gordon Park","Stream Height AHD","m","-27.416507","153.032495" 75 | "E1856","540683","St Lucia AL","Stream Height AHD","m","-27.504001","153.005872" 76 | "E1564","540120","Brickyard Rd, Geebung","Stream Height AHD","m","-27.382354","153.058800" 77 | "E1892","540822","Arnwood Pl, Ekibin","Stream Height AHD","m","-27.513348","153.039186" 78 | "E1555","540132","Caswell St, East Brisbane","Stream Height AHD","m","-27.489611","153.049787" 79 | "E1763","540636","Trouts Road, Everton Park","Stream Height AHD","m","-27.392514","152.996723" 80 | "E1722","540061","Fortrose St, Kenmore","Stream Height AHD","m","-27.511376","152.926662" 81 | "E2141","540279","Rickertt Rd, Ransome","Rainfall","mm","-27.485587","153.171280" 82 | "E1702","540122","Pineapple St, Carseldine","Stream Height AHD","m","-27.352887","153.032022" 83 | "E1566","540114","Aspley Reservoir, Aspley","Rainfall","mm","-27.373988","153.009476" 84 | "E1838","540372","Luggage Point Sewage Treatment Plant","Rainfall","mm","-27.381052","153.147312" 85 | "E1843","540468","Cannery Ck (d/s Nudgee Rd), Northgate","Stream Height AHD","m","-27.392896","153.082018" 86 | "E1570","540113","Stringy Bark Drive, Aspley","Stream Height AHD","m","-27.370485","153.005329" 87 | "E2142","540279","Rickertt Rd, Ransome","Stream Height AHD","m","-27.485587","153.171280" 88 | "E1890","540805","Oxley Creek, U/S Ipswich Mtwy","Stream Height AHD","m","-27.564680","152.990390" 89 | "E1761","540466","Upper Kedron Rec. Res.,Upper Kedron","Rainfall","mm","-27.410440","152.922531" 90 | "E2129","40791","Musgrave Rd, Coopers Plains","Stream Height AHD","m","-27.561940","153.026996" 91 | "E1525","540130","Mayne Railway Yards, Bowen Hills","Stream Height AHD","m","-27.441126","153.034819" 92 | "E1558","540548","U/S Nudgee Rd, Nundah","Stream Height AHD","m","-27.407093","153.073602" 93 | -------------------------------------------------------------------------------- /src/data/seeds/new-file-2023-10-11-07:15:14.498067.csv: -------------------------------------------------------------------------------- 1 | "Measured","E1809","E1531","E1515","E1512","E2020","E1886","E2111","E1594","E1561","E1560","E1736","E2121","E1518","E1857","E1855","E1854","E1888","E1549","E2114","E1764","E1554","E1710","E1596","E1528","E1850","E1580","E1548","E1727","E1839","E1588","E1765","E1540","E1884","E1852","E2108","E1563","E1742","E1873","E1755","E1804","E2023","E1845","E1572","E1849","E1527","E2138","E1830","E1879","E2116","E1836","E1851","E1739","E1707","E1747","E2125","E1752","E1803","E1573","E1706","E1578","E1847","E1745","E1524","E1557","E1749","E1844","E1507","E1539","E1841","E1575","E1837","E1831","E1576","E1856","E1564","E1892","E1555","E1763","E1722","E2141","E1702","E1566","E1875","E1838","E1843","E1570","E2142","E1890","E1761","E2129","E1525","E1558" 2 | "2023-10-10T07:10:00","0","-","0","0","0","0","-","0.69","0.48","0","0","-","0","-","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","0.58","-","-","0","0","0","0","0","0","-","0.62","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.18","0","-","-","0.55" 3 | "2023-10-10T07:15:00","0","-","0","0","0","0","-","-","-","0","0","-","0","0.6","-","-","0","-","0","0.53","0","-","0","-","0","-","0","-","0","-","0.6","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.2","0","-","-","-" 4 | "2023-10-10T07:20:00","0","-","0","0","0","0","-","-","-","0","0","-","0","0.65","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","0.62","-","-","0","0","0","0","0","0","-","-","0.49","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","0.52","-","-","0.22","0","-","-","-" 5 | "2023-10-10T07:25:00","0","-","0","0","0","0","-","-","-","0","0","-","0","0.65","-","-","0","-","0","0.58","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.24","0","-","-","0.5" 6 | "2023-10-10T07:30:00","0","-","0","0","0","0","-","-","-","0","0","-","0","0.65","-","-","0","-","0","-","0","-","0","0.58","0","-","0","-","0","0.83","0.64","-","-","0","0","0","0","0","0","-","0.67","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 7 | "2023-10-10T07:35:00","0","-","0","0","0","0","-","-","-","0","0","-","0","0.6","-","-","0","-","0","0.63","0","-","0","-","0","-","0","-","0","-","0.66","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","0.9","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.26","0","-","0.67","-" 8 | "2023-10-10T07:40:00","0","-","0","0","0","0","-","-","-","0","0","-","0","0.6","0.62","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","0.68","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.28","0","-","-","-" 9 | "2023-10-10T07:45:00","0","-","0","0","0","0","-","0.64","-","0","0","-","0","-","-","-","0","-","0","0.68","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","6.06","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.3","0","-","-","-" 10 | "2023-10-10T07:50:00","0","-","0","0","0","0","-","0.69","-","0","0","-","0","0.6","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","0.7","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 11 | "2023-10-10T07:55:00","0","-","0","0","0","0","-","0.64","-","0","0","-","0","0.7","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","0.44","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.44","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","0.47","-","-","0.32","0","-","-","-" 12 | "2023-10-10T08:00:00","0","-","0","0","0","0","-","-","0.43","0","0","-","0","0.6","0.6","-","0","-","0","0.73","0","-","0","0.53","0","-","0","-","0","-","0.72","-","-","0","0","0","0","0","0","-","0.72","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.34","0","-","-","-" 13 | "2023-10-10T08:05:00","0","-","0","0","0","0","-","0.59","-","0","0","-","0","0.55","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.36","0","-","0.62","0.45" 14 | "2023-10-10T08:10:00","0","-","0","0","0","0","-","0.64","-","0","0","-","0","0.55","0.58","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.38","0","-","-","-" 15 | "2023-10-10T08:15:00","0","-","0","0","0","0","-","0.59","0.38","0","0","-","0","-","0.56","-","0","-","0","0.78","0","-","0","0.48","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 16 | "2023-10-10T08:20:00","0","-","0","0","0","0","-","-","0.33","0","0","-","0","0.5","0.54","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.52","-","-","0","-","0","0","0","-","-","-","0.4","0","-","-","0.4" 17 | "2023-10-10T08:25:00","0","-","0","0","0","0","-","0.54","-","0","0","-","0","-","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","0.39","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","7.25","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.42","0","-","-","-" 18 | "2023-10-10T08:30:00","0","-","0","0","0","0","-","-","0.33","0","0","-","0","0.45","0.52","-","0","-","0","-","0","-","0","0.43","0","-","0","-","0","0.78","-","29.7","-","0","0","0","0","0","0","18.36","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","3","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","0.42","-","-","-","0","-","0.57","-" 19 | "2023-10-10T08:35:00","0","-","0","0","0","0","-","-","0.28","0","0","-","0","0.5","0.5","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.44","0","-","-","0.35" 20 | "2023-10-10T08:40:00","0","-","0","0","0","0","-","0.49","-","0","0","-","0","0.45","-","-","0","-","0","0.83","0","-","0","0.38","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.46","-","0","0","0","0","0","0","0","0","0","-","-","0.6","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","0.52","-" 21 | "2023-10-10T08:45:00","0","-","0","0","0","0","-","-","0.23","0","0","-","0","0.4","0.46","-","0","-","0","-","0","-","0","-","0","-","0","-","0","0.73","-","-","-","0","0","0","0","0","0","-","0.72","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.47","-","-","0","-","0","0","0","-","-","-","0.46","0","-","-","0.3" 22 | "2023-10-10T08:50:00","0","-","0","0","0","0","-","0.44","-","0","0","-","0","0.35","0.44","-","0","-","0","-","0","-","0","0.33","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","0.67","0.34","0","-","0","0","0","0","0","0","1.61","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.55","-","-","0.42","-","-","0","-","0","0","0","-","-","-","-","0","-","0.47","0.25" 23 | "2023-10-10T08:55:00","0","-","0","0","0","0","-","-","0.18","0","0","-","0","0.35","0.42","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","1.04","0","0","-","0","0","0.48","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.37","-","-","0","-","0","0","0","-","-","-","0.48","0","-","-","-" 24 | "2023-10-10T09:00:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","0.4","-","0","-","0","-","0","-","0","0.28","0","-","0","-","0","-","0.7","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","0.37","-","-","-","0","-","0.42","0.2" 25 | "2023-10-10T09:05:00","0","-","0","0","0","0","-","0.34","0.13","0","0","-","0","0.35","0.38","-","0","-","0","-","0","-","0","-","0","-","0","-","0","0.68","0.68","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","6.06","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.5","0","-","-","-" 26 | "2023-10-10T09:10:00","0","-","0","0","0","0","-","-","-","0","0","-","0","0.3","0.36","-","0","-","0","-","0","-","0","0.23","0","-","0","-","0","-","0.66","-","-","0","0","0","0","0","0","-","0.62","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.5","-","0","0","0","0","0","0","0","0","0","-","-","0.5","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","0.37","0.15" 27 | "2023-10-10T09:15:00","0","-","0","0","0","0","-","-","-","0","0","-","0","0.25","0.34","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.32","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 28 | "2023-10-10T09:20:00","0","-","0","0","0","0","-","0.29","0.08","0","0","-","0","-","0.3","-","0","-","0","-","0","-","0","-","0","-","0","-","0","0.63","0.64","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.45","-","-","0.27","-","-","0","-","0","0","0","-","-","-","0.52","0","-","0.32","0.1" 29 | "2023-10-10T09:25:00","0","-","0","0","0","0","-","-","-","0","0","-","0","0.2","0.28","-","0","-","0","-","0","-","0","0.18","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","0.57","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 30 | "2023-10-10T09:30:00","0","1.76","0","0","0","0","-","0.24","-","0","0","-","0","-","0.26","-","0","-","0","-","0","-","0","-","0","-","0","-","0","0.58","0.62","-","-","0","0","0","0","0","0","-","-","0.29","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.52","-","0","0","0","0","0","0","0","0","0","-","-","0.4","-","-","0.22","-","-","0","-","0","0","0","-","-","-","-","0","-","-","0.05" 31 | "2023-10-10T09:35:00","0","-","0","0","0","0","-","-","0.03","0","0","-","0","-","0.24","-","0","-","0","0.78","0","-","0","0.13","0","-","0","-","0","-","0.6","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","0.27","-" 32 | "2023-10-10T09:40:00","0","-","0","0","0","0","-","-","-","0","0","-","0","0.15","0.22","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","0.58","-","-","0","0","0","0","0","0","-","0.52","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.17","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 33 | "2023-10-10T09:45:00","0","-","0","0","0","0","-","0.19","-0.02","0","0","-","0","-","0.18","-","0","-","0","-","0","-","0","0.08","0","-","0","-","0","0.53","0.56","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.35","-","-","-","-","-","0","-","0","0","0","0.32","-","-","0.5","0","-","0.22","0" 34 | "2023-10-10T09:50:00","0","-","0","0","0","0","-","-","-","0","0","-","0","0.1","0.16","-","0","-","0","0.73","0","-","0","-","0","-","0","-","0","-","0.54","29.72","-","0","0","0","0","0","0","-","0.47","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.12","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 35 | "2023-10-10T09:55:00","0","-","0","0","0","0","-","0.14","-0.07","0","0","-","0","-","0.14","-","0","-","0","-","0","-","0","-","0","-","0","-","0","0.48","0.52","-","-","0","0","0","0","0","0","18.36","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.3","-","-","-","-","-","0","-","0","0","0","-","-","-","0.48","0","-","0.17","-" 36 | "2023-10-10T10:00:00","0","-","0","0","0","0","-","0.14","-","0","0","-","0","-","0.12","-","0","-","0","-","0","20.66","0","0.03","0","-","0","49.22","0","-","0.5","-","12.5","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.54","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.07","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 37 | "2023-10-10T10:05:00","0","-","0","0","0","0","-","-","-0.12","0","0","-","0","0.05","0.1","-","0","-","0","0.68","0","-","0","-","0","-","0","-","0","0.43","0.48","-","-","0","0","0","0","0","0","18.34","0.42","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","6","-","0.25","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-0.05" 38 | "2023-10-10T10:10:00","0","-","0","0","0","0","-","0.09","-","0","0","-","0","0","0.08","-","0","-","0","-","0","-","0","-0.02","0","-","0","-","0","-","0.46","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","36.72","-","0","-","0","0","0","-","-","-","0.46","0","-","0.12","-" 39 | "2023-10-10T10:15:00","0","-","0","0","0","0","-","-","-0.17","0","0","-","0","-","0.06","-","0","-","0","0.63","0","-","0","-","0","-","0","-","0","0.38","0.42","-","-","0","0","0","0","0","0","18.36","0.37","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.2","-","-","0.02","-","-","0","-","0","0","0","-","-","-","-","0","4.18","-","-0.1" 40 | "2023-10-10T10:20:00","0","-","0","0","0","0","-","0.04","-","0","0","-","0","-","0.04","-","0","-","0","-","0","-","0","-0.07","0","-","0","-","0","-","0.4","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.44","0","-","0.07","-" 41 | "2023-10-10T10:25:00","0","-","0","0","0","0","-","-","-0.22","0","0","-","0","-0.05","0","-","0","-","0","0.58","0","-","0","-","0","-","0","-","0","0.33","0.38","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","41.36","0","0","0.52","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 42 | "2023-10-10T10:30:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","0.36","-","-","0","0","0","0","0","0","18.36","0.32","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.52","-","0","0","0","0","0","0","0","0","0","-","-","0.15","-","6.74","-0.03","-","-","0","-","0","0","0","-","-","-","0.42","0","-","0.02","-0.15" 43 | "2023-10-10T10:35:00","0","-","0","0","0","0","-","-0.01","-","0","0","-","0","-0.1","-0.04","-","0","-","0","0.53","0","-","0","-0.12","0","-","0","-","0","-","0.34","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","3","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","6.06","-","-","-","-","-","-","-","0","-","0","0","0","0.27","-","-","-","0","-","-","-0.2" 44 | "2023-10-10T10:40:00","0","-","0","0","0","0","-","-0.06","-0.27","0","0","-","0","-0.15","-0.06","-","0","-","0","-","0","-","0","-","0","-","0","-","0","0.28","0.32","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.1","3.48","-","-0.08","-","-","0","-","0","0","0","-","-","-","-","0","-","-0.03","-" 45 | "2023-10-10T10:45:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-0.08","-","0","-","0","0.48","0","-","0","-0.17","0","-","0","-","0","-","0.3","-","-","0","0","0","0","0","0","-","0.27","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.4","0","-","-","-0.25" 46 | "2023-10-10T10:50:00","0","-","0","0","0","0","-","-0.11","-","0","0","4.62","0","-","-0.1","-","0","-","0","-","0","-","0","-","0","-","0","-","0","0.23","0.26","29.72","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.13","-","-","0","-","0","0","0","-","-","-","-","0","-","-0.08","-" 47 | "2023-10-10T10:55:00","0","-","0","0","0","0","-","-","-0.32","0","0","-","0","-0.2","-0.14","-","0","-","0","0.43","0","-","0","-0.22","0","-","0","-","0","-","0.24","-","-","0","0","0","0","0","0","-","0.22","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.05","-","-","-","-","-","0","9.04","0","0","0","-","-","-","0.38","0","-","-","-" 48 | "2023-10-10T11:00:00","0","-","0","0","0","0","-","-0.16","-","0","0","-","0","-","-0.16","-","0","-","0","0.38","0","-","0","-","0","-","0","-","0","0.18","0.22","-","-","0","0","0","0","0","0","-","-","0.24","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.5","-","0","0","0","0","0","0","0","0","0","-","-","0","-","-","-0.18","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 49 | "2023-10-10T11:05:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.25","-0.18","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-0.13","-0.3" 50 | "2023-10-10T11:10:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.25","-0.2","-","0","-","0","0.33","0","-","0","-0.27","0","-","0","-","0","0.13","-","-","-","0","0","0","0","0","0","-","0.17","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.05","-","-","-0.23","-","-","0","-","0","0","0","-","-","-","0.36","0","-","-","-" 51 | "2023-10-10T11:15:00","0","-","0","0","0","0","-","-0.21","-0.37","0","0","-","0","-","-0.22","-","0","-","0","-","0","-","0","-","0","-","0","-","0","0.08","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-0.18","-" 52 | "2023-10-10T11:20:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.3","-0.24","-","0","-","0","0.28","0","-","0","-0.32","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","0.12","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.1","-","-","-0.28","-","-","0","-","0","0","0","-","-","-","0.34","0","-","-","-0.35" 53 | "2023-10-10T11:25:00","0","-","0","0","0","0","-","-","-0.42","0","0","-","0","-0.3","-0.28","-","0","-","0","-","0","-","0","-","0","-","0","-","0","0.03","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.34","0","-","-0.23","-" 54 | "2023-10-10T11:30:00","0","-","0","0","0","0","-","-0.26","-","0","0","-","0","-0.35","-","-","0","-","0","0.23","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","0.07","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.15","-","-","-","-","-","0","-","0","0","0","-","-","-","0.32","0","-","-","-" 55 | "2023-10-10T11:35:00","0","-","0","0","0","0","-","-0.26","-","0","0","-","0","-","-0.3","-","0","-","0","0.18","0","-","0","-0.37","0","-","0","-","0","-0.02","-","-","-","0","0","0","0","0","0","18.34","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.48","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 56 | "2023-10-10T11:40:00","0","-","0","0","0","0","-","-0.31","-","0","0","-","0","-0.35","-0.34","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","0.02","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.2","-","-","-0.33","-","-","0","-","0","0","0","-","-","-","0.3","0","-","-0.28","-0.4" 57 | "2023-10-10T11:45:00","0","-","0","0","0","0","-","-","-0.47","0","0","-","0","-0.4","-0.36","-","0","-","0","0.13","0","-","0","-","0","-","0","-","0","-0.07","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","0.22","-","-","-","0","-","-0.28","-" 58 | "2023-10-10T11:50:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","-","0","-","0","-0.42","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","1.35","0.28","0","-","-","-" 59 | "2023-10-10T11:55:00","0","-","0","0","0","0","-","-0.36","-","0","0","-","0","-0.45","-0.38","-","0","-","0","0.08","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","18.36","-0.03","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.25","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-0.33","-0.45" 60 | "2023-10-10T12:00:00","0","-","0","0","0","0","18.45","-","-0.52","0","0","-","0","-","-0.4","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-0.12","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.26","0","-","-","-" 61 | "2023-10-10T12:05:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-0.44","-","0","-","0","0.03","0","-","0","-0.47","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.08","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.46","-","0","0","0","0","0","0","0","0","0","-","-","-0.3","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-0.45" 62 | "2023-10-10T12:10:00","0","-","0","0","0","0","-","-0.41","-","0","0","-","0","-0.5","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-0.17","-","-","-","0","0","0","0","0","0","18.34","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.24","0","-","-0.38","-" 63 | "2023-10-10T12:15:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-0.46","-","0","-","0","-0.02","0","-","0","-","0","-","0","-","0","-0.17","-","-","-","0","0","0","0","0","0","-","-0.13","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","6.08","-","-0.35","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-0.5" 64 | "2023-10-10T12:20:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-0.48","-","0","-","0","-0.07","0","-","0","-","0","-","0","-","0","-0.22","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.22","0","-","-","-" 65 | "2023-10-10T12:25:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.55","-0.5","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","18.36","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-1.98","-","-","0","-","0","0","0","0.22","-","-","-","0","-","-0.43","-" 66 | "2023-10-10T12:30:00","0","-","0","0","0","0","-","-0.46","-","0","0","-","0","-","-","-","0","-","0","-0.12","0","-","0","-0.52","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.18","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.4","-","-","-1.98","-","-","0","-","0","0","0","-","26.47","-","0.2","0","-","-","-" 67 | "2023-10-10T12:35:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-0.52","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-0.27","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.44","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-1.98","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 68 | "2023-10-10T12:40:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.55","-","-","0","-","0","-0.17","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.23","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.45","-","-","-1.98","-","-","0","-","0","0","0","-","-","-","0.18","0","-","-","-" 69 | "2023-10-10T12:45:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-0.54","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-0.32","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 70 | "2023-10-10T12:50:00","0","1.76","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","-0.22","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.16","0","-","-","-" 71 | "2023-10-10T12:55:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.55","-0.56","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.28","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.5","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-0.48","-" 72 | "2023-10-10T13:00:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","-0.27","0","-","0","-","0","-","0","-","0","-0.37","-","-","-","0","0","0","0","0","0","18.34","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.14","0","-","-","-" 73 | "2023-10-10T13:05:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","-","3","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","18.36","-0.33","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.58","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 74 | "2023-10-10T13:10:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.55","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-0.42","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.12","0","-","-","-" 75 | "2023-10-10T13:15:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","-0.32","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 76 | "2023-10-10T13:20:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.38","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.55","-","-","-","-","-","0","-","0","0","0","-","-","-","0.1","0","-","-","-" 77 | "2023-10-10T13:25:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.5","-","-","0","-","0","-0.37","0","-","0","-0.52","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","0.17","-","-","-","0","-","-","-" 78 | "2023-10-10T13:30:00","0","-","0","0","0","0","-","-","-0.47","0","0","-","0","-0.55","-","-","0","-","0","-","0","-","0","-0.47","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.08","0","-","-","-" 79 | "2023-10-10T13:35:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-0.54","-","0","-","0","-0.42","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.43","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-0.43","-0.45" 80 | "2023-10-10T13:40:00","0","-","0","0","0","0","-","-0.41","-","0","0","-","0","-0.5","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","18.34","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","3.75","0","-","0","0","0","-","-","-","0.06","0","-","-","-" 81 | "2023-10-10T13:45:00","0","-","0","0","0","0","-","-","-0.42","0","0","-","0","-0.5","-","-","0","-","0","-0.47","0","-","0","-0.42","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","2.12","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.53","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-0.4" 82 | "2023-10-10T13:50:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-0.52","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","18.36","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.04","0","-","-0.38","-0.35" 83 | "2023-10-10T13:55:00","0","-","0","0","0","0","-","-","-0.37","0","0","-","0","-0.45","-0.5","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 84 | "2023-10-10T14:00:00","0","-","0","0","0","0","-","-0.36","-","0","0","-","0","-","-0.48","-","0","-","0","-0.52","0","-","0","-0.37","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.48","-","-","0","-","0","0","0","-","-","-","0.02","0","-","-","-" 85 | "2023-10-10T14:05:00","0","-","0","0","0","0","-","-0.31","-0.32","0","0","-","0","-0.4","-0.46","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.48","0.19","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-0.33","-" 86 | "2023-10-10T14:10:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-0.44","-","0","-","0","-","0","-","0","-0.32","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.55","-","-","-0.43","-","-","0","9.04","0","0","0","-","-","-","-","0","-","-","-0.3" 87 | "2023-10-10T14:15:00","0","-","0","0","0","0","-","-","-0.27","0","0","-","0","-","-0.42","-","0","-","0","-0.57","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","2.5","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.5","-","-","-","-","-","0","-","0","0","0","-","-","-","0","0","-","-0.28","-0.25" 88 | "2023-10-10T14:20:00","0","-","0","0","0","0","-","-0.26","-","0","0","-","0","-0.35","-0.38","-","0","-","0","-","0","-","0","-0.27","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.38","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 89 | "2023-10-10T14:25:00","0","-","0","0","0","0","-","-0.21","-0.22","0","0","-","0","-0.3","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-0.37","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.45","-","-","-","-","-","0","-","0","0","0","-","-","-","-0.02","0","-","-0.23","-0.2" 90 | "2023-10-10T14:30:00","0","-","0","0","0","0","-","-","-0.17","0","0","-","0","-","-0.34","-","0","-","0","-0.62","0","-","0","-0.22","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","0.19","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.33","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 91 | "2023-10-10T14:35:00","0","-","0","0","0","0","-","-0.16","-","0","0","-","0","-0.25","-0.32","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.43","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.4","-","-","-","-","-","0","-","0","0","0","-","-","-","-0.04","0","-","-0.18","-0.15" 92 | "2023-10-10T14:40:00","0","-","0","0","0","0","-","-","-0.12","0","0","-","0","-","-0.3","-","0","-","0","-","0","-","0","-0.17","0","-","0","-","0","-0.32","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.28","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 93 | "2023-10-10T14:45:00","0","-","0","0","0","0","-","-0.11","-","0","0","-","0","-0.25","-0.26","-","0","-","0","-","0","-","0","-0.12","0","-","0","-","0","-0.27","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-0.06","0","-","-0.13","-0.1" 94 | "2023-10-10T14:50:00","0","-","0","0","0","0","-","-0.06","-0.07","0","0","-","0","-0.15","-0.22","2.18","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.38","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.35","-","-","-0.23","-","-","0","-","0","0","0","-","-","-","-","0","-","-0.08","-" 95 | "2023-10-10T14:55:00","0","-","0","0","0","0","-","-0.01","-0.02","0","0","-","0","-0.1","-0.18","-","0","-","0","-","0","-","0","-0.07","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.3","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-0.05" 96 | "2023-10-10T15:00:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.1","-0.16","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-0.22","-","-","-","0","0","0","0","0","0","-","-0.33","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.18","-","-","0","-","0","0","0","-","-","-","-0.08","0","-","-0.03","0" 97 | "2023-10-10T15:05:00","0","-","0","0","0","0","-","0.04","0.03","0","0","-","0","-","-0.12","-","0","-","0","-","0","-","0","-0.02","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.25","-","-","-0.13","-","-","0","-","0","0","0","-","-","-","-","0","-","0.02","-" 98 | "2023-10-10T15:10:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.1","-0.08","-","0","-","0","-","0","-","0","0.03","0","-","0","-","0","-0.17","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.08","-","-","0","-","0","0","0","-","-","-","-0.1","0","-","-","0.05" 99 | "2023-10-10T15:15:00","0","-","0","0","0","0","-","0.09","0.08","0","0","-","0","0","-0.06","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-0.12","-","-","-","0","0","0","0","0","0","-","-0.28","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.2","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","0.07","0.1" 100 | "2023-10-10T15:20:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-0.02","-","0","-","0","-","0","-","0","0.08","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.23","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.15","-","-","-0.03","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 101 | "2023-10-10T15:25:00","0","-","0","0","0","0","-","0.14","0.13","0","0","-","0","0.05","0","-","0","-","0","-","0","-","0","0.13","0","-","0","-","0","-0.07","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.02","-","-","0","-","0","0","0","-","-","-","-0.12","0","-","0.12","0.15" 102 | "2023-10-10T15:30:00","0","-","0","0","0","0","-","0.19","-","0","0","-","0","-","0.02","-","0","-","0","-0.57","0","-","0","-","0","-","0","-","0","-0.02","-","-","-","0","0","0","0","0","0","-","-0.18","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.1","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","0.17","-" 103 | "2023-10-10T15:35:00","0","-","0","0","0","0","-","-","0.18","0","0","-","0","0.1","0.06","-","0","-","0","-","0","-","0","0.18","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.05","-","-","0.07","-","-","0","-","0","0","0","-","-","-","-","0","-","-","0.2" 104 | "2023-10-10T15:40:00","0","-","0","0","0","0","-","0.24","0.23","0","0","-","0","0.15","0.1","-","0","-","0","-0.52","0","-","0","-","0","-","0","-","0","0.03","-","-","-","0","0","0","0","0","0","-","-0.13","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-0.14","0","-","0.22","0.25" 105 | "2023-10-10T15:45:00","0","-","0","0","0","0","-","0.24","-","0","0","-","0","-","0.12","-","0","-","0","-","0","-","0","0.23","0","-","0","-","0","0.08","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0","-","-","0.12","-","-","0","-","0","0","0","-","-","-","-","0","-","0.27","-" 106 | "2023-10-10T15:50:00","0","-","0","0","0","0","-","0.29","0.28","0","0","-","0","0.2","0.16","-","0","-","0","-0.47","0","-","0","0.28","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.08","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","0.3" 107 | "2023-10-10T15:55:00","0","-","0","0","0","0","-","0.34","0.33","0","0","-","0","0.25","0.18","-","0","-","0","-","0","-","0","0.33","0","-","0","-","0","0.13","-","-","-","0","0","0","0","0","0","-","-0.03","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.05","-","-","0.17","-","-","0","-","0","0","0","-","-","-","-0.16","0","-","0.32","0.35" 108 | "2023-10-10T16:00:00","0","-","0","0","0","0","-","0.39","-","0","0","-","0","-","0.22","-","0","-","0","-0.42","0","-","0","-","0","-","0","-","0","0.18","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.1","-","-","0.22","-","-","0","-","0","0","0","-","-","-","-","0","-","0.37","-" 109 | "2023-10-10T16:05:00","0","-","0","0","0","0","-","-","0.38","0","0","-","0","0.3","0.26","-","0","-","0","-","0","-","0","0.38","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","0.02","0.24","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","0.4" 110 | "2023-10-10T16:10:00","0","-","0","0","0","0","-","0.44","0.43","0","0","-","0","0.35","0.28","-","0","-","0","-0.37","0","-","0","-","0","-","0","-","0","0.23","-","-","-","0","0","0","0","0","0","18.34","-","0.29","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.15","-","-","0.27","-","-","0","-","0","0","0","0.22","-","-","-","0","-","0.42","0.45" 111 | "2023-10-10T16:15:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","0.32","-","0","-","0","-0.32","0","-","0","0.43","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","0.07","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.2","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","0.47","0.5" 112 | "2023-10-10T16:20:00","0","-","0","0","0","0","-","0.49","0.48","0","0","-","0","0.4","0.36","-","0","-","0","-","0","-","0","0.48","0","-","0","-","0","0.28","-","-","-","0","0","0","0","0","0","-","-","0.39","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.32","-","-","0","-","0","0","0","-","-","-","-0.14","0","-","-","-" 113 | "2023-10-10T16:25:00","0","-","0","0","0","0","-","0.54","-","0","0","-","0","0.45","0.4","-","0","-","0","-0.27","0","-","0","-","0","-","0","-","0","0.33","-","-","-","0","0","0","0","0","0","-","0.12","0.44","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.25","-","-","0.37","-","-","0","-","0","0","0","0.27","-","-","-","0","-","0.52","0.55" 114 | "2023-10-10T16:30:00","0","-","0","0","0","0","-","0.54","0.53","0","0","-","0","-","0.42","-","0","15.26","0","-0.22","0","-","0","0.53","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","0.49","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.3","3.46","-","-","-","-","0","-","0","0","0","0.32","-","-","-0.12","0","-","0.57","-" 115 | "2023-10-10T16:35:00","0","-","0","0","0","0","-","0.59","-","0","0","-","0","0.55","0.46","-","0","-","0","-","0","-","0","-","0","-","0","-","0","0.38","-","-","-","0","0","0","0","0","0","-","0.17","0.54","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.42","-","-","0","-","0","0","0","0.37","-","-","-","0","-","-","0.6" 116 | "2023-10-10T16:40:00","0","-","0","0","0","0","-","0.64","0.58","0","0","-","0","0.55","0.48","-","0","-","0","-0.17","0","-","0","0.58","0","-","0","-","0","0.43","-","-","-","0","0","0","0","0","0","-","0.22","0.59","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.35","-","-","0.47","-","-","0","-","0","0","0","0.42","-","-","-0.1","0","-","0.62","0.65" 117 | "2023-10-10T16:45:00","0","-","0","0","0","0","-","0.69","-","0","0","-","0","0.6","0.52","-","0","-","0","-0.12","0","-","0","0.63","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","0.64","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","0.47","-","-","-","0","-","0.67","-" 118 | "2023-10-10T16:50:00","0","-","0","0","0","0","-","-","0.63","0","0","4.62","0","-","0.56","-","0","-","0","-0.07","0","-","0","-","0","-","0","-","0","0.48","-","-","-","0","0","0","0","0","0","-","0.27","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.4","-","-","0.52","-","-","0","-","0","0","0","0.52","-","-","-0.08","0","-","-","0.7" 119 | "2023-10-10T16:55:00","0","-","0","0","0","0","-","0.74","-","0","0","-","0","0.65","0.58","-","0","-","0","-","0","-","0","0.68","0","-","0","-","0","0.53","-","-","-","0","0","0","0","0","0","-","-","0.69","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.45","-","-","-","-","-","0","-","0","0","0","0.57","-","-","-","0","-","0.72","-" 120 | "2023-10-10T17:00:00","0","-","0","0","0","0","-","0.79","0.68","0","0","-","0","-","0.62","-","0","-","0","-0.02","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","18.36","0.32","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.57","-","-","0","-","0","0","0","0.62","-","-","-0.06","0","-","-","0.75" 121 | "2023-10-10T17:05:00","0","-","0","0","0","0","-","-","-","0","0","-","0","0.65","0.64","-","0","-","0","0.03","0","-","0","0.73","0","-","0","-","0","0.58","-","-","-","0","0","0","0","0","0","-","-","0.74","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.5","-","-","-","-","-","0","-","0","0","0","0.67","-","-","-","0","-","0.77","-" 122 | "2023-10-10T17:10:00","0","-","0","0","0","0","-","-","0.73","0","0","-","0","0.75","0.68","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","0.26","-","-","0","0","0","0","0","0","-","0.37","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.55","-","-","0.62","-","-","0","-","0","0","0","0.72","-","-","-0.04","0","-","-","-" 123 | "2023-10-10T17:15:00","0","-","0","0","0","0","-","0.84","-","0","0","-","0","0.7","0.7","-","0","-","0","0.08","0","-","0","0.78","0","-","0","-","0","0.63","0.3","-","-","0","0","0","0","0","0","-","0.42","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","0.82","0.8" 124 | "2023-10-10T17:20:00","0","-","0","0","0","0","-","0.89","0.78","0","0","-","0","0.75","0.74","-","0","-","0","0.13","0","-","0","0.83","0","-","0","-","0","0.68","0.32","-","-","0","0","0","0","0","0","-","-","0.79","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.6","-","-","0.67","-","-","0","-","0","0","0","0.77","-","-","-0.02","0","-","0.87","-" 125 | "2023-10-10T17:25:00","0","-","0","0","0","0","-","-","-","0","0","-","0","0.8","0.76","-","0","-","0","0.18","0","-","0","-","0","-","0","-","0","-","0.36","-","-","0","0","0","0","0","0","-","0.47","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0","0","-","-","0.85" 126 | "2023-10-10T17:30:00","0","-","0","0","0","0","-","0.94","0.83","0","0","-","0","-","0.78","-","0","-","0","-","0","-","0","-","0","-","0","-","0","0.73","0.4","-","-","0","0","0","0","0","0","-","-","0.84","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.65","-","-","0.72","-","-","0","-","0","0","0","0.82","-","-","-","0","-","0.92","-" 127 | "2023-10-10T17:35:00","0","-","0","0","0","0","-","0.94","-","0","0","-","0","0.85","0.82","-","0","-","0","0.23","0","-","0","0.88","0","-","0","-","0","0.78","0.42","-","-","0","0","0","0","0","0","18.34","0.52","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.7","-","-","-","-","-","0","-","0","0","0","-","-","-","0.02","0","-","-","0.9" 128 | "2023-10-10T17:40:00","0","-","0","0","0","0","-","0.99","0.88","0","0","-","0","0.85","0.84","-","0","-","0","0.28","0","-","0","-","0","-","0","-","0","-","0.46","-","-","0","0","0","0","0","0","18.32","-","0.89","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.77","-","-","0","-","0","0","0","0.87","-","-","0.04","0","-","0.97","-" 129 | "2023-10-10T17:45:00","0","-","0","0","0","0","-","0.99","-","0","0","-","0","0.9","0.86","-","0","-","0","0.33","0","-","0","0.93","0","-","0","-","0","0.83","0.5","-","-","0","0","0","0","0","0","-","0.57","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.75","-","-","-","-","-","0","-","0","0","0","-","-","-","0.06","0","-","-","0.95" 130 | "2023-10-10T17:50:00","0","-","0","0","0","0","-","1.04","-","0","0","-","0","-","0.88","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","0.54","-","-","0","0","0","0","0","0","-","0.62","0.94","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.82","-","-","0","-","0","0","0","0.92","-","-","0.08","0","-","1.02","-" 131 | "2023-10-10T17:55:00","0","-","0","0","0","0","-","-","0.93","0","0","-","0","0.95","0.9","-","0","-","0","0.38","0","-","0","0.98","0","-","0","-","0","0.88","0.56","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.8","-","-","-","-","-","0","-","0","0","0","-","-","-","0.1","0","-","-","-" 132 | "2023-10-10T18:00:00","0","-","0","0","0","0","-","1.04","-","0","0","-","0","-","0.94","-","0","-","0","0.43","0","-","0","-","0","-","0","-","0","0.93","0.6","-","-","0","0","0","0","0","0","-","0.67","-","0","-","0","0","0","0","1","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","1" 133 | "2023-10-10T18:05:00","0","-","0","0","0","0","-","1.09","-","0","0","-","0","-","0.96","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","0.64","-","-","0","0","0","0","0","0","-","-","0.99","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.85","-","-","0.92","-","-","0","-","0","0","0","0.97","-","-","0.12","0","-","1.07","-" 134 | "2023-10-10T18:10:00","0","-","0","0","0","0","-","-","-","0","0","-","0","1","-","-","0","-","0","0.48","0","-","0","1.03","0","-","0","-","0","0.98","0.66","-","-","0","0","0","0","0","0","18.34","0.72","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.9","-","-","-","-","-","0","-","0","0","0","-","-","-","0.14","0","-","-","-" 135 | "2023-10-10T18:15:00","0","-","0","0","0","0","-","-","0.98","0","0","-","0","-","0.98","-","0","-","0","0.53","0","-","0","-","0","-","0","-","0","-","0.7","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.97","-","-","0","-","0","0","0","-","-","-","0.16","0","-","-","-" 136 | "2023-10-10T18:20:00","0","-","0","0","0","0","-","1.09","-","0","0","-","0","-","1","-","0","-","0","0.58","0","-","0","-","0","1.46","0","-","0","1.03","0.72","-","-","0","0","0","0","0","0","-","0.77","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","1.02","-","-","0.18","0","-","1.12","1.05" 137 | "2023-10-10T18:25:00","0","-","0","0","0","0","-","1.14","-","0","0","-","0","1.05","1.02","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","0.76","29.7","-","0","0","0","0","0","0","18.36","-","1.04","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.95","-","-","1.02","-","-","0","-","0","0","0","-","-","-","0.2","0","-","-","-" 138 | "2023-10-10T18:30:00","0","-","0","0","0","0","-","1.14","1.03","0","0","-","0","-","1.04","-","0","-","0","0.63","0","-","0","1.08","0","-","0","-","0","1.08","0.78","-","-","0","0","0","0","0","0","18.38","0.82","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.22","0","-","-","-" 139 | "2023-10-10T18:35:00","0","-","0","0","0","0","-","-","-","0","0","-","0","1.05","1.06","-","0","-","0","0.68","0","-","0","-","0","-","0","-","0","-","0.82","-","-","0","0","0","0","0","0","-","0.87","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","1","-","-","-","-","-","0","-","0","0","0","1.07","-","-","0.24","0","-","-","-" 140 | "2023-10-10T18:40:00","0","-","0","0","0","0","-","1.19","-","0","0","-","0","1.1","1.08","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","0.84","-","-","0","0","0","0","0","0","18.36","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.26","0","-","1.17","1.1" 141 | "2023-10-10T18:45:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","1.1","-","0","-","0","0.73","0","-","0","-","0","-","0","-","0","1.13","0.88","-","-","0","0","0","0","0","0","-","-","1.09","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.28","0","-","-","-" 142 | "2023-10-10T18:50:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","0.78","0","-","0","1.13","0","-","0","-","0","-","0.9","-","-","0","0","0","0","0","0","-","0.92","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","1.05","-","-","0.97","-","-","0","-","0","0","0","-","-","-","0.3","0","-","-","-" 143 | "2023-10-10T18:55:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","1.18","0.92","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.32","0","-","-","-" 144 | "2023-10-10T19:00:00","0","-","0","0","0","0","-","-","-","0","0","-","0","1.15","1.12","-","0","-","0","0.83","0","-","0","-","0","-","0","-","0","-","0.96","-","-","0","0","0","0","0","0","-","0.97","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","1.1","-","-","-","-","-","0","-","0","0","0","-","-","-","0.34","0","-","1.22","-" 145 | "2023-10-10T19:05:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","0.88","0","-","0","-","0","-","0","-","0","-","0.98","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","0.92","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.36","0","-","-","-" 146 | "2023-10-10T19:10:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","1.14","-","0","-","0","-","0","-","0","-","0","-","0","-","0","1.23","1","-","-","0","0","0","0","0","0","-","1.02","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","0.94","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.92","-","-","0","-","0","0","0","-","-","-","0.38","0","-","-","-" 147 | "2023-10-10T19:15:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","0.93","0","-","0","-","0","-","0","-","0","-","1.02","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","0.96","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.4","0","-","-","-" 148 | "2023-10-10T19:20:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","1.04","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","0.98","0","0","0","0","0","0","0","0","0","-","-","1.15","-","-","0.87","-","-","0","-","0","0","0","-","-","-","0.44","0","-","-","-" 149 | "2023-10-10T19:25:00","0","-","0","0","0","0","-","-","-","0","0","-","0","1.1","-","-","0","-","0","0.98","0","-","0","-","0","-","0","-","0","-","1.06","-","-","0","0","0","0","0","0","-","1.07","1.04","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","1","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.46","0","-","-","-" 150 | "2023-10-10T19:30:00","0","-","0","0","0","0","-","-","-","0","0","-","0","1.1","1.16","-","0","-","0","1.03","0","-","0","-","0","-","0","-","0","1.28","1.08","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","1.02","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.82","-","-","0","-","0","0","0","-","-","-","0.48","0","-","-","-" 151 | "2023-10-10T19:35:00","0","-","0","0","0","0","-","-","-","0","0","-","0","1.1","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","1.1","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","1.06","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.5","0","-","-","1.05" 152 | "2023-10-10T19:40:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","1.14","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","1.12","-","-","0","0","0","0","0","0","-","1.12","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","1.08","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.52","0","-","-","-" 153 | "2023-10-10T19:45:00","0","-","0","0","0","0","-","-","0.98","0","0","-","0","1.15","-","-","0","-","0","1.08","0","-","0","-","0","-","0","-","0","-","1.14","-","-","0","0","0","0","0","0","-","-","0.99","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.77","-","-","0","-","0","0","0","1.02","-","-","0.54","0","-","-","-" 154 | "2023-10-10T19:50:00","0","-","0","0","0","0","-","-","-","0","0","-","0","1.1","-","-","0","15.28","0","1.13","0","-","0","1.08","0","-","0","-","0","-","1.16","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.46","1.12","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.56","0","-","1.17","1" 155 | "2023-10-10T19:55:00","0","-","0","0","0","0","-","-","0.93","0","0","-","0","-","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.48","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.58","0","-","-","-" 156 | "2023-10-10T20:00:00","0","-","0","0","0","0","-","1.14","-","0","0","-","0","-","1.12","-","0","-","0","-","0","-","0","1.03","0","-","0","-","0","-","1.18","-","-","0","0","0","0","0","0","-","-","0.94","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.72","-","-","0","-","0","0","0","0.97","-","-","0.6","0","-","-","-" 157 | "2023-10-10T20:05:00","0","-","0","0","0","0","-","-","0.88","0","0","-","0","1.05","-","-","0","-","0","1.18","0","-","0","-","0","-","0","-","0","-","1.2","-","-","0","0","0","0","0","0","-","1.17","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.5","1.16","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.62","0","-","-","0.95" 158 | "2023-10-10T20:10:00","0","-","0","0","0","0","-","1.09","-","0","0","-","0","-","1.08","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","0.89","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.52","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.67","-","-","0","-","0","0","0","-","-","-","0.64","0","-","1.12","-" 159 | "2023-10-10T20:15:00","0","-","0","0","0","0","-","1.09","0.83","0","0","-","0","-","-","-","0","-","0","1.23","0","-","0","0.98","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","1.18","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","0.92","-","-","0.66","0","-","-","0.9" 160 | "2023-10-10T20:20:00","0","-","0","0","0","0","-","-","-","0","0","-","0","1","1.06","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","1.22","-","-","0","0","0","0","0","0","-","-","0.84","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.54","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.62","-","-","0","-","0","0","0","-","-","-","0.68","0","-","1.07","-" 161 | "2023-10-10T20:25:00","0","-","0","0","0","0","-","1.04","0.78","0","0","-","0","0.95","1.04","-","0","-","0","-","0","-","0","0.93","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.56","1.2","0","0","0","0","0","0","0","0","0","-","7.25","-","-","-","-","-","-","0","-","0","0","0","0.87","-","-","0.7","0","-","-","0.85" 162 | "2023-10-10T20:30:00","0","-","0","0","0","0","-","0.99","0.78","0","0","-","0","-","1.02","-","0","-","0","1.28","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","0.79","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.58","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","1.02","0.8" 163 | "2023-10-10T20:35:00","0","-","0","0","0","0","-","-","0.73","0","0","-","0","-","0.98","-","0","-","0","-","0","-","0","0.88","0","-","0","-","0","-","1.24","-","-","0","0","0","0","0","0","-","-","0.74","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","1.22","0","0","0","0","0","0","0","0","0","-","-","1.1","-","-","0.57","-","-","0","-","0","0","0","-","-","-","0.72","0","-","-","-" 164 | "2023-10-10T20:40:00","0","-","0","0","0","0","-","-","-","0","0","-","0","0.9","0.96","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.6","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","0.82","-","-","0.74","0","-","0.97","0.75" 165 | "2023-10-10T20:45:00","0","-","0","0","0","0","-","0.94","0.68","0","0","-","0","0.85","0.94","-","0","-","0","-","0","-","0","0.83","0","-","0","-","0","1.23","-","-","-","0","0","0","0","0","0","-","1.17","0.69","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.62","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.52","-","-","0","-","0","0","0","-","-","-","0.76","0","-","-","-" 166 | "2023-10-10T20:50:00","0","-","0","0","0","0","-","0.89","0.63","0","0","-","0","-","0.92","-","0","-","0","1.33","0","-","0","0.78","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","1.61","0","-","0","-","0","0","-","0","0","0.64","-","0","0","0","0","0","0","0","0","0","-","-","1.05","-","-","-","-","-","0","-","0","0","0","0.77","-","-","0.78","0","-","0.92","0.7" 167 | "2023-10-10T20:55:00","0","-","0","0","0","0","-","-","-","0","0","-","0","0.8","0.88","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","1.22","-","-","0","0","0","0","0","0","-","-","0.64","0","-","0","0","0","0","0","0","-","0","-","0","1.04","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 168 | "2023-10-10T21:00:00","0","-","0","0","0","0","-","0.84","0.58","0","0","-","0","0.8","0.86","-","0","-","0","-","0","-","0","0.73","0","-","0","-","0","1.18","1.22","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.66","-","0","0","0","0","0","0","0","0","0","-","-","1","-","-","0.47","-","-","0","-","0","0","0","0.72","-","-","0.8","0","-","0.87","0.65" 169 | "2023-10-10T21:05:00","0","-","0","0","0","0","-","0.79","-","0","0","-","0","0.75","0.82","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","1.2","-","-","0","0","0","0","0","0","-","1.12","0.59","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.68","1.2","0","0","0","0","0","0","0","0","0","6.08","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.82","0","-","0.82","-" 170 | "2023-10-10T21:10:00","0","-","0","0","0","0","-","-","0.53","0","0","-","0","0.7","0.8","-","0","-","0","-","0","-","0","0.68","0","-","0","-","0","1.13","1.18","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.7","-","0","0","0","0","0","0","0","0","0","-","-","0.95","-","-","-","-","-","0","-","0","0","0","0.67","-","-","-","0","-","-","0.6" 171 | "2023-10-10T21:15:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","0.76","-","0","-","0","-","0","-","0","0.63","0","-","0","-","0","-","1.16","-","-","0","0","0","0","0","0","-","1.07","0.54","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","1.18","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.42","-","-","0","-","0","0","0","-","-","-","0.84","0","-","-","-" 172 | "2023-10-10T21:20:00","0","-","0","0","0","0","-","0.74","0.48","0","0","-","0","0.65","0.74","-","0","-","0","-","0","-","0","-","0","-","0","-","0","1.08","1.14","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.72","1.16","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.86","0","-","0.77","0.55" 173 | "2023-10-10T21:25:00","0","-","0","0","0","0","-","0.69","-","0","0","-","0","-","0.72","-","0","-","0","-","0","-","0","0.58","0","-","0","-","0","-","1.12","-","-","0","0","0","0","0","0","-","-","0.49","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.74","1.14","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","0.62","-","-","-","0","-","0.72","-" 174 | "2023-10-10T21:30:00","0","-","0","0","0","0","-","0.64","0.43","0","0","-","0","0.6","0.68","-","0","-","0","-","0","-","0","-","0","-","0","-","0","1.03","1.1","-","-","0","0","0","0","0","0","-","1.02","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","1.12","0","0","0","0","0","0","0","0","0","-","-","0.85","-","-","0.37","-","-","0","-","0","0","0","-","-","-","-","0","-","-","0.5" 175 | "2023-10-10T21:35:00","0","-","0","0","0","0","-","-","0.38","0","0","-","0","-","0.66","-","0","-","0","-","0","-","0","0.53","0","-","0","-","0","0.98","1.08","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.76","1.1","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","0.57","-","-","0.88","0","-","0.67","-" 176 | "2023-10-10T21:40:00","0","-","0","0","0","0","-","-","-","0","0","-","0","0.55","0.62","-","0","-","0","1.28","0","-","0","-","0","-","0","-","0","-","1.06","-","-","0","0","0","0","0","0","-","0.97","0.44","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.78","1.08","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","0.45" 177 | "2023-10-10T21:45:00","0","-","0","0","0","0","-","0.59","0.33","0","0","-","0","0.5","0.58","-","0","-","0","-","0","-","0","0.48","0","-","0","-","0","-","1.02","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","1.06","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.32","-","-","0","-","0","0","0","-","-","-","-","0","-","0.62","0.4" 178 | "2023-10-10T21:50:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","0.56","-","0","-","0","-","0","-","0","-","0","-","0","-","0","0.93","1","-","-","0","0","0","0","0","0","-","0.92","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.8","1.04","0","0","0","0","0","0","0","0","0","-","-","0.75","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 179 | "2023-10-10T21:55:00","0","-","0","0","0","0","-","0.54","0.28","0","0","-","0","-","0.54","-","0","-","0","1.23","0","-","0","0.43","0","-","0","-","0","0.88","0.96","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","1.02","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","0.52","-","-","-","0","-","0.57","0.35" 180 | "2023-10-10T22:00:00","0","-","0","0","0","0","-","0.49","-","0","0","-","0","0.45","0.52","-","0","-","0","-","0","20.66","0","0.38","0","-","0","49.22","0","-","0.94","-","12.5","0","0","0","0","0","0","-","0.87","0.39","0","-","0","0","0","0","0","0","-","0","-","0","-","2","0","-","0","0","0.82","0.98","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.27","-","-","0","-","0","0","0","-","-","-","-","0","-","0.52","-" 181 | "2023-10-10T22:05:00","0","-","0","0","0","0","-","-","0.23","0","0","-","0","0.4","0.48","-","0","-","0","1.18","0","-","0","-","0","-","0","-","0","0.83","0.92","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","0.96","0","0","0","0","0","0","0","0","0","-","-","0.65","-","-","-","-","-","0","-","0","0","0","-","-","-","0.86","0","-","-","0.3" 182 | "2023-10-10T22:10:00","0","-","0","0","0","0","-","0.44","-","0","0","-","0","-","0.46","-","0","-","0","-","0","-","0","0.33","0","-","0","-","0","-","0.9","-","-","0","0","0","0","0","0","-","0.82","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","0.92","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.22","36.72","-","0","-","0","0","0","-","-","-","-","0","-","0.47","-" 183 | "2023-10-10T22:15:00","0","-","0","0","0","0","-","-","0.18","0","0","-","0","0.35","0.44","-","0","-","0","1.13","0","-","0","-","0","-","0","-","0","0.78","0.86","29.68","-","0","0","0","0","0","0","-","-","0.34","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","0.9","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","0.47","-","-","0.84","0","4.18","-","0.25" 184 | "2023-10-10T22:20:00","0","-","0","0","0","0","-","0.39","-","0","0","-","0","-","0.4","-","0","-","0","-","0","-","0","0.28","0","-","0","-","0","-","0.84","-","-","0","0","0","0","0","0","-","0.77","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.84","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","0.42","0.2" 185 | "2023-10-10T22:25:00","0","-","0","0","0","0","-","-","0.13","0","0","-","0","0.3","0.36","-","0","-","0","1.08","0","-","0","-","0","-","0","-","0","0.73","0.82","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","41.36","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.55","-","-","-","-","-","0","-","0","0","0","-","-","-","0.82","0","-","-","-" 186 | "2023-10-10T22:30:00","0","-","0","0","0","0","-","0.34","0.08","0","0","-","0","0.25","0.34","-","0","-","0","1.03","0","-","0","0.23","0","-","0","-","0","-","0.8","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.84","-","0","0","0","0","0","0","0","0","0","-","-","-","-","6.74","0.17","-","-","0","-","0","0","0","-","-","-","-","0","-","0.37","0.15" 187 | "2023-10-10T22:35:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","0.32","-","0","-","0","-","0","-","0","0.18","0","-","0","-","0","0.68","0.78","-","-","0","0","0","0","0","0","-","0.72","0.29","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 188 | "2023-10-10T22:40:00","0","-","0","0","0","0","-","0.29","0.03","0","0","-","0","0.2","0.28","-","0","-","0","0.98","0","-","0","-","0","-","0","-","0","-","0.74","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","3.46","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","0.32","0.1" 189 | "2023-10-10T22:45:00","0","-","0","0","0","0","-","0.24","-0.02","0","0","-","0","-","0.26","-","0","-","0","-","0","-","0","0.13","0","-","0","-","0","0.63","0.72","-","-","0","0","0","0","0","0","-","0.67","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.45","-","-","-","-","-","0","-","0","0","0","-","-","-","0.8","0","-","0.27","-" 190 | "2023-10-10T22:50:00","0","-","0","0","0","0","-","-","-","0","0","4.62","0","0.15","0.22","-","0","-","0","0.93","0","-","0","-","0","-","0","-","0","-","0.7","29.68","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.82","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.12","-","-","0","-","0","0","0","-","-","-","-","0","-","-","0.05" 191 | "2023-10-10T22:55:00","0","-","0","0","0","0","-","0.19","-0.07","0","0","-","0","0.1","0.2","-","0","-","0","0.88","0","-","0","0.08","0","-","0","-","0","0.58","0.66","-","-","0","0","0","0","0","0","-","0.62","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.4","-","-","-","-","-","0","-","0","0","0","-","-","-","0.78","0","-","0.22","0" 192 | "2023-10-10T23:00:00","0","-","0","0","0","0","-","0.19","-","0","0","-","0","-","0.16","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","0.64","-","-","0","0","0","0","0","0","-","-","0.24","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","41.34","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","0.42","-","-","-","0","-","-","-" 193 | "2023-10-10T23:05:00","0","-","0","0","0","0","-","0.14","-0.12","0","0","-","0","0.05","0.14","-","0","-","0","0.83","0","-","0","0.03","0","-","0","49.2","0","0.53","0.62","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.07","-","-","0","-","0","0","0","-","-","-","0.76","0","-","0.17","-0.05" 194 | "2023-10-10T23:10:00","0","-","0","0","0","0","-","0.09","-","0","0","-","0","-","0.1","-","0","-","0","0.78","0","-","0","-","0","-","0","-","0","0.48","0.58","-","-","0","0","0","0","0","0","-","0.57","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","0.12","-" 195 | "2023-10-10T23:15:00","0","-","0","0","0","0","-","-","-0.17","0","0","-","0","0","0.08","-","0","-","0","-","0","-","0","-0.02","0","-","0","-","0","-","0.56","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.8","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.74","0","-","-","-0.1" 196 | "2023-10-10T23:20:00","0","-","0","0","0","0","-","0.04","-","0","0","-","0","0","0.04","-","0","-","0","0.73","0","-","0","-0.07","0","-","0","-","0","0.43","0.52","-","-","0","0","0","0","0","0","-","0.52","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.25","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","0.07","-" 197 | "2023-10-10T23:25:00","0","-","0","0","0","0","-","-","-0.22","0","0","-","0","-0.05","0.02","-","0","-","0","0.68","0","-","0","-","0","-","0","-","0","-","0.5","-","-","0","0","0","0","0","0","-","-","0.19","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","0.02","-","-","0","-","0","0","0","-","-","-","0.72","0","-","-","-" 198 | "2023-10-10T23:30:00","0","-","0","0","0","0","-","-0.01","-","0","0","-","0","-","0","-","0","-","0","-","0","-","0","-0.12","0","-","0","-","0","0.38","0.48","-","-","0","0","0","0","0","0","-","0.47","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.2","-","-","-","-","-","0","-","0","0","0","-","-","-","0.7","0","-","0.02","-0.15" 199 | "2023-10-10T23:35:00","0","-","0","0","0","0","-","-0.06","-0.27","0","0","-","0","-0.1","-0.04","-","0","-","0","0.63","0","-","0","-","0","-","0","-","0","-","0.44","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.78","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-0.2" 200 | "2023-10-10T23:40:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.15","-0.06","-","0","-","0","-","0","-","0","-0.17","0","-","0","-","0","0.33","0.4","-","-","0","0","0","0","0","0","-","0.42","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.15","-","-","-","-","-","0","-","0","0","0","-","-","-","0.68","0","-","-0.03","-" 201 | "2023-10-10T23:45:00","0","-","0","0","0","0","-","-0.11","-0.32","0","0","-","0","-","-0.1","-","0","-","0","0.58","0","-","0","-","0","-","0","-","0","0.28","0.38","-","-","0","0","0","0","0","0","-","-","0.14","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.1","-","-","-0.03","-","-","0","-","0","0","0","-","-","-","-","0","-","-0.03","-0.25" 202 | "2023-10-10T23:50:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.2","-0.12","-","0","-","0","0.53","0","-","0","-0.22","0","-","0","-","0","-","0.36","-","-","0","0","0","0","0","0","-","0.37","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","1.35","0.66","0","-","-0.08","-" 203 | "2023-10-10T23:55:00","0","-","0","0","0","0","-","-0.16","-","0","0","-","0","-","-0.16","-","0","-","0","-","0","-","0","-","0","-","0","-","0","0.23","0.32","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.76","-","0","0","0","0","0","0","0","0","0","-","-","0.05","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-0.13","-" 204 | "2023-10-11T00:00:00","0","-","0","0","0","0","18.45","-","-0.37","0","0","-","0","-0.25","-0.18","-","0","-","0","0.48","0","-","0","-0.27","0","-","0","-","0","0.18","0.28","-","-","0","0","0","0","0","0","-","0.32","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.08","-","-","0","-","0","0","0","0.37","-","-","0.64","0","-","-","-0.3" 205 | "2023-10-11T00:05:00","0","-","0","0","0","0","-","-0.21","-","0","0","-","0","-","-0.22","-","0","-","0","0.43","0","-","0","-","0","-","0","-","0","-","0.26","-","-","0","0","0","0","0","0","-","-","0.09","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.13","-","-","0","-","0","0","0","-","-","-","0.62","0","-","-0.18","-0.3" 206 | "2023-10-11T00:10:00","0","-","0","0","0","0","-","-","-0.42","0","0","-","0","-0.3","-0.24","-","0","-","0","-","0","-","0","-0.32","0","-","0","-","0","0.13","0.22","-","-","0","0","0","0","0","0","-","0.27","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.74","-","0","0","0","0","0","0","0","0","0","-","-","-0.05","-","-","-0.18","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-0.35" 207 | "2023-10-11T00:15:00","0","-","0","0","0","0","-","-0.26","-","0","0","-","0","-","-0.26","-","0","-","0","0.38","0","-","0","-","0","-","0","-","0","0.13","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.6","0","-","-0.23","-" 208 | "2023-10-11T00:20:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.35","-0.3","-","0","-","0","-","0","-","0","-0.37","0","-","0","-","0","0.08","-","-","-","0","0","0","0","0","0","-","0.22","0.04","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.1","-","-","-","-","-","0","-","0","0","0","-","-","-","0.58","0","-","-","-" 209 | "2023-10-11T00:25:00","0","-","0","0","0","0","-","-0.31","-0.47","0","0","-","0","-","-0.32","-","0","-","0","0.33","0","-","0","-","0","-","0","-","0","0.03","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","0.37","-","-","-","0","-","-0.28","-0.4" 210 | "2023-10-11T00:30:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.4","-0.34","-","0","-","0","0.28","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","0.17","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.72","-","0","0","0","0","0","0","0","0","0","-","-","-0.15","-","-","-","-","-","0","-","0","0","0","-","26.47","-","0.56","0","-","-","-" 211 | "2023-10-11T00:35:00","0","-","0","0","0","0","-","-","-0.52","0","0","-","0","-","-0.36","-","0","-","0","-","0","-","0","-0.42","0","-","0","-","0","-0.02","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.2","-","-","-0.23","-","-","0","-","0","0","0","-","-","-","0.54","0","-","-","-0.45" 212 | "2023-10-11T00:40:00","0","-","0","0","0","0","-","-0.36","-","0","0","-","0","-","-0.38","-","0","-","0","0.23","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","0.12","-0.01","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.33","-","-","0","-","0","0","0","-","-","-","-","0","-","-0.33","-" 213 | "2023-10-11T00:45:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.45","-0.4","-","0","-","0","0.18","0","-","0","-0.47","0","-","0","-","0","-0.07","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.7","-","0","0","0","0","0","0","0","0","0","-","-","-0.25","-","-","-","-","-","0","-","0","0","0","-","-","-","0.52","0","-","-","-" 214 | "2023-10-11T00:50:00","0","1.76","0","0","0","0","-","-0.41","-","0","0","-","0","-","-0.44","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","0.07","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.38","-","-","0","-","0","0","0","-","-","-","0.5","0","-","-0.38","-0.5" 215 | "2023-10-11T00:55:00","0","-","0","0","0","0","-","-","-0.57","0","0","-","0","-0.5","-0.46","-","0","-","0","0.13","0","-","0","-","0","-","0","-","0","-0.12","-","-","-","0","0","0","0","0","0","-","0.02","-0.06","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.3","-","-","-0.43","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 216 | "2023-10-11T01:00:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-0.48","-","0","-","0","-","0","-","0","-0.52","0","-","0","-","0","-0.17","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.48","-","-","0","-","0","0","0","-","-","-","0.48","0","-","-","-" 217 | "2023-10-11T01:05:00","0","-","0","0","0","0","-","-0.46","-","0","0","-","0","-","-0.5","-","0","-","0","0.08","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.03","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.68","-","0","0","0","0","0","0","0","0","0","-","-","-0.35","-","-","-","-","-","0","-","0","0","0","-","-","-","0.46","0","-","-0.43","-" 218 | "2023-10-11T01:10:00","0","-","0","0","0","0","-","-","-0.62","0","0","-","0","-0.55","-0.52","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-0.11","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.53","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-0.55" 219 | "2023-10-11T01:15:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-0.54","-","0","-","0","0.03","0","-","0","-0.57","0","-","0","-","0","-0.22","-","-","-","0","0","0","0","0","0","-","-0.08","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","0.32","-","-","0.44","0","-","-0.48","-" 220 | "2023-10-11T01:20:00","0","-","0","0","0","0","-","-0.51","-","0","0","-","0","-","-0.56","-","0","-","0","-0.02","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.66","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 221 | "2023-10-11T01:25:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.6","-","-","0","-","0","-","0","-","0","-0.57","0","-","0","-","0","-0.27","-","-","-","0","0","0","0","0","0","-","-0.13","-0.16","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.45","-","-","-0.58","-","-","0","-","0","0","0","-","-","-","0.42","0","-","-","-0.6" 222 | "2023-10-11T01:30:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-0.58","-","0","-","0","-0.07","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.4","0","-","-0.53","-" 223 | "2023-10-11T01:35:00","0","-","0","0","0","0","-","-","-0.67","0","0","-","0","-","-0.6","-","0","-","0","-","0","-","0","-0.62","0","-","0","-","0","-0.32","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.64","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.63","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 224 | "2023-10-11T01:40:00","0","-","0","0","0","0","-","-0.56","-","0","0","-","0","-","-0.62","-","0","-","0","-0.12","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.18","-0.21","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.5","-","-","-","-","3.75","0","-","0","0","0","-","-","-","0.38","0","-","-","-" 225 | "2023-10-11T01:45:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-0.37","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","2.12","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.36","0","-","-","-" 226 | "2023-10-11T01:50:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.65","-0.64","-","0","-","0","-0.17","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.23","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.55","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 227 | "2023-10-11T01:55:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-0.26","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.62","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.68","-","-","0","-","0","0","0","-","-","-","0.34","0","-","-","-" 228 | "2023-10-11T02:00:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-0.66","-","0","-","0","-0.22","0","-","0","-","0","-","0","-","0","-0.42","-","-","-","0","0","0","0","0","0","-","-0.28","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-0.58","-" 229 | "2023-10-11T02:05:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.32","0","-","-","-" 230 | "2023-10-11T02:10:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","-0.27","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.33","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.6","-","-","-","-","-","0","9.04","0","0","0","-","-","-","0.3","0","-","-","-" 231 | "2023-10-11T02:15:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-0.68","-","0","-","0","-0.32","0","-","0","-","0","-","0","-","0","-0.47","-","-","-","0","0","0","0","0","0","-","-","-0.31","0","2.5","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.6","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 232 | "2023-10-11T02:20:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.28","0","-","-","-" 233 | "2023-10-11T02:25:00","0","-","0","0","0","0","-","-","-0.62","0","0","-","0","-","-","-","0","-","0","-0.37","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.38","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 234 | "2023-10-11T02:30:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-0.31","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","0.27","-","-","0.26","0","-","-","-" 235 | "2023-10-11T02:35:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-0.66","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-0.52","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.58","-","0","0","0","0","0","0","0","0","0","-","-","-0.65","-","-","-","-","-","0","-","0","0","0","-","-","-","0.24","0","-","-","-" 236 | "2023-10-11T02:40:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-","-","0","-","0","-0.42","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.43","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 237 | "2023-10-11T02:45:00","0","-","0","0","0","0","-","-","-0.57","0","0","-","0","-0.6","-","-","0","-","0","-","0","-","0","-0.57","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.22","0","-","-0.53","-0.55" 238 | "2023-10-11T02:50:00","0","-","0","0","0","0","-","-0.51","-","0","0","-","0","-","-0.64","2.18","0","-","0","-0.47","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 239 | "2023-10-11T02:55:00","0","-","0","0","0","0","-","-","-0.52","0","0","-","0","-0.55","-0.62","-","0","-","0","-","0","-","0","-0.52","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.48","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.56","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.2","0","-","-","-0.5" 240 | "2023-10-11T03:00:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","-0.6","-","0","-","0","-0.52","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.63","-","-","0","-","0","0","0","-","-","-","0.18","0","-","-0.48","-0.45" 241 | "2023-10-11T03:05:00","0","-","0","0","0","0","-","-0.46","-0.47","0","0","-","0","-","-0.58","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 242 | "2023-10-11T03:10:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.5","-0.58","-","0","-","0","-0.57","0","-","0","-0.47","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.58","-","-","0","-","0","0","0","-","-","-","0.16","0","-","-","-" 243 | "2023-10-11T03:15:00","0","-","0","0","0","0","-","-0.41","-0.42","0","0","-","0","-","-0.56","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.54","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-0.43","-" 244 | "2023-10-11T03:20:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.45","-0.54","-","0","-","0","-","0","-","0","-0.42","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.53","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.6","-","-","-0.53","-","-","0","-","0","0","0","-","-","-","0.14","0","-","-","-0.4" 245 | "2023-10-11T03:25:00","0","-","0","0","0","0","-","-0.36","-0.37","0","0","-","0","-","-0.5","-","0","-","0","-0.62","0","-","0","-","0","-","0","-","0","-0.47","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","3.48","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-0.38","-0.35" 246 | "2023-10-11T03:30:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.4","-0.48","-","0","-","0","-","0","-","0","-0.37","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.48","-","-","0","-","0","0","0","-","-","-","0.12","0","-","-","-" 247 | "2023-10-11T03:35:00","0","-","0","0","0","0","-","-0.31","-0.32","0","0","-","0","-","-0.44","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-0.42","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-0.33","-0.3" 248 | "2023-10-11T03:40:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-0.35","-0.42","-","0","-","0","-0.67","0","-","0","-0.32","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.52","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.43","-","-","0","-","0","0","0","-","-","-","0.1","0","-","-","-" 249 | "2023-10-11T03:45:00","0","-","0","0","0","0","-","-0.26","-0.27","0","0","-","0","-","-0.4","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.38","-","-","0","-","0","0","0","-","-","-","-","0","-","-0.28","-0.25" 250 | "2023-10-11T03:50:00","0","-","0","0","0","0","-","-0.21","-","0","0","-","0","-0.3","-0.36","-","0","-","0","-","0","-","0","-0.27","0","-","0","-","0","-0.37","-","-","-","0","0","0","0","0","0","-","-0.48","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.45","-","-","-0.33","-","-","0","-","0","0","0","-","-","-","0.08","0","-","-0.23","-" 251 | "2023-10-11T03:55:00","0","-","0","0","0","0","-","-","-0.22","0","0","-","0","-","-0.34","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-0.2" 252 | "2023-10-11T04:00:00","0","-","0","0","0","0","-","-0.16","-","0","0","-","0","-0.25","-0.32","-","0","-","0","-","0","-","0","-0.22","0","-","0","-","0","-0.32","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.4","-","-","-0.28","-","-","0","-","0","0","0","-","-","-","0.06","0","-","-0.18","-" 253 | "2023-10-11T04:05:00","0","-","0","0","0","0","-","-","-0.17","0","0","-","0","-0.2","-0.28","-","0","-","0","-0.72","0","-","0","-0.17","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.43","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.5","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.23","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-0.15" 254 | "2023-10-11T04:10:00","0","-","0","0","0","0","-","-0.11","-0.12","0","0","-","0","-","-0.26","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-0.27","-","-","-","0","0","0","0","0","0","-","-","-0.26","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.35","-","-","-","-","-","0","-","0","0","0","0.22","-","-","0.04","0","-","-0.13","-" 255 | "2023-10-11T04:15:00","0","-","0","0","0","0","-","-0.06","-","0","0","-","0","-0.15","-0.22","-","0","-","0","-","0","-","0","-0.12","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.38","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-0.18","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-0.1" 256 | "2023-10-11T04:20:00","0","-","0","0","0","0","-","-","-0.07","0","0","-","0","-0.1","-0.18","-","0","-","0","-","0","-","0","-0.07","0","-","0","-","0","-0.22","-","-","-","0","0","0","0","0","0","-","-0.33","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","0.02","0","-","-0.08","-0.05" 257 | "2023-10-11T04:25:00","0","-","0","0","0","0","-","-0.01","-0.02","0","0","-","0","-","-0.16","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-0.17","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-0.03","-" 258 | "2023-10-11T04:30:00","0","-","0","0","0","0","-","0.04","-","0","0","-","0","-0.05","-0.12","-","0","15.28","0","-","0","-","0","-0.02","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.48","-","0","0","0","0","0","0","0","0","0","-","-","-0.25","-","-","-0.13","-","-","0","-","0","0","0","-","-","-","0","0","-","-","0" 259 | "2023-10-11T04:35:00","0","-","0","0","0","0","-","-","0.03","0","0","-","0","0","-0.08","-","0","-","0","-0.67","0","-","0","-","0","-","0","-","0","-0.12","-","-","-","0","0","0","0","0","0","-","-0.28","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.2","-","-","-0.03","-","-","0","-","0","0","0","-","-","-","-","0","-","0.02","0.05" 260 | "2023-10-11T04:40:00","0","-","0","0","0","0","-","0.09","-","0","0","-","0","0","-0.06","-","0","-","0","-","0","-","0","0.03","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-0.02","0","-","0.07","-" 261 | "2023-10-11T04:45:00","0","-","0","0","0","0","-","0.14","0.08","0","0","-","0","0.05","-0.02","-","0","-","0","-0.62","0","-","0","0.08","0","-","0","-","0","-0.07","-","-","-","0","0","0","0","0","0","-","-0.23","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.15","-","-","0.02","-","-","0","-","0","0","0","-","-","-","-","0","-","-","0.1" 262 | "2023-10-11T04:50:00","0","-","0","0","0","0","-","-","-","0","0","4.62","0","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-","0","-0.02","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-0.1","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","0.12","0.15" 263 | "2023-10-11T04:55:00","0","-","0","0","0","0","-","0.19","0.13","0","0","-","0","0.1","0.04","-","0","-","0","-0.57","0","-","0","0.13","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.18","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-0.04","0","-","0.17","-" 264 | "2023-10-11T05:00:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","0.06","-","0","-","0","-","0","-","0","-","0","-","0","-","0","0.03","-","-","-","0","0","0","0","0","0","-","-0.13","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","0.46","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","0.2" 265 | "2023-10-11T05:05:00","0","-","0","0","0","0","-","0.24","0.18","0","0","-","0","0.15","0.08","-","0","-","0","-0.52","0","-","0","0.18","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-0.06","0","-","0.22","-" 266 | "2023-10-11T05:10:00","0","-","0","0","0","0","-","-","-","0","0","-","0","-","0.12","-","0","-","0","-","0","-","0","0.23","0","-","0","-","0","0.08","-","-","-","0","0","0","0","0","0","-","-0.08","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0","-","-","0.07","-","-","0","-","0","0","0","-","-","-","-","0","-","-","0.25" 267 | "2023-10-11T05:15:00","0","-","0","0","0","0","-","0.29","0.23","0","0","-","0","0.2","0.14","-","0","-","0","-0.47","0","-","0","-","0","-","0","-","0","0.13","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","0.27","0.3" 268 | "2023-10-11T05:20:00","0","-","0","0","0","0","-","-","-","0","0","-","0","0.25","0.16","-","0","-","0","-","0","-","0","0.28","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","-0.03","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","0.32","-" 269 | "2023-10-11T05:25:00","0","-","0","0","0","0","-","0.34","0.28","0","0","-","0","-","0.2","-","0","-","0","-0.42","0","-","0","-","0","-","0","-","0","0.18","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.1","-","-","-","-","-","0","-","0","0","0","-","-","-","-0.08","0","-","-","-" 270 | "2023-10-11T05:30:00","0","-","0","0","0","0","-","-","-","0","0","-","0","0.3","0.22","-","0","-","0","-0.37","0","-","0","0.33","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","0.02","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","0.37","0.35" 271 | "2023-10-11T05:35:00","0","-","0","0","0","0","-","0.39","0.33","0","0","-","0","-","0.26","-","0","-","0","-","0","-","0","-","0","-","0","-","0","0.23","-","-","-","0","0","0","0","0","0","18.36","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","-","-" 272 | "2023-10-11T05:40:00","0","-","0","0","0","0","-","0.44","-","0","0","-","0","0.35","0.28","-","0","-","0","-0.32","0","-","0","0.38","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","0.07","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","0.42","0.4" 273 | "2023-10-11T05:45:00","0","-","0","0","0","0","-","-","0.38","0","0","-","0","-","0.32","-","0","-","0","-","0","-","0","-","0","-","0","-","0","0.28","-","-","-","0","0","0","0","0","0","-","-","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","0.2","-","-","-","-","-","0","-","0","0","0","0.27","-","-","-","0","-","-","-" 274 | "2023-10-11T05:50:00","0","-","0","0","0","0","-","0.49","-","0","0","-","0","0.4","0.34","-","0","-","0","-0.27","0","-","0","0.43","0","-","0","-","0","-","-","-","-","0","0","0","0","0","0","-","0.12","-","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","0","0","0","-","-","-","-","-","-","-","-","0","-","0","0","0","-","-","-","-","0","-","0.47","0.45" 275 | "2023-10-11T05:55:00","0","-","0","0","0","0","-","-","0.43","0","0","-","0","-","0.36","-","0","-","0","-0.22","0","-","0","-","-","-","0","-","-","0.33","-","-","-","-","0","0","0","0","0","-","-","-0.21","0","-","0","0","0","0","0","0","-","0","-","0","-","0","0","-","0","0","-","-","0","0","0","0","0","0","-","0","0","-","-","0.25","-","-","-","-","-","0","-","0","0","-","-","-","-","-0.06","0","-","-","-" 276 | "2023-10-11T06:00:00","0","-","0","0","0","0","-","-","-","-","0","-","0","0.45","0.38","-","0","-","0","-0.17","0","-","0","0.48","-","-","0","-","-","-","-","-","-","-","0","-","0","0","0","-","0.17","-","-","-","0","0","-","0","0","-","-","0","-","0","-","0","-","-","0","0","-","-","0","0","0","0","0","0","-","0","0","-","-","-","-","-","0.12","-","-","0","-","0","0","-","-","-","-","-","-","-","0.52","0.5" 277 | -------------------------------------------------------------------------------- /src/flows/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datamatiks/iot-platform-modern-data-stack-poc/aa297ae569ef507fe040f3c67ad81650c91c5e11/src/flows/__init__.py -------------------------------------------------------------------------------- /src/flows/db.py: -------------------------------------------------------------------------------- 1 | import duckdb 2 | 3 | def get_db_conn(db=':memory:',is_shared=False): 4 | return duckdb.connect(database=db, read_only=is_shared) -------------------------------------------------------------------------------- /src/flows/deploy.sh: -------------------------------------------------------------------------------- 1 | prefect deployment apply prefect_deploy/init_db_flow-docker-deployment.yaml 2 | prefect deployment apply prefect_deploy/extract_file_flow-docker-deployment.yaml 3 | prefect deployment apply prefect_deploy/load_data_flow-docker-deployment.yaml 4 | prefect agent start -q 'iot-demo-agent' 5 | -------------------------------------------------------------------------------- /src/flows/extract_flow.py: -------------------------------------------------------------------------------- 1 | import db as db 2 | import httpx 3 | from datetime import datetime, date 4 | 5 | from prefect import flow, task, get_run_logger,serve 6 | from pathlib import Path 7 | from dotenv import load_dotenv 8 | 9 | DOWNLOAD_URL = "https://www.data.brisbane.qld.gov.au/data/dataset/01af4647-dd69-4061-9c68-64fa43bfaac7/resource/78c37b45-ecb5-4a99-86b2-f7a514f0f447/download/" 10 | 11 | """ 12 | Extract latest file from Brisbane Open Data Portal 13 | https://www.data.brisbane.qld.gov.au/data/dataset/telemetry-sensors-rainfall-and-stream-heights 14 | """ 15 | @task 16 | def get_gauge_data() -> str: 17 | 18 | now = datetime.today() 19 | date_str = str(now.date()) 20 | date_str = date_str.replace("-","") 21 | print(date_str) 22 | 23 | filename = f"gauge-data-{date_str}*.csv" 24 | print("filename:" + filename) 25 | try: 26 | r = httpx.get(f'{DOWNLOAD_URL}{filename}') 27 | 28 | now_str= str(now).replace(" ","-") 29 | outfilename = f'src/data/staging/new-file-{now_str}.csv' 30 | 31 | with open(outfilename, 'w') as f: 32 | f.write(r.text) 33 | 34 | return outfilename 35 | 36 | except Exception as ex: 37 | print(ex) 38 | raise Exception(f"Something happen: {ex}") 39 | 40 | 41 | @flow 42 | def extract_file_flow(name="Gauge Data Extract", log_prints=True): 43 | logger = get_run_logger() 44 | now = datetime.now() 45 | print(now) 46 | logger.info(f"Run date🤓: - {now} -") 47 | 48 | filename = get_gauge_data() 49 | logger.info(f"New file extracted: {filename}") 50 | #merge_gauge_data(filename) 51 | 52 | if __name__ == "__main__": 53 | # extract_file_deploy_15mins = extract_file_flow.to_deployment(name="extract-file-deploy-15mins", interval=900) 54 | # serve(extract_file_deploy_15mins) 55 | extract_file_flow() -------------------------------------------------------------------------------- /src/flows/init_flow.py: -------------------------------------------------------------------------------- 1 | import os 2 | import db as db 3 | import pandas as pd 4 | 5 | 6 | from duckdb import DuckDBPyConnection 7 | from prefect import flow, task, get_run_logger,serve 8 | from datetime import datetime, date 9 | from pathlib import Path 10 | 11 | ####### HELPER FUNCTIONS ########## 12 | def get_conn(): 13 | return db.get_db_conn('db/datahack.duckdb') 14 | 15 | def init_seq(seq_name): 16 | conn = get_conn() 17 | return conn.execute(f"CREATE SEQUENCE IF NOT EXISTS {seq_name} START 1;") 18 | 19 | def init_sensor_table(): 20 | conn = get_conn() 21 | #create metadata look up table 22 | conn.execute( 23 | """ 24 | DROP TABLE IF EXISTS gauge_sensors_metadata; 25 | CREATE TABLE gauge_sensors_metadata AS 26 | SELECT * 27 | FROM read_csv_auto 28 | ('src/data/metadata/rainfall-and-stream-heights-metadata-20230917t110000.csv') 29 | """ 30 | ) 31 | 32 | def init_audit_table(): 33 | conn = get_conn() 34 | conn.execute( 35 | """ 36 | DROP TABLE IF EXISTS ingest_pipeline_audit_log ; 37 | CREATE TABLE ingest_pipeline_audit_log 38 | ( 39 | auditid integer primary key DEFAULT NEXTVAL('seq_auditid'), 40 | ingest_filename varchar(255) not null, 41 | last_datetime datetime not null, 42 | updated_by varchar(255), 43 | updated_date datetime 44 | ) 45 | """ 46 | ) 47 | 48 | def drop_table(tbl_name): 49 | conn = get_conn() 50 | return conn.execute(f"DROP TABLE IF EXISTS {tbl_name} ") 51 | 52 | def drop_seq(seq_name): 53 | conn = get_conn() 54 | return conn.execute(f"DROP SEQUENCE IF EXISTS {seq_name} CASCADE") 55 | 56 | def destroy(): 57 | conn = get_conn() 58 | drop_table(conn, "ingest_gauge_metrics") 59 | drop_table(conn, "ingest_pipeline_audit_log") 60 | drop_seq(conn, "seq_auditid") 61 | 62 | def insert_to_audit_table(record): 63 | conn = get_conn() 64 | query = f""" 65 | INSERT INTO ingest_pipeline_audit_log ( 66 | ingest_filename, 67 | last_datetime, 68 | updated_by, 69 | updated_date 70 | ) 71 | VALUES {record} 72 | """ 73 | return conn.execute(query) 74 | 75 | def get_last_datetime(): 76 | conn = get_conn() 77 | last_datetime = conn.sql( 78 | """ 79 | SELECT last_datetime 80 | FROM ingest_pipeline_audit_log 81 | WHERE auditid = 82 | ( SELECT max(auditid) 83 | FROM ingest_pipeline_audit_log 84 | ) 85 | """ 86 | ).fetchone()[0] 87 | 88 | print(f'last_datetime:{last_datetime}') 89 | return last_datetime 90 | 91 | 92 | ####### TASKS FUNCTIONS ########## 93 | 94 | @task 95 | def init_tables(): 96 | 97 | init_seq("seq_auditid") 98 | init_sensor_table() 99 | init_audit_table() 100 | 101 | 102 | @task 103 | def display(): 104 | conn = get_conn() 105 | conn.sql('SELECT * FROM ingest_pipeline_audit_log').show() 106 | conn.sql('SELECT * FROM ingest_gauge_metrics').show() 107 | 108 | @task 109 | def process_seeds(filepath: str): 110 | conn = get_conn() 111 | files =[ f for f in os.listdir(filepath) ] 112 | files_sorted = sorted(files) 113 | 114 | #Loop all through seed files 115 | for index, filename in enumerate(files_sorted): 116 | print(f"Processing --- {filename}" ) 117 | filepath = Path("src/data/seeds") / filename 118 | tmp_df = conn.sql(f"SELECT * FROM read_csv_auto('{filepath}',all_varchar=true)").df() 119 | tmp_df["measured_datetime"] = pd.to_datetime(tmp_df['Measured']) 120 | tmp_df["measured_day"] = pd.to_datetime(tmp_df['Measured']).dt.date 121 | tmp_df["measured_hour"] = pd.to_datetime(tmp_df['Measured']).dt.hour 122 | tmp_df["measured_minute"] = pd.to_datetime(tmp_df['Measured']).dt.minute 123 | tmp_df = tmp_df.drop(["Measured"], axis=1) 124 | 125 | tmp_df = tmp_df.replace(['-'], '0') 126 | 127 | #Create the table on first file 128 | if index == 0: 129 | 130 | drop_table('ingest_gauge_metrics') 131 | conn.execute("CREATE TABLE ingest_gauge_metrics AS SELECT * FROM tmp_df") 132 | 133 | last_datetime = conn.execute('SELECT MAX(measured_datetime) FROM ingest_gauge_metrics').fetchone()[0] 134 | 135 | print('Initial ingest') 136 | print(f'Processing {filename}') 137 | print(f'last_datetime : {last_datetime}') 138 | 139 | audit_entry = (filename, last_datetime.strftime('%Y-%m-%dT%H:%M:%S'), 'datamatiks',datetime.now().strftime('%Y-%m-%dT%H:%M:%S')) 140 | insert_to_audit_table(audit_entry) 141 | else: 142 | sensors_tbl_stg = conn.sql("SELECT * FROM tmp_df") 143 | curr_last_datetime = get_last_datetime() 144 | new_df = conn.sql(f"SELECT * FROM sensors_tbl_stg where measured_datetime > '{curr_last_datetime}'").df() 145 | 146 | # print('----new_df----START-----') 147 | # print(new_df) 148 | # print('----new_df----END-----') 149 | 150 | conn.execute('INSERT INTO ingest_gauge_metrics SELECT * FROM new_df') 151 | new_last_datetime = conn.sql('SELECT MAX(measured_datetime) FROM sensors_tbl_stg').fetchone()[0] 152 | 153 | audit_entry = (filename, new_last_datetime.strftime('%Y-%m-%dT%H:%M:%S'),'datamatiks',datetime.now().strftime('%Y-%m-%dT%H:%M:%S')) 154 | insert_to_audit_table(audit_entry) 155 | 156 | ####### FLOW FUNCTIONS ########## 157 | @flow 158 | def init_db_flow(name="Initialize DB flow ", log_prints=True): 159 | logger = get_run_logger() 160 | now = datetime.now() 161 | print(now) 162 | logger.info("%s Run date🤓:", now) 163 | 164 | init_tables() 165 | process_seeds('src/data/seeds') 166 | display() 167 | 168 | if __name__ == "__main__": 169 | init_db_flow() 170 | -------------------------------------------------------------------------------- /src/flows/load_flow.py: -------------------------------------------------------------------------------- 1 | import db as db 2 | import pandas as pd 3 | import os 4 | 5 | from duckdb import DuckDBPyConnection 6 | from prefect import flow, task, get_run_logger,serve 7 | from datetime import datetime, date 8 | from pathlib import Path 9 | 10 | ####### HELPER FUNCTIONS ########## 11 | def get_conn()->DuckDBPyConnection: 12 | return db.get_db_conn('db/datahack.duckdb') 13 | 14 | def insert_to_audit_table(conn, record): 15 | query = f""" 16 | INSERT INTO ingest_pipeline_audit_log ( 17 | ingest_filename, 18 | last_datetime, 19 | updated_by, 20 | updated_date 21 | ) 22 | VALUES {record} 23 | """ 24 | return conn.execute(query) 25 | 26 | def get_last_datetime(conn): 27 | last_datetime = conn.sql( 28 | """ 29 | SELECT last_datetime 30 | FROM ingest_pipeline_audit_log 31 | WHERE auditid = 32 | ( SELECT max(auditid) 33 | FROM ingest_pipeline_audit_log 34 | ) 35 | """ 36 | ).fetchone()[0] 37 | 38 | print(f'last_datetime:{last_datetime}') 39 | return last_datetime 40 | 41 | 42 | ####### TASKS FUNCTIONS ########## 43 | @task 44 | def display(conn): 45 | conn.sql('SELECT * FROM ingest_pipeline_audit_log').show() 46 | conn.sql('SELECT * FROM ingest_gauge_metrics').show() 47 | 48 | @task 49 | def process_files(conn, filepath: str): 50 | files =[ f for f in os.listdir(filepath) ] 51 | files_sorted = sorted(files) 52 | processed = [] 53 | 54 | #Loop all through staged files 55 | for index, filename in enumerate(files_sorted): 56 | print(f"Processing --- {filename}" ) 57 | 58 | filepath = Path("src/data/staging") / filename 59 | tmp_df = conn.sql(f"SELECT * FROM read_csv_auto('{filepath}',all_varchar=true)").df() 60 | tmp_df["measured_datetime"] = pd.to_datetime(tmp_df['Measured']) 61 | tmp_df["measured_day"] = pd.to_datetime(tmp_df['Measured']).dt.date 62 | tmp_df["measured_hour"] = pd.to_datetime(tmp_df['Measured']).dt.hour 63 | tmp_df["measured_minute"] = pd.to_datetime(tmp_df['Measured']).dt.minute 64 | tmp_df = tmp_df.drop(["Measured"], axis=1) 65 | 66 | tmp_df = tmp_df.replace(['-'], '0') 67 | sensors_tbl_stg = conn.sql("SELECT * FROM tmp_df") 68 | curr_last_datetime = get_last_datetime(conn) 69 | new_df = conn.sql(f"SELECT * FROM sensors_tbl_stg where measured_datetime > '{curr_last_datetime}'").df() 70 | 71 | # print('----new_df----START-----') 72 | # print(new_df) 73 | # print('----new_df----END-----') 74 | 75 | conn.execute('INSERT INTO ingest_gauge_metrics SELECT * FROM new_df') 76 | new_last_datetime = conn.sql('SELECT MAX(measured_datetime) FROM sensors_tbl_stg').fetchone()[0] 77 | 78 | audit_entry = (filename, new_last_datetime.strftime('%Y-%m-%dT%H:%M:%S'),'datamatiks',datetime.now().strftime('%Y-%m-%dT%H:%M:%S')) 79 | insert_to_audit_table(conn, audit_entry) 80 | processed.append(filepath) 81 | 82 | return processed 83 | 84 | @task 85 | def move_to_processed(files): 86 | import shutil 87 | try: 88 | for fp in files: 89 | shutil.move(fp, "src/data/processed/") 90 | print(f'Moved file {fp} to processed - OK') 91 | except: 92 | raise Exception("Error in moving files") 93 | 94 | ####### FLOW FUNCTIONS ########## 95 | @flow 96 | def load_data_flow(name="Load data to duckdb flow ", log_prints=True): 97 | logger = get_run_logger() 98 | now = datetime.now() 99 | print(now) 100 | logger.info(f"Run date: {now}") 101 | 102 | conn = get_conn() 103 | filenames = process_files(conn, 'src/data/staging') 104 | move_to_processed(filenames) 105 | display(conn) 106 | 107 | conn.close() 108 | 109 | if __name__ == "__main__": 110 | # load_data_deploy = load_data_flow.to_deployment(name="load-data-deploy", interval=0) 111 | # #ingest_15_mins = ingestflow.ingest_gauge_data.to_deployment(name="ingest-15-mins", interval=900) 112 | # serve(load_data_deploy) 113 | load_data_flow() -------------------------------------------------------------------------------- /src/flows/transform_flow.py: -------------------------------------------------------------------------------- 1 | # import db as db 2 | # import httpx 3 | # from datetime import datetime, date 4 | 5 | # conn = db.get_db_conn() 6 | # conn.sql('SELECT * FROM ingest_pipeline_audit_log').show() 7 | # conn.sql('SELECT * FROM ingest_gauge_metrics').show() 8 | 9 | from urllib.request import urlopen 10 | import json 11 | import pandas as pd 12 | import httpx 13 | 14 | 15 | try: 16 | # response = urlopen('http://0.0.0.0:8000/api/v1/metadata') 17 | # json_data = response.read().decode('utf-8', 'replace') 18 | # d = json.loads(json_data) 19 | 20 | # metadata_df = pd.json_normalize(d['Sensor ID']) 21 | # print(metadata_df) 22 | 23 | metadata = pd.read_csv('http://0.0.0.0:8000/api/v1/metadata', 24 | header=0, names=['sensor_id', 'location_id','location_name','sensor_type','unit','latitude','longitude']) 25 | print(metadata.head()) 26 | except Exception as ex: 27 | print(ex) 28 | raise Exception(f"Something happen: {ex}") 29 | ''' 30 | df = pd.read_json('https://bittrex.com/api/v1.1/public/getmarkethistory?market=BTC-ETC') 31 | df = pd.DataFrame(df['result'].values.tolist()) 32 | df['TimeStamp'] = pd.to_datetime(df['TimeStamp']) 33 | df = df.set_index('TimeStamp') 34 | print (df.head()) 35 | 36 | ''' -------------------------------------------------------------------------------- /src/web/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datamatiks/iot-platform-modern-data-stack-poc/aa297ae569ef507fe040f3c67ad81650c91c5e11/src/web/__init__.py -------------------------------------------------------------------------------- /src/web/style.css: -------------------------------------------------------------------------------- 1 | /* Logo */ 2 | /* Adapted from Zachary Blackwood */ 3 | [data-testid="stSidebar"] { 4 | background-image: url(https://streamlit.io/images/brand/streamlit-logo-secondary-colormark-darktext.png); 5 | background-size: 200px; 6 | background-repeat: no-repeat; 7 | background-position: 4px 20px; 8 | } 9 | 10 | 11 | /* Card */ 12 | /* Adapted from https://startbootstrap.com/theme/sb-admin-2 */ 13 | div.css-1r6slb0.e1tzin5v2 { 14 | background-color: #FFFFFF; 15 | border: 1px solid #CCCCCC; 16 | padding: 5% 5% 5% 10%; 17 | border-radius: 5px; 18 | 19 | border-left: 0.5rem solid #9AD8E1 !important; 20 | box-shadow: 0 0.15rem 1.75rem 0 rgba(58, 59, 69, 0.15) !important; 21 | 22 | } 23 | 24 | label.css-mkogse.e16fv1kl2 { 25 | color: #36b9cc !important; 26 | font-weight: 700 !important; 27 | text-transform: uppercase !important; 28 | } 29 | 30 | 31 | /* Move block container higher */ 32 | div.block-container.css-18e3th9.egzxvld2 { 33 | margin-top: -5em; 34 | } 35 | 36 | 37 | /* Hide hamburger menu and footer */ 38 | div.css-r698ls.e8zbici2 { 39 | display: none; 40 | } 41 | 42 | footer.css-ipbk5a.egzxvld4 { 43 | display: none; 44 | } 45 | 46 | footer.css-12gp8ed.eknhn3m4 { 47 | display: none; 48 | } 49 | 50 | div.vg-tooltip-element { 51 | display: none; 52 | } 53 | 54 | -------------------------------------------------------------------------------- /src/web/weatherboard_app.py: -------------------------------------------------------------------------------- 1 | import streamlit as st 2 | import pandas as pd 3 | import plost 4 | import altair as alt 5 | import math 6 | import os 7 | 8 | from dotenv import load_dotenv 9 | from urllib.request import urlopen 10 | import json 11 | import folium 12 | from streamlit_folium import st_folium, folium_static 13 | from streamlit_plotly_events import plotly_events 14 | import plotly.figure_factory as ff 15 | import plotly.express as px 16 | import numpy as np 17 | from datetime import datetime 18 | 19 | load_dotenv() 20 | 21 | #API_URL = 'http://0.0.0.0:8000' 22 | API_URL = 'http://iot-platform-modern-data-stack-poc-api-1:8000/api/v1' 23 | st.set_page_config(layout='wide', initial_sidebar_state='expanded') 24 | 25 | dt_now = datetime.now() 26 | dt_day = dt_now.strftime('%A') 27 | _,colT2 = st.columns([3,7]) 28 | with colT2: 29 | st.title('Brisbane Weatherboard') 30 | st.write(f"### {dt_day}, {dt_now}") 31 | with open('style.css') as f: 32 | st.markdown(f'', unsafe_allow_html=True) 33 | 34 | st.sidebar.header('Weatherboard `v.1.0`') 35 | 36 | st.sidebar.subheader('Map parameter') 37 | time_hist_color = st.sidebar.selectbox('Display by sensor', ('Rainfall', 'Stream')) 38 | 39 | st.sidebar.subheader('Heat map parameter') 40 | time_hist_color = st.sidebar.selectbox('Color by', ('min_value', 'max_value')) 41 | 42 | #st.sidebar.subheader('Donut chart parameter') 43 | #donut_theta = st.sidebar.selectbox('Select data', ('Active', 'Inactive')) 44 | 45 | st.sidebar.subheader('Line chart parameters') 46 | plot_data = st.sidebar.multiselect('Select data', ['avg_value', 'max_value','min_value'], ['avg_value', 'min_value','max_value']) 47 | plot_height = st.sidebar.slider('Specify plot height', 0,2,1) 48 | 49 | st.sidebar.markdown(''' 50 | --- 51 | Created with ❤️ by [Data Professor](https://youtube.com/dataprofessor/).\n\n 52 | 53 | Modified with passion by Datamatiks. 54 | ''') 55 | 56 | # Metrics row 57 | st.markdown('### Weather Metrics') 58 | col1, col2, col3 = st.columns(3) 59 | 60 | #Retrive other weather data from public api 61 | response = urlopen("https://wttr.in/Brisbane?format=j1") 62 | json_data = response.read().decode('utf-8', 'replace') 63 | d = json.loads(json_data) 64 | 65 | df_brissy = pd.json_normalize(d['current_condition']) 66 | temp = df_brissy['temp_C'].values[0] 67 | wind = df_brissy['windspeedKmph'].values[0] 68 | humid = df_brissy['humidity'].values[0] 69 | col1.metric("Temperature", f"{temp} °C", "1.2 °C") 70 | col2.metric("Wind", f"{wind} kph", "-8%") 71 | col3.metric("Humidity", f"{humid}%", "4%") 72 | 73 | #retrive metadata 74 | metadata = pd.read_csv( 75 | f'{API_URL}/metadata', 76 | header=0, 77 | names=['sensor_id', 78 | 'location_id', 79 | 'location_name', 80 | 'sensor_type', 81 | 'unit', 82 | 'latitude', 83 | 'longitude'] 84 | ) 85 | 86 | #retrieve daily metrics 87 | sensors_df = pd.read_csv(f'{API_URL}/sensor_metrics',header=0) 88 | avg_df = pd.read_csv(f'{API_URL}/daily_avg',header=0) 89 | max_df = pd.read_csv(f'{API_URL}/daily_max',header=0) 90 | min_df = pd.read_csv(f'{API_URL}/daily_min',header=0) 91 | 92 | new_avg_df = avg_df.melt( id_vars=["measured_datetime"], 93 | var_name="sensor_id", 94 | value_name="avg_value") 95 | 96 | new_max_df = max_df.melt( id_vars=["measured_datetime"], 97 | var_name="sensor_id", 98 | value_name="max_value") 99 | 100 | new_min_df = min_df.melt( id_vars=["measured_datetime"], 101 | var_name="sensor_id", 102 | value_name="min_value") 103 | 104 | #merge all metrics 105 | merge_keys=['sensor_id','measured_datetime'] 106 | daily_metrics_df = new_avg_df.merge(new_max_df, on=merge_keys).merge(new_min_df, on=merge_keys).set_index('sensor_id') 107 | 108 | #enrich metrics with metadata 109 | joined_df = daily_metrics_df.join(metadata.set_index('sensor_id')).reset_index() 110 | 111 | 112 | date_now_str = str(dt_now.date()) 113 | df_filtered = joined_df.loc[(joined_df['measured_datetime'] == date_now_str)] 114 | df_active = df_filtered[df_filtered['avg_value']>0].groupby('sensor_id').apply(len) 115 | df_inactive = df_filtered[df_filtered['avg_value']==0].groupby('sensor_id').apply(len) 116 | df_unknown = df_filtered[df_filtered['avg_value'].isnull() ].groupby('sensor_id').apply(len) 117 | 118 | gauge_status_df = pd.DataFrame( 119 | {'status':['Active','Inactive','Unknown'], 120 | 'count': [len(df_active.index),len(df_inactive.index),len(df_unknown.index)] 121 | } 122 | ) 123 | 124 | ### Map plotly version 125 | st.markdown('### Rainfall and Stream AHD Height Sensors Map') 126 | px.set_mapbox_access_token(os.environ['MAPBOX_TOKEN'] ) 127 | df = metadata.__deepcopy__() 128 | 129 | df = joined_df.fillna(0) 130 | fig = px.scatter_mapbox(df, lat="latitude", lon="longitude", hover_name="location_name", hover_data=["sensor_type", "min_value"], color="avg_value", size="max_value", 131 | color_continuous_scale=px.colors.cyclical.IceFire, size_max=50, zoom=10, width=1500, height=800) 132 | st.plotly_chart(fig) 133 | 134 | #Heatmap 135 | c1, c2 = st.columns((7,3)) 136 | with c1: 137 | st.markdown('### Heatmap') 138 | plost.time_hist( 139 | data=joined_df, 140 | date='measured_datetime', 141 | x_unit='hours', 142 | y_unit='day', 143 | color=time_hist_color, 144 | aggregate='median', 145 | legend=None, 146 | height=345, 147 | use_container_width=True) 148 | with c2: 149 | st.markdown('### Sensors status') 150 | plost.donut_chart( 151 | data=gauge_status_df, 152 | theta='count', 153 | color='status', 154 | legend='bottom', 155 | use_container_width=True) 156 | 157 | # Row C 158 | st.markdown('### Line chart') 159 | grouped = joined_df.groupby('sensor_type') 160 | for key, group in grouped: 161 | st.markdown(f"*** {key}") 162 | #st.write(group) 163 | df = group.set_index('measured_datetime') 164 | df = group.astype({'avg_value': 'float','max_value': 'float','min_value': 'float'}) 165 | plost.line_chart(df, 166 | x = 'measured_datetime' , 167 | y = ('min_value','max_value','avg_value'), 168 | color='sensor_id', 169 | height=plot_height, 170 | #pan_zoom='minimap' 171 | ) 172 | 173 | st.write(joined_df.reset_index().sort_values(by='measured_datetime', ascending=False)) -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | /* Logo */ 2 | /* Adapted from Zachary Blackwood */ 3 | [data-testid="stSidebar"] { 4 | background-image: url(https://streamlit.io/images/brand/streamlit-logo-secondary-colormark-darktext.png); 5 | background-size: 200px; 6 | background-repeat: no-repeat; 7 | background-position: 4px 20px; 8 | } 9 | 10 | 11 | /* Card */ 12 | /* Adapted from https://startbootstrap.com/theme/sb-admin-2 */ 13 | div.css-1r6slb0.e1tzin5v2 { 14 | background-color: #FFFFFF; 15 | border: 1px solid #CCCCCC; 16 | padding: 5% 5% 5% 10%; 17 | border-radius: 5px; 18 | 19 | border-left: 0.5rem solid #9AD8E1 !important; 20 | box-shadow: 0 0.15rem 1.75rem 0 rgba(58, 59, 69, 0.15) !important; 21 | 22 | } 23 | 24 | label.css-mkogse.e16fv1kl2 { 25 | color: #36b9cc !important; 26 | font-weight: 700 !important; 27 | text-transform: uppercase !important; 28 | } 29 | 30 | 31 | /* Move block container higher */ 32 | div.block-container.css-18e3th9.egzxvld2 { 33 | margin-top: -5em; 34 | } 35 | 36 | 37 | /* Hide hamburger menu and footer */ 38 | div.css-r698ls.e8zbici2 { 39 | display: none; 40 | } 41 | 42 | footer.css-ipbk5a.egzxvld4 { 43 | display: none; 44 | } 45 | 46 | footer.css-12gp8ed.eknhn3m4 { 47 | display: none; 48 | } 49 | 50 | div.vg-tooltip-element { 51 | display: none; 52 | } 53 | 54 | -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datamatiks/iot-platform-modern-data-stack-poc/aa297ae569ef507fe040f3c67ad81650c91c5e11/tests/__init__.py --------------------------------------------------------------------------------