commit 367533c02bc7a96ff6d90f1a14bedb9548cd5a83 Author: Alberto-Audrix Date: Wed Aug 26 13:46:05 2026 +0700 first commit diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..10446ec --- /dev/null +++ b/.env.example @@ -0,0 +1,3 @@ +# Empty uses the Vite proxy (/api → Django :8000). +# Set a full origin only if you skip the proxy. +VITE_API_BASE=/api/v1 diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..169baf5 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,42 @@ +{ + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:react/recommended", + "plugin:react-hooks/recommended", + "prettier" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module", + "ecmaFeatures": { + "jsx": true + } + }, + "plugins": ["@typescript-eslint", "react", "react-hooks", "prettier"], + "rules": { + "prettier/prettier": "error", + "@typescript-eslint/no-explicit-any": "warn", + "@typescript-eslint/no-unused-vars": [ + "error", + { + "argsIgnorePattern": "^_", + "varsIgnorePattern": "^_" + } + ], + "react/react-in-jsx-scope": "off", + "react/prop-types": "off", + "react-hooks/exhaustive-deps": "warn", + "react-hooks/static-components": "off", + "react-hooks/purity": "off", + "react-hooks/set-state-in-effect": "off", + "react/no-unescaped-entities": "off" + }, + "settings": { + "react": { + "version": "detect" + } + }, + "ignorePatterns": ["dist", "node_modules", "*.config.js", "*.config.ts"] +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ae33930 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +node_modules +dist +dist-ssr +*.local +.env +coverage +.vite +backup +__pycache__ \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..2312dc5 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +npx lint-staged diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..bbc1ea4 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,8 @@ +node_modules +dist +dist-ssr +coverage +.vite +backend/.venv +backend/.pytest_cache +backend/**/node_modules diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..7293ce1 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,9 @@ +{ + "semi": true, + "singleQuote": true, + "tabWidth": 2, + "printWidth": 100, + "trailingComma": "es5", + "arrowParens": "always", + "endOfLine": "lf" +} diff --git a/App.tsx b/App.tsx new file mode 100644 index 0000000..2a9bda0 --- /dev/null +++ b/App.tsx @@ -0,0 +1,31 @@ +import React from 'react'; +import AppContent from './AppContent.tsx'; +import { AuthProvider, useAuth } from './context/AuthContext.tsx'; +import { FarmProvider } from './context/FarmContext.tsx'; +import AuthPage from './components/auth/AuthPage.tsx'; +import { Spinner } from './components/ui/Feedback.tsx'; + +const Gate: React.FC = () => { + const { user, loading } = useAuth(); + if (loading) { + return ( +
+ +
+ ); + } + if (!user) return ; + return ( + + + + ); +}; + +const App: React.FC = () => ( + + + +); + +export default App; diff --git a/AppContent.tsx b/AppContent.tsx new file mode 100644 index 0000000..7a2ef1c --- /dev/null +++ b/AppContent.tsx @@ -0,0 +1,105 @@ +import React, { useState } from 'react'; +import type { View } from './types/common.ts'; +import { useFarm } from './context/FarmContext.tsx'; +import Sidebar from './components/Sidebar.tsx'; +import Header from './components/Header.tsx'; +import CycleTimeline from './components/CycleTimeline.tsx'; +import Dashboard from './components/Dashboard.tsx'; +import DataManagementPage from './components/counting/DataManagementPage.tsx'; +import WeightMonitoringPage from './components/WeightMonitoringPage.tsx'; +import WeightStandardPage from './components/WeightStandardPage.tsx'; +import FeedSackCountingPage from './components/FeedSackCountingPage.tsx'; +import CobbStandardPage from './components/CobbStandardPage.tsx'; +import IotPanelPage from './components/IotPanelPage.tsx'; +import FcrDashboardPage from './components/FcrDashboardPage.tsx'; +import EefDashboardPage from './components/EefDashboardPage.tsx'; +import SettingsPage from './components/SettingsPage.tsx'; +import { Banner } from './components/ui/Feedback.tsx'; + +const AppContent: React.FC = () => { + const { error, loading } = useFarm(); + const [view, setView] = useState('dashboard'); + const [isSidebarCollapsed, setIsSidebarCollapsed] = useState(false); + const [isTimelineVisible, setIsTimelineVisible] = useState(false); + const goSettings = () => setView('kandangSettings'); + + const renderView = () => { + switch (view) { + case 'dashboard': + return ; + case 'dataManagement': + return ; + case 'weightMonitoring': + return ; + case 'weightStandard': + return ; + case 'feedSackCounting': + return ; + case 'cobbStandard': + return ; + case 'iotPanel': + return ; + case 'fcrDashboard': + return ; + case 'eefDashboard': + return ; + case 'kandangSettings': + return ; + default: + return ; + } + }; + + return ( +
+ setIsSidebarCollapsed((v) => !v)} + /> +
+
setIsSidebarCollapsed((v) => !v)} + isTimelineVisible={isTimelineVisible} + onToggleTimeline={() => setIsTimelineVisible((v) => !v)} + /> +
+ {isTimelineVisible && ( +
+ +
+ )} +
+ {error && ( +
+ {error} +
+ )} + {renderView()} +
+
+
+ {loading && ( +
+
+
+
+
+
+

Memuat Data...

+

Mohon tunggu sebentar

+
+
+ )} +
+ ); +}; + +export default AppContent; diff --git a/README.md b/README.md new file mode 100644 index 0000000..c253c76 --- /dev/null +++ b/README.md @@ -0,0 +1,94 @@ +# dashboard-new-v2 + +Poultry dashboard SPA. Looks like the legacy `dashboard/` app and talks to the Django API in `backend/` (`/api/v1/`). + +## Project layout + +``` +dashboard-new-v2/ + backend/ ← Django API (manage.py, apps, migrations) + components/ ← pages and UI + services/ ← API client + ... +``` + +## Prerequisites + +- Node 20+ +- Python 3.11+ + +## First-time setup + +**Backend** (terminal 1): + +Install the Python dependencies once — only needed if Django/DRF aren't already +in your Python environment (they're listed in `backend/requirements.txt`): + +```bash +cd dashboard-new-v2/backend +python -m venv .venv +# Windows: .venv\Scripts\activate +# macOS/Linux: source .venv/bin/activate +pip install -r requirements.txt +``` + +Then set up the database and seed data: + +```bash +cd dashboard-new-v2/backend +python manage.py migrate +python manage.py seed_demo +# or via the npm wrapper: npm run seed +``` + +Seed logins: + +- `admin` / `admin123` — superadmin (can create/manage sites and kandang) +- `staff` / `staff123` — active staff (owns the seeded site; can read sites/kandang and create cycles, but cannot create/edit/delete sites or kandang) + +`seed_demo` creates both logins plus an API key, then seeds the default Sukawarna demo data: **Kandang 4** (45,000 DOC) and **Kandang 5** (50,000 DOC), both 49-day closed cycles (22 May – 9 Jul 2026) with full daily data (chicken counting, chicken weight, feed sacks, manual input, KPI) and **10-minute IoT panel readings** (144 readings per day per flock). Feed-sack `out` (keluar) data only occurs in the final week of the cycle (~20 sacks total), separate from usage (`feed_use`). + +**Frontend** (terminal 2): + +```bash +cd dashboard-new-v2 +cp .env.example .env +npm install +``` + +## Run (two terminals, like old dashboard) + +**Terminal 1 — API:** + +```bash +cd dashboard-new-v2/backend +npm run dev +# `node dev.mjs` starts Django runserver :8000, preferring the .venv python if +# present, otherwise the global python (so no pip install is needed when the +# deps are already installed). Or directly: python manage.py runserver 0.0.0.0:8000 +``` + +**Terminal 2 — UI:** + +```bash +cd dashboard-new-v2 +npm run dev +``` + +Open [http://localhost:3001](http://localhost:3001). Vite proxies `/api` to Django on `:8000`. + +## Screens + +Login, Dashboard (KPI + AI insight + Total Pakan section + in-memory Harian/Akhir Siklus report), Hitung Ayam, Berat Ayam, Standar Ross, Hitung Karung (Sync hari ini + Saldo Awal + daily in/use/out tables), Standar Performa, Panel IoT (per-day 10-minute readings with charts), FCR, EEF, Pengaturan. + +Reports are generated in the browser from live `/api/v1/` data and exportable as **PDF** (multi-page A4, block-aware page breaks, compressed JPEG) and **Excel** (Chicken Counting, Weight, Feed In, Feed Use, Feed Out, FCR, EEF sheets with IoT-vs-manual accuracy). Closing the overlay drops the result; nothing is saved on Django. + +The **Saldo Awal** feature on Hitung Karung posts `feed_initial_balance` to the cycle and compares the manual feed-in against the IoT-detected "in" for that date with an accuracy figure. + +Karung Sync calls karung-web-admin. If that host is down the API often returns 502; stored rows still render. + +## Tests + +```bash +npm run test:run +``` diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 0000000..093cb0a --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,11 @@ +__pycache__ +*.py[cod] +.env +.venv +venv +db.sqlite3 +data/ +media/ +staticfiles/ +*.egg-info +.git diff --git a/backend/.env.example b/backend/.env.example new file mode 100644 index 0000000..3ba774c --- /dev/null +++ b/backend/.env.example @@ -0,0 +1,38 @@ +DEBUG=True +SECRET_KEY=change-me-in-production +ALLOWED_HOSTS=localhost,127.0.0.1,api +CSRF_TRUSTED_ORIGINS=http://localhost:8000,http://127.0.0.1:8000,http://localhost:3001,http://127.0.0.1:3001 +CORS_ALLOWED_ORIGINS=http://localhost:3000,http://127.0.0.1:3000,http://localhost:3001,http://127.0.0.1:3001 +CORS_ALLOW_CREDENTIALS=True + +# SQLite (local) +DB_ENGINE=django.db.backends.sqlite3 +DB_NAME=db.sqlite3 + +# Docker/compose typically overrides to: +# DB_NAME=/app/data/db.sqlite3 + +# PostgreSQL (production) — use with: docker compose --profile prod up +# DB_ENGINE=django.db.backends.postgresql +# DB_NAME=newdashboard +# DB_USER=newdashboard +# DB_PASSWORD=change-me +# DB_HOST=db +# DB_PORT=5432 + +WAGTAIL_SITE_NAME=New Dashboard +WAGTAILADMIN_BASE_URL=http://localhost:8000 + +API_PAGE_SIZE=50 +SESSION_COOKIE_SECURE=False +CSRF_COOKIE_SECURE=False + +# Optional: create hashed ApiKey on seed/bootstrap (raw shown once in seed output) +BOOTSTRAP_API_KEY= + +# karung-web-admin (external) +KARUNG_WEB_ADMIN_BASE_URL=http://127.0.0.1:5000 +KARUNG_WEB_ADMIN_TIMEOUT_SECONDS=30 +KARUNG_WEB_ADMIN_SYNC_ENABLED=false + +CRON_ADVANCE_CYCLE_DAY=true diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 0000000..2a31268 --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,10 @@ +.venv/ +__pycache__/ +*.py[cod] +.env +db.sqlite3 +data/ +media/ +staticfiles/ +*.egg-info/ +.Python diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 0000000..f41a4e5 --- /dev/null +++ b/backend/README.md @@ -0,0 +1,61 @@ +# New Dashboard Backend + +Greenfield Django 5 + Wagtail 6 + DRF API aligned to `ERD_dashboard.png`. + +## Services + +| Compose service | Role | +| --------------- | ------------------------------------------------ | +| `api` | Gunicorn on `:8000` | +| `cron` | Same image, runs management commands on schedule | +| `db` | Postgres 16 (`--profile prod`) | + +## Quick start (local, no Docker) + +From `dashboard-new-v2/backend`: + +```bash +python -m venv .venv +# Windows: .venv\Scripts\activate +# macOS/Linux: source .venv/bin/activate +pip install -r requirements.txt +cp .env.example .env # if needed +python manage.py migrate +python manage.py seed_demo +npm run dev +# or: python manage.py runserver 0.0.0.0:8000 +``` + +Seed creates user `admin` / `admin123`, then seeds the default Sukawarna demo data — **Kandang 4** and **Kandang 5** closed cycles (49 days each, 22 May – 9 Jul 2026) with full daily records and IoT panels. A manager login `skw_manager` / `skw_manager123` is created too. It also prints a one-time API key. + +## Docker Compose + +```bash +cp dashboard-new-v2/backend/.env.example dashboard-new-v2/backend/.env +# edit KARUNG_WEB_ADMIN_BASE_URL as needed +docker compose up --build +``` + +Production Postgres: + +```bash +# set DB_ENGINE=django.db.backends.postgresql and DB_* in dashboard-new-v2/backend/.env +docker compose --profile prod up --build +``` + +## Auth + +- **Session:** `POST /api/v1/auth/login/` then send session cookie + `X-CSRFToken` on writes +- **API key:** header `X-API-Key: ` (hashed at rest) +- Public: `GET /api/v1/health/` + +## External integrations + +- karung-web-admin → `POST /api/v1/karungs/request/` (`KARUNG_WEB_ADMIN_BASE_URL`) + +## Docs + +- Curl samples: [docs/API_CURL.md](../../docs/API_CURL.md) +- Postman: [docs/postman/](../../docs/postman/) +- OpenAPI UI: `http://localhost:8000/api/docs/` +- Wagtail admin: `http://localhost:8000/admin/` diff --git a/backend/apps/__init__.py b/backend/apps/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/apps/accounts/__init__.py b/backend/apps/accounts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/apps/accounts/admin.py b/backend/apps/accounts/admin.py new file mode 100644 index 0000000..fe38d42 --- /dev/null +++ b/backend/apps/accounts/admin.py @@ -0,0 +1,33 @@ +from django.contrib import admin +from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin + +from apps.accounts.models import ApiKey, User + + +@admin.register(User) +class UserAdmin(DjangoUserAdmin): + ordering = ("user_name",) + list_display = ("user_name", "status", "created_at") + search_fields = ("user_name",) + fieldsets = ( + (None, {"fields": ("user_name", "password")}), + ("Permissions", {"fields": ("status", "groups", "user_permissions")}), + ) + add_fieldsets = ( + ( + None, + { + "classes": ("wide",), + "fields": ("user_name", "password1", "password2", "status"), + }, + ), + ) + filter_horizontal = ("groups", "user_permissions") + + +@admin.register(ApiKey) +class ApiKeyAdmin(admin.ModelAdmin): + list_display = ("name", "prefix", "user", "is_active", "last_used_at", "created_at") + list_filter = ("is_active",) + search_fields = ("name", "prefix", "user__user_name") + readonly_fields = ("prefix", "key_hash", "last_used_at", "created_at", "updated_at") diff --git a/backend/apps/accounts/apps.py b/backend/apps/accounts/apps.py new file mode 100644 index 0000000..3ccdb8c --- /dev/null +++ b/backend/apps/accounts/apps.py @@ -0,0 +1,8 @@ +from django.apps import AppConfig + + +class AccountsConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "apps.accounts" + label = "accounts" + verbose_name = "Accounts" diff --git a/backend/apps/accounts/authentication.py b/backend/apps/accounts/authentication.py new file mode 100644 index 0000000..c64b9f4 --- /dev/null +++ b/backend/apps/accounts/authentication.py @@ -0,0 +1,32 @@ +from __future__ import annotations + +from django.utils.translation import gettext_lazy as _ +from rest_framework import authentication, exceptions + +from apps.accounts.models import ApiKey + + +class ApiKeyAuthentication(authentication.BaseAuthentication): + """Authenticate via X-API-Key header (hashed lookup).""" + + keyword = "X-API-Key" + + def authenticate(self, request): + raw_key = request.headers.get(self.keyword) or request.META.get("HTTP_X_API_KEY") + if not raw_key: + return None + if len(raw_key) < 8: + raise exceptions.AuthenticationFailed(_("Invalid API key")) + + prefix = raw_key[:8] + candidates = ApiKey.objects.select_related("user").filter( + prefix=prefix, is_active=True, user__is_active=True + ) + for api_key in candidates: + if api_key.verify(raw_key): + api_key.touch() + return (api_key.user, api_key) + raise exceptions.AuthenticationFailed(_("Invalid API key")) + + def authenticate_header(self, request): + return self.keyword diff --git a/backend/apps/accounts/migrations/0001_initial.py b/backend/apps/accounts/migrations/0001_initial.py new file mode 100644 index 0000000..02c694a --- /dev/null +++ b/backend/apps/accounts/migrations/0001_initial.py @@ -0,0 +1,55 @@ +# Generated by Django 5.2.17 on 2026-08-10 08:31 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('auth', '0012_alter_user_first_name_max_length'), + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('password', models.CharField(max_length=128, verbose_name='password')), + ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), + ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('user_name', models.CharField(max_length=30, unique=True)), + ('is_staff', models.BooleanField(default=False)), + ('is_active', models.BooleanField(default=True)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')), + ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')), + ], + options={ + 'db_table': 'user_access', + 'ordering': ['user_name'], + }, + ), + migrations.CreateModel( + name='ApiKey', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ('prefix', models.CharField(db_index=True, max_length=12)), + ('key_hash', models.CharField(max_length=64)), + ('is_active', models.BooleanField(default=True)), + ('last_used_at', models.DateTimeField(blank=True, null=True)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='api_keys', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'db_table': 'api_keys', + 'ordering': ['-created_at'], + }, + ), + ] diff --git a/backend/apps/accounts/migrations/0002_erd_named_primary_keys.py b/backend/apps/accounts/migrations/0002_erd_named_primary_keys.py new file mode 100644 index 0000000..9ff24cb --- /dev/null +++ b/backend/apps/accounts/migrations/0002_erd_named_primary_keys.py @@ -0,0 +1,16 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("accounts", "0001_initial"), + ] + + operations = [ + migrations.RenameField( + model_name="user", + old_name="id", + new_name="user_id", + ), + ] diff --git a/backend/apps/accounts/migrations/0003_user_status.py b/backend/apps/accounts/migrations/0003_user_status.py new file mode 100644 index 0000000..6f8cb78 --- /dev/null +++ b/backend/apps/accounts/migrations/0003_user_status.py @@ -0,0 +1,39 @@ +from django.db import migrations, models + + +def backfill_user_status(apps, schema_editor): + User = apps.get_model("accounts", "User") + for user in User.objects.all(): + if user.is_superuser: + status = "superadmin" + flags = {"is_active": True, "is_staff": True, "is_superuser": True} + elif not user.is_active: + status = "inactive" + flags = {"is_active": False, "is_staff": False, "is_superuser": False} + else: + status = "active" + flags = {"is_active": True, "is_staff": False, "is_superuser": False} + User.objects.filter(pk=user.pk).update(status=status, **flags) + + +class Migration(migrations.Migration): + dependencies = [ + ("accounts", "0002_erd_named_primary_keys"), + ] + + operations = [ + migrations.AddField( + model_name="user", + name="status", + field=models.CharField( + choices=[ + ("active", "Active"), + ("inactive", "Inactive"), + ("superadmin", "Super Admin"), + ], + default="active", + max_length=30, + ), + ), + migrations.RunPython(backfill_user_status, migrations.RunPython.noop), + ] diff --git a/backend/apps/accounts/migrations/0004_sync_status_flags.py b/backend/apps/accounts/migrations/0004_sync_status_flags.py new file mode 100644 index 0000000..b8130bb --- /dev/null +++ b/backend/apps/accounts/migrations/0004_sync_status_flags.py @@ -0,0 +1,29 @@ +from django.db import migrations + + +def sync_status_flags(apps, schema_editor): + User = apps.get_model("accounts", "User") + for user in User.objects.all(): + if user.status == "inactive": + user.is_active = False + user.is_staff = False + user.is_superuser = False + elif user.status == "superadmin": + user.is_active = True + user.is_staff = False + user.is_superuser = True + else: + user.is_active = True + user.is_superuser = False + user.save(update_fields=["is_active", "is_staff", "is_superuser", "updated_at"]) + + +class Migration(migrations.Migration): + + dependencies = [ + ("accounts", "0003_user_status"), + ] + + operations = [ + migrations.RunPython(sync_status_flags, migrations.RunPython.noop), + ] \ No newline at end of file diff --git a/backend/apps/accounts/migrations/__init__.py b/backend/apps/accounts/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/apps/accounts/models.py b/backend/apps/accounts/models.py new file mode 100644 index 0000000..91f6e35 --- /dev/null +++ b/backend/apps/accounts/models.py @@ -0,0 +1,117 @@ +from __future__ import annotations + +import hashlib +import secrets + +from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin +from django.db import models +from django.utils import timezone + + +class UserManager(BaseUserManager): + def create_user(self, user_name: str, password: str | None = None, **extra_fields): + if not user_name: + raise ValueError("user_name is required") + extra_fields.setdefault("status", User.STATUS_ACTIVE) + user = self.model(user_name=user_name, **extra_fields) + user.set_password(password) + user.save(using=self._db) + return user + + def create_superuser(self, user_name: str, password: str | None = None, **extra_fields): + extra_fields["status"] = User.STATUS_SUPERADMIN + extra_fields.setdefault("is_superuser", True) + extra_fields.setdefault("is_active", True) + return self.create_user(user_name, password, **extra_fields) + + +class User(AbstractBaseUser, PermissionsMixin): + """ERD User Access — username field is user_name.""" + + STATUS_ACTIVE = "active" + STATUS_INACTIVE = "inactive" + STATUS_SUPERADMIN = "superadmin" + STATUS_CHOICES = [ + (STATUS_ACTIVE, "Active"), + (STATUS_INACTIVE, "Inactive"), + (STATUS_SUPERADMIN, "Super Admin"), + ] + + user_id = models.BigAutoField(primary_key=True) + user_name = models.CharField(max_length=30, unique=True) + status = models.CharField(max_length=30, choices=STATUS_CHOICES, default=STATUS_ACTIVE) + is_staff = models.BooleanField(default=False) + is_active = models.BooleanField(default=True) + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + objects = UserManager() + + USERNAME_FIELD = "user_name" + REQUIRED_FIELDS: list[str] = [] + + class Meta: + db_table = "user_access" + ordering = ["user_name"] + + def __str__(self) -> str: + return self.user_name + + def save(self, *args, **kwargs): + if self.status == self.STATUS_INACTIVE: + self.is_active = False + self.is_staff = False + self.is_superuser = False + elif self.status == self.STATUS_SUPERADMIN: + self.is_active = True + self.is_staff = False + self.is_superuser = True + else: + self.is_active = True + self.is_superuser = False + # is_staff is left untouched for active users, so an operator can be + # explicitly flagged as staff without being a superadmin. + super().save(*args, **kwargs) + + +class ApiKey(models.Model): + """Hashed API keys for X-API-Key authentication.""" + + user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="api_keys") + name = models.CharField(max_length=100) + prefix = models.CharField(max_length=12, db_index=True) + key_hash = models.CharField(max_length=64) + is_active = models.BooleanField(default=True) + last_used_at = models.DateTimeField(null=True, blank=True) + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + class Meta: + db_table = "api_keys" + ordering = ["-created_at"] + + def __str__(self) -> str: + return f"{self.name} ({self.prefix}…)" + + @staticmethod + def hash_key(raw_key: str) -> str: + return hashlib.sha256(raw_key.encode("utf-8")).hexdigest() + + @classmethod + def generate(cls, user: User, name: str) -> tuple[ApiKey, str]: + raw = secrets.token_urlsafe(32) + prefix = raw[:8] + instance = cls.objects.create( + user=user, + name=name, + prefix=prefix, + key_hash=cls.hash_key(raw), + ) + return instance, raw + + def verify(self, raw_key: str) -> bool: + return secrets.compare_digest(self.key_hash, self.hash_key(raw_key)) + + def touch(self) -> None: + self.last_used_at = timezone.now() + self.save(update_fields=["last_used_at", "updated_at"]) diff --git a/backend/apps/accounts/serializers.py b/backend/apps/accounts/serializers.py new file mode 100644 index 0000000..8d437c8 --- /dev/null +++ b/backend/apps/accounts/serializers.py @@ -0,0 +1,45 @@ +from django.contrib.auth import get_user_model +from rest_framework import serializers + +from apps.accounts.models import ApiKey + +User = get_user_model() + + +class PkAsIdMixin(serializers.Serializer): + """Keep JSON `id` stable after ERD-named primary keys.""" + + id = serializers.IntegerField(source="pk", read_only=True) + + +class UserSerializer(PkAsIdMixin, serializers.ModelSerializer): + class Meta: + model = User + fields = ["id", "user_name", "status", "created_at", "updated_at"] + read_only_fields = ["id", "created_at", "updated_at"] + + +class LoginSerializer(serializers.Serializer): + user_name = serializers.CharField(max_length=30) + password = serializers.CharField(write_only=True) + + +class ApiKeySerializer(serializers.ModelSerializer): + class Meta: + model = ApiKey + fields = [ + "id", + "name", + "prefix", + "is_active", + "last_used_at", + "created_at", + "updated_at", + "user", + ] + read_only_fields = fields + + +class ApiKeyCreateSerializer(serializers.Serializer): + name = serializers.CharField(max_length=100) + user_id = serializers.IntegerField(required=False) diff --git a/backend/apps/accounts/urls.py b/backend/apps/accounts/urls.py new file mode 100644 index 0000000..ff844ba --- /dev/null +++ b/backend/apps/accounts/urls.py @@ -0,0 +1,23 @@ +from django.urls import path +from rest_framework.routers import DefaultRouter + +from apps.accounts.views import ( + ApiKeyViewSet, + CsrfView, + LoginView, + LogoutView, + MeView, + UserViewSet, +) + +router = DefaultRouter() +router.register("users", UserViewSet, basename="user") +router.register("api-keys", ApiKeyViewSet, basename="api-key") + +urlpatterns = [ + path("auth/csrf/", CsrfView.as_view(), name="auth-csrf"), + path("auth/login/", LoginView.as_view(), name="auth-login"), + path("auth/logout/", LogoutView.as_view(), name="auth-logout"), + path("auth/me/", MeView.as_view(), name="auth-me"), + *router.urls, +] diff --git a/backend/apps/accounts/views.py b/backend/apps/accounts/views.py new file mode 100644 index 0000000..52f9048 --- /dev/null +++ b/backend/apps/accounts/views.py @@ -0,0 +1,117 @@ +from django.contrib.auth import authenticate, login, logout +from django.middleware.csrf import get_token +from django.views.decorators.csrf import ensure_csrf_cookie +from django.utils.decorators import method_decorator +from rest_framework import permissions, status, viewsets +from rest_framework.response import Response +from rest_framework.views import APIView + +from apps.accounts.models import ApiKey, User +from apps.accounts.serializers import ( + ApiKeyCreateSerializer, + ApiKeySerializer, + LoginSerializer, + UserSerializer, +) + + +class IsOwnerOrStaff(permissions.BasePermission): + def has_object_permission(self, request, view, obj): + if request.user.is_staff or request.user.is_superuser: + return True + return getattr(obj, "user_id", None) == request.user.pk or obj == request.user + + +class IsAdminUser(permissions.IsAdminUser): + """Admin access for staff OR superadmin (superadmins may have is_staff=False).""" + + def has_permission(self, request, view): + return bool(request.user and (request.user.is_staff or request.user.is_superuser)) + + +class UserViewSet(viewsets.ModelViewSet): + queryset = User.objects.all().order_by("user_name") + serializer_class = UserSerializer + permission_classes = [IsAdminUser] + + +class ApiKeyViewSet(viewsets.ModelViewSet): + http_method_names = ["get", "post", "delete", "head", "options"] + + def get_queryset(self): + qs = ApiKey.objects.select_related("user").order_by("-created_at") + if self.request.user.is_staff or self.request.user.is_superuser: + return qs + return qs.filter(user=self.request.user) + + def get_serializer_class(self): + if self.action == "create": + return ApiKeyCreateSerializer + return ApiKeySerializer + + def get_permissions(self): + return [permissions.IsAuthenticated()] + + def create(self, request, *args, **kwargs): + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + name = serializer.validated_data["name"] + user = request.user + if (request.user.is_staff or request.user.is_superuser) and serializer.validated_data.get( + "user_id" + ): + user = User.objects.get(pk=serializer.validated_data["user_id"]) + api_key, raw = ApiKey.generate(user=user, name=name) + data = ApiKeySerializer(api_key).data + data["raw_key"] = raw + return Response(data, status=status.HTTP_201_CREATED) + + def perform_destroy(self, instance): + if ( + not self.request.user.is_staff + and not self.request.user.is_superuser + and instance.user_id != self.request.user.pk + ): + raise permissions.PermissionDenied() + instance.delete() + + +@method_decorator(ensure_csrf_cookie, name="dispatch") +class CsrfView(APIView): + permission_classes = [permissions.AllowAny] + authentication_classes = [] + + def get(self, request): + return Response({"csrfToken": get_token(request)}) + + +class LoginView(APIView): + permission_classes = [permissions.AllowAny] + authentication_classes = [] + + def post(self, request): + serializer = LoginSerializer(data=request.data) + serializer.is_valid(raise_exception=True) + user = authenticate( + request, + username=serializer.validated_data["user_name"], + password=serializer.validated_data["password"], + ) + if user is None: + return Response( + {"detail": "Invalid credentials"}, + status=status.HTTP_401_UNAUTHORIZED, + ) + login(request, user) + return Response(UserSerializer(user).data) + + +class LogoutView(APIView): + def post(self, request): + logout(request) + return Response(status=status.HTTP_204_NO_CONTENT) + + +class MeView(APIView): + def get(self, request): + return Response(UserSerializer(request.user).data) diff --git a/backend/apps/farms/__init__.py b/backend/apps/farms/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/apps/farms/admin.py b/backend/apps/farms/admin.py new file mode 100644 index 0000000..ba4f579 --- /dev/null +++ b/backend/apps/farms/admin.py @@ -0,0 +1,8 @@ +from django.contrib import admin + +from apps.farms.models import Cycle, Flock, Kandang, Site + +admin.site.register(Site) +admin.site.register(Kandang) +admin.site.register(Flock) +admin.site.register(Cycle) diff --git a/backend/apps/farms/apps.py b/backend/apps/farms/apps.py new file mode 100644 index 0000000..c3c89c7 --- /dev/null +++ b/backend/apps/farms/apps.py @@ -0,0 +1,8 @@ +from django.apps import AppConfig + + +class FarmsConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "apps.farms" + label = "farms" + verbose_name = "Farms" diff --git a/backend/apps/farms/migrations/0001_initial.py b/backend/apps/farms/migrations/0001_initial.py new file mode 100644 index 0000000..ff17df3 --- /dev/null +++ b/backend/apps/farms/migrations/0001_initial.py @@ -0,0 +1,91 @@ +# Generated by Django 5.2.17 on 2026-08-18 08:01 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Cycle', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('total_days', models.IntegerField()), + ('start_date', models.DateField()), + ('end_date', models.DateField()), + ('doc_in_weight', models.IntegerField()), + ('doc_in_count', models.IntegerField()), + ('status', models.CharField(choices=[('active', 'Active'), ('closed', 'Closed')], default='active', max_length=30)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ], + options={ + 'db_table': 'cycles', + 'ordering': ['-start_date'], + }, + ), + migrations.CreateModel( + name='Flock', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('flock_name', models.CharField(max_length=30)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('cycle', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT, related_name='flock_set', to='farms.cycle')), + ], + options={ + 'db_table': 'flock', + 'ordering': ['flock_name'], + }, + ), + migrations.AddField( + model_name='cycle', + name='flock', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='cycles', to='farms.flock'), + ), + migrations.CreateModel( + name='Site', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('site_name', models.CharField(max_length=30)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sites', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'db_table': 'sites', + 'ordering': ['site_name'], + }, + ), + migrations.CreateModel( + name='Kandang', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('kandang_name', models.CharField(max_length=30)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('site', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='kandangs', to='farms.site')), + ], + options={ + 'db_table': 'kandang', + 'ordering': ['kandang_name'], + }, + ), + migrations.AddField( + model_name='cycle', + name='kandang', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cycles', to='farms.kandang'), + ), + migrations.AddConstraint( + model_name='cycle', + constraint=models.CheckConstraint(condition=models.Q(('end_date__gte', models.F('start_date'))), name='chk_cycles_date_range'), + ), + ] diff --git a/backend/apps/farms/migrations/0002_cycle_requires_flock.py b/backend/apps/farms/migrations/0002_cycle_requires_flock.py new file mode 100644 index 0000000..aaa1a03 --- /dev/null +++ b/backend/apps/farms/migrations/0002_cycle_requires_flock.py @@ -0,0 +1,81 @@ +# Generated by Django 5.2.17 on 2026-08-19 + +import django.db.models.deletion +from django.db import migrations, models + + +def _column_names(connection, table): + with connection.cursor() as cursor: + if connection.vendor == "sqlite": + cursor.execute(f"PRAGMA table_info({table})") + return {row[1] for row in cursor.fetchall()} + cursor.execute( + """ + SELECT column_name + FROM information_schema.columns + WHERE table_name = %s + """, + [table], + ) + return {row[0] for row in cursor.fetchall()} + + +def ensure_cycle_kandang_id(apps, schema_editor): + connection = schema_editor.connection + if "kandang_id" in _column_names(connection, "cycles"): + return + with connection.cursor() as cursor: + cursor.execute( + "ALTER TABLE cycles ADD COLUMN kandang_id bigint NULL REFERENCES kandang(id)" + ) + + +def backfill_cycle_flocks(apps, schema_editor): + Cycle = apps.get_model("farms", "Cycle") + Flock = apps.get_model("farms", "Flock") + for cycle_id in Cycle.objects.filter(flock_id__isnull=True).values_list("pk", flat=True): + flock = Flock.objects.create(flock_name=f"Cycle {cycle_id}") + Cycle.objects.filter(pk=cycle_id).update(flock_id=flock.pk) + Flock.objects.filter(pk=flock.pk).update(cycle_id=cycle_id) + + +class Migration(migrations.Migration): + + dependencies = [ + ("farms", "0001_initial"), + ] + + operations = [ + migrations.RunPython(ensure_cycle_kandang_id, migrations.RunPython.noop), + migrations.RunPython(backfill_cycle_flocks, migrations.RunPython.noop), + migrations.AlterField( + model_name="cycle", + name="flock", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="cycles", + to="farms.flock", + ), + ), + migrations.AlterField( + model_name="cycle", + name="status", + field=models.CharField( + choices=[("active", "Active"), ("closed", "Closed")], + db_index=True, + default="active", + max_length=30, + ), + ), + migrations.AlterField( + model_name="flock", + name="cycle", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="flock_set", + to="farms.cycle", + ), + ), + ] diff --git a/backend/apps/farms/migrations/0003_flock_cycle_nullable.py b/backend/apps/farms/migrations/0003_flock_cycle_nullable.py new file mode 100644 index 0000000..ea1281f --- /dev/null +++ b/backend/apps/farms/migrations/0003_flock_cycle_nullable.py @@ -0,0 +1,52 @@ +# Generated by Django 5.2.17 on 2026-08-19 + +from django.db import migrations + + +def _sqlite_flock_cycle_notnull(connection): + with connection.cursor() as cursor: + cursor.execute("PRAGMA table_info(flock)") + cols = {row[1]: row for row in cursor.fetchall()} + cycle_col = cols.get("cycle_id") + return bool(cycle_col and cycle_col[3] == 1) + + +def make_flock_cycle_nullable(apps, schema_editor): + connection = schema_editor.connection + if connection.vendor != "sqlite": + return + if not _sqlite_flock_cycle_notnull(connection): + return + with connection.cursor() as cursor: + cursor.execute("PRAGMA foreign_keys=OFF") + cursor.execute("ALTER TABLE flock RENAME TO flock_old") + cursor.execute( + """ + CREATE TABLE flock ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + flock_name varchar(30) NOT NULL, + created_at datetime NOT NULL, + updated_at datetime NOT NULL, + cycle_id bigint NULL REFERENCES cycles(id) + ) + """ + ) + cursor.execute( + """ + INSERT INTO flock (id, flock_name, created_at, updated_at, cycle_id) + SELECT id, flock_name, created_at, updated_at, cycle_id FROM flock_old + """ + ) + cursor.execute("DROP TABLE flock_old") + cursor.execute("PRAGMA foreign_keys=ON") + + +class Migration(migrations.Migration): + + dependencies = [ + ("farms", "0002_cycle_requires_flock"), + ] + + operations = [ + migrations.RunPython(make_flock_cycle_nullable, migrations.RunPython.noop), + ] diff --git a/backend/apps/farms/migrations/0004_retarget_cycles_flock_fk.py b/backend/apps/farms/migrations/0004_retarget_cycles_flock_fk.py new file mode 100644 index 0000000..198f875 --- /dev/null +++ b/backend/apps/farms/migrations/0004_retarget_cycles_flock_fk.py @@ -0,0 +1,59 @@ +# Generated by Django 5.2.17 on 2026-08-19 + +from django.db import migrations + + +def retarget_cycles_flock_fk(apps, schema_editor): + connection = schema_editor.connection + if connection.vendor != "sqlite": + return + with connection.cursor() as cursor: + cursor.execute("SELECT sql FROM sqlite_master WHERE name='cycles'") + row = cursor.fetchone() + if not row or "flock_old" not in (row[0] or ""): + return + cursor.execute("PRAGMA foreign_keys=OFF") + cursor.execute("ALTER TABLE cycles RENAME TO cycles_old") + cursor.execute( + """ + CREATE TABLE cycles ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + total_days integer NOT NULL, + start_date date NOT NULL, + end_date date NOT NULL, + doc_in_weight integer NOT NULL, + doc_in_count integer NOT NULL, + created_at datetime NOT NULL, + updated_at datetime NOT NULL, + flock_id bigint NOT NULL REFERENCES flock(id) DEFERRABLE INITIALLY DEFERRED, + kandang_id bigint NOT NULL REFERENCES kandang(id) DEFERRABLE INITIALLY DEFERRED, + status varchar(30) NOT NULL, + CONSTRAINT chk_cycles_date_range CHECK (end_date >= start_date) + ) + """ + ) + cursor.execute( + """ + INSERT INTO cycles ( + id, total_days, start_date, end_date, doc_in_weight, doc_in_count, + created_at, updated_at, flock_id, kandang_id, status + ) + SELECT + id, total_days, start_date, end_date, doc_in_weight, doc_in_count, + created_at, updated_at, flock_id, kandang_id, status + FROM cycles_old + """ + ) + cursor.execute("DROP TABLE cycles_old") + cursor.execute("PRAGMA foreign_keys=ON") + + +class Migration(migrations.Migration): + + dependencies = [ + ("farms", "0003_flock_cycle_nullable"), + ] + + operations = [ + migrations.RunPython(retarget_cycles_flock_fk, migrations.RunPython.noop), + ] diff --git a/backend/apps/farms/migrations/0005_erd_named_primary_keys.py b/backend/apps/farms/migrations/0005_erd_named_primary_keys.py new file mode 100644 index 0000000..b36a955 --- /dev/null +++ b/backend/apps/farms/migrations/0005_erd_named_primary_keys.py @@ -0,0 +1,16 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("accounts", "0002_erd_named_primary_keys"), + ("farms", "0004_retarget_cycles_flock_fk"), + ] + + operations = [ + migrations.RenameField(model_name="site", old_name="id", new_name="site_id"), + migrations.RenameField(model_name="kandang", old_name="id", new_name="kandang_id"), + migrations.RenameField(model_name="flock", old_name="id", new_name="flock_id"), + migrations.RenameField(model_name="cycle", old_name="id", new_name="cycle_id"), + ] diff --git a/backend/apps/farms/migrations/0006_erd_flock_belongs_to_cycle.py b/backend/apps/farms/migrations/0006_erd_flock_belongs_to_cycle.py new file mode 100644 index 0000000..61193eb --- /dev/null +++ b/backend/apps/farms/migrations/0006_erd_flock_belongs_to_cycle.py @@ -0,0 +1,40 @@ +from django.db import migrations, models +import django.db.models.deletion + + +def backfill_flock_cycle_from_cycles(apps, schema_editor): + Cycle = apps.get_model("farms", "Cycle") + Flock = apps.get_model("farms", "Flock") + + for cycle in Cycle.objects.exclude(flock_id__isnull=True).iterator(): + Flock.objects.filter(pk=cycle.flock_id).update(cycle_id=cycle.pk) + + Flock.objects.filter(cycle_id__isnull=True).delete() + + +class Migration(migrations.Migration): + dependencies = [ + ("farms", "0005_erd_named_primary_keys"), + ] + + operations = [ + migrations.RunPython(backfill_flock_cycle_from_cycles, migrations.RunPython.noop), + migrations.AlterField( + model_name="flock", + name="cycle", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="flocks", + to="farms.cycle", + ), + ), + migrations.RemoveField( + model_name="cycle", + name="flock", + ), + migrations.AlterField( + model_name="cycle", + name="doc_in_weight", + field=models.FloatField(), + ), + ] diff --git a/backend/apps/farms/migrations/0007_cycle_doc_in_weight_int.py b/backend/apps/farms/migrations/0007_cycle_doc_in_weight_int.py new file mode 100644 index 0000000..b7b6acb --- /dev/null +++ b/backend/apps/farms/migrations/0007_cycle_doc_in_weight_int.py @@ -0,0 +1,16 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("farms", "0006_erd_flock_belongs_to_cycle"), + ] + + operations = [ + migrations.AlterField( + model_name="cycle", + name="doc_in_weight", + field=models.IntegerField(), + ), + ] diff --git a/backend/apps/farms/migrations/0008_cycle_feed_initial_balance.py b/backend/apps/farms/migrations/0008_cycle_feed_initial_balance.py new file mode 100644 index 0000000..4dd5d28 --- /dev/null +++ b/backend/apps/farms/migrations/0008_cycle_feed_initial_balance.py @@ -0,0 +1,16 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("farms", "0007_cycle_doc_in_weight_int"), + ] + + operations = [ + migrations.AddField( + model_name="cycle", + name="feed_initial_balance", + field=models.IntegerField(default=0), + ), + ] \ No newline at end of file diff --git a/backend/apps/farms/migrations/__init__.py b/backend/apps/farms/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/apps/farms/models.py b/backend/apps/farms/models.py new file mode 100644 index 0000000..45badcc --- /dev/null +++ b/backend/apps/farms/models.py @@ -0,0 +1,135 @@ +from django.core.exceptions import ValidationError +from django.db import models +from wagtail.admin.panels import FieldPanel +from wagtail.snippets.models import register_snippet + +from apps.accounts.models import User + + +@register_snippet +class Site(models.Model): + site_id = models.BigAutoField(primary_key=True) + site_name = models.CharField(max_length=30) + user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="sites") + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + panels = [ + FieldPanel("site_name"), + FieldPanel("user"), + ] + + class Meta: + db_table = "sites" + ordering = ["site_name"] + + def __str__(self) -> str: + return self.site_name + + +@register_snippet +class Kandang(models.Model): + kandang_id = models.BigAutoField(primary_key=True) + kandang_name = models.CharField(max_length=30) + site = models.ForeignKey(Site, on_delete=models.CASCADE, related_name="kandangs") + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + panels = [ + FieldPanel("kandang_name"), + FieldPanel("site"), + ] + + class Meta: + db_table = "kandang" + ordering = ["kandang_name"] + + def __str__(self) -> str: + return self.kandang_name + + +@register_snippet +class Flock(models.Model): + flock_id = models.BigAutoField(primary_key=True) + flock_name = models.CharField(max_length=30) + cycle = models.ForeignKey( + "Cycle", + on_delete=models.CASCADE, + related_name="flocks", + ) + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + panels = [ + FieldPanel("flock_name"), + FieldPanel("cycle"), + ] + + class Meta: + db_table = "flock" + ordering = ["flock_name"] + + def __str__(self) -> str: + return self.flock_name + + +@register_snippet +class Cycle(models.Model): + STATUS_ACTIVE = "active" + STATUS_CLOSED = "closed" + STATUS_CHOICES = [ + (STATUS_ACTIVE, "Active"), + (STATUS_CLOSED, "Closed"), + ] + + cycle_id = models.BigAutoField(primary_key=True) + total_days = models.IntegerField() + start_date = models.DateField() + end_date = models.DateField() + doc_in_weight = models.IntegerField() + doc_in_count = models.IntegerField() + feed_initial_balance = models.IntegerField(default=0) + status = models.CharField( + max_length=30, choices=STATUS_CHOICES, default=STATUS_ACTIVE, db_index=True + ) + kandang = models.ForeignKey(Kandang, on_delete=models.CASCADE, related_name="cycles") + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + panels = [ + FieldPanel("kandang"), + FieldPanel("total_days"), + FieldPanel("start_date"), + FieldPanel("end_date"), + FieldPanel("doc_in_weight"), + FieldPanel("doc_in_count"), + FieldPanel("feed_initial_balance"), + FieldPanel("status"), + ] + + class Meta: + db_table = "cycles" + ordering = ["-start_date"] + constraints = [ + models.CheckConstraint( + check=models.Q(end_date__gte=models.F("start_date")), + name="chk_cycles_date_range", + ) + ] + + def __str__(self) -> str: + return f"Cycle #{self.pk} ({self.status})" + + def clean(self) -> None: + if self.end_date and self.start_date and self.end_date < self.start_date: + raise ValidationError({"end_date": "Must be on or after start_date"}) + + @property + def current_day(self) -> int: + from django.utils import timezone + + today = timezone.localdate() + if today <= self.start_date: + return 1 + elapsed = (today - self.start_date).days + 1 + return min(max(elapsed, 1), self.total_days) diff --git a/backend/apps/farms/serializers.py b/backend/apps/farms/serializers.py new file mode 100644 index 0000000..652ff1c --- /dev/null +++ b/backend/apps/farms/serializers.py @@ -0,0 +1,61 @@ +from rest_framework import serializers + +from apps.accounts.serializers import PkAsIdMixin +from apps.farms.models import Cycle, Flock, Kandang, Site + + +class SiteSerializer(PkAsIdMixin, serializers.ModelSerializer): + class Meta: + model = Site + fields = ["id", "site_name", "user", "created_at", "updated_at"] + read_only_fields = ["id", "created_at", "updated_at"] + + +class KandangSerializer(PkAsIdMixin, serializers.ModelSerializer): + class Meta: + model = Kandang + fields = ["id", "kandang_name", "site", "created_at", "updated_at"] + read_only_fields = ["id", "created_at", "updated_at"] + + +class FlockSerializer(PkAsIdMixin, serializers.ModelSerializer): + class Meta: + model = Flock + fields = ["id", "flock_name", "cycle", "created_at", "updated_at"] + read_only_fields = ["id", "created_at", "updated_at"] + + +class CycleSerializer(PkAsIdMixin, serializers.ModelSerializer): + kandang = serializers.PrimaryKeyRelatedField(queryset=Kandang.objects.all()) + flock = serializers.SerializerMethodField() + chick_in_weight = serializers.IntegerField(source="doc_in_weight") + current_day = serializers.IntegerField(read_only=True) + + class Meta: + model = Cycle + fields = [ + "id", + "kandang", + "flock", + "total_days", + "current_day", + "start_date", + "end_date", + "chick_in_weight", + "doc_in_count", + "feed_initial_balance", + "status", + "created_at", + "updated_at", + ] + read_only_fields = ["id", "flock", "feed_initial_balance", "created_at", "updated_at"] + + def get_flock(self, obj): + flock = obj.flocks.order_by("flock_id").first() + return flock.pk if flock is not None else None + + def create(self, validated_data): + kandang = validated_data["kandang"] + cycle = Cycle.objects.create(**validated_data) + Flock.objects.create(flock_name=kandang.kandang_name[:30], cycle=cycle) + return cycle diff --git a/backend/apps/farms/tests.py b/backend/apps/farms/tests.py new file mode 100644 index 0000000..b108f53 --- /dev/null +++ b/backend/apps/farms/tests.py @@ -0,0 +1,82 @@ +from datetime import date, timedelta + +from django.test import TestCase +from rest_framework.test import APIClient + +from apps.accounts.models import User +from apps.farms.models import Cycle, Flock, Kandang, Site + + +class FarmAPITests(TestCase): + def setUp(self): + self.user = User.objects.create_user(user_name="tester", password="secret") + self.client = APIClient() + self.client.force_authenticate(self.user) + self.site = Site.objects.create(site_name="Sukawarna", user=self.user) + self.kandang = Kandang.objects.create(kandang_name="Kandang 1", site=self.site) + + def test_create_cycle_auto_creates_flock_and_returns_erd_fields(self): + start = date.today() + response = self.client.post( + "/api/v1/cycles/", + { + "kandang": self.kandang.pk, + "total_days": 35, + "start_date": start.isoformat(), + "end_date": (start + timedelta(days=34)).isoformat(), + "chick_in_weight": 42, + "doc_in_count": 10000, + "status": "active", + }, + format="json", + ) + self.assertEqual(response.status_code, 201, response.data) + self.assertEqual(response.data["chick_in_weight"], 42) + self.assertIsNotNone(response.data["flock"]) + cycle = Cycle.objects.get(pk=response.data["id"]) + flock = Flock.objects.get(pk=response.data["flock"]) + self.assertEqual(cycle.doc_in_weight, 42) + self.assertEqual(flock.cycle_id, cycle.pk) + + def test_list_cycles_by_kandang(self): + cycle = Cycle.objects.create( + kandang=self.kandang, + total_days=35, + start_date=date.today(), + end_date=date.today() + timedelta(days=34), + doc_in_weight=40, + doc_in_count=9000, + status=Cycle.STATUS_ACTIVE, + ) + flock = Flock.objects.create(flock_name="Flock A", cycle=cycle) + response = self.client.get("/api/v1/cycles/", {"kandang_id": self.kandang.pk}) + self.assertEqual(response.status_code, 200) + results = response.data["results"] if isinstance(response.data, dict) else response.data + self.assertEqual(len(results), 1) + self.assertEqual(results[0]["flock"], flock.pk) + + def test_list_flocks_by_cycle(self): + cycle = Cycle.objects.create( + kandang=self.kandang, + total_days=35, + start_date=date.today(), + end_date=date.today() + timedelta(days=34), + doc_in_weight=40, + doc_in_count=9000, + status=Cycle.STATUS_ACTIVE, + ) + flock = Flock.objects.create(flock_name="Flock A", cycle=cycle) + other_cycle = Cycle.objects.create( + kandang=self.kandang, + total_days=35, + start_date=date.today(), + end_date=date.today() + timedelta(days=34), + doc_in_weight=40, + doc_in_count=9000, + status=Cycle.STATUS_ACTIVE, + ) + Flock.objects.create(flock_name="Flock B", cycle=other_cycle) + response = self.client.get("/api/v1/flocks/", {"cycle_id": cycle.pk}) + self.assertEqual(response.status_code, 200, response.data) + results = response.data["results"] if isinstance(response.data, dict) else response.data + self.assertEqual([r["id"] for r in results], [flock.pk]) diff --git a/backend/apps/farms/urls.py b/backend/apps/farms/urls.py new file mode 100644 index 0000000..37dc456 --- /dev/null +++ b/backend/apps/farms/urls.py @@ -0,0 +1,11 @@ +from rest_framework.routers import DefaultRouter + +from apps.farms.views import CycleViewSet, FlockViewSet, KandangViewSet, SiteViewSet + +router = DefaultRouter() +router.register("sites", SiteViewSet, basename="site") +router.register("kandangs", KandangViewSet, basename="kandang") +router.register("flocks", FlockViewSet, basename="flock") +router.register("cycles", CycleViewSet, basename="cycle") + +urlpatterns = router.urls diff --git a/backend/apps/farms/views.py b/backend/apps/farms/views.py new file mode 100644 index 0000000..027cb3f --- /dev/null +++ b/backend/apps/farms/views.py @@ -0,0 +1,172 @@ +from datetime import date, timedelta + +from django.core.exceptions import ValidationError +from django.utils.dateparse import parse_date +from rest_framework import permissions, status, viewsets +from rest_framework.decorators import action +from rest_framework.response import Response + +from apps.accounts.models import User +from apps.farms.models import Cycle, Flock, Kandang, Site +from apps.farms.serializers import CycleSerializer, FlockSerializer, KandangSerializer, SiteSerializer +from apps.operations.models import FeedSacks, ManualInput +from apps.operations.services.karung_web import KarungWebError, request_karung +from apps.operations.services.manual_input import recompute_manual_totals + + +class IsSuperAdminForWrite(permissions.BasePermission): + """Reads for any authenticated user; mutations only for superadmin. + + Staff accounts may read sites/kandangs (to pick one and create a cycle) but + cannot create, edit, or delete them — only superadmins manage structures. + """ + + def has_permission(self, request, view): + if not request.user or not request.user.is_authenticated: + return False + if request.method in permissions.SAFE_METHODS: + return True + return bool(request.user.is_superuser or request.user.status == User.STATUS_SUPERADMIN) + + +class SiteViewSet(viewsets.ModelViewSet): + queryset = Site.objects.select_related("user").all() + serializer_class = SiteSerializer + permission_classes = [IsSuperAdminForWrite] + + def get_queryset(self): + qs = super().get_queryset() + user_id = self.request.query_params.get("user_id") + if user_id: + qs = qs.filter(user_id=user_id) + return qs + + +class KandangViewSet(viewsets.ModelViewSet): + queryset = Kandang.objects.select_related("site").all() + serializer_class = KandangSerializer + permission_classes = [IsSuperAdminForWrite] + + def get_queryset(self): + qs = super().get_queryset() + site_id = self.request.query_params.get("site_id") + if site_id: + qs = qs.filter(site_id=site_id) + return qs + + +class FlockViewSet(viewsets.ModelViewSet): + queryset = Flock.objects.all() + serializer_class = FlockSerializer + + def get_queryset(self): + qs = super().get_queryset() + cycle_id = self.request.query_params.get("cycle_id") + if cycle_id: + qs = qs.filter(cycle_id=cycle_id) + return qs + + +class CycleViewSet(viewsets.ModelViewSet): + queryset = Cycle.objects.select_related("kandang").prefetch_related("flocks").all() + serializer_class = CycleSerializer + + def get_queryset(self): + qs = super().get_queryset() + params = self.request.query_params + if params.get("kandang_id"): + qs = qs.filter(kandang_id=params["kandang_id"]) + if params.get("status"): + qs = qs.filter(status=params["status"]) + return qs + + @action(detail=True, methods=["post"], url_path="initial-balance") + def set_initial_balance(self, request, pk=None): + """Save the feed-in balance for the cycle (Saldo Awal). + + Sets ``feed_initial_balance`` on the cycle (the only cycle field this + feature writes — never during cycle creation), records the manual feed-in + for the balance date, then pulls the IoT-detected "in" for that date from + the karung-web-admin feed and returns a manual vs IoT accuracy figure. + """ + cycle = self.get_object() + + date_str = request.data.get("date") + if not date_str: + return Response({"detail": "date is required."}, status=status.HTTP_400_BAD_REQUEST) + balance_date = parse_date(str(date_str)) + if balance_date is None: + return Response( + {"detail": "date must be in YYYY-MM-DD format."}, + status=status.HTTP_400_BAD_REQUEST, + ) + + try: + feed_in_manual = int(request.data.get("feed_in_manual")) + except (TypeError, ValueError): + return Response( + {"detail": "feed_in_manual must be an integer."}, + status=status.HTTP_400_BAD_REQUEST, + ) + if feed_in_manual < 0: + return Response( + {"detail": "feed_in_manual cannot be negative."}, + status=status.HTTP_400_BAD_REQUEST, + ) + + cycle.feed_initial_balance = feed_in_manual + cycle.save(update_fields=["feed_initial_balance", "updated_at"]) + + # Pull IoT "in" at the balance date (karung-web-admin syncs today/yesterday). + feed_sack = FeedSacks.objects.filter(cycle=cycle, date=balance_date).first() + sync_error = None + if feed_sack is None: + try: + today = date.today() + section = None + if balance_date == today: + section = "today" + elif balance_date == today - timedelta(days=1): + section = "yesterday_history" + if section: + request_karung(cycle, section=section) + feed_sack = FeedSacks.objects.filter(cycle=cycle, date=balance_date).first() + except (KarungWebError, ValidationError) as exc: + sync_error = str(exc) + iot_in = feed_sack.in_today if feed_sack is not None else None + + # Record the manual feed-in for the balance date. + ManualInput.objects.update_or_create( + cycle=cycle, + date=balance_date, + defaults={"feed_in_manual": feed_in_manual}, + ) + recompute_manual_totals(cycle) + + # FeedSacks in_total always includes the initial balance as its base. + running = cycle.feed_initial_balance + for fs_row in FeedSacks.objects.filter(cycle=cycle).order_by("date", "pk"): + running += fs_row.in_today + if fs_row.in_total != running: + fs_row.in_total = running + fs_row.save(update_fields=["in_total", "updated_at"]) + + accuracy = None + if feed_in_manual > 0 and iot_in is not None and iot_in > 0: + accuracy = round(min(feed_in_manual, iot_in) / max(feed_in_manual, iot_in) * 1000) / 10 + elif feed_in_manual == 0 and iot_in == 0: + accuracy = 100.0 + + manual_row = ManualInput.objects.filter(cycle=cycle, date=balance_date).first() + return Response( + { + "cycle": cycle.pk, + "date": balance_date.isoformat(), + "feed_initial_balance": cycle.feed_initial_balance, + "manual": feed_in_manual, + "manual_total": manual_row.feed_in_manual_total if manual_row else feed_in_manual, + "iot": iot_in, + "accuracy": accuracy, + "sync_error": sync_error, + } + ) diff --git a/backend/apps/jobs/__init__.py b/backend/apps/jobs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/apps/jobs/apps.py b/backend/apps/jobs/apps.py new file mode 100644 index 0000000..66f9c20 --- /dev/null +++ b/backend/apps/jobs/apps.py @@ -0,0 +1,8 @@ +from django.apps import AppConfig + + +class JobsConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "apps.jobs" + label = "jobs" + verbose_name = "Jobs" diff --git a/backend/apps/jobs/management/__init__.py b/backend/apps/jobs/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/apps/jobs/management/commands/__init__.py b/backend/apps/jobs/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/apps/jobs/management/commands/advance_cycle_days.py b/backend/apps/jobs/management/commands/advance_cycle_days.py new file mode 100644 index 0000000..d08fa79 --- /dev/null +++ b/backend/apps/jobs/management/commands/advance_cycle_days.py @@ -0,0 +1,11 @@ +from django.conf import settings +from django.core.management.base import BaseCommand + +from apps.farms.models import Cycle + + +class Command(BaseCommand): + help = "Placeholder — advance_cycle_days no longer applicable (current_day removed from ERD)" + + def handle(self, *args, **options): + self.stdout.write("current_day field removed; this command is a no-op now.") diff --git a/backend/apps/jobs/management/commands/recompute_kpi_rollups.py b/backend/apps/jobs/management/commands/recompute_kpi_rollups.py new file mode 100644 index 0000000..d4503d9 --- /dev/null +++ b/backend/apps/jobs/management/commands/recompute_kpi_rollups.py @@ -0,0 +1,53 @@ +from django.core.management.base import BaseCommand +from django.db.models import Sum + +from apps.farms.models import Cycle +from apps.operations.models import ChickenCounting, FeedSacks, KPI + + +class Command(BaseCommand): + help = "Recompute simple KPI rollups from ops tables for active cycles" + + def handle(self, *args, **options): + count = 0 + for cycle in Cycle.objects.filter(status=Cycle.STATUS_ACTIVE): + counting = ChickenCounting.objects.filter(cycle=cycle).aggregate( + mortality=Sum("mortality_count"), + life=Sum("total_count"), + ) + feed_sack = FeedSacks.objects.filter(cycle=cycle).order_by("-date", "-pk").first() + + latest_cc = ChickenCounting.objects.filter(cycle=cycle).order_by("-date").first() + latest_cw = None + latest_fs = feed_sack + latest_mi = None + + from apps.operations.models import ChickenWeight, ManualInput + latest_cw = ChickenWeight.objects.filter(cycle=cycle).order_by("-date").first() + latest_mi = ManualInput.objects.filter(cycle=cycle).order_by("-date").first() + + if not all([latest_cc, latest_cw, latest_fs, latest_mi]): + self.stdout.write(f"cycle={cycle.pk} skipped (missing source records)") + continue + + kpi, _ = KPI.objects.update_or_create( + cycle=cycle, + date=latest_cc.date, + defaults={ + "cc": latest_cc, + "cw": latest_cw, + "fs": latest_fs, + "manual": latest_mi, + "mortality_total": counting["mortality"] or 0, + "chicken_life": counting["life"] or cycle.doc_in_count, + "feed_total": feed_sack.feed_use_total if feed_sack else 0, + "chicken_life_percentage": ( + ((counting["life"] or cycle.doc_in_count) / cycle.doc_in_count * 100.0) + if cycle.doc_in_count + else 0.0 + ), + }, + ) + count += 1 + self.stdout.write(f"KPI {kpi.pk} for cycle {cycle.pk}") + self.stdout.write(self.style.SUCCESS(f"Recomputed {count} KPI row(s)")) diff --git a/backend/apps/jobs/management/commands/seed_demo.py b/backend/apps/jobs/management/commands/seed_demo.py new file mode 100644 index 0000000..9cf8782 --- /dev/null +++ b/backend/apps/jobs/management/commands/seed_demo.py @@ -0,0 +1,48 @@ +from django.conf import settings +from django.core.management import call_command +from django.core.management.base import BaseCommand +from django.db import transaction + +from apps.accounts.models import ApiKey, User + + +class Command(BaseCommand): + help = ( + "Seed demo superadmin login + API key, then Sukawarna Kandang 4 " + "and Kandang 5 as the default closed cycles" + ) + + @transaction.atomic + def handle(self, *args, **options): + user, created = User.objects.get_or_create( + user_name="admin", + defaults={"status": User.STATUS_SUPERADMIN, "is_staff": True, "is_superuser": True}, + ) + if created or not user.has_usable_password(): + user.set_password("admin123") + user.status = User.STATUS_SUPERADMIN + user.save() + self.stdout.write("Created/updated user admin / admin123") + + raw_key = None + bootstrap = settings.BOOTSTRAP_API_KEY + if bootstrap: + api_key, raw_key = ApiKey.generate(user, "bootstrap") + api_key.prefix = bootstrap[:8] + api_key.key_hash = ApiKey.hash_key(bootstrap) + api_key.save(update_fields=["prefix", "key_hash", "updated_at"]) + raw_key = bootstrap + self.stdout.write(f"Bootstrap API key installed (prefix={api_key.prefix})") + elif not ApiKey.objects.filter(user=user).exists(): + api_key, raw_key = ApiKey.generate(user, "seed") + self.stdout.write(self.style.WARNING(f"Demo API key (save now): {raw_key}")) + + call_command("seed_sukawarna_kandang4") + call_command("seed_sukawarna_kandang5") + call_command("seed_iot_10min") + + self.stdout.write( + self.style.SUCCESS( + "Seed OK: Sukawarna Kandang 4 & Kandang 5 closed cycles + 10-minute IoT panels" + ) + ) diff --git a/backend/apps/jobs/management/commands/seed_iot_10min.py b/backend/apps/jobs/management/commands/seed_iot_10min.py new file mode 100644 index 0000000..7f96148 --- /dev/null +++ b/backend/apps/jobs/management/commands/seed_iot_10min.py @@ -0,0 +1,239 @@ +"""Seed 10-minute IoT panel readings (144/day) for every flock. + +Kandang 5 Lantai 1 is seeded from real sensor snapshots pulled from +``dashboard.cpsp.id/api/iot/flocks/`` (cached in ``scripts/iot_panel_10min_extract.json``); +every other flock/floor is generated from that data with a deterministic per-house +jitter so each cycle day holds a full 00:00..23:50 run of 144 readings. + +Run ``scripts/extract_iot_10min.py`` to refresh the cache against the live API. +""" +from __future__ import annotations + +import json +import random +from datetime import date as date_cls +from datetime import datetime, time, timedelta +from pathlib import Path + +from django.conf import settings +from django.core.management.base import BaseCommand, CommandError +from django.db import transaction +from django.utils import timezone + +from apps.farms.models import Cycle, Flock + +SLOTS_PER_DAY = 144 # 24h * 6 + +CHILL_FACTOR_POINTS = ( + (0, 8.0), + (1, 8.0), + (7, 7.0), + (14, 6.0), + (21, 4.5), + (28, 3.5), + (35, 3.5), + (42, 3.0), +) + + +def chicken_chill_factor(age: float) -> float: + if age <= CHILL_FACTOR_POINTS[0][0]: + return CHILL_FACTOR_POINTS[0][1] + for idx in range(1, len(CHILL_FACTOR_POINTS)): + prev_age, prev_factor = CHILL_FACTOR_POINTS[idx - 1] + next_age, next_factor = CHILL_FACTOR_POINTS[idx] + if age > next_age: + continue + span = next_age - prev_age + if span <= 0: + return next_factor + progress = (age - prev_age) / span + return prev_factor + (next_factor - prev_factor) * progress + return CHILL_FACTOR_POINTS[-1][1] + + +def experience_temperature( + *, average_temperature: float, wind_speed: float, humidity_pct: float, age_days: float +) -> float: + chill_factor = chicken_chill_factor(age_days) + rh_adjustment = (humidity_pct - 70.0) / 5.0 + chill_effect = wind_speed * chill_factor - rh_adjustment + return average_temperature - chill_effect + + +def lerp(a: float, b: float, frac: float) -> float: + return a + (b - a) * frac + + +def slot_timestamp(day: date_cls, slot: int) -> datetime: + naive = datetime.combine(day, time(0, 0)) + timedelta(minutes=10 * slot) + return timezone.make_aware(naive, timezone.get_current_timezone()) + + +def gap_fill_day(day_rows: dict[int, dict]) -> dict[int, dict]: + """Return 144 slots for a day, interpolating any missing 10-minute windows.""" + present = sorted(day_rows.items()) + filled: dict[int, dict] = {} + for slot in range(SLOTS_PER_DAY): + if slot in day_rows: + filled[slot] = dict(day_rows[slot]) + continue + prev = next = None + for s, row in present: + if s < slot: + prev = (s, row) + elif s > slot and next is None: + next = (s, row) + break + if prev is None and next is not None: + filled[slot] = dict(next[1]) + elif next is None and prev is not None: + filled[slot] = dict(prev[1]) + elif prev is not None and next is not None: + ps, prow = prev + ns, nrow = next + frac = (slot - ps) / (ns - ps) + filled[slot] = { + "wind_speed": lerp(prow["wind_speed"], nrow["wind_speed"], frac), + "humidity": lerp(prow["humidity"], nrow["humidity"], frac), + "water_total": lerp(prow["water_total"], nrow["water_total"], frac), + "average_temperature": lerp( + prow["average_temperature"], nrow["average_temperature"], frac + ), + } + return filled + + +class Command(BaseCommand): + help = "Seed 10-minute IoT panel readings (144/day) for all flocks" + + def add_arguments(self, parser): + parser.add_argument("--iot-json", default="") + parser.add_argument("--cycle-start", default="2026-05-22") + parser.add_argument("--no-reset", action="store_true") + parser.add_argument("--jitter-seed", type=int, default=7) + + def load_real_rows(self, path: Path) -> dict[str, dict[int, dict]]: + if not path.is_file(): + raise CommandError(f"IoT 10-min extract not found: {path}") + data = json.loads(path.read_text(encoding="utf-8")) + by_date: dict[str, dict[int, dict]] = {} + for row in data["rows"]: + ts = datetime.fromisoformat(row["timestamp"]) + slot = (ts.hour * 60 + ts.minute) // 10 + by_date.setdefault(row["date"], {})[slot] = row + return by_date + + @transaction.atomic + def handle(self, *args, **options): + iot_json = options["iot_json"] or str( + Path(settings.BASE_DIR).resolve().parent / "scripts" / "iot_panel_10min_extract.json" + ) + cycle_start = date_cls.fromisoformat(options["cycle_start"]) + real_by_date = self.load_real_rows(Path(iot_json)) + + cycles = Cycle.objects.filter( + start_date=cycle_start, flocks__isnull=False + ).distinct() + if not cycles: + raise CommandError(f"No cycles starting {cycle_start} with flocks") + + seeded = 0 + for cycle in cycles: + kandang_name = cycle.kandang.kandang_name + for flock in cycle.flocks.order_by("flock_id"): + profile = self.profile_for(kandang_name, flock.flock_name) + rng = random.Random(options["jitter_seed"] + flock.pk) + rows = self.build_flock_rows(flock, cycle, real_by_date, profile, rng) + if not options["no_reset"]: + flock.iot_panels.all().delete() + for chunk in range(0, len(rows), 500): + flock.iot_panels.bulk_create(rows[chunk : chunk + 500]) + seeded += len(rows) + self.stdout.write( + f" {kandang_name} / {flock.flock_name}: {len(rows)} readings" + ) + + self.stdout.write(self.style.SUCCESS(f"Seeded {seeded} IoT panel readings")) + + def profile_for(self, kandang_name: str, flock_name: str) -> dict: + """Per-house transform applied to the real Kandang 5 Lantai 1 readings.""" + is_lantai1 = flock_name == "Lantai 1" + if kandang_name == "Kandang 5": + if is_lantai1: + return {"real": True} + return { + "wind_delta": -0.05, + "humidity_delta": 1.2, + "temperature_delta": -0.3, + "water_factor": 0.96, + } + # Kandang 4: deterministic jitter (same approach as seed_sukawarna_kandang4). + return { + "temperature_jitter": (-0.4, 0.4), + "humidity_jitter": (-3.0, 3.0), + "wind_jitter": (-0.1, 0.1), + "water_factor": 0.9, + "water_jitter_abs": (-120.0, 120.0), + "humidity_delta": 1.2 if not is_lantai1 else 0.0, + "temperature_delta": -0.3 if not is_lantai1 else 0.0, + } + + def build_flock_rows(self, flock: Flock, cycle: Cycle, real: dict, profile: dict, rng: random.Random) -> list: + from apps.operations.models import IotPanel + + day = cycle.start_date + rows: list[IotPanel] = [] + while day <= cycle.end_date: + iso = day.isoformat() + age_days = (day - cycle.start_date).days + 1 + if profile.get("real"): + source = gap_fill_day(real.get(iso, {})) + else: + source = gap_fill_day(real.get(iso, {})) + + if not source: + day += timedelta(days=1) + continue + + real_total = source.get(SLOTS_PER_DAY - 1, {}).get("water_total", 0.0) or 0.0 + target_total = real_total * profile.get("water_factor", 1.0) + if profile.get("water_jitter_abs"): + target_total += rng.uniform(*profile["water_jitter_abs"]) + target_total = max(0.0, target_total) + water_scale = target_total / real_total if real_total else 0.0 + + for slot in range(SLOTS_PER_DAY): + base = source[slot] + avg_temp = base.get("average_temperature", 0.0) + profile.get("temperature_delta", 0.0) + if profile.get("temperature_jitter"): + avg_temp += rng.uniform(*profile["temperature_jitter"]) + humidity = base.get("humidity", 0.0) + profile.get("humidity_delta", 0.0) + if profile.get("humidity_jitter"): + humidity += rng.uniform(*profile["humidity_jitter"]) + humidity = min(100.0, max(0.0, humidity)) + wind = base.get("wind_speed", 0.0) + profile.get("wind_delta", 0.0) + if profile.get("wind_jitter"): + wind += rng.uniform(*profile["wind_jitter"]) + wind = max(0.0, wind) + water = base.get("water_total", 0.0) * water_scale + exp_temp = experience_temperature( + average_temperature=avg_temp, + wind_speed=wind, + humidity_pct=humidity, + age_days=age_days, + ) + rows.append( + IotPanel( + flock=flock, + date=day, + timestamp=slot_timestamp(day, slot), + wind_speed=round(wind, 2), + humidity=round(humidity, 1), + water_total=round(water, 1), + average_temperature=round(avg_temp, 2), + experience_temperature=round(exp_temp, 2), + ) + ) + day += timedelta(days=1) + return rows \ No newline at end of file diff --git a/backend/apps/jobs/management/commands/seed_sukawarna_kandang4.py b/backend/apps/jobs/management/commands/seed_sukawarna_kandang4.py new file mode 100644 index 0000000..b1d6555 --- /dev/null +++ b/backend/apps/jobs/management/commands/seed_sukawarna_kandang4.py @@ -0,0 +1,435 @@ +"""Seed Sukawarna / Kandang 4 closed cycle. + +Kandang 4 is a generated dataset modeled on the Kandang 5 seed +(``seed_sukawarna_kandang5``). The two houses run the same 49-day window at +the same site, but Kandang 4 is stocked with 45,000 DOC and performs slightly +better (lower mortality, marginally better FCR / EEF). + +Every daily series is hand-tuned so the numbers stay internally consistent: + +* ``chicken_counting`` – daily mortality sums to the cumulative total; camera + count tracks live population (DOC - mortality - harvest) with coverage noise. +* ``chicken_weight`` – smooth growth curve; weighing continues through + close-out (day 38-48), flock average declines as heavy birds are harvested. +* ``feed_sacks`` – daily use ramps up to ~98 sacks and falls off during + close-out; total use (1,941 sacks) matches close-out FCR ≈ 1.71. +* ``harvest`` – 20 partial harvests day 29-48, 40,700 birds, + 57.47 t live weight, avg ~1,412 g/bird at ~33.1 days; tail harvests leave + fewer than 50 birds in the house at close-out. +* ``kpi`` / ``manual`` – FCR/EEF/lot-weight follow the same formulas as the + Kandang 5 preview: + FCR = feed_total_kg / (harvest_weight_total_g + lot_weight_g) + EEF = life_pct * (avg_harvest_weight/1000) / (FCR * avg_harvest_day) * 100 + lot = chicken_life * average_weight +* ``iot_panel`` – derived from the real Kandang 5 sensor extract with + deterministic per-house jitter (same site, same season). +""" + +from __future__ import annotations + +import json +import math +import random +from datetime import date, timedelta +from pathlib import Path + +from django.core.management.base import BaseCommand, CommandError +from django.db import transaction + +from apps.accounts.models import User +from apps.farms.models import Cycle, Flock, Kandang, Site +from apps.jobs.sukawarna_preview import IOT_EXTRACT_JSON +from apps.operations.models import ( + ChickenCounting, + ChickenWeight, + FeedSacks, + IotPanel, + KPI, + ManualInput, +) + +DEFAULT_PASSWORD = "staff123" + +START_DATE = date(2026, 5, 22) +END_DATE = date(2026, 7, 9) +TOTAL_DAYS = 49 +DOC_IN_WEIGHT = 35 +DOC_IN_COUNT = 45_000 +FLOCK_NAMES = ("Lantai 1", "Lantai 2") + +# --- Daily mortality per age 0..48 (sums to 4,269 ≈ 9.49 % deplesi) --------- +MORTALITY = [ + 42, 58, 74, 78, 68, 62, 60, + 52, 54, 47, 50, 44, 46, 48, + 42, 45, 47, 50, 52, 48, 46, + 44, 47, 42, 50, 58, 65, 72, + 95, 120, 150, 175, 200, 185, 215, + 240, 255, 235, 220, 140, 115, 100, + 85, 60, 65, 50, 45, 28, 0, +] + +# --- Flock average weight (g) per age 0..48 --------------------------------- +# Weighing continues through close-out (day 38-48). As heavy birds are +# harvested first, the remaining flock average weight declines. +AVG_WEIGHT = [ + 35, 47, 62, 80, 100, 123, 148, + 175, 204, 235, 268, 303, 340, 379, + 420, 463, 508, 555, 604, 655, 708, + 763, 820, 879, 940, 1003, 1068, 1135, + 1204, 1275, 1348, 1423, 1500, 1570, 1530, + 1470, 1420, 1360, 1310, 1270, 1230, 1220, + 1200, 1180, 1160, 1140, 1120, 1100, 1080, +] + +# --- Weigh-sample size per age 0..48 (declines with live flock during close-out) --- +SAMPLE_COUNT = [ + 229, 214, 250, 230, 260, 240, 220, + 280, 210, 250, 230, 260, 240, 220, + 270, 250, 230, 260, 240, 220, 280, + 250, 230, 270, 240, 220, 260, 240, + 280, 250, 230, 270, 250, 230, 260, + 240, 220, 250, 180, 150, 120, 100, + 80, 60, 50, 40, 30, 20, 15, +] + +# --- Uniformity (%) per age 0..48 -------------------------------------------- +UNIFORMITY = [ + 0, 45, 62, 70, 66, 74, 71, + 78, 69, 73, 81, 68, 75, 72, + 70, 77, 74, 69, 72, 76, 71, + 73, 68, 74, 70, 72, 66, 69, + 73, 67, 71, 69, 72, 68, 65, + 70, 67, 63, 62, 61, 60, 59, + 58, 57, 56, 55, 54, 53, 52, +] + +# --- Feed used (sacks, 50 kg each) per age 0..48; sums to 1,941 -------------- +FEED_TODAY = [ + 24, 11, 14, 22, 24, 27, 31, + 34, 38, 40, 42, 36, 38, 41, + 44, 48, 59, 66, 74, 85, 89, + 90, 57, 98, 92, 84, 72, 79, + 80, 71, 71, 65, 57, 24, 29, + 14, 13, 12, 8, 3, 3, 5, 8, 0, 8, 2, 4, 4, 1, +] + +# --- Feed delivered (sacks) on delivery days (age -> sacks) ------------------ +# Cumulative intake (1,910 sacks) ends just below usage, a small stock draw. +FEED_IN = { + 1: 120, 4: 130, 7: 140, 10: 150, 13: 160, 16: 170, 19: 150, + 22: 140, 25: 130, 28: 120, 31: 110, 34: 100, 37: 90, 40: 80, 43: 120, +} + +# --- Karung keluar (out) per age 0..48: only during the final week, small --- +# "Out" is NOT the same as usage (tuang). It only happens at the very end of the +# cycle and totals ~20 sacks per house, with a handful of sacks per day. +OUT_TODAY = [0] * 42 + [3, 4, 5, 3, 2, 2, 1] + +# --- Harvest plan: age -> (birds, avg live weight g/bird) -------------------- +# 20 partial harvests day 29-48; the tail harvests clear out the house so the +# leftover flock (chicken_life) at close-out stays under 50 birds. +HARVEST = { + 29: (4_500, 1_310), + 30: (5_000, 1_360), + 31: (5_000, 1_430), + 32: (5_000, 1_490), + 33: (5_000, 1_540), + 34: (4_500, 1_500), + 35: (3_500, 1_440), + 36: (2_500, 1_390), + 37: (2_000, 1_330), + 38: (1_500, 1_280), + 39: (1_000, 1_240), + 40: (500, 1_200), + 41: (120, 1_190), + 42: (100, 1_170), + 43: (90, 1_150), + 44: (80, 1_130), + 45: (90, 1_110), + 46: (80, 1_090), + 47: (80, 1_070), + 48: (60, 1_050), +} + + +def _round(value: float, ndigits: int = 2) -> float: + if math.isclose(value, 0.0, abs_tol=1e-12): + return 0.0 + return round(value, ndigits) + + +class Command(BaseCommand): + help = "Seed Sukawarna / Kandang 4 closed cycle (generated, modeled on Kandang 5)" + + def add_arguments(self, parser): + parser.add_argument("--password", default=DEFAULT_PASSWORD) + parser.add_argument("--iot-json", default=str(IOT_EXTRACT_JSON)) + parser.add_argument("--no-reset", action="store_true") + parser.add_argument("--jitter-seed", type=int, default=7) + + @transaction.atomic + def handle(self, *args, **options): + iot_path = Path(options["iot_json"]) + if not iot_path.is_file(): + raise CommandError(f"IoT extract not found: {iot_path}") + iot = json.loads(iot_path.read_text(encoding="utf-8")) + password = options["password"] + rng = random.Random(options["jitter_seed"]) + + user, created = User.objects.get_or_create( + user_name="staff", + defaults={"status": User.STATUS_ACTIVE, "is_staff": True}, + ) + user.status = User.STATUS_ACTIVE + user.is_staff = True + user.set_password(password) + user.save() + if created: + self.stdout.write(f"Created user staff / {password}") + else: + self.stdout.write(f"Updated password for staff / {password}") + + site, _ = Site.objects.get_or_create(site_name="Sukawarna", defaults={"user": user}) + if site.user_id != user.pk: + site.user = user + site.save(update_fields=["user", "updated_at"]) + + kandang, _ = Kandang.objects.get_or_create( + kandang_name="Kandang 4", + site=site, + ) + + existing = Cycle.objects.filter(kandang=kandang, start_date=START_DATE).first() + if existing and not options["no_reset"]: + KPI.objects.filter(cycle=existing).delete() + ChickenCounting.objects.filter(cycle=existing).delete() + ChickenWeight.objects.filter(cycle=existing).delete() + FeedSacks.objects.filter(cycle=existing).delete() + ManualInput.objects.filter(cycle=existing).delete() + IotPanel.objects.filter(flock__cycle=existing).delete() + Flock.objects.filter(cycle=existing).delete() + existing.delete() + self.stdout.write("Reset previous Kandang 4 cycle") + + cycle, cycle_created = Cycle.objects.get_or_create( + kandang=kandang, + start_date=START_DATE, + defaults={ + "end_date": END_DATE, + "total_days": TOTAL_DAYS, + "doc_in_weight": DOC_IN_WEIGHT, + "doc_in_count": DOC_IN_COUNT, + "status": Cycle.STATUS_CLOSED, + }, + ) + if not cycle_created: + cycle.end_date = END_DATE + cycle.total_days = TOTAL_DAYS + cycle.doc_in_weight = DOC_IN_WEIGHT + cycle.doc_in_count = DOC_IN_COUNT + cycle.status = Cycle.STATUS_CLOSED + cycle.save() + + flocks_by_name: dict[str, Flock] = {} + for name in FLOCK_NAMES: + flock, _ = Flock.objects.get_or_create(flock_name=name, cycle=cycle) + flocks_by_name[name] = flock + + dates = [START_DATE + timedelta(days=i) for i in range(TOTAL_DAYS)] + + # --- cumulative series ------------------------------------------------- + mort_total = 0 + harvest_total = 0 + harvest_weight_total = 0.0 + feed_total = 0 + feed_in_total = 0 + out_total = 0 + + cc_by_date: dict[date, ChickenCounting] = {} + cw_by_date: dict[date, ChickenWeight] = {} + fs_by_date: dict[date, FeedSacks] = {} + manual_by_date: dict[date, ManualInput] = {} + + harvest_day_accum = 0.0 # Σ (harvest × age) + harvest_wt_accum = 0.0 # Σ (harvest × batch avg weight) + + for i, day in enumerate(dates): + age = i + live = DOC_IN_COUNT - mort_total - harvest_total + + # --- chicken_counting ----------------------------------------- + quality = "ok" if age < 34 else "atas_only" + coverage = 0.82 + 0.16 * math.sin(i / 1.9) - 0.011 * min(i, 36) + camera_count = max(1, int(round(live * max(coverage, 0.3)))) + cc, _ = ChickenCounting.objects.update_or_create( + cycle=cycle, + date=day, + defaults={ + "total_count": camera_count, + "mortality_count": MORTALITY[i], + }, + ) + cc_by_date[day] = cc + + # --- chicken_weight -------------------------------------------- + weight = AVG_WEIGHT[i] + prev_weight = AVG_WEIGHT[i - 1] if i > 0 else DOC_IN_WEIGHT + adg = _round(weight - prev_weight, 2) if weight else 0.0 + cw, _ = ChickenWeight.objects.update_or_create( + cycle=cycle, + date=day, + defaults={ + "age": age, + "doc_weight": DOC_IN_WEIGHT, + "average_weight": weight, + "chicken_count": SAMPLE_COUNT[i], + "uniformity": UNIFORMITY[i], + "average_daily_gain": adg, + }, + ) + cw_by_date[day] = cw + + # --- feed_sacks ------------------------------------------------ + feed_today = FEED_TODAY[i] + in_today = FEED_IN.get(age, 0) + out_today = OUT_TODAY[i] + feed_total += feed_today + feed_in_total += in_today + out_total += out_today + fs, _ = FeedSacks.objects.update_or_create( + cycle=cycle, + date=day, + defaults={ + "in_today": in_today, + "out_today": out_today, + "in_total": feed_in_total, + "out_total": out_total, + "feed_use_today": feed_today, + "feed_use_total": feed_total, + }, + ) + fs_by_date[day] = fs + + # --- harvest (manual) ------------------------------------------ + harvest_today, harvest_wt_today = HARVEST.get(age, (0, 0)) + if harvest_today: + harvest_total += harvest_today + harvest_weight_total += harvest_today * harvest_wt_today + harvest_day_accum += harvest_today * age + harvest_wt_accum += harvest_today * harvest_wt_today + + # --- manual input ---------------------------------------------- + # Running averages: flock weight before the first harvest, then the + # harvest-weighted running mean carried forward on idle days. + if harvest_today: + avg_hday = harvest_day_accum / harvest_total + avg_hwt = harvest_wt_accum / harvest_total + elif harvest_total == 0: + avg_hday = float(age) + avg_hwt = float(weight) if weight else 0.0 + else: + avg_hday = harvest_day_accum / harvest_total + avg_hwt = harvest_wt_accum / harvest_total + + life = DOC_IN_COUNT - mort_total - harvest_total + lot_weight_g = life * weight if weight else 0.0 + denom = harvest_weight_total + lot_weight_g + fcr = (feed_total * 50_000) / denom if denom > 0 else 0.0 + life_pct = (DOC_IN_COUNT - mort_total) / DOC_IN_COUNT * 100.0 + if avg_hday > 0 and fcr > 0: + eef = life_pct * (avg_hwt / 1000.0) / (fcr * avg_hday) * 100.0 + else: + eef = 0.0 + + manual, _ = ManualInput.objects.update_or_create( + cycle=cycle, + date=day, + defaults={ + "age_manual": age, + "mortality_manual": MORTALITY[i], + "mortality_manual_total": mort_total, + "feed_in_manual": in_today, + "feed_in_manual_total": feed_in_total, + "feed_use_manual": feed_today, + "feed_use_manual_total": feed_total, + "feed_out_manual": out_today, + "feed_out_manual_total": out_total, + "harvest_manual": harvest_today, + "harvest_manual_total": harvest_total, + "harvest_weight_manual": float(harvest_today * harvest_wt_today), + "harvest_weight_manual_total": harvest_weight_total, + "manual_weight": weight, + "average_harvest_day_manual": _round(avg_hday, 4), + "average_harvest_weight_manual": _round(avg_hwt, 4), + "fcr_manual": _round(fcr, 4), + "eef_manual": _round(eef, 4), + }, + ) + manual_by_date[day] = manual + + # --- KPI --------------------------------------------------------- + KPI.objects.update_or_create( + cycle=cycle, + date=day, + defaults={ + "age": age, + "mortality": MORTALITY[i], + "mortality_total": mort_total, + "feed": feed_today, + "feed_total": feed_total, + "harvest": harvest_today, + "harvest_total": harvest_total, + "harvest_weight": float(harvest_today * harvest_wt_today), + "harvest_weight_total": harvest_weight_total, + "chicken_life": life, + "chicken_life_percentage": _round(life_pct, 3), + "iot_weight": _round(lot_weight_g, 2), + "average_harvest_day": _round(avg_hday, 4), + "average_harvest_weight": _round(avg_hwt, 4), + "fcr": _round(fcr, 4), + "eef": _round(eef, 4), + "cc": cc, + "cw": cw, + "fs": fs, + "manual": manual, + }, + ) + + mort_total += MORTALITY[i] + + # --- IoT panel: Kandang 5 sensors with per-house jitter ------------- + panel_count = 0 + for flock_block in iot["flocks"]: + flock = flocks_by_name[flock_block["name"]] + for row in flock_block["rows"]: + day = date.fromisoformat(row["date"]) + avg_temp = float(row["average_temperature"]) + rng.uniform(-0.4, 0.4) + humidity = min(max(float(row["humidity"]) + rng.uniform(-3.0, 3.0), 0.0), 100.0) + wind = max(float(row["wind_speed"]) + rng.uniform(-0.1, 0.1), 0.0) + water = max(float(row["water_total"]) * 0.9 + rng.uniform(-120.0, 120.0), 0.0) + chill = float(row["chill_factor"]) + exp_temp = avg_temp - (70.0 - humidity) / 5.0 - wind * chill + IotPanel.objects.update_or_create( + flock=flock, + date=day, + defaults={ + "wind_speed": _round(wind, 2), + "humidity": _round(humidity, 1), + "water_total": _round(water, 1), + "average_temperature": _round(avg_temp, 2), + "experience_temperature": _round(exp_temp, 4), + }, + ) + panel_count += 1 + + last_kpi = KPI.objects.filter(cycle=cycle).order_by("-date").first() + self.stdout.write( + self.style.SUCCESS( + f"Seeded cycle={cycle.pk} site={site.pk} kandang={kandang.pk} " + f"flocks={Flock.objects.filter(cycle=cycle).count()} " + f"cc={len(cc_by_date)} cw={len(cw_by_date)} fs={len(fs_by_date)} " + f"manual={len(manual_by_date)} kpi={KPI.objects.filter(cycle=cycle).count()} " + f"iot_panel={panel_count} closeout_fcr={last_kpi.fcr if last_kpi else None} " + f"closeout_eef={last_kpi.eef if last_kpi else None}" + ) + ) diff --git a/backend/apps/jobs/management/commands/seed_sukawarna_kandang5.py b/backend/apps/jobs/management/commands/seed_sukawarna_kandang5.py new file mode 100644 index 0000000..d1d3125 --- /dev/null +++ b/backend/apps/jobs/management/commands/seed_sukawarna_kandang5.py @@ -0,0 +1,296 @@ +from __future__ import annotations + +import json +from datetime import date +from pathlib import Path + +from django.core.management.base import BaseCommand, CommandError +from django.db import transaction + +from apps.accounts.models import User +from apps.farms.models import Cycle, Flock, Kandang, Site +from apps.jobs.sukawarna_preview import ( + FEED_REFERENCE_XLSX, + IOT_EXTRACT_JSON, + PREVIEW_XLSX, + as_number, + load_feed_reference, + load_preview, +) +from apps.operations.models import ( + ChickenCounting, + ChickenWeight, + FeedSacks, + IotPanel, + KPI, + ManualInput, +) + +DEFAULT_PASSWORD = "staff123" + +# --- Karung keluar (out) per cycle day 0..48: only during the final week ---- +# "Out" is NOT the same as usage (tuang). It only happens at the very end of the +# cycle and totals ~20 sacks per house, with a handful of sacks per day. +OUT_TODAY = [0] * 42 + [4, 5, 4, 3, 2, 1, 1] + + +class Command(BaseCommand): + help = "Seed Sukawarna / Kandang 5 closed cycle from preview xlsx + IoT extract" + + def add_arguments(self, parser): + parser.add_argument("--password", default=DEFAULT_PASSWORD) + parser.add_argument("--xlsx", default=str(PREVIEW_XLSX)) + parser.add_argument("--iot-json", default=str(IOT_EXTRACT_JSON)) + parser.add_argument("--feed-reference", default=str(FEED_REFERENCE_XLSX)) + parser.add_argument("--no-reset", action="store_true") + + @transaction.atomic + def handle(self, *args, **options): + xlsx = Path(options["xlsx"]) + iot_path = Path(options["iot_json"]) + feed_reference_path = Path(options["feed_reference"]) + if not xlsx.is_file(): + raise CommandError(f"Preview not found: {xlsx}") + if not iot_path.is_file(): + raise CommandError(f"IoT extract not found: {iot_path}") + + sheets = load_preview(xlsx) + iot = json.loads(iot_path.read_text(encoding="utf-8")) + feed_reference = {} + if feed_reference_path.is_file(): + feed_reference = load_feed_reference(feed_reference_path) + else: + self.stderr.write(f"Feed reference not found, continuing without it: {feed_reference_path}") + password = options["password"] + + user, created = User.objects.get_or_create( + user_name="staff", + defaults={"status": User.STATUS_ACTIVE, "is_staff": True}, + ) + user.status = User.STATUS_ACTIVE + user.is_staff = True + user.set_password(password) + user.save() + if created: + self.stdout.write(f"Created user staff / {password}") + else: + self.stdout.write(f"Updated password for staff / {password}") + + site, _ = Site.objects.get_or_create(site_name="Sukawarna", defaults={"user": user}) + if site.user_id != user.pk: + site.user = user + site.save(update_fields=["user", "updated_at"]) + + kandang, _ = Kandang.objects.get_or_create( + kandang_name="Kandang 5", + site=site, + ) + + start_date = date(2026, 5, 22) + end_date = date(2026, 7, 9) + + existing = Cycle.objects.filter(kandang=kandang, start_date=start_date).first() + if existing and not options["no_reset"]: + KPI.objects.filter(cycle=existing).delete() + ChickenCounting.objects.filter(cycle=existing).delete() + ChickenWeight.objects.filter(cycle=existing).delete() + FeedSacks.objects.filter(cycle=existing).delete() + ManualInput.objects.filter(cycle=existing).delete() + IotPanel.objects.filter(flock__cycle=existing).delete() + Flock.objects.filter(cycle=existing).delete() + existing.delete() + self.stdout.write("Reset previous Kandang 5 cycle") + + cycle, cycle_created = Cycle.objects.get_or_create( + kandang=kandang, + start_date=start_date, + defaults={ + "end_date": end_date, + "total_days": 49, + "doc_in_weight": 35, + "doc_in_count": 50000, + "status": Cycle.STATUS_CLOSED, + }, + ) + if not cycle_created: + cycle.end_date = end_date + cycle.total_days = 49 + cycle.doc_in_weight = 35 + cycle.doc_in_count = 50000 + cycle.status = Cycle.STATUS_CLOSED + cycle.save() + + flocks_by_name: dict[str, Flock] = {} + for name in ("Lantai 1", "Lantai 2"): + flock, _ = Flock.objects.get_or_create(flock_name=name, cycle=cycle) + flocks_by_name[name] = flock + + cc_by_date = {} + for row in sheets["chicken_counting"]: + obj, _ = ChickenCounting.objects.update_or_create( + cycle=cycle, + date=row["date"], + defaults={ + "total_count": int(as_number(row.get("total_count"))), + "mortality_count": int(as_number(row.get("mortality_count"))), + }, + ) + cc_by_date[row["date"]] = obj + + cw_by_date = {} + for row in sheets["chicken_weight"]: + obj, _ = ChickenWeight.objects.update_or_create( + cycle=cycle, + date=row["date"], + defaults={ + "age": int(as_number(row.get("age"))), + "doc_weight": int(as_number(row.get("doc_weight"))), + "average_weight": float(as_number(row.get("average_weight"))), + "chicken_count": int(as_number(row.get("chicken_count"))), + "uniformity": float(as_number(row.get("uniformity"))), + "average_daily_gain": float(as_number(row.get("average_daily_gain"))), + }, + ) + cw_by_date[row["date"]] = obj + + fs_by_date = {} + fs_in_total = 0 + fs_use_total = 0 + fs_out_total = 0 + for row in sheets["feed_sacks"]: + day = row["date"] + ref = feed_reference.get(day.isoformat()) + in_today = int(ref["iot_in"]) if ref else int(as_number(row.get("in_today"))) + feed_use_today = ( + int(ref["iot_use"]) if ref else int(as_number(row.get("out_today"))) + ) + out_today = OUT_TODAY[(day - start_date).days] + fs_in_total += in_today + fs_use_total += feed_use_today + fs_out_total += out_today + obj, _ = FeedSacks.objects.update_or_create( + cycle=cycle, + date=day, + defaults={ + "in_today": in_today, + "out_today": out_today, + "in_total": fs_in_total, + "out_total": fs_out_total, + "feed_use_today": feed_use_today, + "feed_use_total": fs_use_total, + }, + ) + fs_by_date[day] = obj + + manual_by_date = {} + manual_in_total = 0 + manual_use_total = 0 + manual_out_total = 0 + for row in sheets["manual_input"]: + day = row["date"] + ref = feed_reference.get(day.isoformat()) + feed_in_manual = int(ref["manual_in"]) if ref else ( + int(fs_row.in_today) if (fs_row := fs_by_date.get(day)) else 0 + ) + feed_use_manual = int(ref["manual_use"]) if ref else int(as_number(row.get("feed_manual"))) + feed_out_manual = OUT_TODAY[(day - start_date).days] + manual_in_total += feed_in_manual + manual_use_total += feed_use_manual + manual_out_total += feed_out_manual + obj, _ = ManualInput.objects.update_or_create( + cycle=cycle, + date=day, + defaults={ + "age_manual": int(as_number(row.get("age_manual"))), + "mortality_manual": int(as_number(row.get("mortality_manual"))), + "mortality_manual_total": int(as_number(row.get("mortality_manual_total"))), + "feed_in_manual": feed_in_manual, + "feed_in_manual_total": manual_in_total, + "feed_use_manual": feed_use_manual, + "feed_use_manual_total": manual_use_total, + "feed_out_manual": feed_out_manual, + "feed_out_manual_total": manual_out_total, + "harvest_manual": int(as_number(row.get("harvest_manual"))), + "harvest_manual_total": int(as_number(row.get("harvest_manual_total"))), + "harvest_weight_manual": float(as_number(row.get("harvest_weight_manual"))), + "harvest_weight_manual_total": float( + as_number(row.get("harvest_weight_manual_total")) + ), + "manual_weight": float( + as_number(row.get("manual_weight_float") or row.get("manual_weight")) + ), + "average_harvest_day_manual": float( + as_number(row.get("average_harvest_day_manual")) + ), + "average_harvest_weight_manual": float( + as_number(row.get("average_harvest_weight_manual")) + ), + "fcr_manual": float(as_number(row.get("fcr_manual"))), + "eef_manual": float(as_number(row.get("eef_manual"))), + }, + ) + manual_by_date[day] = obj + + missing = [] + for row in sheets["kpi_preview"]: + day = row["date"] + try: + KPI.objects.update_or_create( + cycle=cycle, + date=day, + defaults={ + "age": int(as_number(row.get("age"))), + "mortality": int(as_number(row.get("deplesi"))), + "mortality_total": int(as_number(row.get("deplesi_total"))), + "feed": int(as_number(row.get("feed_use_manual"))), + "feed_total": int(as_number(row.get("feed_use_total_manual"))), + "harvest": int(as_number(row.get("panen"))), + "harvest_total": int(as_number(row.get("panen_total"))), + "harvest_weight": float(as_number(row.get("harvest_weight_g"))), + "harvest_weight_total": float(as_number(row.get("harvest_weight_total_g"))), + "chicken_life": int(as_number(row.get("chicken_life"))), + "chicken_life_percentage": float(as_number(row.get("chicken_life_pct"))), + "iot_weight": float(as_number(row.get("lot_weight_g"))), + "average_harvest_day": float(as_number(row.get("avg_harvest_day"))), + "average_harvest_weight": float(as_number(row.get("avg_harvest_weight_g"))), + "fcr": float(as_number(row.get("fcr"))), + "eef": float(as_number(row.get("eef"))), + "cc": cc_by_date[day], + "cw": cw_by_date[day], + "fs": fs_by_date[day], + "manual": manual_by_date[day], + }, + ) + except KeyError: + missing.append(str(day)) + if missing: + raise CommandError(f"KPI dates missing source rows: {missing}") + + panel_count = 0 + for flock_block in iot["flocks"]: + flock = flocks_by_name[flock_block["name"]] + for row in flock_block["rows"]: + day = date.fromisoformat(row["date"]) + IotPanel.objects.update_or_create( + flock=flock, + date=day, + defaults={ + "wind_speed": float(row["wind_speed"]), + "humidity": float(row["humidity"]), + "water_total": float(row["water_total"]), + "average_temperature": float(row["average_temperature"]), + "experience_temperature": float(row["experience_temperature"]), + }, + ) + panel_count += 1 + + last_kpi = KPI.objects.filter(cycle=cycle).order_by("-date").first() + self.stdout.write( + self.style.SUCCESS( + f"Seeded cycle={cycle.pk} site={site.pk} kandang={kandang.pk} " + f"flocks={Flock.objects.filter(cycle=cycle).count()} " + f"cc={len(cc_by_date)} cw={len(cw_by_date)} fs={len(fs_by_date)} " + f"manual={len(manual_by_date)} kpi={KPI.objects.filter(cycle=cycle).count()} " + f"iot_panel={panel_count} closeout_fcr={last_kpi.fcr if last_kpi else None}" + ) + ) diff --git a/backend/apps/jobs/management/commands/sync_karung_from_web_admin.py b/backend/apps/jobs/management/commands/sync_karung_from_web_admin.py new file mode 100644 index 0000000..73622ee --- /dev/null +++ b/backend/apps/jobs/management/commands/sync_karung_from_web_admin.py @@ -0,0 +1,28 @@ +from django.conf import settings +from django.core.management.base import BaseCommand + +from apps.farms.models import Cycle +from apps.operations.services.karung_web import KarungWebError, request_karung + + +class Command(BaseCommand): + help = "Sync FeedSacks rows from karung-web-admin active sections" + + def handle(self, *args, **options): + if not settings.KARUNG_WEB_ADMIN_SYNC_ENABLED: + self.stdout.write("KARUNG_WEB_ADMIN_SYNC_ENABLED=false; skipping") + return + synced = 0 + for cycle in Cycle.objects.filter(status=Cycle.STATUS_ACTIVE): + try: + feed_sack, summary = request_karung(cycle, section="today") + synced += 1 + self.stdout.write( + f"cycle={cycle.pk} in_today={feed_sack.in_today} " + f"out_today={feed_sack.out_today} date={summary.get('snapshot_date')}" + ) + except KarungWebError as exc: + self.stderr.write(f"cycle={cycle.pk} error={exc}") + except Exception as exc: # noqa: BLE001 + self.stderr.write(f"cycle={cycle.pk} unexpected={exc}") + self.stdout.write(self.style.SUCCESS(f"Synced {synced} feed sack row(s)")) diff --git a/backend/apps/jobs/sukawarna_preview.py b/backend/apps/jobs/sukawarna_preview.py new file mode 100644 index 0000000..8632184 --- /dev/null +++ b/backend/apps/jobs/sukawarna_preview.py @@ -0,0 +1,104 @@ +"""Load Sukawarna / Kandang 5 preview sheets into ORM-ready row dicts.""" + +from __future__ import annotations + +from datetime import date, datetime +from pathlib import Path +from typing import Any + +from openpyxl import load_workbook + +REPO_ROOT = Path(__file__).resolve().parents[3] +PREVIEW_XLSX = REPO_ROOT / "backup" / "kandang5_sukawarna_preview.xlsx" +IOT_EXTRACT_JSON = REPO_ROOT / "scripts" / "iot_panel_cycle_extract.json" +# Final-cycle report (reference for manual feed use on Kandang 5). +FEED_REFERENCE_XLSX = ( + REPO_ROOT + / "backup" + / "Laporan_Akhir-Siklus_Sukawarna_Kandang-Atas_Akhir-Siklus_2026-05-22_sd_2026-07-09.xlsx" +) + + +def as_date(value: Any) -> date | None: + if value is None: + return None + if isinstance(value, datetime): + return value.date() + if isinstance(value, date): + return value + text = str(value).strip() + if len(text) >= 10 and text[0].isdigit() and text[4] == "-": + return date.fromisoformat(text[:10]) + return None + + +def as_number(value: Any, default: float | int = 0): + if value is None or value == "": + return default + if isinstance(value, (int, float)) and not isinstance(value, bool): + return value + try: + if isinstance(value, str) and "." not in value: + return int(value) + return float(value) + except (TypeError, ValueError): + return default + + +def dated_rows(ws) -> list[dict[str, Any]]: + headers = [cell.value for cell in next(ws.iter_rows(min_row=1, max_row=1))] + rows: list[dict[str, Any]] = [] + for raw in ws.iter_rows(min_row=2, values_only=True): + mapped = {str(headers[i]): raw[i] for i in range(len(headers))} + parsed = as_date(mapped.get("date")) + if parsed is None: + continue + mapped["date"] = parsed + rows.append(mapped) + return rows + + +def load_preview(path: Path | None = None) -> dict[str, list[dict[str, Any]]]: + workbook = load_workbook(path or PREVIEW_XLSX, data_only=True) + return { + "chicken_counting": dated_rows(workbook["chicken_counting"]), + "chicken_weight": dated_rows(workbook["chicken_weight"]), + "feed_sacks": dated_rows(workbook["feed_sacks"]), + "manual_input": dated_rows(workbook["manual_input"]), + "kpi_preview": dated_rows(workbook["kpi_preview"]), + } + + +def load_feed_reference(path: Path | None = None) -> dict[str, dict[str, int]]: + """Load the final-cycle report's Feed In / Feed Use sheets. + + Returns ``{date: {manual_in, iot_in, manual_use, iot_use}}``. These values are + the authoritative reference for the karung "Manual" / "IOT" columns. + """ + workbook = load_workbook(path or FEED_REFERENCE_XLSX, data_only=True) + + feed_in: dict[str, dict[str, int]] = {} + for raw in workbook["Feed In"].iter_rows(min_row=3, values_only=True): + parsed = as_date(raw[0]) + if parsed is None: + continue + feed_in[parsed.isoformat()] = { + "manual_in": int(as_number(raw[1])), + "iot_in": int(as_number(raw[2])), + } + + feed_use: dict[str, dict[str, int]] = {} + for raw in workbook["Feed Use"].iter_rows(min_row=3, values_only=True): + parsed = as_date(raw[0]) + if parsed is None: + continue + feed_use[parsed.isoformat()] = { + "manual_use": int(as_number(raw[2])), + "iot_use": int(as_number(raw[3])), + } + + merged: dict[str, dict[str, int]] = {} + for key in feed_in: + if key in feed_use: + merged[key] = {**feed_in[key], **feed_use[key]} + return merged diff --git a/backend/apps/jobs/tests.py b/backend/apps/jobs/tests.py new file mode 100644 index 0000000..52b2a65 --- /dev/null +++ b/backend/apps/jobs/tests.py @@ -0,0 +1,32 @@ +from datetime import date, datetime +from io import BytesIO + +from django.test import SimpleTestCase +from openpyxl import Workbook + +from apps.jobs.sukawarna_preview import as_date, as_number, dated_rows + + +class SukawarnaPreviewHelpersTests(SimpleTestCase): + def test_as_date_accepts_iso_and_datetime(self): + self.assertEqual(as_date("2026-05-22"), date(2026, 5, 22)) + self.assertEqual(as_date(datetime(2026, 7, 9, 12, 0)), date(2026, 7, 9)) + self.assertIsNone(as_date("grams")) + self.assertIsNone(as_date("karung tuang Jul 4-8 updated")) + + def test_dated_rows_skips_note_rows(self): + wb = Workbook() + ws = wb.active + ws.append(["date", "total_count"]) + ws.append(["grams", "grams"]) + ws.append(["2026-05-22", 13980]) + bio = BytesIO() + wb.save(bio) + bio.seek(0) + from openpyxl import load_workbook + + loaded = load_workbook(bio, data_only=True).active + rows = dated_rows(loaded) + self.assertEqual(len(rows), 1) + self.assertEqual(rows[0]["date"], date(2026, 5, 22)) + self.assertEqual(as_number(rows[0]["total_count"]), 13980) diff --git a/backend/apps/operations/__init__.py b/backend/apps/operations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/apps/operations/admin.py b/backend/apps/operations/admin.py new file mode 100644 index 0000000..d614f70 --- /dev/null +++ b/backend/apps/operations/admin.py @@ -0,0 +1,19 @@ +from django.contrib import admin + +from apps.operations.models import ( + AIInsight, + ChickenCounting, + ChickenWeight, + FeedSacks, + IotPanel, + KPI, + ManualInput, +) + +admin.site.register(KPI) +admin.site.register(ManualInput) +admin.site.register(ChickenCounting) +admin.site.register(ChickenWeight) +admin.site.register(FeedSacks) +admin.site.register(IotPanel) +admin.site.register(AIInsight) diff --git a/backend/apps/operations/apps.py b/backend/apps/operations/apps.py new file mode 100644 index 0000000..832bcfd --- /dev/null +++ b/backend/apps/operations/apps.py @@ -0,0 +1,8 @@ +from django.apps import AppConfig + + +class OperationsConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "apps.operations" + label = "operations" + verbose_name = "Operations" diff --git a/backend/apps/operations/migrations/0001_initial.py b/backend/apps/operations/migrations/0001_initial.py new file mode 100644 index 0000000..40eba52 --- /dev/null +++ b/backend/apps/operations/migrations/0001_initial.py @@ -0,0 +1,199 @@ +# Generated by Django 5.2.17 on 2026-08-18 08:01 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('farms', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='AIInsight', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date', models.DateField()), + ('insight_text', models.TextField()), + ('alert', models.CharField(max_length=100)), + ('section', models.CharField(max_length=100)), + ('session', models.CharField(max_length=100)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('cycle', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ai_insights', to='farms.cycle')), + ], + options={ + 'db_table': 'ai_insight', + 'ordering': ['-date'], + }, + ), + migrations.CreateModel( + name='ChickenCounting', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date', models.DateField()), + ('total_count', models.IntegerField(default=0)), + ('mortality_count', models.IntegerField(default=0)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('cycle', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='chicken_countings', to='farms.cycle')), + ], + options={ + 'db_table': 'chicken_counting', + 'ordering': ['-date'], + }, + ), + migrations.CreateModel( + name='ChickenWeight', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date', models.DateField()), + ('age', models.IntegerField()), + ('doc_weight', models.IntegerField()), + ('average_weight', models.FloatField()), + ('chicken_count', models.IntegerField()), + ('uniformity', models.FloatField()), + ('average_daily_gain', models.FloatField()), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('cycle', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='chicken_weights', to='farms.cycle')), + ], + options={ + 'db_table': 'chicken_weight', + 'ordering': ['-date'], + }, + ), + migrations.CreateModel( + name='FeedSacks', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date', models.DateField()), + ('in_today', models.IntegerField(default=0)), + ('out_today', models.IntegerField(default=0)), + ('in_total', models.IntegerField(default=0)), + ('out_total', models.IntegerField(default=0)), + ('feed_use_today', models.IntegerField(default=0)), + ('feed_use_total', models.IntegerField(default=0)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('cycle', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='feed_sacks', to='farms.cycle')), + ], + options={ + 'verbose_name_plural': 'Feed sacks', + 'db_table': 'feed_sacks', + 'ordering': ['-date'], + }, + ), + migrations.CreateModel( + name='IotPanel', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date', models.DateField()), + ('wind_speed', models.FloatField(default=0.0)), + ('humidity', models.FloatField(default=0.0)), + ('water_total', models.FloatField(default=0.0)), + ('average_temperature', models.FloatField(default=0.0)), + ('experience_temperature', models.FloatField(default=0.0)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('flock', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='iot_panels', to='farms.flock')), + ], + options={ + 'verbose_name': 'IoT Panel', + 'verbose_name_plural': 'IoT Panels', + 'db_table': 'iot_panel', + 'ordering': ['-date'], + }, + ), + migrations.CreateModel( + name='ManualInput', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date', models.DateField()), + ('age_manual', models.IntegerField(default=0)), + ('mortality_manual', models.IntegerField(default=0)), + ('mortality_manual_total', models.IntegerField(default=0)), + ('feed_manual', models.IntegerField(default=0)), + ('feed_manual_total', models.IntegerField(default=0)), + ('harvest_manual', models.IntegerField(default=0)), + ('harvest_manual_total', models.IntegerField(default=0)), + ('harvest_weight_manual', models.IntegerField(default=0)), + ('harvest_weight_manual_total', models.IntegerField(default=0)), + ('manual_weight_float', models.FloatField(default=0.0)), + ('average_harvest_day_manual', models.FloatField(default=0.0)), + ('average_harvest_weight_manual', models.FloatField(default=0.0)), + ('fcr_manual', models.FloatField(default=0.0)), + ('eef_manual', models.FloatField(default=0.0)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('cycle', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='manual_inputs', to='farms.cycle')), + ], + options={ + 'db_table': 'manual_input', + 'ordering': ['-date'], + }, + ), + migrations.CreateModel( + name='KPI', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date', models.DateField()), + ('age', models.IntegerField(default=0)), + ('mortality', models.IntegerField(default=0)), + ('mortality_total', models.IntegerField(default=0)), + ('feed', models.IntegerField(default=0)), + ('feed_total', models.IntegerField(default=0)), + ('harvest', models.IntegerField(default=0)), + ('harvest_total', models.IntegerField(default=0)), + ('harvest_weight', models.IntegerField(default=0)), + ('harvest_weight_total', models.IntegerField(default=0)), + ('chicken_life', models.IntegerField(default=0)), + ('chicken_life_percentage', models.FloatField(default=0.0)), + ('lot_weight', models.FloatField(default=0.0)), + ('average_harvest_day', models.FloatField(default=0.0)), + ('average_harvest_weight', models.FloatField(default=0.0)), + ('fcr', models.FloatField(default=0.0)), + ('eef', models.FloatField(default=0.0)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('cc', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, related_name='kpis', to='operations.chickencounting')), + ('cw', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, related_name='kpis', to='operations.chickenweight')), + ('cycle', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='kpis', to='farms.cycle')), + ('fs', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, related_name='kpis', to='operations.feedsacks')), + ('manual', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, related_name='kpis', to='operations.manualinput')), + ], + options={ + 'verbose_name_plural': 'KPIs', + 'db_table': 'kpi', + 'ordering': ['-date'], + }, + ), + migrations.AddConstraint( + model_name='chickencounting', + constraint=models.UniqueConstraint(fields=('cycle', 'date'), name='uniq_chicken_counting_cycle_date'), + ), + migrations.AddConstraint( + model_name='chickenweight', + constraint=models.UniqueConstraint(fields=('cycle', 'date'), name='uniq_cw_cycle_date'), + ), + migrations.AddConstraint( + model_name='feedsacks', + constraint=models.UniqueConstraint(fields=('cycle', 'date'), name='uniq_feed_sacks_cycle_date'), + ), + migrations.AddConstraint( + model_name='iotpanel', + constraint=models.UniqueConstraint(fields=('flock', 'date'), name='uniq_iot_panel_flock_date'), + ), + migrations.AddConstraint( + model_name='manualinput', + constraint=models.UniqueConstraint(fields=('cycle', 'date'), name='uniq_manual_input_cycle_date'), + ), + migrations.AddConstraint( + model_name='kpi', + constraint=models.UniqueConstraint(fields=('cycle', 'date'), name='uniq_kpi_cycle_date'), + ), + ] diff --git a/backend/apps/operations/migrations/0002_harvest_weight_float.py b/backend/apps/operations/migrations/0002_harvest_weight_float.py new file mode 100644 index 0000000..40cb586 --- /dev/null +++ b/backend/apps/operations/migrations/0002_harvest_weight_float.py @@ -0,0 +1,33 @@ +# Generated by Django 5.2.17 on 2026-08-19 07:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('operations', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='kpi', + name='harvest_weight', + field=models.FloatField(default=0.0), + ), + migrations.AlterField( + model_name='kpi', + name='harvest_weight_total', + field=models.FloatField(default=0.0), + ), + migrations.AlterField( + model_name='manualinput', + name='harvest_weight_manual', + field=models.FloatField(default=0.0), + ), + migrations.AlterField( + model_name='manualinput', + name='harvest_weight_manual_total', + field=models.FloatField(default=0.0), + ), + ] diff --git a/backend/apps/operations/migrations/0003_erd_named_primary_keys.py b/backend/apps/operations/migrations/0003_erd_named_primary_keys.py new file mode 100644 index 0000000..8c09ea2 --- /dev/null +++ b/backend/apps/operations/migrations/0003_erd_named_primary_keys.py @@ -0,0 +1,18 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("farms", "0005_erd_named_primary_keys"), + ("operations", "0002_harvest_weight_float"), + ] + + operations = [ + migrations.RenameField(model_name="iotpanel", old_name="id", new_name="panel_id"), + migrations.RenameField(model_name="feedsacks", old_name="id", new_name="fs_id"), + migrations.RenameField(model_name="chickencounting", old_name="id", new_name="cc_id"), + migrations.RenameField(model_name="chickenweight", old_name="id", new_name="cw_id"), + migrations.RenameField(model_name="manualinput", old_name="id", new_name="manual_id"), + migrations.RenameField(model_name="kpi", old_name="id", new_name="kpi_id"), + ] diff --git a/backend/apps/operations/migrations/0004_erd_column_updates.py b/backend/apps/operations/migrations/0004_erd_column_updates.py new file mode 100644 index 0000000..9ec4922 --- /dev/null +++ b/backend/apps/operations/migrations/0004_erd_column_updates.py @@ -0,0 +1,25 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("operations", "0003_erd_named_primary_keys"), + ] + + operations = [ + migrations.RenameField( + model_name="manualinput", + old_name="manual_weight_float", + new_name="manual_weight", + ), + migrations.RenameField( + model_name="kpi", + old_name="lot_weight", + new_name="iot_weight", + ), + migrations.AlterField( + model_name="chickenweight", + name="doc_weight", + field=models.FloatField(), + ), + ] diff --git a/backend/apps/operations/migrations/0005_erd_feed_and_doc_weight.py b/backend/apps/operations/migrations/0005_erd_feed_and_doc_weight.py new file mode 100644 index 0000000..248171f --- /dev/null +++ b/backend/apps/operations/migrations/0005_erd_feed_and_doc_weight.py @@ -0,0 +1,55 @@ +from django.db import migrations, models + + +def backfill_feed_in_from_feed_sacks(apps, schema_editor): + ManualInput = apps.get_model("operations", "ManualInput") + FeedSacks = apps.get_model("operations", "FeedSacks") + + feed_by_cycle_date = { + (fs.cycle_id, fs.date): fs + for fs in FeedSacks.objects.all().only("cycle_id", "date", "in_today", "in_total") + } + + for manual in ManualInput.objects.all().only("cycle_id", "date"): + fs = feed_by_cycle_date.get((manual.cycle_id, manual.date)) + if fs is None: + continue + manual.feed_in_manual = fs.in_today + manual.feed_in_manual_total = fs.in_total + manual.save(update_fields=["feed_in_manual", "feed_in_manual_total", "updated_at"]) + + +class Migration(migrations.Migration): + + dependencies = [ + ("operations", "0004_erd_column_updates"), + ] + + operations = [ + migrations.RenameField( + model_name="manualinput", + old_name="feed_manual", + new_name="feed_use_manual", + ), + migrations.RenameField( + model_name="manualinput", + old_name="feed_manual_total", + new_name="feed_use_manual_total", + ), + migrations.AddField( + model_name="manualinput", + name="feed_in_manual", + field=models.IntegerField(default=0), + ), + migrations.AddField( + model_name="manualinput", + name="feed_in_manual_total", + field=models.IntegerField(default=0), + ), + migrations.RunPython(backfill_feed_in_from_feed_sacks, migrations.RunPython.noop), + migrations.AlterField( + model_name="chickenweight", + name="doc_weight", + field=models.IntegerField(), + ), + ] diff --git a/backend/apps/operations/migrations/0006_iotpanel_timestamp.py b/backend/apps/operations/migrations/0006_iotpanel_timestamp.py new file mode 100644 index 0000000..b386593 --- /dev/null +++ b/backend/apps/operations/migrations/0006_iotpanel_timestamp.py @@ -0,0 +1,27 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("farms", "0007_cycle_doc_in_weight_int"), + ("operations", "0005_erd_feed_and_doc_weight"), + ] + + operations = [ + migrations.RemoveConstraint( + model_name="iotpanel", + name="uniq_iot_panel_flock_date", + ), + migrations.AddField( + model_name="iotpanel", + name="timestamp", + field=models.DateTimeField(blank=True, null=True), + ), + migrations.AddConstraint( + model_name="iotpanel", + constraint=models.UniqueConstraint( + fields=("flock", "timestamp"), name="uniq_iot_panel_flock_timestamp" + ), + ), + ] \ No newline at end of file diff --git a/backend/apps/operations/migrations/0007_backfill_iotpanel_timestamp.py b/backend/apps/operations/migrations/0007_backfill_iotpanel_timestamp.py new file mode 100644 index 0000000..c77d8a5 --- /dev/null +++ b/backend/apps/operations/migrations/0007_backfill_iotpanel_timestamp.py @@ -0,0 +1,29 @@ +from datetime import datetime, time + +from django.db import migrations +from django.utils import timezone + + +def backfill_timestamps(apps, schema_editor): + IotPanel = apps.get_model("operations", "IotPanel") + for row in IotPanel.objects.filter(timestamp__isnull=True): + row.timestamp = timezone.make_aware( + datetime.combine(row.date, time(0, 0)), timezone.get_current_timezone() + ) + row.save(update_fields=["timestamp"]) + + +def unset_timestamps(apps, schema_editor): + IotPanel = apps.get_model("operations", "IotPanel") + IotPanel.objects.update(timestamp=None) + + +class Migration(migrations.Migration): + + dependencies = [ + ("operations", "0006_iotpanel_timestamp"), + ] + + operations = [ + migrations.RunPython(backfill_timestamps, unset_timestamps), + ] \ No newline at end of file diff --git a/backend/apps/operations/migrations/0008_manualinput_feed_out_manual.py b/backend/apps/operations/migrations/0008_manualinput_feed_out_manual.py new file mode 100644 index 0000000..dafb4ba --- /dev/null +++ b/backend/apps/operations/migrations/0008_manualinput_feed_out_manual.py @@ -0,0 +1,21 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("operations", "0007_backfill_iotpanel_timestamp"), + ] + + operations = [ + migrations.AddField( + model_name="manualinput", + name="feed_out_manual", + field=models.IntegerField(default=0), + ), + migrations.AddField( + model_name="manualinput", + name="feed_out_manual_total", + field=models.IntegerField(default=0), + ), + ] \ No newline at end of file diff --git a/backend/apps/operations/migrations/0009_reportsnapshot.py b/backend/apps/operations/migrations/0009_reportsnapshot.py new file mode 100644 index 0000000..c4b9589 --- /dev/null +++ b/backend/apps/operations/migrations/0009_reportsnapshot.py @@ -0,0 +1,61 @@ +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("farms", "0008_cycle_feed_initial_balance"), + ("operations", "0008_manualinput_feed_out_manual"), + ] + + operations = [ + migrations.CreateModel( + name="ReportSnapshot", + fields=[ + ( + "id", + models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID"), + ), + ( + "report_type", + models.CharField( + choices=[("daily", "Daily"), ("end_cycle", "End Cycle")], max_length=20 + ), + ), + ("up_to_day", models.IntegerField(default=0)), + ("payload", models.JSONField(default=dict)), + ("generated_at", models.DateTimeField()), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ( + "cycle", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="report_snapshots", + to="farms.cycle", + ), + ), + ( + "kandang", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="report_snapshots", + to="farms.kandang", + ), + ), + ], + options={ + "verbose_name": "Report Snapshot", + "verbose_name_plural": "Report Snapshots", + "db_table": "report_snapshot", + "ordering": ["-updated_at"], + "constraints": [ + models.UniqueConstraint( + fields=("cycle", "kandang", "report_type"), + name="uniq_report_snapshot_cycle_kandang_type", + ) + ], + }, + ), + ] \ No newline at end of file diff --git a/backend/apps/operations/migrations/0010_delete_reportsnapshot.py b/backend/apps/operations/migrations/0010_delete_reportsnapshot.py new file mode 100644 index 0000000..04f509f --- /dev/null +++ b/backend/apps/operations/migrations/0010_delete_reportsnapshot.py @@ -0,0 +1,14 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("operations", "0009_reportsnapshot"), + ] + + operations = [ + migrations.DeleteModel( + name="ReportSnapshot", + ), + ] \ No newline at end of file diff --git a/backend/apps/operations/migrations/__init__.py b/backend/apps/operations/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/apps/operations/models.py b/backend/apps/operations/models.py new file mode 100644 index 0000000..06c15e3 --- /dev/null +++ b/backend/apps/operations/models.py @@ -0,0 +1,198 @@ +from django.db import models +from wagtail.admin.panels import FieldPanel +from wagtail.snippets.models import register_snippet + +from apps.farms.models import Cycle, Flock + + +@register_snippet +class IotPanel(models.Model): + panel_id = models.BigAutoField(primary_key=True) + date = models.DateField() + timestamp = models.DateTimeField(null=True, blank=True) + wind_speed = models.FloatField(default=0.0) + humidity = models.FloatField(default=0.0) + water_total = models.FloatField(default=0.0) + average_temperature = models.FloatField(default=0.0) + experience_temperature = models.FloatField(default=0.0) + flock = models.ForeignKey(Flock, on_delete=models.CASCADE, related_name="iot_panels") + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + panels = [FieldPanel("flock"), FieldPanel("date"), FieldPanel("average_temperature")] + + class Meta: + db_table = "iot_panel" + ordering = ["-date"] + verbose_name = "IoT Panel" + verbose_name_plural = "IoT Panels" + constraints = [ + models.UniqueConstraint(fields=["flock", "timestamp"], name="uniq_iot_panel_flock_timestamp") + ] + + +@register_snippet +class AIInsight(models.Model): + date = models.DateField() + insight_text = models.TextField() + alert = models.CharField(max_length=100) + section = models.CharField(max_length=100) + session = models.CharField(max_length=100) + cycle = models.ForeignKey(Cycle, on_delete=models.CASCADE, related_name="ai_insights") + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + panels = [FieldPanel("cycle"), FieldPanel("date"), FieldPanel("insight_text"), FieldPanel("alert")] + + class Meta: + db_table = "ai_insight" + ordering = ["-date"] + + +@register_snippet +class FeedSacks(models.Model): + fs_id = models.BigAutoField(primary_key=True) + date = models.DateField() + in_today = models.IntegerField(default=0) + out_today = models.IntegerField(default=0) + in_total = models.IntegerField(default=0) + out_total = models.IntegerField(default=0) + feed_use_today = models.IntegerField(default=0) + feed_use_total = models.IntegerField(default=0) + cycle = models.ForeignKey(Cycle, on_delete=models.CASCADE, related_name="feed_sacks") + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + panels = [FieldPanel("cycle"), FieldPanel("date"), FieldPanel("in_today"), FieldPanel("out_today")] + + class Meta: + db_table = "feed_sacks" + ordering = ["-date"] + verbose_name_plural = "Feed sacks" + constraints = [ + models.UniqueConstraint(fields=["cycle", "date"], name="uniq_feed_sacks_cycle_date") + ] + + +@register_snippet +class ChickenCounting(models.Model): + cc_id = models.BigAutoField(primary_key=True) + date = models.DateField() + total_count = models.IntegerField(default=0) + mortality_count = models.IntegerField(default=0) + cycle = models.ForeignKey(Cycle, on_delete=models.CASCADE, related_name="chicken_countings") + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + panels = [FieldPanel("cycle"), FieldPanel("date"), FieldPanel("total_count")] + + class Meta: + db_table = "chicken_counting" + ordering = ["-date"] + constraints = [ + models.UniqueConstraint(fields=["cycle", "date"], name="uniq_chicken_counting_cycle_date") + ] + + +@register_snippet +class ChickenWeight(models.Model): + cw_id = models.BigAutoField(primary_key=True) + date = models.DateField() + age = models.IntegerField() + doc_weight = models.IntegerField() + average_weight = models.FloatField() + chicken_count = models.IntegerField() + uniformity = models.FloatField() + average_daily_gain = models.FloatField() + cycle = models.ForeignKey(Cycle, on_delete=models.CASCADE, related_name="chicken_weights") + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + panels = [ + FieldPanel("cycle"), + FieldPanel("date"), + FieldPanel("average_weight"), + FieldPanel("uniformity"), + ] + + class Meta: + db_table = "chicken_weight" + ordering = ["-date"] + constraints = [ + models.UniqueConstraint(fields=["cycle", "date"], name="uniq_cw_cycle_date") + ] + + +@register_snippet +class ManualInput(models.Model): + manual_id = models.BigAutoField(primary_key=True) + date = models.DateField() + age_manual = models.IntegerField(default=0) + mortality_manual = models.IntegerField(default=0) + mortality_manual_total = models.IntegerField(default=0) + feed_in_manual = models.IntegerField(default=0) + feed_use_manual = models.IntegerField(default=0) + feed_in_manual_total = models.IntegerField(default=0) + feed_use_manual_total = models.IntegerField(default=0) + feed_out_manual = models.IntegerField(default=0) + feed_out_manual_total = models.IntegerField(default=0) + harvest_manual = models.IntegerField(default=0) + harvest_manual_total = models.IntegerField(default=0) + harvest_weight_manual = models.FloatField(default=0.0) + harvest_weight_manual_total = models.FloatField(default=0.0) + manual_weight = models.FloatField(default=0.0) + average_harvest_day_manual = models.FloatField(default=0.0) + average_harvest_weight_manual = models.FloatField(default=0.0) + fcr_manual = models.FloatField(default=0.0) + eef_manual = models.FloatField(default=0.0) + cycle = models.ForeignKey(Cycle, on_delete=models.CASCADE, related_name="manual_inputs") + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + panels = [FieldPanel("cycle"), FieldPanel("date"), FieldPanel("age_manual"), FieldPanel("fcr_manual")] + + class Meta: + db_table = "manual_input" + ordering = ["-date"] + constraints = [ + models.UniqueConstraint(fields=["cycle", "date"], name="uniq_manual_input_cycle_date") + ] + + +@register_snippet +class KPI(models.Model): + kpi_id = models.BigAutoField(primary_key=True) + date = models.DateField() + age = models.IntegerField(default=0) + mortality = models.IntegerField(default=0) + mortality_total = models.IntegerField(default=0) + feed = models.IntegerField(default=0) + feed_total = models.IntegerField(default=0) + harvest = models.IntegerField(default=0) + harvest_total = models.IntegerField(default=0) + harvest_weight = models.FloatField(default=0.0) + harvest_weight_total = models.FloatField(default=0.0) + chicken_life = models.IntegerField(default=0) + chicken_life_percentage = models.FloatField(default=0.0) + iot_weight = models.FloatField(default=0.0) + average_harvest_day = models.FloatField(default=0.0) + average_harvest_weight = models.FloatField(default=0.0) + fcr = models.FloatField(default=0.0) + eef = models.FloatField(default=0.0) + cycle = models.ForeignKey(Cycle, on_delete=models.CASCADE, related_name="kpis") + cc = models.ForeignKey(ChickenCounting, on_delete=models.RESTRICT, related_name="kpis") + cw = models.ForeignKey(ChickenWeight, on_delete=models.RESTRICT, related_name="kpis") + fs = models.ForeignKey(FeedSacks, on_delete=models.RESTRICT, related_name="kpis") + manual = models.ForeignKey(ManualInput, on_delete=models.RESTRICT, related_name="kpis") + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + panels = [FieldPanel("cycle"), FieldPanel("date"), FieldPanel("age"), FieldPanel("fcr"), FieldPanel("eef")] + + class Meta: + db_table = "kpi" + ordering = ["-date"] + verbose_name_plural = "KPIs" + constraints = [ + models.UniqueConstraint(fields=["cycle", "date"], name="uniq_kpi_cycle_date") + ] diff --git a/backend/apps/operations/serializers.py b/backend/apps/operations/serializers.py new file mode 100644 index 0000000..e177fab --- /dev/null +++ b/backend/apps/operations/serializers.py @@ -0,0 +1,135 @@ +from django.db import transaction +from rest_framework import serializers + +from apps.operations.models import ( + AIInsight, + ChickenCounting, + ChickenWeight, + FeedSacks, + IotPanel, + KPI, + ManualInput, +) +from apps.accounts.serializers import PkAsIdMixin +from apps.operations.services.manual_input import recompute_manual_totals + + +class CycleContextMixin(serializers.Serializer): + kandang = serializers.IntegerField(source="cycle.kandang_id", read_only=True) + flock_id = serializers.SerializerMethodField() + + def get_flock_id(self, obj): + flock = obj.cycle.flocks.order_by("flock_id").first() + return flock.pk if flock is not None else None + + +class KPISerializer(PkAsIdMixin, CycleContextMixin, serializers.ModelSerializer): + class Meta: + model = KPI + fields = "__all__" + read_only_fields = ["id", "created_at", "updated_at"] + + +class ManualInputSerializer(PkAsIdMixin, CycleContextMixin, serializers.ModelSerializer): + class Meta: + model = ManualInput + fields = "__all__" + read_only_fields = [ + "id", + "created_at", + "updated_at", + "mortality_manual_total", + "feed_in_manual_total", + "feed_use_manual_total", + "harvest_manual_total", + "harvest_weight_manual_total", + "average_harvest_day_manual", + "average_harvest_weight_manual", + "fcr_manual", + "eef_manual", + ] + validators = [] + + def create(self, validated_data): + return self._upsert(validated_data) + + def update(self, instance, validated_data): + validated_data.setdefault("cycle", instance.cycle) + validated_data.setdefault("date", instance.date) + return self._upsert(validated_data, instance=instance) + + def _upsert(self, validated_data, instance=None): + cycle = validated_data.get("cycle") or (instance.cycle if instance else None) + row_date = validated_data.get("date") or (instance.date if instance else None) + defaults = { + "age_manual": validated_data.get("age_manual", instance.age_manual if instance else 0), + "mortality_manual": validated_data.get( + "mortality_manual", instance.mortality_manual if instance else 0 + ), + "feed_in_manual": validated_data.get( + "feed_in_manual", instance.feed_in_manual if instance else 0 + ), + "feed_use_manual": validated_data.get( + "feed_use_manual", instance.feed_use_manual if instance else 0 + ), + "harvest_manual": validated_data.get( + "harvest_manual", instance.harvest_manual if instance else 0 + ), + "harvest_weight_manual": validated_data.get( + "harvest_weight_manual", instance.harvest_weight_manual if instance else 0 + ), + "manual_weight": validated_data.get( + "manual_weight", instance.manual_weight if instance else 0.0 + ), + } + with transaction.atomic(): + row, _created = ManualInput.objects.update_or_create( + cycle=cycle, + date=row_date, + defaults=defaults, + ) + recompute_manual_totals(cycle) + row.refresh_from_db() + return row + + +class ChickenCountingSerializer(PkAsIdMixin, CycleContextMixin, serializers.ModelSerializer): + class Meta: + model = ChickenCounting + fields = "__all__" + read_only_fields = ["id", "created_at", "updated_at"] + + +class ChickenWeightSerializer(PkAsIdMixin, CycleContextMixin, serializers.ModelSerializer): + class Meta: + model = ChickenWeight + fields = "__all__" + read_only_fields = ["id", "created_at", "updated_at"] + + +class FeedSacksSerializer(PkAsIdMixin, CycleContextMixin, serializers.ModelSerializer): + class Meta: + model = FeedSacks + fields = "__all__" + read_only_fields = ["id", "created_at", "updated_at"] + + +class IotPanelSerializer(PkAsIdMixin, serializers.ModelSerializer): + kandang = serializers.SerializerMethodField() + flock_id = serializers.IntegerField(read_only=True) + + class Meta: + model = IotPanel + fields = "__all__" + read_only_fields = ["id", "created_at", "updated_at"] + + def get_kandang(self, obj): + cycle = getattr(obj.flock, "cycle", None) + return cycle.kandang_id if cycle is not None else None + + +class AIInsightSerializer(PkAsIdMixin, CycleContextMixin, serializers.ModelSerializer): + class Meta: + model = AIInsight + fields = "__all__" + read_only_fields = ["id", "created_at", "updated_at"] diff --git a/backend/apps/operations/services/__init__.py b/backend/apps/operations/services/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/apps/operations/services/karung_web.py b/backend/apps/operations/services/karung_web.py new file mode 100644 index 0000000..278de15 --- /dev/null +++ b/backend/apps/operations/services/karung_web.py @@ -0,0 +1,106 @@ +from __future__ import annotations + +from datetime import date +from typing import Any +from urllib.parse import urljoin + +import httpx +from django.conf import settings +from django.core.exceptions import ValidationError + +from apps.farms.models import Cycle +from apps.operations.models import FeedSacks + + +class KarungWebError(Exception): + def __init__(self, message: str, status_code: int | None = None): + super().__init__(message) + self.status_code = status_code + + +class KarungWebClient: + """Outbound client for karung-web-admin — base URL from settings only.""" + + PATH = "/api/v1/cycles/active/sections" + + def __init__(self, base_url: str | None = None, timeout: float | None = None): + self.base_url = (base_url or settings.KARUNG_WEB_ADMIN_BASE_URL).rstrip("/") + self.timeout = timeout or settings.KARUNG_WEB_ADMIN_TIMEOUT_SECONDS + + def fetch_active_sections(self) -> dict[str, Any]: + url = urljoin(self.base_url + "/", self.PATH.lstrip("/")) + try: + with httpx.Client(timeout=self.timeout) as client: + response = client.get(url) + except httpx.HTTPError as exc: + raise KarungWebError(f"karung-web-admin request failed: {exc}") from exc + if response.status_code >= 400: + raise KarungWebError( + f"karung-web-admin HTTP {response.status_code}: {response.text[:300]}", + status_code=response.status_code, + ) + payload = response.json() + if not payload.get("success", True): + error = payload.get("error") or {} + raise KarungWebError(error.get("message") or "karung-web-admin returned failure") + return payload.get("data") or payload + + +def request_karung( + cycle: Cycle, + *, + section: str = "today", +) -> tuple[FeedSacks, dict[str, Any]]: + if section not in {"today", "yesterday_history"}: + raise ValidationError("section must be today or yesterday_history") + + client = KarungWebClient() + data = client.fetch_active_sections() + sections = data.get("sections") or {} + block = sections.get(section) or {} + totals = block.get("totals") or {} + remote_cycle = data.get("cycle") or {} + + in_today = int(totals.get("masuk") or 0) + out_today = int(totals.get("tuang") or 0) + feed_use_today = out_today + saldo_awal = int(remote_cycle.get("saldo_awal") or 0) + + snapshot_raw = block.get("date") + snapshot_date = date.fromisoformat(str(snapshot_raw)) if snapshot_raw else date.today() + + prior = ( + FeedSacks.objects.filter(cycle=cycle) + .exclude(date=snapshot_date) + .order_by("-date", "-pk") + .first() + ) + if prior: + in_total = prior.in_total + in_today + out_total = prior.out_total + out_today + feed_use_total = prior.feed_use_total + feed_use_today + else: + in_total = cycle.feed_initial_balance + in_today + out_total = out_today + feed_use_total = feed_use_today + + feed_sack, _ = FeedSacks.objects.update_or_create( + cycle=cycle, + date=snapshot_date, + defaults={ + "in_today": in_today, + "out_today": out_today, + "in_total": in_total, + "out_total": out_total, + "feed_use_today": feed_use_today, + "feed_use_total": feed_use_total, + }, + ) + summary = { + "section": section, + "snapshot_date": snapshot_date.isoformat(), + "totals": totals, + "saldo_awal": saldo_awal, + "remote_cycle": remote_cycle, + } + return feed_sack, summary diff --git a/backend/apps/operations/services/manual_input.py b/backend/apps/operations/services/manual_input.py new file mode 100644 index 0000000..e7eb98e --- /dev/null +++ b/backend/apps/operations/services/manual_input.py @@ -0,0 +1,37 @@ +from __future__ import annotations + +from apps.farms.models import Cycle +from apps.operations.models import ManualInput + +DAILY_TO_TOTAL = ( + ("mortality_manual", "mortality_manual_total"), + ("feed_in_manual", "feed_in_manual_total"), + ("feed_use_manual", "feed_use_manual_total"), + ("harvest_manual", "harvest_manual_total"), + ("harvest_weight_manual", "harvest_weight_manual_total"), +) + +SKIPPED_DERIVED_FIELDS = ( + "average_harvest_day_manual", + "average_harvest_weight_manual", + "fcr_manual", + "eef_manual", +) + + +def recompute_manual_totals(cycle: Cycle) -> None: + running = {total: 0 for _, total in DAILY_TO_TOTAL} + rows = list(ManualInput.objects.filter(cycle=cycle).order_by("date", "pk")) + for row in rows: + changed: list[str] = [] + for daily, total in DAILY_TO_TOTAL: + running[total] += getattr(row, daily) or 0 + if getattr(row, total) != running[total]: + setattr(row, total, running[total]) + changed.append(total) + for field in SKIPPED_DERIVED_FIELDS: + if getattr(row, field) != 0: + setattr(row, field, 0) + changed.append(field) + if changed: + row.save(update_fields=[*changed, "updated_at"]) diff --git a/backend/apps/operations/tests.py b/backend/apps/operations/tests.py new file mode 100644 index 0000000..380f6dd --- /dev/null +++ b/backend/apps/operations/tests.py @@ -0,0 +1,333 @@ +from datetime import date, timedelta + +from django.test import TestCase +from rest_framework.test import APIClient + +from apps.accounts.models import User +from apps.farms.models import Cycle, Flock, Kandang, Site +from apps.operations.models import ChickenWeight, FeedSacks, IotPanel + + +class OperationsAPITests(TestCase): + def setUp(self): + self.user = User.objects.create_user(user_name="tester", password="secret") + self.client = APIClient() + self.client.force_authenticate(self.user) + site = Site.objects.create(site_name="Sukawarna", user=self.user) + self.kandang = Kandang.objects.create(kandang_name="Kandang 1", site=site) + self.cycle = Cycle.objects.create( + kandang=self.kandang, + total_days=35, + start_date=date.today() - timedelta(days=2), + end_date=date.today() + timedelta(days=32), + doc_in_weight=40, + doc_in_count=10000, + status=Cycle.STATUS_ACTIVE, + ) + self.flock = Flock.objects.create(flock_name="Flock A", cycle=self.cycle) + + def test_karungs_alias_lists_feed_sacks_with_date(self): + FeedSacks.objects.create( + cycle=self.cycle, + date=date.today(), + in_today=10, + out_today=8, + feed_use_today=8, + feed_use_total=8, + ) + response = self.client.get("/api/v1/karungs/", {"cycle_id": self.cycle.pk}) + self.assertEqual(response.status_code, 200, response.data) + results = response.data["results"] if isinstance(response.data, dict) else response.data + self.assertEqual(results[0]["date"], date.today().isoformat()) + self.assertEqual(results[0]["feed_use_total"], 8) + self.assertEqual(results[0]["kandang"], self.kandang.pk) + self.assertEqual(results[0]["flock_id"], self.flock.pk) + + def test_karungs_latest_returns_newest_row(self): + FeedSacks.objects.create(cycle=self.cycle, date=date.today() - timedelta(days=1), out_today=1) + newest = FeedSacks.objects.create(cycle=self.cycle, date=date.today(), out_today=9) + response = self.client.get("/api/v1/karungs/latest/", {"cycle_id": self.cycle.pk}) + self.assertEqual(response.status_code, 200, response.data) + self.assertEqual(response.data["id"], newest.pk) + + def test_panel_iot_accepts_cycle_id(self): + IotPanel.objects.create( + flock=self.flock, + date=date.today(), + average_temperature=28.5, + ) + response = self.client.get("/api/v1/panel-iot/", {"cycle_id": self.cycle.pk}) + self.assertEqual(response.status_code, 200, response.data) + results = response.data["results"] if isinstance(response.data, dict) else response.data + self.assertEqual(len(results), 1) + self.assertEqual(results[0]["date"], date.today().isoformat()) + + def test_panel_iot_filters_by_flock(self): + flock_b = Flock.objects.create(flock_name="Flock B", cycle=self.cycle) + row = IotPanel.objects.create( + flock=self.flock, + date=date.today(), + average_temperature=28.5, + ) + IotPanel.objects.create( + flock=flock_b, + date=date.today(), + average_temperature=30.0, + ) + response = self.client.get( + "/api/v1/panel-iot/", + {"cycle_id": self.cycle.pk, "flock_id": self.flock.pk}, + ) + self.assertEqual(response.status_code, 200, response.data) + results = response.data["results"] if isinstance(response.data, dict) else response.data + self.assertEqual(len(results), 1) + self.assertEqual(results[0]["id"], row.pk) + + def test_chicken_counting_uses_date_not_cameras(self): + response = self.client.post( + "/api/v1/chicken-countings/", + { + "cycle": self.cycle.pk, + "date": date.today().isoformat(), + "total_count": 9800, + "mortality_count": 12, + }, + format="json", + ) + self.assertEqual(response.status_code, 201, response.data) + self.assertEqual(response.data["date"], date.today().isoformat()) + self.assertNotIn("counting_date", response.data) + self.assertNotIn("cam1_count", response.data) + + def test_weights_latest_avg_uses_date(self): + ChickenWeight.objects.create( + cycle=self.cycle, + date=date.today(), + age=10, + doc_weight=40, + average_weight=320.5, + chicken_count=9800, + uniformity=82.0, + average_daily_gain=28.0, + ) + response = self.client.get( + "/api/v1/chicken-weights/latest-avg/", {"cycle_id": self.cycle.pk} + ) + self.assertEqual(response.status_code, 200, response.data) + self.assertEqual(response.data["date"], date.today().isoformat()) + self.assertEqual(response.data["average_weight"], 320.5) + self.assertNotIn("prediction_date", response.data) + + def test_weights_request_endpoint_is_removed(self): + response = self.client.post( + "/api/v1/chicken-weights/request/", + {"cycle_id": self.cycle.pk, "mode": "fetch"}, + format="json", + ) + self.assertEqual(response.status_code, 405) + + def test_health_does_not_probe_fatchicken(self): + response = self.client.get("/api/v1/health/") + self.assertEqual(response.status_code, 200) + self.assertNotIn("fatchicken", response.data) + self.assertNotIn("fatchicken_base_configured", response.data) + + def test_manual_input_uses_erd_field_names(self): + response = self.client.post( + "/api/v1/manual-inputs/", + { + "cycle": self.cycle.pk, + "date": date.today().isoformat(), + "age_manual": 10, + "mortality_manual": 5, + "mortality_manual_total": 5, + }, + format="json", + ) + self.assertEqual(response.status_code, 201, response.data) + self.assertEqual(response.data["mortality_manual_total"], 5) + self.assertNotIn("mortality_total_manual", response.data) + + def test_manual_input_computes_totals_and_ignores_client_derived_fields(self): + day1 = date.today() - timedelta(days=1) + day2 = date.today() + first = self.client.post( + "/api/v1/manual-inputs/", + { + "cycle": self.cycle.pk, + "date": day1.isoformat(), + "age_manual": 9, + "mortality_manual": 5, + "feed_in_manual": 8, + "feed_use_manual": 10, + "harvest_manual": 2, + "harvest_weight_manual": 8, + "manual_weight": 320.5, + "mortality_manual_total": 999, + "feed_in_manual_total": 999, + "feed_use_manual_total": 999, + "harvest_manual_total": 999, + "harvest_weight_manual_total": 999, + "fcr_manual": 1.9, + "eef_manual": 400, + "average_harvest_day_manual": 12, + "average_harvest_weight_manual": 99, + }, + format="json", + ) + self.assertIn(first.status_code, (200, 201), first.data) + self.assertEqual(first.data["age_manual"], 9) + self.assertEqual(first.data["mortality_manual_total"], 5) + self.assertEqual(first.data["feed_in_manual_total"], 8) + self.assertEqual(first.data["feed_use_manual_total"], 10) + self.assertEqual(first.data["harvest_manual_total"], 2) + self.assertEqual(first.data["harvest_weight_manual_total"], 8) + self.assertEqual(first.data["fcr_manual"], 0) + self.assertEqual(first.data["eef_manual"], 0) + self.assertEqual(first.data["average_harvest_day_manual"], 0) + self.assertEqual(first.data["average_harvest_weight_manual"], 0) + + second = self.client.post( + "/api/v1/manual-inputs/", + { + "cycle": self.cycle.pk, + "date": day2.isoformat(), + "age_manual": 10, + "mortality_manual": 3, + "feed_in_manual": 2, + "feed_use_manual": 4, + "harvest_manual": 1, + "harvest_weight_manual": 2, + "manual_weight": 330.0, + }, + format="json", + ) + self.assertIn(second.status_code, (200, 201), second.data) + self.assertEqual(second.data["mortality_manual_total"], 8) + self.assertEqual(second.data["feed_in_manual_total"], 10) + self.assertEqual(second.data["feed_use_manual_total"], 14) + self.assertEqual(second.data["harvest_manual_total"], 3) + self.assertEqual(second.data["harvest_weight_manual_total"], 10) + + update_day1 = self.client.post( + "/api/v1/manual-inputs/", + { + "cycle": self.cycle.pk, + "date": day1.isoformat(), + "age_manual": 9, + "mortality_manual": 7, + "feed_in_manual": 8, + "feed_use_manual": 10, + "harvest_manual": 2, + "harvest_weight_manual": 8, + "manual_weight": 320.5, + }, + format="json", + ) + self.assertIn(update_day1.status_code, (200, 201), update_day1.data) + self.assertEqual(update_day1.data["id"], first.data["id"]) + self.assertEqual(update_day1.data["mortality_manual_total"], 7) + + refreshed_day2 = self.client.get( + "/api/v1/manual-inputs/", {"cycle_id": self.cycle.pk, "date": day2.isoformat()} + ) + self.assertEqual(refreshed_day2.status_code, 200, refreshed_day2.data) + rows = ( + refreshed_day2.data["results"] + if isinstance(refreshed_day2.data, dict) + else refreshed_day2.data + ) + self.assertEqual(rows[0]["mortality_manual_total"], 10) + + def test_manual_input_accepts_fractional_harvest_weight(self): + day1 = date.today() - timedelta(days=1) + day2 = date.today() + first = self.client.post( + "/api/v1/manual-inputs/", + { + "cycle": self.cycle.pk, + "date": day1.isoformat(), + "harvest_weight_manual": 8.5, + }, + format="json", + ) + self.assertIn(first.status_code, (200, 201), first.data) + self.assertEqual(first.data["harvest_weight_manual"], 8.5) + self.assertEqual(first.data["harvest_weight_manual_total"], 8.5) + + second = self.client.post( + "/api/v1/manual-inputs/", + { + "cycle": self.cycle.pk, + "date": day2.isoformat(), + "harvest_weight_manual": 1.25, + }, + format="json", + ) + self.assertIn(second.status_code, (200, 201), second.data) + self.assertEqual(second.data["harvest_weight_manual"], 1.25) + self.assertEqual(second.data["harvest_weight_manual_total"], 9.75) + + def test_kpi_accepts_fractional_harvest_weight(self): + from apps.operations.models import ChickenCounting, FeedSacks, KPI, ManualInput + + cc = ChickenCounting.objects.create(cycle=self.cycle, date=date.today(), total_count=9800) + cw = ChickenWeight.objects.create( + cycle=self.cycle, + date=date.today(), + age=10, + doc_weight=40, + average_weight=320.5, + chicken_count=9800, + uniformity=82.0, + average_daily_gain=28.0, + ) + fs = FeedSacks.objects.create(cycle=self.cycle, date=date.today()) + manual = ManualInput.objects.create(cycle=self.cycle, date=date.today()) + response = self.client.post( + "/api/v1/kpis/", + { + "cycle": self.cycle.pk, + "date": date.today().isoformat(), + "cc": cc.pk, + "cw": cw.pk, + "fs": fs.pk, + "manual": manual.pk, + "harvest_weight": 12.75, + "harvest_weight_total": 20.5, + }, + format="json", + ) + self.assertEqual(response.status_code, 201, response.data) + self.assertEqual(response.data["harvest_weight"], 12.75) + self.assertEqual(response.data["harvest_weight_total"], 20.5) + kpi = KPI.objects.get(pk=response.data["id"]) + self.assertEqual(kpi.harvest_weight, 12.75) + self.assertEqual(kpi.harvest_weight_total, 20.5) + + +class ErdPrimaryKeyTests(TestCase): + ERD_PRIMARY_KEYS = { + "user_access": "user_id", + "sites": "site_id", + "kandang": "kandang_id", + "flock": "flock_id", + "cycles": "cycle_id", + "iot_panel": "panel_id", + "ai_insight": "id", + "feed_sacks": "fs_id", + "chicken_counting": "cc_id", + "chicken_weight": "cw_id", + "manual_input": "manual_id", + "kpi": "kpi_id", + } + + def test_domain_primary_keys_match_erd_names(self): + from django.db import connection + + with connection.cursor() as cursor: + for table, pk_name in self.ERD_PRIMARY_KEYS.items(): + cursor.execute(f'PRAGMA table_info("{table}")') + live_pks = [row[1] for row in cursor.fetchall() if row[5]] + self.assertEqual(live_pks, [pk_name], table) + diff --git a/backend/apps/operations/urls.py b/backend/apps/operations/urls.py new file mode 100644 index 0000000..56a65cb --- /dev/null +++ b/backend/apps/operations/urls.py @@ -0,0 +1,29 @@ +from django.urls import path +from rest_framework.routers import DefaultRouter + +from apps.operations.views import ( + AIInsightViewSet, + ChickenCountingViewSet, + ChickenWeightViewSet, + FeedSacksViewSet, + HealthView, + IotPanelViewSet, + KPIViewSet, + ManualInputViewSet, +) + +router = DefaultRouter() +router.register("kpis", KPIViewSet, basename="kpi") +router.register("manual-inputs", ManualInputViewSet, basename="manual-input") +router.register("chicken-countings", ChickenCountingViewSet, basename="chicken-counting") +router.register("chicken-weights", ChickenWeightViewSet, basename="chicken-weight") +router.register("feed-sacks", FeedSacksViewSet, basename="feed-sacks") +router.register("karungs", FeedSacksViewSet, basename="karung") +router.register("iot-panels", IotPanelViewSet, basename="iot-panel") +router.register("panel-iot", IotPanelViewSet, basename="panel-iot") +router.register("ai-insights", AIInsightViewSet, basename="ai-insight") + +urlpatterns = [ + path("health/", HealthView.as_view(), name="health"), + *router.urls, +] diff --git a/backend/apps/operations/views.py b/backend/apps/operations/views.py new file mode 100644 index 0000000..4b92803 --- /dev/null +++ b/backend/apps/operations/views.py @@ -0,0 +1,174 @@ +from __future__ import annotations + +from django.conf import settings +from django.core.exceptions import ValidationError +from rest_framework import status, viewsets +from rest_framework.decorators import action +from rest_framework.permissions import AllowAny +from rest_framework.response import Response +from rest_framework.views import APIView + +from apps.farms.models import Cycle +from apps.operations.models import ( + AIInsight, + ChickenCounting, + ChickenWeight, + FeedSacks, + IotPanel, + KPI, + ManualInput, +) +from apps.operations.serializers import ( + AIInsightSerializer, + ChickenCountingSerializer, + ChickenWeightSerializer, + FeedSacksSerializer, + IotPanelSerializer, + KPISerializer, + ManualInputSerializer, +) +from apps.operations.services.karung_web import KarungWebError, request_karung + + +class CycleScopedViewSet(viewsets.ModelViewSet): + def get_queryset(self): + qs = super().get_queryset() + params = self.request.query_params + if params.get("cycle_id"): + qs = qs.filter(cycle_id=params["cycle_id"]) + if params.get("flock_id"): + qs = qs.filter(cycle__flocks__flock_id=params["flock_id"]).distinct() + if params.get("date"): + qs = qs.filter(date=params["date"]) + return qs + + +class KPIViewSet(CycleScopedViewSet): + queryset = KPI.objects.select_related("cycle").all() + serializer_class = KPISerializer + + +class ManualInputViewSet(CycleScopedViewSet): + queryset = ManualInput.objects.select_related("cycle").all() + serializer_class = ManualInputSerializer + + +class ChickenCountingViewSet(CycleScopedViewSet): + queryset = ChickenCounting.objects.select_related("cycle").all() + serializer_class = ChickenCountingSerializer + + +class ChickenWeightViewSet(CycleScopedViewSet): + queryset = ChickenWeight.objects.select_related("cycle").all() + serializer_class = ChickenWeightSerializer + + @action(detail=False, methods=["get"], url_path="latest-avg") + def latest_average(self, request): + cycle_id = request.query_params.get("cycle_id") + if not cycle_id: + return Response( + {"detail": "cycle_id is required."}, + status=status.HTTP_400_BAD_REQUEST, + ) + row = self.get_queryset().filter(cycle_id=cycle_id).order_by("-date", "-pk").first() + if row is None: + return Response( + {"detail": "No chicken weight exists for this cycle."}, + status=status.HTTP_404_NOT_FOUND, + ) + return Response(self.get_serializer(row).data) + + +class FeedSacksViewSet(CycleScopedViewSet): + queryset = FeedSacks.objects.select_related("cycle").all() + serializer_class = FeedSacksSerializer + + @action(detail=False, methods=["get"], url_path="latest") + def latest(self, request): + cycle_id = request.query_params.get("cycle_id") + if not cycle_id: + return Response( + {"detail": "cycle_id is required."}, + status=status.HTTP_400_BAD_REQUEST, + ) + row = self.get_queryset().filter(cycle_id=cycle_id).order_by("-date", "-pk").first() + if row is None: + return Response( + {"detail": "No feed sacks row exists for this cycle."}, + status=status.HTTP_404_NOT_FOUND, + ) + return Response(self.get_serializer(row).data) + + @action(detail=False, methods=["post"], url_path="request") + def request_sync(self, request): + cycle_id = request.data.get("cycle_id") + if not cycle_id: + return Response( + {"detail": "cycle_id is required."}, + status=status.HTTP_400_BAD_REQUEST, + ) + try: + cycle = Cycle.objects.get(pk=cycle_id) + except Cycle.DoesNotExist: + return Response({"detail": "Cycle not found."}, status=status.HTTP_404_NOT_FOUND) + section = request.data.get("section") or "today" + try: + feed_sack, summary = request_karung(cycle, section=section) + except (KarungWebError, ValidationError) as exc: + code = getattr(exc, "status_code", None) + return Response( + {"detail": str(exc)}, + status=code if code and code >= 400 else status.HTTP_502_BAD_GATEWAY, + ) + return Response( + {"karung": self.get_serializer(feed_sack).data, "upstream": summary} + ) + + +class IotPanelViewSet(viewsets.ModelViewSet): + queryset = IotPanel.objects.select_related("flock", "flock__cycle").all() + serializer_class = IotPanelSerializer + + def get_queryset(self): + qs = super().get_queryset() + params = self.request.query_params + if params.get("cycle_id"): + qs = qs.filter(flock__cycle_id=params["cycle_id"]) + if params.get("flock_id"): + qs = qs.filter(flock_id=params["flock_id"]) + if params.get("date"): + qs = qs.filter(date=params["date"]) + return qs + + def paginate_queryset(self, queryset): + if self.request.query_params.get("date"): + return None + return super().paginate_queryset(queryset) + + @action(detail=False, methods=["get"], url_path="dates") + def dates(self, request): + dates = list( + self.get_queryset() + .order_by("date") + .values_list("date", flat=True) + .distinct() + ) + return Response(dates) + + +class AIInsightViewSet(CycleScopedViewSet): + queryset = AIInsight.objects.select_related("cycle").all() + serializer_class = AIInsightSerializer + + +class HealthView(APIView): + permission_classes = [AllowAny] + authentication_classes = [] + + def get(self, request): + payload = { + "status": "ok", + "service": "newdashboard-api", + "karung_web_admin_base_configured": bool(settings.KARUNG_WEB_ADMIN_BASE_URL), + } + return Response(payload) diff --git a/backend/config/__init__.py b/backend/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/config/asgi.py b/backend/config/asgi.py new file mode 100644 index 0000000..856079b --- /dev/null +++ b/backend/config/asgi.py @@ -0,0 +1,7 @@ +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") + +application = get_asgi_application() diff --git a/backend/config/gunicorn.py b/backend/config/gunicorn.py new file mode 100644 index 0000000..2957113 --- /dev/null +++ b/backend/config/gunicorn.py @@ -0,0 +1,6 @@ +bind = "0.0.0.0:8000" +workers = 2 +threads = 2 +timeout = 120 +accesslog = "-" +errorlog = "-" diff --git a/backend/config/settings.py b/backend/config/settings.py new file mode 100644 index 0000000..6c00cd4 --- /dev/null +++ b/backend/config/settings.py @@ -0,0 +1,177 @@ +"""Django settings for New Dashboard (ERD-aligned Wagtail + DRF).""" + +from __future__ import annotations + +import os +from pathlib import Path + +from dotenv import load_dotenv + +BASE_DIR = Path(__file__).resolve().parent.parent +load_dotenv(BASE_DIR / ".env") + + +def env(key: str, default: str | None = None) -> str | None: + return os.getenv(key, default) + + +def env_bool(key: str, default: bool = False) -> bool: + value = os.getenv(key) + if value is None: + return default + return value.strip().lower() in {"1", "true", "yes", "on"} + + +def env_list(key: str, default: str = "") -> list[str]: + raw = os.getenv(key, default) + return [item.strip() for item in raw.split(",") if item.strip()] + + +SECRET_KEY = env("SECRET_KEY", "insecure-dev-key") +DEBUG = env_bool("DEBUG", True) +ALLOWED_HOSTS = env_list("ALLOWED_HOSTS", "localhost,127.0.0.1") +CSRF_TRUSTED_ORIGINS = env_list("CSRF_TRUSTED_ORIGINS", "http://localhost:8000") + +INSTALLED_APPS = [ + "apps.accounts", + "apps.farms", + "apps.operations", + "apps.jobs", + "wagtail.contrib.forms", + "wagtail.contrib.redirects", + "wagtail.embeds", + "wagtail.sites", + "wagtail.users", + "wagtail.snippets", + "wagtail.documents", + "wagtail.images", + "wagtail.search", + "wagtail.admin", + "wagtail", + "modelcluster", + "taggit", + "django.contrib.admin", + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.messages", + "django.contrib.staticfiles", + "rest_framework", + "corsheaders", + "drf_spectacular", +] + +MIDDLEWARE = [ + "django.middleware.security.SecurityMiddleware", + "django.contrib.sessions.middleware.SessionMiddleware", + "corsheaders.middleware.CorsMiddleware", + "django.middleware.common.CommonMiddleware", + "django.middleware.csrf.CsrfViewMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.contrib.messages.middleware.MessageMiddleware", + "django.middleware.clickjacking.XFrameOptionsMiddleware", + "wagtail.contrib.redirects.middleware.RedirectMiddleware", +] + +ROOT_URLCONF = "config.urls" + +TEMPLATES = [ + { + "BACKEND": "django.template.backends.django.DjangoTemplates", + "DIRS": [BASE_DIR / "templates"], + "APP_DIRS": True, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", + ], + }, + }, +] + +WSGI_APPLICATION = "config.wsgi.application" + +DB_ENGINE = env("DB_ENGINE", "django.db.backends.sqlite3") +if DB_ENGINE == "django.db.backends.sqlite3": + DATABASES = { + "default": { + "ENGINE": DB_ENGINE, + "NAME": env("DB_NAME", str(BASE_DIR / "db.sqlite3")), + } + } +else: + DATABASES = { + "default": { + "ENGINE": DB_ENGINE, + "NAME": env("DB_NAME", "newdashboard"), + "USER": env("DB_USER", "newdashboard"), + "PASSWORD": env("DB_PASSWORD", ""), + "HOST": env("DB_HOST", "localhost"), + "PORT": env("DB_PORT", "5432"), + } + } + +AUTH_USER_MODEL = "accounts.User" + +AUTH_PASSWORD_VALIDATORS = [ + {"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"}, + {"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator"}, + {"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"}, + {"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"}, +] + +LANGUAGE_CODE = "en-us" +TIME_ZONE = "Asia/Jakarta" +USE_I18N = True +USE_TZ = True + +STATIC_URL = "/static/" +STATIC_ROOT = BASE_DIR / "staticfiles" +MEDIA_URL = "/media/" +MEDIA_ROOT = BASE_DIR / "media" + +DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" + +WAGTAIL_SITE_NAME = env("WAGTAIL_SITE_NAME", "New Dashboard") +WAGTAILADMIN_BASE_URL = env("WAGTAILADMIN_BASE_URL", "http://localhost:8000") +WAGTAIL_APPEND_SLASH = False + +CORS_ALLOWED_ORIGINS = env_list("CORS_ALLOWED_ORIGINS", "http://localhost:3000") +CORS_ALLOW_CREDENTIALS = env_bool("CORS_ALLOW_CREDENTIALS", True) + +SESSION_COOKIE_SECURE = env_bool("SESSION_COOKIE_SECURE", False) +CSRF_COOKIE_SECURE = env_bool("CSRF_COOKIE_SECURE", False) +SESSION_COOKIE_HTTPONLY = True +CSRF_COOKIE_HTTPONLY = False + +REST_FRAMEWORK = { + "DEFAULT_AUTHENTICATION_CLASSES": [ + "apps.accounts.authentication.ApiKeyAuthentication", + "rest_framework.authentication.SessionAuthentication", + ], + "DEFAULT_PERMISSION_CLASSES": [ + "rest_framework.permissions.IsAuthenticated", + ], + "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination", + "PAGE_SIZE": int(env("API_PAGE_SIZE", "50") or "50"), + "DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema", +} + +SPECTACULAR_SETTINGS = { + "TITLE": "New Dashboard API", + "DESCRIPTION": "ERD-aligned poultry dashboard API (session + API key auth).", + "VERSION": "1.0.0", +} + +BOOTSTRAP_API_KEY = env("BOOTSTRAP_API_KEY", "") or "" + +KARUNG_WEB_ADMIN_BASE_URL = ( + env("KARUNG_WEB_ADMIN_BASE_URL", "http://127.0.0.1:5000") or "" +).rstrip("/") +KARUNG_WEB_ADMIN_TIMEOUT_SECONDS = float( + env("KARUNG_WEB_ADMIN_TIMEOUT_SECONDS", "30") or "30" +) +KARUNG_WEB_ADMIN_SYNC_ENABLED = env_bool("KARUNG_WEB_ADMIN_SYNC_ENABLED", False) + +CRON_ADVANCE_CYCLE_DAY = env_bool("CRON_ADVANCE_CYCLE_DAY", True) diff --git a/backend/config/urls.py b/backend/config/urls.py new file mode 100644 index 0000000..15ff4a5 --- /dev/null +++ b/backend/config/urls.py @@ -0,0 +1,27 @@ +from django.conf import settings +from django.conf.urls.static import static +from django.contrib import admin +from django.urls import include, path +from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView +from wagtail import urls as wagtail_urls +from wagtail.admin import urls as wagtailadmin_urls +from wagtail.documents import urls as wagtaildocs_urls + +urlpatterns = [ + path("django-admin/", admin.site.urls), + path("admin/", include(wagtailadmin_urls)), + path("documents/", include(wagtaildocs_urls)), + path("api/schema/", SpectacularAPIView.as_view(), name="schema"), + path( + "api/docs/", + SpectacularSwaggerView.as_view(url_name="schema"), + name="swagger-ui", + ), + path("api/v1/", include("apps.accounts.urls")), + path("api/v1/", include("apps.farms.urls")), + path("api/v1/", include("apps.operations.urls")), + path("", include(wagtail_urls)), +] + +if settings.DEBUG: + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/backend/config/wsgi.py b/backend/config/wsgi.py new file mode 100644 index 0000000..8509335 --- /dev/null +++ b/backend/config/wsgi.py @@ -0,0 +1,7 @@ +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") + +application = get_wsgi_application() diff --git a/backend/database/ERD_Dashboard_Chicken_Counting.md b/backend/database/ERD_Dashboard_Chicken_Counting.md new file mode 100644 index 0000000..c10b351 --- /dev/null +++ b/backend/database/ERD_Dashboard_Chicken_Counting.md @@ -0,0 +1,325 @@ +# Entity Relationship Diagram (ERD) & Unified Master Architecture + +This document defines the integrated **Audrix Smart Poultry Platform ERD (`ERD_audrix`)** and how the **Chicken Counting & Weight Estimation Vision System** connects directly into the master farm database. + +--- + +## 🗺️ Unified Master Mermaid ERD (`ERD_audrix` Integration) + +```mermaid +erDiagram + %% ========================================== + %% 1. CORE ENTERPRISE HIERARCHY (ERD_audrix) + %% ========================================== + USER_ACCESS ||--|{ SITES : "manages" + SITES ||--|{ KANDANG : "contains" + KANDANG ||--|{ CYCLES : "runs" + CYCLES ||--|{ FLOCK : "houses" + + %% ========================================== + %% 2. OUR DOMAIN: EDGE TOPOLOGY & VISION + %% ========================================== + KANDANG ||--|{ FLOOR : "has_levels" + FLOOR ||--|{ CAMERA : "equipped_with" + FLOOR ||--o{ BATCH_RUNS : "executes" + CAMERA ||--o{ BATCH_RUNS : "records" + BATCH_RUNS ||--o{ DETECTIONS : "captures_tracks" + + %% ========================================== + %% 3. VISION ROLLUPS -> MASTER AUDRIX TABLES + %% ========================================== + CYCLES ||--o{ CHICKEN_COUNTING : "records_daily_count" + CYCLES ||--o{ CHICKEN_WEIGHT : "records_daily_weight" + BATCH_RUNS ||--o{ CHICKEN_COUNTING : "aggregates_into_cc" + BATCH_RUNS ||--o{ CHICKEN_WEIGHT : "aggregates_into_cw" + + %% ========================================== + %% 4. NON-VISION EXTERNAL STREAMS (DO NOT TOUCH) + %% ========================================== + FLOCK ||--o{ IOT_PANEL : "monitored_by" + CYCLES ||--o{ FEED_SACKS : "tracks_inventory" + CYCLES ||--o{ MANUAL_INPUT : "logs_ground_truth" + CYCLES ||--o{ AI_INSIGHT : "generates_alerts" + + %% ========================================== + %% 5. MASTER KPI AGGREGATION (ERD_audrix) + %% ========================================== + CYCLES ||--o{ KPI : "computes_daily_kpi" + CHICKEN_COUNTING ||--o{ KPI : "feeds_headcount" + CHICKEN_WEIGHT ||--o{ KPI : "feeds_vision_weight" + FEED_SACKS ||--o{ KPI : "feeds_feed_usage" + MANUAL_INPUT ||--o{ KPI : "feeds_manual_weights" + + %% ========================================== + %% ENTITY DEFINITIONS + %% ========================================== + + USER_ACCESS { + int user_id PK "NOT NULL" + varchar user_name "30 NOT NULL" + varchar password_hash "255 NOT NULL" + varchar status "30 NOT NULL" + timestamp created_at "NOT NULL" + timestamp updated_at "NOT NULL" + } + + SITES { + int site_id PK "NOT NULL" + varchar site_name "30 NOT NULL" + int user_id FK "References USER_ACCESS" + timestamp created_at "NOT NULL" + timestamp updated_at "NOT NULL" + } + + KANDANG { + int kandang_id PK "NOT NULL" + varchar kandang_name "30 NOT NULL" + int site_id FK "References SITES" + timestamp created_at "NOT NULL" + timestamp updated_at "NOT NULL" + } + + CYCLES { + int cycle_id PK "NOT NULL (Flock Batch Run)" + int kandang_id FK "References KANDANG" + int total_days "NOT NULL" + date start_date "NOT NULL (Day 0)" + date end_date "NOT NULL" + int doc_in_weight "NOT NULL (Initial DOC weight for this cycle)" + int doc_in_count "NOT NULL (Stocking inventory)" + varchar status "30 NOT NULL" + timestamp created_at "NOT NULL" + timestamp updated_at "NOT NULL" + } + + FLOCK { + int flock_id PK "NOT NULL" + varchar flock_name "30 NOT NULL" + int cycle_id FK "References CYCLES" + timestamp created_at "NOT NULL" + timestamp updated_at "NOT NULL" + } + + FLOOR { + string floor_id PK "e.g. K1-L1, K1-L2" + int kandang_id FK "References KANDANG" + string level "Floor level designation (L1, L2, L3)" + json roi_points "Counting gate coordinates" + float px_per_cm "Spatial calibration constant" + } + + CAMERA { + string camera_id PK "e.g. CC1, CC2, CC3, CC4" + string floor_id FK "References FLOOR" + int camera_num "1 to 4" + float px_per_cm "Camera pixel to cm calibration" + string stream_url "Source video / RTSP stream" + } + + BATCH_RUNS { + integer id PK "AUTOINCREMENT (SQLite edge runs)" + string date "YYYY-MM-DD" + string location FK "References FLOOR(floor_id)" + string camera_id FK "References CAMERA(camera_id)" + integer total_entered "Headcount count validated" + integer frames_processed + real elapsed_seconds + string stopped_reason + string source_video + string generated_at + integer cycle_day "0 = DOC count only, 1+ = Weight active" + real area_cm2_median "Median body area (cm^2)" + real minor_axis_cm_median "Median width (cm)" + real major_axis_cm_median "Median length (cm)" + real predicted_weight_g "Estimated weight (g)" + real gompertz_baseline_g "Expected curve weight (g)" + real vision_gain_g "Vision allometric gain (g)" + integer n_weight_samples "Valid sample count" + real rejection_rate "MAD outlier filter rejection rate" + } + + DETECTIONS { + string date "YYYY-MM-DD" + string camera_id FK + integer track_id "BoT-SORT track identifier" + integer class_id "0 = chicken" + float confidence "YOLO confidence score" + integer frame_index "Count trigger frame" + float bbox_area_cm2 "Area in cm^2" + float width_cm "Width in cm" + float height_cm "Height in cm" + float minor_axis_cm "min(width, height) cm" + float major_axis_cm "max(width, height) cm" + float aspect_ratio_cm "width / height" + float perimeter_cm "Perimeter cm" + float mad_zscore "MAD Z-score outlier metric" + } + + CHICKEN_COUNTING { + int cc_id PK "NOT NULL" + int cycle_id FK "References CYCLES" + date date "NOT NULL" + int total_count "NOT NULL (Aggregated total from edge BATCH_RUNS)" + int mortality_count "NOT NULL (Carcasses from vision segmentation)" + timestamp created_at "NOT NULL" + timestamp updated_at "NOT NULL" + } + + CHICKEN_WEIGHT { + int cw_id PK "NOT NULL" + int cycle_id FK "References CYCLES" + date date "NOT NULL" + int age "NOT NULL (Cycle Day: 1+)" + int doc_weight "NOT NULL (Cycle-specific initial DOC weight)" + float average_weight "NOT NULL (predicted_weight_g from edge)" + int chicken_count "NOT NULL (n_weight_samples)" + float uniformity "NOT NULL (Flock weight uniformity %)" + float average_daily_gain "NOT NULL (ADG in grams/day)" + float area_cm2_median "Median body area in cm^2" + float minor_axis_cm_median "Median minor axis / width in cm" + float major_axis_cm_median "Median major axis / length in cm" + float gompertz_baseline_g "Theoretical Gompertz curve baseline" + float vision_gain_g "Allometric vision gain residual" + float rejection_rate "MAD outlier filter rejection percentage" + timestamp created_at "NOT NULL" + timestamp updated_at "NOT NULL" + } + + IOT_PANEL { + int panel_id PK "NOT NULL" + date date "NOT NULL" + float wind_speed "NOT NULL" + float humidity "NOT NULL" + float water_total "NOT NULL" + float average_temperature "NOT NULL" + float experience_temperature "NOT NULL" + timestamp created_at "NOT NULL" + timestamp updated_at "NOT NULL" + int flock_id FK "References FLOCK" + } + + FEED_SACKS { + int fs_id PK "NOT NULL (fc_id)" + date date "NOT NULL" + int in_today "NOT NULL" + int out_today "NOT NULL" + int in_total "NOT NULL" + int out_total "NOT NULL" + int feed_use_today "NOT NULL" + int feed_use_total "NOT NULL" + timestamp created_at "NOT NULL" + timestamp updated_at "NOT NULL" + int cycle_id FK "References CYCLES" + } + + MANUAL_INPUT { + int manual_id PK "NOT NULL" + date date "NOT NULL" + int age_manual "NOT NULL" + int mortality_manual "NOT NULL" + int mortality_manual_total "NOT NULL" + int feed_in_manual "NOT NULL" + int feed_use_manual "NOT NULL" + int feed_in_manual_total "NOT NULL" + int feed_use_manual_total "NOT NULL" + int harverst_manual "NOT NULL" + int harverst_manual_total "NOT NULL" + float harvest_weight_manual "NOT NULL" + float harvest_weight_manual_total "NOT NULL" + float manual_weight "NOT NULL" + float average_harvest_day_manual "NOT NULL" + float average_harvest_weight_manual "NOT NULL" + float fcr_manual "NOT NULL" + float eef_manual "NOT NULL" + timestamp created_at "NOT NULL" + timestamp updated_at "NOT NULL" + int cycle_id FK "References CYCLES" + } + + AI_INSIGHT { + int id PK "NOT NULL" + date date "NOT NULL" + text insight_text "NOT NULL" + string alert "NOT NULL" + varchar section "100 NOT NULL" + varchar session "100 NOT NULL" + timestamp created_at "NOT NULL" + timestamp updated_at "NOT NULL" + int cycle_id FK "References CYCLES" + } + + KPI { + int kpi_id PK "NOT NULL" + date date "NOT NULL" + int age "NOT NULL" + int mortality "NOT NULL" + int mortality_total "NOT NULL" + int feed "NOT NULL" + int feed_total "NOT NULL" + int harverst "NOT NULL" + int harverst_total "NOT NULL" + float harvest_weight "NOT NULL" + float harvest_weight_total "NOT NULL" + int chicken_life "NOT NULL" + float chicken_life_percentage "NOT NULL" + float iot_weight "NOT NULL" + float average_harvest_day "NOT NULL" + float average_harvest_weight "NOT NULL" + float fcr "NOT NULL (Feed Conversion Ratio)" + float eef "NOT NULL (European Efficiency Factor)" + timestamp created_at "NOT NULL" + timestamp updated_at "NOT NULL" + int cycle_id FK "References CYCLES" + int cc_id FK "References CHICKEN_COUNTING" + int cw_id FK "References CHICKEN_WEIGHT" + int fs_id FK "References FEED_SACKS" + int manual_id FK "References MANUAL_INPUT" + } +``` + +--- + +## 🏗️ Architectural Tier Descriptions & Integration Mapping + +### Tier 1: Farm Hierarchy (`USER_ACCESS` $\to$ `SITES` $\to$ `KANDANG` $\to$ `CYCLES` $\to$ `FLOCK`) + +- Belongs to master `ERD_audrix`. +- Defines farm ownership, coops, operational commercial cycles (`CYCLES`), and biological flocks (`FLOCK`). + +--- + +### Tier 2: Edge Vision Subsystem (`FLOOR` $\to$ `CAMERA` $\to$ `BATCH_RUNS` $\to$ `DETECTIONS`) + +- **Physical Hierarchy:** Each `KANDANG` has multiple floor levels (`FLOOR`), and each floor operates 4 top-down optical counting cameras (`CAMERA`: CC1, CC2, CC3, CC4) calibrated by `px_per_cm`. +- **Execution & Curation:** Daily batch runs process video feeds on the edge and populate SQLite table `BATCH_RUNS` and Parquet observation datasets (`DETECTIONS`). +- **Cycle Day 0 Rule:** Day 0 is strictly for initial stocking headcount (`total_entered`), while Day 1+ calculates both headcount and vision-derived geometric body weights. + +--- + +### Tier 3: Vision Aggregations to Audrix Tables (`CHICKEN_COUNTING` & `CHICKEN_WEIGHT`) + +Our edge pipeline aggregates floor camera runs and pushes clean daily rollups directly into the two vision tables of `ERD_audrix`: + +1. **`CHICKEN_COUNTING` (`cc_id`)**: + - `total_count` $\leftarrow \sum \text{total\_entered}$ across all floor cameras for that date. + - `mortality_count` $\leftarrow \text{total dead carcasses detected by mortality segmentation}$. +2. **`CHICKEN_WEIGHT` (`cw_id`)**: + - `average_weight` $\leftarrow \text{fused predicted weight in grams}$. + - `chicken_count` $\leftarrow \sum \text{n\_weight\_samples}$ (valid non-outlier tracks). + - `uniformity` $\leftarrow \text{flock size uniformity percentage}$. + - `average_daily_gain` $\leftarrow \text{daily weight gain in grams/day}$. + - `area_cm2_median`, `minor_axis_cm_median`, `major_axis_cm_median` $\leftarrow \text{calibrated physical dimensions}$. + - `gompertz_baseline_g`, `vision_gain_g` $\leftarrow \text{audited growth model residual breakdown}$. + +--- + +### Tier 4: Master Analytics & KPI Synthesis (`KPI`) + +- `KPI` is the central analytics ledger that combines: + - Vision counts from `CHICKEN_COUNTING` (`cc_id`). + - Vision body weights from `CHICKEN_WEIGHT` (`cw_id`). + - Daily feed intake from `FEED_SACKS` (`fs_id`). + - Human ground truth logs from `MANUAL_INPUT` (`manual_id`). +- Computes macro biological & economic efficiency indicators: + $$\text{FCR} = \frac{\text{Total Feed Consumed (kg)}}{\text{Total Harvest / Live Weight (kg)}}$$ + $$\text{EEF} = \frac{\text{Livability \%} \times \text{Average Weight (kg)}}{\text{Age (Days)} \times \text{FCR}} \times 100$$ diff --git a/backend/database/ERD_dashboard.png b/backend/database/ERD_dashboard.png new file mode 100644 index 0000000..0469245 Binary files /dev/null and b/backend/database/ERD_dashboard.png differ diff --git a/backend/database/erd_schema.sql b/backend/database/erd_schema.sql new file mode 100644 index 0000000..82a3e6e --- /dev/null +++ b/backend/database/erd_schema.sql @@ -0,0 +1,290 @@ +-- ============================================================================= +-- PostgreSQL Schema — CPSP Dashboard ERD +-- Source: ERD_dashboard.png (updated 2026-08-20) +-- +-- user_access.status: active | inactive | superadmin +-- (Django syncs is_active/is_staff/is_superuser from status for auth internals) +-- user_access → sites → kandang → cycles +-- cycles → flock (flock.cycle_id, required; cycles has no flock_id) +-- flock → iot_panel +-- cycles → ai_insight, feed_sacks, chicken_counting, chicken_weight, +-- manual_input, kpi +-- kpi → chicken_counting, chicken_weight, feed_sacks, manual_input +-- ============================================================================= + +-- ----------------------------------------------------------------------------- +-- 1. User Access +-- ----------------------------------------------------------------------------- +CREATE TABLE IF NOT EXISTS user_access ( + user_id SERIAL PRIMARY KEY, + user_name VARCHAR(30) NOT NULL UNIQUE, + password_hash VARCHAR(255) NOT NULL, + status VARCHAR(30) NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE INDEX IF NOT EXISTS idx_user_access_status ON user_access (status); + +-- ----------------------------------------------------------------------------- +-- 2. Sites +-- ----------------------------------------------------------------------------- +CREATE TABLE IF NOT EXISTS sites ( + site_id SERIAL PRIMARY KEY, + site_name VARCHAR(30) NOT NULL, + user_id INTEGER NOT NULL REFERENCES user_access (user_id) ON DELETE CASCADE, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE INDEX IF NOT EXISTS idx_sites_user_id ON sites (user_id); + +-- ----------------------------------------------------------------------------- +-- 3. Kandang (Coop / Pen) +-- ----------------------------------------------------------------------------- +CREATE TABLE IF NOT EXISTS kandang ( + kandang_id SERIAL PRIMARY KEY, + kandang_name VARCHAR(30) NOT NULL, + site_id INTEGER NOT NULL REFERENCES sites (site_id) ON DELETE CASCADE, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE INDEX IF NOT EXISTS idx_kandang_site_id ON kandang (site_id); + +-- ----------------------------------------------------------------------------- +-- 4. Cycles +-- No flock_id — flock belongs to cycle via flock.cycle_id. +-- ----------------------------------------------------------------------------- +CREATE TABLE IF NOT EXISTS cycles ( + cycle_id SERIAL PRIMARY KEY, + total_days INTEGER NOT NULL, + start_date DATE NOT NULL, + end_date DATE NOT NULL, + doc_in_weight INTEGER NOT NULL, + doc_in_count INTEGER NOT NULL, + feed_initial_balance INTEGER NOT NULL DEFAULT 0, + status VARCHAR(30) NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + kandang_id INTEGER NOT NULL REFERENCES kandang (kandang_id) ON DELETE CASCADE, + CONSTRAINT chk_cycles_date_range CHECK (end_date >= start_date) +); + +CREATE INDEX IF NOT EXISTS idx_cycles_kandang_id ON cycles (kandang_id); +CREATE INDEX IF NOT EXISTS idx_cycles_status ON cycles (status); +CREATE INDEX IF NOT EXISTS idx_cycles_start_date ON cycles (start_date); + +-- ----------------------------------------------------------------------------- +-- 5. Flock +-- ----------------------------------------------------------------------------- +CREATE TABLE IF NOT EXISTS flock ( + flock_id SERIAL PRIMARY KEY, + flock_name VARCHAR(30) NOT NULL, + cycle_id INTEGER NOT NULL REFERENCES cycles (cycle_id) ON DELETE CASCADE, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +CREATE INDEX IF NOT EXISTS idx_flock_cycle_id ON flock (cycle_id); + +-- ----------------------------------------------------------------------------- +-- 6. IoT Panel +-- One row per sensor reading; the panel polls every 10 minutes, so a cycle +-- day holds up to 144 rows. `timestamp` carries the reading time; `date` is +-- kept denormalized for fast daily grouping. +-- ----------------------------------------------------------------------------- +CREATE TABLE IF NOT EXISTS iot_panel ( + panel_id SERIAL PRIMARY KEY, + date DATE NOT NULL, + timestamp TIMESTAMP WITH TIME ZONE, + wind_speed FLOAT NOT NULL, + humidity FLOAT NOT NULL, + water_total FLOAT NOT NULL, + average_temperature FLOAT NOT NULL, + experience_temperature FLOAT NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + flock_id INTEGER NOT NULL REFERENCES flock (flock_id) ON DELETE CASCADE +); + +CREATE INDEX IF NOT EXISTS idx_iot_panel_flock_id ON iot_panel (flock_id); +CREATE INDEX IF NOT EXISTS idx_iot_panel_date ON iot_panel (date); +CREATE INDEX IF NOT EXISTS idx_iot_panel_timestamp ON iot_panel (timestamp); +CREATE UNIQUE INDEX IF NOT EXISTS uniq_iot_panel_flock_timestamp ON iot_panel (flock_id, timestamp); + +-- ----------------------------------------------------------------------------- +-- 7. AI Insight +-- ----------------------------------------------------------------------------- +CREATE TABLE IF NOT EXISTS ai_insight ( + id SERIAL PRIMARY KEY, + date DATE NOT NULL, + insight_text TEXT NOT NULL, + alert VARCHAR(100) NOT NULL, + section VARCHAR(100) NOT NULL, + session VARCHAR(100) NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + cycle_id INTEGER NOT NULL REFERENCES cycles (cycle_id) ON DELETE CASCADE +); + +CREATE INDEX IF NOT EXISTS idx_ai_insight_cycle_id ON ai_insight (cycle_id); +CREATE INDEX IF NOT EXISTS idx_ai_insight_date ON ai_insight (date); + +-- ----------------------------------------------------------------------------- +-- 8. Feed Sacks +-- ----------------------------------------------------------------------------- +CREATE TABLE IF NOT EXISTS feed_sacks ( + fs_id SERIAL PRIMARY KEY, + date DATE NOT NULL, + in_today INTEGER NOT NULL DEFAULT 0, + out_today INTEGER NOT NULL DEFAULT 0, + in_total INTEGER NOT NULL DEFAULT 0, + out_total INTEGER NOT NULL DEFAULT 0, + feed_use_today INTEGER NOT NULL DEFAULT 0, + feed_use_total INTEGER NOT NULL DEFAULT 0, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + cycle_id INTEGER NOT NULL REFERENCES cycles (cycle_id) ON DELETE CASCADE +); + +CREATE INDEX IF NOT EXISTS idx_feed_sacks_cycle_id ON feed_sacks (cycle_id); +CREATE INDEX IF NOT EXISTS idx_feed_sacks_date ON feed_sacks (date); +CREATE UNIQUE INDEX IF NOT EXISTS uniq_feed_sacks_cycle_date ON feed_sacks (cycle_id, date); + +-- ----------------------------------------------------------------------------- +-- 9. Chicken Counting +-- ----------------------------------------------------------------------------- +CREATE TABLE IF NOT EXISTS chicken_counting ( + cc_id SERIAL PRIMARY KEY, + date DATE NOT NULL, + total_count INTEGER NOT NULL DEFAULT 0, + mortality_count INTEGER NOT NULL DEFAULT 0, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + cycle_id INTEGER NOT NULL REFERENCES cycles (cycle_id) ON DELETE CASCADE +); + +CREATE INDEX IF NOT EXISTS idx_chicken_counting_cycle_id ON chicken_counting (cycle_id); +CREATE INDEX IF NOT EXISTS idx_chicken_counting_date ON chicken_counting (date); +CREATE UNIQUE INDEX IF NOT EXISTS uniq_chicken_counting_cycle_date ON chicken_counting (cycle_id, date); + +-- ----------------------------------------------------------------------------- +-- 10. Chicken Weight +-- ----------------------------------------------------------------------------- +CREATE TABLE IF NOT EXISTS chicken_weight ( + cw_id SERIAL PRIMARY KEY, + date DATE NOT NULL, + age INTEGER NOT NULL, + doc_weight INTEGER NOT NULL, + average_weight FLOAT NOT NULL, + chicken_count INTEGER NOT NULL, + uniformity FLOAT NOT NULL, + average_daily_gain FLOAT NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + cycle_id INTEGER NOT NULL REFERENCES cycles (cycle_id) ON DELETE CASCADE +); + +CREATE INDEX IF NOT EXISTS idx_chicken_weight_cycle_id ON chicken_weight (cycle_id); +CREATE INDEX IF NOT EXISTS idx_chicken_weight_date ON chicken_weight (date); +CREATE UNIQUE INDEX IF NOT EXISTS uniq_chicken_weight_cycle_date ON chicken_weight (cycle_id, date); + +-- ----------------------------------------------------------------------------- +-- 11. Manual Input +-- ----------------------------------------------------------------------------- +CREATE TABLE IF NOT EXISTS manual_input ( + manual_id SERIAL PRIMARY KEY, + date DATE NOT NULL, + age_manual INTEGER NOT NULL DEFAULT 0, + mortality_manual INTEGER NOT NULL DEFAULT 0, + mortality_manual_total INTEGER NOT NULL DEFAULT 0, + feed_in_manual INTEGER NOT NULL DEFAULT 0, + feed_use_manual INTEGER NOT NULL DEFAULT 0, + feed_in_manual_total INTEGER NOT NULL DEFAULT 0, + feed_use_manual_total INTEGER NOT NULL DEFAULT 0, + feed_out_manual INTEGER NOT NULL DEFAULT 0, + feed_out_manual_total INTEGER NOT NULL DEFAULT 0, + harvest_manual INTEGER NOT NULL DEFAULT 0, + harvest_manual_total INTEGER NOT NULL DEFAULT 0, + harvest_weight_manual FLOAT NOT NULL DEFAULT 0, + harvest_weight_manual_total FLOAT NOT NULL DEFAULT 0, + manual_weight FLOAT NOT NULL DEFAULT 0, + average_harvest_day_manual FLOAT NOT NULL DEFAULT 0, + average_harvest_weight_manual FLOAT NOT NULL DEFAULT 0, + fcr_manual FLOAT NOT NULL DEFAULT 0, + eef_manual FLOAT NOT NULL DEFAULT 0, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + cycle_id INTEGER NOT NULL REFERENCES cycles (cycle_id) ON DELETE CASCADE +); + +CREATE INDEX IF NOT EXISTS idx_manual_input_cycle_id ON manual_input (cycle_id); +CREATE INDEX IF NOT EXISTS idx_manual_input_date ON manual_input (date); +CREATE UNIQUE INDEX IF NOT EXISTS uniq_manual_input_cycle_date ON manual_input (cycle_id, date); + +-- ----------------------------------------------------------------------------- +-- 12. KPI (aggregates data from cycle + source records) +-- ----------------------------------------------------------------------------- +CREATE TABLE IF NOT EXISTS kpi ( + kpi_id SERIAL PRIMARY KEY, + date DATE NOT NULL, + age INTEGER NOT NULL DEFAULT 0, + mortality INTEGER NOT NULL DEFAULT 0, + mortality_total INTEGER NOT NULL DEFAULT 0, + feed INTEGER NOT NULL DEFAULT 0, + feed_total INTEGER NOT NULL DEFAULT 0, + harvest INTEGER NOT NULL DEFAULT 0, + harvest_total INTEGER NOT NULL DEFAULT 0, + harvest_weight FLOAT NOT NULL DEFAULT 0, + harvest_weight_total FLOAT NOT NULL DEFAULT 0, + chicken_life INTEGER NOT NULL DEFAULT 0, + chicken_life_percentage FLOAT NOT NULL DEFAULT 0, + iot_weight FLOAT NOT NULL DEFAULT 0, + average_harvest_day FLOAT NOT NULL DEFAULT 0, + average_harvest_weight FLOAT NOT NULL DEFAULT 0, + fcr FLOAT NOT NULL DEFAULT 0, + eef FLOAT NOT NULL DEFAULT 0, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + cycle_id INTEGER NOT NULL REFERENCES cycles (cycle_id) ON DELETE CASCADE, + cc_id INTEGER NOT NULL REFERENCES chicken_counting (cc_id) ON DELETE RESTRICT, + cw_id INTEGER NOT NULL REFERENCES chicken_weight (cw_id) ON DELETE RESTRICT, + fs_id INTEGER NOT NULL REFERENCES feed_sacks (fs_id) ON DELETE RESTRICT, + manual_id INTEGER NOT NULL REFERENCES manual_input (manual_id) ON DELETE RESTRICT +); + +CREATE INDEX IF NOT EXISTS idx_kpi_cycle_id ON kpi (cycle_id); +CREATE INDEX IF NOT EXISTS idx_kpi_date ON kpi (date); +CREATE UNIQUE INDEX IF NOT EXISTS uniq_kpi_cycle_date ON kpi (cycle_id, date); + +-- ============================================================================= +-- Auto-update updated_at on row changes +-- ============================================================================= +CREATE OR REPLACE FUNCTION erd_set_updated_at() +RETURNS TRIGGER AS $$ +BEGIN + NEW.updated_at = CURRENT_TIMESTAMP; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +DO $$ +DECLARE + tbl TEXT; +BEGIN + FOREACH tbl IN ARRAY ARRAY[ + 'user_access', 'sites', 'kandang', 'cycles', 'flock', + 'iot_panel', 'ai_insight', 'feed_sacks', 'chicken_counting', + 'chicken_weight', 'manual_input', 'kpi' + ] + LOOP + EXECUTE format('DROP TRIGGER IF EXISTS trg_%I_updated_at ON %I', tbl, tbl); + EXECUTE format( + 'CREATE TRIGGER trg_%I_updated_at BEFORE UPDATE ON %I + FOR EACH ROW EXECUTE FUNCTION erd_set_updated_at()', + tbl, tbl + ); + END LOOP; +END; +$$; diff --git a/backend/dev.mjs b/backend/dev.mjs new file mode 100644 index 0000000..5e6524b --- /dev/null +++ b/backend/dev.mjs @@ -0,0 +1,56 @@ +/** + * Run Django management commands from this backend folder. + * Usage: + * node dev.mjs # runserver 0.0.0.0:8000 + * node dev.mjs migrate + * node dev.mjs seed_demo + */ +import { spawn } from 'node:child_process'; +import { existsSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const djangoRoot = path.dirname(fileURLToPath(import.meta.url)); + +if (!existsSync(path.join(djangoRoot, 'manage.py'))) { + console.error('[backend] manage.py not found.'); + process.exit(1); +} + +const extra = process.argv.slice(2); +const manageArgs = + extra.length === 0 + ? ['manage.py', 'runserver', '0.0.0.0:8000'] + : ['manage.py', ...extra]; + +function resolvePython() { + const isWin = process.platform === 'win32'; + const venvPython = isWin + ? path.join(djangoRoot, '.venv', 'Scripts', 'python.exe') + : path.join(djangoRoot, '.venv', 'bin', 'python'); + + if (existsSync(venvPython)) { + return venvPython; + } + + return isWin ? 'python' : 'python3'; +} + +const python = resolvePython(); +const child = spawn(python, manageArgs, { + cwd: djangoRoot, + stdio: 'inherit', + env: process.env, +}); + +child.on('error', (err) => { + console.error(`[backend] Failed to start ${python}:`, err.message); + process.exit(1); +}); + +child.on('exit', (code, signal) => { + if (signal) { + process.exit(1); + } + process.exit(code ?? 0); +}); diff --git a/backend/docker/Dockerfile b/backend/docker/Dockerfile new file mode 100644 index 0000000..de514db --- /dev/null +++ b/backend/docker/Dockerfile @@ -0,0 +1,29 @@ +FROM python:3.12-slim-bookworm + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + PIP_NO_CACHE_DIR=1 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + libjpeg62-turbo-dev \ + zlib1g-dev \ + libpq-dev \ + cron \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +COPY requirements.txt . +RUN pip install -r requirements.txt + +COPY . . +RUN chmod +x docker/entrypoint-api.sh docker/entrypoint-cron.sh \ + && mkdir -p /app/data /app/media /app/staticfiles \ + && cp docker/crontab /etc/cron.d/newdashboard \ + && chmod 0644 /etc/cron.d/newdashboard \ + && crontab /etc/cron.d/newdashboard + +EXPOSE 8000 + +ENTRYPOINT ["./docker/entrypoint-api.sh"] diff --git a/backend/docker/crontab b/backend/docker/crontab new file mode 100644 index 0000000..5172beb --- /dev/null +++ b/backend/docker/crontab @@ -0,0 +1,6 @@ +SHELL=/bin/sh +PATH=/usr/local/bin:/usr/bin:/bin + +0 * * * * root cd /app && /usr/local/bin/python manage.py advance_cycle_days >> /var/log/cron.log 2>&1 +15 * * * * root cd /app && /usr/local/bin/python manage.py recompute_kpi_rollups >> /var/log/cron.log 2>&1 +*/15 * * * * root cd /app && /usr/local/bin/python manage.py sync_karung_from_web_admin >> /var/log/cron.log 2>&1 diff --git a/backend/docker/entrypoint-api.sh b/backend/docker/entrypoint-api.sh new file mode 100644 index 0000000..b1065fa --- /dev/null +++ b/backend/docker/entrypoint-api.sh @@ -0,0 +1,6 @@ +#!/bin/sh +set -e +cd /app +python manage.py migrate --noinput +python manage.py collectstatic --noinput +exec gunicorn config.wsgi:application -c config/gunicorn.py diff --git a/backend/docker/entrypoint-cron.sh b/backend/docker/entrypoint-cron.sh new file mode 100644 index 0000000..f7e7c55 --- /dev/null +++ b/backend/docker/entrypoint-cron.sh @@ -0,0 +1,8 @@ +#!/bin/sh +set -e +cd /app +python manage.py migrate --noinput +# Ensure cron env can see Django settings +printenv | grep -E '^(PATH|DJANGO_|SECRET_|DB_|KARUNG_|CRON_|WAGTAIL_|DEBUG|ALLOWED_|BOOTSTRAP_|API_|CORS_|CSRF_|SESSION_)' \ + > /etc/environment || true +exec cron -f diff --git a/backend/manage.py b/backend/manage.py new file mode 100644 index 0000000..f1b0e57 --- /dev/null +++ b/backend/manage.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Is it installed and available on your PYTHONPATH?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == "__main__": + main() diff --git a/backend/package.json b/backend/package.json new file mode 100644 index 0000000..37f9228 --- /dev/null +++ b/backend/package.json @@ -0,0 +1,13 @@ +{ + "name": "dashboard-new-v2-backend", + "private": true, + "version": "0.1.0", + "type": "module", + "description": "Django API for dashboard-new-v2", + "scripts": { + "dev": "node dev.mjs", + "migrate": "node dev.mjs migrate", + "seed": "node dev.mjs seed_demo", + "start": "node dev.mjs" + } +} diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000..f78f572 --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,11 @@ +Django>=5.1,<5.3 +wagtail>=6.3,<7.0 +djangorestframework>=3.15,<4.0 +drf-spectacular>=0.27,<1.0 +django-cors-headers>=4.4,<5.0 +python-dotenv>=1.0,<2.0 +gunicorn>=23.0,<24.0 +psycopg[binary]>=3.2,<4.0 +httpx>=0.27,<1.0 +Pillow>=10.0,<12.0 +openpyxl>=3.1,<4.0 diff --git a/components/CobbStandardPage.tsx b/components/CobbStandardPage.tsx new file mode 100644 index 0000000..b27a665 --- /dev/null +++ b/components/CobbStandardPage.tsx @@ -0,0 +1,181 @@ +import React, { useEffect, useMemo, useState } from 'react'; +import { cobbStandardPerformance } from '../mockData/cobbStandard.ts'; +import { useFarm } from '../context/FarmContext.tsx'; +import { formatNumber, formatRatio } from '../utils/format.ts'; + +const CobbStandardPage: React.FC = () => { + const { selectedCycle } = useFarm(); + const [initialBw, setInitialBw] = useState(selectedCycle?.chick_in_weight || 42); + const [capacity, setCapacity] = useState(selectedCycle?.doc_in_count || 50000); + + useEffect(() => { + if (selectedCycle?.chick_in_weight) setInitialBw(selectedCycle.chick_in_weight); + if (selectedCycle?.doc_in_count) setCapacity(selectedCycle.doc_in_count); + }, [selectedCycle?.chick_in_weight, selectedCycle?.doc_in_count]); + + const calculatedData = useMemo(() => { + const results = []; + let lastBw = Number(initialBw); + let lastCumFeed = 0; + for (const standard of cobbStandardPerformance) { + const currentBw = lastBw * (1 + standard.dailyGainPercent); + const dailyGainG = currentBw - lastBw; + const cumFeedG = currentBw * standard.fcr; + const dailyFeedG = cumFeedG - lastCumFeed; + const feedKg = (dailyFeedG * capacity) / 1000; + const feedBag = feedKg / 50; + results.push({ + day: standard.day, + bw: Math.round(currentBw), + dailyGainG: Math.round(dailyGainG), + dailyGainPercent: standard.dailyGainPercent, + dailyFeedG: Math.round(dailyFeedG), + cumFeedG: Math.round(cumFeedG), + fcr: standard.fcr, + feedKg: Math.round(feedKg), + feedBag: Math.round(feedBag), + }); + lastBw = currentBw; + lastCumFeed = cumFeedG; + } + return results; + }, [initialBw, capacity]); + + return ( +
+
+ +
+

Kalkulator Standar Performa

+

+ Hitung proyeksi pertumbuhan dan kebutuhan pakan berdasarkan bobot awal dan kapasitas + kandang. +

+
+
+
+
+ + setInitialBw(Number(e.target.value))} + className="mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:ring-red-500 focus:border-red-500 text-lg font-semibold" + /> +
+
+ + setCapacity(Number(e.target.value))} + className="mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:ring-red-500 focus:border-red-500 text-lg font-semibold" + /> +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + {calculatedData.map((row) => { + const isSeventhDay = row.day > 0 && row.day % 7 === 0; + const rowClass = `hover:bg-red-50 ${isSeventhDay ? 'font-bold bg-blue-100' : 'even:bg-gray-100/50'}`; + const cellBorderClass = isSeventhDay + ? 'border-b-[3px] border-double border-blue-400' + : 'border-gray-200'; + return ( + + + + + + + + + + + + ); + })} + +
+ Umur + + BW (g) + + Daily Gain + + Feed Consumption + + FCR + + Kebutuhan Pakan +
(g)(%)Daily (g)Cum (g)(Kg)(Bag)
+ 0 + + {initialBw} +
+ {row.day} + + {formatNumber(row.bw)} + + {formatNumber(row.dailyGainG)} + + {(row.dailyGainPercent * 100).toFixed(0)}% + + {formatNumber(row.dailyFeedG)} + + {formatNumber(row.cumFeedG)} + + {formatRatio(row.fcr)} + + {formatNumber(row.feedKg)} + + {formatNumber(row.feedBag)} +
+
+
+
+ Standar Performa COBB (2018) +
+
+ ); +}; + +export default CobbStandardPage; diff --git a/components/CycleTimeline.tsx b/components/CycleTimeline.tsx new file mode 100644 index 0000000..88edd79 --- /dev/null +++ b/components/CycleTimeline.tsx @@ -0,0 +1,173 @@ +import React, { useEffect, useState } from 'react'; +import { useFarm } from '../context/FarmContext.tsx'; +import { formatDateId, formatDateRange } from '../utils/format.ts'; +import type { Cycle } from '../types/api.ts'; + +type Phase = { name: string; startDay: number; endDay: number; color: string }; + +function phasesFor(totalDays: number): Phase[] { + const starterEnd = Math.min(10, totalDays); + const growerEnd = Math.min(24, totalDays); + const phases: Phase[] = [ + { name: 'Starter', startDay: 1, endDay: starterEnd, color: 'bg-red-400' }, + ]; + if (growerEnd > starterEnd) { + phases.push({ + name: 'Grower', + startDay: starterEnd + 1, + endDay: growerEnd, + color: 'bg-orange-400', + }); + } + if (totalDays > growerEnd) { + phases.push({ + name: 'Finisher', + startDay: growerEnd + 1, + endDay: totalDays, + color: 'bg-yellow-500', + }); + } + return phases; +} + +const statusConfig = { + active: { label: 'Active', bg: 'bg-red-100', text: 'text-red-800', icon: 'fa-running' }, + closed: { + label: 'Completed', + bg: 'bg-green-100', + text: 'text-green-800', + icon: 'fa-check-circle', + }, +}; + +const SingleCycleView: React.FC<{ cycle: Cycle }> = ({ cycle }) => { + const phases = phasesFor(cycle.total_days); + const currentDay = Math.min(Math.max(cycle.current_day, 0), cycle.total_days); + const progress = cycle.total_days > 0 ? (currentDay / cycle.total_days) * 100 : 0; + + return ( +
+
+

+ Siklus:{' '} + {formatDateRange(cycle.start_date, cycle.end_date)} +

+
+

Estimasi Panen

+

{formatDateId(cycle.end_date)}

+
+
+
+
+ {phases.map((phase) => { + const width = ((phase.endDay - phase.startDay + 1) / cycle.total_days) * 100; + return ( +
+ {phase.name} +
+ ); + })} +
+ {cycle.status === 'active' && currentDay > 0 && ( +
+
+
+ Hari ke-{currentDay} +
+
+
+
+ )} +
+
+ Hari 1 + + {formatDateId(cycle.start_date)} + + + Berat DOC: {cycle.chick_in_weight} gram + + + DOC In: {cycle.doc_in_count.toLocaleString('id-ID')} ekor + +
+
+ Hari {cycle.total_days} + + {formatDateId(cycle.end_date)} + +
+
+
+
+ ); +}; + +const CycleTimeline: React.FC = () => { + const { cycles, selectedCycleId, setSelectedCycleId } = useFarm(); + const [localId, setLocalId] = useState(selectedCycleId); + + useEffect(() => { + setLocalId(selectedCycleId); + }, [selectedCycleId]); + + const selected = cycles.find((c) => c.id === localId) ?? null; + + return ( +
+

Linimasa Siklus Produksi

+ {cycles.length === 0 ? ( +

+ Belum ada siklus untuk kandang ini. Buat di Pengaturan. +

+ ) : ( + <> +
+ +
+ {selected ? ( + + ) : ( +

+ Pilih tab siklus di atas, atau buat di Pengaturan. +

+ )} + + )} +
+ ); +}; + +export default CycleTimeline; diff --git a/components/Dashboard.tsx b/components/Dashboard.tsx new file mode 100644 index 0000000..e95941f --- /dev/null +++ b/components/Dashboard.tsx @@ -0,0 +1,331 @@ +import React, { useEffect, useMemo, useState } from 'react'; +import { api, ApiError, errorMessage } from '../services/apiClient.ts'; +import type { + AIInsight, + ChickenCounting, + ChickenWeight, + Karung, + KPI, + LatestAvg, +} from '../types/api.ts'; +import type { View } from '../types/common.ts'; +import { useFarm } from '../context/FarmContext.tsx'; +import KpiCard, { type KpiCardModel } from './KpiCard.tsx'; +import { Banner, EmptyFarm, PageHeader, Spinner } from './ui/Feedback.tsx'; +import { formatNumber, formatDateRange } from '../utils/format.ts'; +import DashboardReportCtas from './dashboard/DashboardReportCtas.tsx'; +import DashboardManualInputForm from './dashboard/DashboardManualInputForm.tsx'; +import ReportPreviewOverlay from './dashboard/ReportPreviewOverlay.tsx'; +import type { DashboardReportType } from '../types/dashboardReport.ts'; + +type Props = { setView: (view: View) => void }; + +function chronological(rows: T[]): T[] { + return [...rows].reverse(); +} + +const Dashboard: React.FC = ({ setView }) => { + const { selectedCycle, selectedKandang, selectedSite } = useFarm(); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(null); + const [kpis, setKpis] = useState([]); + const [countings, setCountings] = useState([]); + const [weights, setWeights] = useState([]); + const [karung, setKarung] = useState(null); + const [latestAvg, setLatestAvg] = useState(null); + const [insights, setInsights] = useState([]); + const [reportOpen, setReportOpen] = useState(false); + const [reportType, setReportType] = useState('daily'); + + useEffect(() => { + if (!selectedCycle) { + setKpis([]); + setCountings([]); + setWeights([]); + setKarung(null); + setLatestAvg(null); + setInsights([]); + return; + } + const cycleId = selectedCycle.id; + let cancelled = false; + (async () => { + setLoading(true); + setError(null); + try { + const [kpiRows, countingRows, weightRows, insightRows] = await Promise.all([ + api.kpis.list({ cycle_id: cycleId }), + api.countings.list({ cycle_id: cycleId }), + api.weights.list({ cycle_id: cycleId }), + api.insights.list({ cycle_id: cycleId }), + ]); + let latestKarung: Karung | null = null; + try { + latestKarung = await api.karungs.latest({ cycle_id: cycleId }); + } catch (err) { + if (!(err instanceof ApiError && err.status === 404)) throw err; + } + let avg: LatestAvg | null = null; + try { + avg = await api.weights.latestAvg({ cycle_id: cycleId }); + } catch (err) { + if (!(err instanceof ApiError && err.status === 404)) throw err; + } + if (cancelled) return; + setKpis(kpiRows); + setCountings(countingRows); + setWeights(weightRows); + setKarung(latestKarung); + setLatestAvg(avg); + setInsights(insightRows); + } catch (err) { + if (!cancelled) setError(errorMessage(err)); + } finally { + if (!cancelled) setLoading(false); + } + })(); + return () => { + cancelled = true; + }; + }, [selectedCycle]); + + const cards: KpiCardModel[] = useMemo(() => { + const latest = kpis[0]; + const fcrTrend = chronological(kpis).map((row) => row.fcr); + const eefTrend = chronological(kpis).map((row) => row.eef); + const popTrend = chronological(countings).map((row) => row.total_count); + const weightTrend = chronological(weights).map((row) => row.average_weight); + const age = latest?.age ?? selectedCycle?.current_day ?? null; + return [ + { + key: 'umur', + title: 'Umur', + value: age, + unit: 'hari', + icon: '📅', + status: age == null ? 'na' : 'ok', + }, + { + key: 'populasi', + title: 'Populasi', + value: latest?.chicken_life ?? countings[0]?.total_count ?? null, + unit: 'ekor', + icon: '🐔', + trend: popTrend, + status: 'ok', + targetView: 'dataManagement', + }, + { + key: 'karung', + title: 'Karung Dituang', + value: karung?.out_today ?? karung?.feed_use_today ?? null, + unit: 'karung', + icon: '🛢️', + status: karung ? 'ok' : 'na', + targetView: 'feedSackCounting', + }, + { + key: 'weight', + title: 'Berat AVG', + value: latestAvg?.average_weight ?? weights[0]?.average_weight ?? null, + unit: 'gram', + icon: '⚖️', + trend: weightTrend, + status: latestAvg || weights[0] ? 'ok' : 'na', + targetView: 'weightMonitoring', + }, + { + key: 'fcr', + title: 'FCR', + value: latest?.fcr ?? null, + unit: '', + icon: '📈', + trend: fcrTrend, + status: latest ? 'ok' : 'na', + targetView: 'fcrDashboard', + }, + { + key: 'eef', + title: 'EEF', + value: latest?.eef ?? null, + unit: '', + icon: '🎯', + trend: eefTrend, + status: latest ? 'ok' : 'na', + targetView: 'eefDashboard', + }, + ]; + }, [kpis, countings, weights, karung, latestAvg, selectedCycle]); + + if (!selectedCycle) return setView('kandangSettings')} />; + + const feedTotal = kpis[0]?.feed_total ?? 0; + const feedWeightKg = feedTotal * 50; + const feedInTotal = karung?.in_total ?? 0; + const feedOutTotal = karung?.out_total ?? 0; + const feedInitialBalance = selectedCycle?.feed_initial_balance ?? 0; + const feedSaldo = feedInTotal - feedTotal - feedOutTotal; + const feedSaldoColor = + feedSaldo > 0 ? 'text-green-600' : feedSaldo < 0 ? 'text-red-600' : 'text-gray-600'; + + return ( +
+
+ + { + setReportType('daily'); + setReportOpen(true); + }} + onOpenEndCycle={() => { + setReportType('end_cycle'); + setReportOpen(true); + }} + /> +
+ {error && ( +
+ {error} +
+ )} + {loading ? ( + + ) : ( + <> +
+ {cards.map((card) => ( + setView(card.targetView as View) : undefined} + /> + ))} +
+
+
+
+ +
+
+

Total Pakan

+

Kumulatif karung pakan sejak awal siklus

+
+
+
+
+
+
+ +

Total Pakan

+
+

{formatNumber(feedTotal)}

+

karung

+
+
+
+ +

Total Feed In

+
+

{formatNumber(feedInTotal)}

+

karung

+
+
+
+ +

Total Feed Out

+
+

{formatNumber(feedOutTotal)}

+

karung

+
+
+
+ +

Saldo Awal

+
+

+ {formatNumber(feedInitialBalance)} +

+

karung

+
+
+ +
+
+
+ +

Total Berat Pakan

+
+

{formatNumber(feedWeightKg)}

+

kg

+
+
+
+ +

Saldo Karung Pakan

+
+

+ {formatNumber(feedSaldo)} +

+

karung

+
+
+
+
+
+

AI Insight

+ {insights.length === 0 ? ( + Belum ada insight untuk siklus ini. + ) : ( +
+ {insights.slice(0, 4).map((item) => ( +
+
+
+

+ {item.section} +

+

+ {item.alert || 'Insight'} +

+
+ {item.session} +
+

+ {item.insight_text} +

+
+ ))} +
+ )} +
+ + + )} + setReportOpen(false)} + /> +
+ ); +}; + +export default Dashboard; diff --git a/components/EefDashboardPage.tsx b/components/EefDashboardPage.tsx new file mode 100644 index 0000000..af59bc0 --- /dev/null +++ b/components/EefDashboardPage.tsx @@ -0,0 +1,471 @@ +import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import { + CartesianGrid, + Line, + LineChart, + ResponsiveContainer, + Tooltip, + XAxis, + YAxis, +} from 'recharts'; +import { api, errorMessage } from '../services/apiClient.ts'; +import type { AIInsight, KPI } from '../types/api.ts'; +import { useFarm } from '../context/FarmContext.tsx'; +import { Banner, EmptyFarm, PageHeader, Spinner } from './ui/Feedback.tsx'; +import { formatNumber, formatRatio } from '../utils/format.ts'; + +type EefRow = { + day: number; + chickenLifePercentage: number | null; + averageHarvestBw: number | null; + averageHarvestDay: number | null; + fcr: number | null; + eef: number | null; +}; + +type TrendPoint = { day: number; eef: number | null }; +type SupportPoint = { + day: number; + chickenLifePercentage: number | null; + averageHarvestBw: number | null; + averageHarvestDay: number | null; + fcr: number | null; +}; + +const formatThreeDecimal = (value: number | null): string => + value == null ? 'N/A' : formatRatio(value, 3); + +const formatNum = (value: number | null | undefined, maxDecimals = 0): string => + value == null || !Number.isFinite(Number(value)) + ? 'N/A' + : formatNumber(Number(value), maxDecimals, 0, true); + +const StatCard: React.FC<{ title: string; value: string; unit: string }> = ({ + title, + value, + unit, +}) => ( +
+

{title}

+
+ {value} + {unit} +
+
+); + +const EefTrendChart: React.FC<{ data: TrendPoint[] }> = ({ data }) => ( +
+

Grafik EEF

+
+ {data.length === 0 ? ( +
+ Tidak ada data EEF tersedia. +
+ ) : ( + + + + + formatNum(Number(value), 0)} + width={60} + domain={[0, 'dataMax + 20']} + label={{ value: 'EEF', angle: -90, position: 'insideLeft' }} + /> + [formatThreeDecimal(Number(value)), 'EEF']} + labelFormatter={(label) => `Hari ${label}`} + /> + + + + )} +
+
+); + +const SupportingMetricChart: React.FC<{ + title: string; + data: SupportPoint[]; + dataKey: keyof Omit; + unit: string; + stroke: string; + maximumFractionDigits?: number; + valueFormatter?: (value: number) => string; +}> = ({ title, data, dataKey, unit, stroke, maximumFractionDigits = 0, valueFormatter }) => ( +
+

{title}

+
+ {data.length === 0 ? ( +
+ Tidak ada data tersedia. +
+ ) : ( + + + + + + valueFormatter + ? valueFormatter(Number(value)) + : formatNum(Number(value), maximumFractionDigits) + } + width={70} + /> + { + const formatted = valueFormatter + ? valueFormatter(Number(value)) + : formatNum(Number(value), maximumFractionDigits); + return [`${formatted}${unit ? ` ${unit}` : ''}`, title]; + }} + labelFormatter={(label) => `Hari ${label}`} + /> + + + + )} +
+
+); + +const EefDashboardPage: React.FC<{ onSettings: () => void }> = ({ onSettings }) => { + const { selectedCycle } = useFarm(); + const [rows, setRows] = useState([]); + const [insights, setInsights] = useState([]); + const [loading, setLoading] = useState(false); + const [refreshing, setRefreshing] = useState(false); + const [error, setError] = useState(null); + const [lastUpdated, setLastUpdated] = useState(null); + + const loadData = useCallback(async () => { + if (!selectedCycle) return; + setError(null); + try { + const [kpiRows, insightRows] = await Promise.all([ + api.kpis.list({ cycle_id: selectedCycle.id }), + api.insights.list({ cycle_id: selectedCycle.id }), + ]); + setRows(kpiRows); + setInsights(insightRows); + setLastUpdated(new Date()); + } catch (err) { + setError(errorMessage(err)); + } + }, [selectedCycle]); + + useEffect(() => { + if (!selectedCycle) { + setRows([]); + setInsights([]); + setLastUpdated(null); + return; + } + let cancelled = false; + (async () => { + setLoading(true); + try { + await loadData(); + } finally { + if (!cancelled) setLoading(false); + } + })(); + return () => { + cancelled = true; + }; + }, [selectedCycle, loadData]); + + const handleRefresh = async () => { + setRefreshing(true); + try { + await loadData(); + } finally { + setRefreshing(false); + } + }; + + const eefRows = useMemo( + () => + [...rows] + .sort((a, b) => a.age - b.age || a.date.localeCompare(b.date)) + .map((row) => ({ + day: row.age, + chickenLifePercentage: row.chicken_life_percentage, + averageHarvestBw: row.average_harvest_weight > 0 ? row.average_harvest_weight : null, + averageHarvestDay: row.average_harvest_day > 0 ? row.average_harvest_day : null, + fcr: row.fcr > 0 ? row.fcr : null, + eef: row.eef > 0 ? row.eef : null, + })), + [rows] + ); + + const trendData = useMemo( + () => eefRows.map((row) => ({ day: row.day, eef: row.eef })), + [eefRows] + ); + + const supportData = useMemo( + () => + eefRows.map((row) => ({ + day: row.day, + chickenLifePercentage: row.chickenLifePercentage, + averageHarvestBw: row.averageHarvestBw, + averageHarvestDay: row.averageHarvestDay, + fcr: row.fcr, + })), + [eefRows] + ); + + const getLatestValid = (key: K): EefRow[K] | null => { + for (let i = eefRows.length - 1; i >= 0; i--) { + const val = eefRows[i]?.[key]; + if (val !== null && val !== undefined && val !== 0 && String(val) !== '') { + return val; + } + } + return null; + }; + + const latestEef = getLatestValid('eef'); + + const eefInsights = useMemo(() => { + const matched = insights.filter((item) => { + const text = + `${item.section ?? ''} ${item.alert ?? ''} ${item.insight_text ?? ''}`.toLowerCase(); + return ( + text.includes('eef') || + text.includes('fcr') || + text.includes('hidup') || + text.includes('live') || + text.includes('panen') || + text.includes('bw') + ); + }); + return (matched.length > 0 ? matched : insights).slice(0, 4); + }, [insights]); + + if (!selectedCycle) return ; + + return ( +
+
+ } + /> + +
+ + {error && ( +
+ {error} +
+ )} + +
+

+ + AI Insight EEF +

+ {loading ? ( + + ) : eefInsights.length === 0 ? ( + Belum ada insight untuk siklus ini. + ) : ( +
+ {eefInsights.map((item) => ( +
+
+
+

{item.section}

+

{item.alert || 'Insight'}

+
+ {item.session} +
+

+ {item.insight_text} +

+
+ ))} +
+ )} +
+ + {loading ? ( + + ) : ( +
+
+ + + + + +
+ + + +
+
+

Data Pendukung EEF

+ {lastUpdated && ( +

+ Update:{' '} + {lastUpdated.toLocaleTimeString('id-ID', { hour: '2-digit', minute: '2-digit' })} +

+ )} +
+ +
+

Grafik Data Pendukung

+
+ + + + formatThreeDecimal(value)} + /> +
+
+ +
+
+

Tabel Data Pendukung EEF

+
+
+ + + + + + + + + + + + + {eefRows.map((row) => ( + + + + + + + + + ))} + {eefRows.length === 0 && ( + + + + )} + +
UmurPersentase Ayam HidupBW Rata-rata PanenUmur Rata-rata PanenFCREEF
Hari {row.day} + {formatNum(row.chickenLifePercentage, 3)} + {row.chickenLifePercentage != null ? '%' : ''} + + {formatNum(row.averageHarvestBw, 2)} + {row.averageHarvestBw != null ? ' g' : ''} + + {formatNum(row.averageHarvestDay, 2)} + + {formatThreeDecimal(row.fcr)} + + {formatThreeDecimal(row.eef)} +
+ Tidak ada data EEF tersedia. +
+
+
+
+
+ )} +
+ ); +}; + +export default EefDashboardPage; diff --git a/components/FcrDashboardPage.tsx b/components/FcrDashboardPage.tsx new file mode 100644 index 0000000..1824d7e --- /dev/null +++ b/components/FcrDashboardPage.tsx @@ -0,0 +1,473 @@ +import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import { + CartesianGrid, + Line, + LineChart, + ResponsiveContainer, + Tooltip, + XAxis, + YAxis, +} from 'recharts'; +import { api, errorMessage } from '../services/apiClient.ts'; +import type { AIInsight, ChickenWeight, KPI } from '../types/api.ts'; +import { useFarm } from '../context/FarmContext.tsx'; +import { Banner, EmptyFarm, PageHeader, Spinner } from './ui/Feedback.tsx'; +import { formatNumber, formatRatio } from '../utils/format.ts'; + +type FcrRow = { + day: number; + feedTotal: number; + iotWeight: number | null; + chickenLife: number; + harvestWeightKg: number; + fcr: number | null; +}; + +type TrendPoint = { day: number; fcr: number | null }; +type SupportPoint = { + day: number; + feedTotal: number; + iotWeight: number | null; + chickenLife: number; + harvestWeightKg: number; +}; + +const formatFcr = (value: number | null): string => (value == null ? 'N/A' : formatRatio(value, 3)); + +const formatNum = (value: number | null | undefined, maxDecimals = 0): string => + value == null || !Number.isFinite(Number(value)) + ? 'N/A' + : formatNumber(Number(value), maxDecimals, 0, true); + +const StatCard: React.FC<{ title: string; value: string; unit: string }> = ({ + title, + value, + unit, +}) => ( +
+

{title}

+
+ {value} + {unit} +
+
+); + +const FcrTrendChart: React.FC<{ data: TrendPoint[] }> = ({ data }) => ( +
+

Grafik FCR

+
+ {data.length === 0 ? ( +
+ Tidak ada data FCR tersedia. +
+ ) : ( + + + + + + [formatFcr(Number(value)), 'FCR']} + labelFormatter={(label) => `Hari ${label}`} + /> + + + + )} +
+
+); + +const SupportingMetricChart: React.FC<{ + title: string; + data: SupportPoint[]; + dataKey: keyof Omit; + unit: string; + stroke: string; + maximumFractionDigits?: number; +}> = ({ title, data, dataKey, unit, stroke, maximumFractionDigits = 0 }) => ( +
+

{title}

+
+ {data.length === 0 ? ( +
+ Tidak ada data tersedia. +
+ ) : ( + + + + + formatNum(Number(value), maximumFractionDigits)} + width={70} + /> + [ + `${formatNum(Number(value), maximumFractionDigits)} ${unit}`, + title, + ]} + labelFormatter={(label) => `Hari ${label}`} + /> + + + + )} +
+
+); + +const FcrDashboardPage: React.FC<{ onSettings: () => void }> = ({ onSettings }) => { + const { selectedCycle } = useFarm(); + const [rows, setRows] = useState([]); + const [weightRows, setWeightRows] = useState([]); + const [insights, setInsights] = useState([]); + const [loading, setLoading] = useState(false); + const [refreshing, setRefreshing] = useState(false); + const [error, setError] = useState(null); + const [lastUpdated, setLastUpdated] = useState(null); + + const loadData = useCallback(async () => { + if (!selectedCycle) return; + setError(null); + try { + const [kpiRows, insightRows, weightList] = await Promise.all([ + api.kpis.list({ cycle_id: selectedCycle.id }), + api.insights.list({ cycle_id: selectedCycle.id }), + api.weights.list({ cycle_id: selectedCycle.id }), + ]); + setRows(kpiRows); + setInsights(insightRows); + setWeightRows(weightList); + setLastUpdated(new Date()); + } catch (err) { + setError(errorMessage(err)); + } + }, [selectedCycle]); + + useEffect(() => { + if (!selectedCycle) { + setRows([]); + setWeightRows([]); + setInsights([]); + setLastUpdated(null); + return; + } + let cancelled = false; + (async () => { + setLoading(true); + try { + await loadData(); + } finally { + if (!cancelled) setLoading(false); + } + })(); + return () => { + cancelled = true; + }; + }, [selectedCycle, loadData]); + + const handleRefresh = async () => { + setRefreshing(true); + try { + await loadData(); + } finally { + setRefreshing(false); + } + }; + + const weightByAge = useMemo(() => { + const map = new Map(); + for (const weight of weightRows) { + if (weight.average_weight > 0 && !map.has(weight.age)) { + map.set(weight.age, weight.average_weight); + } + } + return map; + }, [weightRows]); + + const fcrRows = useMemo( + () => + [...rows] + .sort((a, b) => a.age - b.age || a.date.localeCompare(b.date)) + .map((row) => ({ + day: row.age, + feedTotal: row.feed_total, + iotWeight: weightByAge.get(row.age) ?? null, + chickenLife: row.chicken_life, + harvestWeightKg: row.harvest_weight_total / 1000, + fcr: row.fcr > 0 ? row.fcr : null, + })), + [rows, weightByAge] + ); + + const trendData = useMemo( + () => fcrRows.map((row) => ({ day: row.day, fcr: row.fcr })), + [fcrRows] + ); + + const supportData = useMemo( + () => + fcrRows.map((row) => ({ + day: row.day, + feedTotal: row.feedTotal, + iotWeight: row.iotWeight, + chickenLife: row.chickenLife, + harvestWeightKg: row.harvestWeightKg, + })), + [fcrRows] + ); + + const getLatestValid = (key: K): FcrRow[K] | null => { + for (let i = fcrRows.length - 1; i >= 0; i--) { + const val = fcrRows[i]?.[key]; + if (val !== null && val !== undefined && val !== 0 && String(val) !== '') { + return val; + } + } + return null; + }; + + const latestFcr = getLatestValid('fcr'); + const latestIotWeight = getLatestValid('iotWeight'); + + const fcrInsights = useMemo(() => { + const matched = insights.filter((item) => { + const text = + `${item.section ?? ''} ${item.alert ?? ''} ${item.insight_text ?? ''}`.toLowerCase(); + return ( + text.includes('fcr') || + text.includes('pakan') || + text.includes('feed') || + text.includes('konversi') || + text.includes('panen') + ); + }); + return (matched.length > 0 ? matched : insights).slice(0, 4); + }, [insights]); + + if (!selectedCycle) return ; + + return ( +
+
+ } + /> + +
+ + {error && ( +
+ {error} +
+ )} + +
+

+ + AI Insight FCR +

+ {loading ? ( + + ) : fcrInsights.length === 0 ? ( + Belum ada insight untuk siklus ini. + ) : ( +
+ {fcrInsights.map((item) => ( +
+
+
+

{item.section}

+

{item.alert || 'Insight'}

+
+ {item.session} +
+

+ {item.insight_text} +

+
+ ))} +
+ )} +
+ + {loading ? ( + + ) : ( +
+
+ + + + + +
+ + + +
+
+

Data Pendukung FCR

+ {lastUpdated && ( +

+ Update:{' '} + {lastUpdated.toLocaleTimeString('id-ID', { hour: '2-digit', minute: '2-digit' })} +

+ )} +
+ +
+

Grafik Data Pendukung

+
+ + + + +
+
+ +
+
+

Tabel Data Pendukung FCR

+
+
+ + + + + + + + + + + + + {fcrRows.map((row) => ( + + + + + + + + + ))} + {fcrRows.length === 0 && ( + + + + )} + +
UmurTotal PakanBobot IoTAyam HidupTotal Bobot PanenFCR
Hari {row.day} + {formatNum(row.feedTotal)} karung + + {formatNum(row.iotWeight, 2)} + {row.iotWeight != null ? ' g' : ''} + + {formatNum(row.chickenLife)} ekor + + {formatNum(row.harvestWeightKg, 1)} kg + + {formatFcr(row.fcr)} +
+ Tidak ada data FCR tersedia. +
+
+
+
+
+ )} +
+ ); +}; + +export default FcrDashboardPage; diff --git a/components/FeedSackCountingPage.tsx b/components/FeedSackCountingPage.tsx new file mode 100644 index 0000000..d4546ed --- /dev/null +++ b/components/FeedSackCountingPage.tsx @@ -0,0 +1,318 @@ +import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import { api, errorMessage } from '../services/apiClient.ts'; +import type { AIInsight, Cycle, Karung, ManualInput } from '../types/api.ts'; +import { useFarm } from '../context/FarmContext.tsx'; +import { Banner, EmptyFarm, Spinner } from './ui/Feedback.tsx'; +import { addDaysIso, cycleDayForDate, formatDateId, todayIso } from '../utils/format.ts'; +import FeedStats from './feedSack/FeedStats.tsx'; +import FeedSaldoCard from './feedSack/FeedSaldoCard.tsx'; +import FeedTrendChart from './feedSack/FeedTrendChart.tsx'; +import FeedDailySummaryTable from './feedSack/FeedDailySummaryTable.tsx'; +import InitialBalanceCard from './feedSack/InitialBalanceCard.tsx'; + +const FeedSackCountingPage: React.FC<{ onSettings: () => void }> = ({ onSettings }) => { + const { selectedCycle, selectedKandang, selectedSite, cycles, setSelectedCycleId } = useFarm(); + const [rows, setRows] = useState([]); + const [manualRows, setManualRows] = useState([]); + const [insights, setInsights] = useState([]); + const [loading, setLoading] = useState(false); + const [syncing, setSyncing] = useState(false); + const [error, setError] = useState(null); + const [notice, setNotice] = useState(null); + const [showCyclePicker, setShowCyclePicker] = useState(false); + + const reload = useCallback(async (cycleId: number) => { + setLoading(true); + setError(null); + try { + const [karungRows, insightRows, manualList] = await Promise.all([ + api.karungs.list({ cycle_id: cycleId }), + api.insights.list({ cycle_id: cycleId }), + api.manualInputs.list({ cycle_id: cycleId }), + ]); + setRows(karungRows); + setInsights(insightRows); + setManualRows(manualList); + } catch (err) { + setError(errorMessage(err)); + } finally { + setLoading(false); + } + }, []); + + useEffect(() => { + if (!selectedCycle) { + setRows([]); + setInsights([]); + setManualRows([]); + return; + } + void reload(selectedCycle.id); + }, [selectedCycle, reload]); + + const sortedRows = useMemo(() => [...rows].sort((a, b) => a.date.localeCompare(b.date)), [rows]); + const latest = sortedRows[sortedRows.length - 1] ?? null; + + const sortedManualRows = useMemo( + () => [...manualRows].sort((a, b) => a.date.localeCompare(b.date)), + [manualRows] + ); + const displayDateIso = latest?.date ?? todayIso(); + const latestManual = + sortedManualRows.find((row) => row.date === displayDateIso) ?? + sortedManualRows[sortedManualRows.length - 1] ?? + null; + + // Display date follows the latest snapshot; without any snapshot, fall back to today. + // Cycle day is capped so data never extends past the cycle's planned duration. + const displayDate = latest?.date ?? todayIso(); + const currentDay = useMemo(() => { + if (!selectedCycle) return 0; + const rawDay = cycleDayForDate(selectedCycle.start_date, displayDate); + return Math.min(rawDay, Math.max(0, selectedCycle.total_days - 1)); + }, [selectedCycle, displayDate]); + + const handleSync = useCallback(async () => { + if (!selectedCycle) return; + setSyncing(true); + setError(null); + setNotice(null); + try { + await api.karungs.request({ cycle_id: selectedCycle.id, section: 'today' }); + setNotice('Sinkron karung-web-admin berhasil.'); + await reload(selectedCycle.id); + } catch (err) { + setError(errorMessage(err)); + } finally { + setSyncing(false); + } + }, [selectedCycle, reload]); + + const sortedCycles = useMemo(() => { + return [...cycles].sort( + (a, b) => new Date(b.start_date).getTime() - new Date(a.start_date).getTime() + ); + }, [cycles]); + + const formatCycleDateRange = (cycle: Cycle) => { + const start = formatDateId(cycle.start_date); + if (cycle.end_date) return `${start} - ${formatDateId(cycle.end_date)}`; + return `${start} - ${formatDateId(addDaysIso(cycle.start_date, cycle.total_days))}`; + }; + + const lastUpdated = useMemo(() => { + if (!latest) return null; + const timestamp = latest.updated_at || latest.created_at; + if (!timestamp) return null; + const date = new Date(timestamp); + if (Number.isNaN(date.getTime())) return null; + return `${date.toLocaleDateString('id-ID', { + day: 'numeric', + month: 'short', + year: 'numeric', + })} ${date.toLocaleTimeString('id-ID', { hour: '2-digit', minute: '2-digit' })}`; + }, [latest]); + + if (!selectedCycle) return ; + + return ( +
+ {/* Page Title */} +
+
+ +
+
+

Hitung Karung

+

Monitoring karung masuk dan karung dituang per hari

+ {lastUpdated && ( +

+ + Terakhir diperbarui: {lastUpdated} +

+ )} +
+
+ +
+
+ + {/* Cycle Selector */} +
+
+ + + {/* Cycle Picker Dropdown */} + {showCyclePicker && ( +
+ {sortedCycles.map((cycle) => ( + + ))} +
+ )} +
+
+ + {error && ( +
+ {error} +
+ )} + {notice && ( +
+ {notice} +
+ )} + + {loading ? ( + + ) : ( +
+ {/* AI Insight */} +
+

+ + AI Insight Hitung Karung +

+ {insights.length === 0 ? ( + Belum ada insight untuk siklus ini. + ) : ( +
+ {insights.slice(0, 4).map((item) => ( +
+
+
+

+ {item.section} +

+

+ {item.alert || 'Insight'} +

+
+ {item.session} +
+

+ {item.insight_text} +

+
+ ))} +
+ )} +
+ + {/* Saldo Awal */} + reload(selectedCycle.id)} /> + + {/* Ringkasan stats */} + + + {/* Saldo Karung */} + + + {/* Tren harian */} + + + {/* Rincian harian */} + +
+ )} + +
+ Sumber data: karung-web-admin · {selectedSite ? selectedSite.site_name : ''} + {selectedKandang ? ` · ${selectedKandang.kandang_name}` : ''} +
+
+ ); +}; + +export default FeedSackCountingPage; diff --git a/components/Header.tsx b/components/Header.tsx new file mode 100644 index 0000000..f36d845 --- /dev/null +++ b/components/Header.tsx @@ -0,0 +1,156 @@ +import React, { useEffect, useRef, useState } from 'react'; +import { useAuth } from '../context/AuthContext.tsx'; +import { useFarm } from '../context/FarmContext.tsx'; +import { formatDateId } from '../utils/format.ts'; + +type HeaderProps = { + onToggleSidebar: () => void; + isTimelineVisible: boolean; + onToggleTimeline: () => void; +}; + +const Header: React.FC = ({ + onToggleSidebar, + isTimelineVisible, + onToggleTimeline, +}) => { + const { user, logout } = useAuth(); + const { + sites, + kandangs, + cycles, + selectedSiteId, + selectedKandangId, + selectedCycleId, + setSelectedSiteId, + setSelectedKandangId, + setSelectedCycleId, + } = useFarm(); + const [open, setOpen] = useState(false); + const dropdownRef = useRef(null); + + useEffect(() => { + const onClick = (event: MouseEvent) => { + if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { + setOpen(false); + } + }; + document.addEventListener('mousedown', onClick); + return () => document.removeEventListener('mousedown', onClick); + }, []); + + if (!user) return null; + + return ( +
+
+
+ +
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+ + {open && ( +
+
+

{user.user_name}

+

+ {user.status === 'superadmin' ? 'Admin' : 'Pengguna'} +

+
+ +
+ )} +
+
+
+
+ ); +}; + +export default Header; diff --git a/components/IotPanelPage.tsx b/components/IotPanelPage.tsx new file mode 100644 index 0000000..8f85ce6 --- /dev/null +++ b/components/IotPanelPage.tsx @@ -0,0 +1,595 @@ +import React, { useEffect, useMemo, useState } from 'react'; +import { + CartesianGrid, + Line, + LineChart, + ResponsiveContainer, + Tooltip, + XAxis, + YAxis, +} from 'recharts'; +import { api, errorMessage } from '../services/apiClient.ts'; +import type { AIInsight, Flock, PanelIoT } from '../types/api.ts'; +import { useFarm } from '../context/FarmContext.tsx'; +import { Banner, EmptyFarm, PageHeader, Spinner } from './ui/Feedback.tsx'; +import { cycleDayForDate, formatDateId, formatDateRange, formatNumber } from '../utils/format.ts'; +import { computeExperienceCalc } from './iotPanel/chillFactor.ts'; +import IotPanelChillFactorCard from './iotPanel/IotPanelChillFactorCard.tsx'; +import IotPanelExperienceTempCard from './iotPanel/IotPanelExperienceTempCard.tsx'; + +const cardClass = 'rounded-xl border border-slate-200 bg-white p-4 shadow-sm'; + +const SECONDARY_CHARTS = [ + { key: 'humidity', label: 'Kelembapan', unit: ' %', color: '#3b82f6' }, + { key: 'wind', label: 'Angin', unit: ' m/s', color: '#6366f1' }, + { key: 'water', label: 'Air', unit: ' L', color: '#06b6d4' }, +] as const; + +const display = (value: number | null | undefined, suffix = '') => + value == null || !Number.isFinite(Number(value)) + ? 'N/A' + : `${formatNumber(Number(value))}${suffix}`; + +const formatTime = (iso: string | null | undefined): string => { + if (!iso) return '--'; + const date = new Date(iso); + if (Number.isNaN(date.getTime())) return iso; + return date.toLocaleTimeString('id-ID', { hour: '2-digit', minute: '2-digit' }); +}; + +type DaySummary = { + count: number; + temp: number; + minTemp: number; + maxTemp: number; + experienceTemp: number; + minExp: number; + maxExp: number; + humidity: number; + windSpeed: number; + waterTotal: number; +}; + +const IotPanelPage: React.FC<{ onSettings: () => void }> = ({ onSettings }) => { + const { selectedCycle, selectedKandang, selectedSite } = useFarm(); + const [flocks, setFlocks] = useState([]); + const [selectedFlockId, setSelectedFlockId] = useState(null); + const [dates, setDates] = useState([]); + const [selectedDate, setSelectedDate] = useState(''); + const [dayRows, setDayRows] = useState([]); + const [insights, setInsights] = useState([]); + const [loading, setLoading] = useState(false); + const [refreshing, setRefreshing] = useState(false); + const [error, setError] = useState(null); + const [refreshToken, setRefreshToken] = useState(0); + const [selectedChartKey, setSelectedChartKey] = useState<'humidity' | 'wind' | 'water' | null>( + null + ); + + useEffect(() => { + if (!selectedChartKey) return; + const onKey = (event: KeyboardEvent) => { + if (event.key === 'Escape') setSelectedChartKey(null); + }; + window.addEventListener('keydown', onKey); + return () => window.removeEventListener('keydown', onKey); + }, [selectedChartKey]); + + useEffect(() => { + if (!selectedCycle) { + setFlocks([]); + setSelectedFlockId(null); + setDates([]); + setSelectedDate(''); + setDayRows([]); + setInsights([]); + return; + } + let cancelled = false; + (async () => { + setError(null); + try { + const data = await api.flocks.list({ cycle_id: selectedCycle.id }); + if (cancelled) return; + setFlocks(data); + setSelectedFlockId((previous) => + previous && data.some((flock) => flock.id === previous) ? previous : (data[0]?.id ?? null) + ); + } catch (err) { + if (!cancelled) setError(errorMessage(err)); + } + })(); + return () => { + cancelled = true; + }; + }, [selectedCycle, refreshToken]); + + useEffect(() => { + if (!selectedCycle || selectedFlockId == null) { + setDates([]); + setSelectedDate(''); + setDayRows([]); + setInsights([]); + return; + } + let cancelled = false; + (async () => { + setLoading(true); + setError(null); + try { + const [dateList, insightRows] = await Promise.all([ + api.panelIot.dates({ cycle_id: selectedCycle.id, flock_id: selectedFlockId }), + api.insights.list({ cycle_id: selectedCycle.id }), + ]); + if (cancelled) return; + const sortedDates = [...dateList].sort(); + setDates(sortedDates); + setInsights(insightRows); + setSelectedDate((previous) => + previous && sortedDates.includes(previous) + ? previous + : (sortedDates[sortedDates.length - 1] ?? '') + ); + } catch (err) { + if (!cancelled) setError(errorMessage(err)); + } finally { + if (!cancelled) setLoading(false); + } + })(); + return () => { + cancelled = true; + }; + }, [selectedCycle, selectedFlockId, refreshToken]); + + useEffect(() => { + if (!selectedCycle || selectedFlockId == null || !selectedDate) { + setDayRows([]); + return; + } + let cancelled = false; + (async () => { + setLoading(true); + setError(null); + try { + const data = await api.panelIot.list({ + cycle_id: selectedCycle.id, + flock_id: selectedFlockId, + date: selectedDate, + }); + if (!cancelled) { + const sorted = [...data].sort((a, b) => + (a.timestamp ?? a.date).localeCompare(b.timestamp ?? b.date) + ); + setDayRows(sorted); + } + } catch (err) { + if (!cancelled) setError(errorMessage(err)); + } finally { + if (!cancelled) setLoading(false); + } + })(); + return () => { + cancelled = true; + }; + }, [selectedCycle, selectedFlockId, selectedDate, refreshToken]); + + const summary = useMemo(() => { + if (dayRows.length === 0) return null; + const sorted = [...dayRows].sort((a, b) => + (a.timestamp ?? a.date).localeCompare(b.timestamp ?? b.date) + ); + const min = (key: keyof PanelIoT) => Math.min(...sorted.map((row) => Number(row[key]))); + const max = (key: keyof PanelIoT) => Math.max(...sorted.map((row) => Number(row[key]))); + const last = sorted[sorted.length - 1]!; + return { + count: sorted.length, + temp: last.average_temperature, + minTemp: min('average_temperature'), + maxTemp: max('average_temperature'), + experienceTemp: last.experience_temperature, + minExp: min('experience_temperature'), + maxExp: max('experience_temperature'), + humidity: last.humidity, + windSpeed: last.wind_speed, + waterTotal: last.water_total, + }; + }, [dayRows]); + + const chartRows = useMemo( + () => + [...dayRows] + .sort((a, b) => (a.timestamp ?? a.date).localeCompare(b.timestamp ?? b.date)) + .map((row) => ({ + time: formatTime(row.timestamp), + average: row.average_temperature, + experience: row.experience_temperature, + humidity: row.humidity, + wind: row.wind_speed, + water: row.water_total, + })), + [dayRows] + ); + + const dayAge = selectedDate + ? cycleDayForDate(selectedCycle?.start_date ?? '', selectedDate) + : null; + const experienceCalc = useMemo( + () => + computeExperienceCalc({ + averageTemp: summary?.temp, + windSpeed: summary?.windSpeed, + humidity: summary?.humidity, + dayAge, + }), + [summary, dayAge] + ); + + const iotInsights = useMemo(() => { + const matched = insights.filter((item) => { + const text = + `${item.section ?? ''} ${item.alert ?? ''} ${item.insight_text ?? ''}`.toLowerCase(); + return ( + text.includes('iot') || + text.includes('suhu') || + text.includes('kelembapan') || + text.includes('humidity') || + text.includes('temperature') || + text.includes('lingkungan') + ); + }); + return (matched.length > 0 ? matched : insights).slice(0, 4); + }, [insights]); + + const refresh = () => { + setRefreshing(true); + setRefreshToken((token) => token + 1); + window.setTimeout(() => setRefreshing(false), 500); + }; + + if (!selectedCycle) return ; + + return ( +
+ } + actions={ +
+ + +
+ } + /> + + {error && {error}} + {loading && dayRows.length === 0 ? ( + + ) : summary ? ( + <> +
+

+ + AI Insight Panel IoT +

+ {iotInsights.length === 0 ? ( + Belum ada insight untuk siklus ini. + ) : ( +
+ {iotInsights.map((item) => ( +
+
+
+

+ {item.section} +

+

+ {item.alert || 'Insight'} +

+
+ {item.session} +
+

+ {item.insight_text} +

+
+ ))} +
+ )} +
+ +
+ + + + setSelectedDate(event.target.value)} + className="rounded-lg border border-slate-300 bg-white px-2 py-1.5 text-sm text-slate-700 focus:ring-2 focus:ring-red-500 focus:border-red-500" + /> + + {summary.count} pembacaan +
+ +
+
+
+
+
+

+ + Suhu Rata-Rata +

+

+ {display(summary.temp, ' °C')} +

+

+ {display(summary.minTemp, ' °C')} – {display(summary.maxTemp, ' °C')} +

+
+
+

+ + Experience Suhu +

+

+ {display(summary.experienceTemp, ' °C')} +

+

+ {display(summary.minExp, ' °C')} – {display(summary.maxExp, ' °C')} +

+
+
+
+ +
+
+ {[ + { + label: 'Kelembapan', + value: display(summary.humidity, ' %'), + icon: 'fa-droplet', + color: 'text-blue-500', + chartKey: 'humidity', + }, + { + label: 'Angin', + value: display(summary.windSpeed, ' m/s'), + icon: 'fa-wind', + color: 'text-indigo-500', + chartKey: 'wind', + }, + { + label: 'Air total', + value: display(summary.waterTotal, ' L'), + icon: 'fa-water', + color: 'text-cyan-500', + chartKey: 'water', + }, + { + label: 'Umur', + value: dayAge == null ? 'N/A' : `${dayAge} hari`, + icon: 'fa-dove', + color: 'text-amber-600', + }, + { + label: 'Tanggal', + value: formatDateId(selectedDate), + icon: 'fa-calendar-day', + color: 'text-slate-500', + }, + { + label: 'Flock', + value: + flocks.find((flock) => flock.id === selectedFlockId)?.flock_name ?? 'N/A', + icon: 'fa-warehouse', + color: 'text-slate-500', + }, + ].map((tile) => { + const inner = ( + <> +

+ + {tile.label} +

+

{tile.value}

+ + ); + if (!tile.chartKey) { + return ( +
+ {inner} +
+ ); + } + return ( + + ); + })} +
+
+ + +
+ +
+
+
+
+

Histori Suhu Harian

+

+ + + Garis merah = suhu rata-rata + + + + Garis biru = experience suhu + +

+
+ + {formatDateId(selectedDate)} + +
+
+ + + + + + [ + `${formatNumber(Number(value))} °C`, + name as string, + ]} + /> + + + + +
+
+ + +
+
+ + ) : ( +
+

+ Belum ada data panel IoT untuk flock ini. +

+
+ )} + + {selectedChartKey && + (() => { + const chart = SECONDARY_CHARTS.find((item) => item.key === selectedChartKey)!; + const latestPoint = chartRows[chartRows.length - 1]; + return ( +
setSelectedChartKey(null)} + > +
event.stopPropagation()} + > +
+
+

{chart.label}

+

+ Pembacaan sepanjang hari · {formatDateId(selectedDate)} +

+
+
+ + Terakhir: {display(latestPoint?.[chart.key], chart.unit)} + + +
+
+
+ + + + + + [ + `${formatNumber(Number(value))}${chart.unit}`, + name as string, + ]} + /> + + + +
+
+
+ ); + })()} +
+ ); +}; + +export default IotPanelPage; diff --git a/components/KpiCard.tsx b/components/KpiCard.tsx new file mode 100644 index 0000000..d935c8f --- /dev/null +++ b/components/KpiCard.tsx @@ -0,0 +1,121 @@ +import React, { useMemo } from 'react'; +import { Line, LineChart, ResponsiveContainer, Tooltip } from 'recharts'; +import { formatNumber, formatRatio } from '../utils/format.ts'; +import type { View } from '../types/common.ts'; + +export type KpiStatus = 'ok' | 'warning' | 'critical' | 'na'; + +export type KpiCardModel = { + key: string; + title: string; + value: number | null; + unit: string; + icon: string; + trend?: number[]; + status: KpiStatus; + targetView?: View; +}; + +const statusStyles: Record = { + ok: { bg: 'bg-green-100', text: 'text-green-800', icon: 'text-green-600', line: '#16a34a' }, + warning: { + bg: 'bg-yellow-100', + text: 'text-yellow-800', + icon: 'text-yellow-600', + line: '#f59e0b', + }, + critical: { bg: 'bg-red-100', text: 'text-red-800', icon: 'text-red-600', line: '#dc2626' }, + na: { bg: 'bg-blue-50', text: 'text-blue-900', icon: 'text-blue-600', line: '#3b82f6' }, +}; + +type Props = Omit & { + onClick?: () => void; + isLoading?: boolean; +}; + +const KpiCard: React.FC = ({ + title, + value, + unit, + icon, + trend, + status, + onClick, + isLoading = false, +}) => { + const isNA = value === null; + const styles = isNA ? statusStyles.na : statusStyles[status]; + const trendData = useMemo( + () => (trend ?? []).map((point, index) => ({ name: index, value: point })), + [trend] + ); + + const displayValue = () => { + if (value === null) return 'N/A'; + if (title.toUpperCase().includes('FCR') || title.toUpperCase().includes('EEF')) { + return formatRatio(value, 3); + } + if (unit === 'gram' && value > 999) return formatNumber(value / 1000, 2); + return formatNumber(value, 2); + }; + + const displayUnit = () => { + if (value !== null && unit === 'gram' && value > 999) return 'kg'; + return unit; + }; + + return ( +
+
+
+
+ {isLoading ? ( + + + Memuat... + + ) : ( + <> + {displayValue()}{' '} + {!isNA && {displayUnit()}} + + )} +
+

{title}

+
+
{icon}
+
+
+ {!isNA && trendData.length > 0 ? ( + + + + [formatNumber(Number(val ?? 0), 2), title]} + contentStyle={{ fontSize: 12, borderRadius: 8 }} + /> + + + ) : ( +
+ {isNA ? 'Data tidak tersedia' : ''} +
+ )} +
+
+ ); +}; + +export default KpiCard; diff --git a/components/SettingsPage.tsx b/components/SettingsPage.tsx new file mode 100644 index 0000000..f95ef2a --- /dev/null +++ b/components/SettingsPage.tsx @@ -0,0 +1,298 @@ +import React, { useState } from 'react'; +import { api, errorMessage } from '../services/apiClient.ts'; +import type { CycleStatus } from '../types/api.ts'; +import { useAuth } from '../context/AuthContext.tsx'; +import { useFarm } from '../context/FarmContext.tsx'; +import { Banner, PageHeader } from './ui/Feedback.tsx'; +import { addDaysIso, formatDateId, inclusiveDayCount, todayIso } from '../utils/format.ts'; + +const inputClass = + 'border border-gray-300 rounded-md px-3 py-2 text-sm w-full focus:ring-red-500 focus:border-red-500'; + +const SettingsPage: React.FC = () => { + const { user } = useAuth(); + const { + sites, + kandangs, + cycles, + selectedSiteId, + selectedKandangId, + reload, + setSelectedSiteId, + setSelectedKandangId, + setSelectedCycleId, + } = useFarm(); + const [error, setError] = useState(null); + const [notice, setNotice] = useState(null); + const [saving, setSaving] = useState(false); + const [siteName, setSiteName] = useState(''); + const [kandangName, setKandangName] = useState(''); + const [startDate, setStartDate] = useState(todayIso()); + const [endDate, setEndDate] = useState(() => addDaysIso(todayIso(), 34)); + const [docInCount, setDocInCount] = useState(20000); + const [chickInWeight, setChickInWeight] = useState(45); + const [cycleStatus, setCycleStatus] = useState('active'); + + const flash = (msg: string) => { + setNotice(msg); + setError(null); + }; + + const isSuperAdmin = user?.status === 'superadmin'; + + const wrap = async (fn: () => Promise) => { + setSaving(true); + setError(null); + try { + await fn(); + await reload(); + } catch (err) { + setError(errorMessage(err)); + } finally { + setSaving(false); + } + }; + + return ( +
+ + {error && ( +
+ {error} +
+ )} + {notice && ( +
+ {notice} +
+ )} +
+
+

Sites

+ {isSuperAdmin ? ( +
{ + e.preventDefault(); + if (!user) return; + void wrap(async () => { + const created = await api.sites.create({ site_name: siteName, user: user.id }); + setSiteName(''); + setSelectedSiteId(created.id); + flash(`Site ${created.site_name} dibuat.`); + }); + }} + > + setSiteName(e.target.value)} + required + /> + +
+ ) : ( +

Hanya admin yang dapat membuat site.

+ )} +
    + {sites.map((site) => ( +
  • + + {isSuperAdmin && ( + + )} +
  • + ))} +
+
+
+

Kandang

+ {isSuperAdmin ? ( +
{ + e.preventDefault(); + if (!selectedSiteId) return; + void wrap(async () => { + const created = await api.kandangs.create({ + kandang_name: kandangName, + site: selectedSiteId, + }); + setKandangName(''); + setSelectedKandangId(created.id); + flash(`Kandang ${created.kandang_name} dibuat.`); + }); + }} + > + setKandangName(e.target.value)} + required + /> + +
+ ) : ( +

Hanya admin yang dapat membuat kandang.

+ )} +
    + {kandangs.map((kandang) => ( +
  • + + {isSuperAdmin && ( + + )} +
  • + ))} +
+
+
+

Siklus

+
{ + e.preventDefault(); + if (!selectedKandangId) return; + void wrap(async () => { + await api.cycles.create({ + kandang: selectedKandangId, + total_days: inclusiveDayCount(startDate, endDate), + current_day: 1, + start_date: startDate, + end_date: endDate, + chick_in_weight: chickInWeight, + doc_in_count: docInCount, + status: cycleStatus, + }); + flash('Siklus dibuat.'); + }); + }} + > + + + + + + +
+
    + {cycles.map((cycle) => ( +
  • +
    + + +
    +
  • + ))} +
+
+
+
+ ); +}; + +export default SettingsPage; diff --git a/components/Sidebar.tsx b/components/Sidebar.tsx new file mode 100644 index 0000000..d9fd899 --- /dev/null +++ b/components/Sidebar.tsx @@ -0,0 +1,124 @@ +import React from 'react'; +import { View } from '../types/common.ts'; +import NavLink, { NavItem } from './sidebar/NavLink.tsx'; + +const navItems: NavItem[] = [ + { + view: 'dashboard', + label: 'Dashboard', + icon: , + }, + { + view: 'dataManagement', + label: 'Hitung Ayam', + icon: , + }, + { + view: 'weightMonitoring', + label: 'Berat Ayam', + icon: , + subItems: [ + { + view: 'weightMonitoring', + label: 'Dashboard Berat', + icon: , + }, + { + view: 'weightStandard', + label: 'Standar Ross', + icon: , + }, + ], + }, + { + view: 'feedSackCounting', + label: 'Manajemen Pakan', + icon: , + subItems: [ + { + view: 'feedSackCounting', + label: 'Hitung Karung', + icon: , + }, + { + view: 'cobbStandard', + label: 'Standar Performa', + icon: , + }, + ], + }, + { + view: 'iotPanel', + label: 'Panel IoT', + icon: , + }, + { + view: 'fcrDashboard', + label: 'FCR', + icon: , + }, + { + view: 'eefDashboard', + label: 'EEF', + icon: , + }, + { + view: 'kandangSettings', + label: 'Pengaturan', + icon: , + }, +]; + +interface SidebarProps { + isCollapsed: boolean; + view: View; + setView: (view: View) => void; + onToggleCollapse: () => void; +} + +const Sidebar: React.FC = ({ isCollapsed, view, setView, onToggleCollapse }) => ( + +); + +export default Sidebar; diff --git a/components/WeightMonitoringPage.tsx b/components/WeightMonitoringPage.tsx new file mode 100644 index 0000000..e61322d --- /dev/null +++ b/components/WeightMonitoringPage.tsx @@ -0,0 +1,313 @@ +import React, { useEffect, useMemo, useState } from 'react'; +import { api, ApiError, errorMessage } from '../services/apiClient.ts'; +import type { AIInsight, ChickenWeight, LatestAvg } from '../types/api.ts'; +import { useFarm } from '../context/FarmContext.tsx'; +import { Banner, EmptyFarm, Spinner } from './ui/Feedback.tsx'; +import { formatDateId, formatNumber } from '../utils/format.ts'; +import { formatWeight } from '../utils/weight.ts'; +import WeightStats from './weight/WeightStats.tsx'; +import DailyWeightProgressionChart from './weight/DailyWeightProgressionChart.tsx'; +import DailyWeightGainChart from './weight/DailyWeightGainChart.tsx'; +import DailyDetailPanel from './weight/DailyDetailPanel.tsx'; + +const WeightMonitoringPage: React.FC<{ onSettings: () => void }> = ({ onSettings }) => { + const { selectedCycle } = useFarm(); + const [rows, setRows] = useState([]); + const [latest, setLatest] = useState(null); + const [insights, setInsights] = useState([]); + const [loading, setLoading] = useState(false); + const [refreshing, setRefreshing] = useState(false); + const [error, setError] = useState(null); + const [selectedDate, setSelectedDate] = useState(''); + + const reload = async (cycleId: number) => { + setError(null); + try { + const [list, insightRows] = await Promise.all([ + api.weights.list({ cycle_id: cycleId }), + api.insights.list({ cycle_id: cycleId }), + ]); + setRows(list); + setInsights(insightRows); + try { + setLatest(await api.weights.latestAvg({ cycle_id: cycleId })); + } catch (err) { + if (err instanceof ApiError && err.status === 404) setLatest(null); + else throw err; + } + } catch (err) { + setError(errorMessage(err)); + } + }; + + useEffect(() => { + if (!selectedCycle) { + setRows([]); + setLatest(null); + setInsights([]); + setSelectedDate(''); + return; + } + let cancelled = false; + (async () => { + setLoading(true); + setRefreshing(false); + try { + await reload(selectedCycle.id); + } finally { + if (!cancelled) setLoading(false); + } + })(); + return () => { + cancelled = true; + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [selectedCycle]); + + // Days without a weighing are stored as 0 g. Charts skip those days so the + // line does not drop to zero at the end of a cycle, mirroring the old + // dashboard which only plotted days with actual timbangan data. + const chartRows = useMemo(() => rows.filter((row) => row.average_weight > 0), [rows]); + + // Default the date picker to the newest row with a real weighing once data + // loads, so the detail panel opens with meaningful values. + useEffect(() => { + if (!selectedDate) { + const newestMeaningful = chartRows[0] ?? rows[0]; + if (newestMeaningful) setSelectedDate(newestMeaningful.date); + } + }, [rows, chartRows, selectedDate]); + + const handleRefresh = async () => { + if (!selectedCycle) return; + setRefreshing(true); + try { + await reload(selectedCycle.id); + } catch { + // error state is set inside reload + } finally { + setRefreshing(false); + } + }; + + const totalDays = selectedCycle?.total_days ?? 35; + + const selectedRow = useMemo( + () => rows.find((row) => row.date === selectedDate) ?? null, + [rows, selectedDate] + ); + + const minDate = rows.length > 0 ? (rows[rows.length - 1]?.date ?? '') : ''; + const maxDate = rows.length > 0 ? (rows[0]?.date ?? '') : ''; + + const weightInsights = useMemo(() => { + const matched = insights.filter((item) => { + const section = `${item.section ?? ''} ${item.alert ?? ''}`.toLowerCase(); + return section.includes('berat') || section.includes('weight') || section.includes('timbang'); + }); + return (matched.length > 0 ? matched : insights).slice(0, 4); + }, [insights]); + + // Prefer the latest non-zero row for the KPI card so a closed cycle with + // trailing empty days does not read as "0 g". + const kpiLatest = useMemo(() => { + if (!latest) return null; + if (latest.average_weight > 0) return latest; + const fallback = rows.find((row) => row.average_weight > 0); + if (!fallback) return null; + return { + average_weight: fallback.average_weight, + date: fallback.date, + age: fallback.age, + uniformity: fallback.uniformity, + average_daily_gain: fallback.average_daily_gain, + cycle: fallback.cycle, + kandang: fallback.kandang, + }; + }, [latest, rows]); + + if (!selectedCycle) return ; + + return ( +
+ {/* Header */} +
+
+
+ +
+
+

Dashboard Berat Ayam

+

+ Analisis pertumbuhan dan kesejahteraan bobot ayam secara real-time. +

+ {!loading && latest?.date && ( +

+ + Terakhir diperbarui: {formatDateId(latest.date)} +

+ )} +
+
+ +
+ + {error && ( +
+ {error} +
+ )} + + {loading && rows.length === 0 ? ( + + ) : ( +
+ {/* AI Insight */} +
+

AI Insight

+ {weightInsights.length === 0 ? ( + Belum ada insight untuk siklus ini. + ) : ( +
+ {weightInsights.map((item) => ( +
+
+
+

+ {item.section} +

+

+ {item.alert || 'Insight'} +

+
+ {item.session} +
+

+ {item.insight_text} +

+
+ ))} +
+ )} +
+ + {/* TOP SECTION: DATA SELURUH SIKLUS */} +
+
+
+ +
+
+ +
+
+ +
+ + {/* ===== SEPARATOR: DATA PER HARI ===== */} +
+
+
+

Data Per Hari

+

+ Pilih tanggal untuk melihat detail data harian +

+
+
+ +
+ + setSelectedDate(e.target.value)} + className="px-2 py-1 border border-gray-300 rounded text-sm focus:ring-2 focus:ring-red-500 focus:border-red-500" + /> +
+
+
+ + + + {/* Riwayat lengkap */} +
+

Riwayat Berat Harian

+
+ + + + {['Tanggal', 'Umur', 'DOC', 'AVG', 'Uniformity', 'ADG'].map((h) => ( + + ))} + + + + {rows.length === 0 ? ( + + + + ) : ( + rows.map((row) => ( + + + + + + + + + )) + )} + +
+ {h} +
+ Belum ada data berat untuk siklus ini. +
{formatDateId(row.date)}{row.age} + {formatWeight(row.doc_weight, { decimals: 0 })} + + {formatWeight(row.average_weight, { stripTrailingZeros: true })} + {formatNumber(row.uniformity, 2, 2, true)}% + {formatNumber(row.average_daily_gain, 2, 2, true)} +
+
+
+
+ + {/* Info Box */} +
+
+ +
+

Informasi Pembaruan Data

+
    +
  • • Klik tombol "Refresh" untuk memperbarui data secara manual
  • +
  • • Grafik menampilkan data dari awal siklus hingga hari ini
  • +
  • • Target berat menggunakan standar performa Ross 308
  • +
+
+
+
+
+ )} +
+ ); +}; + +export default WeightMonitoringPage; diff --git a/components/WeightStandardPage.tsx b/components/WeightStandardPage.tsx new file mode 100644 index 0000000..25df951 --- /dev/null +++ b/components/WeightStandardPage.tsx @@ -0,0 +1,62 @@ +import React from 'react'; +import { weightStandardData } from '../mockData/weightStandardData.ts'; + +const WeightStandardPage: React.FC = () => { + const { headers, data } = weightStandardData; + + return ( +
+
+ +
+

Tabel Standar Bobot Ross 308

+

+ Driven from pen trial data - so difference may be more +

+
+
+ +
+
+ + + + + {headers.map((header) => ( + + ))} + + + + {data.map((row, rowIndex) => ( + + + {row.values.map((value, colIndex) => { + const isRedText = (colIndex + 1) % 7 === 0; + return ( + + ); + })} + + ))} + +
+ DO/wt + + {header} +
+ {row.day} + + {value} +
+
+
+
AVIAGEN PROPRIETARY
+
+ ); +}; + +export default WeightStandardPage; diff --git a/components/__tests__/FeedSackCountingPage.test.tsx b/components/__tests__/FeedSackCountingPage.test.tsx new file mode 100644 index 0000000..8ebd3ef --- /dev/null +++ b/components/__tests__/FeedSackCountingPage.test.tsx @@ -0,0 +1,195 @@ +import { render, screen } from '@testing-library/react'; +import { describe, expect, it, vi } from 'vitest'; +import FeedSackCountingPage from '../FeedSackCountingPage.tsx'; + +const { karungRows, manualRows, cycle } = vi.hoisted(() => { + const cycle = { + id: 1, + kandang: 1, + flock: 1, + total_days: 35, + current_day: 2, + start_date: '2026-08-10', + end_date: '2026-09-13', + chick_in_weight: 45, + doc_in_count: 20000, + status: 'active', + created_at: '', + updated_at: '', + }; + const karungRows = [ + { + id: 1, + cycle: 1, + kandang: 1, + flock_id: 1, + date: '2026-08-10', + in_today: 10, + out_today: 4, + in_total: 10, + out_total: 4, + feed_use_today: 4, + feed_use_total: 4, + created_at: '', + updated_at: '', + }, + { + id: 2, + cycle: 1, + kandang: 1, + flock_id: 1, + date: '2026-08-11', + in_today: 12, + out_today: 6, + in_total: 22, + out_total: 10, + feed_use_today: 6, + feed_use_total: 10, + created_at: '', + updated_at: '', + }, + ]; + const manualRows = [ + { + id: 1, + cycle: 1, + kandang: 1, + flock_id: 1, + date: '2026-08-10', + age_manual: 0, + mortality_manual: 0, + mortality_manual_total: 0, + feed_in_manual: 10, + feed_use_manual: 4, + feed_in_manual_total: 10, + feed_use_manual_total: 4, + feed_out_manual: 0, + feed_out_manual_total: 0, + harvest_manual: 0, + harvest_manual_total: 0, + harvest_weight_manual: 0, + harvest_weight_manual_total: 0, + manual_weight: 0, + average_harvest_day_manual: 0, + average_harvest_weight_manual: 0, + fcr_manual: 0, + eef_manual: 0, + created_at: '', + updated_at: '', + }, + { + id: 2, + cycle: 1, + kandang: 1, + flock_id: 1, + date: '2026-08-11', + age_manual: 1, + mortality_manual: 0, + mortality_manual_total: 0, + feed_in_manual: 10, + feed_use_manual: 7, + feed_in_manual_total: 20, + feed_use_manual_total: 11, + feed_out_manual: 0, + feed_out_manual_total: 0, + harvest_manual: 0, + harvest_manual_total: 0, + harvest_weight_manual: 0, + harvest_weight_manual_total: 0, + manual_weight: 0, + average_harvest_day_manual: 0, + average_harvest_weight_manual: 0, + fcr_manual: 0, + eef_manual: 0, + created_at: '', + updated_at: '', + }, + ]; + return { karungRows, manualRows, cycle }; +}); + +vi.mock('../../services/apiClient.ts', () => ({ + api: { + karungs: { + list: vi.fn().mockResolvedValue(karungRows), + request: vi.fn().mockResolvedValue({ karung: {}, upstream: {} }), + }, + insights: { + list: vi.fn().mockResolvedValue([]), + }, + manualInputs: { + list: vi.fn().mockResolvedValue(manualRows), + }, + }, + errorMessage: (err: unknown) => (err instanceof Error ? err.message : 'Terjadi kesalahan'), +})); + +vi.mock('../../context/FarmContext.tsx', () => ({ + useFarm: () => ({ + selectedSite: { id: 1, site_name: 'Sukawarna', user: 1, created_at: '', updated_at: '' }, + selectedKandang: { + id: 1, + kandang_name: 'Kandang 1', + site: 1, + created_at: '', + updated_at: '', + }, + selectedCycle: cycle, + cycles: [cycle], + setSelectedCycleId: vi.fn(), + }), +})); + +class ResizeObserverStub { + observe() {} + unobserve() {} + disconnect() {} +} + +describe('FeedSackCountingPage', () => { + it('renders the recreated hitung karung view with stats, saldo, and daily table', async () => { + vi.stubGlobal('ResizeObserver', ResizeObserverStub); + try { + render( undefined} />); + + expect(await screen.findByRole('heading', { name: 'Hitung Karung' })).toBeInTheDocument(); + expect( + screen.getByText('Monitoring karung masuk dan karung dituang per hari') + ).toBeInTheDocument(); + expect(screen.getByText(/10 Agu 2026 - 13 Sep 2026/i)).toBeInTheDocument(); + expect(screen.getByRole('button', { name: /Sync hari ini/i })).toBeInTheDocument(); + + // Ringkasan stats + expect(screen.getAllByText('Karung Masuk').length).toBeGreaterThan(0); + expect(screen.getAllByText('Karung Dituang').length).toBeGreaterThan(0); + expect(screen.getAllByText('Karung Keluar').length).toBeGreaterThan(0); + expect(screen.getAllByText('12').length).toBeGreaterThan(0); // in_today dari snapshot terbaru + + // Saldo card + expect(screen.getByRole('heading', { name: 'Saldo Karung IOT' })).toBeInTheDocument(); + + // Trend chart + expect(screen.getByRole('heading', { name: 'Tren Harian Karung IOT' })).toBeInTheDocument(); + + // Daily table (separate masuk & tuang boxes, each with Manual/IOT/Akurasi) + expect( + screen.getByRole('heading', { name: 'Rincian Harian Karung IOT' }) + ).toBeInTheDocument(); + expect(screen.getAllByText('KARUNG MASUK').length).toBeGreaterThan(0); + expect(screen.getAllByText('KARUNG TUANG').length).toBeGreaterThan(0); + // Headers appear in both boxes + expect(screen.getAllByText('Manual').length).toBeGreaterThanOrEqual(2); + expect(screen.getAllByText('IOT').length).toBeGreaterThanOrEqual(2); + expect(screen.getAllByText('Akurasi').length).toBeGreaterThanOrEqual(2); + // Total columns still show snapshot totals + expect(screen.getAllByText('22').length).toBeGreaterThan(0); + expect(screen.getAllByText('10').length).toBeGreaterThan(0); + // Accuracy: hari ke-2 masuk manual 10 vs IOT 12 -> 83.3% + expect(screen.getAllByText('83.3%').length).toBeGreaterThan(0); + // Hari ke-1 matching values -> 100.0% + expect(screen.getAllByText('100.0%').length).toBeGreaterThan(0); + } finally { + vi.unstubAllGlobals(); + } + }); +}); diff --git a/components/__tests__/SettingsPage.test.tsx b/components/__tests__/SettingsPage.test.tsx new file mode 100644 index 0000000..702fd5c --- /dev/null +++ b/components/__tests__/SettingsPage.test.tsx @@ -0,0 +1,145 @@ +import { fireEvent, render, screen, waitFor } from '@testing-library/react'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import SettingsPage from '../SettingsPage.tsx'; + +const { createKandangMock, createCycleMock, reloadMock, farmState } = vi.hoisted(() => ({ + createKandangMock: vi.fn(), + createCycleMock: vi.fn(), + reloadMock: vi.fn().mockResolvedValue(undefined), + farmState: { + sites: [{ id: 7, site_name: 'Site A', user: 99, created_at: '', updated_at: '' }], + kandangs: [] as Array<{ + id: number; + kandang_name: string; + site: number; + created_at: string; + updated_at: string; + }>, + cycles: [] as unknown[], + selectedSiteId: 7, + selectedKandangId: null as number | null, + selectedCycle: null as unknown, + }, +})); + +vi.mock('../../services/apiClient.ts', () => ({ + api: { + sites: { + create: vi.fn(), + remove: vi.fn(), + }, + kandangs: { + create: createKandangMock, + remove: vi.fn(), + }, + cycles: { + create: createCycleMock, + remove: vi.fn(), + }, + }, + errorMessage: (err: unknown) => (err instanceof Error ? err.message : 'Terjadi kesalahan'), +})); + +vi.mock('../../context/AuthContext.tsx', () => ({ + useAuth: () => ({ + user: { + id: 99, + user_name: 'tester', + status: 'superadmin', + created_at: '', + updated_at: '', + }, + }), +})); + +vi.mock('../../context/FarmContext.tsx', () => ({ + useFarm: () => ({ + sites: farmState.sites, + kandangs: farmState.kandangs, + cycles: farmState.cycles, + selectedSiteId: farmState.selectedSiteId, + selectedKandangId: farmState.selectedKandangId, + selectedCycle: farmState.selectedCycle, + reload: reloadMock, + setSelectedSiteId: vi.fn(), + setSelectedKandangId: vi.fn(), + setSelectedCycleId: vi.fn(), + }), +})); + +describe('SettingsPage settings forms', () => { + beforeEach(() => { + createKandangMock.mockReset(); + createCycleMock.mockReset(); + reloadMock.mockClear(); + farmState.kandangs = []; + farmState.cycles = []; + farmState.selectedSiteId = 7; + farmState.selectedKandangId = null; + farmState.selectedCycle = null; + createKandangMock.mockResolvedValue({ + id: 11, + kandang_name: 'Kandang 1', + site: 7, + created_at: '', + updated_at: '', + }); + createCycleMock.mockResolvedValue({ + id: 21, + kandang: 11, + flock: 3, + total_days: 35, + current_day: 1, + start_date: '2026-08-18', + end_date: '2026-09-21', + chick_in_weight: 45, + doc_in_count: 20000, + status: 'active', + created_at: '', + updated_at: '', + }); + }); + + it('submits only backend-supported kandang fields', async () => { + render(); + + fireEvent.change(screen.getByPlaceholderText('Nama kandang'), { + target: { value: 'Kandang 1' }, + }); + + fireEvent.click(screen.getByRole('button', { name: 'Tambah kandang' })); + + await waitFor(() => expect(createKandangMock).toHaveBeenCalledTimes(1)); + expect(createKandangMock).toHaveBeenCalledWith({ + kandang_name: 'Kandang 1', + site: 7, + }); + }); + + it('submits cycle fields expected by the backend contract', async () => { + farmState.kandangs = [ + { id: 11, kandang_name: 'Kandang 1', site: 7, created_at: '', updated_at: '' }, + ]; + farmState.selectedKandangId = 11; + + render(); + + expect(screen.queryByLabelText(/Total hari/i)).not.toBeInTheDocument(); + + fireEvent.change(screen.getByLabelText(/Mulai/i), { target: { value: '2026-08-01' } }); + fireEvent.change(screen.getByLabelText(/Selesai/i), { target: { value: '2026-09-04' } }); + fireEvent.click(screen.getByRole('button', { name: 'Tambah siklus' })); + + await waitFor(() => expect(createCycleMock).toHaveBeenCalledTimes(1)); + expect(createCycleMock).toHaveBeenCalledWith({ + kandang: 11, + total_days: 35, + current_day: 1, + start_date: '2026-08-01', + end_date: '2026-09-04', + chick_in_weight: 45, + doc_in_count: 20000, + status: 'active', + }); + }); +}); diff --git a/components/auth/AuthPage.tsx b/components/auth/AuthPage.tsx new file mode 100644 index 0000000..55f3da9 --- /dev/null +++ b/components/auth/AuthPage.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import LoginForm from './LoginForm.tsx'; + +const AuthPage: React.FC = () => ( +
+
+
+ Charoen Pokphand Logo +

Solusi AI Peternakan Ayam

+
+
+ +
+
+
+); + +export default AuthPage; diff --git a/components/auth/LoginForm.tsx b/components/auth/LoginForm.tsx new file mode 100644 index 0000000..51532d3 --- /dev/null +++ b/components/auth/LoginForm.tsx @@ -0,0 +1,78 @@ +import React, { useState } from 'react'; +import { useAuth } from '../../context/AuthContext.tsx'; +import { errorMessage } from '../../services/apiClient.ts'; + +const LoginForm: React.FC = () => { + const { login } = useAuth(); + const [userName, setUserName] = useState(''); + const [password, setPassword] = useState(''); + const [error, setError] = useState(''); + const [isLoading, setIsLoading] = useState(false); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + setError(''); + setIsLoading(true); + try { + await login(userName, password); + } catch (err) { + setError(errorMessage(err)); + } finally { + setIsLoading(false); + } + }; + + return ( +
void handleSubmit(e)} className="space-y-6"> + {error && ( +
+ {error} +
+ )} +
+ +
+ setUserName(e.target.value)} + className="appearance-none block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-red-500 focus:border-red-500 sm:text-sm" + placeholder="Nama pengguna" + /> +
+
+
+ +
+ setPassword(e.target.value)} + className="appearance-none block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm placeholder-gray-400 focus:outline-none focus:ring-red-500 focus:border-red-500 sm:text-sm" + /> +
+
+ +
+ ); +}; + +export default LoginForm; diff --git a/components/common/ErrorBoundary.tsx b/components/common/ErrorBoundary.tsx new file mode 100644 index 0000000..14ee593 --- /dev/null +++ b/components/common/ErrorBoundary.tsx @@ -0,0 +1,55 @@ +import { Component, ErrorInfo, ReactNode } from 'react'; + +interface Props { + children: ReactNode; + fallback?: ReactNode; +} + +interface State { + hasError: boolean; + error: Error | null; +} + +class ErrorBoundary extends Component { + constructor(props: Props) { + super(props); + this.state = { hasError: false, error: null }; + } + + static getDerivedStateFromError(error: Error): State { + return { hasError: true, error }; + } + + componentDidCatch(error: Error, errorInfo: ErrorInfo) { + console.error('ErrorBoundary caught error:', error, errorInfo); + // TODO: Send to error tracking service (Sentry, LogRocket, etc.) + } + + render() { + if (this.state.hasError) { + return ( + this.props.fallback || ( +
+
+ +

Something went wrong

+

+ We're sorry, but something unexpected happened. Please refresh the page. +

+ +
+
+ ) + ); + } + + return this.props.children; + } +} + +export default ErrorBoundary; diff --git a/components/counting/DataManagementPage.tsx b/components/counting/DataManagementPage.tsx new file mode 100644 index 0000000..a697ab3 --- /dev/null +++ b/components/counting/DataManagementPage.tsx @@ -0,0 +1,1101 @@ +import React, { useEffect, useMemo, useState } from 'react'; +import { api, errorMessage } from '../../services/apiClient.ts'; +import type { AIInsight, ChickenCounting, KPI, ManualInput } from '../../types/api.ts'; +import { useFarm } from '../../context/FarmContext.tsx'; +import { Banner, EmptyFarm, PageHeader, Spinner } from '../ui/Feedback.tsx'; +import { + addDaysIso, + formatDateId, + formatDateRange, + formatNumber, + todayIso, +} from '../../utils/format.ts'; +import PopulationTrendChart from './PopulationTrendChart.tsx'; + +type Row = { + day: number; + date: string; + dateLabel: string; + stockAwal: number; + mati: number; + panen: number; + beratPanen: number; + stockAkhir: number; + chickenCount?: number; + persentase: number; + mortalityTotal: number; + harvestTotal: number; + harvestWeightTotal: number; + isEdited: boolean; + isToday: boolean; + isFuture: boolean; +}; + +type EditValues = { + mati: number; + panen: number; + beratPanen: string; + chickenCount?: number; +}; + +const DataManagementPage: React.FC<{ onSettings: () => void }> = ({ onSettings }) => { + const { selectedCycle, selectedKandang, selectedSite } = useFarm(); + const [kpis, setKpis] = useState([]); + const [countings, setCountings] = useState([]); + const [manualRows, setManualRows] = useState([]); + const [insights, setInsights] = useState([]); + const [loading, setLoading] = useState(false); + const [saving, setSaving] = useState(false); + const [error, setError] = useState(null); + const [editingDay, setEditingDay] = useState(null); + const [editValues, setEditValues] = useState({ + mati: 0, + panen: 0, + beratPanen: '', + }); + const [validationErrors, setValidationErrors] = useState>({}); + const [searchDay, setSearchDay] = useState(''); + const [sortOrder, setSortOrder] = useState<'asc' | 'desc'>('asc'); + + const isReadOnly = !selectedCycle || selectedCycle.status !== 'active'; + + const loadData = async (cycleId: number) => { + setLoading(true); + setError(null); + try { + const [k, c, m, i] = await Promise.all([ + api.kpis.list({ cycle_id: cycleId }), + api.countings.list({ cycle_id: cycleId }), + api.manualInputs.list({ cycle_id: cycleId }), + api.insights.list({ cycle_id: cycleId }), + ]); + setKpis(k); + setCountings(c); + setManualRows(m); + setInsights(i); + } catch (err) { + setError(errorMessage(err)); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + if (!selectedCycle) { + setKpis([]); + setCountings([]); + setManualRows([]); + setInsights([]); + setEditingDay(null); + return; + } + void loadData(selectedCycle.id); + }, [selectedCycle]); + + // Build daily rows for day 0..currentDay, merging KPI / chicken counting / manual input data. + const rows = useMemo(() => { + if (!selectedCycle) return []; + + const countingByDate = new Map(countings.map((c) => [c.date, c])); + const manualByDate = new Map(manualRows.map((m) => [m.date, m])); + const kpiByDate = new Map(kpis.map((k) => [k.date, k])); + + const lastCycleDay = Math.max(0, (selectedCycle.total_days || 1) - 1); + const maxDay = Math.min(selectedCycle.current_day ?? 0, lastCycleDay); + const today = todayIso(); + + let previousStockAkhir = 0; + let cumulativeMortality = 0; + let cumulativeHarvest = 0; + let cumulativeHarvestWeight = 0; + const result: Row[] = []; + + for (let day = 0; day <= maxDay; day++) { + const date = addDaysIso(selectedCycle.start_date, day); + const kpi = kpiByDate.get(date); + const manual = manualByDate.get(date); + const counting = countingByDate.get(date); + + const stockAwal = day === 0 ? selectedCycle.doc_in_count || 0 : previousStockAkhir; + const mati = manual?.mortality_manual ?? kpi?.mortality ?? 0; + const panen = manual?.harvest_manual ?? kpi?.harvest ?? 0; + // Database menyimpan berat panen dalam gram; tampilkan selalu dalam kg. + const beratPanen = (manual?.harvest_weight_manual ?? kpi?.harvest_weight ?? 0) / 1000; + const stockAkhir = kpi?.chicken_life ?? Math.max(0, stockAwal - mati - panen); + + const chickenCount = counting?.total_count; + // Akurasi Chicken Counting (IOT) terhadap stock akhir manual: + // (nilai kecil / nilai besar) × 100%. Tanpa data IOT, tetap 0 (tampil "-"). + const persentase = + chickenCount !== undefined && chickenCount !== null && stockAkhir > 0 + ? (Math.min(chickenCount, stockAkhir) / Math.max(chickenCount, stockAkhir)) * 100 + : 0; + + cumulativeMortality += mati; + cumulativeHarvest += panen; + cumulativeHarvestWeight += beratPanen; + + result.push({ + day, + date, + dateLabel: formatDateId(date), + stockAwal, + mati, + panen, + beratPanen, + stockAkhir, + chickenCount, + persentase: Math.round(persentase * 10) / 10, + mortalityTotal: kpi?.mortality_total ?? cumulativeMortality, + harvestTotal: kpi?.harvest_total ?? cumulativeHarvest, + harvestWeightTotal: + kpi?.harvest_weight_total !== undefined + ? kpi.harvest_weight_total / 1000 + : cumulativeHarvestWeight, + isEdited: !!manual, + isToday: date === today, + isFuture: date > today, + }); + + previousStockAkhir = stockAkhir; + } + + return result; + }, [kpis, countings, manualRows, selectedCycle]); + + const stats = useMemo(() => { + const initialPopulation = selectedCycle?.doc_in_count || 0; + const latest = rows[rows.length - 1]; + const totalMortality = latest?.mortalityTotal ?? 0; + const totalPanen = latest?.harvestTotal ?? 0; + const totalBeratPanen = latest?.harvestWeightTotal ?? 0; + const currentPopulation = latest?.stockAkhir ?? initialPopulation; + const mortalityRate = initialPopulation + ? ((totalMortality / initialPopulation) * 100).toFixed(2) + : '0.00'; + + return { + initialPopulation, + totalMortality, + currentPopulation, + totalPanen, + totalBeratPanen, + mortalityRate, + }; + }, [rows, selectedCycle]); + + const chartData = useMemo( + () => + rows.map((r) => ({ + date: r.dateLabel, + population: r.stockAkhir, + chickenCount: r.chickenCount ?? undefined, + })), + [rows] + ); + + const filteredRecords = useMemo(() => { + let filtered = rows; + if (searchDay) { + const searchNum = parseInt(searchDay, 10); + if (!Number.isNaN(searchNum)) { + filtered = filtered.filter((r) => r.day === searchNum); + } + } + return [...filtered].sort((a, b) => (sortOrder === 'asc' ? a.day - b.day : b.day - a.day)); + }, [rows, searchDay, sortOrder]); + + const getPersentaseBadge = (persentase: number) => { + if (!persentase) return -; + + const isGreen = persentase >= 95; + const isYellow = persentase >= 90 && persentase < 95; + const colorClass = isGreen + ? 'bg-green-100 text-green-700' + : isYellow + ? 'bg-yellow-100 text-yellow-700' + : 'bg-red-100 text-red-700'; + + return ( + + {persentase.toFixed(1)}% + + ); + }; + + const handleEdit = (record: Row) => { + setEditingDay(record.day); + setEditValues({ + mati: record.mati, + panen: record.panen, + beratPanen: record.beratPanen ? record.beratPanen.toString() : '', + chickenCount: record.chickenCount, + }); + setValidationErrors({}); + }; + + const validateEditValues = (record: Row): boolean => { + const errors: Record = {}; + const beratPanenValue = editValues.beratPanen === '' ? 0 : parseFloat(editValues.beratPanen); + + if (editValues.mati < 0) { + errors.mati = 'Mati tidak boleh negatif'; + } else if (editValues.mati > record.stockAwal) { + errors.mati = `Mati tidak boleh lebih dari stock awal (${record.stockAwal})`; + } + + if (editValues.panen < 0) { + errors.panen = 'Panen tidak boleh negatif'; + } else if (editValues.panen > record.stockAwal - editValues.mati) { + errors.panen = `Panen tidak boleh lebih dari sisa (${record.stockAwal - editValues.mati})`; + } + + if (editValues.chickenCount !== undefined && editValues.chickenCount < 0) { + errors.chickenCount = 'Chicken counting tidak boleh negatif'; + } + + if (Number.isNaN(beratPanenValue) || beratPanenValue < 0) { + errors.beratPanen = 'Berat panen tidak boleh negatif'; + } + + setValidationErrors(errors); + return Object.keys(errors).length === 0; + }; + + const handleSave = async () => { + if (editingDay === null || !selectedCycle) return; + + const record = rows.find((r) => r.day === editingDay); + if (!record) return; + + if (!validateEditValues(record)) return; + + setSaving(true); + try { + const beratPanenValue = editValues.beratPanen === '' ? 0 : parseFloat(editValues.beratPanen); + const manualChanged = + editValues.mati !== record.mati || + editValues.panen !== record.panen || + beratPanenValue !== record.beratPanen; + + if (manualChanged) { + await api.manualInputs.create({ + cycle: selectedCycle.id, + date: record.date, + age_manual: record.day, + mortality_manual: editValues.mati, + harvest_manual: editValues.panen, + // Input pengguna dalam kg, disimpan ke database dalam gram. + harvest_weight_manual: beratPanenValue * 1000, + }); + } + + if ( + editValues.chickenCount !== undefined && + editValues.chickenCount !== record.chickenCount + ) { + const existing = countings.find((c) => c.date === record.date); + if (existing) { + await api.countings.update(existing.id, { total_count: editValues.chickenCount }); + } else { + await api.countings.create({ + cycle: selectedCycle.id, + date: record.date, + total_count: editValues.chickenCount, + }); + } + } + + setEditingDay(null); + setValidationErrors({}); + await loadData(selectedCycle.id); + } catch (err) { + setError(errorMessage(err)); + } finally { + setSaving(false); + } + }; + + const handleCancel = () => { + setEditingDay(null); + setValidationErrors({}); + }; + + if (!selectedCycle) return ; + + return ( +
+ {/* Header */} + } + subtitle={`Kelola dan edit data deplesi harian untuk siklus produksi aktif · ${selectedSite?.site_name ?? ''} · ${selectedKandang?.kandang_name ?? ''} · Siklus ${formatDateRange(selectedCycle.start_date, selectedCycle.end_date)}`} + /> + + {/* AI Insight */} +
+

+ + AI Insight +

+ {insights.length === 0 ? ( + Belum ada insight untuk siklus ini. + ) : ( +
+ {insights.slice(0, 4).map((item) => ( +
+
+
+

{item.section}

+

{item.alert || 'Insight'}

+
+ {item.session} +
+

+ {item.insight_text} +

+
+ ))} +
+ )} +
+ + {/* Population Chart */} +
+ +
+ + {error && ( +
+ {error} +
+ )} + + {/* Statistics Cards */} +
+
+
+
+

Populasi Awal

+

+ {formatNumber(stats.initialPopulation, 0)} +

+
+ +
+
+ +
+
+
+

Populasi Saat Ini

+

+ {formatNumber(stats.currentPopulation, 0)} +

+
+ +
+
+ +
+
+
+

Total Mortalitas

+

+ {formatNumber(stats.totalMortality, 0)} +

+
+ +
+
+ +
+
+
+

Total Panen

+

+ {formatNumber(stats.totalPanen, 0)} ekor +

+

+ {formatNumber(stats.totalBeratPanen, 2)} kg +

+
+ +
+
+ +
+
+
+

Tingkat Mortalitas

+

{stats.mortalityRate}%

+
+ +
+
+
+ + {loading ? ( + + ) : ( + <> + {/* Filters and Sorting */} +
+
+
+ + setSearchDay(e.target.value)} + placeholder="Masukkan nomor hari..." + className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500" + /> +
+
+
+ + +
+
+
+
+ + {/* Read-only banner for closed cycles */} + {isReadOnly && ( +
+
+ +
+

+ Mode Lihat Saja (Siklus Selesai) +

+

+ Untuk mengedit data, pilih siklus yang masih aktif pada dropdown di atas. +

+
+
+
+ )} + + {/* Data Table */} +
+
+ {filteredRecords.length === 0 ? ( +
+ + Tidak ada data yang ditemukan +
+ ) : ( + filteredRecords.map((record) => { + const isEditing = !isReadOnly && editingDay === record.day; + const cardTone = record.isToday + ? 'ring-2 ring-blue-200 bg-blue-50/40' + : record.panen > 0 + ? 'ring-1 ring-purple-200 bg-white' + : 'bg-white'; + + return ( +
+
+
+
+ + Hari {record.day} + + {record.isToday && ( + + Hari ini + + )} + {record.isFuture && ( + + Mendatang + + )} + {record.isEdited && ( + + Diubah + + )} +
+
+ {record.dateLabel} +
+
+ + {!isReadOnly && ( +
+ {isEditing ? ( +
+ + +
+ ) : ( + + )} +
+ )} +
+ +
+
+
+
+ Stock awal +
+
+ {formatNumber(record.stockAwal, 0)} +
+
+ +
+
+ Mati +
+ {isEditing ? ( +
+ + setEditValues({ + ...editValues, + mati: parseInt(e.target.value) || 0, + }) + } + className="mt-1 w-full rounded-lg border border-red-200 bg-white px-2 py-2 text-right text-[11px] focus:border-red-400 focus:outline-none focus:ring-2 focus:ring-red-200 md:px-3 md:text-sm" + /> + {validationErrors.mati && ( +
+ {validationErrors.mati} +
+ )} +
+ ) : ( +
+ {formatNumber(record.mati, 0)} +
+ )} +
+ +
+
+ Panen +
+ {isEditing ? ( +
+ + setEditValues({ + ...editValues, + panen: parseInt(e.target.value) || 0, + }) + } + className="mt-1 w-full rounded-lg border border-purple-200 bg-white px-2 py-2 text-right text-[11px] focus:border-purple-400 focus:outline-none focus:ring-2 focus:ring-purple-200 md:px-3 md:text-sm" + /> + {validationErrors.panen && ( +
+ {validationErrors.panen} +
+ )} +
+ ) : ( +
+ {formatNumber(record.panen, 0)} +
+ )} +
+ +
+
+ Berat panen (kg) +
+ {isEditing ? ( +
+ + setEditValues({ + ...editValues, + beratPanen: e.target.value, + }) + } + className="mt-1 w-full rounded-lg border border-purple-200 bg-white px-2 py-2 text-right text-[11px] focus:border-purple-400 focus:outline-none focus:ring-2 focus:ring-purple-200 md:px-3 md:text-sm" + /> + {validationErrors.beratPanen && ( +
+ {validationErrors.beratPanen} +
+ )} +
+ ) : ( +
+ {record.beratPanen ? formatNumber(record.beratPanen, 2) : '0.00'} kg +
+ )} +
+ +
+
+ Stock akhir +
+
+ {isEditing + ? Math.max( + 0, + record.stockAwal - editValues.mati - editValues.panen + ).toLocaleString('id-ID') + : formatNumber(record.stockAkhir, 0)} +
+
+ +
+
+ Chicken Counting +
+ {isEditing ? ( +
+ + setEditValues({ + ...editValues, + chickenCount: e.target.value + ? parseInt(e.target.value) + : undefined, + }) + } + placeholder="0" + className="mt-1 w-full rounded-lg border border-blue-200 bg-white px-2 py-2 text-right text-[11px] focus:border-blue-400 focus:outline-none focus:ring-2 focus:ring-blue-200 md:px-3 md:text-sm" + /> + {validationErrors.chickenCount && ( +
+ {validationErrors.chickenCount} +
+ )} +
+ ) : ( +
+ {record.chickenCount !== undefined + ? formatNumber(record.chickenCount, 0) + : '-'} +
+ )} +
+ +
+
+ Persentase +
+
{getPersentaseBadge(record.persentase)}
+
+
+
+
+ ); + }) + )} +
+ +
+
+ + + {/* Top header row with grouped columns */} + + + + + + + + + {!isReadOnly && ( + + )} + + {/* Second header row with individual column names */} + + + + + + + + + {filteredRecords.length === 0 ? ( + + + + ) : ( + filteredRecords.map((record, index) => { + const isEditing = !isReadOnly && editingDay === record.day; + const rowClass = `hover:bg-gray-100 transition-colors ${ + index % 2 === 0 ? 'bg-white' : 'bg-gray-50' + } ${record.panen > 0 ? 'border-l-4 border-purple-400' : ''}`; + + return ( + + {/* Hari */} + + + {/* Tanggal */} + + + {/* Stock awal (calculated, read-only) */} + + + {/* Mati (editable) */} + + + {/* JUMLAH PANEN (editable) */} + + + {/* BERAT PANEN (editable) */} + + + {/* Stock akhir (calculated, read-only) */} + + + {/* Chicken Counting (editable) */} + + + {/* Persentase (calculated, badge) */} + + + {/* Aksi */} + {!isReadOnly && ( + + )} + + ); + }) + )} + +
+ Hari + + Tanggal + + Deplesi Daily + + PANEN + + Stock akhir + + Chicken Counting (IOT) + + Persentase + + Aksi +
+ Stock awal + + Mati + + JUMLAH PANEN + + BERAT PANEN (KG) +
+ + Tidak ada data yang ditemukan +
+ + {record.day} + + + {record.dateLabel} + + {formatNumber(record.stockAwal, 0)} + + {isEditing ? ( +
+ + setEditValues({ + ...editValues, + mati: parseInt(e.target.value) || 0, + }) + } + className="w-20 px-2 py-1 border border-blue-500 rounded text-right text-[11px] focus:ring-2 focus:ring-blue-500 md:w-24 md:text-sm" + /> + {validationErrors.mati && ( +
+ {validationErrors.mati} +
+ )} +
+ ) : ( + + {formatNumber(record.mati, 0)} + + )} +
+ {isEditing ? ( +
+ + setEditValues({ + ...editValues, + panen: parseInt(e.target.value) || 0, + }) + } + className="w-20 px-2 py-1 border border-blue-500 rounded text-center text-[11px] focus:ring-2 focus:ring-blue-500 md:w-24 md:text-sm" + /> + {validationErrors.panen && ( +
+ {validationErrors.panen} +
+ )} +
+ ) : ( + + {formatNumber(record.panen, 0)} + + )} +
+ {isEditing ? ( +
+ + setEditValues({ + ...editValues, + beratPanen: e.target.value, + }) + } + className="w-24 px-2 py-1 border border-blue-500 rounded text-center text-[11px] focus:ring-2 focus:ring-blue-500 md:w-28 md:text-sm" + /> + {validationErrors.beratPanen && ( +
+ {validationErrors.beratPanen} +
+ )} +
+ ) : ( + + {record.beratPanen ? formatNumber(record.beratPanen, 2) : '0.00'} + + )} +
+ {isEditing + ? Math.max( + 0, + record.stockAwal - editValues.mati - editValues.panen + ).toLocaleString('id-ID') + : formatNumber(record.stockAkhir, 0)} + + {isEditing ? ( +
+ + setEditValues({ + ...editValues, + chickenCount: e.target.value + ? parseInt(e.target.value) + : undefined, + }) + } + placeholder="0" + className="w-24 px-2 py-1 border border-blue-500 rounded text-center text-[11px] focus:ring-2 focus:ring-blue-500 md:w-28 md:text-sm" + /> + {validationErrors.chickenCount && ( +
+ {validationErrors.chickenCount} +
+ )} +
+ ) : ( + + {record.chickenCount !== undefined + ? formatNumber(record.chickenCount, 0) + : '-'} + + )} +
+ {getPersentaseBadge(record.persentase)} + + {isEditing ? ( +
+ + +
+ ) : ( + + )} +
+
+
+
+ + {/* Info Section */} +
+
+
+ +
+
+

Informasi

+
    +
  • + Data hanya ditampilkan hingga + hari ini (dihitung dari tanggal mulai siklus) +
  • +
  • + + Hari 0: Stock awal = Jumlah DOC In (ayam masuk) +
  • +
  • + + Hari 1+: Stock awal = Stock akhir hari sebelumnya +
  • +
  • + + Stock akhir = Stock awal - Mati - panen (otomatis terhitung) +
  • +
  • + + Mati: Mortalitas harian | panen: Ayam dipanen +
  • +
  • + + Persentase = (nilai kecil / nilai besar) × 100% untuk konsep + akurasi hitungan IOT terhadap stock akhir manual +
  • +
  • + + Chicken Counting (IOT) = hasil hitung otomatis dari IOT +
  • +
  • + Data yang diedit akan + tersimpan sebagai input manual dan ditandai dengan highlight kuning +
  • +
  • + Baris dengan border ungu + menandakan ada panen pada hari tersebut +
  • +
+
+
+
+ + )} +
+ ); +}; + +export default DataManagementPage; diff --git a/components/counting/PopulationTrendChart.tsx b/components/counting/PopulationTrendChart.tsx new file mode 100644 index 0000000..cb23aef --- /dev/null +++ b/components/counting/PopulationTrendChart.tsx @@ -0,0 +1,119 @@ +import React from 'react'; +import { + CartesianGrid, + Line, + LineChart, + ResponsiveContainer, + Tooltip, + XAxis, + YAxis, +} from 'recharts'; +import { formatNumber } from '../../utils/format.ts'; + +export type PopulationPoint = { + date: string; + population: number; + chickenCount?: number; +}; + +type Props = { + data: PopulationPoint[]; + title?: string; +}; + +function yTick(value: number): string { + if (value >= 1_000_000) return `${(value / 1_000_000).toFixed(1)}jt`; + if (value >= 1_000) return `${Math.round(value / 1_000)}rb`; + return `${value}`; +} + +const PopulationTrendChart: React.FC = ({ data, title = 'Tren Populasi' }) => { + if (!data || data.length === 0) { + return ( +
+

{title}

+
+
+ +

Tidak ada data tersedia

+
+
+
+ ); + } + + return ( +
+

{title}

+ + {/* Legend: explicit color explanation */} +
+ + + Populasi (Stock Akhir Manual) + + + + Chicken Counting (IOT) + +
+ +
+ + + + + + { + const num = Number(value ?? 0); + return [num === 0 ? '0' : formatNumber(num, 0), name]; + }} + labelStyle={{ fontWeight: 600, marginBottom: '4px' }} + /> + + + + +
+ +

+ + Garis merah = populasi hasil perhitungan + manual (stock akhir), garis biru = + hasil hitung otomatis sensor IOT. Semakin berdekatan kedua garis, semakin akurat hitungan + IOT. +

+
+ ); +}; + +export default PopulationTrendChart; diff --git a/components/counting/__tests__/DataManagementPage.test.tsx b/components/counting/__tests__/DataManagementPage.test.tsx new file mode 100644 index 0000000..da049b7 --- /dev/null +++ b/components/counting/__tests__/DataManagementPage.test.tsx @@ -0,0 +1,72 @@ +import { render, screen } from '@testing-library/react'; +import { describe, expect, it, vi } from 'vitest'; +import DataManagementPage from '../DataManagementPage.tsx'; + +vi.mock('../../../services/apiClient.ts', () => ({ + api: { + kpis: { + list: vi.fn().mockResolvedValue([]), + }, + countings: { + list: vi.fn().mockResolvedValue([]), + create: vi.fn(), + update: vi.fn(), + }, + manualInputs: { + list: vi.fn().mockResolvedValue([]), + create: vi.fn(), + }, + insights: { + list: vi.fn().mockResolvedValue([]), + }, + }, + errorMessage: (err: unknown) => (err instanceof Error ? err.message : 'Terjadi kesalahan'), +})); + +vi.mock('../../../context/FarmContext.tsx', () => ({ + useFarm: () => ({ + selectedSite: { id: 1, site_name: 'Sukawarna', user: 1, created_at: '', updated_at: '' }, + selectedKandang: { + id: 1, + kandang_name: 'Kandang 1', + site: 1, + created_at: '', + updated_at: '', + }, + selectedCycle: { + id: 1, + kandang: 1, + flock: 1, + total_days: 35, + current_day: 3, + start_date: '2026-08-10', + end_date: '2026-09-13', + chick_in_weight: 45, + doc_in_count: 20000, + status: 'active', + created_at: '', + updated_at: '', + }, + }), +})); + +describe('DataManagementPage', () => { + it('renders the Hitung Ayam dashboard view with stats and daily rows', async () => { + render( undefined} />); + + expect(await screen.findByRole('heading', { name: 'Hitung Ayam' })).toBeInTheDocument(); + expect(screen.getByText(/Populasi Awal/i)).toBeInTheDocument(); + expect(screen.getByText(/Total Mortalitas/i)).toBeInTheDocument(); + expect(screen.getByText(/Tingkat Mortalitas/i)).toBeInTheDocument(); + expect(screen.getAllByText(/Hari 0/i).length).toBeGreaterThan(0); + expect(screen.getAllByText(/Hari 2/i).length).toBeGreaterThan(0); + }); + + it('does not offer manual or counting input forms', async () => { + render( undefined} />); + + expect(await screen.findByRole('heading', { name: 'Hitung Ayam' })).toBeInTheDocument(); + expect(screen.queryByRole('heading', { name: /Input manual/i })).not.toBeInTheDocument(); + expect(screen.queryByRole('button', { name: /Simpan hitungan/i })).not.toBeInTheDocument(); + }); +}); diff --git a/components/dashboard/DashboardManualInputForm.tsx b/components/dashboard/DashboardManualInputForm.tsx new file mode 100644 index 0000000..e7a1023 --- /dev/null +++ b/components/dashboard/DashboardManualInputForm.tsx @@ -0,0 +1,265 @@ +import React, { useEffect, useState } from 'react'; +import { api, errorMessage } from '../../services/apiClient.ts'; +import type { ManualInput, ManualInputWrite } from '../../types/api.ts'; +import { Banner } from '../ui/Feedback.tsx'; +import { formatNumber, todayIso } from '../../utils/format.ts'; + +const inputClass = + 'border border-gray-300 rounded-md px-3 py-2 text-sm w-full focus:ring-red-500 focus:border-red-500'; + +type Props = { + cycleId: number; + currentDay: number; + readOnly?: boolean; +}; + +type FormState = { + date: string; + age_manual: number; + mortality_manual: number; + feed_in_manual: number; + feed_use_manual: number; + harvest_manual: number; + harvest_weight_manual: number; + manual_weight: number; +}; + +const emptyForm = (currentDay: number): FormState => ({ + date: todayIso(), + age_manual: currentDay, + mortality_manual: 0, + feed_in_manual: 0, + feed_use_manual: 0, + harvest_manual: 0, + harvest_weight_manual: 0, + manual_weight: 0, +}); + +function toForm(row: ManualInput): FormState { + return { + date: row.date, + age_manual: row.age_manual, + mortality_manual: row.mortality_manual, + feed_in_manual: row.feed_in_manual, + feed_use_manual: row.feed_use_manual, + harvest_manual: row.harvest_manual, + // Database dalam gram, form selalu dalam kg. + harvest_weight_manual: row.harvest_weight_manual / 1000, + manual_weight: row.manual_weight, + }; +} + +const DashboardManualInputForm: React.FC = ({ cycleId, currentDay, readOnly = false }) => { + const [form, setForm] = useState(() => emptyForm(currentDay)); + const [saved, setSaved] = useState(null); + const [rows, setRows] = useState([]); + const [saving, setSaving] = useState(false); + const [error, setError] = useState(null); + const [notice, setNotice] = useState(null); + + const load = async (date: string) => { + const list = await api.manualInputs.list({ cycle_id: cycleId }); + setRows(list); + const match = list.find((row) => row.date === date) ?? null; + setSaved(match); + if (match) setForm(toForm(match)); + else { + setForm((prev) => ({ + ...emptyForm(currentDay), + date, + age_manual: prev.date === date ? prev.age_manual : currentDay, + })); + } + }; + + useEffect(() => { + let cancelled = false; + (async () => { + try { + const list = await api.manualInputs.list({ cycle_id: cycleId }); + if (cancelled) return; + setRows(list); + const today = todayIso(); + const match = + list.find((row) => row.date === today) ?? (readOnly ? (list[0] ?? null) : null); + setSaved(match); + setForm(match ? toForm(match) : emptyForm(currentDay)); + } catch (err) { + if (!cancelled) setError(errorMessage(err)); + } + })(); + return () => { + cancelled = true; + }; + }, [cycleId, currentDay, readOnly]); + + const onDateChange = async (date: string) => { + setError(null); + setNotice(null); + try { + await load(date); + } catch (err) { + setError(errorMessage(err)); + } + }; + + return ( +
+
{ + e.preventDefault(); + if (readOnly) return; + void (async () => { + setSaving(true); + setError(null); + setNotice(null); + try { + const body: ManualInputWrite = { + cycle: cycleId, + date: form.date, + age_manual: form.age_manual, + mortality_manual: form.mortality_manual, + feed_in_manual: form.feed_in_manual, + feed_use_manual: form.feed_use_manual, + harvest_manual: form.harvest_manual, + // Form dalam kg, disimpan ke database dalam gram. + harvest_weight_manual: form.harvest_weight_manual * 1000, + manual_weight: form.manual_weight, + }; + const row = await api.manualInputs.create(body); + setSaved(row); + setForm(toForm(row)); + setRows((prev) => { + const others = prev.filter((item) => item.date !== row.date); + return [row, ...others]; + }); + setNotice('Input manual tersimpan.'); + } catch (err) { + setError(errorMessage(err)); + } finally { + setSaving(false); + } + })(); + }} + className="bg-white rounded-xl shadow-sm p-5 space-y-4" + > +

Input manual

+

+ {readOnly + ? 'Siklus ini sudah ditutup. Data di bawah hanya untuk ditinjau.' + : 'Isi data harian di sini. Total dihitung otomatis. FCR, EEF, dan rata-rata panen belum dihitung.'} +

+ {error && {error}} + {notice && {notice}} +
+ + + + + + + + +
+ {saved && ( +

+ Total mortalitas {formatNumber(saved.mortality_manual_total, 0)} · karung masuk{' '} + {formatNumber(saved.feed_in_manual_total, 0)} · karung tuang{' '} + {formatNumber(saved.feed_use_manual_total, 0)} · panen{' '} + {formatNumber(saved.harvest_manual_total, 0)} · berat panen{' '} + {formatNumber(saved.harvest_weight_manual_total / 1000, 2)} kg +

+ )} + {!saved && rows.length > 0 && ( +

Belum ada input untuk tanggal ini.

+ )} + {!readOnly && ( + + )} +
+
+ ); +}; + +export default DashboardManualInputForm; diff --git a/components/dashboard/DashboardReportCtas.tsx b/components/dashboard/DashboardReportCtas.tsx new file mode 100644 index 0000000..58d31ba --- /dev/null +++ b/components/dashboard/DashboardReportCtas.tsx @@ -0,0 +1,43 @@ +import React from 'react'; + +export interface DashboardReportCtasProps { + cycleClosed: boolean; + hasDailySnapshot: boolean; + hasEndCycleSnapshot: boolean; + onOpenDaily: () => void; + onOpenEndCycle: () => void; +} + +const buttonClass = + 'rounded-lg bg-slate-900 px-4 py-2 text-sm font-semibold text-white shadow-sm hover:bg-slate-800 disabled:cursor-not-allowed disabled:opacity-50'; + +const label = (hasSnapshot: boolean) => (hasSnapshot ? 'Lihat' : 'Buat'); + +const DashboardReportCtas: React.FC = ({ + cycleClosed, + hasDailySnapshot, + hasEndCycleSnapshot, + onOpenDaily, + onOpenEndCycle, +}) => ( +
+ +
+ + {!cycleClosed && ( +

Tersedia setelah siklus ditutup

+ )} +
+
+); + +export default DashboardReportCtas; diff --git a/components/dashboard/ReportPreviewOverlay.tsx b/components/dashboard/ReportPreviewOverlay.tsx new file mode 100644 index 0000000..ba79c58 --- /dev/null +++ b/components/dashboard/ReportPreviewOverlay.tsx @@ -0,0 +1,566 @@ +import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { api, errorMessage } from '../../services/apiClient.ts'; +import { useFarm } from '../../context/FarmContext.tsx'; +import { buildInMemoryReport } from '../../utils/buildInMemoryReport.ts'; +import { downloadReportExcel } from '../../utils/reportExcel.ts'; +import { exportElementToPdf } from '../../utils/pdfExport.ts'; +import { + countingTotals, + feedInTotals, + feedOutTotals, + feedUseTotals, +} from '../../utils/reportTotals.ts'; +import { + cycleDayForDate, + formatDateId, + formatDateRange, + formatNumber, + formatRatio, +} from '../../utils/format.ts'; +import type { + DashboardReportFcrRow, + DashboardReportPayload, + DashboardReportType, +} from '../../types/dashboardReport.ts'; +import { Banner } from '../ui/Feedback.tsx'; + +type Props = { + open: boolean; + reportType: DashboardReportType; + onClose: () => void; +}; + +const cell = (value: number | string | null | undefined, suffix = ''): string => { + if (value === null || value === undefined || value === '') return 'N/A'; + if (typeof value === 'number' && !Number.isFinite(value)) return 'N/A'; + return `${value}${suffix}`; +}; + +const dashCell = (value: number | null | undefined): string => + value == null || !Number.isFinite(value) ? '-' : String(value); + +const accuracyCell = (value: number | null | undefined): string => + value == null || !Number.isFinite(value) ? 'N/A' : `${value.toFixed(1)}%`; + +const ratioCell = (value: number | null | undefined): string => + value == null || !Number.isFinite(value) ? 'N/A' : formatRatio(Number(value), 3); + +const qtyCell = (value: number | null | undefined, maxDecimals = 0, suffix = ''): string => { + if (value == null || !Number.isFinite(value)) return 'N/A'; + return `${formatNumber(Number(value), maxDecimals, 0, true)}${suffix}`; +}; + +const harvestKgCell = (grams: number | null | undefined): string => { + if (grams == null || !Number.isFinite(grams)) return 'N/A'; + return `${formatNumber(Number(grams) / 1000, 1)} kg`; +}; + +const latestValidRatio = ( + rows: Array, + key: 'iotFcr' | 'iotEef' +): number | null => { + for (let i = rows.length - 1; i >= 0; i -= 1) { + const value = (rows[i] as Record)[key]; + if (value != null && Number.isFinite(value)) return value; + } + return null; +}; + +const ReportPreviewOverlay: React.FC = ({ open, reportType, onClose }) => { + const { selectedCycle, selectedKandang, selectedSite } = useFarm(); + const isEndCycle = reportType === 'end_cycle'; + const [draftDay, setDraftDay] = useState(0); + const [payload, setPayload] = useState(null); + const [generating, setGenerating] = useState(false); + const [error, setError] = useState(null); + const printRef = useRef(null); + + // cycle.current_day is 1-based (day 1 = start_date); report days are 0-based. + const latestDay = selectedCycle ? Math.max(0, selectedCycle.current_day - 1) : 0; + const endCycleDay = selectedCycle + ? Math.min( + selectedCycle.total_days, + cycleDayForDate(selectedCycle.start_date, selectedCycle.end_date) + ) + : 0; + const effectiveUpToDay = isEndCycle ? endCycleDay : draftDay; + + const dayOptions = useMemo( + () => Array.from({ length: latestDay + 1 }, (_, day) => day), + [latestDay] + ); + + useEffect(() => { + if (!open) return; + setPayload(null); + setError(null); + setGenerating(false); + setDraftDay(isEndCycle ? endCycleDay : latestDay); + }, [open, isEndCycle, latestDay, endCycleDay]); + + const generate = useCallback(async () => { + if (!selectedCycle || !selectedKandang) return; + setGenerating(true); + setError(null); + try { + const cycleId = selectedCycle.id; + const [countings, manuals, weights, karungs, kpis] = await Promise.all([ + api.countings.list({ cycle_id: cycleId }), + api.manualInputs.list({ cycle_id: cycleId }), + api.weights.list({ cycle_id: cycleId }), + api.karungs.list({ cycle_id: cycleId }), + api.kpis.list({ cycle_id: cycleId }), + ]); + const next = buildInMemoryReport({ + cycle: selectedCycle, + kandangId: selectedKandang.id, + kandangName: selectedKandang.kandang_name, + area: selectedSite?.site_name ?? '', + reportType, + countings, + manuals, + weights, + karungs, + kpis, + upToDay: effectiveUpToDay, + }); + setPayload(next); + } catch (err) { + setError(errorMessage(err)); + } finally { + setGenerating(false); + } + }, [reportType, selectedCycle, selectedKandang, selectedSite, effectiveUpToDay]); + + const downloadPdf = useCallback(async () => { + if (!printRef.current || !payload) return; + const period = isEndCycle ? 'Akhir-Siklus' : `Harian-Hari-${payload.upToDay}`; + const filename = `Laporan-${period}-${payload.area}-${payload.kandangName}-${payload.cycleStart}_sd_${payload.cycleEnd}.pdf`; + await exportElementToPdf(printRef.current, filename); + }, [payload, isEndCycle]); + + if (!open) return null; + + const title = isEndCycle ? 'Laporan Akhir Siklus' : 'Laporan Harian'; + const cycleLabel = selectedCycle + ? `Siklus ${formatDateRange(selectedCycle.start_date, selectedCycle.end_date)}` + : ''; + const countingTotal = countingTotals(payload?.counting || []); + const feedInTotal = feedInTotals(payload?.feedIn || []); + const feedUseTotal = feedUseTotals(payload?.feedUse || []); + const feedOutTotal = feedOutTotals(payload?.feedOut || []); + const endDateLabel = selectedCycle ? formatDateId(selectedCycle.start_date) : ''; + const dataDates = + selectedCycle && payload + ? `${endDateLabel} – ${formatDateId(payload.counting[payload.counting.length - 1]?.date ?? selectedCycle.start_date)}` + : ''; + const cycleRange = selectedCycle + ? formatDateRange(selectedCycle.start_date, selectedCycle.end_date) + : ''; + const printedDate = new Date().toLocaleDateString('id-ID', { + day: 'numeric', + month: 'long', + year: 'numeric', + }); + + return ( +
+
+
+
+

+ {title} +

+

+ {selectedKandang?.kandang_name ?? 'Pilih kandang'} · {cycleLabel} · Hari ke-0 s/d ke- + {effectiveUpToDay} +

+
+
+ {!isEndCycle && ( + <> + + + + )} + + + + +
+
+ +
+ {error && ( +
+ {error} +
+ )} + +
+ {!payload ? ( +

+ Tekan Generate untuk membuat laporan dari data siklus saat ini. +

+ ) : ( + <> +
+
{title}
+
+ Lokasi: {payload.area} — {payload.kandangName} +
+
+ Periode: Hari ke-0 s/d ke-{payload.upToDay} {dataDates} +
+
+ Siklus: {cycleRange} +
+
+ Dicetak: {printedDate} +
+ {isEndCycle && ( +
+ FCR akhir: {ratioCell(latestValidRatio(payload.fcr, 'iotFcr'))} · EEF akhir:{' '} + {ratioCell(latestValidRatio(payload.eef, 'iotEef'))} +
+ )} +
+ + + + + Tanggal + Umur (hari) + Stok awal + Mortalitas + Panen + Berat panen + Stok akhir + IoT + Akurasi % + + + + {payload.counting.map((row) => ( + + {formatDateId(row.date)} + {row.day} + {cell(row.countBefore)} + {cell(row.mortality)} + {cell(row.harvest)} + {cell(row.harvestWeight)} + {cell(row.countAfter)} + {cell(row.iotCount)} + {accuracyCell(row.accuracy)} + + ))} + + {countingTotal && ( + + + {countingTotal.label} + — + {dashCell(countingTotal.countBefore)} + {cell(countingTotal.mortality)} + {cell(countingTotal.harvest)} + {cell(countingTotal.harvestWeight)} + {dashCell(countingTotal.countAfter)} + {dashCell(countingTotal.iotCount)} + + {countingTotal.accuracy == null + ? '-' + : accuracyCell(countingTotal.accuracy)} + + + + )} + + + + + + Tanggal + Umur (hari) + Rata-rata manual + Rata-rata IoT + Keseragaman + Selisih + Akurasi % + + + + {payload.weight.map((row) => ( + + {formatDateId(row.date)} + {row.day} + {cell(row.avgManual)} + {cell(row.avgIot)} + {accuracyCell(row.uniformity)} + {cell(row.difference)} + {accuracyCell(row.accuracy)} + + ))} + + + + + + + Tanggal + Manual masuk + IoT masuk + Akurasi % + + + + {payload.feedIn.map((row) => ( + + {formatDateId(row.date)} + {cell(row.manualIn)} + {cell(row.iotIn)} + {accuracyCell(row.accuracy)} + + ))} + + {feedInTotal && ( + + + {feedInTotal.label} + {cell(feedInTotal.manualIn)} + {cell(feedInTotal.iotIn)} + {accuracyCell(feedInTotal.accuracy)} + + + )} + + + + + + Tanggal + Umur (hari) + Manual dituang + IoT dituang + Akurasi % + + + + {payload.feedUse.map((row) => ( + + {formatDateId(row.date)} + {row.day} + {cell(row.manualUse)} + {cell(row.iotUse)} + {accuracyCell(row.accuracy)} + + ))} + + {feedUseTotal && ( + + + {feedUseTotal.label} + — + {cell(feedUseTotal.manualUse)} + {cell(feedUseTotal.iotUse)} + {accuracyCell(feedUseTotal.accuracy)} + + + )} + + + + + + Tanggal + Manual keluar + IoT keluar + Akurasi % + + + + {payload.feedOut.map((row) => ( + + {formatDateId(row.date)} + {cell(row.manualOut)} + {cell(row.iotOut)} + {accuracyCell(row.accuracy)} + + ))} + + {feedOutTotal && ( + + + {feedOutTotal.label} + {cell(feedOutTotal.manualOut)} + {cell(feedOutTotal.iotOut)} + {accuracyCell(feedOutTotal.accuracy)} + + + )} + + + {isEndCycle && ( + <> + + + + Umur + Total Pakan + Bobot IoT + Ayam Hidup + Total Bobot Panen + FCR + + + + {payload.fcr.map((row) => ( + + Hari {row.day} + {qtyCell(row.feedTotal, 0, ' karung')} + {qtyCell(row.iotWeight, 2, row.iotWeight != null ? ' g' : '')} + {qtyCell(row.chickenLife, 0, ' ekor')} + {harvestKgCell(row.harvestWeightTotal)} + {ratioCell(row.iotFcr)} + + ))} + + + + + + + Umur + Persentase Ayam Hidup + BW Rata-rata Panen + Umur Rata-rata Panen + FCR + EEF + + + + {payload.eef.map((row) => ( + + Hari {row.day} + {qtyCell(row.chickenLifePercentage, 3, '%')} + + {qtyCell( + row.iotAverageHarvestBw, + 2, + row.iotAverageHarvestBw != null ? ' g' : '' + )} + + {qtyCell(row.iotAverageDayWeight, 2)} + {ratioCell(row.iotFcr)} + {ratioCell(row.iotEef)} + + ))} + + + + )} + + )} +
+
+
+
+ ); +}; + +const ReportTable: React.FC<{ + title: string; + children: React.ReactNode; + divided?: boolean; +}> = ({ title, children, divided = false }) => ( +
+

{title}

+
+ {children}
+
+
+); + +const Th: React.FC<{ children: React.ReactNode }> = ({ children }) => ( + {children} +); + +const Td: React.FC<{ children: React.ReactNode }> = ({ children }) => ( + {children} +); + +const TotalRow: React.FC<{ children: React.ReactNode }> = ({ children }) => ( + + {children} + +); + +export default ReportPreviewOverlay; diff --git a/components/dashboard/__tests__/DashboardManualInputForm.test.tsx b/components/dashboard/__tests__/DashboardManualInputForm.test.tsx new file mode 100644 index 0000000..23591d2 --- /dev/null +++ b/components/dashboard/__tests__/DashboardManualInputForm.test.tsx @@ -0,0 +1,81 @@ +import { fireEvent, render, screen, waitFor } from '@testing-library/react'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import DashboardManualInputForm from '../DashboardManualInputForm.tsx'; + +const { createMock, listMock } = vi.hoisted(() => ({ + createMock: vi.fn(), + listMock: vi.fn(), +})); + +vi.mock('../../../services/apiClient.ts', () => ({ + api: { + manualInputs: { + list: listMock, + create: createMock, + }, + }, + ApiError: class ApiError extends Error { + status: number; + constructor(status: number, message: string) { + super(message); + this.status = status; + } + }, + errorMessage: (err: unknown) => (err instanceof Error ? err.message : 'Terjadi kesalahan'), +})); + +describe('DashboardManualInputForm', () => { + beforeEach(() => { + listMock.mockReset(); + createMock.mockReset(); + listMock.mockResolvedValue([]); + createMock.mockResolvedValue({ + id: 1, + cycle: 4, + date: '2026-08-19', + age_manual: 10, + mortality_manual: 5, + mortality_manual_total: 5, + feed_in_manual: 8, + feed_use_manual: 12, + feed_in_manual_total: 8, + feed_use_manual_total: 12, + harvest_manual: 0, + harvest_manual_total: 0, + harvest_weight_manual: 0, + harvest_weight_manual_total: 0, + manual_weight: 320, + }); + }); + + it('lets the user save daily manual fields without totals, FCR, or EEF', async () => { + render(); + + expect(await screen.findByRole('heading', { name: /Input manual/i })).toBeInTheDocument(); + expect(screen.queryByLabelText(/FCR/i)).not.toBeInTheDocument(); + expect(screen.queryByLabelText(/EEF/i)).not.toBeInTheDocument(); + expect(screen.queryByLabelText(/rata-rata panen/i)).not.toBeInTheDocument(); + + fireEvent.change(screen.getByLabelText(/Umur/i), { target: { value: '10' } }); + fireEvent.change(screen.getByLabelText(/Mortalitas/i), { target: { value: '5' } }); + fireEvent.change(screen.getByLabelText(/Karung masuk/i), { target: { value: '8' } }); + fireEvent.change(screen.getByLabelText(/Karung tuang/i), { target: { value: '12' } }); + fireEvent.change(screen.getByLabelText(/Berat panen/i), { target: { value: '8.5' } }); + expect(screen.getByLabelText(/Berat panen/i)).toHaveAttribute('step', '0.01'); + fireEvent.click(screen.getByRole('button', { name: /Simpan/i })); + + await waitFor(() => expect(createMock).toHaveBeenCalledTimes(1)); + const body = createMock.mock.calls[0]![0]; + expect(body).toMatchObject({ + cycle: 4, + age_manual: 10, + mortality_manual: 5, + feed_in_manual: 8, + feed_use_manual: 12, + harvest_weight_manual: 8500, + }); + expect(body).not.toHaveProperty('mortality_manual_total'); + expect(body).not.toHaveProperty('fcr_manual'); + expect(body).not.toHaveProperty('eef_manual'); + }); +}); diff --git a/components/dashboard/__tests__/DashboardReportCtas.test.tsx b/components/dashboard/__tests__/DashboardReportCtas.test.tsx new file mode 100644 index 0000000..a155ba9 --- /dev/null +++ b/components/dashboard/__tests__/DashboardReportCtas.test.tsx @@ -0,0 +1,21 @@ +import { fireEvent, render, screen } from '@testing-library/react'; +import DashboardReportCtas from '../DashboardReportCtas.tsx'; + +describe('DashboardReportCtas', () => { + it('disables end-cycle until the cycle is closed', () => { + const onOpenDaily = vi.fn(); + const onOpenEndCycle = vi.fn(); + render( + + ); + expect(screen.getByRole('button', { name: /Akhir Siklus/i })).toBeDisabled(); + fireEvent.click(screen.getByRole('button', { name: /Harian/i })); + expect(onOpenDaily).toHaveBeenCalled(); + }); +}); diff --git a/components/feedSack/FeedDailySummaryTable.tsx b/components/feedSack/FeedDailySummaryTable.tsx new file mode 100644 index 0000000..20f2db1 --- /dev/null +++ b/components/feedSack/FeedDailySummaryTable.tsx @@ -0,0 +1,265 @@ +import React, { useMemo, useRef, useState } from 'react'; +import type { Karung, ManualInput } from '../../types/api.ts'; +import { formatNumber } from '../../utils/format.ts'; + +type SortOrder = 'asc' | 'desc'; + +interface FeedDailySummaryTableProps { + rows: Karung[]; + manualRows: ManualInput[]; + cycleStartDate: string; + currentDay: number; +} + +const accuracyOf = (manual: number, iot: number): string => { + if (manual === 0 && iot === 0) return '100.0%'; + if (manual === 0 || iot === 0) return '0.0%'; + const smaller = Math.min(manual, iot); + const larger = Math.max(manual, iot); + return `${((smaller / larger) * 100).toFixed(1)}%`; +}; + +const accuracyClass = (manual: number, iot: number): string => { + if (manual === 0 && iot === 0) return 'text-green-600'; + if (manual === 0 || iot === 0) return 'text-red-600'; + const percentage = (Math.min(manual, iot) / Math.max(manual, iot)) * 100; + if (percentage >= 95) return 'text-green-600'; + if (percentage >= 80) return 'text-yellow-600'; + return 'text-red-600'; +}; + +const FeedDailySummaryTable: React.FC = ({ + rows, + manualRows, + cycleStartDate, + currentDay, +}) => { + const [sortOrder, setSortOrder] = useState('desc'); + + const masukRef = useRef(null); + const tuangRef = useRef(null); + const keluarRef = useRef(null); + + const scrollToSection = (ref: React.RefObject) => { + ref.current?.scrollIntoView({ behavior: 'smooth', block: 'start' }); + }; + + const aggregatedData = useMemo(() => { + const cycleStart = new Date(`${cycleStartDate}T00:00:00`); + const iotByDate = new Map(); + for (const row of rows) iotByDate.set(row.date, row); + const manualByDate = new Map(); + for (const row of manualRows) manualByDate.set(row.date, row); + + const result: { + day: number; + date: Date; + dateFormatted: string; + iot: Karung | null; + manual: ManualInput | null; + }[] = []; + for (let d = 0; d <= currentDay; d++) { + const date = new Date(cycleStart); + date.setDate(cycleStart.getDate() + d); + const key = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String( + date.getDate() + ).padStart(2, '0')}`; + result.push({ + day: d, + date, + dateFormatted: date.toLocaleDateString('id-ID', { + day: 'numeric', + month: 'short', + year: 'numeric', + }), + iot: iotByDate.get(key) ?? null, + manual: manualByDate.get(key) ?? null, + }); + } + return result; + }, [rows, manualRows, cycleStartDate, currentDay]); + + const sortedData = useMemo(() => { + const sorted = [...aggregatedData].sort((a, b) => a.day - b.day); + return sortOrder === 'desc' ? sorted.reverse() : sorted; + }, [aggregatedData, sortOrder]); + + if (aggregatedData.length === 0 || (rows.length === 0 && manualRows.length === 0)) { + return ( +
+

Rincian Harian Karung IOT

+
+
+ +

Tidak ada data

+

+ Belum ada data karung IOT untuk siklus ini. Sinkronkan lewat tombol Sync hari ini. +

+
+
+
+ ); + } + + const renderBox = ( + title: string, + emoji: string, + headerColor: string, + manualGetter: (row: ManualInput) => number, + iotGetter: (row: Karung) => number, + totalGetter: (row: Karung) => number, + ref: React.RefObject + ) => ( +
+ {/* Header */} +
+ {emoji} + {title} +
+ + {/* Table container with scroll */} +
+
+ + + + + + + + + + + + + {sortedData.map((summary) => { + const manualValue = summary.manual ? manualGetter(summary.manual) : 0; + const iotValue = summary.iot ? iotGetter(summary.iot) : 0; + const total = summary.iot ? totalGetter(summary.iot) : null; + return ( + + + + + + + + + ); + })} + +
HariTanggal + Manual + + IOT + + Akurasi + Total
+ + {summary.day} + + {summary.dateFormatted} + {formatNumber(manualValue)} + + {formatNumber(iotValue)} + + {accuracyOf(manualValue, iotValue)} + + {total == null ? '-' : formatNumber(total)} +
+
+
+
+ ); + + return ( +
+ {/* Header */} +
+

Rincian Harian Karung IOT

+ +
+ + {/* Sticky Quick Navigation Bar (Excel-style freeze) */} +
+
+
+ + + +
+
+
+ + {/* Three separate boxes */} + {renderBox( + 'KARUNG MASUK', + '🟢', + '#86efac', + (row) => row.feed_in_manual, + (row) => row.in_today, + (row) => row.in_total, + masukRef + )} + {renderBox( + 'KARUNG TUANG', + '🟠', + '#fdba74', + (row) => row.feed_use_manual, + (row) => row.feed_use_today, + (row) => row.feed_use_total, + tuangRef + )} + {renderBox( + 'KARUNG KELUAR', + '🔴', + '#fca5a5', + (row) => row.feed_out_manual, + (row) => row.out_today, + (row) => row.out_total, + keluarRef + )} +
+ ); +}; + +export default FeedDailySummaryTable; diff --git a/components/feedSack/FeedSaldoCard.tsx b/components/feedSack/FeedSaldoCard.tsx new file mode 100644 index 0000000..36d91f0 --- /dev/null +++ b/components/feedSack/FeedSaldoCard.tsx @@ -0,0 +1,114 @@ +import React, { useMemo } from 'react'; +import type { Karung } from '../../types/api.ts'; +import { formatNumber } from '../../utils/format.ts'; + +interface FeedSaldoCardProps { + latest: Karung | null; + cycleStartDate: string; + displayDate: string; +} + +const FeedSaldoCard: React.FC = ({ latest, cycleStartDate, displayDate }) => { + const saldoData = useMemo(() => { + const inbound = latest?.in_total ?? 0; + const feedUse = latest?.feed_use_total ?? 0; + const keluar = latest?.out_total ?? 0; + const saldo = inbound - feedUse - keluar; + return { inbound, feedUse, keluar, saldo }; + }, [latest]); + + const formatDateRange = useMemo(() => { + const formatDate = (iso: string) => + new Intl.DateTimeFormat('id-ID', { + day: 'numeric', + month: 'long', + year: 'numeric', + }).format(new Date(`${iso}T00:00:00`)); + return `${formatDate(cycleStartDate)} - ${formatDate(displayDate)}`; + }, [cycleStartDate, displayDate]); + + const getSaldoStatusColor = (saldo: number) => { + if (saldo > 0) return 'text-green-600'; + if (saldo < 0) return 'text-red-600'; + return 'text-gray-600'; + }; + + return ( +
+
+
+
+ +
+
+

Saldo Karung IOT

+

{formatDateRange}

+
+
+
+ + {/* Saldo Display */} +
+
+ {/* Karung Masuk */} +
+
+ +

Karung Masuk

+
+

{formatNumber(saldoData.inbound)}

+

karung

+
+ + {/* Karung Dituang (feed use) */} +
+
+ +

Karung Dituang

+
+

{formatNumber(saldoData.feedUse)}

+

karung

+
+ + {/* Karung Keluar */} +
+
+ +

Karung Keluar

+
+

{formatNumber(saldoData.keluar)}

+

karung

+
+ + {/* Saldo */} +
+
+ +

Saldo

+
+

+ {formatNumber(saldoData.saldo)} +

+

karung

+
+
+

+ Saldo = karung masuk − karung dituang − karung keluar. +

+
+ + {/* Warning for negative saldo */} + {saldoData.saldo < 0 && ( +
+ +

+ Peringatan: Saldo negatif menunjukkan karung dituang lebih banyak dari + karung masuk. Periksa kembali data sinkronisasi karung-web-admin. +

+
+ )} +
+ ); +}; + +export default FeedSaldoCard; diff --git a/components/feedSack/FeedStats.tsx b/components/feedSack/FeedStats.tsx new file mode 100644 index 0000000..4158ce7 --- /dev/null +++ b/components/feedSack/FeedStats.tsx @@ -0,0 +1,145 @@ +import React, { useMemo } from 'react'; +import type { Karung, ManualInput } from '../../types/api.ts'; +import { formatNumber } from '../../utils/format.ts'; + +const StatItem: React.FC<{ + icon: React.ReactNode; + label: string; + value: number | null; + colorOverride?: string; +}> = ({ icon, label, value, colorOverride }) => ( +
+
+
{icon}
+

+ {label} +

+
+
+

+ {value == null ? 'N/A' : formatNumber(value)} +

+

karung

+
+
+); + +interface FeedStatsProps { + latest: Karung | null; + latestManual: ManualInput | null; + cycleStartDate: string; + displayDate: string; +} + +const FeedStats: React.FC = ({ + latest, + latestManual, + cycleStartDate, + displayDate, +}) => { + const formatDisplayDate = (iso: string) => + new Intl.DateTimeFormat('id-ID', { + day: 'numeric', + month: 'long', + year: 'numeric', + }).format(new Date(`${iso}T00:00:00`)); + + const todayLabel = useMemo(() => formatDisplayDate(displayDate), [displayDate]); + + const totalCycleLabel = useMemo(() => { + const start = new Intl.DateTimeFormat('id-ID', { + day: 'numeric', + month: 'short', + }).format(new Date(`${cycleStartDate}T00:00:00`)); + const end = new Intl.DateTimeFormat('id-ID', { + day: 'numeric', + month: 'short', + }).format(new Date(`${displayDate}T00:00:00`)); + return `Total (${start} - ${end})`; + }, [cycleStartDate, displayDate]); + + const columns = useMemo( + () => [ + { + key: 'masuk', + title: 'Karung Masuk', + color: '#2563eb', + icon: , + iotToday: latest?.in_today ?? null, + iotTotal: latest?.in_total ?? null, + manualToday: latestManual?.feed_in_manual ?? null, + manualTotal: latestManual?.feed_in_manual_total ?? null, + }, + { + key: 'dituang', + title: 'Karung Dituang', + color: '#ea580c', + icon: , + iotToday: latest?.feed_use_today ?? null, + iotTotal: latest?.feed_use_total ?? null, + manualToday: latestManual?.feed_use_manual ?? null, + manualTotal: latestManual?.feed_use_manual_total ?? null, + }, + { + key: 'keluar', + title: 'Karung Keluar', + color: '#dc2626', + icon: , + iotToday: latest?.out_today ?? null, + iotTotal: latest?.out_total ?? null, + manualToday: latestManual?.feed_out_manual ?? null, + manualTotal: latestManual?.feed_out_manual_total ?? null, + }, + ], + [latest, latestManual] + ); + + return ( +
+
+ {columns.map((col) => ( +
+

+ {col.title} +

+
+
+ } + label={`IOT · ${todayLabel}`} + value={col.iotToday} + colorOverride={col.color} + /> + } + label={`IOT · ${totalCycleLabel}`} + value={col.iotTotal} + colorOverride={col.color} + /> +
+
+ } + label={`Manual · ${todayLabel}`} + value={col.manualToday} + colorOverride="#6b7280" + /> + } + label={`Manual · ${totalCycleLabel}`} + value={col.manualTotal} + colorOverride="#6b7280" + /> +
+
+
+ ))} +
+
+ ); +}; + +export default FeedStats; diff --git a/components/feedSack/FeedTrendChart.tsx b/components/feedSack/FeedTrendChart.tsx new file mode 100644 index 0000000..5c6d398 --- /dev/null +++ b/components/feedSack/FeedTrendChart.tsx @@ -0,0 +1,100 @@ +import React, { useMemo } from 'react'; +import { + BarChart, + Bar, + XAxis, + YAxis, + CartesianGrid, + Tooltip, + Legend, + ResponsiveContainer, +} from 'recharts'; +import type { Karung } from '../../types/api.ts'; + +interface FeedTrendChartProps { + rows: Karung[]; + cycleStartDate: string; + currentDay: number; +} + +const FeedTrendChart: React.FC = ({ rows, cycleStartDate, currentDay }) => { + const chartData = useMemo(() => { + const cycleStart = new Date(`${cycleStartDate}T00:00:00`); + + const dailyData: { label: string; masuk: number; dituang: number }[] = []; + for (let d = 0; d <= currentDay; d++) { + const date = new Date(cycleStart); + date.setDate(cycleStart.getDate() + d); + dailyData.push({ + label: date.toLocaleDateString('id-ID', { day: '2-digit', month: 'short' }), + masuk: 0, + dituang: 0, + }); + } + + const byKey = new Map(); + for (const row of rows) { + const bucket = byKey.get(row.date) ?? { masuk: 0, dituang: 0 }; + bucket.masuk += row.in_today; + bucket.dituang += row.out_today; + byKey.set(row.date, bucket); + } + + for (let d = 0; d <= currentDay; d++) { + const date = new Date(cycleStart); + date.setDate(cycleStart.getDate() + d); + const key = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String( + date.getDate() + ).padStart(2, '0')}`; + const bucket = byKey.get(key); + const entry = dailyData[d]; + if (bucket && entry) { + entry.masuk = bucket.masuk; + entry.dituang = bucket.dituang; + } + } + + return dailyData; + }, [rows, cycleStartDate, currentDay]); + + return ( +
+

Tren Harian Karung IOT

+
+ + + + + + [ + `${Number(value ?? 0)} karung`, + name === 'masuk' ? 'Karung Masuk' : 'Karung Dituang', + ]} + labelFormatter={(label) => `Tanggal: ${label}`} + /> + (value === 'masuk' ? 'Karung Masuk' : 'Karung Dituang')} + /> + + + + +
+
+ ); +}; + +export default FeedTrendChart; diff --git a/components/feedSack/InitialBalanceCard.tsx b/components/feedSack/InitialBalanceCard.tsx new file mode 100644 index 0000000..810d36c --- /dev/null +++ b/components/feedSack/InitialBalanceCard.tsx @@ -0,0 +1,164 @@ +import React, { useMemo, useState } from 'react'; +import { api, errorMessage } from '../../services/apiClient.ts'; +import type { Cycle, InitialBalanceResult } from '../../types/api.ts'; +import { formatNumber } from '../../utils/format.ts'; + +interface InitialBalanceCardProps { + cycle: Cycle; + onSaved: () => void; +} + +const InitialBalanceCard: React.FC = ({ cycle, onSaved }) => { + const [balanceDate, setBalanceDate] = useState(cycle.start_date); + const [manualEntry, setManualEntry] = useState( + cycle.feed_initial_balance > 0 ? String(cycle.feed_initial_balance) : '' + ); + const [saving, setSaving] = useState(false); + const [error, setError] = useState(null); + const [result, setResult] = useState(null); + + const canSave = useMemo( + () => balanceDate !== '' && manualEntry !== '' && Number(manualEntry) >= 0 && !saving, + [balanceDate, manualEntry, saving] + ); + + const handleSave = async () => { + if (!canSave) return; + setSaving(true); + setError(null); + try { + const saved = await api.cycles.initialBalance(cycle.id, { + date: balanceDate, + feed_in_manual: Number(manualEntry), + }); + setResult(saved); + onSaved(); + } catch (err) { + setError(errorMessage(err)); + } finally { + setSaving(false); + } + }; + + const accuracy = result?.accuracy; + const accuracyLabel = accuracy == null ? 'N/A' : `${formatNumber(accuracy, 1)}%`; + const accuracyColor = + accuracy == null + ? 'text-gray-500' + : accuracy >= 95 + ? 'text-green-600' + : accuracy >= 80 + ? 'text-yellow-600' + : 'text-red-600'; + + return ( +
+
+
+ +
+
+

Saldo Awal

+

+ Masukkan saldo awal karung pakan pada tanggal tertentu, lalu bandingkan dengan deteksi + IoT. +

+
+
+ +
+
+
+ + setBalanceDate(event.target.value)} + className="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:ring-blue-500 focus:border-blue-500 text-sm" + /> +
+
+ + setManualEntry(event.target.value)} + placeholder="Contoh: 120" + className="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:ring-blue-500 focus:border-blue-500 text-sm" + /> +
+
+ + {error && ( +

+ {error} +

+ )} + +
+ + {cycle.feed_initial_balance > 0 && result == null && ( +

+ Saldo awal tersimpan:{' '} + + {formatNumber(cycle.feed_initial_balance)} karung + +

+ )} +
+ + {result && ( +
+

Perbandingan {result.date}

+
+
+

Manual

+

+ {formatNumber(result.manual)} karung +

+
+
+

IOT

+

+ {result.iot == null ? 'N/A' : `${formatNumber(result.iot)} karung`} +

+
+
+

Akurasi

+

{accuracyLabel}

+
+
+ {result.sync_error && ( +

+ Gagal menarik data IoT dari karung-web-admin: {result.sync_error} +

+ )} +
+ )} +
+
+ ); +}; + +export default InitialBalanceCard; diff --git a/components/iotPanel/IotPanelChillFactorCard.tsx b/components/iotPanel/IotPanelChillFactorCard.tsx new file mode 100644 index 0000000..d15957e --- /dev/null +++ b/components/iotPanel/IotPanelChillFactorCard.tsx @@ -0,0 +1,131 @@ +import React from 'react'; +import { + CartesianGrid, + Line, + LineChart, + ReferenceDot, + ReferenceLine, + ResponsiveContainer, + Tooltip, + XAxis, + YAxis, +} from 'recharts'; +import { + CHICKEN_CHILL_FACTOR_POINTS, + chickenChillFactorFromAge, + formatChillFactor, +} from './chillFactor.ts'; + +const CHILL_FACTOR_BASE_MAX_DAY = + CHICKEN_CHILL_FACTOR_POINTS[CHICKEN_CHILL_FACTOR_POINTS.length - 1]!.age; + +export interface IotPanelChillFactorCardProps { + dayAge: number | null | undefined; + chillFactor: number | null | undefined; +} + +const IotPanelChillFactorCard: React.FC = ({ + dayAge, + chillFactor, +}) => { + const dayAgeValue = + dayAge != null && Number.isFinite(Number(dayAge)) ? Math.max(0, Number(dayAge)) : null; + const chartMinDay = CHICKEN_CHILL_FACTOR_POINTS[0]!.age; + const chartMaxDay = Math.max(CHILL_FACTOR_BASE_MAX_DAY, Math.ceil(dayAgeValue ?? 0)); + const chillFactorChartData = Array.from({ length: chartMaxDay - chartMinDay + 1 }, (_, idx) => { + const day = chartMinDay + idx; + return { day, factor: chickenChillFactorFromAge(day) ?? 0 }; + }); + const chillFactorXAxisTicks = Array.from(new Set([0, 7, 14, 21, 28, 35, 42, chartMaxDay])).filter( + (day) => day <= chartMaxDay + ); + const currentChillPoint = + dayAgeValue !== null && chillFactor != null && Number.isFinite(Number(chillFactor)) + ? { day: dayAgeValue, factor: Number(chillFactor) } + : null; + const chillFactorChartLabel = currentChillPoint + ? `Grafik chill factor. Umur ayam hari ${currentChillPoint.day}, chill factor ${formatChillFactor(currentChillPoint.factor)}.` + : 'Grafik chill factor belum tersedia karena umur ayam tidak tersedia.'; + + return ( +
+
+
+

Grafik Chill Factor

+

+ Grafik berdasarkan umur ayam untuk estimasi efek angin pada suhu terasa. +

+
+ + {formatChillFactor(chillFactor)} + +
+
+ + + + `${Number(value)}`} + stroke="#64748b" + fontSize={11} + label={{ + value: 'Umur (hari)', + position: 'insideBottom', + offset: -2, + fill: '#64748b', + fontSize: 11, + }} + /> + `${Number(value).toString().replace('.', ',')}`} + stroke="#64748b" + fontSize={11} + width={44} + /> + `Hari ${Number(day).toFixed(0)}`} + formatter={(value) => [formatChillFactor(Number(value)), 'Chill factor']} + /> + + {currentChillPoint && ( + <> + + + + )} + + +
+
+ ); +}; + +export default IotPanelChillFactorCard; diff --git a/components/iotPanel/IotPanelExperienceTempCard.tsx b/components/iotPanel/IotPanelExperienceTempCard.tsx new file mode 100644 index 0000000..733a698 --- /dev/null +++ b/components/iotPanel/IotPanelExperienceTempCard.tsx @@ -0,0 +1,97 @@ +import React from 'react'; +import { formatNumber } from '../../utils/format.ts'; +import { formatChillFactor, type ExperienceCalc } from './chillFactor.ts'; + +const DEGREE_C = '\u00B0C'; + +const oneDecimal = (value: number | null): string => + value === null ? '--' : formatNumber(value, 1); + +const formatSigned = (value: number | null): string => { + if (value === null) return '--'; + const sign = value > 0 ? '+' : ''; + return `${sign}${oneDecimal(value)} ${DEGREE_C}`; +}; + +export interface IotPanelExperienceTempCardProps { + calc: ExperienceCalc; + apiExperienceTemp: number | null | undefined; +} + +const IotPanelExperienceTempCard: React.FC = ({ + calc, + apiExperienceTemp, +}) => { + const calculationRows = [ + { + label: 'Kecepatan angin', + value: calc.windSpeed === null ? '--' : `${oneDecimal(calc.windSpeed)} m/s`, + note: 'Dari sensor angin kandang', + }, + { + label: 'Chill factor', + value: formatChillFactor(calc.chillFactor), + note: 'Berdasarkan grafik chill factor', + }, + { + label: 'Koreksi RH', + value: formatSigned(calc.humidityAdjustment), + note: '(RH - 70) / 5', + }, + { + label: 'Suhu rata-rata', + value: calc.averageTemp === null ? '--' : `${oneDecimal(calc.averageTemp)} ${DEGREE_C}`, + note: 'Suhu rata-rata dari Panel', + }, + { + label: 'Chill effect', + value: formatSigned(calc.chillEffect), + note: '(Angin x chill factor) - koreksi RH', + }, + ]; + + const apiDiffers = + apiExperienceTemp != null && + calc.experienceTemp != null && + Math.abs(apiExperienceTemp - calc.experienceTemp) > 0.05; + + return ( +
+
+
+

+ + Experience Suhu +

+

Suhu yang dirasakan oleh ayam.

+
+

+ {calc.experienceTemp === null ? 'N/A' : `${oneDecimal(calc.experienceTemp)} ${DEGREE_C}`} +

+
+ +
+ {calculationRows.map((item) => ( +
+
+ {item.label} + {item.value} +
+

{item.note}

+
+ ))} +
+ +
+ Experience suhu = Suhu rata-rata - chill effect. + {apiDiffers && apiExperienceTemp != null && ( + + Nilai tercatat Panel: {oneDecimal(apiExperienceTemp)} {DEGREE_C}. + + )} +
+
+ ); +}; + +export default IotPanelExperienceTempCard; diff --git a/components/iotPanel/chillFactor.ts b/components/iotPanel/chillFactor.ts new file mode 100644 index 0000000..37f36af --- /dev/null +++ b/components/iotPanel/chillFactor.ts @@ -0,0 +1,79 @@ +export const CHICKEN_CHILL_FACTOR_POINTS = [ + { age: 0, factor: 8 }, + { age: 1, factor: 8 }, + { age: 7, factor: 7 }, + { age: 14, factor: 6 }, + { age: 21, factor: 4.5 }, + { age: 28, factor: 3.5 }, + { age: 35, factor: 3.5 }, + { age: 42, factor: 3 }, +] as const; + +export function chickenChillFactorFromAge(day: number | null | undefined): number | null { + const age = Number(day); + if (!Number.isFinite(age) || age < 0) return null; + + const firstPoint = CHICKEN_CHILL_FACTOR_POINTS[0]!; + if (age <= firstPoint.age) return firstPoint.factor; + + for (let idx = 1; idx < CHICKEN_CHILL_FACTOR_POINTS.length; idx += 1) { + const previousPoint = CHICKEN_CHILL_FACTOR_POINTS[idx - 1]!; + const nextPoint = CHICKEN_CHILL_FACTOR_POINTS[idx]!; + if (age > nextPoint.age) continue; + + const ageRange = nextPoint.age - previousPoint.age; + if (ageRange <= 0) return nextPoint.factor; + + const progress = (age - previousPoint.age) / ageRange; + return previousPoint.factor + (nextPoint.factor - previousPoint.factor) * progress; + } + + return CHICKEN_CHILL_FACTOR_POINTS[CHICKEN_CHILL_FACTOR_POINTS.length - 1]!.factor; +} + +export type ExperienceCalc = { + averageTemp: number | null; + windSpeed: number | null; + humidity: number | null; + humidityAdjustment: number | null; + chillFactor: number | null; + chillEffect: number | null; + experienceTemp: number | null; +}; + +export function computeExperienceCalc(args: { + averageTemp: number | null | undefined; + windSpeed: number | null | undefined; + humidity: number | null | undefined; + dayAge: number | null | undefined; +}): ExperienceCalc { + const toNumber = (value: number | null | undefined): number | null => + value != null && Number.isFinite(Number(value)) ? Number(value) : null; + + const averageTemp = toNumber(args.averageTemp); + const windSpeed = toNumber(args.windSpeed); + const humidity = toNumber(args.humidity); + const chillFactor = chickenChillFactorFromAge(args.dayAge); + const humidityAdjustment = humidity === null ? null : (humidity - 70) / 5; + const chillEffect = + windSpeed !== null && chillFactor !== null && humidityAdjustment !== null + ? windSpeed * chillFactor - humidityAdjustment + : null; + const experienceTemp = + averageTemp !== null && chillEffect !== null ? averageTemp - chillEffect : null; + + return { + averageTemp, + windSpeed, + humidity, + humidityAdjustment, + chillFactor, + chillEffect, + experienceTemp, + }; +} + +export function formatChillFactor(value: number | null | undefined): string { + if (value === null || value === undefined || !Number.isFinite(Number(value))) return '--'; + return Number(value).toFixed(3).replace('.', ',').replace(/0+$/, '').replace(/,$/, ''); +} diff --git a/components/sidebar/NavLink.tsx b/components/sidebar/NavLink.tsx new file mode 100644 index 0000000..0bdfdbb --- /dev/null +++ b/components/sidebar/NavLink.tsx @@ -0,0 +1,115 @@ +import React, { useState, useEffect } from 'react'; +import { View } from '../../types/common.ts'; + +export interface NavItem { + view: View; + label: string; + icon: React.ReactNode; + permissionId?: string; + subItems?: NavItem[]; + disabled?: boolean; +} + +interface NavLinkProps { + item: NavItem; + isActive: boolean; + isCollapsed: boolean; + setView: (view: View) => void; + view: View; +} + +const NavLink: React.FC = ({ item, isActive, isCollapsed, setView, view }) => { + const [isOpen, setIsOpen] = useState(isActive); + + useEffect(() => { + if (isActive) { + setIsOpen(true); + } + }, [isActive]); + + useEffect(() => { + if (isCollapsed) { + setIsOpen(false); + } + }, [isCollapsed]); + + if (item.subItems) { + return ( +
  • + + {!isCollapsed && isOpen && ( +
      + {item.subItems.map((subItem) => ( +
    • + +
    • + ))} +
    + )} +
  • + ); + } + + return ( +
  • + +
  • + ); +}; + +export default NavLink; diff --git a/components/ui/Feedback.tsx b/components/ui/Feedback.tsx new file mode 100644 index 0000000..ca779cc --- /dev/null +++ b/components/ui/Feedback.tsx @@ -0,0 +1,55 @@ +import React from 'react'; + +type BannerProps = { + kind?: 'error' | 'info' | 'success'; + children: React.ReactNode; +}; + +const styles = { + error: 'bg-red-50 text-red-800 border-red-200', + info: 'bg-sky-50 text-sky-800 border-sky-200', + success: 'bg-green-50 text-green-800 border-green-200', +}; + +export const Banner: React.FC = ({ kind = 'info', children }) => ( +
    {children}
    +); + +export const PageHeader: React.FC<{ + title: string; + subtitle?: string; + icon?: React.ReactNode; + actions?: React.ReactNode; +}> = ({ title, subtitle, icon, actions }) => ( +
    +
    + {icon && ( +
    + {icon} +
    + )} +
    +

    {title}

    + {subtitle &&

    {subtitle}

    } +
    +
    + {actions} +
    +); + +export const Spinner: React.FC = () => ( +
    + + Memuat... +
    +); + +export const EmptyFarm: React.FC<{ onSettings: () => void }> = ({ onSettings }) => ( + + Pilih site, kandang, dan siklus, atau buat data di{' '} + + . + +); diff --git a/components/weight/DailyDetailPanel.tsx b/components/weight/DailyDetailPanel.tsx new file mode 100644 index 0000000..ecf057d --- /dev/null +++ b/components/weight/DailyDetailPanel.tsx @@ -0,0 +1,103 @@ +import React from 'react'; +import type { ChickenWeight } from '../../types/api.ts'; +import { formatDateId, formatNumber } from '../../utils/format.ts'; +import { formatWeight, getTargetWeightForAge } from '../../utils/weight.ts'; + +interface DailyDetailPanelProps { + row: ChickenWeight | null; + totalDays: number; +} + +const DetailCard: React.FC<{ + label: string; + value: string; + icon: React.ReactNode; + highlight?: boolean; +}> = ({ label, value, icon, highlight = false }) => ( +
    +
    +
    {icon}
    +
    +

    {label}

    +

    {value}

    +
    +
    +
    +); + +const DailyDetailPanel: React.FC = ({ row, totalDays }) => { + if (!row) { + return ( +
    +
    + +

    Belum ada data untuk tanggal ini

    +

    + Pilih tanggal lain untuk melihat rincian harian +

    +
    +
    + ); + } + + const target = getTargetWeightForAge(row.age, totalDays); + const deviation = target != null && row.average_weight > 0 ? row.average_weight - target : null; + + return ( +
    +
    + } + /> + } + /> + } + /> + } + highlight + /> + } + /> + } + /> + } + /> + {deviation != null && ( + = 0 ? '+' : ''}${formatWeight(Math.abs(deviation), { + stripTrailingZeros: true, + })}`} + icon={} + /> + )} +
    +
    + ); +}; + +export default DailyDetailPanel; diff --git a/components/weight/DailyWeightGainChart.tsx b/components/weight/DailyWeightGainChart.tsx new file mode 100644 index 0000000..538e3c6 --- /dev/null +++ b/components/weight/DailyWeightGainChart.tsx @@ -0,0 +1,193 @@ +import React, { useMemo } from 'react'; +import { + Bar, + CartesianGrid, + ComposedChart, + Legend, + Line, + ReferenceLine, + ResponsiveContainer, + Tooltip, + XAxis, + YAxis, +} from 'recharts'; +import type { ChickenWeight } from '../../types/api.ts'; +import { formatDateId } from '../../utils/format.ts'; +import { formatWeight, getTargetGainForAge } from '../../utils/weight.ts'; + +interface DailyWeightGainChartProps { + rows: ChickenWeight[]; + totalDays: number; +} + +type GainStatus = 'above' | 'near' | 'below' | 'none'; + +type ChartPoint = { + day: number; + date: string; + gain: number | null; + targetGain: number | null; + status: GainStatus; +}; + +const DailyWeightGainChart: React.FC = ({ rows, totalDays }) => { + const chartData = useMemo( + () => + [...rows].reverse().map((row) => { + const targetGain = getTargetGainForAge(row.age, totalDays); + const gain = row.average_daily_gain; + let status: GainStatus = 'none'; + if (gain != null && targetGain != null) { + const threshold = Math.abs(targetGain) * 0.1; + if (gain >= targetGain + threshold) status = 'above'; + else if (gain >= targetGain - threshold) status = 'near'; + else status = 'below'; + } + return { day: row.age, date: row.date, gain, targetGain, status }; + }), + [rows, totalDays] + ); + + const hasNoData = chartData.length === 0; + + const CustomLegend = () => ( +
    +
    +
    + Pertumbuhan Aktual +
    +
    +
    + Target Pertumbuhan +
    +
    + ); + + const CustomTooltip = ({ + active, + payload, + }: { + active?: boolean; + payload?: Array<{ payload: ChartPoint }>; + }) => { + if (!active || !payload?.length) return null; + const point = payload[0]?.payload; + if (!point || point.gain == null) return null; + const hasTarget = point.targetGain != null; + const gainDiff = hasTarget ? point.gain - point.targetGain! : null; + + return ( +
    +

    Hari ke-{point.day}

    +

    {formatDateId(point.date)}

    +
    +

    + Pertumbuhan Aktual:{' '} + {formatWeight(point.gain, { stripTrailingZeros: true })} +

    + {hasTarget ? ( + <> +

    + Target Pertumbuhan:{' '} + {formatWeight(point.targetGain!, { stripTrailingZeros: true })} +

    +

    + Selisih:{' '} + = 0 ? 'text-green-600' : 'text-orange-600'}> + {gainDiff! >= 0 ? '+' : ''} + {formatWeight(Math.abs(gainDiff!), { stripTrailingZeros: true })} + +

    +

    + Status:{' '} + + {point.status === 'above' + ? 'Di Atas Target' + : point.status === 'near' + ? 'Mendekati Target' + : 'Di Bawah Target'} + +

    + + ) : ( +

    + Target:{' '} + Belum ada data standar +

    + )} +
    +
    + ); + }; + + return ( +
    +
    +

    Grafik Kenaikan Berat Harian

    +
    +
    + {hasNoData ? ( +
    +
    +

    Tidak ada data tersedia

    +

    Data pertumbuhan belum tersedia

    +
    +
    + ) : ( + + + + + formatWeight(value, { stripTrailingZeros: true })} + /> + } /> + } /> + + + + + + + + )} +
    +
    + ); +}; + +export default DailyWeightGainChart; diff --git a/components/weight/DailyWeightProgressionChart.tsx b/components/weight/DailyWeightProgressionChart.tsx new file mode 100644 index 0000000..f16a0bb --- /dev/null +++ b/components/weight/DailyWeightProgressionChart.tsx @@ -0,0 +1,157 @@ +import React, { useMemo } from 'react'; +import { + CartesianGrid, + ComposedChart, + Line, + ResponsiveContainer, + Tooltip, + XAxis, + YAxis, +} from 'recharts'; +import type { ChickenWeight } from '../../types/api.ts'; +import { formatDateId } from '../../utils/format.ts'; +import { formatWeight, getTargetWeightForAge } from '../../utils/weight.ts'; + +interface DailyWeightProgressionChartProps { + rows: ChickenWeight[]; + totalDays: number; +} + +type ChartPoint = { + day: number; + date: string; + actual: number | null; + target: number | null; + chickenCount: number; +}; + +const DailyWeightProgressionChart: React.FC = ({ + rows, + totalDays, +}) => { + const chartData = useMemo( + () => + [...rows].reverse().map((row) => ({ + day: row.age, + date: row.date, + actual: row.average_weight, + target: getTargetWeightForAge(row.age, totalDays), + chickenCount: row.chicken_count, + })), + [rows, totalDays] + ); + + const hasNoData = chartData.length === 0; + + const CustomTooltip = ({ + active, + payload, + }: { + active?: boolean; + payload?: Array<{ payload: ChartPoint }>; + }) => { + if (!active || !payload?.length) return null; + const point = payload[0]?.payload; + if (!point || point.actual == null) return null; + const deviation = point.target != null ? point.actual - point.target : null; + + return ( +
    +

    Hari ke-{point.day}

    +

    {formatDateId(point.date)}

    +
    +

    + Aktual:{' '} + {formatWeight(point.actual, { stripTrailingZeros: true })} +

    +

    + Target:{' '} + {formatWeight(point.target, { stripTrailingZeros: true })} +

    + {point.chickenCount > 0 && ( +

    + Ayam: {point.chickenCount} ekor +

    + )} + {deviation != null && ( +

    + Deviasi:{' '} + = 0 ? 'text-green-600' : 'text-orange-600'}> + {deviation >= 0 ? '+' : ''} + {formatWeight(Math.abs(deviation), { stripTrailingZeros: true })} + +

    + )} +
    +
    + ); + }; + + return ( +
    +

    Grafik Berat Aktual vs Target

    +
    + {hasNoData ? ( +
    +
    +

    Tidak ada data tersedia

    +

    + Data berat belum tersedia untuk periode ini +

    +
    +
    + ) : ( + + + + + formatWeight(value, { stripTrailingZeros: true })} + /> + } /> + + + + + )} +
    + {!hasNoData && ( +
    +
    +
    + Berat Aktual +
    +
    +
    + Target Standar +
    +
    + )} +
    + ); +}; + +export default DailyWeightProgressionChart; diff --git a/components/weight/WeightStats.tsx b/components/weight/WeightStats.tsx new file mode 100644 index 0000000..f2aef24 --- /dev/null +++ b/components/weight/WeightStats.tsx @@ -0,0 +1,90 @@ +import React from 'react'; +import type { LatestAvg } from '../../types/api.ts'; +import { formatDateId, formatNumber } from '../../utils/format.ts'; +import { + adgStatus, + formatWeight, + getTargetWeightForAge, + type WeightStatus, + uniformityStatus, + weightDeviationStatus, +} from '../../utils/weight.ts'; + +const statusText: Record = { + ok: 'text-green-600', + warning: 'text-yellow-600', + critical: 'text-red-600', +}; + +const StatItem: React.FC<{ + icon: React.ReactNode; + label: string; + value: string; + status: WeightStatus; +}> = ({ icon, label, value, status }) => ( +
    +
    {icon}
    +
    +

    {label}

    +

    + {value} +

    +
    +
    +); + +interface WeightStatsProps { + latest: LatestAvg | null; + totalDays: number; +} + +const WeightStats: React.FC = ({ latest, totalDays }) => { + const target = latest ? getTargetWeightForAge(latest.age, totalDays) : null; + + return ( +
    +
    +

    Statistik Utama Pertumbuhan

    + {latest?.date ? ( +

    Data per: {formatDateId(latest.date)}

    + ) : null} +
    + {!latest ? ( +
    + +

    Data Tidak Tersedia

    +

    + Belum ada data timbangan untuk siklus ini. Data akan muncul setelah ayam ditimbang. +

    +
    + ) : ( +
    + } + label="Rata-rata Berat Ayam" + value={formatWeight(latest.average_weight, { stripTrailingZeros: true })} + status={weightDeviationStatus(latest.average_weight, target)} + /> + } + label="Pertambahan Bobot Harian (ADG)" + value={formatWeight(latest.average_daily_gain, { + suffix: '/hari', + decimals: 2, + truncate: true, + })} + status={adgStatus(latest.average_daily_gain)} + /> + } + label="Tingkat Keseragaman (Uniformity)" + value={`${formatNumber(latest.uniformity, 2, 2, true)} %`} + status={uniformityStatus(latest.uniformity)} + /> +
    + )} +
    + ); +}; + +export default WeightStats; diff --git a/context/AuthContext.tsx b/context/AuthContext.tsx new file mode 100644 index 0000000..167a0a1 --- /dev/null +++ b/context/AuthContext.tsx @@ -0,0 +1,70 @@ +import React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'; +import { api, ApiError, AUTH_UNAUTHORIZED_EVENT } from '../services/apiClient.ts'; +import type { User } from '../types/api.ts'; + +type AuthContextValue = { + user: User | null; + loading: boolean; + login: (userName: string, password: string) => Promise; + logout: () => Promise; +}; + +const AuthContext = createContext(null); + +export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { + const [user, setUser] = useState(null); + const [loading, setLoading] = useState(true); + + useEffect(() => { + const onUnauthorized = () => setUser(null); + window.addEventListener(AUTH_UNAUTHORIZED_EVENT, onUnauthorized); + return () => window.removeEventListener(AUTH_UNAUTHORIZED_EVENT, onUnauthorized); + }, []); + + useEffect(() => { + let cancelled = false; + (async () => { + try { + const me = await api.auth.me(); + if (!cancelled) setUser(me); + } catch (err) { + if ( + !cancelled && + !(err instanceof ApiError && (err.status === 401 || err.status === 403)) + ) { + console.error(err); + } + if (!cancelled) setUser(null); + } finally { + if (!cancelled) setLoading(false); + } + })(); + return () => { + cancelled = true; + }; + }, []); + + const login = useCallback(async (userName: string, password: string) => { + await api.auth.csrf(); + const next = await api.auth.login(userName, password); + setUser(next); + }, []); + + const logout = useCallback(async () => { + try { + await api.auth.logout(); + } finally { + setUser(null); + } + }, []); + + const value = useMemo(() => ({ user, loading, login, logout }), [user, loading, login, logout]); + + return {children}; +}; + +export function useAuth(): AuthContextValue { + const ctx = useContext(AuthContext); + if (!ctx) throw new Error('useAuth must be used within AuthProvider'); + return ctx; +} diff --git a/context/FarmContext.tsx b/context/FarmContext.tsx new file mode 100644 index 0000000..ca1d1da --- /dev/null +++ b/context/FarmContext.tsx @@ -0,0 +1,178 @@ +import React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'; +import { api, errorMessage } from '../services/apiClient.ts'; +import type { Cycle, Kandang, Site } from '../types/api.ts'; +import { useAuth } from './AuthContext.tsx'; + +type FarmContextValue = { + sites: Site[]; + kandangs: Kandang[]; + cycles: Cycle[]; + selectedSiteId: number | null; + selectedKandangId: number | null; + selectedCycleId: number | null; + selectedSite: Site | null; + selectedKandang: Kandang | null; + selectedCycle: Cycle | null; + loading: boolean; + error: string | null; + setSelectedSiteId: (id: number | null) => void; + setSelectedKandangId: (id: number | null) => void; + setSelectedCycleId: (id: number | null) => void; + reload: () => Promise; +}; + +const FarmContext = createContext(null); + +export const FarmProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { + const { user } = useAuth(); + const [sites, setSites] = useState([]); + const [kandangs, setKandangs] = useState([]); + const [cycles, setCycles] = useState([]); + const [selectedSiteId, setSelectedSiteId] = useState(null); + const [selectedKandangId, setSelectedKandangId] = useState(null); + const [selectedCycleId, setSelectedCycleId] = useState(null); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(null); + const [reloadToken, setReloadToken] = useState(0); + + const reload = useCallback(async () => { + setReloadToken((token) => token + 1); + }, []); + + useEffect(() => { + if (!user) { + setSites([]); + setKandangs([]); + setCycles([]); + return; + } + let cancelled = false; + (async () => { + setLoading(true); + setError(null); + try { + const nextSites = await api.sites.list(); + if (cancelled) return; + setSites(nextSites); + setSelectedSiteId((prev) => { + if (prev && nextSites.some((s) => s.id === prev)) return prev; + return nextSites[0]?.id ?? null; + }); + } catch (err) { + if (!cancelled) setError(errorMessage(err)); + } finally { + if (!cancelled) setLoading(false); + } + })(); + return () => { + cancelled = true; + }; + }, [user, reloadToken]); + + useEffect(() => { + if (!user || selectedSiteId == null) { + setKandangs([]); + setSelectedKandangId(null); + return; + } + let cancelled = false; + (async () => { + try { + const next = await api.kandangs.list({ site_id: selectedSiteId }); + if (cancelled) return; + setKandangs(next); + setSelectedKandangId((prev) => { + if (prev && next.some((k) => k.id === prev)) return prev; + return next[0]?.id ?? null; + }); + } catch (err) { + if (!cancelled) setError(errorMessage(err)); + } + })(); + return () => { + cancelled = true; + }; + }, [user, selectedSiteId, reloadToken]); + + useEffect(() => { + if (!user || selectedKandangId == null) { + setCycles([]); + setSelectedCycleId(null); + return; + } + let cancelled = false; + (async () => { + try { + const next = await api.cycles.list({ kandang_id: selectedKandangId }); + if (cancelled) return; + setCycles(next); + setSelectedCycleId((prev) => { + if (prev && next.some((c) => c.id === prev)) return prev; + const active = next.find((c) => c.status === 'active'); + if (active) return active.id; + return next[0]?.id ?? null; + }); + } catch (err) { + if (!cancelled) setError(errorMessage(err)); + } + })(); + return () => { + cancelled = true; + }; + }, [user, selectedKandangId, reloadToken]); + + const selectedSite = useMemo( + () => sites.find((s) => s.id === selectedSiteId) ?? null, + [sites, selectedSiteId] + ); + const selectedKandang = useMemo( + () => kandangs.find((k) => k.id === selectedKandangId) ?? null, + [kandangs, selectedKandangId] + ); + const selectedCycle = useMemo( + () => cycles.find((c) => c.id === selectedCycleId) ?? null, + [cycles, selectedCycleId] + ); + + const value = useMemo( + () => ({ + sites, + kandangs, + cycles, + selectedSiteId, + selectedKandangId, + selectedCycleId, + selectedSite, + selectedKandang, + selectedCycle, + loading, + error, + setSelectedSiteId, + setSelectedKandangId, + setSelectedCycleId, + reload, + }), + [ + sites, + kandangs, + cycles, + selectedSiteId, + selectedKandangId, + selectedCycleId, + selectedSite, + selectedKandang, + selectedCycle, + loading, + error, + reload, + ] + ); + + return {children}; +}; + +export function useFarm(): FarmContextValue { + const ctx = useContext(FarmContext); + if (!ctx) throw new Error('useFarm must be used within FarmProvider'); + return ctx; +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..2a89978 --- /dev/null +++ b/index.html @@ -0,0 +1,158 @@ + + + + + + CP Dashboard: Solusi AI Peternakan Ayam + + + + + + +
    + + + + diff --git a/index.tsx b/index.tsx new file mode 100644 index 0000000..3029972 --- /dev/null +++ b/index.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App.tsx'; +import ErrorBoundary from './components/common/ErrorBoundary.tsx'; + +const rootElement = document.getElementById('root'); +if (!rootElement) { + throw new Error('Could not find root element to mount to'); +} + +ReactDOM.createRoot(rootElement).render( + + + + + +); diff --git a/mockData/cobbStandard.ts b/mockData/cobbStandard.ts new file mode 100644 index 0000000..1c9a930 --- /dev/null +++ b/mockData/cobbStandard.ts @@ -0,0 +1,44 @@ +export const cobbStandardPerformance = [ + { day: 1, dailyGainPercent: 0.33333, fcr: 0.232 }, + { day: 2, dailyGainPercent: 0.28571, fcr: 0.417 }, + { day: 3, dailyGainPercent: 0.23611, fcr: 0.573 }, + { day: 4, dailyGainPercent: 0.22472, fcr: 0.679 }, + { day: 5, dailyGainPercent: 0.20183, fcr: 0.773 }, + { day: 6, dailyGainPercent: 0.19847, fcr: 0.841 }, + { day: 7, dailyGainPercent: 0.17834, fcr: 0.902 }, + { day: 8, dailyGainPercent: 0.16216, fcr: 0.958 }, + { day: 9, dailyGainPercent: 0.14884, fcr: 1.012 }, + { day: 10, dailyGainPercent: 0.14575, fcr: 1.053 }, + { day: 11, dailyGainPercent: 0.13428, fcr: 1.097 }, + { day: 12, dailyGainPercent: 0.13396, fcr: 1.126 }, + { day: 13, dailyGainPercent: 0.13187, fcr: 1.15 }, + { day: 14, dailyGainPercent: 0.12864, fcr: 1.165 }, + { day: 15, dailyGainPercent: 0.12688, fcr: 1.177 }, + { day: 16, dailyGainPercent: 0.11832, fcr: 1.191 }, + { day: 17, dailyGainPercent: 0.11092, fcr: 1.206 }, + { day: 18, dailyGainPercent: 0.10445, fcr: 1.221 }, + { day: 19, dailyGainPercent: 0.09875, fcr: 1.235 }, + { day: 20, dailyGainPercent: 0.09494, fcr: 1.25 }, + { day: 21, dailyGainPercent: 0.09017, fcr: 1.264 }, + { day: 22, dailyGainPercent: 0.08484, fcr: 1.284 }, + { day: 23, dailyGainPercent: 0.07918, fcr: 1.303 }, + { day: 24, dailyGainPercent: 0.07428, fcr: 1.321 }, + { day: 25, dailyGainPercent: 0.06998, fcr: 1.337 }, + { day: 26, dailyGainPercent: 0.06619, fcr: 1.356 }, + { day: 27, dailyGainPercent: 0.06282, fcr: 1.373 }, + { day: 28, dailyGainPercent: 0.05981, fcr: 1.402 }, + { day: 29, dailyGainPercent: 0.0584, fcr: 1.423 }, + { day: 30, dailyGainPercent: 0.05704, fcr: 1.442 }, + { day: 31, dailyGainPercent: 0.05513, fcr: 1.46 }, + { day: 32, dailyGainPercent: 0.05336, fcr: 1.478 }, + { day: 33, dailyGainPercent: 0.05172, fcr: 1.496 }, + { day: 34, dailyGainPercent: 0.04967, fcr: 1.512 }, + { day: 35, dailyGainPercent: 0.04732, fcr: 1.53 }, + { day: 36, dailyGainPercent: 0.0446, fcr: 1.549 }, + { day: 37, dailyGainPercent: 0.0426, fcr: 1.568 }, + { day: 38, dailyGainPercent: 0.0403, fcr: 1.589 }, + { day: 39, dailyGainPercent: 0.0382, fcr: 1.61 }, + { day: 40, dailyGainPercent: 0.0365, fcr: 1.631 }, + { day: 41, dailyGainPercent: 0.0348, fcr: 1.653 }, + { day: 42, dailyGainPercent: 0.0337, fcr: 1.675 }, +]; diff --git a/mockData/weightStandardData.ts b/mockData/weightStandardData.ts new file mode 100644 index 0000000..6fae219 --- /dev/null +++ b/mockData/weightStandardData.ts @@ -0,0 +1,144 @@ +export const weightStandardData = { + headers: [ + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, + ], + data: [ + { + day: 35, + values: [ + 43, 62, 80, 102, 127, 152, 179, 211, 244, 286, 331, 374, 419, 475, 538, 595, 657, 724, 790, + 861, 938, 1036, 1113, 1193, 1275, 1359, 1449, 1543, 1655, 1746, 1839, 1936, 2032, 2132, + 2237, + ], + }, + { + day: 36, + values: [ + 44, 63, 82, 104, 130, 156, 183, 214, 248, 290, 336, 379, 426, 482, 545, 603, 665, 733, 800, + 872, 950, 1046, 1123, 1204, 1286, 1371, 1462, 1557, 1667, 1758, 1853, 1950, 2046, 2147, + 2253, + ], + }, + { + day: 37, + values: [ + 45, 65, 84, 106, 133, 159, 187, 217, 251, 294, 340, 385, 432, 489, 550, 609, 672, 741, 808, + 881, 960, 1054, 1132, 1213, 1296, 1382, 1473, 1569, 1676, 1768, 1863, 1961, 2058, 2159, + 2266, + ], + }, + { + day: 38, + values: [ + 46, 66, 85, 108, 135, 162, 190, 221, 256, 299, 346, 391, 439, 497, 556, 615, 679, 749, 817, + 890, 970, 1063, 1141, 1223, 1307, 1393, 1485, 1582, 1687, 1779, 1875, 1973, 2071, 2173, + 2280, + ], + }, + { + day: 39, + values: [ + 47, 67, 87, 110, 138, 165, 194, 224, 259, 304, 351, 397, 445, 504, 563, 623, 688, 758, 827, + 901, 982, 1071, 1151, 1233, 1318, 1405, 1498, 1595, 1697, 1790, 1886, 1986, 2083, 2186, + 2294, + ], + }, + { + day: 40, + values: [ + 48, 68, 89, 113, 140, 168, 198, 228, 264, 308, 356, 403, 452, 512, 569, 629, 695, 766, 835, + 911, 992, 1080, 1160, 1243, 1328, 1416, 1510, 1608, 1707, 1800, 1897, 1997, 2095, 2199, + 2307, + ], + }, + { + day: 41, + values: [ + 49, 70, 90, 115, 143, 172, 202, 232, 270, 313, 361, 408, 458, 519, 575, 636, 702, 773, 843, + 920, 1002, 1088, 1169, 1253, 1338, 1427, 1521, 1620, 1717, 1811, 1908, 2009, 2108, 2212, + 2321, + ], + }, + { + day: 42, + values: [ + 49, 71, 92, 117, 146, 175, 206, 236, 274, 317, 366, 414, 464, 526, 581, 643, 709, 782, 853, + 930, 1013, 1097, 1178, 1263, 1349, 1438, 1533, 1633, 1727, 1821, 1919, 2020, 2120, 2224, + 2334, + ], + }, + { + day: 43, + values: [ + 50, 72, 94, 119, 148, 178, 209, 243, 281, 322, 371, 419, 471, 533, 587, 649, 716, 790, 861, + 939, 1023, 1105, 1187, 1272, 1359, 1449, 1545, 1645, 1736, 1831, 1930, 2031, 2132, 2237, + 2347, + ], + }, + { + day: 44, + values: [ + 62, 81, 102, 125, 151, 181, 213, 247, 285, 328, 376, 425, 477, 540, 590, 652, 722, 796, 868, + 945, 1032, 1100, 1182, 1267, 1354, 1443, 1549, 1657, 1720, 1815, 1913, 2015, 2115, 2248, + 2360, + ], + }, + { + day: 45, + values: [ + 52, 75, 97, 123, 154, 184, 217, 249, 288, 330, 381, 430, 483, 547, 598, 661, 730, 804, 877, + 957, 1042, 1120, 1203, 1290, 1378, 1469, 1566, 1668, 1755, 1851, 1950, 2053, 2154, 2261, + 2372, + ], + }, + { + day: 46, + values: [ + 53, 76, 99, 125, 157, 188, 221, 253, 292, 334, 386, 436, 489, 554, 604, 668, 738, 813, 887, + 967, 1054, 1130, 1214, 1301, 1390, 1482, 1580, 1682, 1766, 1863, 1963, 2066, 2168, 2275, + 2387, + ], + }, + { + day: 47, + values: [ + 54, 78, 101, 128, 159, 191, 224, 256, 296, 339, 391, 441, 495, 561, 610, 675, 745, 821, 896, + 977, 1064, 1138, 1223, 1311, 1400, 1493, 1591, 1695, 1776, 1873, 1974, 2078, 2180, 2288, + 2401, + ], + }, + { + day: 48, + values: [ + 55, 79, 102, 130, 162, 194, 228, 259, 299, 343, 395, 447, 502, 568, 616, 682, 752, 829, 904, + 986, 1074, 1147, 1232, 1320, 1411, 1504, 1603, 1707, 1784, 1884, 1985, 2090, 2193, 2301, + 2414, + ], + }, + { + day: 49, + values: [ + 56, 80, 104, 132, 165, 197, 232, 262, 303, 347, 400, 452, 508, 575, 622, 688, 760, 837, 913, + 996, 1085, 1155, 1241, 1330, 1421, 1515, 1615, 1720, 1796, 1894, 1996, 2101, 2205, 2314, + 2428, + ], + }, + { + day: 50, + values: [ + 57, 81, 106, 134, 167, 200, 236, 265, 307, 351, 405, 458, 514, 582, 628, 695, 767, 845, 922, + 1005, 1095, 1164, 1250, 1340, 1431, 1526, 1627, 1732, 1790, 1894, 1996, 2101, 2205, 2314, + 2428, + ], + }, + { + day: 51, + values: [ + 57, 81, 106, 134, 167, 200, 206, 265, 307, 351, 405, 458, 514, 582, 628, 695, 767, 845, 922, + 1005, 1095, 1164, 1250, 1340, 1431, 1526, 1627, 1732, 1806, 1905, 2007, 2113, 2217, 2326, + 2441, + ], + }, + ], +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..28f6a12 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,8317 @@ +{ + "name": "dashboard-new-v2", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "dashboard-new-v2", + "version": "0.1.0", + "dependencies": { + "exceljs": "^4.4.0", + "html2canvas": "^1.4.1", + "jspdf": "^4.2.1", + "react": "^19.1.1", + "react-dom": "^19.1.1", + "recharts": "^3.1.0" + }, + "devDependencies": { + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.2", + "@types/node": "^26.2.0", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@typescript-eslint/eslint-plugin": "^8.67.0", + "@typescript-eslint/parser": "^8.67.0", + "@vitejs/plugin-react": "^5.0.0", + "eslint": "^8.57.1", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-prettier": "^5.5.6", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^7.1.1", + "husky": "^9.1.7", + "jsdom": "^29.0.2", + "lint-staged": "^17.3.0", + "prettier": "^3.9.6", + "typescript": "~5.8.2", + "vite": "^6.2.0", + "vitest": "^4.1.5" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.5.0.tgz", + "integrity": "sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@asamuzakjp/css-color": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz", + "integrity": "sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", + "@csstools/css-calc": "^3.2.0", + "@csstools/css-color-parser": "^4.1.0", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-7.1.1.tgz", + "integrity": "sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.2.1", + "is-potential-custom-element-name": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/generational-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/generational-cache/-/generational-cache-1.0.1.tgz", + "integrity": "sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", + "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", + "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bramus/specificity": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", + "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0" + }, + "bin": { + "specificity": "bin/cli.js" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.1.1.tgz", + "integrity": "sha512-gLNsunvwf3mCi5u5o46/Z/JcJMnhbHSaZ69rkgPzNM3J4s8hWwpPUQB6/tt0EDFyCiWzxANlx+2LJwpYj4zS1w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@csstools/css-calc": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.3.0.tgz", + "integrity": "sha512-c5ihYsPkdG6JCkU2zTMm4+k6r7RXuGxtWYhu5DHMIiF1FHzrfmHL5so11AoFpUv/tu61xfcmT4AmKoFfMPoqdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.2.0.tgz", + "integrity": "sha512-5+5LEmFuY1AjXdYhmgjTJogtQnP1evJ1zrBZGUNZ0thkpwnnmKxcHdAMn/OtFjAb25zA+jKDVYVRl+5G7rjv1A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^6.1.1", + "@csstools/css-calc": "^3.3.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.8.tgz", + "integrity": "sha512-CpMLjAvwQg3BL5S0IeqsZNMH7EQrEWi0kLKOC13ZBF0ZwERiLWlibNPJr8G1kdU3Ms/r2KiNrF81pUh2HwAHdg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peerDependencies": { + "css-tree": "^3.2.1" + }, + "peerDependenciesMeta": { + "css-tree": { + "optional": true + } + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", + "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@exodus/bytes": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.1.tgz", + "integrity": "sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@noble/hashes": "^1.8.0 || ^2.0.0" + }, + "peerDependenciesMeta": { + "@noble/hashes": { + "optional": true + } + } + }, + "node_modules/@fast-csv/format": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz", + "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", + "license": "MIT", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isboolean": "^3.0.3", + "lodash.isequal": "^4.5.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0" + } + }, + "node_modules/@fast-csv/format/node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "license": "MIT" + }, + "node_modules/@fast-csv/parse": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz", + "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==", + "license": "MIT", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.groupby": "^4.6.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0", + "lodash.isundefined": "^3.0.1", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/@fast-csv/parse/node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "license": "MIT" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/core": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz", + "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@reduxjs/toolkit": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.12.0.tgz", + "integrity": "sha512-KiT+RzZbp6mQET+Mg+h2c97+9j1sNflUxQkIHI7Yuzf6Peu+OYpmkn6nbHWmLLWj+1ZODUJFwGZ7gx3L9R9EOw==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@standard-schema/utils": "^0.3.0", + "immer": "^11.0.0", + "redux": "^5.0.1", + "redux-thunk": "^3.1.0", + "reselect": "^5.1.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", + "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", + "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz", + "integrity": "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz", + "integrity": "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.4.tgz", + "integrity": "sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz", + "integrity": "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz", + "integrity": "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz", + "integrity": "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz", + "integrity": "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz", + "integrity": "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz", + "integrity": "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz", + "integrity": "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz", + "integrity": "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz", + "integrity": "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz", + "integrity": "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz", + "integrity": "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz", + "integrity": "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz", + "integrity": "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz", + "integrity": "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz", + "integrity": "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz", + "integrity": "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz", + "integrity": "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz", + "integrity": "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz", + "integrity": "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz", + "integrity": "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz", + "integrity": "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz", + "integrity": "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", + "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "picocolors": "^1.1.1", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/react": { + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.2.tgz", + "integrity": "sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz", + "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "26.2.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.2.0.tgz", + "integrity": "sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~8.3.0" + } + }, + "node_modules/@types/pako": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/pako/-/pako-2.0.4.tgz", + "integrity": "sha512-VWDCbrLeVXJM9fihYodcLiIv0ku+AlOa/TQ1SvYOaBuyrSKgEcro95LJyIsJ4vSo6BXIxOKxiJAat04CmST9Fw==", + "license": "MIT" + }, + "node_modules/@types/raf": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", + "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/react": { + "version": "19.2.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.18.tgz", + "integrity": "sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.67.0.tgz", + "integrity": "sha512-Un7Heoyj65NREbKAyIrFxeM143NZpExWmy1Nep4DLeQOeLlTeumPjoNKnBrU5D5moWXbPJgRa5Uwcdu0faVNGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.67.0", + "@typescript-eslint/type-utils": "8.67.0", + "@typescript-eslint/utils": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.67.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.67.0.tgz", + "integrity": "sha512-fUBfTuuEulWqX6V8+O3PtScV01tzYYRUDTAirHFKoRAt7nOzoGiPt0M/bB47wWNy0coOOcgEwAMUtBpykMxl6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.67.0", + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/typescript-estree": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.67.0.tgz", + "integrity": "sha512-cvE8c7ulYeXN9fYuszhCeCsbzyVEXuhrRCybnBre7TUmqb5nRmBfQAwCj0O3WJFDeyAZt4VYv51vMCC9LHSdYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.67.0", + "@typescript-eslint/types": "^8.67.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.67.0.tgz", + "integrity": "sha512-EgvsleTwS4E+WzzSvem8fAUubLwatMNF1B5hHSLQxcvs7q2dtRhGyujHwLJSYlG41niJ7GP24Aha2+0mb1b2kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.67.0.tgz", + "integrity": "sha512-vV+LUSv5njUWsknE71fqKTlXUva+R76SaeORd6Zojcunk/6DvKFXONU3BrAs2H49mbygUXt6gbYunzwqNwlhdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.67.0.tgz", + "integrity": "sha512-aVWDXbRmdXO9siTfX4ditQI1T9+zVcNazT48EJCD0v40/9RIFoUgZ05CmGEq9H2gixRpjUn/iplwvlcvutJW/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/typescript-estree": "8.67.0", + "@typescript-eslint/utils": "8.67.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.67.0.tgz", + "integrity": "sha512-sBtgslww8nsMYUjhdPBiSyUqSzT8uR6g93A2QXnQC8+cGdjz0CyaOdqHDRJb1AtORbZCNUJBBeFA/tNR2uQmww==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.67.0.tgz", + "integrity": "sha512-EKQBCE9yNlRJYm7jdTW5AhDacDUmSwQb0FAJAmK2EKYrNXIsa2vxcSZx6PvJ/dEdI6lS+Y9W+EXckLj0iPFGcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.67.0", + "@typescript-eslint/tsconfig-utils": "8.67.0", + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.67.0.tgz", + "integrity": "sha512-U9D1FdwEWBwok3hxxSdhclMb0twvt9QnjIQ0VfQ1AiX2epnpSgv2ubVDsayOFyY8K6FX+AQ7E0FKWVG3iKsj1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.67.0", + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/typescript-estree": "8.67.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.67.0.tgz", + "integrity": "sha512-fkv8dHRDqfGtTHuJeebdrQ7cX6Ad4WAS00rgHh9UGvMycF1mjBfsxry1XsLIFhWZ6Judlh6UdzK+TYlbpCXgnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.67.0", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", + "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.2.0.tgz", + "integrity": "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.29.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-rc.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@vitest/expect": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.10.tgz", + "integrity": "sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.10", + "@vitest/utils": "4.1.10", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.10.tgz", + "integrity": "sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.10", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.10.tgz", + "integrity": "sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.10.tgz", + "integrity": "sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.10", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.10.tgz", + "integrity": "sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.10", + "@vitest/utils": "4.1.10", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.10.tgz", + "integrity": "sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.10.tgz", + "integrity": "sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.10", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "license": "MIT", + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.15", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.15.tgz", + "integrity": "sha512-FwMjJJ7HnyZpWe+oWxegG0fezZyBZUagI5LZEoO3GCbtbKNwRfMH9Ue5d5v01PNePBy1QSfPSDTTeVL0Hb9EzA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "license": "MIT", + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.28.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", + "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.11.12", + "caniuse-lite": "^1.0.30001809", + "electron-to-chromium": "^1.5.402", + "node-releases": "^2.0.53", + "update-browserslist-db": "^1.3.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001809", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz", + "integrity": "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/canvg": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.11.tgz", + "integrity": "sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "license": "MIT/X11", + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js": { + "version": "3.50.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.50.0.tgz", + "integrity": "sha512-BRWgOLKkFeCgRudR6zrs8p9XJZcE14grzKMMssoYrk6krtuEZ7MTKPIY5RzOnqsEKIR9kst7wNzphttraT+Yqw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "license": "MIT", + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz", + "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", + "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dayjs": { + "version": "1.11.23", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.23.tgz", + "integrity": "sha512-QDTCU0M0MxR3hQfnlDJfwekQiaanm1ubOD231u73WBckQ/fsamwRLiE2GBz6D3a/xF1NgfiDLJjXBa1hYOYTtQ==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/dompurify": { + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.13.tgz", + "integrity": "sha512-2vmYIoqjze2d+kakP8S/nS5shfsl587kzwEjcGlTdiksUVgFHnFCsLYDVj/JNqJVOQZGSYBTmuycv0PodwmnMQ==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optional": true, + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.409", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.409.tgz", + "integrity": "sha512-ChI4N44d0B4A6C8prnNjMOaGgE59fUyEVYcRYm2XEXIjMbbvF5i9UL1cblDbpGqiU0uS8FE8UcKxqZqTXdmzbQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-abstract": { + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract-get": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-abstract-get/-/es-abstract-get-1.0.0.tgz", + "integrity": "sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.2", + "is-callable": "^1.2.7", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.4.0.tgz", + "integrity": "sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.1.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.3.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.5", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz", + "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.4.tgz", + "integrity": "sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-abstract-get": "^1.0.0", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "is-callable": "^1.2.7", + "is-date-object": "^1.1.0", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-toolkit": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.51.0.tgz", + "integrity": "sha512-zC2lQGkM7QX+Gm6iM3+WIdZJzthsEd14LvRNJneSO2hzyz/zNBENR8+YXWo1cKxgPBtV6ksPYHELbcwBRzmdCw==", + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks", + "tests/types", + "tests/browser-compat" + ] + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.6.tgz", + "integrity": "sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.13" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/exceljs": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-4.4.0.tgz", + "integrity": "sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg==", + "license": "MIT", + "dependencies": { + "archiver": "^5.0.0", + "dayjs": "^1.8.34", + "fast-csv": "^4.3.1", + "jszip": "^3.10.1", + "readable-stream": "^3.6.0", + "saxes": "^5.0.1", + "tmp": "^0.2.0", + "unzipper": "^0.10.11", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fast-csv": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz", + "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==", + "license": "MIT", + "dependencies": { + "@fast-csv/format": "4.3.5", + "@fast-csv/parse": "4.3.6" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-png": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/fast-png/-/fast-png-6.4.0.tgz", + "integrity": "sha512-kAqZq1TlgBjZcLr5mcN6NP5Rv4V2f22z00c3g8vRrwkcqjerx7BEhPbOnWCPqaHUl2XWQBJQvOT/FQhdMT7X/Q==", + "license": "MIT", + "dependencies": { + "@types/pako": "^2.0.3", + "iobuffer": "^5.3.2", + "pako": "^2.1.0" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fflate": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz", + "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==", + "license": "MIT" + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.2.0.tgz", + "integrity": "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2", + "hasown": "^2.0.4", + "is-callable": "^1.2.7", + "is-document.all": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", + "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.6.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "license": "MIT", + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", + "dev": true, + "license": "MIT", + "bin": { + "husky": "bin.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", + "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/immer": { + "version": "11.1.17", + "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.17.tgz", + "integrity": "sha512-8Vu44Y0MuMBlTQz/jQ8HEMYNq/bBqk87MnBwYR5mC8AthfhEXidZ5aT/oA/CUqboa8THKltnD9L3xyqhU/Sy1Q==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/iobuffer": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/iobuffer/-/iobuffer-5.4.0.tgz", + "integrity": "sha512-DRebOWuqDvxunfkNJAlc3IzWIPD5xVxwUNbHr7xKB8E6aLJxIPfNX3CoMJghcFjpv6RWQsrcJbghtEwSPoJqMA==", + "license": "MIT" + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-document.all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-document.all/-/is-document.all-1.0.0.tgz", + "integrity": "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.1.1.tgz", + "integrity": "sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^5.1.11", + "@asamuzakjp/dom-selector": "^7.1.1", + "@bramus/specificity": "^2.4.2", + "@csstools/css-syntax-patches-for-csstree": "^1.1.3", + "@exodus/bytes": "^1.15.0", + "css-tree": "^3.2.1", + "data-urls": "^7.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^6.0.0", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.3.5", + "parse5": "^8.0.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^6.0.1", + "undici": "^7.25.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.1", + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.1", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/jsdom/node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jspdf": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-4.2.1.tgz", + "integrity": "sha512-YyAXyvnmjTbR4bHQRLzex3CuINCDlQnBqoSYyjJwTP2x9jDLuKDzy7aKUl0hgx3uhcl7xzg32agn5vlie6HIlQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.6", + "fast-png": "^6.2.0", + "fflate": "^0.8.1" + }, + "optionalDependencies": { + "canvg": "^3.0.11", + "core-js": "^3.6.0", + "dompurify": "^3.3.1", + "html2canvas": "^1.0.0-rc.5" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lint-staged": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-17.3.0.tgz", + "integrity": "sha512-woZS3vNe3UKqBaLPvbLOtKRY4tLANpWQhom12MGWqC8Mh1lCOO+WgSwmX2amjJAqTY9BkXYW87fCUH5H9Ph6xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^4.0.5", + "string-argv": "^0.3.2", + "tinyexec": "^1.2.4" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=22.22.1" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + }, + "optionalDependencies": { + "yaml": "^2.9.0" + } + }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", + "license": "ISC" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "license": "MIT" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "license": "MIT" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "license": "MIT" + }, + "node_modules/lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "license": "MIT" + }, + "node_modules/lodash.isnil": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", + "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-exports-info": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.2.tgz", + "integrity": "sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==", + "dev": true, + "license": "MIT", + "dependencies": { + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/node-releases": { + "version": "2.0.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz", + "integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obug": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", + "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.2.tgz", + "integrity": "sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pako": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.2.0.tgz", + "integrity": "sha512-zJq6RP/5q+TO2OpFV3FHzlPnFjmkb7Nc99a5SNjJE+uu/PkpChs+NIZSSzbBoD+6kjiISXjfYdwj1ZRQ81dz/w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "(MIT AND Zlib)" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT", + "optional": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.17", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", + "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", + "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "license": "MIT", + "optional": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/react": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", + "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.8.tgz", + "integrity": "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.8" + } + }, + "node_modules/react-is": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.8.tgz", + "integrity": "sha512-s5un28nYxKJw5gvUHyW5PCC28CvBqLu9r3cWgzHT4Vo/5fqqkFcdRYsGcKf50WMPpjjFZS5d76fn3YCo2njKwQ==", + "license": "MIT", + "peer": true + }, + "node_modules/react-redux": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.3.0.tgz", + "integrity": "sha512-KQopgqFo/p/fgmAs5qz6p5RWaNAzq40WAu7fJIXnQpYxFPbJYtsJPWvGeF2rOBaY/kEuV77AVsX8TsQzKm+A/g==", + "license": "MIT", + "dependencies": { + "@types/use-sync-external-store": "^0.0.6", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "@types/react": "^18.2.25 || ^19", + "react": "^18.0 || ^19", + "redux": "^5.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/recharts": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-3.10.1.tgz", + "integrity": "sha512-QXFrvt6IVcw7eeZCoyXTwkIJAX3Dv1nyVhMicXJ47GsGDDpcN8z6o644DibE9XjpBTThtsomLKnTV6lc+cVFUA==", + "license": "MIT", + "workspaces": [ + "www" + ], + "dependencies": { + "@reduxjs/toolkit": "^1.9.0 || 2.x.x", + "clsx": "^2.1.1", + "decimal.js-light": "^2.5.1", + "es-toolkit": "^1.39.3", + "eventemitter3": "^5.0.1", + "immer": "^11.1.8", + "react-redux": "8.x.x || 9.x.x", + "reselect": "5.2.0", + "tiny-invariant": "^1.3.3", + "use-sync-external-store": "^1.2.2", + "victory-vendor": "^37.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT" + }, + "node_modules/redux-thunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", + "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", + "license": "MIT", + "peerDependencies": { + "redux": "^5.0.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT", + "optional": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reselect": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.2.0.tgz", + "integrity": "sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "2.0.0-next.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.7.tgz", + "integrity": "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.2", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", + "license": "MIT OR SEE LICENSE IN FEEL-FREE.md", + "optional": true, + "engines": { + "node": ">= 0.8.15" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rollup": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz", + "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.62.4", + "@rollup/rollup-android-arm64": "4.62.4", + "@rollup/rollup-darwin-arm64": "4.62.4", + "@rollup/rollup-darwin-x64": "4.62.4", + "@rollup/rollup-freebsd-arm64": "4.62.4", + "@rollup/rollup-freebsd-x64": "4.62.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.4", + "@rollup/rollup-linux-arm-musleabihf": "4.62.4", + "@rollup/rollup-linux-arm64-gnu": "4.62.4", + "@rollup/rollup-linux-arm64-musl": "4.62.4", + "@rollup/rollup-linux-loong64-gnu": "4.62.4", + "@rollup/rollup-linux-loong64-musl": "4.62.4", + "@rollup/rollup-linux-ppc64-gnu": "4.62.4", + "@rollup/rollup-linux-ppc64-musl": "4.62.4", + "@rollup/rollup-linux-riscv64-gnu": "4.62.4", + "@rollup/rollup-linux-riscv64-musl": "4.62.4", + "@rollup/rollup-linux-s390x-gnu": "4.62.4", + "@rollup/rollup-linux-x64-gnu": "4.62.4", + "@rollup/rollup-linux-x64-musl": "4.62.4", + "@rollup/rollup-openbsd-x64": "4.62.4", + "@rollup/rollup-openharmony-arm64": "4.62.4", + "@rollup/rollup-win32-arm64-msvc": "4.62.4", + "@rollup/rollup-win32-ia32-msvc": "4.62.4", + "@rollup/rollup-win32-x64-gnu": "4.62.4", + "@rollup/rollup-win32-x64-msvc": "4.62.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/stackblur-canvas": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", + "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.14" + } + }, + "node_modules/std-env": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz", + "integrity": "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==", + "dev": true, + "license": "MIT" + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz", + "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-object-atoms": "^1.1.2", + "has-property-descriptors": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz", + "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/synckit": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz", + "integrity": "sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.3.6" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "license": "MIT", + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz", + "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyrainbow": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.1.tgz", + "integrity": "sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "7.4.10", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.10.tgz", + "integrity": "sha512-GgouD1B+sWwvkaEq8vXC15DjQitxbvs12oIXELpconwm+Tg3zfcEv4jgzq3vtKverDXsg3VI8aRgNL2Nra0Iog==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^7.4.10" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.4.10", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.10.tgz", + "integrity": "sha512-KnQjp53ZekKgm/r3l+u8kJGGzYgrWdP8+Mql7a4vijh2WE0IrZWspQj/TpTxDho/YxO+AnOZnIjQcCD+q6iJsw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", + "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tough-cookie": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.2.tgz", + "integrity": "sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "license": "MIT/X11", + "engines": { + "node": "*" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz", + "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "for-each": "^0.3.5", + "gopd": "^1.2.0", + "is-typed-array": "^1.1.15", + "possible-typed-array-names": "^1.1.0", + "reflect.getprototypeof": "^1.0.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz", + "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unzipper": { + "version": "0.10.14", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", + "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/unzipper/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/unzipper/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz", + "integrity": "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "license": "MIT", + "dependencies": { + "base64-arraybuffer": "^1.0.2" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/victory-vendor": { + "version": "37.3.6", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.6.tgz", + "integrity": "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==", + "license": "MIT AND ISC", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/vite": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.3.tgz", + "integrity": "sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.10.tgz", + "integrity": "sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.10", + "@vitest/mocker": "4.1.10", + "@vitest/pretty-format": "4.1.10", + "@vitest/runner": "4.1.10", + "@vitest/snapshot": "4.1.10", + "@vitest/spy": "4.1.10", + "@vitest/utils": "4.1.10", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.10", + "@vitest/browser-preview": "4.1.10", + "@vitest/browser-webdriverio": "4.1.10", + "@vitest/coverage-istanbul": "4.1.10", + "@vitest/coverage-v8": "4.1.10", + "@vitest/ui": "4.1.10", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", + "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-mimetype": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", + "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-url": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.1.tgz", + "integrity": "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.11.0", + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.22", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.22.tgz", + "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zip-stream": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "license": "MIT", + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..fe951e0 --- /dev/null +++ b/package.json @@ -0,0 +1,57 @@ +{ + "name": "dashboard-new-v2", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc --noEmit && vite build", + "preview": "vite preview", + "lint": "eslint . --ext .ts,.tsx", + "lint:fix": "eslint . --ext .ts,.tsx --fix", + "format": "prettier --write \"**/*.{ts,tsx,json,md}\"", + "type-check": "tsc --noEmit", + "test": "vitest", + "test:run": "vitest run", + "prepare": "husky" + }, + "lint-staged": { + "*.{ts,tsx}": [ + "eslint --fix", + "prettier --write" + ], + "*.{json,md}": [ + "prettier --write" + ] + }, + "dependencies": { + "exceljs": "^4.4.0", + "html2canvas": "^1.4.1", + "jspdf": "^4.2.1", + "react": "^19.1.1", + "react-dom": "^19.1.1", + "recharts": "^3.1.0" + }, + "devDependencies": { + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.2", + "@types/node": "^26.2.0", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@typescript-eslint/eslint-plugin": "^8.67.0", + "@typescript-eslint/parser": "^8.67.0", + "@vitejs/plugin-react": "^5.0.0", + "eslint": "^8.57.1", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-prettier": "^5.5.6", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^7.1.1", + "husky": "^9.1.7", + "jsdom": "^29.0.2", + "lint-staged": "^17.3.0", + "prettier": "^3.9.6", + "typescript": "~5.8.2", + "vite": "^6.2.0", + "vitest": "^4.1.5" + } +} diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 0000000..286f0fd Binary files /dev/null and b/public/favicon.png differ diff --git a/scripts/analyze_iot_api.py b/scripts/analyze_iot_api.py new file mode 100644 index 0000000..a11144c --- /dev/null +++ b/scripts/analyze_iot_api.py @@ -0,0 +1,109 @@ +"""Analyze dashboard.cpsp.id IoT flocks API for date/day mapping.""" +import json +import urllib.request +from collections import Counter, defaultdict +from datetime import datetime, timedelta, timezone + +BASE = "https://dashboard.cpsp.id/api/iot/flocks/" +CYCLE_START = datetime(2026, 5, 22).date() +CYCLE_END = datetime(2026, 7, 9).date() +TZ = timezone(timedelta(hours=7)) + + +def parse_dt(value: str) -> datetime: + return datetime.fromisoformat(value.replace("Z", "+00:00")) + + +def fetch_page(page: int) -> dict: + url = f"{BASE}?page={page}" + with urllib.request.urlopen(url, timeout=60) as resp: + return json.loads(resp.read()) + + +def main() -> None: + meta = fetch_page(1) + total = meta["count"] + page_size = len(meta["results"]) + last_page = (total + page_size - 1) // page_size + print(f"total={total} page_size={page_size} last_page={last_page}") + + sample_pages = [1, 2, 3, last_page, last_page - 1] + records = [] + for page in sample_pages: + data = fetch_page(page) + records.extend(data["results"]) + print(f" fetched page {page}: {len(data['results'])} rows") + + flock_ids = Counter(r["flock_id"] for r in records) + print(f"unique flock_ids in sample: {dict(flock_ids)}") + + r0 = records[0]["payload"]["data"] + coop = r0.get("coop") or {} + print(f"coop kode={coop.get('kode')} name floor={r0.get('name')} kandang={r0.get('kandang')}") + + by_day = defaultdict(list) + by_fetch_date = defaultdict(list) + for r in records: + d = r["payload"]["data"] + day = d.get("day") + if day is not None: + by_day[day].append(r) + fetched = r.get("fetched_at") or d.get("lastUpdate") + if fetched: + cal = parse_dt(fetched).astimezone(TZ).date() + by_fetch_date[cal].append(r) + + print(f"day range: {min(by_day)}..{max(by_day)} ({len(by_day)} unique)") + print(f"fetched_at date range: {min(by_fetch_date)}..{max(by_fetch_date)} ({len(by_fetch_date)} unique)") + + print("\nSample day -> metrics (first record per day):") + for day in sorted(by_day): + if day not in (1, 2, 3, 34, 35, 36, 48, 49): + continue + d = by_day[day][0]["payload"]["data"] + fetched = by_day[day][0].get("fetched_at", "")[:19] + cal = CYCLE_START + timedelta(days=day - 1) + print( + f" day {day:2d} (cycle cal {cal}) fetched={fetched} " + f"wind={d.get('wind')} hum={d.get('humidity')} temp={d.get('actualTemperature')} " + f"water={d.get('water')} HSI={d.get('HSI')}" + ) + + # Full scan for one flock: aggregate one row per cycle day using `day` field + print("\nScanning all pages for daily rollup by `day` (last snapshot per day)...") + daily: dict[int, dict] = {} + for page in range(1, last_page + 1): + for r in fetch_page(page)["results"]: + d = r["payload"]["data"] + day = d.get("day") + if day is None: + continue + fetched = r.get("fetched_at") + if not fetched: + continue + ts = parse_dt(fetched) + prev = daily.get(day) + if prev is None or ts > prev["ts"]: + daily[day] = {"ts": ts, "r": r} + + print(f"Collected {len(daily)} unique cycle days from full API") + missing = [d for d in range(1, 50) if d not in daily] + print(f"Missing days 1..49: {missing}") + + print("\nFull cycle rollup (mapped to calendar via start 2026-05-22):") + print(f"{'day':>3} {'date':>10} {'wind':>6} {'humidity':>8} {'avg_temp':>8} {'water':>8} {'HSI':>8}") + for day in range(1, 50): + entry = daily.get(day) + cal = CYCLE_START + timedelta(days=day - 1) + if not entry: + print(f"{day:3d} {cal} — missing —") + continue + d = entry["r"]["payload"]["data"] + print( + f"{day:3d} {cal} {d.get('wind', 0):6} {d.get('humidity', 0):8} " + f"{d.get('actualTemperature', 0):8} {d.get('water', 0):8} {d.get('HSI', 0):8.2f}" + ) + + +if __name__ == "__main__": + main() diff --git a/scripts/analyze_iot_api_fast.py b/scripts/analyze_iot_api_fast.py new file mode 100644 index 0000000..dd43226 --- /dev/null +++ b/scripts/analyze_iot_api_fast.py @@ -0,0 +1,111 @@ +"""Fast sample scan of IoT flocks API — day/date mapping without full pagination.""" +import json +import urllib.request +from collections import defaultdict +from datetime import datetime, timedelta, timezone + +BASE = "https://dashboard.cpsp.id/api/iot/flocks/" +CYCLE_START = datetime(2026, 5, 22).date() +TZ = timezone(timedelta(hours=7)) + + +def parse_dt(value: str) -> datetime: + return datetime.fromisoformat(value.replace("Z", "+00:00")) + + +def fetch_page(page: int) -> dict: + with urllib.request.urlopen(f"{BASE}?page={page}", timeout=60) as resp: + return json.loads(resp.read()) + + +def summarize_records(records: list) -> None: + by_day: dict[int, list] = defaultdict(list) + for r in records: + day = r["payload"]["data"].get("day") + if day is not None: + by_day[day].append(r) + + print(f" unique days: {len(by_day)} range {min(by_day)}..{max(by_day)}") + for day in sorted(by_day)[:3]: + r = max(by_day[day], key=lambda x: parse_dt(x["fetched_at"])) + d = r["payload"]["data"] + cal = CYCLE_START + timedelta(days=day - 1) + print( + f" day {day} -> {cal} | wind={d.get('wind')} hum={d.get('humidity')} " + f"temp={d.get('actualTemperature')} water={d.get('water')} HSI={d.get('HSI')}" + ) + if len(by_day) > 6: + print(" ...") + for day in sorted(by_day)[-3:]: + r = max(by_day[day], key=lambda x: parse_dt(x["fetched_at"])) + d = r["payload"]["data"] + cal = CYCLE_START + timedelta(days=day - 1) + print( + f" day {day} -> {cal} | wind={d.get('wind')} hum={d.get('humidity')} " + f"temp={d.get('actualTemperature')} water={d.get('water')} HSI={d.get('HSI')}" + ) + + +def main() -> None: + p1 = fetch_page(1) + total = p1["count"] + page_size = len(p1["results"]) + last_page = (total + page_size - 1) // page_size + print(f"API total={total} page_size={page_size} pages={last_page}") + + r0 = p1["results"][0] + d0 = r0["payload"]["data"] + coop = d0.get("coop") or {} + print(f"flock_id={r0['flock_id']} floor={d0.get('name')} site={coop.get('kode')}") + print(f"kandang field (Mongo id)={d0.get('kandang')}") + + # Sample: first pages (newest), last pages (oldest), and mid pages + sample_pages = sorted({1, 2, 3, 10, 50, 100, 200, 400, 600, last_page, last_page - 1, last_page - 2}) + all_records = [] + for page in sample_pages: + if page < 1 or page > last_page: + continue + data = fetch_page(page) + all_records.extend(data["results"]) + days = {r["payload"]["data"].get("day") for r in data["results"]} + fdates = {parse_dt(r["fetched_at"]).astimezone(TZ).date() for r in data["results"]} + print(f"page {page:4d}: days={min(days)}..{max(days)} fetched_dates={min(fdates)}..{max(fdates)}") + + # Roll up sampled data: latest fetched_at per cycle day + daily: dict[int, dict] = {} + for r in all_records: + day = r["payload"]["data"].get("day") + if day is None: + continue + ts = parse_dt(r["fetched_at"]) + if day not in daily or ts > daily[day]["ts"]: + daily[day] = {"ts": ts, "r": r} + + print(f"\nFrom sample: {len(daily)} unique cycle days seen") + missing = [d for d in range(1, 50) if d not in daily] + print(f"Missing in sample (1..49): {missing}") + + print("\nField mapping -> iot_panel (exclude experience_temperature):") + print(" date = cycle_start + (day - 1) # 2026-05-22 + day-1") + print(" wind_speed = payload.data.wind") + print(" humidity = payload.data.humidity # likely /10 for %") + print(" water_total = payload.data.water") + print(" average_temperature = payload.data.actualTemperature # likely /10 for °C") + print(" experience_temperature = formula (HSI? TBD)") + + print("\nSample rollup table:") + print(f"{'day':>3} {'date':>10} {'wind':>5} {'hum':>6} {'temp_raw':>8} {'water':>6} {'HSI':>7}") + for day in range(1, 50): + cal = CYCLE_START + timedelta(days=day - 1) + entry = daily.get(day) + if not entry: + continue + d = entry["r"]["payload"]["data"] + print( + f"{day:3d} {cal} {d.get('wind', 0):5} {d.get('humidity', 0):6} " + f"{d.get('actualTemperature', 0):8} {d.get('water', 0):6} {d.get('HSI', 0):7.2f}" + ) + + +if __name__ == "__main__": + main() diff --git a/scripts/experience_temperature.py b/scripts/experience_temperature.py new file mode 100644 index 0000000..62b3604 --- /dev/null +++ b/scripts/experience_temperature.py @@ -0,0 +1,175 @@ +"""Experience temperature for iot_panel (not HSI). + +Experience suhu = average_temperature - chill_effect +chill_effect = (wind_speed * chill_factor) - rh_adjustment +rh_adjustment = (humidity_pct - 70) / 5 +wind_speed = sensor wind in m/s (payload.data.wind / 10 when stored in tenths) + +Chill factor is linearly interpolated from bird age (days). +""" + +from __future__ import annotations + +CHILL_FACTOR_POINTS = ( + (0, 8.0), + (1, 8.0), + (7, 7.0), + (14, 6.0), + (21, 4.5), + (28, 3.5), + (35, 3.5), + (42, 3.0), +) + + +def sensor_celsius(sensor: dict | float | int | None) -> float | None: + if sensor is None: + return None + if isinstance(sensor, (int, float)): + return float(sensor) + raw = sensor.get("value") + if raw is None: + return None + cal = float(sensor.get("calibration") or 0) + return (float(raw) + cal) / 10.0 + + +def sensor_humidity_pct(sensor: dict | float | int | None, fallback: float | None) -> float: + if isinstance(sensor, dict): + raw = sensor.get("value") + if raw is not None: + cal = float(sensor.get("calibration") or 0) + return (float(raw) + cal) / 10.0 + if isinstance(sensor, (int, float)): + return float(sensor) + if fallback is None: + return 70.0 + value = float(fallback) + return value / 10.0 if value > 100 else value + + +def wind_ms(payload_wind: float | int | None, sensors_wind: dict | float | int | None) -> float: + """Use measured wind directly (not kipas aktif × 0.35).""" + if isinstance(sensors_wind, dict) and sensors_wind.get("value") is not None: + return float(sensors_wind["value"]) / 10.0 + if isinstance(sensors_wind, (int, float)): + return float(sensors_wind) + if payload_wind is None: + return 0.0 + return float(payload_wind) / 10.0 + + +def average_inside_temp_c(sensors: dict | None, actual_temperature: float | int | None) -> float: + if sensors: + readings = [ + v + for v in ( + sensor_celsius(sensors.get("temperature1")), + sensor_celsius(sensors.get("temperature2")), + sensor_celsius(sensors.get("temperature3")), + ) + if v is not None + ] + if readings: + return sum(readings) / len(readings) + if actual_temperature is None: + return 0.0 + value = float(actual_temperature) + return value / 10.0 if value > 100 else value + + +def chicken_chill_factor(age: float) -> float: + if age <= CHILL_FACTOR_POINTS[0][0]: + return CHILL_FACTOR_POINTS[0][1] + for idx in range(1, len(CHILL_FACTOR_POINTS)): + prev_age, prev_factor = CHILL_FACTOR_POINTS[idx - 1] + next_age, next_factor = CHILL_FACTOR_POINTS[idx] + if age > next_age: + continue + span = next_age - prev_age + if span <= 0: + return next_factor + progress = (age - prev_age) / span + return prev_factor + (next_factor - prev_factor) * progress + return CHILL_FACTOR_POINTS[-1][1] + + +def experience_temperature( + *, + average_temperature: float, + wind_speed: float, + humidity_pct: float, + age_days: float, +) -> float: + chill_factor = chicken_chill_factor(age_days) + rh_adjustment = (humidity_pct - 70.0) / 5.0 + chill_effect = wind_speed * chill_factor - rh_adjustment + return average_temperature - chill_effect + + +def panel_fields_from_payload(data: dict, age_days: int) -> dict: + sensors = data.get("sensors") or {} + humidity = sensor_humidity_pct(sensors.get("humidity"), data.get("humidity")) + wind_speed = wind_ms(data.get("wind"), sensors.get("wind")) + avg_temp = average_inside_temp_c(sensors, data.get("actualTemperature")) + water = data.get("water") + if water is None and isinstance(sensors.get("water"), dict): + water = sensors["water"].get("value") + return { + "wind_speed": round(wind_speed, 4), + "humidity": round(humidity, 4), + "water_total": float(water or 0), + "average_temperature": round(avg_temp, 4), + "experience_temperature": round( + experience_temperature( + average_temperature=avg_temp, + wind_speed=wind_speed, + humidity_pct=humidity, + age_days=age_days, + ), + 4, + ), + "chill_factor": round(chicken_chill_factor(age_days), 4), + } + + +# Lantai 2 has no device in the public flocks API. Use a sibling ObjectId +# (same 24-hex shape as Lantai 1) and clone panel rows with a small floor offset. +LANTAI_1_IOT_FLOCK_ID = "686df69f407b21002da8750c" +LANTAI_2_IOT_FLOCK_ID = "686df69f407b21002da8750d" + +LANTAI_2_ADJUST = { + "wind_speed_delta": -0.05, + "humidity_delta": 1.2, + "average_temperature_delta": -0.3, + "water_total_factor": 0.96, +} + + +def clone_lantai2_panel_row(row: dict) -> dict: + """Copy a Lantai 1 daily panel row onto Lantai 2, then recompute experience suhu.""" + age = int(row["age"]) + wind = max(0.0, float(row["wind_speed"]) + LANTAI_2_ADJUST["wind_speed_delta"]) + humidity = min(100.0, max(0.0, float(row["humidity"]) + LANTAI_2_ADJUST["humidity_delta"])) + avg_temp = float(row["average_temperature"]) + LANTAI_2_ADJUST["average_temperature_delta"] + water = max(0.0, float(row["water_total"]) * LANTAI_2_ADJUST["water_total_factor"]) + cloned = { + "date": row["date"], + "age": age, + "wind_speed": round(wind, 4), + "humidity": round(humidity, 4), + "water_total": round(water, 1), + "average_temperature": round(avg_temp, 4), + "experience_temperature": round( + experience_temperature( + average_temperature=avg_temp, + wind_speed=wind, + humidity_pct=humidity, + age_days=age, + ), + 4, + ), + "chill_factor": round(chicken_chill_factor(age), 4), + "cycle_day": row.get("cycle_day"), + } + return cloned diff --git a/scripts/extract_iot_10min.py b/scripts/extract_iot_10min.py new file mode 100644 index 0000000..396662b --- /dev/null +++ b/scripts/extract_iot_10min.py @@ -0,0 +1,97 @@ +"""Extract real 10-minute IoT snapshots for the Sukawarna Kandang 5 cycle window. + +The public IoT API (dashboard.cpsp.id/api/iot/flocks/) polls the coop every 10 +minutes, so a full cycle day holds up to 144 rows. This script scans the API's +history for flock 686df69f407b21002da8750c (Kandang 5 Lantai 1) inside the +seeded cycle window 2026-05-22 .. 2026-07-09 and writes every snapshot to +``iot_panel_10min_extract.json``. The Django seed command reads this cache so +Kandang 5 Lantai 1 is seeded from real sensor readings; the other floors and +Kandang 4 are generated from it. +""" +import json +import sys +import urllib.request +from datetime import datetime, timedelta, timezone +from pathlib import Path + +SCRIPT_DIR = Path(__file__).resolve().parent +sys.path.insert(0, str(SCRIPT_DIR)) +from experience_temperature import LANTAI_1_IOT_FLOCK_ID, panel_fields_from_payload + +BASE = "https://dashboard.cpsp.id/api/iot/flocks/" +FLOCK_ID = LANTAI_1_IOT_FLOCK_ID +CYCLE_START = datetime(2026, 5, 22).date() +CYCLE_END = datetime(2026, 7, 9).date() +TZ = timezone(timedelta(hours=7)) +OUT = SCRIPT_DIR / "iot_panel_10min_extract.json" + + +def parse_dt(value: str) -> datetime: + return datetime.fromisoformat(value.replace("Z", "+00:00")) + + +def fetch_page(page: int) -> dict: + with urllib.request.urlopen(f"{BASE}?page={page}", timeout=60) as resp: + return json.loads(resp.read()) + + +def main() -> None: + p1 = fetch_page(1) + last_page = (p1["count"] + len(p1["results"]) - 1) // len(p1["results"]) + hi = min(last_page, 320) + print(f"Scanning pages 1..{hi} (of {last_page}) for flock {FLOCK_ID}", flush=True) + + # key: (date, slot_index) -> mapped row (keep the latest snapshot per 10-min slot) + rows_by_slot: dict[tuple[str, int], dict] = {} + in_window = 0 + for page in range(1, hi + 1): + for r in fetch_page(page)["results"]: + if r["flock_id"] != FLOCK_ID: + continue + fetched = r.get("fetched_at") + if not fetched: + continue + ts = parse_dt(fetched).astimezone(TZ) + cal = ts.date() + if not (CYCLE_START <= cal <= CYCLE_END): + continue + in_window += 1 + d = r["payload"]["data"] + age = (cal - CYCLE_START).days + 1 + fields = panel_fields_from_payload(d, age) + slot = (ts.hour * 60 + ts.minute) // 10 + key = (str(cal), slot) + rows_by_slot[key] = { + "timestamp": ts.isoformat(), + "date": str(cal), + "age": age, + **fields, + } + if page % 50 == 0: + print(f" page {page}/{hi} — in-window so far: {in_window}", flush=True) + + rows = [rows_by_slot[k] for k in sorted(rows_by_slot, key=lambda k: (k[0], k[1]))] + + out = { + "flock_id": FLOCK_ID, + "cycle_start": str(CYCLE_START), + "cycle_end": str(CYCLE_END), + "count": len(rows), + "rows": rows, + } + OUT.write_text(json.dumps(out, indent=2), encoding="utf-8") + + per_date: dict[str, int] = {} + for row in rows: + per_date[row["date"]] = per_date.get(row["date"], 0) + 1 + print(f"\nSnapshots in window: {in_window}; unique slots written: {len(rows)}") + print(f"Unique dates: {len(per_date)} (expect 49)") + counts = sorted(set(per_date.values())) + print(f"Rows-per-date distribution: {counts}") + low = [d for d, c in per_date.items() if c < 144] + print(f"Dates with fewer than 144 rows ({len(low)}): {low[:20]}") + print(f"Wrote {OUT}") + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/scripts/extract_iot_cycle.py b/scripts/extract_iot_cycle.py new file mode 100644 index 0000000..252bc11 --- /dev/null +++ b/scripts/extract_iot_cycle.py @@ -0,0 +1,137 @@ +"""Extract IoT panel rows for Sukawarna cycle 2026-05-22 .. 2026-07-09.""" +import json +import urllib.request +from collections import defaultdict +from datetime import datetime, timedelta, timezone + +BASE = "https://dashboard.cpsp.id/api/iot/flocks/" +FLOCK_ID = "686df69f407b21002da8750c" +CYCLE_START = datetime(2026, 5, 22).date() +CYCLE_END = datetime(2026, 7, 9).date() +TZ = timezone(timedelta(hours=7)) + + +def parse_dt(value: str) -> datetime: + return datetime.fromisoformat(value.replace("Z", "+00:00")) + + +def fetch_page(page: int) -> dict: + with urllib.request.urlopen(f"{BASE}?page={page}", timeout=60) as resp: + return json.loads(resp.read()) + + +def to_panel_fields(d: dict) -> dict: + """Map API payload.data -> iot_panel columns (no experience_temperature).""" + hum = d.get("humidity") or 0 + temp = d.get("actualTemperature") or 0 + return { + "wind_speed": float(d.get("wind") or 0), + "humidity": float(hum / 10 if hum > 100 else hum), + "water_total": float(d.get("water") or 0), + "average_temperature": float(temp / 10 if temp > 100 else temp), + "hsi": float(d.get("HSI") or 0), + "cycle_day": int(d.get("day") or 0), + } + + +def main() -> None: + p1 = fetch_page(1) + total = p1["count"] + page_size = len(p1["results"]) + last_page = (total + page_size - 1) // page_size + print(f"Scanning {last_page} pages for flock {FLOCK_ID}") + print(f"Cycle window: {CYCLE_START} .. {CYCLE_END}\n") + + # Strategy 1: filter by fetched_at calendar date in cycle window, pick latest per date + by_calendar: dict = {} + # Strategy 2: filter by cycle day 1..49 where fetched_at in window, pick latest per day + by_cycle_day: dict = defaultdict(list) + + in_window_count = 0 + for page in range(1, last_page + 1): + for r in fetch_page(page)["results"]: + if r["flock_id"] != FLOCK_ID: + continue + fetched = r.get("fetched_at") + if not fetched: + continue + cal = parse_dt(fetched).astimezone(TZ).date() + if not (CYCLE_START <= cal <= CYCLE_END): + continue + in_window_count += 1 + ts = parse_dt(fetched) + d = r["payload"]["data"] + day = d.get("day") + + prev = by_calendar.get(cal) + if prev is None or ts > prev["ts"]: + by_calendar[cal] = {"ts": ts, "r": r, "fields": to_panel_fields(d)} + + if day is not None: + by_cycle_day[day].append((ts, r, d)) + + if page % 100 == 0: + print(f" page {page}/{last_page} — in-window so far: {in_window_count}, dates: {len(by_calendar)}") + + print(f"\nTotal snapshots in cycle window: {in_window_count}") + print(f"Unique calendar dates in window: {len(by_calendar)} (expect 49)") + + missing_dates = [] + d = CYCLE_START + while d <= CYCLE_END: + if d not in by_calendar: + missing_dates.append(d) + d += timedelta(days=1) + print(f"Missing calendar dates: {len(missing_dates)}") + if missing_dates: + print(f" first few: {missing_dates[:10]}") + print(f" last few: {missing_dates[-10:]}") + + # Per cycle day within window (latest snapshot) + day_roll: dict[int, dict] = {} + for day, items in by_cycle_day.items(): + ts, r, d = max(items, key=lambda x: x[0]) + day_roll[day] = {"ts": ts, "fields": to_panel_fields(d), "cal": parse_dt(r["fetched_at"]).astimezone(TZ).date()} + + print(f"\nUnique cycle `day` values in window: {sorted(day_roll)}") + missing_days = [i for i in range(1, 50) if i not in day_roll] + print(f"Missing cycle days 1..49 in window: {missing_days}") + + print("\n--- Daily rows for seed (by calendar date, latest snapshot) ---") + print(f"{'date':>10} {'age':>3} {'wind':>5} {'hum%':>6} {'temp°C':>7} {'water':>8} {'HSI':>7}") + d = CYCLE_START + while d <= CYCLE_END: + entry = by_calendar.get(d) + if entry: + f = entry["fields"] + print( + f"{d} {f['cycle_day']:3d} {f['wind_speed']:5.0f} {f['humidity']:6.1f} " + f"{f['average_temperature']:7.1f} {f['water_total']:8.0f} {f['hsi']:7.2f}" + ) + else: + age = (d - CYCLE_START).days + 1 + print(f"{d} {age:3d} — no API data —") + d += timedelta(days=1) + + out = Path(__file__).resolve().parent / "iot_panel_cycle_extract.json" + payload = { + "flock_id": FLOCK_ID, + "cycle_start": str(CYCLE_START), + "cycle_end": str(CYCLE_END), + "rows": [ + { + "date": str(cal), + "age": (cal - CYCLE_START).days + 1, + **by_calendar[cal]["fields"], + } + for cal in sorted(by_calendar) + ], + } + out.write_text(json.dumps(payload, indent=2), encoding="utf-8") + print(f"\nWrote {len(payload['rows'])} rows to {out}") + + +from pathlib import Path + +if __name__ == "__main__": + main() diff --git a/scripts/extract_iot_cycle_fast.py b/scripts/extract_iot_cycle_fast.py new file mode 100644 index 0000000..00b1638 --- /dev/null +++ b/scripts/extract_iot_cycle_fast.py @@ -0,0 +1,139 @@ +"""Extract IoT rows for cycle window — scan only pages likely in date range.""" +import json +import urllib.request +from datetime import datetime, timedelta, timezone +from pathlib import Path + +SCRIPT_DIR = Path(__file__).resolve().parent +import sys + +sys.path.insert(0, str(SCRIPT_DIR)) +from experience_temperature import ( + LANTAI_1_IOT_FLOCK_ID, + LANTAI_2_IOT_FLOCK_ID, + LANTAI_2_ADJUST, + clone_lantai2_panel_row, + panel_fields_from_payload, +) + +BASE = "https://dashboard.cpsp.id/api/iot/flocks/" +FLOCK_ID = LANTAI_1_IOT_FLOCK_ID +CYCLE_START = datetime(2026, 5, 22).date() +CYCLE_END = datetime(2026, 7, 9).date() +TZ = timezone(timedelta(hours=7)) + + +def parse_dt(value: str) -> datetime: + return datetime.fromisoformat(value.replace("Z", "+00:00")) + + +def fetch_page(page: int) -> dict: + with urllib.request.urlopen(f"{BASE}?page={page}", timeout=60) as resp: + return json.loads(resp.read()) + + +def to_panel_fields(d: dict, age_days: int) -> dict: + fields = panel_fields_from_payload(d, age_days) + fields["cycle_day"] = int(d.get("day") or 0) + return fields + + +def main() -> None: + p1 = fetch_page(1) + last_page = (p1["count"] + len(p1["results"]) - 1) // len(p1["results"]) + + # Find page range: newest pages first until before cycle start + lo, hi = 1, min(last_page, 300) + print(f"Scanning pages 1..{hi} (of {last_page})") + + by_calendar: dict = {} + in_window = 0 + for page in range(1, hi + 1): + for r in fetch_page(page)["results"]: + if r["flock_id"] != FLOCK_ID: + continue + fetched = r.get("fetched_at") + if not fetched: + continue + cal = parse_dt(fetched).astimezone(TZ).date() + if not (CYCLE_START <= cal <= CYCLE_END): + continue + in_window += 1 + ts = parse_dt(fetched) + d = r["payload"]["data"] + age = (cal - CYCLE_START).days + 1 + prev = by_calendar.get(cal) + if prev is None or ts > prev["ts"]: + by_calendar[cal] = {"ts": ts, "fields": to_panel_fields(d, age)} + + missing = [] + d = CYCLE_START + while d <= CYCLE_END: + if d not in by_calendar: + missing.append(d) + d += timedelta(days=1) + + print(f"snapshots in window: {in_window}") + print(f"unique dates: {len(by_calendar)}/49, missing: {len(missing)}") + if missing: + print(f"missing: {[str(x) for x in missing]}") + + print( + f"\n{'date':>10} {'age':>3} {'wind':>6} {'hum%':>6} {'avgT':>6} {'expT':>6} {'water':>8}" + ) + d = CYCLE_START + while d <= CYCLE_END: + e = by_calendar.get(d) + age = (d - CYCLE_START).days + 1 + if e: + f = e["fields"] + print( + f"{d} {age:3d} {f['wind_speed']:6.2f} {f['humidity']:6.1f} " + f"{f['average_temperature']:6.1f} {f['experience_temperature']:6.1f} " + f"{f['water_total']:8.0f}" + ) + else: + print(f"{d} {age:3d} — missing —") + d += timedelta(days=1) + + lantai1_rows = [ + {"date": str(c), "age": (c - CYCLE_START).days + 1, **by_calendar[c]["fields"]} + for c in sorted(by_calendar) + ] + lantai2_rows = [clone_lantai2_panel_row(row) for row in lantai1_rows] + + out = Path(__file__).resolve().parent / "iot_panel_cycle_extract.json" + out.write_text( + json.dumps( + { + "cycle_start": str(CYCLE_START), + "cycle_end": str(CYCLE_END), + "experience_temperature": ( + "avg_temp - (wind_speed * chill_factor - (humidity-70)/5); " + "wind_speed is sensor m/s not fan count" + ), + "flocks": [ + { + "name": "Lantai 1", + "iot_flock_id": LANTAI_1_IOT_FLOCK_ID, + "source": "api", + "rows": lantai1_rows, + }, + { + "name": "Lantai 2", + "iot_flock_id": LANTAI_2_IOT_FLOCK_ID, + "source": "cloned_from_lantai_1", + "adjust": LANTAI_2_ADJUST, + "rows": lantai2_rows, + }, + ], + }, + indent=2, + ), + encoding="utf-8", + ) + print(f"\nWrote {out} ({len(lantai1_rows)} Lantai 1 + {len(lantai2_rows)} Lantai 2)") + + +if __name__ == "__main__": + main() diff --git a/scripts/iot_panel_10min_extract.json b/scripts/iot_panel_10min_extract.json new file mode 100644 index 0000000..6d9792a --- /dev/null +++ b/scripts/iot_panel_10min_extract.json @@ -0,0 +1,74984 @@ +{ + "flock_id": "686df69f407b21002da8750c", + "cycle_start": "2026-05-22", + "cycle_end": "2026-07-09", + "count": 6816, + "rows": [ + { + "timestamp": "2026-05-22T00:00:07.656071+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1029.0, + "average_temperature": 28.4667, + "experience_temperature": 14.4667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T00:10:05.968597+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1043.0, + "average_temperature": 28.4333, + "experience_temperature": 14.4333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T00:20:06.331712+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1057.0, + "average_temperature": 28.3667, + "experience_temperature": 14.3667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T00:30:06.004120+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1070.0, + "average_temperature": 28.4, + "experience_temperature": 14.4, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T00:40:06.490314+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1083.0, + "average_temperature": 28.3667, + "experience_temperature": 14.3667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T00:50:06.254177+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1096.0, + "average_temperature": 28.3333, + "experience_temperature": 14.3333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T01:10:06.837505+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 28.2, + "experience_temperature": 14.2, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T01:20:06.702101+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 28.1333, + "experience_temperature": 14.1333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T01:30:06.168151+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 28.0667, + "experience_temperature": 14.0667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T01:40:06.640352+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 28.0333, + "experience_temperature": 14.0333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T01:50:06.681058+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 27.9333, + "experience_temperature": 13.9333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T02:00:06.527370+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 27.8667, + "experience_temperature": 13.8667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T02:10:07.514360+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 27.7667, + "experience_temperature": 13.7667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T02:20:05.761239+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 27.7, + "experience_temperature": 13.7, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T02:30:06.310750+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 27.6667, + "experience_temperature": 13.6667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T02:40:05.850716+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 27.6, + "experience_temperature": 13.6, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T02:50:06.112378+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 27.5333, + "experience_temperature": 13.5333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T03:00:06.138251+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 27.4667, + "experience_temperature": 13.4667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T03:10:05.546675+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 27.4, + "experience_temperature": 13.4, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T03:20:05.706039+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 27.4, + "experience_temperature": 13.4, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T03:30:05.686939+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 27.3333, + "experience_temperature": 13.3333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T03:40:05.995274+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 27.8333, + "experience_temperature": 13.8333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T03:50:06.035349+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 35.0667, + "experience_temperature": 21.0667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T04:00:05.811899+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 37.3667, + "experience_temperature": 23.3667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T04:10:05.877025+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 38.7, + "experience_temperature": 24.7, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T04:20:07.100102+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 38.6333, + "experience_temperature": 24.6333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T04:30:06.068515+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 38.8, + "experience_temperature": 24.8, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T04:40:06.530616+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 38.7, + "experience_temperature": 24.7, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T04:50:06.191342+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 38.7667, + "experience_temperature": 24.7667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T05:00:05.974367+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 38.7333, + "experience_temperature": 24.7333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T05:10:05.986198+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 38.8, + "experience_temperature": 24.8, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T05:20:06.280011+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 38.5667, + "experience_temperature": 24.5667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T05:30:06.661933+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 36.9667, + "experience_temperature": 22.9667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T05:40:05.804036+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 34.9667, + "experience_temperature": 20.9667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T05:50:06.672522+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 34.2667, + "experience_temperature": 20.2667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T06:00:06.095393+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 35.0667, + "experience_temperature": 21.0667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T06:10:06.725648+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 35.5333, + "experience_temperature": 21.5333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T06:20:06.287520+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 34.7667, + "experience_temperature": 20.7667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T06:30:06.775226+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 33.6333, + "experience_temperature": 19.6333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T06:40:05.787942+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 39.7333, + "experience_temperature": 25.7333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T06:50:05.940310+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 39.2667, + "experience_temperature": 25.2667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T07:00:06.714269+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 39.0333, + "experience_temperature": 25.0333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T07:10:06.246300+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 39.2667, + "experience_temperature": 25.2667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T07:20:07.935371+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 39.4, + "experience_temperature": 25.4, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T07:30:06.000830+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 39.4333, + "experience_temperature": 25.4333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T07:40:06.173860+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 41.0, + "experience_temperature": 27.0, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T07:50:06.552044+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 44.4333, + "experience_temperature": 30.4333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T08:00:07.131575+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1104.0, + "average_temperature": 44.4333, + "experience_temperature": 30.4333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T08:10:07.068573+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1132.0, + "average_temperature": 35.9667, + "experience_temperature": 21.9667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T08:20:06.376641+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1132.0, + "average_temperature": 36.1333, + "experience_temperature": 22.1333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T08:30:06.386161+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1132.0, + "average_temperature": 35.7, + "experience_temperature": 21.7, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T08:40:07.647274+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1132.0, + "average_temperature": 35.7, + "experience_temperature": 21.7, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T08:50:06.190591+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1132.0, + "average_temperature": 35.4333, + "experience_temperature": 21.4333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T09:00:07.911503+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1132.0, + "average_temperature": 35.4, + "experience_temperature": 21.4, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T09:10:07.857045+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1132.0, + "average_temperature": 35.6333, + "experience_temperature": 21.6333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T09:20:06.568111+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1132.0, + "average_temperature": 35.7333, + "experience_temperature": 21.7533, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T09:30:06.521070+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1132.0, + "average_temperature": 35.8667, + "experience_temperature": 21.8667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T09:40:06.506760+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1132.0, + "average_temperature": 36.3, + "experience_temperature": 22.32, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T09:50:06.757909+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1132.0, + "average_temperature": 36.3333, + "experience_temperature": 22.3333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T10:00:06.819607+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1132.0, + "average_temperature": 36.6, + "experience_temperature": 22.6, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T10:10:06.309495+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1141.0, + "average_temperature": 36.5, + "experience_temperature": 22.52, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T10:20:06.429408+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1152.0, + "average_temperature": 36.5, + "experience_temperature": 22.52, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T10:30:06.063531+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1161.0, + "average_temperature": 36.7333, + "experience_temperature": 22.7533, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T10:40:06.558742+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1170.0, + "average_temperature": 36.6667, + "experience_temperature": 22.6867, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T10:50:07.024396+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1177.0, + "average_temperature": 36.9, + "experience_temperature": 22.92, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T11:00:06.882698+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1185.0, + "average_temperature": 37.3667, + "experience_temperature": 23.3667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T11:10:07.042715+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1194.0, + "average_temperature": 36.7667, + "experience_temperature": 22.7867, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T11:20:06.540428+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1203.0, + "average_temperature": 37.4333, + "experience_temperature": 23.4533, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T11:30:06.720800+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1207.0, + "average_temperature": 36.6, + "experience_temperature": 22.6, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T11:40:06.721004+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1216.0, + "average_temperature": 37.4667, + "experience_temperature": 23.4667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T11:50:06.804273+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1225.0, + "average_temperature": 36.8333, + "experience_temperature": 22.8333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T12:00:06.227026+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1230.0, + "average_temperature": 36.6333, + "experience_temperature": 22.6533, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T12:10:05.904401+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1239.0, + "average_temperature": 36.4667, + "experience_temperature": 22.4667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T12:20:07.400804+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1246.0, + "average_temperature": 36.8667, + "experience_temperature": 22.8667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T12:30:08.072515+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1249.0, + "average_temperature": 36.4333, + "experience_temperature": 22.4333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T12:40:07.977172+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1257.0, + "average_temperature": 36.5333, + "experience_temperature": 22.5333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T12:50:07.747096+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1260.0, + "average_temperature": 36.6667, + "experience_temperature": 22.6667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T13:00:06.907055+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1270.0, + "average_temperature": 36.5333, + "experience_temperature": 22.5533, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T13:10:06.771691+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1273.0, + "average_temperature": 36.5667, + "experience_temperature": 22.5867, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T13:20:06.500594+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1282.0, + "average_temperature": 36.6, + "experience_temperature": 22.6, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T13:30:07.104260+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1285.0, + "average_temperature": 36.3333, + "experience_temperature": 22.3533, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T13:40:06.407783+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1287.0, + "average_temperature": 36.4333, + "experience_temperature": 22.4333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T13:50:19.327818+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1287.0, + "average_temperature": 36.4333, + "experience_temperature": 22.4333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T14:10:08.617137+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1308.0, + "average_temperature": 36.5667, + "experience_temperature": 22.5867, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T14:20:06.857193+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1312.0, + "average_temperature": 36.5, + "experience_temperature": 22.52, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T14:30:06.980610+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1319.0, + "average_temperature": 36.7, + "experience_temperature": 22.7, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T14:40:06.699624+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1325.0, + "average_temperature": 36.7, + "experience_temperature": 22.7, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T14:50:06.916692+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1329.0, + "average_temperature": 36.7, + "experience_temperature": 22.72, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T15:10:06.779186+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1337.0, + "average_temperature": 36.3333, + "experience_temperature": 22.3533, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T15:20:09.142813+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1342.0, + "average_temperature": 36.0667, + "experience_temperature": 22.0867, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T15:30:07.938481+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1347.0, + "average_temperature": 36.0, + "experience_temperature": 22.02, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T15:40:09.304576+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1355.0, + "average_temperature": 36.1333, + "experience_temperature": 22.1533, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T15:50:07.592315+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1358.0, + "average_temperature": 36.1333, + "experience_temperature": 22.1333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T16:10:07.009790+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1366.0, + "average_temperature": 35.7333, + "experience_temperature": 21.7333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T16:20:06.628412+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1368.0, + "average_temperature": 35.6667, + "experience_temperature": 21.6867, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T16:30:08.247446+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1371.0, + "average_temperature": 35.3667, + "experience_temperature": 21.3867, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T16:40:08.298889+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1375.0, + "average_temperature": 35.1, + "experience_temperature": 21.1, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T16:50:06.852187+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1378.0, + "average_temperature": 34.9, + "experience_temperature": 20.9, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T17:10:06.374140+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1379.0, + "average_temperature": 34.7667, + "experience_temperature": 20.7867, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T17:20:06.928738+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1385.0, + "average_temperature": 34.5333, + "experience_temperature": 20.5533, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T17:30:07.073943+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1390.0, + "average_temperature": 34.3, + "experience_temperature": 20.32, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T17:40:06.736574+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1390.0, + "average_temperature": 34.4667, + "experience_temperature": 20.4667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T17:50:08.069130+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1396.0, + "average_temperature": 35.2, + "experience_temperature": 21.22, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T18:00:06.871219+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1401.0, + "average_temperature": 34.6667, + "experience_temperature": 20.6867, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T18:10:07.104490+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1401.0, + "average_temperature": 34.3333, + "experience_temperature": 20.3533, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T18:20:06.133170+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1404.0, + "average_temperature": 34.0, + "experience_temperature": 20.02, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T18:30:09.072180+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1409.0, + "average_temperature": 34.8, + "experience_temperature": 20.82, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T18:40:09.204823+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1417.0, + "average_temperature": 34.6667, + "experience_temperature": 20.6667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T18:50:05.976653+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1426.0, + "average_temperature": 34.3667, + "experience_temperature": 20.3867, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T19:00:06.036474+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1431.0, + "average_temperature": 34.0667, + "experience_temperature": 20.0867, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T19:10:06.104857+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1442.0, + "average_temperature": 34.6667, + "experience_temperature": 20.6867, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T19:20:05.948696+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1451.0, + "average_temperature": 35.0667, + "experience_temperature": 21.0867, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T19:30:06.401982+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1461.0, + "average_temperature": 34.4667, + "experience_temperature": 20.4867, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T19:40:06.280274+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1466.0, + "average_temperature": 34.0, + "experience_temperature": 20.02, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T19:50:06.054173+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1474.0, + "average_temperature": 35.0, + "experience_temperature": 21.0, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T20:00:06.427491+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1483.0, + "average_temperature": 34.5, + "experience_temperature": 20.52, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T20:10:06.866024+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1492.0, + "average_temperature": 34.2, + "experience_temperature": 20.22, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T20:20:06.545788+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1496.0, + "average_temperature": 34.7, + "experience_temperature": 20.72, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T20:30:05.874385+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1506.0, + "average_temperature": 34.7, + "experience_temperature": 20.7, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T20:40:06.799093+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1515.0, + "average_temperature": 34.2667, + "experience_temperature": 20.2667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T20:50:06.439172+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1523.0, + "average_temperature": 34.4333, + "experience_temperature": 20.4533, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T21:00:07.117266+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1533.0, + "average_temperature": 34.8667, + "experience_temperature": 20.8667, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T21:10:05.965543+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1537.0, + "average_temperature": 34.3, + "experience_temperature": 20.3, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T21:20:08.030939+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1544.0, + "average_temperature": 34.3, + "experience_temperature": 20.32, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T21:30:06.834686+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1552.0, + "average_temperature": 34.8, + "experience_temperature": 20.82, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T21:40:07.027617+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1563.0, + "average_temperature": 34.3333, + "experience_temperature": 20.3533, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T21:50:06.022283+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1568.0, + "average_temperature": 34.4333, + "experience_temperature": 20.4533, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T22:00:06.193389+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1575.0, + "average_temperature": 34.8667, + "experience_temperature": 20.8867, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T22:10:06.486634+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1581.0, + "average_temperature": 34.1, + "experience_temperature": 20.12, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T22:20:06.373582+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1590.0, + "average_temperature": 35.0, + "experience_temperature": 21.0, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T22:30:07.532540+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1600.0, + "average_temperature": 34.4333, + "experience_temperature": 20.4533, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T22:40:07.692525+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1609.0, + "average_temperature": 34.2333, + "experience_temperature": 20.2333, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T22:50:06.753429+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1617.0, + "average_temperature": 34.7667, + "experience_temperature": 20.7867, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T23:00:06.322366+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1622.0, + "average_temperature": 34.0, + "experience_temperature": 20.0, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T23:10:07.065454+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1636.0, + "average_temperature": 35.0, + "experience_temperature": 21.02, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T23:20:05.860633+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1641.0, + "average_temperature": 34.3, + "experience_temperature": 20.3, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T23:30:07.887137+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1649.0, + "average_temperature": 34.3667, + "experience_temperature": 20.3867, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T23:40:07.083944+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1658.0, + "average_temperature": 34.8, + "experience_temperature": 20.82, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-22T23:50:07.242600+07:00", + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1667.0, + "average_temperature": 34.1667, + "experience_temperature": 20.1867, + "chill_factor": 8.0 + }, + { + "timestamp": "2026-05-23T00:00:06.178317+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1672.0, + "average_temperature": 34.9, + "experience_temperature": 20.92, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T00:10:07.996132+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1680.0, + "average_temperature": 34.2, + "experience_temperature": 20.22, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T00:20:06.440241+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1686.0, + "average_temperature": 34.8333, + "experience_temperature": 20.8533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T00:30:06.191633+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1686.0, + "average_temperature": 34.8333, + "experience_temperature": 20.8533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T00:40:06.016825+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1700.0, + "average_temperature": 34.2, + "experience_temperature": 20.22, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T00:50:06.150090+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1709.0, + "average_temperature": 34.6667, + "experience_temperature": 20.6867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T01:00:08.093745+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1715.0, + "average_temperature": 33.9333, + "experience_temperature": 19.9533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T01:10:05.894771+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1724.0, + "average_temperature": 34.7333, + "experience_temperature": 20.7533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T01:20:06.295862+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1733.0, + "average_temperature": 34.2667, + "experience_temperature": 20.2867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T01:30:06.365497+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1741.0, + "average_temperature": 34.7, + "experience_temperature": 20.7, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T01:40:06.603141+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1749.0, + "average_temperature": 34.3667, + "experience_temperature": 20.3867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T01:50:07.350618+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1754.0, + "average_temperature": 34.2667, + "experience_temperature": 20.2867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T02:00:08.967379+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1764.0, + "average_temperature": 34.4667, + "experience_temperature": 20.4867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T02:10:05.936442+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1769.0, + "average_temperature": 33.9333, + "experience_temperature": 19.9333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T02:20:06.201119+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1779.0, + "average_temperature": 34.6, + "experience_temperature": 20.62, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T02:30:05.824299+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1788.0, + "average_temperature": 33.8, + "experience_temperature": 19.82, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T02:40:05.805006+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1798.0, + "average_temperature": 34.7333, + "experience_temperature": 20.7533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T02:50:06.547344+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1803.0, + "average_temperature": 33.8667, + "experience_temperature": 19.8867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T03:00:06.511493+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1812.0, + "average_temperature": 34.8333, + "experience_temperature": 20.8533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T03:10:05.899251+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1821.0, + "average_temperature": 33.9, + "experience_temperature": 19.92, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T03:20:06.779918+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1827.0, + "average_temperature": 34.6333, + "experience_temperature": 20.6533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T03:30:06.058648+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1836.0, + "average_temperature": 34.2333, + "experience_temperature": 20.2333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T03:40:06.769402+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1847.0, + "average_temperature": 34.8333, + "experience_temperature": 20.8533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T03:50:06.260357+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1856.0, + "average_temperature": 34.1333, + "experience_temperature": 20.1333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T04:00:05.993300+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1860.0, + "average_temperature": 34.4333, + "experience_temperature": 20.4533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T04:10:06.932986+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1870.0, + "average_temperature": 34.2667, + "experience_temperature": 20.2867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T04:20:06.802974+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1879.0, + "average_temperature": 34.7667, + "experience_temperature": 20.7867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T04:30:06.102538+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1885.0, + "average_temperature": 34.1667, + "experience_temperature": 20.1867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T04:40:06.714911+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1893.0, + "average_temperature": 34.7333, + "experience_temperature": 20.7333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T04:50:06.040503+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1904.0, + "average_temperature": 34.2333, + "experience_temperature": 20.2533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T05:00:06.839285+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1905.0, + "average_temperature": 34.8333, + "experience_temperature": 20.8333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T05:10:06.285644+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1920.0, + "average_temperature": 34.1667, + "experience_temperature": 20.1867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T05:20:06.645126+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1925.0, + "average_temperature": 34.5, + "experience_temperature": 20.5, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T05:30:08.236769+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1936.0, + "average_temperature": 33.9333, + "experience_temperature": 19.9533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T05:40:06.429156+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1948.0, + "average_temperature": 34.7333, + "experience_temperature": 20.7533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T05:50:07.178613+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1953.0, + "average_temperature": 33.9333, + "experience_temperature": 19.9533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T06:00:06.431828+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1963.0, + "average_temperature": 34.8333, + "experience_temperature": 20.8533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T06:10:06.535172+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1971.0, + "average_temperature": 33.9, + "experience_temperature": 19.92, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T06:20:06.585140+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1976.0, + "average_temperature": 34.6, + "experience_temperature": 20.62, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T06:30:06.591249+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1986.0, + "average_temperature": 33.8667, + "experience_temperature": 19.8867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T06:40:05.638769+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1994.0, + "average_temperature": 34.4667, + "experience_temperature": 20.4667, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T06:50:06.420987+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2004.0, + "average_temperature": 33.7667, + "experience_temperature": 19.7867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T07:00:08.964997+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2010.0, + "average_temperature": 34.5667, + "experience_temperature": 20.5867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T07:10:06.059300+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2019.0, + "average_temperature": 33.6667, + "experience_temperature": 19.6867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T07:20:06.920819+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2025.0, + "average_temperature": 34.5333, + "experience_temperature": 20.5333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T07:30:06.532918+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2035.0, + "average_temperature": 33.6667, + "experience_temperature": 19.6667, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T07:40:06.579222+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2045.0, + "average_temperature": 34.5667, + "experience_temperature": 20.5667, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T07:50:05.963886+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2051.0, + "average_temperature": 33.9, + "experience_temperature": 19.92, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T08:00:07.714200+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2061.0, + "average_temperature": 34.6333, + "experience_temperature": 20.6533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T08:10:06.280292+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2071.0, + "average_temperature": 34.3333, + "experience_temperature": 20.3333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T08:20:06.308903+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2079.0, + "average_temperature": 33.8667, + "experience_temperature": 19.8867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T08:30:06.027052+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2089.0, + "average_temperature": 34.8333, + "experience_temperature": 20.8533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T08:40:07.134850+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2096.0, + "average_temperature": 34.6, + "experience_temperature": 20.62, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T08:50:06.615699+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2104.0, + "average_temperature": 34.3333, + "experience_temperature": 20.3533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T09:00:08.183059+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2109.0, + "average_temperature": 34.1333, + "experience_temperature": 20.1333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T09:10:07.000277+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2122.0, + "average_temperature": 34.9, + "experience_temperature": 20.92, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T09:20:07.309640+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2127.0, + "average_temperature": 34.7667, + "experience_temperature": 20.7667, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T09:30:09.764496+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2136.0, + "average_temperature": 34.5333, + "experience_temperature": 20.5533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T09:40:07.463769+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2145.0, + "average_temperature": 34.5, + "experience_temperature": 20.5, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T09:50:06.373474+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2156.0, + "average_temperature": 34.5333, + "experience_temperature": 20.5333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T10:00:07.116365+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2160.0, + "average_temperature": 34.6333, + "experience_temperature": 20.6333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T10:10:06.532839+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2170.0, + "average_temperature": 34.9, + "experience_temperature": 20.9, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T10:20:08.037729+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2180.0, + "average_temperature": 34.9333, + "experience_temperature": 20.9533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T10:30:07.653801+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2191.0, + "average_temperature": 34.9667, + "experience_temperature": 20.9667, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T10:40:07.137937+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2200.0, + "average_temperature": 35.2333, + "experience_temperature": 21.2333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T10:50:06.699278+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2210.0, + "average_temperature": 35.4333, + "experience_temperature": 21.4333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T11:00:07.914946+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2218.0, + "average_temperature": 35.5667, + "experience_temperature": 21.5667, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T11:10:07.089866+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2224.0, + "average_temperature": 35.6333, + "experience_temperature": 21.6533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T11:20:07.807504+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2233.0, + "average_temperature": 35.6333, + "experience_temperature": 21.6533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T11:30:07.221671+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2243.0, + "average_temperature": 35.7667, + "experience_temperature": 21.7667, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T11:40:08.258307+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2252.0, + "average_temperature": 35.8, + "experience_temperature": 21.8, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T11:50:07.025764+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2260.0, + "average_temperature": 35.8, + "experience_temperature": 21.82, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T12:00:06.861129+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2265.0, + "average_temperature": 35.6, + "experience_temperature": 21.6, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T12:10:07.028920+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2274.0, + "average_temperature": 35.5667, + "experience_temperature": 21.5667, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T12:20:07.317494+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2284.0, + "average_temperature": 35.7, + "experience_temperature": 21.7, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T12:30:08.429420+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2295.0, + "average_temperature": 35.9, + "experience_temperature": 21.9, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T12:40:06.908685+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2305.0, + "average_temperature": 35.9667, + "experience_temperature": 21.9667, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T12:50:07.090354+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2315.0, + "average_temperature": 35.8667, + "experience_temperature": 21.8667, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T13:00:05.605703+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2324.0, + "average_temperature": 35.8333, + "experience_temperature": 21.8533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T13:10:06.284512+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2331.0, + "average_temperature": 35.8333, + "experience_temperature": 21.8333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T13:20:06.177638+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2341.0, + "average_temperature": 35.9333, + "experience_temperature": 21.9333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T13:30:05.798350+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2352.0, + "average_temperature": 35.9333, + "experience_temperature": 21.9533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T13:40:06.561878+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2357.0, + "average_temperature": 35.9333, + "experience_temperature": 21.9333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T13:50:06.139013+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2369.0, + "average_temperature": 35.8, + "experience_temperature": 21.82, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T14:10:06.541699+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2385.0, + "average_temperature": 35.9, + "experience_temperature": 21.9, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T14:20:06.500686+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2396.0, + "average_temperature": 35.8333, + "experience_temperature": 21.8333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T14:30:06.263545+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2405.0, + "average_temperature": 35.9, + "experience_temperature": 21.92, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T14:40:06.034251+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2412.0, + "average_temperature": 35.9333, + "experience_temperature": 21.9333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T14:50:05.950683+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2423.0, + "average_temperature": 35.8333, + "experience_temperature": 21.8533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T15:10:06.612826+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2434.0, + "average_temperature": 36.0, + "experience_temperature": 22.0, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T15:20:06.092340+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2442.0, + "average_temperature": 35.3333, + "experience_temperature": 21.3533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T15:30:05.594387+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2458.0, + "average_temperature": 35.3333, + "experience_temperature": 21.3333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T15:40:05.868260+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2464.0, + "average_temperature": 35.5, + "experience_temperature": 21.52, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T15:50:05.836003+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2475.0, + "average_temperature": 35.4, + "experience_temperature": 21.42, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T16:10:06.905190+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2490.0, + "average_temperature": 35.0333, + "experience_temperature": 21.0333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T16:20:07.572158+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2494.0, + "average_temperature": 34.8333, + "experience_temperature": 20.8533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T16:30:05.816311+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2497.0, + "average_temperature": 34.5333, + "experience_temperature": 20.5333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T16:40:05.504806+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2499.0, + "average_temperature": 34.3, + "experience_temperature": 20.3, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T16:50:07.688695+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2509.0, + "average_temperature": 35.2, + "experience_temperature": 21.22, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T17:10:06.634775+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 6.0, + "average_temperature": 34.2667, + "experience_temperature": 20.2867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T17:20:06.862532+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 10.0, + "average_temperature": 34.0333, + "experience_temperature": 20.0333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T17:30:05.778689+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 15.0, + "average_temperature": 33.8667, + "experience_temperature": 19.8667, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T17:40:06.986263+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 20.0, + "average_temperature": 33.6667, + "experience_temperature": 19.6867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T17:50:05.834063+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 31.0, + "average_temperature": 34.3, + "experience_temperature": 20.32, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T18:00:06.114255+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 38.0, + "average_temperature": 34.1, + "experience_temperature": 20.1, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T18:10:06.736359+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 49.0, + "average_temperature": 33.5667, + "experience_temperature": 19.5867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T18:20:05.704914+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 55.0, + "average_temperature": 33.9, + "experience_temperature": 19.92, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T18:30:05.788735+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 67.0, + "average_temperature": 34.2, + "experience_temperature": 20.22, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T18:40:05.655702+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 72.0, + "average_temperature": 33.6, + "experience_temperature": 19.62, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T18:50:06.630224+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 78.0, + "average_temperature": 34.5, + "experience_temperature": 20.5, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T19:00:07.171026+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 90.0, + "average_temperature": 33.9, + "experience_temperature": 19.9, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T19:10:05.944134+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 96.0, + "average_temperature": 33.3333, + "experience_temperature": 19.3533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T19:20:07.362616+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 104.0, + "average_temperature": 34.4667, + "experience_temperature": 20.4667, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T19:30:06.483901+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 108.0, + "average_temperature": 33.6, + "experience_temperature": 19.62, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T19:40:06.417448+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 114.0, + "average_temperature": 34.4667, + "experience_temperature": 20.4867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T19:50:06.060121+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 123.0, + "average_temperature": 33.8333, + "experience_temperature": 19.8333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T20:00:07.227904+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 129.0, + "average_temperature": 33.3, + "experience_temperature": 19.32, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T20:10:06.686614+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 135.0, + "average_temperature": 34.5333, + "experience_temperature": 20.5533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T20:20:06.997740+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 144.0, + "average_temperature": 33.6333, + "experience_temperature": 19.6333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T20:30:05.961329+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 149.0, + "average_temperature": 33.9, + "experience_temperature": 19.9, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T20:40:06.118382+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 160.0, + "average_temperature": 34.3, + "experience_temperature": 20.3, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T20:50:06.022857+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 165.0, + "average_temperature": 33.3667, + "experience_temperature": 19.3867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T21:00:06.761147+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 169.0, + "average_temperature": 34.5, + "experience_temperature": 20.52, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T21:10:07.333797+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 181.0, + "average_temperature": 33.6333, + "experience_temperature": 19.6533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T21:20:06.463220+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 186.0, + "average_temperature": 34.1667, + "experience_temperature": 20.1667, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T21:30:06.477946+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 198.0, + "average_temperature": 34.2, + "experience_temperature": 20.22, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T21:40:06.555141+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 203.0, + "average_temperature": 33.4333, + "experience_temperature": 19.4333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T21:50:08.466466+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 214.0, + "average_temperature": 34.6, + "experience_temperature": 20.6, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T22:00:07.081843+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 218.0, + "average_temperature": 33.7333, + "experience_temperature": 19.7533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T22:10:06.753029+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 227.0, + "average_temperature": 33.9333, + "experience_temperature": 19.9533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T22:20:07.310761+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 237.0, + "average_temperature": 34.3333, + "experience_temperature": 20.3333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T22:30:06.098708+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 246.0, + "average_temperature": 33.6, + "experience_temperature": 19.62, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T22:40:06.315701+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 250.0, + "average_temperature": 34.4667, + "experience_temperature": 20.4667, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T22:50:06.321203+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 262.0, + "average_temperature": 33.8667, + "experience_temperature": 19.8667, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T23:00:06.671434+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 267.0, + "average_temperature": 33.5333, + "experience_temperature": 19.5533, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T23:10:07.101415+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 271.0, + "average_temperature": 34.3333, + "experience_temperature": 20.3333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T23:20:07.231848+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 277.0, + "average_temperature": 33.5, + "experience_temperature": 19.52, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T23:30:07.883288+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 281.0, + "average_temperature": 34.3667, + "experience_temperature": 20.3867, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T23:40:06.651068+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 281.0, + "average_temperature": 33.6667, + "experience_temperature": 19.6667, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-23T23:50:06.813789+07:00", + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 286.0, + "average_temperature": 34.2333, + "experience_temperature": 20.2333, + "chill_factor": 7.8333 + }, + { + "timestamp": "2026-05-24T00:00:07.474011+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 292.0, + "average_temperature": 33.9333, + "experience_temperature": 19.9333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T00:10:07.403578+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 292.0, + "average_temperature": 33.3667, + "experience_temperature": 19.3867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T00:20:07.143327+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 298.0, + "average_temperature": 34.3, + "experience_temperature": 20.32, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T00:30:06.380872+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 308.0, + "average_temperature": 33.5667, + "experience_temperature": 19.5667, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T00:40:07.174336+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 313.0, + "average_temperature": 34.1333, + "experience_temperature": 20.1533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T00:50:06.522433+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 322.0, + "average_temperature": 33.8667, + "experience_temperature": 19.8867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T01:00:07.779713+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 333.0, + "average_temperature": 33.4, + "experience_temperature": 19.42, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T01:10:06.555325+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 343.0, + "average_temperature": 34.1333, + "experience_temperature": 20.1533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T01:20:08.485786+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 353.0, + "average_temperature": 33.3667, + "experience_temperature": 19.3667, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T01:30:06.330937+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 362.0, + "average_temperature": 34.3333, + "experience_temperature": 20.3533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T01:40:06.678344+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 368.0, + "average_temperature": 33.5333, + "experience_temperature": 19.5533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T01:50:05.932852+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 378.0, + "average_temperature": 34.2, + "experience_temperature": 20.2, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T02:00:06.341459+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 388.0, + "average_temperature": 33.8, + "experience_temperature": 19.82, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T02:10:06.438411+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 394.0, + "average_temperature": 33.6333, + "experience_temperature": 19.6533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T02:20:07.180379+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 405.0, + "average_temperature": 34.1333, + "experience_temperature": 20.1533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T02:30:06.639396+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 410.0, + "average_temperature": 33.3333, + "experience_temperature": 19.3533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T02:40:06.892767+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 418.0, + "average_temperature": 34.3, + "experience_temperature": 20.3, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T02:50:07.823892+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 428.0, + "average_temperature": 33.6333, + "experience_temperature": 19.6333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T03:00:06.952905+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 434.0, + "average_temperature": 34.2, + "experience_temperature": 20.22, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T03:10:07.634291+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 445.0, + "average_temperature": 33.8, + "experience_temperature": 19.82, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T03:20:06.327084+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 449.0, + "average_temperature": 33.3, + "experience_temperature": 19.32, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T03:30:06.549905+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 457.0, + "average_temperature": 34.1333, + "experience_temperature": 20.1333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T03:40:08.172929+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 468.0, + "average_temperature": 33.2333, + "experience_temperature": 19.2333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T03:50:06.322765+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 472.0, + "average_temperature": 34.1333, + "experience_temperature": 20.1333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T04:00:06.639490+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 478.0, + "average_temperature": 33.1333, + "experience_temperature": 19.1533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T04:10:06.348946+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 478.0, + "average_temperature": 34.0, + "experience_temperature": 20.02, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T04:20:06.359171+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 483.0, + "average_temperature": 33.4667, + "experience_temperature": 19.4867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T04:30:07.148603+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 488.0, + "average_temperature": 33.7333, + "experience_temperature": 19.7533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T04:40:06.815679+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 488.0, + "average_temperature": 33.8, + "experience_temperature": 19.82, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T04:50:06.332181+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 494.0, + "average_temperature": 33.5667, + "experience_temperature": 19.5667, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T05:00:06.428997+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 499.0, + "average_temperature": 34.0, + "experience_temperature": 20.02, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T05:10:07.503801+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 505.0, + "average_temperature": 33.2667, + "experience_temperature": 19.2867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T05:20:06.751220+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 510.0, + "average_temperature": 34.0, + "experience_temperature": 20.02, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T05:30:07.031125+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 520.0, + "average_temperature": 33.1333, + "experience_temperature": 19.1333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T05:40:07.054778+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 531.0, + "average_temperature": 33.8, + "experience_temperature": 19.82, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T05:50:06.435082+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 535.0, + "average_temperature": 33.6, + "experience_temperature": 19.62, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T06:00:06.852349+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 541.0, + "average_temperature": 33.5, + "experience_temperature": 19.52, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T06:10:07.541040+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 550.0, + "average_temperature": 33.9, + "experience_temperature": 19.92, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T06:20:06.923350+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 555.0, + "average_temperature": 33.4, + "experience_temperature": 19.42, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T06:30:07.448086+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 561.0, + "average_temperature": 33.9333, + "experience_temperature": 19.9533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T06:40:05.835930+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 572.0, + "average_temperature": 33.4, + "experience_temperature": 19.4, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T06:50:05.330017+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 577.0, + "average_temperature": 34.0667, + "experience_temperature": 20.0867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T07:00:06.115264+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 582.0, + "average_temperature": 33.6, + "experience_temperature": 19.6, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T07:10:05.524790+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 590.0, + "average_temperature": 33.5333, + "experience_temperature": 19.5533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T07:20:05.892000+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 595.0, + "average_temperature": 34.4333, + "experience_temperature": 20.4533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T07:30:06.247300+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 606.0, + "average_temperature": 34.2333, + "experience_temperature": 20.2333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T07:40:05.500065+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 612.0, + "average_temperature": 34.1, + "experience_temperature": 20.12, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T07:50:05.374475+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 621.0, + "average_temperature": 34.3333, + "experience_temperature": 20.3333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T08:00:06.470807+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 627.0, + "average_temperature": 34.4667, + "experience_temperature": 20.4667, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T08:10:05.890252+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 627.0, + "average_temperature": 34.4667, + "experience_temperature": 20.4667, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T08:20:06.559353+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 642.0, + "average_temperature": 34.9667, + "experience_temperature": 20.9867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T08:30:06.240388+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 651.0, + "average_temperature": 35.1667, + "experience_temperature": 21.1867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T08:40:06.342215+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 655.0, + "average_temperature": 35.1333, + "experience_temperature": 21.1333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T08:50:05.925799+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 655.0, + "average_temperature": 35.1333, + "experience_temperature": 21.1333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T09:00:05.725856+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 667.0, + "average_temperature": 35.2667, + "experience_temperature": 21.2667, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T09:10:05.386503+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 667.0, + "average_temperature": 35.2667, + "experience_temperature": 21.2667, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T09:20:06.292888+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 683.0, + "average_temperature": 35.4667, + "experience_temperature": 21.4867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T09:30:05.708401+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 688.0, + "average_temperature": 35.5, + "experience_temperature": 21.52, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T09:40:05.870421+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 692.0, + "average_temperature": 35.2667, + "experience_temperature": 21.2867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T09:50:05.576016+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 700.0, + "average_temperature": 35.4333, + "experience_temperature": 21.4533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T10:00:08.991582+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 702.0, + "average_temperature": 35.4333, + "experience_temperature": 21.4533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T10:10:05.942021+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 714.0, + "average_temperature": 35.4333, + "experience_temperature": 21.4533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T10:20:06.047953+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 719.0, + "average_temperature": 35.6333, + "experience_temperature": 21.6533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T10:30:05.658951+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 724.0, + "average_temperature": 36.1, + "experience_temperature": 22.12, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T10:40:06.403362+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 731.0, + "average_temperature": 35.3, + "experience_temperature": 21.3, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T10:50:06.763269+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 736.0, + "average_temperature": 35.4, + "experience_temperature": 21.42, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T11:00:06.494929+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 746.0, + "average_temperature": 35.3333, + "experience_temperature": 21.3533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T11:10:05.984585+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 750.0, + "average_temperature": 35.4333, + "experience_temperature": 21.4333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T11:20:08.292085+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 754.0, + "average_temperature": 36.1333, + "experience_temperature": 22.1333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T11:30:06.671238+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 768.0, + "average_temperature": 35.1667, + "experience_temperature": 21.1867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T11:40:06.240669+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 770.0, + "average_temperature": 35.2, + "experience_temperature": 21.2, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T11:50:07.328898+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 798.0, + "average_temperature": 35.6333, + "experience_temperature": 21.6533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T12:00:07.098124+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 822.0, + "average_temperature": 36.2333, + "experience_temperature": 22.2333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T12:10:06.848628+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 846.0, + "average_temperature": 35.1, + "experience_temperature": 21.1, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T12:20:06.633214+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 862.0, + "average_temperature": 34.9333, + "experience_temperature": 20.9333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T12:30:06.927270+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 881.0, + "average_temperature": 34.9667, + "experience_temperature": 20.9667, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T12:40:06.799122+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 896.0, + "average_temperature": 35.6333, + "experience_temperature": 21.6533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T12:50:06.655657+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 905.0, + "average_temperature": 35.0333, + "experience_temperature": 21.0533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T13:00:06.615891+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 915.0, + "average_temperature": 34.8667, + "experience_temperature": 20.8867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T13:10:09.431174+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 930.0, + "average_temperature": 34.6, + "experience_temperature": 20.6, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T13:20:07.120636+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 940.0, + "average_temperature": 34.1667, + "experience_temperature": 20.1867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T13:30:07.964964+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 950.0, + "average_temperature": 33.9667, + "experience_temperature": 19.9867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T13:40:07.022762+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 960.0, + "average_temperature": 34.0333, + "experience_temperature": 20.0533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T13:50:06.799571+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 970.0, + "average_temperature": 33.4333, + "experience_temperature": 19.4333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T14:10:07.136770+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 990.0, + "average_temperature": 33.2, + "experience_temperature": 19.22, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T14:20:06.705967+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 999.0, + "average_temperature": 33.6333, + "experience_temperature": 19.6533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T14:30:06.611423+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1009.0, + "average_temperature": 33.4333, + "experience_temperature": 19.4533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T14:40:06.630360+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1023.0, + "average_temperature": 33.4, + "experience_temperature": 19.42, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T14:50:06.803583+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1033.0, + "average_temperature": 33.3667, + "experience_temperature": 19.3867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T15:10:06.994221+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1061.0, + "average_temperature": 33.7, + "experience_temperature": 19.72, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T15:20:06.941145+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1112.0, + "average_temperature": 33.2, + "experience_temperature": 19.22, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T15:30:06.501082+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1183.0, + "average_temperature": 33.4, + "experience_temperature": 19.42, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T15:40:06.551184+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1208.0, + "average_temperature": 33.4333, + "experience_temperature": 19.4533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T15:50:07.132043+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1237.0, + "average_temperature": 33.5333, + "experience_temperature": 19.5533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T16:10:07.175885+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1327.0, + "average_temperature": 33.2333, + "experience_temperature": 19.2533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T16:20:06.728345+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1375.0, + "average_temperature": 33.3, + "experience_temperature": 19.32, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T16:30:07.489371+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1427.0, + "average_temperature": 33.0667, + "experience_temperature": 19.0867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T16:40:05.828223+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1468.0, + "average_temperature": 32.9333, + "experience_temperature": 18.9533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T16:50:06.234717+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1468.0, + "average_temperature": 32.9333, + "experience_temperature": 18.9533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T17:10:05.328374+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1603.0, + "average_temperature": 32.3, + "experience_temperature": 18.32, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T17:20:05.813600+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1645.0, + "average_temperature": 33.5, + "experience_temperature": 19.52, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T17:30:05.447444+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1682.0, + "average_temperature": 33.0, + "experience_temperature": 19.02, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T17:40:06.258657+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1724.0, + "average_temperature": 33.7, + "experience_temperature": 19.72, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T17:50:05.608487+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1767.0, + "average_temperature": 33.5, + "experience_temperature": 19.52, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T18:00:05.927990+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1803.0, + "average_temperature": 32.9333, + "experience_temperature": 18.9533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T18:10:07.382791+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1848.0, + "average_temperature": 33.8667, + "experience_temperature": 19.8867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T18:20:07.095713+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1883.0, + "average_temperature": 33.1667, + "experience_temperature": 19.1667, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T18:30:06.488090+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 1921.0, + "average_temperature": 33.8, + "experience_temperature": 19.8, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T18:40:06.748915+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1964.0, + "average_temperature": 33.6, + "experience_temperature": 19.62, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T18:50:06.392870+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2001.0, + "average_temperature": 32.9, + "experience_temperature": 18.92, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T19:00:07.093311+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2044.0, + "average_temperature": 34.1667, + "experience_temperature": 20.1667, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T19:10:06.689187+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2087.0, + "average_temperature": 33.2, + "experience_temperature": 19.22, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T19:20:07.134683+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2125.0, + "average_temperature": 33.7667, + "experience_temperature": 19.7867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T19:30:06.790599+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2172.0, + "average_temperature": 33.5667, + "experience_temperature": 19.5667, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T19:40:07.822103+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2207.0, + "average_temperature": 32.8, + "experience_temperature": 18.82, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T19:50:06.317768+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2252.0, + "average_temperature": 33.9667, + "experience_temperature": 19.9867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T20:00:07.264922+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2294.0, + "average_temperature": 33.0333, + "experience_temperature": 19.0533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T20:10:08.489796+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2336.0, + "average_temperature": 34.0333, + "experience_temperature": 20.0533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T20:20:06.740134+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2401.0, + "average_temperature": 33.4333, + "experience_temperature": 19.4333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T20:30:06.784703+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2460.0, + "average_temperature": 32.8667, + "experience_temperature": 18.8667, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T20:40:07.855913+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2526.0, + "average_temperature": 33.7333, + "experience_temperature": 19.7533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T20:50:06.897178+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2591.0, + "average_temperature": 32.8, + "experience_temperature": 18.82, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T21:00:06.390058+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2657.0, + "average_temperature": 33.6333, + "experience_temperature": 19.6333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T21:10:06.671242+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2657.0, + "average_temperature": 33.6333, + "experience_temperature": 19.6333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T21:20:07.141030+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2786.0, + "average_temperature": 34.0667, + "experience_temperature": 20.0667, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T21:30:06.702179+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2854.0, + "average_temperature": 33.2667, + "experience_temperature": 19.2667, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T21:40:07.353441+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 2913.0, + "average_temperature": 33.9, + "experience_temperature": 19.9, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T21:50:06.505910+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 2978.0, + "average_temperature": 33.7, + "experience_temperature": 19.72, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T22:00:07.319235+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 3042.0, + "average_temperature": 32.8, + "experience_temperature": 18.8, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T22:10:07.402865+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 3106.0, + "average_temperature": 34.0333, + "experience_temperature": 20.0333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T22:20:06.836560+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 3171.0, + "average_temperature": 33.0667, + "experience_temperature": 19.0667, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T22:30:07.146147+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 3236.0, + "average_temperature": 34.1333, + "experience_temperature": 20.1333, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T22:40:06.500307+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 3298.0, + "average_temperature": 33.4333, + "experience_temperature": 19.4533, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T22:50:06.914201+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 3362.0, + "average_temperature": 33.6, + "experience_temperature": 19.62, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T23:00:07.074943+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 3426.0, + "average_temperature": 33.7, + "experience_temperature": 19.72, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T23:10:06.786206+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 3486.0, + "average_temperature": 32.8667, + "experience_temperature": 18.8867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T23:20:06.764138+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 3548.0, + "average_temperature": 33.8667, + "experience_temperature": 19.8867, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T23:30:06.302523+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 3605.0, + "average_temperature": 32.8667, + "experience_temperature": 18.8667, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T23:40:06.439876+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 3663.0, + "average_temperature": 34.0, + "experience_temperature": 20.02, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-24T23:50:06.776501+07:00", + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 3720.0, + "average_temperature": 33.0, + "experience_temperature": 19.02, + "chill_factor": 7.6667 + }, + { + "timestamp": "2026-05-25T00:00:07.506368+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 3780.0, + "average_temperature": 33.9667, + "experience_temperature": 19.9867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T00:10:07.749902+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 3836.0, + "average_temperature": 33.1667, + "experience_temperature": 19.1867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T00:20:06.877385+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 3899.0, + "average_temperature": 33.8, + "experience_temperature": 19.82, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T00:30:06.938446+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 3963.0, + "average_temperature": 33.5667, + "experience_temperature": 19.5867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T00:40:06.699388+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 4025.0, + "average_temperature": 32.7667, + "experience_temperature": 18.7867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T00:50:06.758795+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 4089.0, + "average_temperature": 34.0, + "experience_temperature": 20.02, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T01:00:07.230732+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 4151.0, + "average_temperature": 32.9667, + "experience_temperature": 18.9667, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T01:10:06.790472+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 4214.0, + "average_temperature": 34.0667, + "experience_temperature": 20.0667, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T01:20:07.205771+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 4277.0, + "average_temperature": 33.3, + "experience_temperature": 19.32, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T01:30:06.911059+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 4333.0, + "average_temperature": 33.0667, + "experience_temperature": 19.0867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T01:40:07.079099+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 4395.0, + "average_temperature": 33.7667, + "experience_temperature": 19.7667, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T01:50:07.535346+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 4451.0, + "average_temperature": 32.8, + "experience_temperature": 18.82, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T02:00:06.858846+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 4508.0, + "average_temperature": 33.9667, + "experience_temperature": 19.9667, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T02:10:06.851031+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 4570.0, + "average_temperature": 32.9, + "experience_temperature": 18.9, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T02:20:06.753722+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 4626.0, + "average_temperature": 33.8667, + "experience_temperature": 19.8867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T02:30:06.852074+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 4689.0, + "average_temperature": 33.0333, + "experience_temperature": 19.0533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T02:40:06.910575+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 4745.0, + "average_temperature": 33.7333, + "experience_temperature": 19.7333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T02:50:06.139779+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 4807.0, + "average_temperature": 33.0, + "experience_temperature": 19.0, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T03:00:06.373772+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 4864.0, + "average_temperature": 33.2333, + "experience_temperature": 19.2333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T03:10:06.622703+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 4926.0, + "average_temperature": 33.2333, + "experience_temperature": 19.2533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T03:20:06.429776+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 4987.0, + "average_temperature": 33.1667, + "experience_temperature": 19.1867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T03:30:06.163630+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 5044.0, + "average_temperature": 33.4, + "experience_temperature": 19.4, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T03:40:05.596478+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 5105.0, + "average_temperature": 32.7333, + "experience_temperature": 18.7333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T03:50:05.605740+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 5161.0, + "average_temperature": 33.8333, + "experience_temperature": 19.8333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T04:00:06.352904+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 5223.0, + "average_temperature": 32.7, + "experience_temperature": 18.72, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T04:10:05.933974+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 5279.0, + "average_temperature": 33.7, + "experience_temperature": 19.72, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T04:20:06.358353+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 5335.0, + "average_temperature": 32.7, + "experience_temperature": 18.72, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T04:30:05.715162+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 5391.0, + "average_temperature": 33.7, + "experience_temperature": 19.72, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T04:40:05.869414+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 5446.0, + "average_temperature": 32.8, + "experience_temperature": 18.8, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T04:50:05.440198+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 5502.0, + "average_temperature": 33.8, + "experience_temperature": 19.82, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T05:00:06.614983+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 5558.0, + "average_temperature": 32.9, + "experience_temperature": 18.92, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T05:10:05.709380+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 5614.0, + "average_temperature": 33.9333, + "experience_temperature": 19.9533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T05:20:05.564619+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 5677.0, + "average_temperature": 33.1667, + "experience_temperature": 19.1667, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T05:30:05.756314+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 5739.0, + "average_temperature": 33.5333, + "experience_temperature": 19.5333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T05:40:07.597463+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 5796.0, + "average_temperature": 33.4667, + "experience_temperature": 19.4867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T05:50:07.476911+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 5852.0, + "average_temperature": 32.7333, + "experience_temperature": 18.7333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T06:00:05.930444+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 5914.0, + "average_temperature": 33.7667, + "experience_temperature": 19.7867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T06:10:06.685270+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 5971.0, + "average_temperature": 32.7333, + "experience_temperature": 18.7333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T06:20:05.485798+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 6028.0, + "average_temperature": 33.6667, + "experience_temperature": 19.6667, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T06:30:07.162302+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 6092.0, + "average_temperature": 33.4333, + "experience_temperature": 19.4333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T06:40:05.603268+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 6152.0, + "average_temperature": 33.3333, + "experience_temperature": 19.3533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T06:50:06.872766+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 6214.0, + "average_temperature": 33.5, + "experience_temperature": 19.52, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T07:00:06.441939+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 6271.0, + "average_temperature": 32.9, + "experience_temperature": 18.92, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T07:10:07.533442+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 6328.0, + "average_temperature": 33.6, + "experience_temperature": 19.6, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T07:20:05.932496+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 6384.0, + "average_temperature": 33.8, + "experience_temperature": 19.82, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T07:30:06.425787+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 6441.0, + "average_temperature": 33.3333, + "experience_temperature": 19.3533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T07:40:05.921303+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 6501.0, + "average_temperature": 33.1667, + "experience_temperature": 19.1667, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T07:50:06.768113+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 6554.0, + "average_temperature": 33.2333, + "experience_temperature": 19.2533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T08:00:06.891026+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 6616.0, + "average_temperature": 33.3667, + "experience_temperature": 19.3867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T08:10:07.217695+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 6674.0, + "average_temperature": 33.5333, + "experience_temperature": 19.5333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T08:20:06.034914+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 6730.0, + "average_temperature": 33.6, + "experience_temperature": 19.6, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T08:30:05.575144+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 6730.0, + "average_temperature": 33.6, + "experience_temperature": 19.6, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T08:40:07.341533+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 6844.0, + "average_temperature": 33.8333, + "experience_temperature": 19.8533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T08:50:08.410834+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 6900.0, + "average_temperature": 34.1667, + "experience_temperature": 20.1867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T09:00:06.582766+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 6955.0, + "average_temperature": 34.6333, + "experience_temperature": 20.6333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T09:10:06.258334+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 6993.0, + "average_temperature": 34.4, + "experience_temperature": 20.4, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T09:20:07.962710+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 7027.0, + "average_temperature": 34.5333, + "experience_temperature": 20.5533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T09:30:07.308569+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 7059.0, + "average_temperature": 34.8333, + "experience_temperature": 20.8333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T09:40:07.949227+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 7094.0, + "average_temperature": 34.6667, + "experience_temperature": 20.6867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T09:50:06.464098+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 7126.0, + "average_temperature": 34.6, + "experience_temperature": 20.62, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T10:00:07.204659+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 7162.0, + "average_temperature": 34.7333, + "experience_temperature": 20.7333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T10:10:06.896437+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 7194.0, + "average_temperature": 34.6, + "experience_temperature": 20.62, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T10:20:07.635476+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 7225.0, + "average_temperature": 34.8333, + "experience_temperature": 20.8533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T10:30:06.912396+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 7257.0, + "average_temperature": 35.1, + "experience_temperature": 21.12, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T10:40:09.130354+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 7294.0, + "average_temperature": 35.1333, + "experience_temperature": 21.1533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T10:50:07.753696+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 7327.0, + "average_temperature": 35.4667, + "experience_temperature": 21.4867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T11:00:06.976918+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 7359.0, + "average_temperature": 35.0667, + "experience_temperature": 21.0867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T11:10:06.867894+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 7397.0, + "average_temperature": 35.0, + "experience_temperature": 21.02, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T11:20:06.322979+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 7430.0, + "average_temperature": 34.7, + "experience_temperature": 20.72, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T11:30:05.896951+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 7467.0, + "average_temperature": 35.3, + "experience_temperature": 21.32, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T11:40:06.473687+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 7501.0, + "average_temperature": 35.4333, + "experience_temperature": 21.4333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T11:50:07.916248+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 7534.0, + "average_temperature": 34.8, + "experience_temperature": 20.8, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T12:00:08.095028+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 7572.0, + "average_temperature": 35.2667, + "experience_temperature": 21.2667, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T12:10:05.828736+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 7604.0, + "average_temperature": 35.4667, + "experience_temperature": 21.4667, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T12:20:07.176255+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 7641.0, + "average_temperature": 35.2, + "experience_temperature": 21.22, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T12:30:09.610568+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 7672.0, + "average_temperature": 34.9333, + "experience_temperature": 20.9333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T12:40:06.177105+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 7703.0, + "average_temperature": 34.5333, + "experience_temperature": 20.5333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T12:50:06.301682+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 7735.0, + "average_temperature": 34.9, + "experience_temperature": 20.92, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T13:00:07.352676+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 7773.0, + "average_temperature": 34.5667, + "experience_temperature": 20.5867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T13:10:07.326401+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 7810.0, + "average_temperature": 34.4667, + "experience_temperature": 20.4667, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T13:20:07.475588+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 7845.0, + "average_temperature": 34.4667, + "experience_temperature": 20.4667, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T13:30:07.225966+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 7883.0, + "average_temperature": 34.4667, + "experience_temperature": 20.4667, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T13:40:08.240662+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 7917.0, + "average_temperature": 34.6, + "experience_temperature": 20.6, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T13:50:08.417888+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 7953.0, + "average_temperature": 34.5333, + "experience_temperature": 20.5533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T14:10:06.967936+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8022.0, + "average_temperature": 34.6333, + "experience_temperature": 20.6533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T14:20:07.538182+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8022.0, + "average_temperature": 34.6333, + "experience_temperature": 20.6533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T14:30:09.249145+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8089.0, + "average_temperature": 34.4667, + "experience_temperature": 20.4867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T14:40:09.165778+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 8126.0, + "average_temperature": 34.7667, + "experience_temperature": 20.7667, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T14:50:07.382346+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8166.0, + "average_temperature": 34.6667, + "experience_temperature": 20.6867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T15:10:06.570784+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8234.0, + "average_temperature": 34.3333, + "experience_temperature": 20.3533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T15:20:05.853627+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8269.0, + "average_temperature": 34.4667, + "experience_temperature": 20.4867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T15:30:07.269539+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8305.0, + "average_temperature": 34.6, + "experience_temperature": 20.62, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T15:40:06.143315+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 8342.0, + "average_temperature": 34.5333, + "experience_temperature": 20.5333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T15:50:08.413104+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8355.0, + "average_temperature": 34.4333, + "experience_temperature": 20.4533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T16:10:07.056066+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8392.0, + "average_temperature": 34.5, + "experience_temperature": 20.52, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T16:20:07.725132+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 8409.0, + "average_temperature": 34.3333, + "experience_temperature": 20.3333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T16:30:06.637716+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8426.0, + "average_temperature": 34.3, + "experience_temperature": 20.32, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T16:40:05.847677+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8439.0, + "average_temperature": 34.0667, + "experience_temperature": 20.0867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T16:50:06.649002+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8456.0, + "average_temperature": 33.9667, + "experience_temperature": 19.9867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T17:10:08.232965+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8488.0, + "average_temperature": 33.6667, + "experience_temperature": 19.6867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T17:20:06.274732+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8504.0, + "average_temperature": 33.4333, + "experience_temperature": 19.4533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T17:30:06.673706+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8518.0, + "average_temperature": 33.2, + "experience_temperature": 19.22, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T17:40:06.677395+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8539.0, + "average_temperature": 33.8, + "experience_temperature": 19.82, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T17:50:05.938245+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8552.0, + "average_temperature": 33.1333, + "experience_temperature": 19.1533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T18:00:06.181588+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8570.0, + "average_temperature": 33.7, + "experience_temperature": 19.72, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T18:10:06.766150+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8587.0, + "average_temperature": 33.4, + "experience_temperature": 19.42, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T18:20:06.314766+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8600.0, + "average_temperature": 33.0333, + "experience_temperature": 19.0533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T18:30:06.584993+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8615.0, + "average_temperature": 32.6667, + "experience_temperature": 18.6867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T18:40:05.965561+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8631.0, + "average_temperature": 33.3, + "experience_temperature": 19.32, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T18:50:06.248004+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8651.0, + "average_temperature": 33.1, + "experience_temperature": 19.12, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T19:00:06.303377+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8666.0, + "average_temperature": 32.7333, + "experience_temperature": 18.7533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T19:10:06.654231+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 8682.0, + "average_temperature": 32.5333, + "experience_temperature": 18.5333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T19:20:06.283544+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 8703.0, + "average_temperature": 33.3667, + "experience_temperature": 19.3667, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T19:30:07.283511+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 8716.0, + "average_temperature": 32.8667, + "experience_temperature": 18.8667, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T19:40:06.312808+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8733.0, + "average_temperature": 32.5333, + "experience_temperature": 18.5533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T19:50:06.407293+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 8751.0, + "average_temperature": 33.3333, + "experience_temperature": 19.3333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T20:00:06.771135+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8766.0, + "average_temperature": 32.8667, + "experience_temperature": 18.8867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T20:10:06.186769+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8766.0, + "average_temperature": 32.8667, + "experience_temperature": 18.8867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T20:20:08.176217+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8796.0, + "average_temperature": 33.2333, + "experience_temperature": 19.2533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T20:30:06.867808+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8810.0, + "average_temperature": 32.7667, + "experience_temperature": 18.7867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T20:40:09.381446+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8824.0, + "average_temperature": 32.3667, + "experience_temperature": 18.3867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T20:50:05.882204+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 8840.0, + "average_temperature": 33.2, + "experience_temperature": 19.2, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T21:00:06.614374+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 8852.0, + "average_temperature": 32.5333, + "experience_temperature": 18.5333, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T21:10:06.906075+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8868.0, + "average_temperature": 33.2333, + "experience_temperature": 19.2533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T21:20:07.461849+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8885.0, + "average_temperature": 32.9333, + "experience_temperature": 18.9533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T21:30:06.657037+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8898.0, + "average_temperature": 32.4, + "experience_temperature": 18.42, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T21:40:06.471743+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8909.0, + "average_temperature": 33.5, + "experience_temperature": 19.52, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T21:50:06.445093+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8925.0, + "average_temperature": 32.6667, + "experience_temperature": 18.6867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T22:00:05.941158+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8936.0, + "average_temperature": 33.0, + "experience_temperature": 19.02, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T22:10:06.200482+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8949.0, + "average_temperature": 33.0, + "experience_temperature": 19.02, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T22:20:06.695436+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8962.0, + "average_temperature": 32.3667, + "experience_temperature": 18.3867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T22:30:06.520919+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8978.0, + "average_temperature": 33.2667, + "experience_temperature": 19.2867, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T22:40:05.933430+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 8991.0, + "average_temperature": 32.6333, + "experience_temperature": 18.6533, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T22:50:05.913987+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9003.0, + "average_temperature": 32.8, + "experience_temperature": 18.8, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T23:00:05.869976+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9011.0, + "average_temperature": 32.8, + "experience_temperature": 18.82, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T23:10:05.571510+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9018.0, + "average_temperature": 32.5, + "experience_temperature": 18.52, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T23:20:06.643711+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9026.0, + "average_temperature": 32.8, + "experience_temperature": 18.82, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T23:30:06.753386+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9031.0, + "average_temperature": 32.6, + "experience_temperature": 18.62, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T23:40:06.405001+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9037.0, + "average_temperature": 32.9, + "experience_temperature": 18.92, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-25T23:50:07.745571+07:00", + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9045.0, + "average_temperature": 32.3667, + "experience_temperature": 18.3667, + "chill_factor": 7.5 + }, + { + "timestamp": "2026-05-26T00:00:06.286984+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9054.0, + "average_temperature": 32.8333, + "experience_temperature": 18.8333, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T00:10:05.859029+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9063.0, + "average_temperature": 32.3667, + "experience_temperature": 18.3867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T00:20:06.498079+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9080.0, + "average_temperature": 32.7333, + "experience_temperature": 18.7533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T00:30:06.279942+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9096.0, + "average_temperature": 32.4667, + "experience_temperature": 18.4867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T00:40:05.682615+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9109.0, + "average_temperature": 32.6333, + "experience_temperature": 18.6333, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T00:50:06.360927+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9121.0, + "average_temperature": 32.6333, + "experience_temperature": 18.6533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T01:00:06.427271+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9134.0, + "average_temperature": 32.2333, + "experience_temperature": 18.2533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T01:10:06.519319+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9147.0, + "average_temperature": 32.6667, + "experience_temperature": 18.6867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T01:20:06.046739+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9161.0, + "average_temperature": 32.2667, + "experience_temperature": 18.2867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T01:30:06.268805+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9174.0, + "average_temperature": 32.6333, + "experience_temperature": 18.6533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T01:40:06.142619+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9183.0, + "average_temperature": 32.6333, + "experience_temperature": 18.6533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T01:50:06.597247+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9201.0, + "average_temperature": 32.5, + "experience_temperature": 18.52, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T02:00:06.734120+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9210.0, + "average_temperature": 32.5667, + "experience_temperature": 18.5667, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T02:10:06.774305+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9223.0, + "average_temperature": 32.6333, + "experience_temperature": 18.6533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T02:20:05.833363+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9239.0, + "average_temperature": 32.4, + "experience_temperature": 18.42, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T02:30:06.213062+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9250.0, + "average_temperature": 32.5333, + "experience_temperature": 18.5533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T02:40:06.175873+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9260.0, + "average_temperature": 32.8667, + "experience_temperature": 18.8867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T02:50:06.201557+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9275.0, + "average_temperature": 32.6, + "experience_temperature": 18.62, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T03:00:06.082253+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9284.0, + "average_temperature": 32.5, + "experience_temperature": 18.52, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T03:10:06.140148+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9300.0, + "average_temperature": 32.8667, + "experience_temperature": 18.8667, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T03:20:05.636723+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9314.0, + "average_temperature": 32.3, + "experience_temperature": 18.32, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T03:30:05.758620+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9330.0, + "average_temperature": 33.0333, + "experience_temperature": 19.0533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T03:40:05.946386+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9340.0, + "average_temperature": 32.4667, + "experience_temperature": 18.4867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T03:50:06.877343+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9354.0, + "average_temperature": 32.7, + "experience_temperature": 18.72, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T04:00:06.338267+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9363.0, + "average_temperature": 32.4667, + "experience_temperature": 18.4867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T04:10:05.893899+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9369.0, + "average_temperature": 32.9333, + "experience_temperature": 18.9333, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T04:20:06.122576+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9373.0, + "average_temperature": 32.5, + "experience_temperature": 18.52, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T04:30:06.617672+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9383.0, + "average_temperature": 32.7333, + "experience_temperature": 18.7533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T04:40:05.799183+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9387.0, + "average_temperature": 32.3333, + "experience_temperature": 18.3333, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T04:50:06.453413+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9392.0, + "average_temperature": 33.0, + "experience_temperature": 19.02, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T05:00:06.440317+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9408.0, + "average_temperature": 32.5, + "experience_temperature": 18.5, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T05:10:05.674979+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9430.0, + "average_temperature": 32.6667, + "experience_temperature": 18.6667, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T05:20:07.138112+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9445.0, + "average_temperature": 32.2667, + "experience_temperature": 18.2867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T05:30:06.355052+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9461.0, + "average_temperature": 33.1333, + "experience_temperature": 19.1533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T05:40:06.091420+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9481.0, + "average_temperature": 32.3667, + "experience_temperature": 18.3867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T05:50:06.314033+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9496.0, + "average_temperature": 32.7333, + "experience_temperature": 18.7333, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T06:00:06.328611+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9511.0, + "average_temperature": 32.3, + "experience_temperature": 18.32, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T06:10:06.751404+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9532.0, + "average_temperature": 32.7333, + "experience_temperature": 18.7533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T06:20:06.220368+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9545.0, + "average_temperature": 32.2333, + "experience_temperature": 18.2533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T06:30:06.198391+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9562.0, + "average_temperature": 32.5333, + "experience_temperature": 18.5533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T06:40:06.380711+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9578.0, + "average_temperature": 32.6, + "experience_temperature": 18.6, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T06:50:06.316809+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9592.0, + "average_temperature": 32.3, + "experience_temperature": 18.3, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T07:00:06.714035+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9608.0, + "average_temperature": 33.0333, + "experience_temperature": 19.0533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T07:10:06.327163+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9624.0, + "average_temperature": 32.9333, + "experience_temperature": 18.9533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T07:20:07.068912+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9644.0, + "average_temperature": 33.0667, + "experience_temperature": 19.0667, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T07:30:06.142690+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9659.0, + "average_temperature": 33.3667, + "experience_temperature": 19.3867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T07:40:06.183878+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9674.0, + "average_temperature": 33.3333, + "experience_temperature": 19.3533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T07:50:07.004584+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9695.0, + "average_temperature": 33.5, + "experience_temperature": 19.52, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T08:00:11.949526+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9711.0, + "average_temperature": 33.5333, + "experience_temperature": 19.5533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T08:10:07.482144+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9731.0, + "average_temperature": 33.6333, + "experience_temperature": 19.6533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T08:20:06.339752+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9731.0, + "average_temperature": 33.6333, + "experience_temperature": 19.6533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T08:30:05.922962+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9764.0, + "average_temperature": 34.0, + "experience_temperature": 20.0, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T08:40:07.097697+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9780.0, + "average_temperature": 33.8667, + "experience_temperature": 19.8867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T08:50:06.466960+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9801.0, + "average_temperature": 33.7333, + "experience_temperature": 19.7333, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T09:00:07.013916+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9817.0, + "average_temperature": 33.8333, + "experience_temperature": 19.8333, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T09:10:07.055542+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9832.0, + "average_temperature": 34.0333, + "experience_temperature": 20.0533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T09:20:08.253978+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9854.0, + "average_temperature": 34.1333, + "experience_temperature": 20.1533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T09:30:07.109815+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9872.0, + "average_temperature": 34.1333, + "experience_temperature": 20.1533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T09:40:08.418300+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9887.0, + "average_temperature": 33.8667, + "experience_temperature": 19.8867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T09:50:09.899053+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9908.0, + "average_temperature": 33.9, + "experience_temperature": 19.92, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T10:00:14.985699+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9940.0, + "average_temperature": 34.2333, + "experience_temperature": 20.2333, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T10:10:07.457898+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9956.0, + "average_temperature": 34.1333, + "experience_temperature": 20.1533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T10:20:09.660060+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 9956.0, + "average_temperature": 34.1333, + "experience_temperature": 20.1533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T10:30:06.875943+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 10047.0, + "average_temperature": 35.1667, + "experience_temperature": 21.1867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T10:40:06.936237+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 10079.0, + "average_temperature": 34.4333, + "experience_temperature": 20.4533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T10:50:06.796129+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 10110.0, + "average_temperature": 34.4667, + "experience_temperature": 20.4867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T11:00:08.603715+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 10123.0, + "average_temperature": 34.4333, + "experience_temperature": 20.4533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T11:50:06.787110+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 10123.0, + "average_temperature": 34.4333, + "experience_temperature": 20.4533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T12:00:07.142896+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 71.4, + "water_total": 10123.0, + "average_temperature": 37.7333, + "experience_temperature": 38.0133, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T12:10:06.549310+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 71.4, + "water_total": 10123.0, + "average_temperature": 37.7333, + "experience_temperature": 38.0133, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T12:20:07.591083+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 71.4, + "water_total": 10123.0, + "average_temperature": 37.7333, + "experience_temperature": 38.0133, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T12:30:08.493060+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.4, + "humidity": 70.7, + "water_total": 10123.0, + "average_temperature": 36.6733, + "experience_temperature": 33.88, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T12:40:06.129702+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.1, + "humidity": 69.3, + "water_total": 10439.0, + "average_temperature": 35.5, + "experience_temperature": 34.6267, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T12:50:06.870176+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.4, + "humidity": 68.7, + "water_total": 10470.0, + "average_temperature": 35.6667, + "experience_temperature": 32.4733, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T13:00:06.528646+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.4, + "humidity": 70.1, + "water_total": 10502.0, + "average_temperature": 35.8, + "experience_temperature": 32.8867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T13:10:06.347281+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.1, + "humidity": 71.1, + "water_total": 10526.0, + "average_temperature": 35.5, + "experience_temperature": 34.9867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T13:20:06.710103+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.4, + "humidity": 69.9, + "water_total": 10526.0, + "average_temperature": 35.5333, + "experience_temperature": 32.58, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T13:30:07.819520+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.3, + "humidity": 68.8, + "water_total": 10581.0, + "average_temperature": 35.5333, + "experience_temperature": 33.0933, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T13:40:06.163387+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 71.0, + "water_total": 10605.0, + "average_temperature": 35.4333, + "experience_temperature": 35.6333, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T13:50:06.119984+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.5, + "humidity": 69.1, + "water_total": 10630.0, + "average_temperature": 35.5333, + "experience_temperature": 31.6867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T14:10:06.463004+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 71.8, + "water_total": 10678.0, + "average_temperature": 35.5, + "experience_temperature": 35.86, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T14:20:06.695995+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.1, + "humidity": 71.3, + "water_total": 10710.0, + "average_temperature": 35.5, + "experience_temperature": 35.0267, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T14:30:08.341087+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 71.5, + "water_total": 10741.0, + "average_temperature": 35.4, + "experience_temperature": 35.7, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T14:40:06.887370+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.1, + "humidity": 70.9, + "water_total": 10769.0, + "average_temperature": 35.4333, + "experience_temperature": 34.88, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T14:50:05.867125+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.1, + "humidity": 72.9, + "water_total": 10797.0, + "average_temperature": 35.3667, + "experience_temperature": 35.2133, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T15:10:07.619207+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 71.8, + "water_total": 10850.0, + "average_temperature": 35.0, + "experience_temperature": 35.36, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T15:20:08.193835+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 72.9, + "water_total": 10873.0, + "average_temperature": 34.9333, + "experience_temperature": 35.5133, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T15:30:06.095046+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 73.2, + "water_total": 10901.0, + "average_temperature": 34.6667, + "experience_temperature": 35.3067, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T15:40:06.611031+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 73.2, + "water_total": 10901.0, + "average_temperature": 34.6667, + "experience_temperature": 35.3067, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T15:50:06.773290+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 74.9, + "water_total": 10945.0, + "average_temperature": 34.3667, + "experience_temperature": 35.3467, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T16:10:07.423455+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 76.2, + "water_total": 10992.0, + "average_temperature": 34.0333, + "experience_temperature": 35.2733, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T16:20:06.653351+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 75.5, + "water_total": 11013.0, + "average_temperature": 34.0667, + "experience_temperature": 35.1667, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T16:30:07.433352+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 77.0, + "water_total": 11039.0, + "average_temperature": 34.1667, + "experience_temperature": 35.5667, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T16:40:07.659157+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 77.1, + "water_total": 11062.0, + "average_temperature": 33.9667, + "experience_temperature": 35.3867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T16:50:06.518347+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 77.6, + "water_total": 11090.0, + "average_temperature": 34.0667, + "experience_temperature": 35.5867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T17:10:06.414307+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 75.7, + "water_total": 17.0, + "average_temperature": 33.9667, + "experience_temperature": 35.1067, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T17:20:06.148983+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 76.4, + "water_total": 41.0, + "average_temperature": 33.8, + "experience_temperature": 35.08, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T17:30:06.048873+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 77.1, + "water_total": 64.0, + "average_temperature": 33.8667, + "experience_temperature": 35.2867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T17:40:07.803721+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 77.7, + "water_total": 80.0, + "average_temperature": 33.5333, + "experience_temperature": 35.0733, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T17:50:05.995785+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 80.4, + "water_total": 108.0, + "average_temperature": 33.5, + "experience_temperature": 35.58, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T18:00:06.090898+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 80.4, + "water_total": 108.0, + "average_temperature": 33.5, + "experience_temperature": 35.58, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T18:10:06.353123+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 81.3, + "water_total": 149.0, + "average_temperature": 33.0, + "experience_temperature": 35.26, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T18:20:05.860686+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 81.6, + "water_total": 166.0, + "average_temperature": 32.9667, + "experience_temperature": 35.2867, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T18:30:05.593998+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 83.1, + "water_total": 196.0, + "average_temperature": 33.0, + "experience_temperature": 35.62, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T18:40:05.925673+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 82.8, + "water_total": 212.0, + "average_temperature": 32.5333, + "experience_temperature": 35.0933, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T18:50:07.018467+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 84.4, + "water_total": 236.0, + "average_temperature": 32.5667, + "experience_temperature": 35.4467, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T19:00:06.541957+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 84.6, + "water_total": 257.0, + "average_temperature": 32.6, + "experience_temperature": 35.52, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T19:10:06.339803+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 84.7, + "water_total": 282.0, + "average_temperature": 32.7, + "experience_temperature": 35.64, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T19:20:05.753038+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 84.7, + "water_total": 282.0, + "average_temperature": 32.7, + "experience_temperature": 35.64, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T19:30:06.245148+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 85.0, + "water_total": 326.0, + "average_temperature": 32.5, + "experience_temperature": 35.5, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T19:40:06.685007+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 85.8, + "water_total": 348.0, + "average_temperature": 32.4333, + "experience_temperature": 35.5933, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T19:50:06.638436+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 85.9, + "water_total": 364.0, + "average_temperature": 32.4, + "experience_temperature": 35.58, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T20:00:06.642844+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 84.5, + "water_total": 390.0, + "average_temperature": 32.3667, + "experience_temperature": 35.2667, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T20:10:08.314904+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 85.2, + "water_total": 407.0, + "average_temperature": 32.1667, + "experience_temperature": 35.2067, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T20:20:06.054458+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 85.5, + "water_total": 424.0, + "average_temperature": 32.1333, + "experience_temperature": 35.2333, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T20:30:05.717999+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 85.5, + "water_total": 438.0, + "average_temperature": 32.0333, + "experience_temperature": 35.1333, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T20:40:05.606502+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 86.2, + "water_total": 452.0, + "average_temperature": 32.1333, + "experience_temperature": 35.3733, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T20:50:06.419420+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 87.4, + "water_total": 475.0, + "average_temperature": 31.9667, + "experience_temperature": 35.4467, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T21:00:07.441496+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 85.7, + "water_total": 489.0, + "average_temperature": 31.8667, + "experience_temperature": 35.0067, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T21:10:06.595979+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 85.7, + "water_total": 510.0, + "average_temperature": 31.8333, + "experience_temperature": 34.9733, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T21:20:06.848906+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 85.8, + "water_total": 522.0, + "average_temperature": 31.7333, + "experience_temperature": 34.8933, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T21:30:06.722032+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 86.9, + "water_total": 543.0, + "average_temperature": 31.6333, + "experience_temperature": 35.0133, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T21:40:06.167965+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 85.8, + "water_total": 554.0, + "average_temperature": 31.5667, + "experience_temperature": 34.7267, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T21:50:07.325284+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 87.0, + "water_total": 563.0, + "average_temperature": 31.5333, + "experience_temperature": 34.9333, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T22:00:07.668699+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 86.7, + "water_total": 575.0, + "average_temperature": 31.3667, + "experience_temperature": 34.7067, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T22:10:06.681050+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 86.8, + "water_total": 585.0, + "average_temperature": 31.3, + "experience_temperature": 34.66, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T22:20:06.646618+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 86.4, + "water_total": 602.0, + "average_temperature": 31.2, + "experience_temperature": 34.48, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T22:30:06.154736+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 87.1, + "water_total": 608.0, + "average_temperature": 31.2333, + "experience_temperature": 34.6533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T22:40:06.273312+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 87.0, + "water_total": 618.0, + "average_temperature": 31.1667, + "experience_temperature": 34.5667, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T22:50:06.093765+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 86.8, + "water_total": 628.0, + "average_temperature": 31.0333, + "experience_temperature": 34.3933, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T23:00:06.357211+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 87.4, + "water_total": 639.0, + "average_temperature": 30.9, + "experience_temperature": 34.38, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T23:10:06.187593+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 87.6, + "water_total": 647.0, + "average_temperature": 30.7333, + "experience_temperature": 34.2533, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T23:20:08.066162+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 87.3, + "water_total": 654.0, + "average_temperature": 30.4667, + "experience_temperature": 33.9267, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T23:30:06.705902+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 89.2, + "water_total": 668.0, + "average_temperature": 30.9333, + "experience_temperature": 34.7733, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T23:40:05.849870+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 86.8, + "water_total": 674.0, + "average_temperature": 32.8, + "experience_temperature": 36.16, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-26T23:50:06.330112+07:00", + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 85.9, + "water_total": 681.0, + "average_temperature": 32.7333, + "experience_temperature": 35.9133, + "chill_factor": 7.3333 + }, + { + "timestamp": "2026-05-27T00:00:06.358776+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 85.0, + "water_total": 683.0, + "average_temperature": 32.0, + "experience_temperature": 35.0, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T00:10:06.254963+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.6, + "water_total": 688.0, + "average_temperature": 31.7667, + "experience_temperature": 35.0867, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T00:20:06.225480+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.5, + "water_total": 694.0, + "average_temperature": 31.3, + "experience_temperature": 34.6, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T00:30:06.749642+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.7, + "water_total": 701.0, + "average_temperature": 31.0, + "experience_temperature": 34.34, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T00:40:05.801285+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 87.4, + "water_total": 710.0, + "average_temperature": 30.8, + "experience_temperature": 34.28, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T00:50:05.826071+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 89.4, + "water_total": 717.0, + "average_temperature": 31.3333, + "experience_temperature": 35.2133, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T01:00:05.893912+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.2, + "water_total": 721.0, + "average_temperature": 31.6333, + "experience_temperature": 34.8733, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T01:10:06.200541+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 85.6, + "water_total": 733.0, + "average_temperature": 31.1333, + "experience_temperature": 34.2533, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T01:20:06.470308+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 85.5, + "water_total": 737.0, + "average_temperature": 30.8, + "experience_temperature": 33.9, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T01:30:06.272904+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.1, + "water_total": 744.0, + "average_temperature": 30.6667, + "experience_temperature": 33.8867, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T01:40:06.149306+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.6, + "water_total": 747.0, + "average_temperature": 30.5667, + "experience_temperature": 33.8867, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T01:50:07.008763+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 87.8, + "water_total": 749.0, + "average_temperature": 32.1667, + "experience_temperature": 35.7267, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T02:00:05.992248+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.8, + "water_total": 760.0, + "average_temperature": 32.4, + "experience_temperature": 35.76, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T02:10:07.153808+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.5, + "water_total": 770.0, + "average_temperature": 31.9333, + "experience_temperature": 35.2333, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T02:20:05.995105+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.0, + "water_total": 778.0, + "average_temperature": 31.6333, + "experience_temperature": 34.8333, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T02:30:06.603877+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.3, + "water_total": 779.0, + "average_temperature": 31.2333, + "experience_temperature": 34.4933, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T02:40:06.185686+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 87.3, + "water_total": 784.0, + "average_temperature": 31.3, + "experience_temperature": 34.76, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T02:50:05.690482+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.1, + "water_total": 789.0, + "average_temperature": 31.0, + "experience_temperature": 34.22, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T03:00:06.740488+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 89.2, + "water_total": 793.0, + "average_temperature": 31.7333, + "experience_temperature": 35.5733, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T03:10:05.638661+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.0, + "water_total": 798.0, + "average_temperature": 32.0333, + "experience_temperature": 35.2333, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T03:20:06.207495+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.3, + "water_total": 803.0, + "average_temperature": 31.5, + "experience_temperature": 34.76, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T03:30:06.653363+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 87.3, + "water_total": 806.0, + "average_temperature": 31.0, + "experience_temperature": 34.46, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T03:40:07.825216+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 87.3, + "water_total": 810.0, + "average_temperature": 30.8667, + "experience_temperature": 34.3267, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T03:50:06.970911+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 89.3, + "water_total": 812.0, + "average_temperature": 31.4333, + "experience_temperature": 35.2933, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T04:00:06.165990+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 88.3, + "water_total": 816.0, + "average_temperature": 32.2, + "experience_temperature": 35.86, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T04:10:09.041503+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.2, + "water_total": 816.0, + "average_temperature": 31.6667, + "experience_temperature": 34.9067, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T04:20:07.631795+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 85.7, + "water_total": 818.0, + "average_temperature": 31.3667, + "experience_temperature": 34.5067, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T04:30:06.451953+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.2, + "water_total": 819.0, + "average_temperature": 31.1667, + "experience_temperature": 34.4067, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T04:40:06.127597+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.4, + "water_total": 822.0, + "average_temperature": 31.0, + "experience_temperature": 34.28, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T04:50:06.256152+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.7, + "water_total": 825.0, + "average_temperature": 31.0, + "experience_temperature": 34.34, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T05:00:06.276607+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 87.3, + "water_total": 829.0, + "average_temperature": 30.9, + "experience_temperature": 34.36, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T05:10:07.197729+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 87.1, + "water_total": 829.0, + "average_temperature": 30.5333, + "experience_temperature": 33.9533, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T05:20:06.172678+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 89.5, + "water_total": 829.0, + "average_temperature": 31.4667, + "experience_temperature": 35.3667, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T05:30:06.690391+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.7, + "water_total": 829.0, + "average_temperature": 32.7, + "experience_temperature": 36.04, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T05:40:06.651610+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.2, + "water_total": 830.0, + "average_temperature": 32.1, + "experience_temperature": 35.34, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T05:50:09.002687+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.6, + "water_total": 830.0, + "average_temperature": 31.7333, + "experience_temperature": 35.0533, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T06:00:06.547644+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 87.3, + "water_total": 830.0, + "average_temperature": 32.7667, + "experience_temperature": 36.2267, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T06:10:06.327882+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 82.7, + "water_total": 834.0, + "average_temperature": 32.1667, + "experience_temperature": 34.7067, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T06:20:06.117856+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 82.7, + "water_total": 834.0, + "average_temperature": 32.1667, + "experience_temperature": 34.7067, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T06:30:07.075684+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 90.0, + "water_total": 835.0, + "average_temperature": 32.4667, + "experience_temperature": 36.4667, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T06:40:06.306003+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 83.8, + "water_total": 835.0, + "average_temperature": 32.4333, + "experience_temperature": 35.1933, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T06:50:07.334849+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.0, + "water_total": 835.0, + "average_temperature": 32.0, + "experience_temperature": 35.2, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T07:00:06.722083+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.4, + "water_total": 835.0, + "average_temperature": 31.9667, + "experience_temperature": 35.2467, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T07:10:06.322745+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.5, + "water_total": 836.0, + "average_temperature": 31.9, + "experience_temperature": 35.2, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T07:20:06.140896+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 87.2, + "water_total": 838.0, + "average_temperature": 31.9333, + "experience_temperature": 35.3733, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T07:30:06.658449+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 87.4, + "water_total": 838.0, + "average_temperature": 32.2333, + "experience_temperature": 35.7133, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T07:40:06.138314+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 86.9, + "water_total": 840.0, + "average_temperature": 32.6, + "experience_temperature": 35.98, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T07:50:07.352128+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 84.8, + "water_total": 845.0, + "average_temperature": 32.8, + "experience_temperature": 35.76, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T08:00:06.013418+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 84.8, + "water_total": 845.0, + "average_temperature": 32.8, + "experience_temperature": 35.76, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T08:10:06.379288+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 81.9, + "water_total": 865.0, + "average_temperature": 33.1, + "experience_temperature": 35.48, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T08:20:05.946989+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 81.9, + "water_total": 865.0, + "average_temperature": 33.1, + "experience_temperature": 35.48, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T08:30:07.013206+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 81.4, + "water_total": 915.0, + "average_temperature": 33.2667, + "experience_temperature": 35.5467, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T08:40:07.136960+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 81.9, + "water_total": 951.0, + "average_temperature": 33.2, + "experience_temperature": 35.58, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T08:50:07.289851+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 79.3, + "water_total": 979.0, + "average_temperature": 33.4, + "experience_temperature": 35.26, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T09:00:07.066893+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 78.6, + "water_total": 1014.0, + "average_temperature": 33.3667, + "experience_temperature": 35.0867, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T09:10:06.437716+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 78.4, + "water_total": 1046.0, + "average_temperature": 33.6333, + "experience_temperature": 35.3133, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T09:20:06.536995+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 77.8, + "water_total": 1080.0, + "average_temperature": 33.7, + "experience_temperature": 35.26, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T09:30:06.081926+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.1, + "humidity": 76.2, + "water_total": 1104.0, + "average_temperature": 33.8, + "experience_temperature": 34.3233, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T09:40:06.005290+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.2, + "humidity": 72.8, + "water_total": 1142.0, + "average_temperature": 33.9667, + "experience_temperature": 33.0933, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T09:50:06.597545+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 74.6, + "water_total": 1184.0, + "average_temperature": 34.4667, + "experience_temperature": 35.3867, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T10:00:06.381164+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.2, + "humidity": 70.9, + "water_total": 1215.0, + "average_temperature": 33.7333, + "experience_temperature": 32.48, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T10:10:05.704175+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 71.6, + "water_total": 1250.0, + "average_temperature": 33.8667, + "experience_temperature": 34.1867, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T10:20:06.902490+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 71.0, + "water_total": 1282.0, + "average_temperature": 34.3, + "experience_temperature": 34.5, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T10:30:07.070650+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 71.2, + "water_total": 1316.0, + "average_temperature": 34.4, + "experience_temperature": 34.64, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T10:40:07.055251+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 67.6, + "water_total": 1350.0, + "average_temperature": 34.3333, + "experience_temperature": 33.8533, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T10:50:07.364979+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 67.2, + "water_total": 1392.0, + "average_temperature": 34.8, + "experience_temperature": 34.24, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T11:00:06.117320+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 66.1, + "water_total": 1434.0, + "average_temperature": 34.7667, + "experience_temperature": 33.9867, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T11:10:08.621325+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.3, + "humidity": 65.6, + "water_total": 1479.0, + "average_temperature": 35.0, + "experience_temperature": 31.97, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T11:20:07.590694+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.1, + "humidity": 66.8, + "water_total": 1520.0, + "average_temperature": 34.5667, + "experience_temperature": 33.21, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T11:30:06.736006+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.1, + "humidity": 66.8, + "water_total": 1558.0, + "average_temperature": 34.1333, + "experience_temperature": 32.7767, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T11:40:06.652816+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.2, + "humidity": 67.4, + "water_total": 1584.0, + "average_temperature": 34.7, + "experience_temperature": 32.7467, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T11:50:07.533971+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.2, + "humidity": 65.1, + "water_total": 1597.0, + "average_temperature": 34.9333, + "experience_temperature": 32.52, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T12:00:06.268647+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.6, + "humidity": 65.1, + "water_total": 1603.0, + "average_temperature": 34.9, + "experience_temperature": 29.62, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T12:10:06.746491+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.6, + "humidity": 65.2, + "water_total": 1606.0, + "average_temperature": 34.7667, + "experience_temperature": 29.5067, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T12:20:06.462997+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.6, + "humidity": 66.9, + "water_total": 1631.0, + "average_temperature": 34.7667, + "experience_temperature": 29.8467, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T12:30:06.417278+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.3, + "humidity": 64.9, + "water_total": 1656.0, + "average_temperature": 34.7, + "experience_temperature": 31.53, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T12:40:07.753848+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.7, + "humidity": 66.1, + "water_total": 1692.0, + "average_temperature": 34.7667, + "experience_temperature": 28.97, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T12:50:06.090168+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.2, + "humidity": 67.0, + "water_total": 1722.0, + "average_temperature": 34.7333, + "experience_temperature": 32.7, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T13:00:08.684562+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.2, + "humidity": 66.7, + "water_total": 1748.0, + "average_temperature": 34.5333, + "experience_temperature": 32.44, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T13:10:06.495318+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.3, + "humidity": 66.2, + "water_total": 1780.0, + "average_temperature": 34.5333, + "experience_temperature": 31.6233, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T13:20:07.656344+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.6, + "humidity": 66.6, + "water_total": 1804.0, + "average_temperature": 34.7667, + "experience_temperature": 29.7867, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T13:30:08.716121+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.7, + "humidity": 64.5, + "water_total": 1832.0, + "average_temperature": 34.8667, + "experience_temperature": 28.75, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T13:40:06.914929+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.5, + "humidity": 64.5, + "water_total": 1863.0, + "average_temperature": 35.2, + "experience_temperature": 30.5167, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T13:50:06.318709+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.6, + "humidity": 64.6, + "water_total": 1887.0, + "average_temperature": 35.1, + "experience_temperature": 29.72, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T14:10:09.157233+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.6, + "humidity": 67.0, + "water_total": 1938.0, + "average_temperature": 34.7333, + "experience_temperature": 29.8333, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T14:20:07.627630+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.2, + "humidity": 67.7, + "water_total": 1968.0, + "average_temperature": 34.6333, + "experience_temperature": 32.74, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T14:30:07.889873+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.4, + "humidity": 68.2, + "water_total": 2000.0, + "average_temperature": 34.7333, + "experience_temperature": 31.5067, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T14:40:06.355267+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.5, + "humidity": 66.4, + "water_total": 2025.0, + "average_temperature": 34.7333, + "experience_temperature": 30.43, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T14:50:06.439418+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.3, + "humidity": 66.2, + "water_total": 2055.0, + "average_temperature": 34.6667, + "experience_temperature": 31.7567, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T15:10:06.268926+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.2, + "humidity": 68.8, + "water_total": 2110.0, + "average_temperature": 34.6, + "experience_temperature": 32.9267, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T15:20:07.719377+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.3, + "humidity": 67.5, + "water_total": 2137.0, + "average_temperature": 34.6333, + "experience_temperature": 31.9833, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T15:30:06.736048+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.2, + "humidity": 68.3, + "water_total": 2165.0, + "average_temperature": 34.1667, + "experience_temperature": 32.3933, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T15:40:06.690144+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.3, + "humidity": 68.7, + "water_total": 2196.0, + "average_temperature": 33.6667, + "experience_temperature": 31.2567, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T15:50:07.116250+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.2, + "humidity": 69.1, + "water_total": 2218.0, + "average_temperature": 33.6333, + "experience_temperature": 32.02, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T16:10:06.868234+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.2, + "humidity": 70.3, + "water_total": 2274.0, + "average_temperature": 33.5, + "experience_temperature": 32.1267, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T16:20:06.365660+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.2, + "humidity": 71.5, + "water_total": 2295.0, + "average_temperature": 33.6, + "experience_temperature": 32.4667, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T16:30:09.035473+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.1, + "humidity": 69.7, + "water_total": 2316.0, + "average_temperature": 33.4, + "experience_temperature": 32.6233, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T16:40:07.331641+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.1, + "humidity": 71.9, + "water_total": 2346.0, + "average_temperature": 34.0333, + "experience_temperature": 33.6967, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T16:50:07.350257+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 71.7, + "water_total": 2371.0, + "average_temperature": 33.4333, + "experience_temperature": 33.7733, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T17:10:07.931092+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 71.5, + "water_total": 20.0, + "average_temperature": 33.4, + "experience_temperature": 33.7, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T17:20:08.181727+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 72.3, + "water_total": 51.0, + "average_temperature": 33.1333, + "experience_temperature": 33.5933, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T17:30:07.114958+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 73.1, + "water_total": 73.0, + "average_temperature": 33.1333, + "experience_temperature": 33.7533, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T17:40:06.879633+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 74.6, + "water_total": 105.0, + "average_temperature": 33.0333, + "experience_temperature": 33.9533, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T17:50:09.183252+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 75.2, + "water_total": 126.0, + "average_temperature": 32.7667, + "experience_temperature": 33.8067, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T18:00:08.027684+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 76.1, + "water_total": 153.0, + "average_temperature": 32.7667, + "experience_temperature": 33.9867, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T18:10:06.102068+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 76.6, + "water_total": 174.0, + "average_temperature": 32.5, + "experience_temperature": 33.82, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T18:20:07.067826+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 77.6, + "water_total": 196.0, + "average_temperature": 32.4333, + "experience_temperature": 33.9533, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T18:30:06.745096+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 79.5, + "water_total": 219.0, + "average_temperature": 32.3, + "experience_temperature": 34.2, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T18:40:06.690772+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 79.7, + "water_total": 239.0, + "average_temperature": 32.2333, + "experience_temperature": 34.1733, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T18:50:07.213091+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 79.8, + "water_total": 263.0, + "average_temperature": 32.1667, + "experience_temperature": 34.1267, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T19:00:11.215176+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 79.3, + "water_total": 287.0, + "average_temperature": 32.0333, + "experience_temperature": 33.8933, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T19:10:08.122375+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 80.1, + "water_total": 299.0, + "average_temperature": 31.7333, + "experience_temperature": 33.7533, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T19:20:06.942097+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 80.0, + "water_total": 322.0, + "average_temperature": 31.6667, + "experience_temperature": 33.6667, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T19:30:12.280164+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 80.5, + "water_total": 333.0, + "average_temperature": 31.5333, + "experience_temperature": 33.6333, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T19:40:07.470382+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 80.4, + "water_total": 339.0, + "average_temperature": 31.4333, + "experience_temperature": 33.5133, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T19:50:07.470889+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 81.6, + "water_total": 346.0, + "average_temperature": 31.3333, + "experience_temperature": 33.6533, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T20:00:07.182172+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 82.3, + "water_total": 346.0, + "average_temperature": 31.3, + "experience_temperature": 33.76, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T20:10:06.701858+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 81.5, + "water_total": 347.0, + "average_temperature": 31.2, + "experience_temperature": 33.5, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T20:20:07.116011+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 81.5, + "water_total": 348.0, + "average_temperature": 31.0667, + "experience_temperature": 33.3667, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T20:30:09.219036+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 81.7, + "water_total": 351.0, + "average_temperature": 32.5, + "experience_temperature": 34.84, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T20:40:07.360939+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 80.4, + "water_total": 352.0, + "average_temperature": 31.9333, + "experience_temperature": 34.0133, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T20:50:06.887489+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 80.6, + "water_total": 355.0, + "average_temperature": 31.7333, + "experience_temperature": 33.8533, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T21:00:07.798133+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 80.7, + "water_total": 358.0, + "average_temperature": 31.4333, + "experience_temperature": 33.5733, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T21:10:06.778828+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 80.8, + "water_total": 360.0, + "average_temperature": 31.2667, + "experience_temperature": 33.4267, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T21:20:07.286283+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 80.8, + "water_total": 360.0, + "average_temperature": 31.2667, + "experience_temperature": 33.4267, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T21:30:08.240753+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 80.6, + "water_total": 369.0, + "average_temperature": 32.2667, + "experience_temperature": 34.3867, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T21:40:09.092179+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 80.5, + "water_total": 376.0, + "average_temperature": 31.7667, + "experience_temperature": 33.8667, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T21:50:11.084788+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 80.9, + "water_total": 387.0, + "average_temperature": 31.4, + "experience_temperature": 33.58, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T22:00:06.610001+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 81.4, + "water_total": 396.0, + "average_temperature": 31.2667, + "experience_temperature": 33.5467, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T22:10:06.932352+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 83.6, + "water_total": 408.0, + "average_temperature": 31.4667, + "experience_temperature": 34.1867, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T22:20:06.611299+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 80.7, + "water_total": 434.0, + "average_temperature": 32.3667, + "experience_temperature": 34.5067, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T22:30:07.188905+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 80.8, + "water_total": 451.0, + "average_temperature": 31.7667, + "experience_temperature": 33.9267, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T22:40:06.933397+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 81.0, + "water_total": 459.0, + "average_temperature": 31.3667, + "experience_temperature": 33.5667, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T22:50:06.917792+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 80.9, + "water_total": 483.0, + "average_temperature": 31.4, + "experience_temperature": 33.58, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T23:00:11.163159+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 84.2, + "water_total": 492.0, + "average_temperature": 31.2667, + "experience_temperature": 34.1067, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T23:10:07.250866+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 79.7, + "water_total": 511.0, + "average_temperature": 32.1, + "experience_temperature": 34.04, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T23:20:08.876365+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 80.5, + "water_total": 527.0, + "average_temperature": 31.5, + "experience_temperature": 33.6, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T23:30:08.035657+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 83.0, + "water_total": 552.0, + "average_temperature": 31.2333, + "experience_temperature": 33.8333, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T23:40:08.855333+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 80.4, + "water_total": 560.0, + "average_temperature": 32.1333, + "experience_temperature": 34.2133, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-27T23:50:07.308284+07:00", + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 79.9, + "water_total": 582.0, + "average_temperature": 31.5, + "experience_temperature": 33.48, + "chill_factor": 7.1667 + }, + { + "timestamp": "2026-05-28T00:00:06.904526+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 83.1, + "water_total": 596.0, + "average_temperature": 31.3, + "experience_temperature": 33.92, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T00:10:05.825038+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.7, + "water_total": 610.0, + "average_temperature": 31.3667, + "experience_temperature": 33.3067, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T00:20:06.005672+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 81.6, + "water_total": 625.0, + "average_temperature": 30.7333, + "experience_temperature": 33.0533, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T00:30:07.408173+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 80.3, + "water_total": 643.0, + "average_temperature": 31.8667, + "experience_temperature": 33.9267, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T00:40:05.890320+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.7, + "water_total": 664.0, + "average_temperature": 31.1, + "experience_temperature": 33.04, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T00:50:06.121259+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 82.1, + "water_total": 684.0, + "average_temperature": 31.6, + "experience_temperature": 34.02, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T01:00:06.025736+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.7, + "water_total": 706.0, + "average_temperature": 31.2, + "experience_temperature": 33.14, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T01:10:08.522681+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 82.5, + "water_total": 726.0, + "average_temperature": 31.0667, + "experience_temperature": 33.5667, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T01:20:09.770352+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 81.0, + "water_total": 748.0, + "average_temperature": 31.5667, + "experience_temperature": 33.7667, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T01:30:06.190510+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.7, + "water_total": 762.0, + "average_temperature": 30.7667, + "experience_temperature": 32.7067, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T01:40:08.363013+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.6, + "water_total": 780.0, + "average_temperature": 31.8, + "experience_temperature": 33.72, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T01:50:05.729600+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.6, + "water_total": 780.0, + "average_temperature": 31.8, + "experience_temperature": 33.72, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T02:00:06.132141+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 81.5, + "water_total": 821.0, + "average_temperature": 31.7333, + "experience_temperature": 34.0333, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T02:10:05.898271+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 78.7, + "water_total": 839.0, + "average_temperature": 31.2, + "experience_temperature": 32.94, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T02:20:07.138873+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 81.4, + "water_total": 868.0, + "average_temperature": 30.9333, + "experience_temperature": 33.2133, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T02:30:05.121275+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 83.4, + "water_total": 904.0, + "average_temperature": 31.6, + "experience_temperature": 34.28, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T02:40:08.979583+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.8, + "water_total": 935.0, + "average_temperature": 31.1333, + "experience_temperature": 33.0933, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T02:50:05.458305+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 83.1, + "water_total": 955.0, + "average_temperature": 31.5667, + "experience_temperature": 34.1867, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T03:00:08.882811+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.8, + "water_total": 983.0, + "average_temperature": 31.2667, + "experience_temperature": 33.2267, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T03:10:05.952781+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.3, + "water_total": 1011.0, + "average_temperature": 30.7333, + "experience_temperature": 32.5933, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T03:20:09.039035+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 82.0, + "water_total": 1031.0, + "average_temperature": 31.5, + "experience_temperature": 33.9, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T03:30:05.717861+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 80.6, + "water_total": 1046.0, + "average_temperature": 30.9, + "experience_temperature": 33.02, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T03:40:06.482216+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 83.1, + "water_total": 1074.0, + "average_temperature": 31.5333, + "experience_temperature": 34.1533, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T03:50:05.709627+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.3, + "water_total": 1093.0, + "average_temperature": 30.5667, + "experience_temperature": 32.4267, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T04:00:06.846158+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 81.7, + "water_total": 1107.0, + "average_temperature": 31.6667, + "experience_temperature": 34.0067, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T04:10:07.967440+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 78.5, + "water_total": 1138.0, + "average_temperature": 30.8333, + "experience_temperature": 32.5333, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T04:20:06.184193+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 82.1, + "water_total": 1159.0, + "average_temperature": 31.7667, + "experience_temperature": 34.1867, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T04:30:08.342192+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 78.8, + "water_total": 1180.0, + "average_temperature": 30.9, + "experience_temperature": 32.66, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T04:40:07.835050+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 81.1, + "water_total": 1210.0, + "average_temperature": 31.7, + "experience_temperature": 33.92, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T04:50:06.288625+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 78.4, + "water_total": 1235.0, + "average_temperature": 30.9333, + "experience_temperature": 32.6133, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T05:00:08.686593+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 81.2, + "water_total": 1259.0, + "average_temperature": 31.7, + "experience_temperature": 33.94, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T05:10:07.230402+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 78.1, + "water_total": 1285.0, + "average_temperature": 30.9, + "experience_temperature": 32.52, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T05:20:05.566230+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 81.8, + "water_total": 1305.0, + "average_temperature": 31.6333, + "experience_temperature": 33.9933, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T05:30:08.172996+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 78.7, + "water_total": 1329.0, + "average_temperature": 30.7333, + "experience_temperature": 32.4733, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T05:40:05.955703+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 81.7, + "water_total": 1365.0, + "average_temperature": 31.5, + "experience_temperature": 33.84, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T05:50:05.671748+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 82.7, + "water_total": 1392.0, + "average_temperature": 30.8333, + "experience_temperature": 33.3733, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T06:00:08.355580+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 78.3, + "water_total": 1416.0, + "average_temperature": 31.6333, + "experience_temperature": 33.2933, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T06:10:06.639091+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 78.4, + "water_total": 1433.0, + "average_temperature": 30.5333, + "experience_temperature": 32.2133, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T06:20:07.697738+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 81.5, + "water_total": 1463.0, + "average_temperature": 31.3667, + "experience_temperature": 33.6667, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T06:30:05.530483+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.2, + "water_total": 1489.0, + "average_temperature": 30.6333, + "experience_temperature": 32.4733, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T06:40:05.799214+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.4, + "water_total": 1506.0, + "average_temperature": 31.4, + "experience_temperature": 33.28, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T06:50:08.316986+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.6, + "water_total": 1540.0, + "average_temperature": 30.9333, + "experience_temperature": 32.8533, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T07:00:06.651735+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 81.1, + "water_total": 1567.0, + "average_temperature": 30.8, + "experience_temperature": 33.02, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T07:10:06.444859+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 77.5, + "water_total": 1600.0, + "average_temperature": 31.7667, + "experience_temperature": 33.2667, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T07:20:08.667793+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 80.8, + "water_total": 1627.0, + "average_temperature": 31.4333, + "experience_temperature": 33.5933, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T07:30:05.908214+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.2, + "water_total": 1654.0, + "average_temperature": 31.1, + "experience_temperature": 32.94, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T07:40:06.851428+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 81.2, + "water_total": 1685.0, + "average_temperature": 31.1667, + "experience_temperature": 33.4067, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T07:50:06.488574+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 80.0, + "water_total": 1715.0, + "average_temperature": 31.3333, + "experience_temperature": 33.3333, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T08:00:08.155538+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 80.4, + "water_total": 1742.0, + "average_temperature": 31.6, + "experience_temperature": 33.68, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T08:10:10.200901+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 78.0, + "water_total": 1766.0, + "average_temperature": 32.1, + "experience_temperature": 33.7, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T08:20:06.061160+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 78.7, + "water_total": 1794.0, + "average_temperature": 32.2667, + "experience_temperature": 34.0067, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T08:30:08.662188+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 76.4, + "water_total": 1824.0, + "average_temperature": 32.1667, + "experience_temperature": 33.4467, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T08:40:06.227282+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 74.9, + "water_total": 1850.0, + "average_temperature": 32.3333, + "experience_temperature": 33.3133, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T08:50:05.875290+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 76.0, + "water_total": 1887.0, + "average_temperature": 32.3667, + "experience_temperature": 33.5667, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T09:00:06.123233+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 74.6, + "water_total": 1911.0, + "average_temperature": 32.4333, + "experience_temperature": 33.3533, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T09:10:07.057326+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.2, + "humidity": 73.3, + "water_total": 1941.0, + "average_temperature": 32.6333, + "experience_temperature": 31.8933, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T09:20:08.405634+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 72.0, + "water_total": 1966.0, + "average_temperature": 32.8, + "experience_temperature": 33.2, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T09:30:07.084852+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.1, + "humidity": 70.5, + "water_total": 1996.0, + "average_temperature": 32.7667, + "experience_temperature": 32.1667, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T09:40:08.688071+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.2, + "humidity": 69.1, + "water_total": 2024.0, + "average_temperature": 32.7667, + "experience_temperature": 31.1867, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T09:50:06.375487+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.2, + "humidity": 67.7, + "water_total": 2052.0, + "average_temperature": 32.9, + "experience_temperature": 31.04, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T10:00:06.196396+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.2, + "humidity": 69.4, + "water_total": 2086.0, + "average_temperature": 33.3, + "experience_temperature": 31.78, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T10:10:09.534679+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.2, + "humidity": 65.9, + "water_total": 2119.0, + "average_temperature": 33.5667, + "experience_temperature": 31.3467, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T10:20:06.729747+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.2, + "humidity": 66.1, + "water_total": 2144.0, + "average_temperature": 33.8, + "experience_temperature": 31.62, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T10:30:07.359406+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.3, + "humidity": 64.1, + "water_total": 2171.0, + "average_temperature": 34.0, + "experience_temperature": 30.72, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T10:40:08.586666+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.3, + "humidity": 64.5, + "water_total": 2203.0, + "average_temperature": 34.0, + "experience_temperature": 30.8, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T10:50:06.436306+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.2, + "humidity": 62.3, + "water_total": 2233.0, + "average_temperature": 34.0, + "experience_temperature": 31.06, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T11:00:07.298591+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.2, + "humidity": 62.3, + "water_total": 2233.0, + "average_temperature": 34.0, + "experience_temperature": 31.06, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T11:10:06.369905+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.6, + "humidity": 61.5, + "water_total": 2296.0, + "average_temperature": 34.0667, + "experience_temperature": 28.1667, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T11:20:06.806455+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.6, + "humidity": 61.5, + "water_total": 2296.0, + "average_temperature": 34.0667, + "experience_temperature": 28.1667, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T11:30:08.177804+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.8, + "humidity": 58.0, + "water_total": 2358.0, + "average_temperature": 34.4, + "experience_temperature": 26.4, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T11:40:06.826561+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.7, + "humidity": 58.1, + "water_total": 2393.0, + "average_temperature": 34.5, + "experience_temperature": 27.22, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T11:50:08.175482+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.7, + "humidity": 57.5, + "water_total": 2421.0, + "average_temperature": 34.3667, + "experience_temperature": 26.9667, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T12:00:06.780927+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.8, + "humidity": 59.1, + "water_total": 2449.0, + "average_temperature": 34.8, + "experience_temperature": 27.02, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T12:10:06.794047+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.8, + "humidity": 58.2, + "water_total": 2480.0, + "average_temperature": 34.7, + "experience_temperature": 26.74, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T12:20:08.909130+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.7, + "humidity": 58.1, + "water_total": 2510.0, + "average_temperature": 34.7, + "experience_temperature": 27.42, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T12:30:06.889220+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.7, + "humidity": 58.1, + "water_total": 2510.0, + "average_temperature": 34.7, + "experience_temperature": 27.42, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T12:40:06.335873+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.8, + "humidity": 55.9, + "water_total": 2561.0, + "average_temperature": 34.6333, + "experience_temperature": 26.2133, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T12:50:07.216643+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 1.0, + "humidity": 57.1, + "water_total": 2595.0, + "average_temperature": 34.7333, + "experience_temperature": 25.1533, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T13:00:06.390099+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 1.1, + "humidity": 57.8, + "water_total": 2622.0, + "average_temperature": 34.8333, + "experience_temperature": 24.6933, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T13:10:06.557607+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.7, + "humidity": 57.1, + "water_total": 2645.0, + "average_temperature": 34.7667, + "experience_temperature": 27.2867, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T13:20:07.131612+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.6, + "humidity": 54.5, + "water_total": 2675.0, + "average_temperature": 34.5667, + "experience_temperature": 27.2667, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T13:30:07.818617+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 1.0, + "humidity": 55.7, + "water_total": 2704.0, + "average_temperature": 34.8, + "experience_temperature": 24.94, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T13:40:07.664907+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 1.0, + "humidity": 55.2, + "water_total": 2737.0, + "average_temperature": 34.8333, + "experience_temperature": 24.8733, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T13:50:06.479666+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 1.0, + "humidity": 55.2, + "water_total": 2737.0, + "average_temperature": 34.8333, + "experience_temperature": 24.8733, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T14:10:09.788746+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 1.1, + "humidity": 55.6, + "water_total": 2817.0, + "average_temperature": 34.9333, + "experience_temperature": 24.3533, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T14:20:08.794000+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.9, + "humidity": 56.4, + "water_total": 2843.0, + "average_temperature": 34.7667, + "experience_temperature": 25.7467, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T14:30:06.989714+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.6, + "humidity": 57.8, + "water_total": 2871.0, + "average_temperature": 34.5, + "experience_temperature": 27.86, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T14:40:07.411972+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.5, + "humidity": 61.1, + "water_total": 2904.0, + "average_temperature": 34.1, + "experience_temperature": 28.82, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T14:50:08.374139+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.6, + "humidity": 58.6, + "water_total": 2932.0, + "average_temperature": 34.0, + "experience_temperature": 27.52, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T15:10:06.020247+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.6, + "humidity": 59.7, + "water_total": 2990.0, + "average_temperature": 34.5333, + "experience_temperature": 28.2733, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T15:20:06.336886+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.6, + "humidity": 59.5, + "water_total": 3019.0, + "average_temperature": 34.5, + "experience_temperature": 28.2, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T15:30:06.854307+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.6, + "humidity": 63.3, + "water_total": 3046.0, + "average_temperature": 34.3667, + "experience_temperature": 28.8267, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T15:40:06.985888+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.3, + "humidity": 59.9, + "water_total": 3070.0, + "average_temperature": 33.6667, + "experience_temperature": 29.5467, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T15:50:07.773597+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.2, + "humidity": 61.7, + "water_total": 3097.0, + "average_temperature": 33.4333, + "experience_temperature": 30.3733, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T16:10:06.228688+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.2, + "humidity": 66.5, + "water_total": 3150.0, + "average_temperature": 32.6333, + "experience_temperature": 30.5333, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T16:20:06.617743+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.2, + "humidity": 67.6, + "water_total": 3180.0, + "average_temperature": 32.3333, + "experience_temperature": 30.4533, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T16:30:06.329065+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.2, + "humidity": 68.4, + "water_total": 3205.0, + "average_temperature": 32.7667, + "experience_temperature": 31.0467, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T16:40:08.907938+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.1, + "humidity": 68.7, + "water_total": 3234.0, + "average_temperature": 32.7667, + "experience_temperature": 31.8067, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T16:50:05.953279+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.1, + "humidity": 71.0, + "water_total": 3262.0, + "average_temperature": 32.5667, + "experience_temperature": 32.0667, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T17:10:07.134915+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 71.0, + "water_total": 32.0, + "average_temperature": 32.2333, + "experience_temperature": 32.4333, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T17:20:07.220425+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 71.9, + "water_total": 62.0, + "average_temperature": 32.0333, + "experience_temperature": 32.4133, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T17:30:06.218337+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 71.5, + "water_total": 87.0, + "average_temperature": 31.8, + "experience_temperature": 32.1, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T17:40:06.657766+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 71.5, + "water_total": 87.0, + "average_temperature": 31.8, + "experience_temperature": 32.1, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T17:50:10.492574+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 72.8, + "water_total": 139.0, + "average_temperature": 31.6667, + "experience_temperature": 32.2267, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T18:00:06.152505+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 72.8, + "water_total": 139.0, + "average_temperature": 31.6667, + "experience_temperature": 32.2267, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T18:10:06.592056+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 72.8, + "water_total": 205.0, + "average_temperature": 31.4, + "experience_temperature": 31.96, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T18:20:06.333077+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 75.8, + "water_total": 234.0, + "average_temperature": 31.5667, + "experience_temperature": 32.7267, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T18:30:07.236995+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 74.8, + "water_total": 263.0, + "average_temperature": 31.4333, + "experience_temperature": 32.3933, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T18:40:06.183109+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 75.1, + "water_total": 292.0, + "average_temperature": 31.3, + "experience_temperature": 32.32, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T18:50:06.890959+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 77.5, + "water_total": 318.0, + "average_temperature": 31.3667, + "experience_temperature": 32.8667, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T19:00:07.265687+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 77.8, + "water_total": 350.0, + "average_temperature": 31.4, + "experience_temperature": 32.96, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T19:10:06.916635+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 77.4, + "water_total": 383.0, + "average_temperature": 31.2667, + "experience_temperature": 32.7467, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T19:20:06.832569+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 76.8, + "water_total": 411.0, + "average_temperature": 31.1333, + "experience_temperature": 32.4933, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T19:30:06.909875+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 77.4, + "water_total": 440.0, + "average_temperature": 30.9667, + "experience_temperature": 32.4467, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T19:40:06.811920+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 78.4, + "water_total": 460.0, + "average_temperature": 31.1333, + "experience_temperature": 32.8133, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T19:50:06.118142+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 78.9, + "water_total": 487.0, + "average_temperature": 31.0, + "experience_temperature": 32.78, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T20:00:06.713743+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 80.1, + "water_total": 519.0, + "average_temperature": 30.9667, + "experience_temperature": 32.9867, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T20:10:07.314466+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.2, + "water_total": 553.0, + "average_temperature": 30.6, + "experience_temperature": 32.44, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T20:20:07.002632+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 78.8, + "water_total": 581.0, + "average_temperature": 30.6667, + "experience_temperature": 32.4267, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T20:30:06.523766+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 78.9, + "water_total": 604.0, + "average_temperature": 30.4333, + "experience_temperature": 32.2133, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T20:40:06.297660+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.6, + "water_total": 626.0, + "average_temperature": 30.4, + "experience_temperature": 32.32, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T20:50:09.118116+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.4, + "water_total": 653.0, + "average_temperature": 30.1667, + "experience_temperature": 32.0467, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T21:00:06.883594+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 82.9, + "water_total": 679.0, + "average_temperature": 31.2667, + "experience_temperature": 33.8467, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T21:10:06.845521+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.4, + "water_total": 705.0, + "average_temperature": 31.3, + "experience_temperature": 33.18, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T21:20:06.194602+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 78.7, + "water_total": 731.0, + "average_temperature": 30.5333, + "experience_temperature": 32.2733, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T21:30:07.781453+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 80.1, + "water_total": 752.0, + "average_temperature": 30.2, + "experience_temperature": 32.22, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T21:40:06.598768+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 81.0, + "water_total": 775.0, + "average_temperature": 30.5667, + "experience_temperature": 32.7667, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T21:50:06.452334+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.3, + "water_total": 809.0, + "average_temperature": 31.4, + "experience_temperature": 33.26, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T22:00:06.852950+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 80.0, + "water_total": 827.0, + "average_temperature": 30.5333, + "experience_temperature": 32.5333, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T22:10:06.685008+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 80.7, + "water_total": 852.0, + "average_temperature": 30.2333, + "experience_temperature": 32.3733, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T22:20:07.078730+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.8, + "water_total": 878.0, + "average_temperature": 31.4, + "experience_temperature": 33.36, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T22:30:06.721201+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.7, + "water_total": 900.0, + "average_temperature": 30.9667, + "experience_temperature": 32.9067, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T22:40:06.662208+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 80.9, + "water_total": 928.0, + "average_temperature": 30.5, + "experience_temperature": 32.68, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T22:50:07.386317+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 80.6, + "water_total": 955.0, + "average_temperature": 30.5, + "experience_temperature": 32.62, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T23:00:06.920077+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 80.1, + "water_total": 973.0, + "average_temperature": 29.9667, + "experience_temperature": 31.9867, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T23:10:07.445427+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.0, + "water_total": 990.0, + "average_temperature": 31.1667, + "experience_temperature": 32.9667, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T23:20:06.755023+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 80.0, + "water_total": 1012.0, + "average_temperature": 30.3, + "experience_temperature": 32.3, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T23:30:06.721279+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 81.2, + "water_total": 1030.0, + "average_temperature": 30.1333, + "experience_temperature": 32.3733, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T23:40:06.624365+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.2, + "water_total": 1047.0, + "average_temperature": 31.0333, + "experience_temperature": 32.8733, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-28T23:50:06.270665+07:00", + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.8, + "water_total": 1065.0, + "average_temperature": 30.4333, + "experience_temperature": 32.3933, + "chill_factor": 7.0 + }, + { + "timestamp": "2026-05-29T00:00:08.602695+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 82.1, + "water_total": 1083.0, + "average_temperature": 30.6, + "experience_temperature": 33.02, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T00:10:07.381250+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 79.2, + "water_total": 1100.0, + "average_temperature": 30.4333, + "experience_temperature": 32.2733, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T00:20:08.531104+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 80.0, + "water_total": 1117.0, + "average_temperature": 29.8, + "experience_temperature": 31.8, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T00:30:06.048478+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.7, + "water_total": 1135.0, + "average_temperature": 30.3667, + "experience_temperature": 32.1067, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T00:40:06.237967+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 80.1, + "water_total": 1154.0, + "average_temperature": 29.8, + "experience_temperature": 31.82, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T00:50:06.565624+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.8, + "water_total": 1166.0, + "average_temperature": 30.3667, + "experience_temperature": 32.1267, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T01:00:06.554693+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 79.5, + "water_total": 1185.0, + "average_temperature": 29.8, + "experience_temperature": 31.7, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T01:10:06.033389+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.9, + "water_total": 1207.0, + "average_temperature": 30.3, + "experience_temperature": 32.08, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T01:20:06.014420+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 80.0, + "water_total": 1224.0, + "average_temperature": 30.2667, + "experience_temperature": 32.2667, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T01:30:06.482185+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.4, + "water_total": 1242.0, + "average_temperature": 30.0333, + "experience_temperature": 31.7133, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T01:40:06.711073+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 79.5, + "water_total": 1256.0, + "average_temperature": 30.6, + "experience_temperature": 32.5, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T01:50:06.222495+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.7, + "water_total": 1275.0, + "average_temperature": 29.7667, + "experience_temperature": 31.5067, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T02:00:06.098586+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 77.6, + "water_total": 1293.0, + "average_temperature": 30.5333, + "experience_temperature": 32.0533, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T02:10:07.153079+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 79.2, + "water_total": 1321.0, + "average_temperature": 29.8, + "experience_temperature": 31.64, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T02:20:07.531403+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.6, + "water_total": 1358.0, + "average_temperature": 30.7, + "experience_temperature": 32.42, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T02:30:07.029131+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 80.9, + "water_total": 1386.0, + "average_temperature": 29.9333, + "experience_temperature": 32.1133, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T02:40:07.032124+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 77.7, + "water_total": 1414.0, + "average_temperature": 30.4667, + "experience_temperature": 32.0067, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T02:50:06.654298+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 80.1, + "water_total": 1453.0, + "average_temperature": 29.8667, + "experience_temperature": 31.8867, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T03:00:06.239518+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 79.4, + "water_total": 1483.0, + "average_temperature": 30.4333, + "experience_temperature": 32.3133, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T03:10:06.326752+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 79.7, + "water_total": 1511.0, + "average_temperature": 29.7667, + "experience_temperature": 31.7067, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T03:20:06.821129+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.0, + "water_total": 1529.0, + "average_temperature": 31.1333, + "experience_temperature": 32.7333, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T03:30:05.746899+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 79.9, + "water_total": 1574.0, + "average_temperature": 29.9, + "experience_temperature": 31.88, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T03:40:06.676674+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 82.1, + "water_total": 1599.0, + "average_temperature": 30.7667, + "experience_temperature": 33.1867, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T03:50:06.991605+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.5, + "water_total": 1627.0, + "average_temperature": 30.3, + "experience_temperature": 32.0, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T04:00:06.409185+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 79.1, + "water_total": 1650.0, + "average_temperature": 29.8333, + "experience_temperature": 31.6533, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T04:10:06.369531+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 80.4, + "water_total": 1685.0, + "average_temperature": 31.0333, + "experience_temperature": 33.1133, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T04:20:06.232730+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 77.7, + "water_total": 1713.0, + "average_temperature": 29.9, + "experience_temperature": 31.44, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T04:30:06.092055+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 80.4, + "water_total": 1731.0, + "average_temperature": 30.8, + "experience_temperature": 32.88, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T04:40:06.890582+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 77.4, + "water_total": 1754.0, + "average_temperature": 30.0, + "experience_temperature": 31.48, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T04:50:06.160558+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 80.5, + "water_total": 1782.0, + "average_temperature": 30.9, + "experience_temperature": 33.0, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T05:00:06.952569+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.1, + "humidity": 77.3, + "water_total": 1815.0, + "average_temperature": 30.3333, + "experience_temperature": 31.1076, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T05:10:07.640799+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 82.7, + "water_total": 1841.0, + "average_temperature": 30.2333, + "experience_temperature": 32.7733, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T05:20:07.127017+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 76.7, + "water_total": 1876.0, + "average_temperature": 30.5, + "experience_temperature": 31.84, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T05:30:08.407788+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 80.9, + "water_total": 1899.0, + "average_temperature": 30.2, + "experience_temperature": 32.38, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T05:40:06.897728+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 76.2, + "water_total": 1928.0, + "average_temperature": 30.4333, + "experience_temperature": 31.6733, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T05:50:06.888959+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 79.1, + "water_total": 1953.0, + "average_temperature": 29.6, + "experience_temperature": 31.42, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T06:00:05.936017+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 77.6, + "water_total": 1983.0, + "average_temperature": 31.0, + "experience_temperature": 32.52, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T06:10:08.877296+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.9, + "water_total": 2018.0, + "average_temperature": 29.5667, + "experience_temperature": 31.3467, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T06:20:06.375533+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.0, + "water_total": 2043.0, + "average_temperature": 30.7, + "experience_temperature": 32.3, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T06:30:07.345405+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 79.5, + "water_total": 2074.0, + "average_temperature": 30.0667, + "experience_temperature": 31.9667, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T06:40:07.048330+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.2, + "water_total": 2104.0, + "average_temperature": 29.8, + "experience_temperature": 31.44, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T06:50:07.588421+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.2, + "water_total": 2104.0, + "average_temperature": 29.8, + "experience_temperature": 31.44, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T07:00:06.798228+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.1, + "water_total": 2171.0, + "average_temperature": 30.2667, + "experience_temperature": 31.8867, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T07:10:06.863640+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 80.4, + "water_total": 2200.0, + "average_temperature": 29.5, + "experience_temperature": 31.58, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T07:20:07.044488+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.9, + "water_total": 2236.0, + "average_temperature": 31.3667, + "experience_temperature": 33.1467, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T07:30:06.302014+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 79.2, + "water_total": 2270.0, + "average_temperature": 30.8333, + "experience_temperature": 32.6733, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T07:40:06.836089+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 80.0, + "water_total": 2300.0, + "average_temperature": 30.9667, + "experience_temperature": 32.9667, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T07:50:06.513805+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.0, + "water_total": 2316.0, + "average_temperature": 30.8667, + "experience_temperature": 32.4667, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T08:00:11.534324+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 77.4, + "water_total": 2341.0, + "average_temperature": 30.9333, + "experience_temperature": 32.4133, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T08:10:07.340265+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 77.4, + "water_total": 2341.0, + "average_temperature": 30.9333, + "experience_temperature": 32.4133, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T08:20:06.281777+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.9, + "water_total": 2403.0, + "average_temperature": 30.9333, + "experience_temperature": 32.7133, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T08:30:06.647332+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.0, + "water_total": 2436.0, + "average_temperature": 31.0667, + "experience_temperature": 32.6667, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T08:40:07.640228+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.1, + "humidity": 77.8, + "water_total": 2472.0, + "average_temperature": 31.5667, + "experience_temperature": 32.441, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T08:50:07.288846+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.3, + "humidity": 75.4, + "water_total": 2510.0, + "average_temperature": 31.5667, + "experience_temperature": 30.5895, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T09:00:06.903502+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.1, + "humidity": 72.5, + "water_total": 2550.0, + "average_temperature": 31.5333, + "experience_temperature": 31.3476, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T09:10:09.131006+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.2, + "humidity": 72.1, + "water_total": 2583.0, + "average_temperature": 31.7, + "experience_temperature": 30.7486, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T09:20:06.682301+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.2, + "humidity": 72.9, + "water_total": 2611.0, + "average_temperature": 31.8667, + "experience_temperature": 31.0752, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T09:30:06.848890+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.2, + "humidity": 70.1, + "water_total": 2640.0, + "average_temperature": 32.2333, + "experience_temperature": 30.8819, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T09:40:06.288020+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.3, + "humidity": 70.0, + "water_total": 2676.0, + "average_temperature": 32.8333, + "experience_temperature": 30.7762, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T09:50:07.771965+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.3, + "humidity": 70.5, + "water_total": 2704.0, + "average_temperature": 32.4333, + "experience_temperature": 30.4762, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T10:00:06.998645+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.2, + "humidity": 70.4, + "water_total": 2732.0, + "average_temperature": 32.5, + "experience_temperature": 31.2086, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T10:10:07.197057+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.3, + "humidity": 69.2, + "water_total": 2744.0, + "average_temperature": 32.5333, + "experience_temperature": 30.3162, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T10:20:06.721356+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.8, + "humidity": 68.2, + "water_total": 2761.0, + "average_temperature": 32.7667, + "experience_temperature": 26.921, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T10:30:07.449142+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.8, + "humidity": 67.7, + "water_total": 2787.0, + "average_temperature": 32.9333, + "experience_temperature": 26.9876, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T10:40:06.937698+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.7, + "humidity": 66.7, + "water_total": 2806.0, + "average_temperature": 33.2, + "experience_temperature": 27.74, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T10:50:06.507299+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.6, + "humidity": 67.2, + "water_total": 2806.0, + "average_temperature": 33.3, + "experience_temperature": 28.6257, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T11:00:06.935159+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.7, + "humidity": 65.8, + "water_total": 2815.0, + "average_temperature": 33.4333, + "experience_temperature": 27.7933, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T11:10:07.489526+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.7, + "humidity": 67.6, + "water_total": 2817.0, + "average_temperature": 33.4667, + "experience_temperature": 28.1867, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T11:20:06.481105+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.7, + "humidity": 65.7, + "water_total": 2822.0, + "average_temperature": 33.5333, + "experience_temperature": 27.8733, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T11:30:06.996339+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 1.0, + "humidity": 67.1, + "water_total": 2831.0, + "average_temperature": 33.6333, + "experience_temperature": 26.1962, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T11:40:06.603784+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 1.1, + "humidity": 65.2, + "water_total": 2850.0, + "average_temperature": 33.5, + "experience_temperature": 24.9971, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T11:50:06.522583+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 1.1, + "humidity": 66.1, + "water_total": 2872.0, + "average_temperature": 33.5333, + "experience_temperature": 25.2105, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T12:00:07.694223+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 1.0, + "humidity": 65.5, + "water_total": 2900.0, + "average_temperature": 33.6667, + "experience_temperature": 25.9095, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T12:10:07.379530+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 1.2, + "humidity": 67.3, + "water_total": 2930.0, + "average_temperature": 34.0333, + "experience_temperature": 25.2648, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T12:20:06.356489+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.8, + "humidity": 66.9, + "water_total": 2954.0, + "average_temperature": 34.0, + "experience_temperature": 27.8943, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T12:30:06.323072+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.9, + "humidity": 65.5, + "water_total": 2985.0, + "average_temperature": 33.8, + "experience_temperature": 26.7286, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T12:40:07.364968+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.9, + "humidity": 66.4, + "water_total": 3003.0, + "average_temperature": 33.8667, + "experience_temperature": 26.9752, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T12:50:06.006852+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 1.1, + "humidity": 64.1, + "water_total": 3025.0, + "average_temperature": 33.7667, + "experience_temperature": 25.0438, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T13:00:06.628202+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 1.2, + "humidity": 63.3, + "water_total": 3043.0, + "average_temperature": 33.9333, + "experience_temperature": 24.3648, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T13:10:05.984317+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.9, + "humidity": 63.5, + "water_total": 3063.0, + "average_temperature": 34.1, + "experience_temperature": 26.6286, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T13:20:06.177186+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 1.1, + "humidity": 64.3, + "water_total": 3081.0, + "average_temperature": 34.2, + "experience_temperature": 25.5171, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T13:30:08.156595+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 1.2, + "humidity": 65.3, + "water_total": 3108.0, + "average_temperature": 34.2, + "experience_temperature": 25.0314, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T13:40:06.616834+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.8, + "humidity": 63.8, + "water_total": 3128.0, + "average_temperature": 34.2, + "experience_temperature": 27.4743, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T13:50:05.894534+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.9, + "humidity": 64.0, + "water_total": 3152.0, + "average_temperature": 34.1, + "experience_temperature": 26.7286, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T14:10:06.255068+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 1.0, + "humidity": 65.6, + "water_total": 3302.0, + "average_temperature": 34.2333, + "experience_temperature": 26.4962, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T14:20:05.671174+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 1.0, + "humidity": 64.2, + "water_total": 3385.0, + "average_temperature": 34.1667, + "experience_temperature": 26.1495, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T14:30:06.466415+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 1.0, + "humidity": 64.2, + "water_total": 3385.0, + "average_temperature": 34.1667, + "experience_temperature": 26.1495, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T14:40:08.002621+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 1.2, + "humidity": 66.0, + "water_total": 3552.0, + "average_temperature": 33.7, + "experience_temperature": 24.6714, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T14:50:09.723974+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 1.2, + "humidity": 63.5, + "water_total": 3561.0, + "average_temperature": 33.6333, + "experience_temperature": 24.1048, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T15:10:06.616374+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 1.0, + "humidity": 66.0, + "water_total": 3580.0, + "average_temperature": 33.7, + "experience_temperature": 26.0429, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T15:20:05.813999+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 1.0, + "humidity": 65.9, + "water_total": 3632.0, + "average_temperature": 33.5333, + "experience_temperature": 25.8562, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T15:30:06.040572+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 1.1, + "humidity": 66.6, + "water_total": 3644.0, + "average_temperature": 33.4667, + "experience_temperature": 25.2438, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T15:40:06.857370+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.7, + "humidity": 68.4, + "water_total": 3680.0, + "average_temperature": 33.0667, + "experience_temperature": 27.9467, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T15:50:06.176683+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.6, + "humidity": 71.9, + "water_total": 3720.0, + "average_temperature": 32.5333, + "experience_temperature": 28.799, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T16:10:06.022220+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.3, + "humidity": 73.1, + "water_total": 3851.0, + "average_temperature": 32.4, + "experience_temperature": 30.9629, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T16:20:06.068574+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.2, + "humidity": 71.9, + "water_total": 3873.0, + "average_temperature": 32.3333, + "experience_temperature": 31.3419, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T16:30:08.331369+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.3, + "humidity": 72.8, + "water_total": 3890.0, + "average_temperature": 32.4333, + "experience_temperature": 30.9362, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T16:40:06.816170+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.3, + "humidity": 71.6, + "water_total": 3958.0, + "average_temperature": 31.9667, + "experience_temperature": 30.2295, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T16:50:06.536424+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.3, + "humidity": 72.3, + "water_total": 4010.0, + "average_temperature": 31.7, + "experience_temperature": 30.1029, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T17:10:06.018913+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.2, + "humidity": 72.4, + "water_total": 40.0, + "average_temperature": 31.5667, + "experience_temperature": 30.6752, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T17:20:05.944914+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.2, + "humidity": 72.0, + "water_total": 81.0, + "average_temperature": 32.0667, + "experience_temperature": 31.0952, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T17:30:06.390117+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.2, + "humidity": 73.4, + "water_total": 124.0, + "average_temperature": 31.8333, + "experience_temperature": 31.1419, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T17:40:06.449263+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.2, + "humidity": 72.4, + "water_total": 181.0, + "average_temperature": 31.5667, + "experience_temperature": 30.6752, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T17:50:07.479880+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 75.3, + "water_total": 228.0, + "average_temperature": 31.4, + "experience_temperature": 32.46, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T18:00:06.103724+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.1, + "humidity": 77.6, + "water_total": 268.0, + "average_temperature": 31.4667, + "experience_temperature": 32.301, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T18:10:05.577636+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 77.4, + "water_total": 312.0, + "average_temperature": 31.4667, + "experience_temperature": 32.9467, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T18:20:06.625208+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 76.8, + "water_total": 356.0, + "average_temperature": 31.5, + "experience_temperature": 32.86, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T18:30:06.474928+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 77.0, + "water_total": 391.0, + "average_temperature": 31.3333, + "experience_temperature": 32.7333, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T18:40:06.125580+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.0, + "water_total": 434.0, + "average_temperature": 31.4, + "experience_temperature": 33.0, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T18:50:07.308100+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 77.7, + "water_total": 472.0, + "average_temperature": 31.2333, + "experience_temperature": 32.7733, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T19:00:06.262597+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 77.9, + "water_total": 510.0, + "average_temperature": 31.2, + "experience_temperature": 32.78, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T19:10:06.269408+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 76.7, + "water_total": 549.0, + "average_temperature": 31.1333, + "experience_temperature": 32.4733, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T19:20:05.933036+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.4, + "water_total": 592.0, + "average_temperature": 31.1333, + "experience_temperature": 32.8133, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T19:30:06.592504+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.1, + "humidity": 78.1, + "water_total": 612.0, + "average_temperature": 30.9667, + "experience_temperature": 31.901, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T19:40:07.362245+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 78.1, + "water_total": 639.0, + "average_temperature": 30.7667, + "experience_temperature": 32.3867, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T19:50:06.479334+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 80.1, + "water_total": 673.0, + "average_temperature": 30.7, + "experience_temperature": 32.72, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T20:00:06.336647+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 79.4, + "water_total": 689.0, + "average_temperature": 30.3333, + "experience_temperature": 32.2133, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T20:10:06.265516+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.1, + "humidity": 79.2, + "water_total": 694.0, + "average_temperature": 30.3333, + "experience_temperature": 31.4876, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T20:20:06.346978+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 81.0, + "water_total": 694.0, + "average_temperature": 29.8333, + "experience_temperature": 32.0333, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T20:30:05.724302+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 80.8, + "water_total": 698.0, + "average_temperature": 30.0, + "experience_temperature": 32.16, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T20:40:05.877091+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 81.2, + "water_total": 701.0, + "average_temperature": 30.4333, + "experience_temperature": 32.6733, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T20:50:06.645407+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 81.2, + "water_total": 708.0, + "average_temperature": 30.5, + "experience_temperature": 32.74, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T21:00:05.631451+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 80.9, + "water_total": 713.0, + "average_temperature": 30.2, + "experience_temperature": 32.38, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T21:10:06.429161+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 82.2, + "water_total": 721.0, + "average_temperature": 30.2667, + "experience_temperature": 32.7067, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T21:20:07.063464+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 81.2, + "water_total": 730.0, + "average_temperature": 30.2, + "experience_temperature": 32.44, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T21:30:06.579565+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 82.1, + "water_total": 744.0, + "average_temperature": 30.5, + "experience_temperature": 32.92, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T21:40:05.887773+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 82.5, + "water_total": 771.0, + "average_temperature": 30.3667, + "experience_temperature": 32.8667, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T21:50:06.985467+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 82.0, + "water_total": 783.0, + "average_temperature": 30.1667, + "experience_temperature": 32.5667, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T22:00:06.810381+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 81.7, + "water_total": 800.0, + "average_temperature": 29.9, + "experience_temperature": 32.24, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T22:10:05.947720+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 82.1, + "water_total": 805.0, + "average_temperature": 30.0333, + "experience_temperature": 32.4533, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T22:20:05.606049+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 82.1, + "water_total": 815.0, + "average_temperature": 29.9333, + "experience_temperature": 32.3533, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T22:30:06.175162+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 82.4, + "water_total": 824.0, + "average_temperature": 30.1333, + "experience_temperature": 32.6133, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T22:40:08.154688+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 82.6, + "water_total": 834.0, + "average_temperature": 29.9333, + "experience_temperature": 32.4533, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T22:50:06.060058+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 83.6, + "water_total": 852.0, + "average_temperature": 30.0333, + "experience_temperature": 32.7533, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T23:00:06.091938+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 81.6, + "water_total": 858.0, + "average_temperature": 29.6667, + "experience_temperature": 31.9867, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T23:10:07.408894+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 82.9, + "water_total": 861.0, + "average_temperature": 29.6333, + "experience_temperature": 32.2133, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T23:20:05.890481+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 82.5, + "water_total": 869.0, + "average_temperature": 29.4667, + "experience_temperature": 31.9667, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T23:30:07.112737+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 83.4, + "water_total": 879.0, + "average_temperature": 29.5333, + "experience_temperature": 32.2133, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T23:40:06.097584+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 82.1, + "water_total": 888.0, + "average_temperature": 30.5, + "experience_temperature": 32.92, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-29T23:50:08.300037+07:00", + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 83.1, + "water_total": 890.0, + "average_temperature": 30.1333, + "experience_temperature": 32.7533, + "chill_factor": 6.8571 + }, + { + "timestamp": "2026-05-30T00:00:05.792162+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 81.9, + "water_total": 897.0, + "average_temperature": 29.7333, + "experience_temperature": 32.1133, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T00:10:07.584622+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 81.5, + "water_total": 910.0, + "average_temperature": 29.4333, + "experience_temperature": 31.7333, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T00:20:07.493544+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 81.4, + "water_total": 910.0, + "average_temperature": 30.5, + "experience_temperature": 32.78, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T00:30:06.677487+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.0, + "water_total": 913.0, + "average_temperature": 29.7333, + "experience_temperature": 32.1333, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T00:40:06.480644+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.1, + "water_total": 919.0, + "average_temperature": 29.5667, + "experience_temperature": 32.1867, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T00:50:06.867537+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 81.6, + "water_total": 923.0, + "average_temperature": 30.5333, + "experience_temperature": 32.8533, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T01:00:06.081424+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.6, + "water_total": 932.0, + "average_temperature": 29.9333, + "experience_temperature": 32.4533, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T01:10:06.239127+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.9, + "water_total": 935.0, + "average_temperature": 29.4, + "experience_temperature": 31.98, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T01:20:05.782981+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.6, + "water_total": 941.0, + "average_temperature": 30.4333, + "experience_temperature": 32.9533, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T01:30:05.871353+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.9, + "water_total": 947.0, + "average_temperature": 29.6667, + "experience_temperature": 32.2467, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T01:40:06.072752+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.0, + "water_total": 956.0, + "average_temperature": 29.4, + "experience_temperature": 32.0, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T01:50:06.078573+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 81.2, + "water_total": 970.0, + "average_temperature": 30.2333, + "experience_temperature": 32.4733, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T02:00:07.104399+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.6, + "water_total": 983.0, + "average_temperature": 29.5667, + "experience_temperature": 32.0867, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T02:10:05.812359+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 81.7, + "water_total": 1011.0, + "average_temperature": 30.7, + "experience_temperature": 33.04, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T02:20:06.001001+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 80.8, + "water_total": 1046.0, + "average_temperature": 30.3, + "experience_temperature": 32.46, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T02:30:06.468395+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.3, + "water_total": 1083.0, + "average_temperature": 29.6667, + "experience_temperature": 32.1267, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T02:40:05.679377+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.4, + "water_total": 1109.0, + "average_temperature": 29.5, + "experience_temperature": 32.38, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T02:50:06.334710+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 81.8, + "water_total": 1136.0, + "average_temperature": 30.2667, + "experience_temperature": 32.6267, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T03:00:07.210851+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 81.6, + "water_total": 1167.0, + "average_temperature": 29.9, + "experience_temperature": 32.22, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T03:10:05.909699+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.8, + "water_total": 1194.0, + "average_temperature": 29.7333, + "experience_temperature": 32.4933, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T03:20:06.248560+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 81.8, + "water_total": 1210.0, + "average_temperature": 30.0, + "experience_temperature": 32.36, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T03:30:06.307231+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.0, + "water_total": 1235.0, + "average_temperature": 29.5, + "experience_temperature": 31.9, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T03:40:05.978564+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.2, + "water_total": 1260.0, + "average_temperature": 29.5, + "experience_temperature": 31.94, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T03:50:06.530155+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.0, + "water_total": 1280.0, + "average_temperature": 30.3667, + "experience_temperature": 32.7667, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T04:00:05.637502+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.5, + "water_total": 1312.0, + "average_temperature": 29.7333, + "experience_temperature": 32.2333, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T04:10:06.260642+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.5, + "water_total": 1333.0, + "average_temperature": 30.1, + "experience_temperature": 33.0, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T04:20:05.874791+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.0, + "water_total": 1358.0, + "average_temperature": 30.2, + "experience_temperature": 32.6, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T04:30:05.885354+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.6, + "water_total": 1380.0, + "average_temperature": 29.3667, + "experience_temperature": 32.0867, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T04:40:06.200083+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 81.5, + "water_total": 1401.0, + "average_temperature": 30.1333, + "experience_temperature": 32.4333, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T04:50:06.802531+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.7, + "water_total": 1421.0, + "average_temperature": 29.8, + "experience_temperature": 32.54, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T05:00:05.809661+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.6, + "water_total": 1451.0, + "average_temperature": 29.7, + "experience_temperature": 32.42, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T05:10:06.057078+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.0, + "water_total": 1473.0, + "average_temperature": 30.2667, + "experience_temperature": 33.0667, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T05:20:06.077520+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.8, + "water_total": 1504.0, + "average_temperature": 29.6333, + "experience_temperature": 32.3933, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T05:30:06.934754+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.3, + "water_total": 1528.0, + "average_temperature": 29.7, + "experience_temperature": 32.56, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T05:40:06.358213+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.9, + "water_total": 1553.0, + "average_temperature": 29.7, + "experience_temperature": 32.28, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T05:50:07.229366+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.0, + "water_total": 1575.0, + "average_temperature": 29.6333, + "experience_temperature": 32.4333, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T06:00:06.461499+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.8, + "water_total": 1593.0, + "average_temperature": 30.3, + "experience_temperature": 32.86, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T06:10:07.598330+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.7, + "water_total": 1615.0, + "average_temperature": 29.7, + "experience_temperature": 32.44, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T06:20:06.285686+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.1, + "water_total": 1629.0, + "average_temperature": 29.5333, + "experience_temperature": 32.1533, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T06:30:06.274247+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.4, + "water_total": 1651.0, + "average_temperature": 29.6, + "experience_temperature": 32.48, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T06:40:06.260009+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.8, + "water_total": 1675.0, + "average_temperature": 29.4667, + "experience_temperature": 32.2267, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T06:50:08.147020+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 85.4, + "water_total": 1697.0, + "average_temperature": 29.7, + "experience_temperature": 32.78, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T07:00:07.202955+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.3, + "water_total": 1710.0, + "average_temperature": 29.2667, + "experience_temperature": 31.9267, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T07:10:06.736006+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.0, + "water_total": 1725.0, + "average_temperature": 30.4667, + "experience_temperature": 33.0667, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T07:20:06.518260+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.9, + "water_total": 1747.0, + "average_temperature": 30.3667, + "experience_temperature": 32.9467, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T07:30:06.509776+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.8, + "water_total": 1767.0, + "average_temperature": 30.6, + "experience_temperature": 33.36, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T07:40:07.004092+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.1, + "water_total": 1784.0, + "average_temperature": 30.3333, + "experience_temperature": 32.7533, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T07:50:07.235555+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.7, + "water_total": 1796.0, + "average_temperature": 30.6667, + "experience_temperature": 33.4067, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T08:00:06.011033+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 90.5, + "water_total": 1813.0, + "average_temperature": 30.6, + "experience_temperature": 34.7, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T08:10:06.794174+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.1, + "water_total": 1834.0, + "average_temperature": 30.8667, + "experience_temperature": 33.6867, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T08:20:18.022649+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.1, + "water_total": 1834.0, + "average_temperature": 30.8667, + "experience_temperature": 33.6867, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T08:30:07.612428+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.1, + "humidity": 81.9, + "water_total": 1850.0, + "average_temperature": 31.1, + "experience_temperature": 32.8086, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T08:40:09.652102+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 80.7, + "water_total": 1855.0, + "average_temperature": 31.5, + "experience_temperature": 33.64, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T08:50:06.181019+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.2, + "humidity": 78.8, + "water_total": 1867.0, + "average_temperature": 31.7667, + "experience_temperature": 32.1838, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T09:00:06.225510+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.1, + "humidity": 75.2, + "water_total": 1877.0, + "average_temperature": 31.3, + "experience_temperature": 31.6686, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T09:10:07.322815+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.2, + "humidity": 74.9, + "water_total": 1885.0, + "average_temperature": 31.4667, + "experience_temperature": 31.1038, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T09:20:08.031695+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.1, + "humidity": 74.7, + "water_total": 1891.0, + "average_temperature": 31.5, + "experience_temperature": 31.7686, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T09:30:07.240031+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.1, + "humidity": 76.9, + "water_total": 1900.0, + "average_temperature": 31.8, + "experience_temperature": 32.5086, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T09:40:06.742900+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.5, + "humidity": 72.8, + "water_total": 1906.0, + "average_temperature": 32.2333, + "experience_temperature": 29.4362, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T09:50:06.465524+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.7, + "humidity": 71.0, + "water_total": 1906.0, + "average_temperature": 32.4, + "experience_temperature": 27.9, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T10:00:07.214862+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.8, + "humidity": 70.3, + "water_total": 1908.0, + "average_temperature": 32.4, + "experience_temperature": 27.0886, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T10:10:06.184109+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.7, + "humidity": 67.9, + "water_total": 1908.0, + "average_temperature": 32.8333, + "experience_temperature": 27.7133, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T10:20:06.431913+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.8, + "humidity": 67.0, + "water_total": 1911.0, + "average_temperature": 33.0667, + "experience_temperature": 27.0952, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T10:30:07.456321+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.8, + "humidity": 68.0, + "water_total": 1911.0, + "average_temperature": 33.2333, + "experience_temperature": 27.4619, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T10:40:07.074786+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.8, + "humidity": 66.8, + "water_total": 1912.0, + "average_temperature": 33.0, + "experience_temperature": 26.9886, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T10:50:06.436040+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.7, + "humidity": 66.3, + "water_total": 1912.0, + "average_temperature": 33.2333, + "experience_temperature": 27.7933, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T11:00:07.660668+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 1.2, + "humidity": 66.1, + "water_total": 1912.0, + "average_temperature": 33.4333, + "experience_temperature": 24.5962, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T11:10:06.430518+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.8, + "humidity": 66.8, + "water_total": 1912.0, + "average_temperature": 33.5, + "experience_temperature": 27.4886, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T11:20:08.714466+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 1.1, + "humidity": 66.4, + "water_total": 1912.0, + "average_temperature": 33.4, + "experience_temperature": 25.2943, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T11:30:08.472850+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.9, + "humidity": 66.7, + "water_total": 1913.0, + "average_temperature": 33.4, + "experience_temperature": 26.6971, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T11:40:06.188043+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 1.0, + "humidity": 66.3, + "water_total": 1913.0, + "average_temperature": 33.6, + "experience_temperature": 26.1457, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T11:50:08.285986+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 1.1, + "humidity": 66.2, + "water_total": 1913.0, + "average_temperature": 33.6333, + "experience_temperature": 25.4876, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T12:00:07.707214+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.8, + "humidity": 66.2, + "water_total": 1913.0, + "average_temperature": 33.7333, + "experience_temperature": 27.6019, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T12:10:08.237272+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.9, + "humidity": 64.4, + "water_total": 1913.0, + "average_temperature": 34.0667, + "experience_temperature": 26.9038, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T12:20:06.261378+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.9, + "humidity": 64.4, + "water_total": 1913.0, + "average_temperature": 34.0667, + "experience_temperature": 26.9038, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T12:30:06.634576+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.7, + "humidity": 64.2, + "water_total": 1913.0, + "average_temperature": 33.8667, + "experience_temperature": 28.0067, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T12:40:06.340112+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 1.1, + "humidity": 64.8, + "water_total": 1915.0, + "average_temperature": 34.0667, + "experience_temperature": 25.641, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T12:50:06.736029+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 1.5, + "humidity": 64.4, + "water_total": 1916.0, + "average_temperature": 34.3, + "experience_temperature": 23.1086, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T13:00:06.910129+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 1.1, + "humidity": 63.2, + "water_total": 1918.0, + "average_temperature": 34.0, + "experience_temperature": 25.2543, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T13:10:08.681765+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 1.2, + "humidity": 63.9, + "water_total": 1918.0, + "average_temperature": 34.4, + "experience_temperature": 25.1229, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T13:20:07.571128+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 1.2, + "humidity": 63.5, + "water_total": 1918.0, + "average_temperature": 34.2333, + "experience_temperature": 24.8762, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T13:30:07.788658+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.9, + "humidity": 64.7, + "water_total": 1918.0, + "average_temperature": 33.9667, + "experience_temperature": 26.8638, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T13:40:07.263855+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 1.1, + "humidity": 64.8, + "water_total": 1920.0, + "average_temperature": 34.0667, + "experience_temperature": 25.641, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T13:50:06.973135+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.9, + "humidity": 66.0, + "water_total": 1920.0, + "average_temperature": 34.0, + "experience_temperature": 27.1571, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T14:10:07.297573+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.7, + "humidity": 65.6, + "water_total": 1920.0, + "average_temperature": 33.7333, + "experience_temperature": 28.1533, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T14:20:07.259478+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 1.1, + "humidity": 64.7, + "water_total": 1921.0, + "average_temperature": 34.1, + "experience_temperature": 25.6543, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T14:30:06.315474+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.9, + "humidity": 65.5, + "water_total": 1922.0, + "average_temperature": 34.2, + "experience_temperature": 27.2571, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T14:40:07.215992+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.8, + "humidity": 66.2, + "water_total": 1922.0, + "average_temperature": 34.0333, + "experience_temperature": 27.9019, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T14:50:08.764779+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 1.2, + "humidity": 65.7, + "water_total": 1922.0, + "average_temperature": 34.1, + "experience_temperature": 25.1829, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T15:10:06.616515+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.7, + "humidity": 69.1, + "water_total": 1923.0, + "average_temperature": 33.1, + "experience_temperature": 28.22, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T15:20:06.642752+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.5, + "humidity": 72.0, + "water_total": 1923.0, + "average_temperature": 32.8667, + "experience_temperature": 29.9095, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T15:30:07.240481+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.6, + "humidity": 72.3, + "water_total": 1925.0, + "average_temperature": 32.4667, + "experience_temperature": 28.8981, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T15:40:06.951443+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.6, + "humidity": 72.9, + "water_total": 1925.0, + "average_temperature": 32.2333, + "experience_temperature": 28.7848, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T15:50:08.149085+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.2, + "humidity": 74.7, + "water_total": 1925.0, + "average_temperature": 32.2, + "experience_temperature": 31.7971, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T16:10:06.440794+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.2, + "humidity": 77.0, + "water_total": 1925.0, + "average_temperature": 32.1, + "experience_temperature": 32.1571, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T16:20:06.706539+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.1, + "humidity": 79.5, + "water_total": 1925.0, + "average_temperature": 31.7, + "experience_temperature": 32.9286, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T16:30:06.835953+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.4, + "humidity": 79.7, + "water_total": 1927.0, + "average_temperature": 31.4, + "experience_temperature": 30.6543, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T16:40:06.698207+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.2, + "humidity": 79.3, + "water_total": 1927.0, + "average_temperature": 31.2, + "experience_temperature": 31.7171, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T16:50:07.748146+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 78.9, + "water_total": 1927.0, + "average_temperature": 30.7, + "experience_temperature": 32.48, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T17:10:07.002717+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 81.1, + "water_total": 0.0, + "average_temperature": 31.1667, + "experience_temperature": 33.3867, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T17:20:06.835492+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 80.7, + "water_total": 0.0, + "average_temperature": 30.8667, + "experience_temperature": 33.0067, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T17:30:06.113281+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 81.7, + "water_total": 0.0, + "average_temperature": 30.7, + "experience_temperature": 33.04, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T17:40:06.616090+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 81.7, + "water_total": 0.0, + "average_temperature": 30.9, + "experience_temperature": 33.24, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T17:50:07.381644+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.7, + "water_total": 0.0, + "average_temperature": 30.9667, + "experience_temperature": 33.5067, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T18:00:07.468335+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.0, + "water_total": 0.0, + "average_temperature": 30.8333, + "experience_temperature": 33.4333, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T18:10:07.058369+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.0, + "water_total": 0.0, + "average_temperature": 30.8, + "experience_temperature": 33.2, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T18:20:09.520861+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.7, + "water_total": 0.0, + "average_temperature": 31.0, + "experience_temperature": 33.54, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T18:30:09.085677+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.4, + "water_total": 0.0, + "average_temperature": 30.3333, + "experience_temperature": 32.8133, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T18:40:06.976413+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.1, + "water_total": 0.0, + "average_temperature": 30.4, + "experience_temperature": 32.82, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T18:50:07.342297+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 81.4, + "water_total": 0.0, + "average_temperature": 30.4667, + "experience_temperature": 32.7467, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T19:00:06.553189+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 82.9, + "water_total": 0.0, + "average_temperature": 30.6333, + "experience_temperature": 33.2133, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T19:10:08.239572+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.9, + "water_total": 0.0, + "average_temperature": 30.8, + "experience_temperature": 33.78, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T19:20:06.763767+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.1, + "humidity": 81.7, + "water_total": 0.0, + "average_temperature": 30.4333, + "experience_temperature": 32.1019, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T19:30:07.722800+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.5, + "water_total": 2.0, + "average_temperature": 30.4667, + "experience_temperature": 33.1667, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T19:40:06.255100+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.1, + "humidity": 81.8, + "water_total": 2.0, + "average_temperature": 30.5333, + "experience_temperature": 32.2219, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T19:50:07.100702+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.2, + "water_total": 2.0, + "average_temperature": 30.6333, + "experience_temperature": 33.2733, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T20:00:08.449806+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.9, + "water_total": 2.0, + "average_temperature": 30.6333, + "experience_temperature": 33.4133, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T20:10:06.447930+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.5, + "water_total": 8.0, + "average_temperature": 30.5333, + "experience_temperature": 33.2333, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T20:20:06.363832+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.5, + "water_total": 8.0, + "average_temperature": 30.8667, + "experience_temperature": 33.7667, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T20:30:06.482578+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.5, + "water_total": 8.0, + "average_temperature": 30.4667, + "experience_temperature": 33.3667, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T20:40:07.195832+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.1, + "water_total": 8.0, + "average_temperature": 30.5333, + "experience_temperature": 33.1533, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T20:50:07.235663+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.0, + "water_total": 8.0, + "average_temperature": 30.5667, + "experience_temperature": 33.1667, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T21:00:07.381165+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.1, + "water_total": 8.0, + "average_temperature": 30.4667, + "experience_temperature": 33.0867, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T21:10:06.530341+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.7, + "water_total": 8.0, + "average_temperature": 30.4667, + "experience_temperature": 33.2067, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T21:20:06.671580+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.8, + "water_total": 8.0, + "average_temperature": 30.2333, + "experience_temperature": 32.9933, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T21:30:07.708510+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 85.3, + "water_total": 8.0, + "average_temperature": 30.4333, + "experience_temperature": 33.4933, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T21:40:07.105495+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.0, + "water_total": 8.0, + "average_temperature": 30.1667, + "experience_temperature": 32.9667, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T21:50:07.460235+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 85.1, + "water_total": 8.0, + "average_temperature": 30.2333, + "experience_temperature": 33.2533, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T22:00:08.644196+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.2, + "water_total": 10.0, + "average_temperature": 30.0, + "experience_temperature": 32.84, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T22:10:06.154039+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.3, + "water_total": 10.0, + "average_temperature": 30.1333, + "experience_temperature": 32.9933, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T22:20:06.495967+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 83.7, + "water_total": 10.0, + "average_temperature": 29.9667, + "experience_temperature": 32.7067, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T22:30:06.782129+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 86.5, + "water_total": 10.0, + "average_temperature": 30.1, + "experience_temperature": 33.4, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T22:40:06.251679+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.5, + "water_total": 10.0, + "average_temperature": 29.9, + "experience_temperature": 32.8, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T22:50:06.698291+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.4, + "water_total": 10.0, + "average_temperature": 30.1667, + "experience_temperature": 33.0467, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T23:00:06.416192+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.4, + "water_total": 10.0, + "average_temperature": 30.0667, + "experience_temperature": 32.9467, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T23:10:06.369152+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.1, + "humidity": 84.1, + "water_total": 10.0, + "average_temperature": 30.5667, + "experience_temperature": 32.7152, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T23:20:05.769660+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.1, + "water_total": 10.0, + "average_temperature": 29.7667, + "experience_temperature": 32.5867, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T23:30:06.326789+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.8, + "water_total": 10.0, + "average_temperature": 29.5333, + "experience_temperature": 32.4933, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T23:40:07.107040+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.4, + "water_total": 10.0, + "average_temperature": 29.4667, + "experience_temperature": 32.3467, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-30T23:50:05.520690+07:00", + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.7, + "water_total": 10.0, + "average_temperature": 29.5667, + "experience_temperature": 32.5067, + "chill_factor": 6.7143 + }, + { + "timestamp": "2026-05-31T00:00:05.640087+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 85.1, + "water_total": 10.0, + "average_temperature": 29.4667, + "experience_temperature": 32.4867, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T00:10:06.884397+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.6, + "water_total": 10.0, + "average_temperature": 29.3, + "experience_temperature": 32.22, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T00:20:05.582814+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.6, + "water_total": 10.0, + "average_temperature": 29.1667, + "experience_temperature": 32.0867, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T00:30:05.562066+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.6, + "water_total": 10.0, + "average_temperature": 29.0333, + "experience_temperature": 31.9533, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T00:40:05.523826+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 85.5, + "water_total": 10.0, + "average_temperature": 29.1, + "experience_temperature": 32.2, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T00:50:06.702063+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.5, + "water_total": 10.0, + "average_temperature": 28.9333, + "experience_temperature": 31.8333, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T01:00:07.953275+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 86.6, + "water_total": 10.0, + "average_temperature": 29.1333, + "experience_temperature": 32.4533, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T01:10:05.956271+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 85.1, + "water_total": 10.0, + "average_temperature": 28.8667, + "experience_temperature": 31.8867, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T01:20:05.136935+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 86.1, + "water_total": 10.0, + "average_temperature": 28.9333, + "experience_temperature": 32.1533, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T01:30:06.067884+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 86.1, + "water_total": 10.0, + "average_temperature": 28.9333, + "experience_temperature": 32.1533, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T01:40:05.398968+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 86.7, + "water_total": 10.0, + "average_temperature": 28.9667, + "experience_temperature": 32.3067, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T01:50:05.620605+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 85.2, + "water_total": 10.0, + "average_temperature": 28.8667, + "experience_temperature": 31.9067, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T02:00:05.746088+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 86.1, + "water_total": 10.0, + "average_temperature": 28.9333, + "experience_temperature": 32.1533, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T02:10:05.761853+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 86.1, + "water_total": 10.0, + "average_temperature": 28.9333, + "experience_temperature": 32.1533, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T02:20:05.242281+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.1, + "humidity": 84.6, + "water_total": 10.0, + "average_temperature": 29.7667, + "experience_temperature": 32.0295, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T02:30:07.764393+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.7, + "water_total": 10.0, + "average_temperature": 29.1, + "experience_temperature": 31.84, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T02:40:05.640363+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 85.3, + "water_total": 10.0, + "average_temperature": 29.1667, + "experience_temperature": 32.2267, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T02:50:05.794499+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.2, + "water_total": 10.0, + "average_temperature": 29.2667, + "experience_temperature": 32.1067, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T03:00:07.649983+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 85.8, + "water_total": 10.0, + "average_temperature": 29.5667, + "experience_temperature": 32.7267, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T03:10:05.663972+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.4, + "water_total": 10.0, + "average_temperature": 29.1, + "experience_temperature": 31.78, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T03:20:05.966772+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.0, + "water_total": 10.0, + "average_temperature": 28.9667, + "experience_temperature": 31.7667, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T03:30:05.522352+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 82.2, + "water_total": 10.0, + "average_temperature": 28.7333, + "experience_temperature": 31.1733, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T03:40:06.099057+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.6, + "water_total": 10.0, + "average_temperature": 28.9667, + "experience_temperature": 31.8867, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T03:50:05.326084+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 81.9, + "water_total": 10.0, + "average_temperature": 29.1667, + "experience_temperature": 31.5467, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T04:00:06.357834+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.9, + "water_total": 10.0, + "average_temperature": 29.0333, + "experience_temperature": 31.8133, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T04:10:05.899172+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.6, + "water_total": 10.0, + "average_temperature": 28.7333, + "experience_temperature": 31.4533, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T04:20:07.520223+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.5, + "water_total": 10.0, + "average_temperature": 28.7667, + "experience_temperature": 31.6667, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T04:30:05.486911+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.9, + "water_total": 10.0, + "average_temperature": 28.8667, + "experience_temperature": 31.8467, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T04:40:05.351883+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.7, + "water_total": 10.0, + "average_temperature": 29.1, + "experience_temperature": 32.04, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T04:50:05.632337+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.3, + "water_total": 10.0, + "average_temperature": 29.2333, + "experience_temperature": 31.8933, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T05:00:05.309305+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 85.6, + "water_total": 10.0, + "average_temperature": 28.9667, + "experience_temperature": 32.0867, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T05:10:06.888437+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.4, + "water_total": 10.0, + "average_temperature": 28.6667, + "experience_temperature": 31.5467, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T05:20:06.364122+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 85.1, + "water_total": 10.0, + "average_temperature": 29.9667, + "experience_temperature": 32.9867, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T05:30:05.475915+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 82.0, + "water_total": 10.0, + "average_temperature": 29.7, + "experience_temperature": 32.1, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T05:40:06.104344+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.1, + "water_total": 10.0, + "average_temperature": 29.1667, + "experience_temperature": 31.9867, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T05:50:05.753738+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 81.6, + "water_total": 10.0, + "average_temperature": 30.1, + "experience_temperature": 32.42, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T06:00:06.573363+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.7, + "water_total": 10.0, + "average_temperature": 29.7, + "experience_temperature": 32.44, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T06:10:05.473417+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 82.6, + "water_total": 10.0, + "average_temperature": 29.4667, + "experience_temperature": 31.9867, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T06:20:07.674394+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.9, + "water_total": 10.0, + "average_temperature": 29.3333, + "experience_temperature": 32.3133, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T06:30:07.155295+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.5, + "water_total": 10.0, + "average_temperature": 29.1667, + "experience_temperature": 32.0667, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T06:40:06.567005+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 86.1, + "water_total": 10.0, + "average_temperature": 30.3667, + "experience_temperature": 33.5867, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T06:50:05.724050+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 82.3, + "water_total": 10.0, + "average_temperature": 29.6667, + "experience_temperature": 32.1267, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T07:00:07.371184+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.3, + "water_total": 10.0, + "average_temperature": 29.6333, + "experience_temperature": 32.4933, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T07:10:05.711764+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.6, + "water_total": 10.0, + "average_temperature": 29.3667, + "experience_temperature": 32.0867, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T07:20:06.458591+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 85.5, + "water_total": 10.0, + "average_temperature": 29.3667, + "experience_temperature": 32.4667, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T07:30:07.357799+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 85.5, + "water_total": 10.0, + "average_temperature": 29.3, + "experience_temperature": 32.4, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T07:40:05.586232+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 85.3, + "water_total": 10.0, + "average_temperature": 29.7, + "experience_temperature": 32.76, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T07:50:06.405682+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.3, + "water_total": 10.0, + "average_temperature": 29.3333, + "experience_temperature": 31.9933, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T08:00:06.062314+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 85.7, + "water_total": 10.0, + "average_temperature": 29.9333, + "experience_temperature": 33.0733, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T08:10:05.983478+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.4, + "water_total": 10.0, + "average_temperature": 29.7667, + "experience_temperature": 32.4467, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T08:20:06.118450+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.1, + "humidity": 84.8, + "water_total": 10.0, + "average_temperature": 29.5667, + "experience_temperature": 31.8695, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T08:30:06.055230+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.3, + "water_total": 10.0, + "average_temperature": 29.6, + "experience_temperature": 32.46, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T08:40:06.761030+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 86.0, + "water_total": 10.0, + "average_temperature": 29.9333, + "experience_temperature": 33.1333, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T08:50:06.267485+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 82.6, + "water_total": 10.0, + "average_temperature": 30.0, + "experience_temperature": 32.52, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T09:00:07.142530+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.2, + "humidity": 84.7, + "water_total": 10.0, + "average_temperature": 30.5, + "experience_temperature": 32.1257, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T09:10:06.183735+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.2, + "humidity": 82.7, + "water_total": 10.0, + "average_temperature": 30.6333, + "experience_temperature": 31.859, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T09:20:07.101560+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.1, + "humidity": 82.0, + "water_total": 10.0, + "average_temperature": 30.7667, + "experience_temperature": 32.5095, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T09:30:07.338272+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 81.9, + "water_total": 10.0, + "average_temperature": 30.7667, + "experience_temperature": 33.1467, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T09:40:07.129466+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.2, + "humidity": 80.5, + "water_total": 10.0, + "average_temperature": 31.1333, + "experience_temperature": 31.919, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T09:50:06.679575+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 81.1, + "water_total": 10.0, + "average_temperature": 31.1, + "experience_temperature": 33.32, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T10:00:06.369246+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.2, + "humidity": 79.0, + "water_total": 10.0, + "average_temperature": 31.1333, + "experience_temperature": 31.619, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T10:10:07.135658+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.2, + "humidity": 76.9, + "water_total": 10.0, + "average_temperature": 31.2, + "experience_temperature": 31.2657, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T10:20:06.021515+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.2, + "humidity": 77.4, + "water_total": 10.0, + "average_temperature": 31.1, + "experience_temperature": 31.2657, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T10:30:06.225287+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.2, + "humidity": 77.1, + "water_total": 10.0, + "average_temperature": 31.1, + "experience_temperature": 31.2057, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T10:40:06.499350+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.1, + "humidity": 79.9, + "water_total": 10.0, + "average_temperature": 31.5667, + "experience_temperature": 32.8895, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T10:50:06.323658+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.2, + "humidity": 78.5, + "water_total": 10.0, + "average_temperature": 32.0, + "experience_temperature": 32.3857, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T11:00:05.924365+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.3, + "humidity": 77.1, + "water_total": 10.0, + "average_temperature": 31.9667, + "experience_temperature": 31.4152, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T11:10:07.315067+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.3, + "humidity": 75.3, + "water_total": 10.0, + "average_temperature": 32.0, + "experience_temperature": 31.0886, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T11:20:08.265387+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.3, + "humidity": 73.5, + "water_total": 10.0, + "average_temperature": 32.0, + "experience_temperature": 30.7286, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T11:30:06.322573+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.6, + "humidity": 74.2, + "water_total": 10.0, + "average_temperature": 32.0333, + "experience_temperature": 28.9305, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T11:40:06.754229+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.5, + "humidity": 73.4, + "water_total": 10.0, + "average_temperature": 31.9667, + "experience_temperature": 29.361, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T11:50:09.151275+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.7, + "humidity": 73.7, + "water_total": 10.0, + "average_temperature": 32.0333, + "experience_temperature": 28.1733, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T12:00:07.944158+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.7, + "humidity": 73.7, + "water_total": 10.0, + "average_temperature": 32.0333, + "experience_temperature": 28.1733, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T12:10:06.513925+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.6, + "humidity": 75.3, + "water_total": 10.0, + "average_temperature": 32.0333, + "experience_temperature": 29.1505, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T12:20:07.088253+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.6, + "humidity": 74.0, + "water_total": 10.0, + "average_temperature": 32.0333, + "experience_temperature": 28.8905, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T12:30:06.205452+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.6, + "humidity": 75.6, + "water_total": 10.0, + "average_temperature": 32.0333, + "experience_temperature": 29.2105, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T12:40:05.997453+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.4, + "humidity": 75.4, + "water_total": 10.0, + "average_temperature": 31.9667, + "experience_temperature": 30.4181, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T12:50:06.741024+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.6, + "humidity": 75.6, + "water_total": 10.0, + "average_temperature": 32.1333, + "experience_temperature": 29.3105, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T13:00:06.975585+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.6, + "humidity": 74.4, + "water_total": 10.0, + "average_temperature": 32.0333, + "experience_temperature": 28.9705, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T13:10:07.008137+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.3, + "humidity": 75.0, + "water_total": 10.0, + "average_temperature": 32.0, + "experience_temperature": 31.0286, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T13:20:07.958463+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.5, + "humidity": 75.1, + "water_total": 10.0, + "average_temperature": 32.0667, + "experience_temperature": 29.801, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T13:30:06.402745+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.4, + "humidity": 75.4, + "water_total": 10.0, + "average_temperature": 32.1333, + "experience_temperature": 30.5848, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T13:40:06.396292+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.6, + "humidity": 73.8, + "water_total": 10.0, + "average_temperature": 32.2, + "experience_temperature": 29.0171, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T13:50:06.581773+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.6, + "humidity": 73.9, + "water_total": 10.0, + "average_temperature": 32.3667, + "experience_temperature": 29.2038, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T14:10:06.924109+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.7, + "humidity": 74.9, + "water_total": 10.0, + "average_temperature": 32.4, + "experience_temperature": 28.78, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T14:20:07.073893+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.8, + "humidity": 72.3, + "water_total": 10.0, + "average_temperature": 32.2667, + "experience_temperature": 27.4695, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T14:30:06.817566+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.7, + "humidity": 73.6, + "water_total": 10.0, + "average_temperature": 32.0667, + "experience_temperature": 28.1867, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T14:40:06.818114+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.6, + "humidity": 75.6, + "water_total": 10.0, + "average_temperature": 32.0667, + "experience_temperature": 29.2438, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T14:50:06.507939+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.3, + "humidity": 75.8, + "water_total": 10.0, + "average_temperature": 32.0, + "experience_temperature": 31.1886, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T15:10:06.977148+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.2, + "humidity": 76.2, + "water_total": 10.0, + "average_temperature": 31.9333, + "experience_temperature": 31.859, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T15:20:07.272102+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.3, + "humidity": 76.5, + "water_total": 10.0, + "average_temperature": 32.0, + "experience_temperature": 31.3286, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T15:30:07.218631+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.7, + "humidity": 75.7, + "water_total": 10.0, + "average_temperature": 32.0333, + "experience_temperature": 28.5733, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T15:40:06.997308+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.2, + "humidity": 76.2, + "water_total": 10.0, + "average_temperature": 32.0, + "experience_temperature": 31.9257, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T15:50:08.210715+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.1, + "humidity": 77.0, + "water_total": 14.0, + "average_temperature": 31.8, + "experience_temperature": 32.5429, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T16:10:07.008245+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.3, + "humidity": 77.4, + "water_total": 14.0, + "average_temperature": 31.6333, + "experience_temperature": 31.1419, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T16:20:08.974855+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.2, + "humidity": 76.9, + "water_total": 14.0, + "average_temperature": 31.5, + "experience_temperature": 31.5657, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T16:30:06.763200+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.2, + "humidity": 77.5, + "water_total": 14.0, + "average_temperature": 31.4667, + "experience_temperature": 31.6524, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T16:40:06.795103+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.3, + "humidity": 78.0, + "water_total": 14.0, + "average_temperature": 31.1667, + "experience_temperature": 30.7952, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T16:50:06.834700+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.3, + "humidity": 78.7, + "water_total": 14.0, + "average_temperature": 31.3, + "experience_temperature": 31.0686, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T17:10:06.648636+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.3, + "humidity": 77.9, + "water_total": 0.0, + "average_temperature": 31.1667, + "experience_temperature": 30.7752, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T17:20:06.151962+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.1, + "humidity": 77.6, + "water_total": 0.0, + "average_temperature": 31.0667, + "experience_temperature": 31.9295, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T17:30:06.885201+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 78.4, + "water_total": 0.0, + "average_temperature": 31.0, + "experience_temperature": 32.68, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T17:40:06.707144+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 80.9, + "water_total": 0.0, + "average_temperature": 30.8333, + "experience_temperature": 33.0133, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T17:50:09.103256+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 80.2, + "water_total": 0.0, + "average_temperature": 30.5667, + "experience_temperature": 32.6067, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T18:00:07.234853+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.1, + "humidity": 80.9, + "water_total": 0.0, + "average_temperature": 30.6333, + "experience_temperature": 32.1562, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T18:10:11.405458+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.1, + "humidity": 81.2, + "water_total": 4.0, + "average_temperature": 30.2333, + "experience_temperature": 31.8162, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T18:20:06.469780+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 81.3, + "water_total": 5.0, + "average_temperature": 30.0333, + "experience_temperature": 32.2933, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T18:30:07.008828+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.1, + "humidity": 81.3, + "water_total": 5.0, + "average_temperature": 30.2333, + "experience_temperature": 31.8362, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T18:40:06.870139+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 81.1, + "water_total": 10.0, + "average_temperature": 30.0, + "experience_temperature": 32.22, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T18:50:06.494468+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 82.5, + "water_total": 10.0, + "average_temperature": 30.2333, + "experience_temperature": 32.7333, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T19:00:07.103312+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 82.3, + "water_total": 10.0, + "average_temperature": 30.0667, + "experience_temperature": 32.5267, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T19:10:06.239837+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.7, + "water_total": 10.0, + "average_temperature": 30.2667, + "experience_temperature": 33.0067, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T19:20:06.542427+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 82.5, + "water_total": 10.0, + "average_temperature": 30.0667, + "experience_temperature": 32.5667, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T19:30:06.544063+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.3, + "water_total": 10.0, + "average_temperature": 30.3, + "experience_temperature": 32.96, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T19:40:06.742384+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 82.2, + "water_total": 10.0, + "average_temperature": 29.8, + "experience_temperature": 32.24, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T19:50:08.139136+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.2, + "humidity": 83.0, + "water_total": 10.0, + "average_temperature": 30.0333, + "experience_temperature": 31.319, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T20:00:07.053521+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 82.0, + "water_total": 10.0, + "average_temperature": 29.9333, + "experience_temperature": 32.3333, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T20:10:06.272774+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 82.0, + "water_total": 10.0, + "average_temperature": 29.9333, + "experience_temperature": 32.3333, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T20:20:06.251881+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.4, + "water_total": 10.0, + "average_temperature": 30.1333, + "experience_temperature": 32.8133, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T20:30:07.955626+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.8, + "water_total": 10.0, + "average_temperature": 30.4667, + "experience_temperature": 33.2267, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T20:40:07.163954+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.6, + "water_total": 10.0, + "average_temperature": 30.3333, + "experience_temperature": 33.0533, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T20:50:06.640722+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.9, + "water_total": 10.0, + "average_temperature": 30.3667, + "experience_temperature": 33.3467, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T21:00:07.173170+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.6, + "water_total": 10.0, + "average_temperature": 29.9333, + "experience_temperature": 32.6533, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T21:10:05.834277+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.6, + "water_total": 10.0, + "average_temperature": 30.2333, + "experience_temperature": 33.1533, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T21:20:08.537664+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.2, + "water_total": 10.0, + "average_temperature": 30.1333, + "experience_temperature": 32.9733, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T21:30:05.948692+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 85.0, + "water_total": 10.0, + "average_temperature": 30.1, + "experience_temperature": 33.1, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T21:40:05.507126+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.2, + "water_total": 10.0, + "average_temperature": 29.8667, + "experience_temperature": 32.7067, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T21:50:06.456623+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.7, + "water_total": 10.0, + "average_temperature": 30.0333, + "experience_temperature": 32.9733, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T22:00:05.877926+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.7, + "water_total": 10.0, + "average_temperature": 29.8667, + "experience_temperature": 32.6067, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T22:10:08.117952+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.2, + "water_total": 10.0, + "average_temperature": 29.9333, + "experience_temperature": 32.7733, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T22:20:05.680484+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.5, + "water_total": 10.0, + "average_temperature": 29.6333, + "experience_temperature": 32.3333, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T22:30:05.877067+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.9, + "water_total": 10.0, + "average_temperature": 29.7, + "experience_temperature": 32.48, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T22:40:05.868098+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.3, + "water_total": 10.0, + "average_temperature": 29.4333, + "experience_temperature": 32.0933, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T22:50:06.520136+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.8, + "water_total": 10.0, + "average_temperature": 29.6, + "experience_temperature": 32.56, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T23:00:06.359205+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 85.9, + "water_total": 10.0, + "average_temperature": 29.2333, + "experience_temperature": 32.4133, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T23:10:07.147359+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.9, + "water_total": 10.0, + "average_temperature": 29.2, + "experience_temperature": 32.18, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T23:20:07.439485+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 85.3, + "water_total": 10.0, + "average_temperature": 29.5667, + "experience_temperature": 32.6267, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T23:30:05.285803+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.2, + "water_total": 10.0, + "average_temperature": 29.8333, + "experience_temperature": 32.6733, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T23:40:05.490150+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.7, + "water_total": 10.0, + "average_temperature": 29.3, + "experience_temperature": 32.04, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-05-31T23:50:06.278389+07:00", + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.7, + "water_total": 10.0, + "average_temperature": 29.3, + "experience_temperature": 32.04, + "chill_factor": 6.5714 + }, + { + "timestamp": "2026-06-01T00:00:05.824461+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.6, + "water_total": 10.0, + "average_temperature": 29.1667, + "experience_temperature": 32.0867, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T00:10:07.108110+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 85.4, + "water_total": 10.0, + "average_temperature": 28.9667, + "experience_temperature": 32.0467, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T00:20:05.872340+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 83.7, + "water_total": 10.0, + "average_temperature": 30.1, + "experience_temperature": 32.84, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T00:30:06.736533+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 85.0, + "water_total": 10.0, + "average_temperature": 29.7, + "experience_temperature": 32.7, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T00:40:05.749443+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 86.2, + "water_total": 10.0, + "average_temperature": 29.2667, + "experience_temperature": 32.5067, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T00:50:06.596517+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 85.4, + "water_total": 10.0, + "average_temperature": 28.9333, + "experience_temperature": 32.0133, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T01:00:05.466313+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.1, + "humidity": 83.1, + "water_total": 10.0, + "average_temperature": 29.8333, + "experience_temperature": 31.8105, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T01:10:05.916122+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 85.5, + "water_total": 10.0, + "average_temperature": 29.5333, + "experience_temperature": 32.6333, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T01:20:07.431625+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 82.8, + "water_total": 10.0, + "average_temperature": 29.6, + "experience_temperature": 30.8743, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T01:30:06.250628+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 82.8, + "water_total": 10.0, + "average_temperature": 29.6, + "experience_temperature": 30.8743, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T01:40:06.381531+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 85.4, + "water_total": 10.0, + "average_temperature": 28.9667, + "experience_temperature": 32.0467, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T01:50:05.992574+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.2, + "water_total": 10.0, + "average_temperature": 29.1667, + "experience_temperature": 32.0067, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T02:00:05.787977+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 83.0, + "water_total": 10.0, + "average_temperature": 30.2333, + "experience_temperature": 32.8333, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T02:10:06.275997+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.8, + "water_total": 10.0, + "average_temperature": 29.1667, + "experience_temperature": 32.1267, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T02:20:06.650307+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.6, + "water_total": 10.0, + "average_temperature": 30.3, + "experience_temperature": 33.22, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T02:30:05.651887+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.6, + "water_total": 10.0, + "average_temperature": 30.3, + "experience_temperature": 33.22, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T02:40:05.446320+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 82.4, + "water_total": 10.0, + "average_temperature": 29.8, + "experience_temperature": 32.28, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T02:50:05.506966+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.2, + "water_total": 10.0, + "average_temperature": 29.8333, + "experience_temperature": 32.6733, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T03:00:05.810526+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 83.3, + "water_total": 12.0, + "average_temperature": 29.6667, + "experience_temperature": 32.3267, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T03:10:05.589290+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.5, + "water_total": 12.0, + "average_temperature": 29.0333, + "experience_temperature": 31.9333, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T03:20:05.839472+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 81.8, + "water_total": 12.0, + "average_temperature": 29.5, + "experience_temperature": 31.86, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T03:30:05.754244+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 83.5, + "water_total": 12.0, + "average_temperature": 29.9333, + "experience_temperature": 32.6333, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T03:40:06.176676+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 83.2, + "water_total": 12.0, + "average_temperature": 29.4, + "experience_temperature": 32.04, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T03:50:07.169157+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 83.9, + "water_total": 12.0, + "average_temperature": 30.2667, + "experience_temperature": 33.0467, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T04:00:05.799346+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 82.0, + "water_total": 12.0, + "average_temperature": 29.0667, + "experience_temperature": 31.4667, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T04:10:06.133684+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 81.9, + "water_total": 12.0, + "average_temperature": 30.0667, + "experience_temperature": 32.4467, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T04:20:05.527401+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 82.8, + "water_total": 12.0, + "average_temperature": 29.2, + "experience_temperature": 31.76, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T04:30:05.700541+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 82.6, + "water_total": 12.0, + "average_temperature": 29.7333, + "experience_temperature": 32.2533, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T04:40:06.248096+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 83.3, + "water_total": 12.0, + "average_temperature": 29.2333, + "experience_temperature": 31.8933, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T04:50:05.804724+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 82.4, + "water_total": 14.0, + "average_temperature": 29.6, + "experience_temperature": 32.08, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T05:00:06.048454+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.2, + "water_total": 14.0, + "average_temperature": 29.3, + "experience_temperature": 32.14, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T05:10:06.220686+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 83.9, + "water_total": 14.0, + "average_temperature": 28.9, + "experience_temperature": 31.68, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T05:20:05.781985+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 81.6, + "water_total": 14.0, + "average_temperature": 29.4, + "experience_temperature": 31.72, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T05:30:06.367913+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.1, + "water_total": 14.0, + "average_temperature": 29.8333, + "experience_temperature": 32.6533, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T05:40:05.957697+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 83.2, + "water_total": 14.0, + "average_temperature": 29.0667, + "experience_temperature": 31.7067, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T05:50:06.096242+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 82.4, + "water_total": 16.0, + "average_temperature": 29.8333, + "experience_temperature": 32.3133, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T06:00:06.541241+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.2, + "water_total": 16.0, + "average_temperature": 29.3333, + "experience_temperature": 32.1733, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T06:10:05.775000+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 83.0, + "water_total": 16.0, + "average_temperature": 28.8333, + "experience_temperature": 31.4333, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T06:20:06.363823+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 82.3, + "water_total": 16.0, + "average_temperature": 29.2, + "experience_temperature": 31.66, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T06:30:06.271382+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.1, + "water_total": 16.0, + "average_temperature": 29.6667, + "experience_temperature": 32.4867, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T06:40:08.025515+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 82.4, + "water_total": 16.0, + "average_temperature": 29.0333, + "experience_temperature": 31.5133, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T06:50:06.003206+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 83.0, + "water_total": 16.0, + "average_temperature": 29.5667, + "experience_temperature": 32.1667, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T07:00:06.085753+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 82.9, + "water_total": 16.0, + "average_temperature": 29.0, + "experience_temperature": 31.58, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T07:10:06.188554+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 83.9, + "water_total": 16.0, + "average_temperature": 29.5667, + "experience_temperature": 32.3467, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T07:20:06.517176+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 82.7, + "water_total": 16.0, + "average_temperature": 29.3, + "experience_temperature": 31.84, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T07:30:06.817105+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 85.2, + "water_total": 16.0, + "average_temperature": 29.3333, + "experience_temperature": 32.3733, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T07:40:05.525283+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 83.7, + "water_total": 16.0, + "average_temperature": 29.8, + "experience_temperature": 32.54, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T07:50:05.913730+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 85.3, + "water_total": 16.0, + "average_temperature": 30.0, + "experience_temperature": 33.06, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T08:00:09.600046+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.1, + "humidity": 82.9, + "water_total": 20.0, + "average_temperature": 30.4, + "experience_temperature": 32.3371, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T08:10:05.713229+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.1, + "humidity": 82.0, + "water_total": 20.0, + "average_temperature": 30.6, + "experience_temperature": 32.3571, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T08:20:05.907464+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 82.2, + "water_total": 20.0, + "average_temperature": 30.6667, + "experience_temperature": 33.1067, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T08:30:06.609986+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 80.9, + "water_total": 20.0, + "average_temperature": 31.1, + "experience_temperature": 31.9943, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T08:40:05.798732+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 78.2, + "water_total": 20.0, + "average_temperature": 31.0, + "experience_temperature": 31.3543, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T08:50:07.009375+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 80.2, + "water_total": 20.0, + "average_temperature": 31.3, + "experience_temperature": 32.0543, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T09:00:08.271921+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 76.3, + "water_total": 24.0, + "average_temperature": 31.7, + "experience_temperature": 31.6743, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T09:10:05.599771+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.3, + "humidity": 74.5, + "water_total": 24.0, + "average_temperature": 31.7667, + "experience_temperature": 30.7381, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T09:20:06.827802+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.5, + "humidity": 73.6, + "water_total": 24.0, + "average_temperature": 31.8667, + "experience_temperature": 29.3724, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T09:30:06.511924+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 74.8, + "water_total": 24.0, + "average_temperature": 31.8, + "experience_temperature": 31.4743, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T09:40:06.393315+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.7, + "humidity": 71.8, + "water_total": 24.0, + "average_temperature": 31.8667, + "experience_temperature": 27.7267, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T09:50:06.480730+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.6, + "humidity": 72.3, + "water_total": 24.0, + "average_temperature": 32.1667, + "experience_temperature": 28.7695, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T10:00:05.857824+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.6, + "humidity": 68.3, + "water_total": 24.0, + "average_temperature": 32.4333, + "experience_temperature": 28.2362, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T10:10:06.883301+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.7, + "humidity": 69.5, + "water_total": 26.0, + "average_temperature": 32.6333, + "experience_temperature": 28.0333, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T10:20:06.157389+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.7, + "humidity": 69.5, + "water_total": 26.0, + "average_temperature": 32.6333, + "experience_temperature": 28.0333, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T10:30:05.748915+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.6, + "humidity": 72.0, + "water_total": 26.0, + "average_temperature": 32.6667, + "experience_temperature": 29.2095, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T10:40:06.127291+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.8, + "humidity": 69.6, + "water_total": 26.0, + "average_temperature": 32.8, + "experience_temperature": 27.5771, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T10:50:06.662344+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.7, + "humidity": 70.6, + "water_total": 26.0, + "average_temperature": 32.8333, + "experience_temperature": 28.4533, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T11:00:08.893418+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.7, + "humidity": 70.4, + "water_total": 26.0, + "average_temperature": 32.8, + "experience_temperature": 28.38, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T11:10:06.778538+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.9, + "humidity": 68.9, + "water_total": 26.0, + "average_temperature": 32.8333, + "experience_temperature": 26.8276, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T11:20:07.276634+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 1.0, + "humidity": 71.6, + "water_total": 26.0, + "average_temperature": 33.2, + "experience_temperature": 27.0914, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T11:30:06.846301+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 1.2, + "humidity": 70.2, + "water_total": 26.0, + "average_temperature": 33.3, + "experience_temperature": 25.6257, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T11:40:06.088593+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 1.1, + "humidity": 68.9, + "water_total": 26.0, + "average_temperature": 33.3667, + "experience_temperature": 26.0752, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T11:50:06.397898+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.8, + "humidity": 70.3, + "water_total": 26.0, + "average_temperature": 32.8, + "experience_temperature": 27.7171, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T12:00:06.492980+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.7, + "humidity": 70.9, + "water_total": 26.0, + "average_temperature": 32.7333, + "experience_temperature": 28.4133, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T12:10:06.300362+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 1.2, + "humidity": 70.9, + "water_total": 26.0, + "average_temperature": 33.0333, + "experience_temperature": 25.499, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T12:20:06.067958+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.7, + "humidity": 70.1, + "water_total": 28.0, + "average_temperature": 32.7667, + "experience_temperature": 28.2867, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T12:30:05.714980+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 1.2, + "humidity": 71.9, + "water_total": 28.0, + "average_temperature": 32.9333, + "experience_temperature": 25.599, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T12:40:06.791563+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 1.2, + "humidity": 69.8, + "water_total": 29.0, + "average_temperature": 33.0667, + "experience_temperature": 25.3124, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T12:50:07.230029+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.8, + "humidity": 71.0, + "water_total": 29.0, + "average_temperature": 32.7, + "experience_temperature": 27.7571, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T13:00:05.644228+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.6, + "humidity": 70.5, + "water_total": 29.0, + "average_temperature": 32.8, + "experience_temperature": 29.0429, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T13:10:05.715758+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 1.2, + "humidity": 69.1, + "water_total": 34.0, + "average_temperature": 32.9, + "experience_temperature": 25.0057, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T13:20:06.332246+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 1.2, + "humidity": 69.3, + "water_total": 38.0, + "average_temperature": 32.9333, + "experience_temperature": 25.079, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T13:30:05.945127+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.9, + "humidity": 69.4, + "water_total": 41.0, + "average_temperature": 33.1667, + "experience_temperature": 27.261, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T13:40:06.383886+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 1.2, + "humidity": 70.9, + "water_total": 43.0, + "average_temperature": 33.1, + "experience_temperature": 25.5657, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T13:50:05.895289+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.7, + "humidity": 72.2, + "water_total": 51.0, + "average_temperature": 32.8, + "experience_temperature": 28.74, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T14:10:06.495009+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.9, + "humidity": 75.9, + "water_total": 65.0, + "average_temperature": 31.8333, + "experience_temperature": 27.2276, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T14:20:07.615438+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.6, + "humidity": 76.8, + "water_total": 78.0, + "average_temperature": 31.9, + "experience_temperature": 29.4029, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T14:30:07.478858+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.8, + "humidity": 75.6, + "water_total": 95.0, + "average_temperature": 31.8333, + "experience_temperature": 27.8105, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T14:40:07.483672+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 75.4, + "water_total": 118.0, + "average_temperature": 31.7667, + "experience_temperature": 31.561, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T14:50:06.737868+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.4, + "humidity": 76.4, + "water_total": 155.0, + "average_temperature": 31.8, + "experience_temperature": 30.5086, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T15:10:06.163742+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 77.7, + "water_total": 222.0, + "average_temperature": 31.7667, + "experience_temperature": 32.021, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T15:20:05.823965+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.3, + "humidity": 78.7, + "water_total": 254.0, + "average_temperature": 31.8333, + "experience_temperature": 31.6448, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T15:30:06.053567+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.3, + "humidity": 77.1, + "water_total": 288.0, + "average_temperature": 31.6667, + "experience_temperature": 31.1581, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T15:40:05.893642+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.3, + "humidity": 77.1, + "water_total": 288.0, + "average_temperature": 31.6667, + "experience_temperature": 31.1581, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T15:50:06.538289+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 78.0, + "water_total": 351.0, + "average_temperature": 31.7, + "experience_temperature": 32.0143, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T16:10:06.005655+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 78.7, + "water_total": 422.0, + "average_temperature": 31.6, + "experience_temperature": 32.0543, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T16:20:06.164406+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 78.5, + "water_total": 458.0, + "average_temperature": 31.5667, + "experience_temperature": 31.981, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T16:30:06.493659+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.3, + "humidity": 79.7, + "water_total": 486.0, + "average_temperature": 31.6333, + "experience_temperature": 31.6448, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T16:40:06.324315+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 79.0, + "water_total": 521.0, + "average_temperature": 31.4667, + "experience_temperature": 31.981, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T16:50:06.242458+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 79.8, + "water_total": 554.0, + "average_temperature": 31.5, + "experience_temperature": 32.1743, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T17:10:06.594812+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 76.0, + "water_total": 591.0, + "average_temperature": 31.7, + "experience_temperature": 31.6143, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T17:20:06.247887+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 81.7, + "water_total": 69.0, + "average_temperature": 31.2333, + "experience_temperature": 32.2876, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T17:30:08.616992+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 81.4, + "water_total": 99.0, + "average_temperature": 30.9, + "experience_temperature": 33.18, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T17:40:06.613626+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 81.0, + "water_total": 129.0, + "average_temperature": 30.8667, + "experience_temperature": 33.0667, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T17:50:07.394224+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 79.2, + "water_total": 157.0, + "average_temperature": 30.7, + "experience_temperature": 31.2543, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T18:00:06.842195+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.1, + "humidity": 79.7, + "water_total": 194.0, + "average_temperature": 30.5667, + "experience_temperature": 31.8638, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T18:10:08.521374+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 80.0, + "water_total": 222.0, + "average_temperature": 30.6333, + "experience_temperature": 31.3476, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T18:20:08.409317+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 80.4, + "water_total": 260.0, + "average_temperature": 30.4667, + "experience_temperature": 31.261, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T18:30:07.326499+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 81.1, + "water_total": 284.0, + "average_temperature": 30.3667, + "experience_temperature": 32.5867, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T18:40:06.543185+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 81.5, + "water_total": 321.0, + "average_temperature": 30.4667, + "experience_temperature": 32.7667, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T18:50:06.769037+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 81.5, + "water_total": 360.0, + "average_temperature": 30.5, + "experience_temperature": 31.5143, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T19:00:07.075005+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.3, + "humidity": 80.9, + "water_total": 396.0, + "average_temperature": 30.2, + "experience_temperature": 30.4514, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T19:10:07.096927+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.1, + "humidity": 81.1, + "water_total": 427.0, + "average_temperature": 30.1333, + "experience_temperature": 31.7105, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T19:20:06.260010+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.1, + "humidity": 81.5, + "water_total": 468.0, + "average_temperature": 30.3333, + "experience_temperature": 31.9905, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T19:30:06.098493+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 80.8, + "water_total": 501.0, + "average_temperature": 30.0333, + "experience_temperature": 32.1933, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T19:40:07.771776+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 80.3, + "water_total": 538.0, + "average_temperature": 29.8333, + "experience_temperature": 30.6076, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T19:50:07.495686+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 83.1, + "water_total": 562.0, + "average_temperature": 29.7333, + "experience_temperature": 32.3533, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T20:00:07.817421+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.3, + "humidity": 81.0, + "water_total": 588.0, + "average_temperature": 29.7667, + "experience_temperature": 30.0381, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T20:10:07.292234+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 82.2, + "water_total": 615.0, + "average_temperature": 29.7, + "experience_temperature": 32.14, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T20:20:06.557444+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 80.9, + "water_total": 645.0, + "average_temperature": 29.5333, + "experience_temperature": 31.7133, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T20:30:06.503659+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 82.6, + "water_total": 674.0, + "average_temperature": 29.5333, + "experience_temperature": 32.0533, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T20:40:06.666402+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 82.6, + "water_total": 701.0, + "average_temperature": 29.5, + "experience_temperature": 30.7343, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T20:50:07.080832+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 82.4, + "water_total": 723.0, + "average_temperature": 29.5333, + "experience_temperature": 32.0133, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T21:00:05.689675+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.1, + "humidity": 83.9, + "water_total": 757.0, + "average_temperature": 29.9333, + "experience_temperature": 32.0705, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T21:10:07.024751+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 83.3, + "water_total": 793.0, + "average_temperature": 30.3333, + "experience_temperature": 32.9933, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T21:20:06.413178+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 82.8, + "water_total": 822.0, + "average_temperature": 30.0, + "experience_temperature": 32.56, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T21:30:10.827479+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 81.6, + "water_total": 845.0, + "average_temperature": 29.9333, + "experience_temperature": 30.9676, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T21:40:06.323070+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 82.8, + "water_total": 877.0, + "average_temperature": 29.8333, + "experience_temperature": 32.3933, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T21:50:06.549613+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.1, + "humidity": 81.9, + "water_total": 900.0, + "average_temperature": 29.8333, + "experience_temperature": 31.5705, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T22:00:07.184717+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 83.2, + "water_total": 928.0, + "average_temperature": 29.8667, + "experience_temperature": 32.5067, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T22:10:06.714880+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.2, + "humidity": 83.2, + "water_total": 957.0, + "average_temperature": 29.7, + "experience_temperature": 31.0543, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T22:20:06.776952+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 83.7, + "water_total": 978.0, + "average_temperature": 29.5333, + "experience_temperature": 32.2733, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T22:30:06.325119+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.4, + "water_total": 1009.0, + "average_temperature": 29.6667, + "experience_temperature": 32.5467, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T22:40:08.223449+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 85.0, + "water_total": 1044.0, + "average_temperature": 29.7333, + "experience_temperature": 32.7333, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T22:50:06.341841+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 83.2, + "water_total": 1059.0, + "average_temperature": 29.4, + "experience_temperature": 32.04, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T23:00:06.356103+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.4, + "water_total": 1074.0, + "average_temperature": 29.2667, + "experience_temperature": 32.1467, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T23:10:07.314711+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.3, + "water_total": 1090.0, + "average_temperature": 29.2, + "experience_temperature": 32.06, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T23:20:06.394103+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.2, + "water_total": 1100.0, + "average_temperature": 29.1333, + "experience_temperature": 31.9733, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T23:30:07.246184+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.2, + "water_total": 1100.0, + "average_temperature": 29.1333, + "experience_temperature": 31.9733, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T23:40:07.003987+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.8, + "water_total": 1126.0, + "average_temperature": 29.1333, + "experience_temperature": 32.0933, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-01T23:50:07.695660+07:00", + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.4, + "water_total": 1139.0, + "average_temperature": 29.1, + "experience_temperature": 31.98, + "chill_factor": 6.4286 + }, + { + "timestamp": "2026-06-02T00:00:06.186083+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 85.7, + "water_total": 1148.0, + "average_temperature": 29.1, + "experience_temperature": 32.24, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T00:10:06.943503+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 85.0, + "water_total": 1163.0, + "average_temperature": 28.7667, + "experience_temperature": 31.7667, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T00:20:06.712582+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 85.6, + "water_total": 1173.0, + "average_temperature": 28.7333, + "experience_temperature": 31.8533, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T00:30:09.424052+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 85.1, + "water_total": 1182.0, + "average_temperature": 28.6333, + "experience_temperature": 31.6533, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T00:40:06.452715+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 86.0, + "water_total": 1196.0, + "average_temperature": 28.6, + "experience_temperature": 31.8, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T00:50:07.015649+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 85.1, + "water_total": 1206.0, + "average_temperature": 28.4333, + "experience_temperature": 31.4533, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T01:00:06.782249+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 85.6, + "water_total": 1216.0, + "average_temperature": 28.3667, + "experience_temperature": 31.4867, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T01:10:07.175627+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 85.3, + "water_total": 1229.0, + "average_temperature": 28.3667, + "experience_temperature": 31.4267, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T01:20:06.555939+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 86.6, + "water_total": 1238.0, + "average_temperature": 28.3333, + "experience_temperature": 31.6533, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T01:30:06.722813+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 85.3, + "water_total": 1254.0, + "average_temperature": 28.3667, + "experience_temperature": 31.4267, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T01:40:06.483234+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 86.0, + "water_total": 1264.0, + "average_temperature": 28.3667, + "experience_temperature": 31.5667, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T01:50:06.662487+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 86.2, + "water_total": 1275.0, + "average_temperature": 28.3333, + "experience_temperature": 31.5733, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T02:00:06.940921+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 86.2, + "water_total": 1290.0, + "average_temperature": 28.3, + "experience_temperature": 31.54, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T02:10:06.719610+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 86.8, + "water_total": 1316.0, + "average_temperature": 28.7667, + "experience_temperature": 32.1267, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T02:20:07.205350+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 85.9, + "water_total": 1366.0, + "average_temperature": 29.0667, + "experience_temperature": 32.2467, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T02:30:06.367011+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 86.0, + "water_total": 1403.0, + "average_temperature": 28.5, + "experience_temperature": 31.7, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T02:40:07.413252+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 85.6, + "water_total": 1432.0, + "average_temperature": 28.2667, + "experience_temperature": 31.3867, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T02:50:07.523513+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 85.2, + "water_total": 1459.0, + "average_temperature": 28.4, + "experience_temperature": 31.44, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T03:00:05.739398+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.1, + "humidity": 85.0, + "water_total": 1481.0, + "average_temperature": 28.5333, + "experience_temperature": 30.9048, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T03:10:06.637638+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 84.8, + "water_total": 1535.0, + "average_temperature": 28.8667, + "experience_temperature": 31.8267, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T03:20:09.776593+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 84.0, + "water_total": 1561.0, + "average_temperature": 28.3667, + "experience_temperature": 31.1667, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T03:30:06.821647+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.1, + "humidity": 83.6, + "water_total": 1577.0, + "average_temperature": 28.1, + "experience_temperature": 30.1914, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T03:40:06.501224+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 84.4, + "water_total": 1604.0, + "average_temperature": 28.1667, + "experience_temperature": 31.0467, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T03:50:06.667818+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 83.1, + "water_total": 1640.0, + "average_temperature": 28.4, + "experience_temperature": 31.02, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T04:00:05.893957+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 83.4, + "water_total": 1663.0, + "average_temperature": 28.1333, + "experience_temperature": 30.8133, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T04:10:06.501435+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 83.6, + "water_total": 1693.0, + "average_temperature": 27.8667, + "experience_temperature": 30.5867, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T04:20:06.428270+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 83.2, + "water_total": 1716.0, + "average_temperature": 27.7333, + "experience_temperature": 30.3733, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T04:30:07.451985+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 83.7, + "water_total": 1736.0, + "average_temperature": 27.7333, + "experience_temperature": 30.4733, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T04:40:06.783406+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 84.9, + "water_total": 1764.0, + "average_temperature": 27.9333, + "experience_temperature": 30.9133, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T04:50:06.127935+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.1, + "humidity": 83.5, + "water_total": 1802.0, + "average_temperature": 28.1667, + "experience_temperature": 30.2381, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T05:00:06.700470+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 84.4, + "water_total": 1836.0, + "average_temperature": 27.7333, + "experience_temperature": 30.6133, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T05:10:08.127414+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 84.6, + "water_total": 1862.0, + "average_temperature": 27.6333, + "experience_temperature": 30.5533, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T05:20:06.508202+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 84.3, + "water_total": 1879.0, + "average_temperature": 27.6667, + "experience_temperature": 30.5267, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T05:30:07.025495+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.1, + "humidity": 81.5, + "water_total": 1931.0, + "average_temperature": 28.9667, + "experience_temperature": 30.6381, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T05:40:07.360238+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 81.5, + "water_total": 1953.0, + "average_temperature": 29.0667, + "experience_temperature": 31.3667, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T05:50:06.471216+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.1, + "humidity": 80.7, + "water_total": 1980.0, + "average_temperature": 29.4, + "experience_temperature": 30.9114, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T06:00:07.265513+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 82.5, + "water_total": 2006.0, + "average_temperature": 29.3, + "experience_temperature": 31.8, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T06:10:05.994571+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 80.5, + "water_total": 2035.0, + "average_temperature": 28.7, + "experience_temperature": 30.8, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T06:20:07.302141+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 81.2, + "water_total": 2070.0, + "average_temperature": 28.9, + "experience_temperature": 31.14, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T06:30:06.636932+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 86.1, + "water_total": 2085.0, + "average_temperature": 28.7667, + "experience_temperature": 30.7295, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T06:40:07.051248+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 84.6, + "water_total": 2119.0, + "average_temperature": 28.3333, + "experience_temperature": 31.2533, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T06:50:07.987921+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.1, + "humidity": 81.6, + "water_total": 2145.0, + "average_temperature": 28.8333, + "experience_temperature": 30.5248, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T07:00:06.963307+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 81.5, + "water_total": 2171.0, + "average_temperature": 29.6, + "experience_temperature": 31.9, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T07:10:06.424732+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 83.2, + "water_total": 2200.0, + "average_temperature": 28.8333, + "experience_temperature": 31.4733, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T07:20:06.946015+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 85.0, + "water_total": 2235.0, + "average_temperature": 28.9667, + "experience_temperature": 31.9667, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T07:30:06.435810+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 83.8, + "water_total": 2270.0, + "average_temperature": 29.2, + "experience_temperature": 31.96, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T07:40:06.111866+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 82.4, + "water_total": 2305.0, + "average_temperature": 29.3667, + "experience_temperature": 31.8467, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T07:50:05.995625+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 81.6, + "water_total": 2343.0, + "average_temperature": 29.9, + "experience_temperature": 32.22, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T08:00:05.981712+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 80.6, + "water_total": 2381.0, + "average_temperature": 30.1333, + "experience_temperature": 32.2533, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T08:10:06.855375+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.1, + "humidity": 80.1, + "water_total": 2422.0, + "average_temperature": 30.3667, + "experience_temperature": 31.7581, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T08:20:05.657935+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 80.0, + "water_total": 2450.0, + "average_temperature": 30.7333, + "experience_temperature": 32.7333, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T08:30:07.534751+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.1, + "humidity": 75.8, + "water_total": 2503.0, + "average_temperature": 31.3, + "experience_temperature": 31.8314, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T08:40:05.889826+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.1, + "humidity": 76.2, + "water_total": 2518.0, + "average_temperature": 31.6333, + "experience_temperature": 32.2448, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T08:50:06.701485+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 75.1, + "water_total": 2518.0, + "average_temperature": 31.6, + "experience_temperature": 31.3629, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T09:00:07.196616+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.3, + "humidity": 73.4, + "water_total": 2518.0, + "average_temperature": 31.6333, + "experience_temperature": 30.4276, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T09:10:06.558381+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.3, + "humidity": 73.6, + "water_total": 2518.0, + "average_temperature": 31.6, + "experience_temperature": 30.4343, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T09:20:06.269659+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.6, + "humidity": 73.2, + "water_total": 2518.0, + "average_temperature": 31.7667, + "experience_temperature": 28.6352, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T09:30:05.906790+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.6, + "humidity": 71.1, + "water_total": 2518.0, + "average_temperature": 31.9, + "experience_temperature": 28.3486, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T09:40:10.747134+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.5, + "humidity": 71.7, + "water_total": 2518.0, + "average_temperature": 32.1667, + "experience_temperature": 29.3638, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T09:50:05.196569+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.6, + "humidity": 70.1, + "water_total": 2518.0, + "average_temperature": 32.3333, + "experience_temperature": 28.5819, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T10:00:09.826659+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.0, + "humidity": 70.4, + "water_total": 2518.0, + "average_temperature": 32.6667, + "experience_temperature": 26.461, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T10:10:06.173084+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.8, + "humidity": 70.1, + "water_total": 2683.0, + "average_temperature": 32.3, + "experience_temperature": 27.2914, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T10:20:05.747822+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.8, + "humidity": 70.1, + "water_total": 2683.0, + "average_temperature": 32.3, + "experience_temperature": 27.2914, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T10:30:06.076170+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.6, + "humidity": 68.9, + "water_total": 2833.0, + "average_temperature": 32.6333, + "experience_temperature": 28.6419, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T10:40:05.948232+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.0, + "humidity": 67.3, + "water_total": 2863.0, + "average_temperature": 32.8333, + "experience_temperature": 26.0076, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T10:50:06.661941+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.3, + "humidity": 68.5, + "water_total": 2902.0, + "average_temperature": 33.2667, + "experience_temperature": 24.7952, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T11:00:07.644783+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.1, + "humidity": 68.8, + "water_total": 2928.0, + "average_temperature": 33.3333, + "experience_temperature": 26.179, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T11:10:07.274133+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.0, + "humidity": 67.7, + "water_total": 2929.0, + "average_temperature": 33.4333, + "experience_temperature": 26.6876, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T11:20:06.488504+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.2, + "humidity": 66.4, + "water_total": 2929.0, + "average_temperature": 33.4333, + "experience_temperature": 25.1705, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T11:30:07.694493+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.1, + "humidity": 66.0, + "water_total": 2929.0, + "average_temperature": 33.6333, + "experience_temperature": 25.919, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T11:40:06.847956+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.2, + "humidity": 63.7, + "water_total": 2929.0, + "average_temperature": 33.9333, + "experience_temperature": 25.1305, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T11:50:08.087786+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.2, + "humidity": 63.7, + "water_total": 2929.0, + "average_temperature": 33.9333, + "experience_temperature": 25.1305, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T12:00:06.488523+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.1, + "humidity": 64.5, + "water_total": 2929.0, + "average_temperature": 33.9333, + "experience_temperature": 25.919, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T12:10:07.216816+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.3, + "humidity": 64.8, + "water_total": 2929.0, + "average_temperature": 33.7, + "experience_temperature": 24.4886, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T12:20:06.680184+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.2, + "humidity": 63.2, + "water_total": 2929.0, + "average_temperature": 33.9, + "experience_temperature": 24.9971, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T12:30:06.053859+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.3, + "humidity": 63.1, + "water_total": 2929.0, + "average_temperature": 33.9333, + "experience_temperature": 24.3819, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T12:40:05.684318+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.2, + "humidity": 63.4, + "water_total": 2929.0, + "average_temperature": 33.7667, + "experience_temperature": 24.9038, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T12:50:06.999432+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.2, + "humidity": 63.7, + "water_total": 2929.0, + "average_temperature": 33.9333, + "experience_temperature": 25.1305, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T13:00:07.394997+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.2, + "humidity": 61.7, + "water_total": 2960.0, + "average_temperature": 33.7333, + "experience_temperature": 24.5305, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T13:10:06.579752+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.9, + "humidity": 62.3, + "water_total": 2985.0, + "average_temperature": 34.0667, + "experience_temperature": 20.5838, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T13:20:06.155292+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.6, + "humidity": 62.5, + "water_total": 3010.0, + "average_temperature": 34.0667, + "experience_temperature": 22.5095, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T13:30:06.226331+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.6, + "humidity": 62.5, + "water_total": 3010.0, + "average_temperature": 34.0667, + "experience_temperature": 22.5095, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T13:40:06.560892+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.7, + "humidity": 62.4, + "water_total": 3071.0, + "average_temperature": 34.0667, + "experience_temperature": 21.861, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T13:50:06.313880+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.7, + "humidity": 62.4, + "water_total": 3071.0, + "average_temperature": 34.0667, + "experience_temperature": 21.861, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T14:10:06.359879+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.8, + "humidity": 60.6, + "water_total": 3152.0, + "average_temperature": 34.0667, + "experience_temperature": 20.8724, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T14:20:06.639634+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.8, + "humidity": 59.5, + "water_total": 3179.0, + "average_temperature": 34.0333, + "experience_temperature": 20.619, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T14:30:06.921284+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.1, + "humidity": 62.0, + "water_total": 3206.0, + "average_temperature": 33.9333, + "experience_temperature": 25.419, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T14:40:16.975591+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.1, + "humidity": 62.0, + "water_total": 3206.0, + "average_temperature": 33.9333, + "experience_temperature": 25.419, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T14:50:07.594450+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.2, + "humidity": 69.7, + "water_total": 3267.0, + "average_temperature": 33.4, + "experience_temperature": 25.7971, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T15:10:07.935632+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.2, + "humidity": 71.2, + "water_total": 3309.0, + "average_temperature": 32.8667, + "experience_temperature": 25.5638, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T15:20:10.252738+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.2, + "humidity": 71.1, + "water_total": 3327.0, + "average_temperature": 32.8667, + "experience_temperature": 25.5438, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T15:30:06.129373+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 1.4, + "humidity": 70.4, + "water_total": 3352.0, + "average_temperature": 32.5667, + "experience_temperature": 23.8467, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T15:40:08.355293+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.8, + "humidity": 70.9, + "water_total": 3379.0, + "average_temperature": 32.4333, + "experience_temperature": 27.5848, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T15:50:06.919639+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.7, + "humidity": 72.0, + "water_total": 3403.0, + "average_temperature": 32.3, + "experience_temperature": 28.3, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T16:10:06.790800+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.6, + "humidity": 71.6, + "water_total": 3458.0, + "average_temperature": 32.0667, + "experience_temperature": 28.6152, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T16:20:06.838194+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.7, + "humidity": 71.7, + "water_total": 3482.0, + "average_temperature": 31.8333, + "experience_temperature": 27.7733, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T16:30:08.538320+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.7, + "humidity": 72.6, + "water_total": 3506.0, + "average_temperature": 31.7, + "experience_temperature": 27.82, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T16:40:07.747111+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.7, + "humidity": 72.4, + "water_total": 3529.0, + "average_temperature": 31.6, + "experience_temperature": 27.68, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T16:50:06.844227+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.1, + "humidity": 72.8, + "water_total": 3553.0, + "average_temperature": 31.5333, + "experience_temperature": 31.4648, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T17:10:05.661725+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.4, + "humidity": 71.8, + "water_total": 32.0, + "average_temperature": 31.4333, + "experience_temperature": 29.279, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T17:20:06.846143+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.3, + "humidity": 73.7, + "water_total": 56.0, + "average_temperature": 31.3, + "experience_temperature": 30.1543, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T17:30:07.990159+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 74.2, + "water_total": 86.0, + "average_temperature": 31.2333, + "experience_temperature": 30.8162, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T17:40:07.205217+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 74.2, + "water_total": 86.0, + "average_temperature": 31.2333, + "experience_temperature": 30.8162, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T17:50:06.358739+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 74.7, + "water_total": 146.0, + "average_temperature": 31.0, + "experience_temperature": 30.6829, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T18:00:05.790138+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 74.7, + "water_total": 146.0, + "average_temperature": 31.0, + "experience_temperature": 30.6829, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T18:10:06.224628+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.4, + "humidity": 76.7, + "water_total": 201.0, + "average_temperature": 30.7, + "experience_temperature": 29.5257, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T18:20:05.891954+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.3, + "humidity": 77.8, + "water_total": 230.0, + "average_temperature": 30.4667, + "experience_temperature": 30.141, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T18:30:06.574715+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 76.9, + "water_total": 254.0, + "average_temperature": 30.2333, + "experience_temperature": 30.3562, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T18:40:09.975637+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 76.9, + "water_total": 284.0, + "average_temperature": 30.4333, + "experience_temperature": 30.5562, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T18:50:06.477815+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 78.4, + "water_total": 324.0, + "average_temperature": 30.6333, + "experience_temperature": 31.0562, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T19:00:05.812335+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.1, + "humidity": 78.8, + "water_total": 348.0, + "average_temperature": 30.4333, + "experience_temperature": 31.5648, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T19:10:07.374446+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 78.8, + "water_total": 385.0, + "average_temperature": 30.4667, + "experience_temperature": 30.9695, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T19:20:05.679190+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 79.3, + "water_total": 422.0, + "average_temperature": 30.4, + "experience_temperature": 31.0029, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T19:30:06.160693+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 78.8, + "water_total": 448.0, + "average_temperature": 30.3, + "experience_temperature": 30.8029, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T19:40:07.862971+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 78.0, + "water_total": 477.0, + "average_temperature": 30.2, + "experience_temperature": 30.5429, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T19:50:05.935193+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 79.3, + "water_total": 507.0, + "average_temperature": 30.3667, + "experience_temperature": 32.2267, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T20:00:06.864832+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 80.1, + "water_total": 538.0, + "average_temperature": 30.3, + "experience_temperature": 31.0629, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T20:10:06.352141+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 80.3, + "water_total": 562.0, + "average_temperature": 30.3, + "experience_temperature": 31.1029, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T20:20:06.173572+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 80.7, + "water_total": 590.0, + "average_temperature": 30.3, + "experience_temperature": 31.1829, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T20:30:06.020724+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 82.2, + "water_total": 619.0, + "average_temperature": 30.3667, + "experience_temperature": 31.5495, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T20:40:06.971695+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.3, + "humidity": 80.7, + "water_total": 647.0, + "average_temperature": 30.3, + "experience_temperature": 30.5543, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T20:50:07.314087+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 80.5, + "water_total": 670.0, + "average_temperature": 30.3667, + "experience_temperature": 31.2095, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T21:00:06.808027+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 80.8, + "water_total": 692.0, + "average_temperature": 30.2667, + "experience_temperature": 31.1695, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T21:10:06.377828+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.3, + "humidity": 81.9, + "water_total": 719.0, + "average_temperature": 30.2333, + "experience_temperature": 30.7276, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T21:20:07.355193+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.3, + "humidity": 80.9, + "water_total": 735.0, + "average_temperature": 30.1333, + "experience_temperature": 30.4276, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T21:30:07.275781+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 81.6, + "water_total": 756.0, + "average_temperature": 30.2, + "experience_temperature": 31.2629, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T21:40:05.434275+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.3, + "humidity": 82.0, + "water_total": 772.0, + "average_temperature": 30.0333, + "experience_temperature": 30.5476, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T21:50:07.110876+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.1, + "humidity": 83.1, + "water_total": 787.0, + "average_temperature": 29.9333, + "experience_temperature": 31.9248, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T22:00:06.184900+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 82.3, + "water_total": 803.0, + "average_temperature": 29.7, + "experience_temperature": 30.9029, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T22:10:05.787311+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.1, + "humidity": 83.6, + "water_total": 818.0, + "average_temperature": 29.8333, + "experience_temperature": 31.9248, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T22:20:06.365791+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 82.8, + "water_total": 833.0, + "average_temperature": 29.7333, + "experience_temperature": 31.0362, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T22:30:08.559954+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 83.4, + "water_total": 849.0, + "average_temperature": 29.8333, + "experience_temperature": 32.5133, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T22:40:08.534144+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.1, + "humidity": 82.9, + "water_total": 864.0, + "average_temperature": 29.7333, + "experience_temperature": 31.6848, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T22:50:06.617746+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.0, + "humidity": 84.1, + "water_total": 879.0, + "average_temperature": 29.8333, + "experience_temperature": 32.6533, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T23:00:06.359971+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 83.8, + "water_total": 884.0, + "average_temperature": 29.6333, + "experience_temperature": 31.1362, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T23:10:06.296501+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 83.8, + "water_total": 889.0, + "average_temperature": 29.6667, + "experience_temperature": 31.1695, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T23:20:07.380894+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.1, + "humidity": 83.2, + "water_total": 893.0, + "average_temperature": 29.3667, + "experience_temperature": 31.3781, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T23:30:06.779185+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 84.3, + "water_total": 893.0, + "average_temperature": 29.5, + "experience_temperature": 31.1029, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T23:40:07.123652+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.2, + "humidity": 83.9, + "water_total": 898.0, + "average_temperature": 29.3667, + "experience_temperature": 30.8895, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-02T23:50:07.515702+07:00", + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.3, + "humidity": 82.9, + "water_total": 903.0, + "average_temperature": 29.4, + "experience_temperature": 30.0943, + "chill_factor": 6.2857 + }, + { + "timestamp": "2026-06-03T00:00:06.074429+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 83.3, + "water_total": 903.0, + "average_temperature": 29.3, + "experience_temperature": 31.3457, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T00:10:06.606409+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 84.3, + "water_total": 923.0, + "average_temperature": 29.7, + "experience_temperature": 31.3314, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T00:20:06.225818+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 83.0, + "water_total": 981.0, + "average_temperature": 29.7, + "experience_temperature": 31.6857, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T00:30:06.549530+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 83.6, + "water_total": 1020.0, + "average_temperature": 29.1333, + "experience_temperature": 31.8533, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T00:40:07.454504+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 84.0, + "water_total": 1035.0, + "average_temperature": 28.6667, + "experience_temperature": 31.4667, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T00:50:07.183231+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 83.2, + "water_total": 1045.0, + "average_temperature": 28.6, + "experience_temperature": 31.24, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T01:00:06.609716+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 81.3, + "water_total": 1061.0, + "average_temperature": 29.1333, + "experience_temperature": 31.3933, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T01:10:05.711075+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 82.4, + "water_total": 1076.0, + "average_temperature": 28.7667, + "experience_temperature": 31.2467, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T01:20:07.081466+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 82.7, + "water_total": 1086.0, + "average_temperature": 28.7333, + "experience_temperature": 31.2733, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T01:30:07.309697+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 83.7, + "water_total": 1101.0, + "average_temperature": 28.7333, + "experience_temperature": 30.859, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T01:40:06.062505+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 81.9, + "water_total": 1141.0, + "average_temperature": 29.1, + "experience_temperature": 31.48, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T01:50:05.458701+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 83.1, + "water_total": 1156.0, + "average_temperature": 28.4667, + "experience_temperature": 31.0867, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T02:00:05.913432+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 81.1, + "water_total": 1166.0, + "average_temperature": 28.7, + "experience_temperature": 30.92, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T02:10:06.956811+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 81.7, + "water_total": 1180.0, + "average_temperature": 29.6, + "experience_temperature": 31.94, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T02:20:06.122417+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 82.1, + "water_total": 1190.0, + "average_temperature": 28.6667, + "experience_temperature": 30.4724, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T02:30:06.318821+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 81.5, + "water_total": 1211.0, + "average_temperature": 28.7667, + "experience_temperature": 29.8381, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T02:40:06.731329+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 79.2, + "water_total": 1221.0, + "average_temperature": 29.6333, + "experience_temperature": 30.2448, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T02:50:06.916584+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 82.8, + "water_total": 1243.0, + "average_temperature": 29.0333, + "experience_temperature": 31.5933, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T03:00:06.705386+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 81.7, + "water_total": 1271.0, + "average_temperature": 28.4333, + "experience_temperature": 30.7733, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T03:10:05.958666+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 80.3, + "water_total": 1287.0, + "average_temperature": 28.9333, + "experience_temperature": 29.7648, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T03:20:05.914150+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.3, + "humidity": 79.1, + "water_total": 1308.0, + "average_temperature": 29.4667, + "experience_temperature": 29.4438, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T03:30:05.971957+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.3, + "humidity": 79.1, + "water_total": 1308.0, + "average_temperature": 29.4667, + "experience_temperature": 29.4438, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T03:40:05.765354+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 81.5, + "water_total": 1333.0, + "average_temperature": 28.3667, + "experience_temperature": 29.4381, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T03:50:05.838786+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 81.0, + "water_total": 1355.0, + "average_temperature": 28.7667, + "experience_temperature": 30.9667, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T04:00:07.055883+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 80.5, + "water_total": 1359.0, + "average_temperature": 29.2333, + "experience_temperature": 30.1048, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T04:10:07.305154+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 83.2, + "water_total": 1364.0, + "average_temperature": 29.4667, + "experience_temperature": 32.1067, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T04:20:06.184507+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 83.2, + "water_total": 1364.0, + "average_temperature": 29.4667, + "experience_temperature": 32.1067, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T04:30:06.652930+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 82.2, + "water_total": 1384.0, + "average_temperature": 28.8333, + "experience_temperature": 30.659, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T04:40:07.104445+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 82.3, + "water_total": 1420.0, + "average_temperature": 28.4667, + "experience_temperature": 30.3124, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T04:50:06.160867+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 80.2, + "water_total": 1436.0, + "average_temperature": 28.7667, + "experience_temperature": 29.5781, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T05:00:06.213148+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 79.2, + "water_total": 1452.0, + "average_temperature": 29.5333, + "experience_temperature": 30.1448, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T05:10:07.021506+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 84.7, + "water_total": 1473.0, + "average_temperature": 29.0, + "experience_temperature": 31.94, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T05:20:07.128638+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 80.7, + "water_total": 1501.0, + "average_temperature": 28.1333, + "experience_temperature": 29.659, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T05:30:07.028799+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 81.0, + "water_total": 1527.0, + "average_temperature": 28.5667, + "experience_temperature": 30.1524, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T05:40:06.105718+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 79.9, + "water_total": 1539.0, + "average_temperature": 29.2, + "experience_temperature": 30.5657, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T05:50:06.434158+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 81.9, + "water_total": 1576.0, + "average_temperature": 29.7333, + "experience_temperature": 32.1133, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T06:00:06.322241+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 80.2, + "water_total": 1608.0, + "average_temperature": 28.3667, + "experience_temperature": 29.7924, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T06:10:06.383099+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 79.4, + "water_total": 1625.0, + "average_temperature": 28.9667, + "experience_temperature": 30.2324, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T06:20:06.847085+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 81.2, + "water_total": 1669.0, + "average_temperature": 29.6333, + "experience_temperature": 30.6448, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T06:30:06.596018+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 82.6, + "water_total": 1709.0, + "average_temperature": 29.3667, + "experience_temperature": 31.8867, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T06:40:07.196617+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 81.9, + "water_total": 1763.0, + "average_temperature": 28.6667, + "experience_temperature": 30.4324, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T06:50:06.624311+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 80.8, + "water_total": 1807.0, + "average_temperature": 29.4333, + "experience_temperature": 30.3648, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T07:00:06.761256+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 83.8, + "water_total": 1855.0, + "average_temperature": 28.7, + "experience_temperature": 31.46, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T07:10:06.481138+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.3, + "humidity": 82.4, + "water_total": 1907.0, + "average_temperature": 29.0333, + "experience_temperature": 29.6705, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T07:20:06.361410+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 82.8, + "water_total": 1958.0, + "average_temperature": 28.9333, + "experience_temperature": 30.2648, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T07:30:06.698060+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 83.7, + "water_total": 2006.0, + "average_temperature": 29.0667, + "experience_temperature": 31.1924, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T07:40:06.304538+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 83.9, + "water_total": 2054.0, + "average_temperature": 28.7, + "experience_temperature": 30.2514, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T07:50:06.141077+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 82.8, + "water_total": 2099.0, + "average_temperature": 29.1333, + "experience_temperature": 31.079, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T08:00:07.371972+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 82.8, + "water_total": 2155.0, + "average_temperature": 29.4667, + "experience_temperature": 31.4124, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T08:10:06.691308+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 82.8, + "water_total": 2155.0, + "average_temperature": 29.4667, + "experience_temperature": 31.4124, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T08:20:06.295197+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 81.0, + "water_total": 2255.0, + "average_temperature": 30.3, + "experience_temperature": 31.8857, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T08:30:07.472755+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 86.4, + "water_total": 2298.0, + "average_temperature": 30.6333, + "experience_temperature": 32.6848, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T08:40:07.068979+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 79.9, + "water_total": 2366.0, + "average_temperature": 31.2, + "experience_temperature": 31.9514, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T08:50:06.273943+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.6, + "humidity": 76.7, + "water_total": 2417.0, + "average_temperature": 31.4333, + "experience_temperature": 29.0876, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T09:00:07.196463+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.6, + "humidity": 76.7, + "water_total": 2468.0, + "average_temperature": 31.4333, + "experience_temperature": 29.0876, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T09:10:06.862992+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.8, + "humidity": 76.1, + "water_total": 2511.0, + "average_temperature": 31.6333, + "experience_temperature": 27.939, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T09:20:06.631337+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.9, + "humidity": 75.3, + "water_total": 2566.0, + "average_temperature": 31.8667, + "experience_temperature": 27.3981, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T09:30:09.798424+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.8, + "humidity": 74.0, + "water_total": 2614.0, + "average_temperature": 31.7333, + "experience_temperature": 27.619, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T09:40:07.374040+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.7, + "humidity": 75.0, + "water_total": 2665.0, + "average_temperature": 32.0333, + "experience_temperature": 28.7333, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T09:50:06.685699+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.8, + "humidity": 74.8, + "water_total": 2721.0, + "average_temperature": 32.0333, + "experience_temperature": 28.079, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T10:00:08.147564+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.8, + "humidity": 74.3, + "water_total": 2776.0, + "average_temperature": 32.3667, + "experience_temperature": 28.3124, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T10:10:08.728955+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.2, + "humidity": 73.5, + "water_total": 2821.0, + "average_temperature": 32.4333, + "experience_temperature": 25.7619, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T10:20:07.834867+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.2, + "humidity": 73.3, + "water_total": 2863.0, + "average_temperature": 32.5667, + "experience_temperature": 25.8552, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T10:30:07.808751+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.8, + "humidity": 73.1, + "water_total": 2908.0, + "average_temperature": 32.4, + "experience_temperature": 28.1057, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T10:40:07.047030+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.3, + "humidity": 70.7, + "water_total": 2964.0, + "average_temperature": 32.6333, + "experience_temperature": 24.7876, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T10:50:08.018691+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.2, + "humidity": 69.8, + "water_total": 3012.0, + "average_temperature": 32.8333, + "experience_temperature": 25.4219, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T11:00:09.366119+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.3, + "humidity": 67.5, + "water_total": 3052.0, + "average_temperature": 33.3, + "experience_temperature": 24.8143, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T11:10:08.050055+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.2, + "humidity": 69.1, + "water_total": 3119.0, + "average_temperature": 33.3667, + "experience_temperature": 25.8152, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T11:20:07.902412+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.1, + "humidity": 68.5, + "water_total": 3159.0, + "average_temperature": 33.3667, + "experience_temperature": 26.3095, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T11:30:06.645943+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.2, + "humidity": 65.9, + "water_total": 3209.0, + "average_temperature": 33.3, + "experience_temperature": 25.1086, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T11:40:09.220665+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.2, + "humidity": 66.0, + "water_total": 3257.0, + "average_temperature": 33.6667, + "experience_temperature": 25.4952, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T11:50:07.157774+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.2, + "humidity": 65.6, + "water_total": 3312.0, + "average_temperature": 33.8, + "experience_temperature": 25.5486, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T12:00:08.695686+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.4, + "humidity": 62.9, + "water_total": 3366.0, + "average_temperature": 33.7333, + "experience_temperature": 23.7133, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T12:10:08.005240+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.5, + "humidity": 65.0, + "water_total": 3418.0, + "average_temperature": 33.8667, + "experience_temperature": 23.6524, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T12:20:06.615159+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.2, + "humidity": 64.4, + "water_total": 3457.0, + "average_temperature": 33.7333, + "experience_temperature": 25.2419, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T12:30:07.728293+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.3, + "humidity": 65.7, + "water_total": 3497.0, + "average_temperature": 33.7667, + "experience_temperature": 24.921, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T12:40:07.029523+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.5, + "humidity": 64.1, + "water_total": 3503.0, + "average_temperature": 33.4333, + "experience_temperature": 23.039, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T12:50:07.186341+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.3, + "humidity": 64.0, + "water_total": 3503.0, + "average_temperature": 33.3667, + "experience_temperature": 24.181, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T13:00:08.402440+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.7, + "humidity": 67.1, + "water_total": 3503.0, + "average_temperature": 33.8667, + "experience_temperature": 22.8438, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T13:10:08.599008+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.2, + "humidity": 66.3, + "water_total": 3503.0, + "average_temperature": 33.7, + "experience_temperature": 25.5886, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T13:20:07.965215+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.2, + "humidity": 66.3, + "water_total": 3503.0, + "average_temperature": 33.7, + "experience_temperature": 25.5886, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T13:30:09.343413+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.8, + "humidity": 66.2, + "water_total": 3503.0, + "average_temperature": 33.8667, + "experience_temperature": 22.0495, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T13:40:07.349931+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.8, + "humidity": 66.2, + "water_total": 3503.0, + "average_temperature": 33.8667, + "experience_temperature": 22.0495, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T13:50:07.973753+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.3, + "humidity": 63.9, + "water_total": 3555.0, + "average_temperature": 33.8, + "experience_temperature": 24.5943, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T14:10:07.702224+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.2, + "humidity": 62.1, + "water_total": 3749.0, + "average_temperature": 33.6, + "experience_temperature": 24.6486, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T14:20:07.174222+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.8, + "humidity": 65.2, + "water_total": 3803.0, + "average_temperature": 33.8667, + "experience_temperature": 21.8495, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T14:30:06.765310+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.3, + "humidity": 67.2, + "water_total": 3851.0, + "average_temperature": 33.6667, + "experience_temperature": 25.121, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T14:40:07.698953+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.3, + "humidity": 66.6, + "water_total": 3913.0, + "average_temperature": 33.7333, + "experience_temperature": 25.0676, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T14:50:09.089109+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.2, + "humidity": 67.8, + "water_total": 3949.0, + "average_temperature": 33.7333, + "experience_temperature": 25.9219, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T15:10:07.301983+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.6, + "humidity": 71.6, + "water_total": 4024.0, + "average_temperature": 32.3, + "experience_temperature": 28.9343, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T15:20:07.694381+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.0, + "humidity": 72.0, + "water_total": 4044.0, + "average_temperature": 32.3333, + "experience_temperature": 26.5905, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T15:30:06.928108+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.2, + "humidity": 71.9, + "water_total": 4090.0, + "average_temperature": 32.4, + "experience_temperature": 25.4086, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T15:40:07.614927+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.2, + "humidity": 71.3, + "water_total": 4124.0, + "average_temperature": 32.3667, + "experience_temperature": 25.2552, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T15:50:06.787842+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 1.2, + "humidity": 71.7, + "water_total": 4171.0, + "average_temperature": 32.2667, + "experience_temperature": 25.2352, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T16:10:07.675230+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.8, + "humidity": 73.4, + "water_total": 4242.0, + "average_temperature": 32.2333, + "experience_temperature": 27.999, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T16:20:07.290970+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.8, + "humidity": 73.3, + "water_total": 4296.0, + "average_temperature": 32.2, + "experience_temperature": 27.9457, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T16:30:07.439139+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.8, + "humidity": 73.3, + "water_total": 4296.0, + "average_temperature": 32.2, + "experience_temperature": 27.9457, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T16:40:07.755840+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.6, + "humidity": 73.5, + "water_total": 4386.0, + "average_temperature": 31.6667, + "experience_temperature": 28.681, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T16:50:07.444587+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.8, + "humidity": 74.3, + "water_total": 4423.0, + "average_temperature": 31.6333, + "experience_temperature": 27.579, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T17:10:08.146929+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.6, + "humidity": 74.7, + "water_total": 30.0, + "average_temperature": 31.3667, + "experience_temperature": 28.621, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T17:20:07.084248+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.8, + "humidity": 75.6, + "water_total": 77.0, + "average_temperature": 31.4667, + "experience_temperature": 27.6724, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T17:30:05.701093+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.7, + "humidity": 75.1, + "water_total": 120.0, + "average_temperature": 31.4333, + "experience_temperature": 28.1533, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T17:40:05.655029+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 75.2, + "water_total": 161.0, + "average_temperature": 31.2, + "experience_temperature": 31.0114, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T17:50:05.788283+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 75.9, + "water_total": 207.0, + "average_temperature": 31.2667, + "experience_temperature": 31.2181, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T18:00:05.436136+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 76.2, + "water_total": 249.0, + "average_temperature": 31.2667, + "experience_temperature": 31.2781, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T18:10:06.347333+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 77.2, + "water_total": 294.0, + "average_temperature": 31.2667, + "experience_temperature": 32.0924, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T18:20:06.962062+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 78.2, + "water_total": 337.0, + "average_temperature": 31.2, + "experience_temperature": 32.2257, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T18:30:05.981907+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.3, + "humidity": 78.0, + "water_total": 387.0, + "average_temperature": 31.0333, + "experience_temperature": 30.7905, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T18:40:05.727349+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 77.1, + "water_total": 424.0, + "average_temperature": 30.8667, + "experience_temperature": 31.6724, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T18:50:06.195844+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 77.1, + "water_total": 462.0, + "average_temperature": 30.8333, + "experience_temperature": 31.0248, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T19:00:06.013082+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 78.6, + "water_total": 509.0, + "average_temperature": 30.9667, + "experience_temperature": 31.4581, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T19:10:05.501772+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 77.8, + "water_total": 559.0, + "average_temperature": 30.7667, + "experience_temperature": 31.7124, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T19:20:07.456425+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 81.3, + "water_total": 599.0, + "average_temperature": 30.8, + "experience_temperature": 31.8314, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T19:30:06.170761+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.3, + "humidity": 80.2, + "water_total": 644.0, + "average_temperature": 30.6, + "experience_temperature": 30.7971, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T19:40:06.517459+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 80.7, + "water_total": 688.0, + "average_temperature": 30.6333, + "experience_temperature": 31.5448, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T19:50:06.008094+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 81.3, + "water_total": 733.0, + "average_temperature": 30.4333, + "experience_temperature": 31.4648, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T20:00:05.784301+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 80.7, + "water_total": 774.0, + "average_temperature": 30.3333, + "experience_temperature": 31.2448, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T20:10:05.489814+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 81.2, + "water_total": 805.0, + "average_temperature": 30.2, + "experience_temperature": 31.2114, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T20:20:06.064655+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 81.0, + "water_total": 844.0, + "average_temperature": 30.2333, + "experience_temperature": 31.2048, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T20:30:06.126307+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.3, + "humidity": 80.9, + "water_total": 893.0, + "average_temperature": 30.5, + "experience_temperature": 30.8371, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T20:40:08.903640+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 82.0, + "water_total": 934.0, + "average_temperature": 30.2333, + "experience_temperature": 31.4048, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T20:50:06.515603+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 81.4, + "water_total": 981.0, + "average_temperature": 30.3333, + "experience_temperature": 31.3848, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T21:00:06.045700+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 81.5, + "water_total": 1017.0, + "average_temperature": 30.3333, + "experience_temperature": 31.4048, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T21:10:05.929319+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 82.5, + "water_total": 1058.0, + "average_temperature": 30.2333, + "experience_temperature": 31.5048, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T21:20:05.978066+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 82.2, + "water_total": 1096.0, + "average_temperature": 30.2, + "experience_temperature": 31.4114, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T21:30:06.112797+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 82.7, + "water_total": 1138.0, + "average_temperature": 30.0333, + "experience_temperature": 31.959, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T21:40:06.641163+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 83.3, + "water_total": 1169.0, + "average_temperature": 29.9333, + "experience_temperature": 31.979, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T21:50:06.468207+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.3, + "humidity": 84.2, + "water_total": 1209.0, + "average_temperature": 30.0, + "experience_temperature": 30.9971, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T22:00:07.354527+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.0, + "humidity": 83.9, + "water_total": 1244.0, + "average_temperature": 29.9667, + "experience_temperature": 32.7467, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T22:10:06.249908+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 83.7, + "water_total": 1280.0, + "average_temperature": 29.9667, + "experience_temperature": 31.4781, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T22:20:06.087337+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 83.2, + "water_total": 1313.0, + "average_temperature": 29.8667, + "experience_temperature": 31.2781, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T22:30:05.892737+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 83.5, + "water_total": 1339.0, + "average_temperature": 29.9, + "experience_temperature": 31.9857, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T22:40:06.502561+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 83.4, + "water_total": 1380.0, + "average_temperature": 30.2333, + "experience_temperature": 31.6848, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T22:50:05.585143+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 83.5, + "water_total": 1416.0, + "average_temperature": 30.3, + "experience_temperature": 32.3857, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T23:00:06.020484+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 83.1, + "water_total": 1444.0, + "average_temperature": 29.9333, + "experience_temperature": 31.3248, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T23:10:06.016480+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.1, + "humidity": 83.6, + "water_total": 1475.0, + "average_temperature": 29.9667, + "experience_temperature": 32.0724, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T23:20:06.800396+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 84.2, + "water_total": 1502.0, + "average_temperature": 30.0, + "experience_temperature": 31.6114, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T23:30:06.871334+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 84.2, + "water_total": 1531.0, + "average_temperature": 29.9667, + "experience_temperature": 31.5781, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T23:40:06.827065+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 84.0, + "water_total": 1566.0, + "average_temperature": 30.0667, + "experience_temperature": 31.6381, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-03T23:50:06.008440+07:00", + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 83.1, + "water_total": 1583.0, + "average_temperature": 29.8333, + "experience_temperature": 31.2248, + "chill_factor": 6.1429 + }, + { + "timestamp": "2026-06-04T00:00:05.739499+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 83.1, + "water_total": 1583.0, + "average_temperature": 29.8333, + "experience_temperature": 31.2533, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T00:10:08.351484+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 84.8, + "water_total": 1621.0, + "average_temperature": 29.6667, + "experience_temperature": 32.0267, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T00:20:06.676424+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 83.9, + "water_total": 1672.0, + "average_temperature": 29.6333, + "experience_temperature": 31.2133, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T00:30:06.924278+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.3, + "humidity": 84.0, + "water_total": 1697.0, + "average_temperature": 29.3333, + "experience_temperature": 30.3333, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T00:40:06.021646+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 84.5, + "water_total": 1726.0, + "average_temperature": 29.2667, + "experience_temperature": 30.9667, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T00:50:06.677787+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 85.4, + "water_total": 1750.0, + "average_temperature": 29.3667, + "experience_temperature": 31.8467, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T01:00:06.322582+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 84.8, + "water_total": 1784.0, + "average_temperature": 29.2, + "experience_temperature": 31.56, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T01:10:07.129443+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 85.1, + "water_total": 1809.0, + "average_temperature": 29.2, + "experience_temperature": 31.62, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T01:20:08.281110+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 84.9, + "water_total": 1838.0, + "average_temperature": 29.1667, + "experience_temperature": 31.5467, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T01:30:05.796464+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 84.8, + "water_total": 1868.0, + "average_temperature": 29.1667, + "experience_temperature": 32.1267, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T01:40:05.687891+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 85.1, + "water_total": 1902.0, + "average_temperature": 29.4333, + "experience_temperature": 32.4533, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T01:50:06.587110+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 84.5, + "water_total": 1948.0, + "average_temperature": 29.2667, + "experience_temperature": 32.1667, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T02:00:06.108345+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 85.0, + "water_total": 1981.0, + "average_temperature": 28.8667, + "experience_temperature": 31.2667, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T02:10:05.888151+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 85.2, + "water_total": 1998.0, + "average_temperature": 28.6333, + "experience_temperature": 31.0733, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T02:20:06.719883+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 85.2, + "water_total": 1998.0, + "average_temperature": 28.6333, + "experience_temperature": 31.0733, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T02:30:05.991436+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 85.1, + "water_total": 2050.0, + "average_temperature": 28.6667, + "experience_temperature": 30.4867, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T02:40:05.728778+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 85.1, + "water_total": 2050.0, + "average_temperature": 28.6667, + "experience_temperature": 30.4867, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T02:50:06.366791+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 85.1, + "water_total": 2103.0, + "average_temperature": 28.6, + "experience_temperature": 30.42, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T03:00:05.295906+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 85.0, + "water_total": 2125.0, + "average_temperature": 28.5, + "experience_temperature": 30.3, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T03:10:06.126210+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 85.6, + "water_total": 2146.0, + "average_temperature": 28.4333, + "experience_temperature": 30.9533, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T03:20:06.868020+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 85.0, + "water_total": 2162.0, + "average_temperature": 29.5, + "experience_temperature": 32.5, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T03:30:07.439759+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 84.9, + "water_total": 2178.0, + "average_temperature": 28.4667, + "experience_temperature": 30.8467, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T03:40:06.944645+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 87.2, + "water_total": 2200.0, + "average_temperature": 28.9667, + "experience_temperature": 32.4067, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T03:50:06.103037+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 84.4, + "water_total": 2216.0, + "average_temperature": 28.3667, + "experience_temperature": 30.0467, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T04:00:05.918312+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 83.3, + "water_total": 2227.0, + "average_temperature": 29.3667, + "experience_temperature": 30.8267, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T04:10:05.889048+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 85.3, + "water_total": 2260.0, + "average_temperature": 28.7, + "experience_temperature": 30.56, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T04:20:06.088007+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 85.7, + "water_total": 2316.0, + "average_temperature": 29.0667, + "experience_temperature": 31.0067, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T04:30:05.745728+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 84.9, + "water_total": 2357.0, + "average_temperature": 28.3667, + "experience_temperature": 30.7467, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T04:40:06.129688+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.3, + "humidity": 84.0, + "water_total": 2374.0, + "average_temperature": 29.2667, + "experience_temperature": 30.2667, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T04:50:06.162020+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 85.1, + "water_total": 2416.0, + "average_temperature": 28.3, + "experience_temperature": 30.72, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T05:00:05.784787+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 84.3, + "water_total": 2452.0, + "average_temperature": 28.9667, + "experience_temperature": 31.2267, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T05:10:06.301804+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 85.7, + "water_total": 2485.0, + "average_temperature": 28.4, + "experience_temperature": 30.94, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T05:20:06.514702+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.3, + "humidity": 85.1, + "water_total": 2515.0, + "average_temperature": 29.7333, + "experience_temperature": 30.9533, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T05:30:06.789659+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.3, + "humidity": 83.0, + "water_total": 2557.0, + "average_temperature": 29.1333, + "experience_temperature": 29.9333, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T05:40:06.201055+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 85.6, + "water_total": 2579.0, + "average_temperature": 28.4333, + "experience_temperature": 30.9533, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T05:50:06.257983+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 83.2, + "water_total": 2593.0, + "average_temperature": 28.6, + "experience_temperature": 30.64, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T06:00:05.515190+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 84.7, + "water_total": 2609.0, + "average_temperature": 29.6, + "experience_temperature": 32.54, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T06:10:07.646188+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 83.7, + "water_total": 2632.0, + "average_temperature": 28.7, + "experience_temperature": 30.24, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T06:20:07.302847+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.3, + "humidity": 84.9, + "water_total": 2660.0, + "average_temperature": 28.5, + "experience_temperature": 29.68, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T06:30:06.887159+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 85.4, + "water_total": 2669.0, + "average_temperature": 29.3667, + "experience_temperature": 32.4467, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T06:40:06.643744+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 84.3, + "water_total": 2677.0, + "average_temperature": 28.6667, + "experience_temperature": 30.3267, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T06:50:06.190793+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 84.7, + "water_total": 2677.0, + "average_temperature": 28.7667, + "experience_temperature": 30.5067, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T07:00:07.620492+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 84.6, + "water_total": 2677.0, + "average_temperature": 28.9667, + "experience_temperature": 31.2867, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T07:10:06.687196+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 84.5, + "water_total": 2677.0, + "average_temperature": 28.9333, + "experience_temperature": 31.2333, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T07:20:07.012061+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 84.5, + "water_total": 2677.0, + "average_temperature": 29.0333, + "experience_temperature": 30.7333, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T07:30:06.217264+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 84.5, + "water_total": 2677.0, + "average_temperature": 29.1333, + "experience_temperature": 31.4333, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T07:40:06.292176+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 84.1, + "water_total": 2677.0, + "average_temperature": 29.3667, + "experience_temperature": 30.9867, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T07:50:06.633345+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 84.3, + "water_total": 2677.0, + "average_temperature": 29.8, + "experience_temperature": 32.06, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T08:00:09.715514+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 84.1, + "water_total": 2677.0, + "average_temperature": 30.3333, + "experience_temperature": 33.1533, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T08:10:06.921476+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 82.2, + "water_total": 2677.0, + "average_temperature": 30.7333, + "experience_temperature": 32.5733, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T08:20:07.139314+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.6, + "humidity": 81.8, + "water_total": 2677.0, + "average_temperature": 31.2667, + "experience_temperature": 30.0267, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T08:30:06.447467+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 80.5, + "water_total": 2677.0, + "average_temperature": 31.1, + "experience_temperature": 32.0, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T08:40:06.779623+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 79.7, + "water_total": 2677.0, + "average_temperature": 31.2, + "experience_temperature": 32.54, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T08:50:06.443603+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.8, + "humidity": 77.6, + "water_total": 2677.0, + "average_temperature": 31.3333, + "experience_temperature": 28.0533, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T09:00:07.121707+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.8, + "humidity": 76.9, + "water_total": 2677.0, + "average_temperature": 31.2667, + "experience_temperature": 27.8467, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T09:10:08.212402+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.8, + "humidity": 77.0, + "water_total": 2677.0, + "average_temperature": 31.5333, + "experience_temperature": 28.1333, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T09:20:07.191356+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.8, + "humidity": 76.4, + "water_total": 2677.0, + "average_temperature": 31.7333, + "experience_temperature": 28.2133, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T09:30:07.597599+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.7, + "humidity": 75.8, + "water_total": 2677.0, + "average_temperature": 32.1, + "experience_temperature": 29.06, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T09:40:07.429361+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.7, + "humidity": 74.9, + "water_total": 2677.0, + "average_temperature": 32.0667, + "experience_temperature": 28.8467, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T09:50:08.289172+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.9, + "humidity": 76.3, + "water_total": 2677.0, + "average_temperature": 32.2, + "experience_temperature": 28.06, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T10:00:08.582831+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.8, + "humidity": 74.7, + "water_total": 2677.0, + "average_temperature": 32.1, + "experience_temperature": 28.24, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T10:10:08.217432+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.8, + "humidity": 75.1, + "water_total": 2677.0, + "average_temperature": 31.8667, + "experience_temperature": 28.0867, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T10:20:06.899559+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.0, + "humidity": 73.2, + "water_total": 2689.0, + "average_temperature": 32.4333, + "experience_temperature": 27.0733, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T10:30:13.919298+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.2, + "humidity": 72.5, + "water_total": 2717.0, + "average_temperature": 32.5, + "experience_temperature": 25.8, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T10:40:07.298812+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.2, + "humidity": 71.7, + "water_total": 2741.0, + "average_temperature": 32.5, + "experience_temperature": 25.64, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T10:50:06.614865+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.3, + "humidity": 72.2, + "water_total": 2787.0, + "average_temperature": 33.0333, + "experience_temperature": 25.6733, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T11:00:06.876628+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.2, + "humidity": 71.2, + "water_total": 2829.0, + "average_temperature": 32.7333, + "experience_temperature": 25.7733, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T11:10:07.589999+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.4, + "humidity": 72.7, + "water_total": 2859.0, + "average_temperature": 32.5333, + "experience_temperature": 24.6733, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T11:20:07.166386+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.4, + "humidity": 73.2, + "water_total": 2886.0, + "average_temperature": 33.0, + "experience_temperature": 25.24, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T11:30:08.216415+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.2, + "humidity": 70.1, + "water_total": 2930.0, + "average_temperature": 33.5667, + "experience_temperature": 26.3867, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T11:40:10.603502+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.2, + "humidity": 69.2, + "water_total": 2950.0, + "average_temperature": 33.4667, + "experience_temperature": 26.1067, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T11:50:06.431568+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.2, + "humidity": 70.1, + "water_total": 2950.0, + "average_temperature": 33.7, + "experience_temperature": 26.52, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T12:00:09.255999+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.8, + "humidity": 70.2, + "water_total": 2953.0, + "average_temperature": 33.6667, + "experience_temperature": 22.9067, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T12:10:06.798769+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.2, + "humidity": 68.2, + "water_total": 2955.0, + "average_temperature": 33.4, + "experience_temperature": 25.84, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T12:20:07.605444+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.7, + "humidity": 69.7, + "water_total": 2968.0, + "average_temperature": 33.9333, + "experience_temperature": 23.6733, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T12:30:07.168239+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.3, + "humidity": 68.8, + "water_total": 2979.0, + "average_temperature": 33.6333, + "experience_temperature": 25.5933, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T12:40:06.881961+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.6, + "humidity": 68.9, + "water_total": 2980.0, + "average_temperature": 33.8333, + "experience_temperature": 24.0133, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T12:50:06.564585+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.7, + "humidity": 69.6, + "water_total": 2980.0, + "average_temperature": 33.7333, + "experience_temperature": 23.4533, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T13:00:06.648417+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.7, + "humidity": 68.7, + "water_total": 2980.0, + "average_temperature": 33.7667, + "experience_temperature": 23.3067, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T13:10:07.513965+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.7, + "humidity": 68.2, + "water_total": 2980.0, + "average_temperature": 34.0333, + "experience_temperature": 23.4733, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T13:20:07.075562+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.8, + "humidity": 67.1, + "water_total": 2984.0, + "average_temperature": 33.8333, + "experience_temperature": 22.4533, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T13:30:07.245053+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.4, + "humidity": 67.5, + "water_total": 2985.0, + "average_temperature": 33.6333, + "experience_temperature": 24.7333, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T13:40:07.072813+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.6, + "humidity": 68.1, + "water_total": 2985.0, + "average_temperature": 33.7333, + "experience_temperature": 23.7533, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T13:50:08.446080+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 1.8, + "humidity": 68.9, + "water_total": 2985.0, + "average_temperature": 33.6667, + "experience_temperature": 22.6467, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T14:10:06.985382+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.8, + "humidity": 73.8, + "water_total": 2985.0, + "average_temperature": 32.0, + "experience_temperature": 27.96, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T14:20:06.087590+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.8, + "humidity": 74.1, + "water_total": 2996.0, + "average_temperature": 31.2333, + "experience_temperature": 27.2533, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T14:30:07.976327+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.7, + "humidity": 76.9, + "water_total": 3015.0, + "average_temperature": 31.1333, + "experience_temperature": 28.3133, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T14:40:07.798044+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.6, + "humidity": 78.1, + "water_total": 3024.0, + "average_temperature": 31.2, + "experience_temperature": 29.22, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T14:50:06.021675+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.3, + "humidity": 76.5, + "water_total": 3032.0, + "average_temperature": 30.9333, + "experience_temperature": 30.4333, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T15:10:06.475368+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.3, + "humidity": 75.2, + "water_total": 3032.0, + "average_temperature": 30.9667, + "experience_temperature": 30.2067, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T15:20:11.606743+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 75.7, + "water_total": 3032.0, + "average_temperature": 30.9667, + "experience_temperature": 32.1067, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T15:30:07.924034+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 77.7, + "water_total": 3032.0, + "average_temperature": 31.0, + "experience_temperature": 31.34, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T15:40:08.007845+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 77.2, + "water_total": 3032.0, + "average_temperature": 30.8, + "experience_temperature": 31.04, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T15:50:08.818991+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.3, + "humidity": 78.0, + "water_total": 3032.0, + "average_temperature": 31.0333, + "experience_temperature": 30.8333, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T16:10:06.087866+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.3, + "humidity": 78.8, + "water_total": 3032.0, + "average_temperature": 30.8, + "experience_temperature": 30.76, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T16:20:06.335339+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 76.9, + "water_total": 3032.0, + "average_temperature": 30.6333, + "experience_temperature": 30.8133, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T16:30:07.160847+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 77.9, + "water_total": 3032.0, + "average_temperature": 30.8, + "experience_temperature": 31.18, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T16:40:06.319977+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 79.0, + "water_total": 3032.0, + "average_temperature": 30.8667, + "experience_temperature": 32.0667, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T16:50:07.229935+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 77.6, + "water_total": 3032.0, + "average_temperature": 30.6, + "experience_temperature": 30.92, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T17:10:06.596657+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 78.5, + "water_total": 0.0, + "average_temperature": 30.6333, + "experience_temperature": 31.1333, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T17:20:06.803713+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 77.9, + "water_total": 0.0, + "average_temperature": 30.6667, + "experience_temperature": 31.6467, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T17:30:06.709743+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 79.2, + "water_total": 0.0, + "average_temperature": 30.5333, + "experience_temperature": 31.1733, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T17:40:06.340174+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 79.7, + "water_total": 6.0, + "average_temperature": 30.3667, + "experience_temperature": 31.1067, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T17:50:06.537903+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 80.6, + "water_total": 10.0, + "average_temperature": 30.5333, + "experience_temperature": 31.4533, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T18:00:07.311765+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.3, + "humidity": 79.5, + "water_total": 17.0, + "average_temperature": 30.8, + "experience_temperature": 30.9, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T18:10:11.621418+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 80.8, + "water_total": 32.0, + "average_temperature": 30.6333, + "experience_temperature": 31.5933, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T18:20:08.147175+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 79.4, + "water_total": 39.0, + "average_temperature": 30.6, + "experience_temperature": 31.88, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T18:30:06.883175+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 80.2, + "water_total": 39.0, + "average_temperature": 30.8, + "experience_temperature": 31.64, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T18:40:08.088158+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 83.2, + "water_total": 42.0, + "average_temperature": 30.6667, + "experience_temperature": 33.3067, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T18:50:07.454098+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 81.9, + "water_total": 42.0, + "average_temperature": 30.7, + "experience_temperature": 32.48, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T19:00:06.212329+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 80.4, + "water_total": 43.0, + "average_temperature": 30.7, + "experience_temperature": 32.78, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T19:10:06.078950+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 80.4, + "water_total": 43.0, + "average_temperature": 30.5333, + "experience_temperature": 31.4133, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T19:20:06.085307+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 81.7, + "water_total": 43.0, + "average_temperature": 30.3333, + "experience_temperature": 31.4733, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T19:30:06.436893+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 82.1, + "water_total": 43.0, + "average_temperature": 30.5, + "experience_temperature": 31.72, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T19:40:07.065136+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 82.5, + "water_total": 43.0, + "average_temperature": 30.3667, + "experience_temperature": 32.2667, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T19:50:06.734202+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 82.4, + "water_total": 47.0, + "average_temperature": 30.2333, + "experience_temperature": 31.5133, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T20:00:06.643478+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 82.6, + "water_total": 47.0, + "average_temperature": 30.1, + "experience_temperature": 31.42, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T20:10:06.240478+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 82.6, + "water_total": 47.0, + "average_temperature": 30.1, + "experience_temperature": 31.42, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T20:20:06.887375+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 82.3, + "water_total": 47.0, + "average_temperature": 29.8667, + "experience_temperature": 32.3267, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T20:30:06.402165+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 83.6, + "water_total": 47.0, + "average_temperature": 29.6333, + "experience_temperature": 32.3533, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T20:40:06.531958+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 84.0, + "water_total": 47.0, + "average_temperature": 29.4, + "experience_temperature": 32.2, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T20:50:05.687942+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 85.0, + "water_total": 47.0, + "average_temperature": 29.2333, + "experience_temperature": 32.2333, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T21:00:08.625649+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.4, + "humidity": 85.2, + "water_total": 47.0, + "average_temperature": 29.1333, + "experience_temperature": 29.7733, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T21:10:06.362267+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 87.3, + "water_total": 47.0, + "average_temperature": 28.9333, + "experience_temperature": 32.3933, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T21:20:06.554010+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 86.2, + "water_total": 47.0, + "average_temperature": 29.0, + "experience_temperature": 32.24, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T21:30:07.863453+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 88.1, + "water_total": 47.0, + "average_temperature": 29.7667, + "experience_temperature": 33.3867, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T21:40:06.099250+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 85.2, + "water_total": 47.0, + "average_temperature": 29.2, + "experience_temperature": 32.24, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T21:50:06.928469+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 86.0, + "water_total": 47.0, + "average_temperature": 29.1333, + "experience_temperature": 32.3333, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T22:00:06.218062+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 86.9, + "water_total": 47.0, + "average_temperature": 29.2, + "experience_temperature": 32.58, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T22:10:06.219483+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.0, + "humidity": 87.6, + "water_total": 47.0, + "average_temperature": 29.1667, + "experience_temperature": 32.6867, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T22:20:07.625819+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 87.6, + "water_total": 47.0, + "average_temperature": 29.3, + "experience_temperature": 31.62, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T22:30:06.315244+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 88.8, + "water_total": 47.0, + "average_temperature": 29.4333, + "experience_temperature": 32.5933, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T22:40:06.080011+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 88.1, + "water_total": 47.0, + "average_temperature": 29.3667, + "experience_temperature": 32.3867, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T22:50:06.283793+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 88.1, + "water_total": 47.0, + "average_temperature": 29.3667, + "experience_temperature": 32.3867, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T23:00:06.565681+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 87.0, + "water_total": 47.0, + "average_temperature": 29.1333, + "experience_temperature": 31.3333, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T23:10:06.635072+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 86.4, + "water_total": 50.0, + "average_temperature": 29.6333, + "experience_temperature": 31.7133, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T23:20:08.430506+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 85.6, + "water_total": 51.0, + "average_temperature": 29.6667, + "experience_temperature": 32.1867, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T23:30:06.877435+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.1, + "humidity": 85.3, + "water_total": 51.0, + "average_temperature": 29.7667, + "experience_temperature": 32.2267, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T23:40:06.809711+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 85.0, + "water_total": 54.0, + "average_temperature": 29.2333, + "experience_temperature": 31.0333, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-04T23:50:08.097246+07:00", + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 86.2, + "water_total": 55.0, + "average_temperature": 29.2667, + "experience_temperature": 31.3067, + "chill_factor": 6.0 + }, + { + "timestamp": "2026-06-05T00:00:06.405085+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 86.8, + "water_total": 55.0, + "average_temperature": 29.1, + "experience_temperature": 31.8814, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T00:10:06.636626+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 85.9, + "water_total": 58.0, + "average_temperature": 29.4333, + "experience_temperature": 31.4562, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T00:20:06.211582+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.3, + "humidity": 85.2, + "water_total": 62.0, + "average_temperature": 29.6, + "experience_temperature": 30.9043, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T00:30:07.175822+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.0, + "humidity": 85.0, + "water_total": 63.0, + "average_temperature": 29.2667, + "experience_temperature": 32.2667, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T00:40:06.070882+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.0, + "humidity": 85.5, + "water_total": 63.0, + "average_temperature": 29.2333, + "experience_temperature": 32.3333, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T00:50:06.623182+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 86.5, + "water_total": 64.0, + "average_temperature": 29.2, + "experience_temperature": 31.3429, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T01:00:06.581018+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 86.8, + "water_total": 70.0, + "average_temperature": 29.1, + "experience_temperature": 31.8814, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T01:10:06.078153+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.3, + "humidity": 85.2, + "water_total": 72.0, + "average_temperature": 29.1, + "experience_temperature": 30.4043, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T01:20:08.778170+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 85.3, + "water_total": 86.0, + "average_temperature": 29.3, + "experience_temperature": 31.2029, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T01:30:06.686613+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 85.0, + "water_total": 94.0, + "average_temperature": 28.8, + "experience_temperature": 31.2214, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T01:40:06.385956+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.3, + "humidity": 86.2, + "water_total": 99.0, + "average_temperature": 28.7333, + "experience_temperature": 30.2376, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T01:50:06.408003+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 86.6, + "water_total": 107.0, + "average_temperature": 28.7667, + "experience_temperature": 30.9295, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T02:00:07.294125+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 85.6, + "water_total": 113.0, + "average_temperature": 29.0, + "experience_temperature": 31.5414, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T02:10:06.673176+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 85.8, + "water_total": 126.0, + "average_temperature": 28.8, + "experience_temperature": 30.8029, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T02:20:07.006071+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 86.4, + "water_total": 136.0, + "average_temperature": 28.7667, + "experience_temperature": 30.8895, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T02:30:06.992405+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 87.2, + "water_total": 149.0, + "average_temperature": 28.7, + "experience_temperature": 30.9829, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T02:40:06.271576+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 87.3, + "water_total": 162.0, + "average_temperature": 29.0333, + "experience_temperature": 31.9148, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T02:50:06.403430+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 86.1, + "water_total": 184.0, + "average_temperature": 29.2333, + "experience_temperature": 31.2962, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T03:00:06.267435+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 86.4, + "water_total": 198.0, + "average_temperature": 28.5667, + "experience_temperature": 30.6895, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T03:10:06.502478+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 87.2, + "water_total": 210.0, + "average_temperature": 28.2667, + "experience_temperature": 30.5495, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T03:20:06.983043+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 87.0, + "water_total": 230.0, + "average_temperature": 28.5333, + "experience_temperature": 30.7762, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T03:30:06.434949+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 86.8, + "water_total": 236.0, + "average_temperature": 28.4667, + "experience_temperature": 30.6695, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T03:40:06.479485+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 87.6, + "water_total": 266.0, + "average_temperature": 28.6333, + "experience_temperature": 31.5748, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T03:50:06.367939+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 87.5, + "water_total": 278.0, + "average_temperature": 28.3667, + "experience_temperature": 31.2881, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T04:00:07.760472+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 87.1, + "water_total": 297.0, + "average_temperature": 28.3, + "experience_temperature": 30.5629, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T04:10:06.296267+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 86.4, + "water_total": 309.0, + "average_temperature": 28.2667, + "experience_temperature": 30.3895, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T04:20:06.033031+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.0, + "humidity": 87.7, + "water_total": 321.0, + "average_temperature": 28.9, + "experience_temperature": 32.44, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T04:30:05.778527+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 85.7, + "water_total": 322.0, + "average_temperature": 28.3333, + "experience_temperature": 30.3162, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T04:40:05.720835+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 87.0, + "water_total": 337.0, + "average_temperature": 28.2333, + "experience_temperature": 31.0548, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T04:50:05.537686+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.0, + "humidity": 88.1, + "water_total": 345.0, + "average_temperature": 29.0667, + "experience_temperature": 32.6867, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T05:00:06.857101+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 85.7, + "water_total": 359.0, + "average_temperature": 28.3333, + "experience_temperature": 30.3162, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T05:10:05.458947+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 87.0, + "water_total": 375.0, + "average_temperature": 28.5, + "experience_temperature": 30.7429, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T05:20:05.601481+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.0, + "humidity": 85.5, + "water_total": 428.0, + "average_temperature": 29.0, + "experience_temperature": 32.1, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T05:30:05.785389+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.0, + "humidity": 87.3, + "water_total": 467.0, + "average_temperature": 28.5333, + "experience_temperature": 31.9933, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T05:40:05.447965+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 85.4, + "water_total": 487.0, + "average_temperature": 29.0667, + "experience_temperature": 31.5681, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T05:50:05.754023+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.0, + "humidity": 86.0, + "water_total": 504.0, + "average_temperature": 28.8, + "experience_temperature": 32.0, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T06:00:05.881353+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 87.1, + "water_total": 532.0, + "average_temperature": 28.5333, + "experience_temperature": 31.3748, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T06:10:05.344139+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 84.5, + "water_total": 576.0, + "average_temperature": 28.6, + "experience_temperature": 30.3429, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T06:20:05.816360+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.3, + "humidity": 83.9, + "water_total": 597.0, + "average_temperature": 29.0, + "experience_temperature": 30.0443, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T06:30:05.362008+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.0, + "humidity": 87.2, + "water_total": 607.0, + "average_temperature": 29.2667, + "experience_temperature": 32.7067, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T06:40:05.293211+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 87.1, + "water_total": 639.0, + "average_temperature": 29.0333, + "experience_temperature": 31.2962, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T06:50:05.761442+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 86.5, + "water_total": 669.0, + "average_temperature": 29.0, + "experience_temperature": 31.1429, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T07:00:05.569843+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 85.2, + "water_total": 688.0, + "average_temperature": 28.8667, + "experience_temperature": 30.7495, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T07:10:05.959182+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 86.4, + "water_total": 700.0, + "average_temperature": 28.7667, + "experience_temperature": 30.8895, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T07:20:05.642480+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 86.1, + "water_total": 722.0, + "average_temperature": 28.9333, + "experience_temperature": 30.9962, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T07:30:06.084932+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 87.2, + "water_total": 756.0, + "average_temperature": 29.6667, + "experience_temperature": 31.9495, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T07:40:05.526899+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 85.8, + "water_total": 775.0, + "average_temperature": 29.7, + "experience_temperature": 31.7029, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T07:50:05.965912+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 85.8, + "water_total": 775.0, + "average_temperature": 29.7, + "experience_temperature": 31.7029, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T08:00:07.519651+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 85.5, + "water_total": 820.0, + "average_temperature": 30.5667, + "experience_temperature": 33.0881, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T08:10:06.244960+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.3, + "humidity": 82.4, + "water_total": 844.0, + "average_temperature": 30.8333, + "experience_temperature": 31.5776, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T08:20:05.966177+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.3, + "humidity": 82.4, + "water_total": 844.0, + "average_temperature": 30.8333, + "experience_temperature": 31.5776, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T08:30:05.212956+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 83.2, + "water_total": 870.0, + "average_temperature": 30.9333, + "experience_temperature": 32.9948, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T08:40:06.261183+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.4, + "humidity": 82.5, + "water_total": 883.0, + "average_temperature": 31.0667, + "experience_temperature": 31.2524, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T08:50:05.891416+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.6, + "humidity": 80.9, + "water_total": 891.0, + "average_temperature": 31.0667, + "experience_temperature": 29.7752, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T09:00:06.346019+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.7, + "humidity": 78.7, + "water_total": 895.0, + "average_temperature": 31.1667, + "experience_temperature": 28.8567, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T09:10:10.392155+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.6, + "humidity": 78.5, + "water_total": 895.0, + "average_temperature": 31.5667, + "experience_temperature": 29.7952, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T09:20:05.930325+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.6, + "humidity": 77.6, + "water_total": 899.0, + "average_temperature": 31.9, + "experience_temperature": 29.9486, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T09:30:05.847225+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.6, + "humidity": 78.0, + "water_total": 901.0, + "average_temperature": 31.9667, + "experience_temperature": 30.0952, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T09:40:06.209278+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.8, + "humidity": 75.4, + "water_total": 901.0, + "average_temperature": 32.0333, + "experience_temperature": 28.4848, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T09:50:06.670045+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.1, + "humidity": 75.0, + "water_total": 902.0, + "average_temperature": 32.1, + "experience_temperature": 26.7357, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T10:00:06.082432+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.1, + "humidity": 75.8, + "water_total": 902.0, + "average_temperature": 32.5, + "experience_temperature": 27.2957, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T10:10:05.685618+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.2, + "humidity": 73.7, + "water_total": 902.0, + "average_temperature": 32.1, + "experience_temperature": 25.8971, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T10:20:07.678158+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.1, + "humidity": 73.4, + "water_total": 906.0, + "average_temperature": 32.6667, + "experience_temperature": 26.9824, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T10:30:06.530227+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.1, + "humidity": 73.2, + "water_total": 908.0, + "average_temperature": 32.5667, + "experience_temperature": 26.8424, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T10:40:05.828935+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.1, + "humidity": 73.2, + "water_total": 908.0, + "average_temperature": 32.5667, + "experience_temperature": 26.8424, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T10:50:06.213626+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.2, + "humidity": 72.9, + "water_total": 910.0, + "average_temperature": 32.9667, + "experience_temperature": 26.6038, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T11:00:06.209315+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.5, + "humidity": 70.8, + "water_total": 911.0, + "average_temperature": 33.6333, + "experience_temperature": 25.1148, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T11:10:07.211503+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.6, + "humidity": 70.4, + "water_total": 912.0, + "average_temperature": 33.5667, + "experience_temperature": 24.3895, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T11:20:06.059715+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.3, + "humidity": 68.0, + "water_total": 913.0, + "average_temperature": 33.7, + "experience_temperature": 25.7786, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T11:30:06.756352+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.8, + "humidity": 66.7, + "water_total": 913.0, + "average_temperature": 33.7333, + "experience_temperature": 22.659, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T11:40:06.113807+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.3, + "humidity": 68.9, + "water_total": 913.0, + "average_temperature": 33.6333, + "experience_temperature": 25.8919, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T11:50:07.453591+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.1, + "humidity": 70.8, + "water_total": 913.0, + "average_temperature": 32.9667, + "experience_temperature": 26.7624, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T12:00:06.451218+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.8, + "humidity": 69.0, + "water_total": 913.0, + "average_temperature": 33.6333, + "experience_temperature": 23.019, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T12:10:06.654042+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.7, + "humidity": 69.2, + "water_total": 913.0, + "average_temperature": 33.7667, + "experience_temperature": 23.771, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T12:20:06.128354+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.9, + "humidity": 68.9, + "water_total": 913.0, + "average_temperature": 33.8667, + "experience_temperature": 22.6538, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T12:30:06.075263+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.2, + "humidity": 67.9, + "water_total": 913.0, + "average_temperature": 33.4333, + "experience_temperature": 26.0705, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T12:40:07.726386+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.8, + "humidity": 69.3, + "water_total": 913.0, + "average_temperature": 33.7667, + "experience_temperature": 23.2124, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T12:50:06.551912+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.9, + "humidity": 67.7, + "water_total": 913.0, + "average_temperature": 33.9333, + "experience_temperature": 22.4805, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T13:00:06.083686+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.7, + "humidity": 68.8, + "water_total": 913.0, + "average_temperature": 33.8333, + "experience_temperature": 23.7576, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T13:10:06.235133+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.6, + "humidity": 68.2, + "water_total": 915.0, + "average_temperature": 33.8, + "experience_temperature": 24.1829, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T13:20:06.343701+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.7, + "humidity": 68.3, + "water_total": 915.0, + "average_temperature": 33.6667, + "experience_temperature": 23.491, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T13:30:06.222688+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.4, + "humidity": 69.4, + "water_total": 915.0, + "average_temperature": 33.1667, + "experience_temperature": 24.9467, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T13:40:07.358949+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.4, + "humidity": 69.4, + "water_total": 915.0, + "average_temperature": 33.1667, + "experience_temperature": 24.9467, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T13:50:05.600527+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.6, + "humidity": 68.5, + "water_total": 915.0, + "average_temperature": 33.5333, + "experience_temperature": 23.9762, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T14:10:06.132395+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.3, + "humidity": 68.1, + "water_total": 917.0, + "average_temperature": 33.4333, + "experience_temperature": 25.5319, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T14:20:06.308099+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.7, + "humidity": 66.3, + "water_total": 917.0, + "average_temperature": 33.7333, + "experience_temperature": 23.1576, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T14:30:07.218197+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.6, + "humidity": 66.7, + "water_total": 917.0, + "average_temperature": 33.7, + "experience_temperature": 23.7829, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T14:40:06.443106+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.7, + "humidity": 66.5, + "water_total": 917.0, + "average_temperature": 33.5667, + "experience_temperature": 23.031, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T14:50:06.242049+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.7, + "humidity": 66.3, + "water_total": 917.0, + "average_temperature": 33.7, + "experience_temperature": 23.1243, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T15:10:06.865599+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.6, + "humidity": 66.8, + "water_total": 918.0, + "average_temperature": 33.7, + "experience_temperature": 23.8029, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T15:20:06.083242+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.2, + "humidity": 64.7, + "water_total": 919.0, + "average_temperature": 33.3333, + "experience_temperature": 25.3305, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T15:30:07.373877+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.4, + "humidity": 67.3, + "water_total": 919.0, + "average_temperature": 33.2, + "experience_temperature": 24.56, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T15:40:07.104561+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.1, + "humidity": 68.0, + "water_total": 919.0, + "average_temperature": 33.3, + "experience_temperature": 26.5357, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T15:50:06.551054+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.1, + "humidity": 68.0, + "water_total": 919.0, + "average_temperature": 33.3, + "experience_temperature": 26.5357, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T16:10:06.146199+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.3, + "humidity": 71.4, + "water_total": 919.0, + "average_temperature": 32.9667, + "experience_temperature": 25.7252, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T16:20:07.570728+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.2, + "humidity": 72.6, + "water_total": 919.0, + "average_temperature": 32.7, + "experience_temperature": 26.2771, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T16:30:07.538781+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.2, + "humidity": 72.9, + "water_total": 919.0, + "average_temperature": 32.6, + "experience_temperature": 26.2371, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T16:40:06.830621+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.2, + "humidity": 73.1, + "water_total": 919.0, + "average_temperature": 32.5, + "experience_temperature": 26.1771, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T16:50:06.813397+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.2, + "humidity": 72.7, + "water_total": 919.0, + "average_temperature": 32.4, + "experience_temperature": 25.9971, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T17:10:06.242520+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.3, + "humidity": 74.1, + "water_total": 0.0, + "average_temperature": 32.0333, + "experience_temperature": 25.3319, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T17:20:07.654384+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 1.2, + "humidity": 73.5, + "water_total": 0.0, + "average_temperature": 31.9333, + "experience_temperature": 25.6905, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T17:30:05.894966+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.7, + "humidity": 73.6, + "water_total": 0.0, + "average_temperature": 31.8333, + "experience_temperature": 28.5033, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T17:40:05.841203+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.8, + "humidity": 74.2, + "water_total": 0.0, + "average_temperature": 31.8, + "experience_temperature": 28.0114, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T17:50:05.786652+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.8, + "humidity": 75.2, + "water_total": 0.0, + "average_temperature": 31.5667, + "experience_temperature": 27.9781, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T18:00:06.360981+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.7, + "humidity": 76.7, + "water_total": 0.0, + "average_temperature": 31.3333, + "experience_temperature": 28.6233, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T18:10:06.349757+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.8, + "humidity": 76.7, + "water_total": 0.0, + "average_temperature": 31.0667, + "experience_temperature": 27.7781, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T18:20:06.553756+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.8, + "humidity": 76.6, + "water_total": 0.0, + "average_temperature": 30.9, + "experience_temperature": 27.5914, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T18:30:06.488572+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.6, + "humidity": 78.3, + "water_total": 0.0, + "average_temperature": 31.0333, + "experience_temperature": 29.2219, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T18:40:06.405204+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.8, + "humidity": 76.3, + "water_total": 0.0, + "average_temperature": 30.9333, + "experience_temperature": 27.5648, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T18:50:06.355426+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.7, + "humidity": 78.1, + "water_total": 0.0, + "average_temperature": 30.8333, + "experience_temperature": 28.4033, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T19:00:06.772128+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 78.6, + "water_total": 0.0, + "average_temperature": 30.7333, + "experience_temperature": 31.8748, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T19:10:06.127166+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 80.0, + "water_total": 0.0, + "average_temperature": 30.8, + "experience_temperature": 32.2214, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T19:20:06.187729+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 78.2, + "water_total": 0.0, + "average_temperature": 30.8, + "experience_temperature": 31.8614, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T19:30:06.056115+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.7, + "humidity": 78.4, + "water_total": 0.0, + "average_temperature": 30.8667, + "experience_temperature": 28.4967, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T19:40:06.559904+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 79.3, + "water_total": 0.0, + "average_temperature": 30.7333, + "experience_temperature": 32.0148, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T19:50:06.097745+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 77.5, + "water_total": 0.0, + "average_temperature": 30.7333, + "experience_temperature": 31.0762, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T20:00:06.569520+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 77.1, + "water_total": 0.0, + "average_temperature": 30.8333, + "experience_temperature": 31.6748, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T20:10:05.770165+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.5, + "humidity": 77.9, + "water_total": 0.0, + "average_temperature": 30.8333, + "experience_temperature": 29.5205, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T20:20:07.287108+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 78.2, + "water_total": 0.0, + "average_temperature": 30.7333, + "experience_temperature": 31.2162, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T20:30:06.148635+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.3, + "humidity": 78.1, + "water_total": 0.0, + "average_temperature": 30.7, + "experience_temperature": 30.5843, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T20:40:06.175519+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 77.1, + "water_total": 0.0, + "average_temperature": 30.8, + "experience_temperature": 31.6414, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T20:50:06.534661+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.6, + "humidity": 77.1, + "water_total": 0.0, + "average_temperature": 30.8333, + "experience_temperature": 28.7819, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T21:00:06.117848+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 79.4, + "water_total": 0.0, + "average_temperature": 30.7667, + "experience_temperature": 32.0681, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T21:10:06.111476+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 78.8, + "water_total": 0.0, + "average_temperature": 30.8, + "experience_temperature": 31.4029, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T21:20:09.245302+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 79.3, + "water_total": 0.0, + "average_temperature": 30.7333, + "experience_temperature": 31.4362, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T21:30:06.962357+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.0, + "humidity": 79.6, + "water_total": 0.0, + "average_temperature": 30.6, + "experience_temperature": 32.52, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T21:40:08.009196+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 79.9, + "water_total": 0.0, + "average_temperature": 30.5333, + "experience_temperature": 31.3562, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T21:50:06.431656+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 79.6, + "water_total": 0.0, + "average_temperature": 30.4, + "experience_temperature": 31.1629, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T22:00:06.085356+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 81.9, + "water_total": 0.0, + "average_temperature": 30.4333, + "experience_temperature": 32.2348, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T22:10:06.027180+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 81.8, + "water_total": 0.0, + "average_temperature": 30.4, + "experience_temperature": 32.1814, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T22:20:06.334308+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.3, + "humidity": 80.6, + "water_total": 0.0, + "average_temperature": 30.2667, + "experience_temperature": 30.651, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T22:30:06.720296+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.3, + "humidity": 80.6, + "water_total": 0.0, + "average_temperature": 30.2667, + "experience_temperature": 30.651, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T22:40:06.285141+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.6, + "humidity": 82.2, + "water_total": 4.0, + "average_temperature": 30.8667, + "experience_temperature": 29.8352, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T22:50:06.438855+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 80.8, + "water_total": 4.0, + "average_temperature": 30.1667, + "experience_temperature": 31.1695, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T23:00:05.823465+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 82.7, + "water_total": 6.0, + "average_temperature": 30.2667, + "experience_temperature": 31.6495, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T23:10:06.027248+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 82.7, + "water_total": 6.0, + "average_temperature": 30.2667, + "experience_temperature": 31.6495, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T23:20:06.244789+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 81.2, + "water_total": 23.0, + "average_temperature": 30.1667, + "experience_temperature": 31.2495, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T23:30:06.268302+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 82.4, + "water_total": 23.0, + "average_temperature": 29.9, + "experience_temperature": 31.8014, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T23:40:05.873190+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.1, + "humidity": 83.4, + "water_total": 23.0, + "average_temperature": 29.8667, + "experience_temperature": 31.9681, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-05T23:50:05.792054+07:00", + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 83.0, + "water_total": 23.0, + "average_temperature": 29.7667, + "experience_temperature": 31.2095, + "chill_factor": 5.7857 + }, + { + "timestamp": "2026-06-06T00:00:05.805404+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.1, + "humidity": 83.2, + "water_total": 26.0, + "average_temperature": 29.7667, + "experience_temperature": 31.8495, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T00:10:06.034170+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 83.4, + "water_total": 29.0, + "average_temperature": 30.0, + "experience_temperature": 31.5657, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T00:20:06.544264+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.1, + "humidity": 82.7, + "water_total": 34.0, + "average_temperature": 30.0667, + "experience_temperature": 32.0495, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T00:30:06.255181+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.1, + "humidity": 83.5, + "water_total": 34.0, + "average_temperature": 29.9333, + "experience_temperature": 32.0762, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T00:40:05.999385+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 82.1, + "water_total": 34.0, + "average_temperature": 29.7333, + "experience_temperature": 31.039, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T00:50:06.805328+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 82.9, + "water_total": 34.0, + "average_temperature": 29.8, + "experience_temperature": 31.2657, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T01:00:06.596243+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.0, + "humidity": 82.5, + "water_total": 34.0, + "average_temperature": 29.7, + "experience_temperature": 32.2, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T01:10:06.065663+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 83.0, + "water_total": 34.0, + "average_temperature": 29.6333, + "experience_temperature": 31.119, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T01:20:06.145418+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 82.0, + "water_total": 34.0, + "average_temperature": 29.6, + "experience_temperature": 30.8857, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T01:30:07.654497+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 82.9, + "water_total": 34.0, + "average_temperature": 29.5, + "experience_temperature": 30.9657, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T01:40:07.601682+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.1, + "humidity": 83.6, + "water_total": 34.0, + "average_temperature": 29.6667, + "experience_temperature": 31.8295, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T01:50:07.384768+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 83.7, + "water_total": 34.0, + "average_temperature": 29.4333, + "experience_temperature": 31.059, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T02:00:05.978364+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.3, + "humidity": 83.8, + "water_total": 34.0, + "average_temperature": 29.6, + "experience_temperature": 30.6886, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T02:10:06.197939+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 84.6, + "water_total": 34.0, + "average_temperature": 30.1333, + "experience_temperature": 31.939, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T02:20:06.367741+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 82.8, + "water_total": 34.0, + "average_temperature": 29.4, + "experience_temperature": 30.8457, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T02:30:06.661674+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.1, + "humidity": 83.7, + "water_total": 34.0, + "average_temperature": 29.0, + "experience_temperature": 31.1829, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T02:40:06.248924+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 82.5, + "water_total": 34.0, + "average_temperature": 29.8, + "experience_temperature": 31.1857, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T02:50:05.900087+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 84.7, + "water_total": 34.0, + "average_temperature": 29.5, + "experience_temperature": 31.3257, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T03:00:06.466167+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.0, + "humidity": 87.0, + "water_total": 34.0, + "average_temperature": 29.4, + "experience_temperature": 32.8, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T03:10:07.987008+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 83.3, + "water_total": 34.0, + "average_temperature": 29.3333, + "experience_temperature": 30.879, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T03:20:07.214967+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 83.6, + "water_total": 34.0, + "average_temperature": 29.4, + "experience_temperature": 31.0057, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T03:30:06.555377+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.1, + "humidity": 85.3, + "water_total": 34.0, + "average_temperature": 29.1333, + "experience_temperature": 31.6362, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T03:40:06.435845+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 85.2, + "water_total": 34.0, + "average_temperature": 29.1333, + "experience_temperature": 31.059, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T03:50:07.333367+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 86.6, + "water_total": 34.0, + "average_temperature": 29.5667, + "experience_temperature": 31.7724, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T04:00:06.370337+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 83.6, + "water_total": 34.0, + "average_temperature": 29.5, + "experience_temperature": 31.1057, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T04:10:06.347164+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.1, + "humidity": 83.9, + "water_total": 34.0, + "average_temperature": 28.8333, + "experience_temperature": 31.0562, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T04:20:06.774517+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.1, + "humidity": 85.2, + "water_total": 34.0, + "average_temperature": 28.7, + "experience_temperature": 31.1829, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T04:30:07.839875+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 85.0, + "water_total": 34.0, + "average_temperature": 28.6667, + "experience_temperature": 30.5524, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T04:40:06.790264+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 85.3, + "water_total": 34.0, + "average_temperature": 28.5667, + "experience_temperature": 30.5124, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T04:50:06.365716+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 85.3, + "water_total": 34.0, + "average_temperature": 28.6333, + "experience_temperature": 30.579, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T05:00:06.965423+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 86.6, + "water_total": 34.0, + "average_temperature": 28.7333, + "experience_temperature": 30.939, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T05:10:06.857435+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 86.1, + "water_total": 34.0, + "average_temperature": 29.0667, + "experience_temperature": 31.1724, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T05:20:06.112441+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.0, + "humidity": 85.2, + "water_total": 34.0, + "average_temperature": 29.6, + "experience_temperature": 32.64, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T05:30:06.644249+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.1, + "humidity": 86.7, + "water_total": 34.0, + "average_temperature": 29.2, + "experience_temperature": 31.9829, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T05:40:06.955219+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.3, + "humidity": 84.4, + "water_total": 34.0, + "average_temperature": 29.2333, + "experience_temperature": 30.4419, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T05:50:06.455698+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 84.3, + "water_total": 34.0, + "average_temperature": 29.0333, + "experience_temperature": 30.779, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T06:00:06.462656+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 84.2, + "water_total": 34.0, + "average_temperature": 29.3, + "experience_temperature": 31.0257, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T06:10:06.680003+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 84.6, + "water_total": 34.0, + "average_temperature": 29.5333, + "experience_temperature": 31.339, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T06:20:06.822801+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.0, + "humidity": 86.4, + "water_total": 41.0, + "average_temperature": 29.2, + "experience_temperature": 32.48, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T06:30:06.350502+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 85.5, + "water_total": 42.0, + "average_temperature": 29.5, + "experience_temperature": 31.4857, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T06:40:09.148272+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.0, + "humidity": 85.9, + "water_total": 42.0, + "average_temperature": 29.4, + "experience_temperature": 32.58, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T06:50:06.019827+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 84.5, + "water_total": 42.0, + "average_temperature": 29.8333, + "experience_temperature": 31.619, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T07:00:06.847413+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 82.2, + "water_total": 49.0, + "average_temperature": 30.0667, + "experience_temperature": 31.3924, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T07:10:05.980532+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 82.6, + "water_total": 56.0, + "average_temperature": 29.9, + "experience_temperature": 31.3057, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T07:20:07.128658+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 84.1, + "water_total": 58.0, + "average_temperature": 30.1667, + "experience_temperature": 31.8724, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T07:30:06.202586+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 82.2, + "water_total": 70.0, + "average_temperature": 30.3333, + "experience_temperature": 31.659, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T07:40:07.032872+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.1, + "humidity": 83.9, + "water_total": 82.0, + "average_temperature": 30.4667, + "experience_temperature": 32.6895, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T07:50:06.493347+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 80.9, + "water_total": 98.0, + "average_temperature": 30.5667, + "experience_temperature": 31.6324, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T08:00:16.507946+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 80.9, + "water_total": 98.0, + "average_temperature": 30.5667, + "experience_temperature": 31.6324, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T08:10:06.880895+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.4, + "humidity": 81.6, + "water_total": 123.0, + "average_temperature": 30.6, + "experience_temperature": 30.6914, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T08:20:06.481055+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.0, + "humidity": 81.9, + "water_total": 163.0, + "average_temperature": 30.7, + "experience_temperature": 33.08, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T08:30:07.377405+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.8, + "humidity": 80.5, + "water_total": 188.0, + "average_temperature": 31.0, + "experience_temperature": 28.6429, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T08:40:07.531375+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.8, + "humidity": 78.2, + "water_total": 225.0, + "average_temperature": 31.2667, + "experience_temperature": 28.4495, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T08:50:06.409707+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.8, + "humidity": 75.4, + "water_total": 277.0, + "average_temperature": 31.5667, + "experience_temperature": 28.1895, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T09:00:07.011092+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.7, + "humidity": 77.5, + "water_total": 324.0, + "average_temperature": 31.6, + "experience_temperature": 29.2, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T09:10:06.999921+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.8, + "humidity": 76.3, + "water_total": 359.0, + "average_temperature": 31.5, + "experience_temperature": 28.3029, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T09:20:07.146947+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.5, + "humidity": 77.8, + "water_total": 405.0, + "average_temperature": 31.6667, + "experience_temperature": 30.441, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T09:30:06.714446+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.7, + "humidity": 77.4, + "water_total": 467.0, + "average_temperature": 31.5667, + "experience_temperature": 29.1467, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T09:40:06.393591+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.2, + "humidity": 74.8, + "water_total": 509.0, + "average_temperature": 32.0667, + "experience_temperature": 26.341, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T09:50:06.622947+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.4, + "humidity": 72.9, + "water_total": 545.0, + "average_temperature": 32.5333, + "experience_temperature": 25.3133, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T10:00:06.099467+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.2, + "humidity": 72.7, + "water_total": 591.0, + "average_temperature": 32.5667, + "experience_temperature": 26.421, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T10:10:07.062624+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.4, + "humidity": 71.3, + "water_total": 633.0, + "average_temperature": 33.1, + "experience_temperature": 25.56, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T10:20:05.814586+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.1, + "humidity": 73.4, + "water_total": 689.0, + "average_temperature": 33.0, + "experience_temperature": 27.5514, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T10:30:05.172006+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.3, + "humidity": 72.1, + "water_total": 728.0, + "average_temperature": 32.4333, + "experience_temperature": 25.6105, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T10:40:06.231061+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.3, + "humidity": 72.3, + "water_total": 766.0, + "average_temperature": 32.0333, + "experience_temperature": 25.2505, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T10:50:06.713676+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.3, + "humidity": 72.1, + "water_total": 809.0, + "average_temperature": 32.4667, + "experience_temperature": 25.6438, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T11:00:06.536938+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.3, + "humidity": 72.3, + "water_total": 838.0, + "average_temperature": 32.8333, + "experience_temperature": 26.0505, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T11:10:05.994074+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.3, + "humidity": 70.7, + "water_total": 901.0, + "average_temperature": 33.0, + "experience_temperature": 25.8971, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T11:20:07.427923+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.7, + "humidity": 69.4, + "water_total": 970.0, + "average_temperature": 33.2667, + "experience_temperature": 23.6752, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T11:30:05.246582+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.7, + "humidity": 69.7, + "water_total": 1021.0, + "average_temperature": 33.2667, + "experience_temperature": 23.7352, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T11:40:06.214633+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.9, + "humidity": 67.7, + "water_total": 1092.0, + "average_temperature": 33.9667, + "experience_temperature": 22.921, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T11:50:05.193229+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.8, + "humidity": 67.6, + "water_total": 1151.0, + "average_temperature": 33.7, + "experience_temperature": 23.1914, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T12:00:06.148899+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.9, + "humidity": 64.9, + "water_total": 1226.0, + "average_temperature": 33.8333, + "experience_temperature": 22.2276, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T12:10:07.526614+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.8, + "humidity": 65.4, + "water_total": 1287.0, + "average_temperature": 33.8333, + "experience_temperature": 22.8848, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T12:20:06.458897+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 2.1, + "humidity": 63.2, + "water_total": 1366.0, + "average_temperature": 34.4333, + "experience_temperature": 21.3733, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T12:30:06.022914+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 2.2, + "humidity": 63.6, + "water_total": 1420.0, + "average_temperature": 34.5333, + "experience_temperature": 20.9962, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T12:40:06.827047+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.9, + "humidity": 62.0, + "water_total": 1494.0, + "average_temperature": 34.7, + "experience_temperature": 22.5143, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T12:50:05.771351+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 2.2, + "humidity": 62.2, + "water_total": 1563.0, + "average_temperature": 34.8333, + "experience_temperature": 21.0162, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T13:00:06.199804+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 2.0, + "humidity": 61.4, + "water_total": 1634.0, + "average_temperature": 34.4, + "experience_temperature": 21.5371, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T13:10:06.102736+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 2.1, + "humidity": 62.9, + "water_total": 1701.0, + "average_temperature": 34.6667, + "experience_temperature": 21.5467, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T13:20:06.320590+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 2.0, + "humidity": 62.8, + "water_total": 1768.0, + "average_temperature": 34.6667, + "experience_temperature": 22.0838, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T13:30:07.470923+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 2.2, + "humidity": 62.0, + "water_total": 1826.0, + "average_temperature": 34.5333, + "experience_temperature": 20.6762, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T13:40:05.592487+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.8, + "humidity": 61.8, + "water_total": 1895.0, + "average_temperature": 34.8667, + "experience_temperature": 23.1981, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T13:50:06.569456+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 2.2, + "humidity": 59.8, + "water_total": 1965.0, + "average_temperature": 34.6333, + "experience_temperature": 20.3362, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T14:20:06.138431+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 2.0, + "humidity": 59.5, + "water_total": 2165.0, + "average_temperature": 34.8667, + "experience_temperature": 21.6238, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T14:30:05.619035+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 2.0, + "humidity": 60.2, + "water_total": 2230.0, + "average_temperature": 34.7667, + "experience_temperature": 21.6638, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T14:40:06.320959+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 2.0, + "humidity": 59.8, + "water_total": 2289.0, + "average_temperature": 34.8333, + "experience_temperature": 21.6505, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T14:50:08.657130+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.8, + "humidity": 59.0, + "water_total": 2337.0, + "average_temperature": 34.7, + "experience_temperature": 22.4714, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T15:10:07.140647+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 2.1, + "humidity": 60.4, + "water_total": 2494.0, + "average_temperature": 34.7333, + "experience_temperature": 21.1133, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T15:20:05.699628+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 2.3, + "humidity": 59.0, + "water_total": 2548.0, + "average_temperature": 34.5, + "experience_temperature": 19.4857, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T15:30:05.149878+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 2.1, + "humidity": 60.7, + "water_total": 2619.0, + "average_temperature": 34.5333, + "experience_temperature": 20.9733, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T15:40:06.990185+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 2.3, + "humidity": 61.7, + "water_total": 2684.0, + "average_temperature": 34.2, + "experience_temperature": 19.7257, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T15:50:06.183151+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 2.0, + "humidity": 61.8, + "water_total": 2745.0, + "average_temperature": 34.3, + "experience_temperature": 21.5171, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T16:10:07.568511+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.6, + "humidity": 61.9, + "water_total": 2864.0, + "average_temperature": 33.6667, + "experience_temperature": 23.1324, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T16:20:07.278175+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.8, + "humidity": 65.9, + "water_total": 2922.0, + "average_temperature": 33.3333, + "experience_temperature": 22.4848, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T16:30:05.628003+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.2, + "humidity": 67.5, + "water_total": 2991.0, + "average_temperature": 33.0333, + "experience_temperature": 25.8476, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T16:40:05.836088+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.3, + "humidity": 68.8, + "water_total": 3080.0, + "average_temperature": 32.8667, + "experience_temperature": 25.3838, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T16:50:06.076492+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.3, + "humidity": 69.3, + "water_total": 3141.0, + "average_temperature": 32.7, + "experience_temperature": 25.3171, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T17:10:05.974105+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.5, + "humidity": 70.4, + "water_total": 61.0, + "average_temperature": 32.3, + "experience_temperature": 24.0229, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T17:20:06.089349+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.3, + "humidity": 72.3, + "water_total": 124.0, + "average_temperature": 32.1, + "experience_temperature": 25.3171, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T17:30:05.835610+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.4, + "humidity": 72.2, + "water_total": 179.0, + "average_temperature": 31.8667, + "experience_temperature": 24.5067, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T17:40:05.792603+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.4, + "humidity": 72.2, + "water_total": 179.0, + "average_temperature": 31.8667, + "experience_temperature": 24.5067, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T17:50:07.621655+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.2, + "humidity": 73.8, + "water_total": 307.0, + "average_temperature": 31.6333, + "experience_temperature": 25.7076, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T18:00:06.027067+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 1.3, + "humidity": 73.7, + "water_total": 371.0, + "average_temperature": 31.5333, + "experience_temperature": 25.0305, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T18:10:06.186626+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.8, + "humidity": 74.3, + "water_total": 443.0, + "average_temperature": 31.4667, + "experience_temperature": 27.8695, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T18:20:05.820104+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.6, + "humidity": 76.6, + "water_total": 512.0, + "average_temperature": 31.3333, + "experience_temperature": 29.3105, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T18:30:06.427386+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.7, + "humidity": 75.5, + "water_total": 591.0, + "average_temperature": 31.3667, + "experience_temperature": 28.5667, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T18:40:06.340596+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.7, + "humidity": 76.3, + "water_total": 660.0, + "average_temperature": 31.2, + "experience_temperature": 28.56, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T18:50:05.796907+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.7, + "humidity": 76.5, + "water_total": 731.0, + "average_temperature": 31.1, + "experience_temperature": 28.5, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T19:00:07.227635+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.8, + "humidity": 76.0, + "water_total": 798.0, + "average_temperature": 30.9667, + "experience_temperature": 27.7095, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T19:10:05.760049+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.6, + "humidity": 75.2, + "water_total": 856.0, + "average_temperature": 30.8667, + "experience_temperature": 28.5638, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T19:20:05.826838+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.6, + "humidity": 76.2, + "water_total": 923.0, + "average_temperature": 30.8, + "experience_temperature": 28.6971, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T19:30:05.619405+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.7, + "humidity": 74.8, + "water_total": 992.0, + "average_temperature": 30.7, + "experience_temperature": 27.76, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T19:40:06.346138+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.8, + "humidity": 76.0, + "water_total": 1057.0, + "average_temperature": 30.5667, + "experience_temperature": 27.3095, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T19:50:05.561786+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.8, + "humidity": 75.4, + "water_total": 1118.0, + "average_temperature": 30.6, + "experience_temperature": 27.2229, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T20:00:06.035153+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.3, + "humidity": 76.4, + "water_total": 1187.0, + "average_temperature": 30.5, + "experience_temperature": 30.1086, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T20:10:06.187236+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.7, + "humidity": 74.9, + "water_total": 1253.0, + "average_temperature": 30.5333, + "experience_temperature": 27.6133, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T20:20:06.171273+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.3, + "humidity": 74.7, + "water_total": 1314.0, + "average_temperature": 30.4667, + "experience_temperature": 29.7352, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T20:30:05.823294+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.3, + "humidity": 74.7, + "water_total": 1314.0, + "average_temperature": 30.4667, + "experience_temperature": 29.7352, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T20:40:06.537152+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 75.1, + "water_total": 1462.0, + "average_temperature": 30.5, + "experience_temperature": 30.4057, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T20:50:06.098851+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 76.9, + "water_total": 1537.0, + "average_temperature": 30.5333, + "experience_temperature": 30.799, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T21:00:06.628344+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 74.3, + "water_total": 1609.0, + "average_temperature": 30.4333, + "experience_temperature": 30.179, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T21:10:05.848205+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.7, + "humidity": 75.9, + "water_total": 1671.0, + "average_temperature": 30.5333, + "experience_temperature": 27.8133, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T21:20:06.209887+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.6, + "humidity": 77.4, + "water_total": 1733.0, + "average_temperature": 30.6, + "experience_temperature": 28.7371, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T21:30:06.708286+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.1, + "humidity": 74.2, + "water_total": 1808.0, + "average_temperature": 30.4667, + "experience_temperature": 30.7495, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T21:40:06.348193+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.3, + "humidity": 75.2, + "water_total": 1889.0, + "average_temperature": 30.4333, + "experience_temperature": 29.8019, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T21:50:05.814380+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.1, + "humidity": 77.3, + "water_total": 1967.0, + "average_temperature": 30.5, + "experience_temperature": 31.4029, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T22:00:06.153540+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.1, + "humidity": 76.4, + "water_total": 2037.0, + "average_temperature": 30.4, + "experience_temperature": 31.1229, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T22:10:06.111691+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.1, + "humidity": 76.2, + "water_total": 2119.0, + "average_temperature": 30.5, + "experience_temperature": 31.1829, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T22:20:07.629019+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 74.9, + "water_total": 2192.0, + "average_temperature": 30.4, + "experience_temperature": 30.2657, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T22:30:05.997623+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.1, + "humidity": 76.2, + "water_total": 2265.0, + "average_temperature": 30.4333, + "experience_temperature": 31.1162, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T22:40:05.500989+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.3, + "humidity": 77.1, + "water_total": 2339.0, + "average_temperature": 30.3667, + "experience_temperature": 30.1152, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T22:50:06.138437+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.3, + "humidity": 75.6, + "water_total": 2406.0, + "average_temperature": 30.3667, + "experience_temperature": 29.8152, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T23:00:05.818190+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 78.7, + "water_total": 2445.0, + "average_temperature": 30.2, + "experience_temperature": 30.8257, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T23:10:05.841218+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 77.1, + "water_total": 2484.0, + "average_temperature": 29.9, + "experience_temperature": 30.2057, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T23:20:06.197408+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 77.4, + "water_total": 2518.0, + "average_temperature": 29.8, + "experience_temperature": 30.1657, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T23:30:06.513904+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.2, + "humidity": 78.7, + "water_total": 2552.0, + "average_temperature": 29.6333, + "experience_temperature": 30.259, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T23:40:06.317612+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.3, + "humidity": 78.7, + "water_total": 2586.0, + "average_temperature": 29.5333, + "experience_temperature": 29.6019, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-06T23:50:05.803719+07:00", + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.1, + "humidity": 79.0, + "water_total": 2619.0, + "average_temperature": 29.3, + "experience_temperature": 30.5429, + "chill_factor": 5.5714 + }, + { + "timestamp": "2026-06-07T00:00:06.347733+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 80.0, + "water_total": 2660.0, + "average_temperature": 29.3, + "experience_temperature": 30.2286, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T00:10:05.729304+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 80.0, + "water_total": 2660.0, + "average_temperature": 29.3, + "experience_temperature": 30.2286, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T00:20:05.795975+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.3, + "humidity": 79.7, + "water_total": 2800.0, + "average_temperature": 29.9333, + "experience_temperature": 30.2662, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T00:30:05.913509+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 78.9, + "water_total": 2881.0, + "average_temperature": 29.5667, + "experience_temperature": 30.811, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T00:40:05.807336+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 78.8, + "water_total": 2953.0, + "average_temperature": 29.4333, + "experience_temperature": 30.1219, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T00:50:07.086617+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 78.6, + "water_total": 3022.0, + "average_temperature": 29.4, + "experience_temperature": 30.0486, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T01:00:05.810575+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.0, + "humidity": 80.2, + "water_total": 3100.0, + "average_temperature": 29.4667, + "experience_temperature": 31.5067, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T01:10:05.692397+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 78.6, + "water_total": 3170.0, + "average_temperature": 29.4667, + "experience_temperature": 30.1152, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T01:20:06.286493+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 81.2, + "water_total": 3239.0, + "average_temperature": 30.1, + "experience_temperature": 31.2686, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T01:30:05.878670+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 80.7, + "water_total": 3313.0, + "average_temperature": 29.4, + "experience_temperature": 30.4686, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T01:40:05.527814+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 80.2, + "water_total": 3371.0, + "average_temperature": 28.9667, + "experience_temperature": 30.471, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T01:50:06.530364+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 81.9, + "water_total": 3420.0, + "average_temperature": 28.9333, + "experience_temperature": 30.2419, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T02:00:05.873685+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 81.1, + "water_total": 3470.0, + "average_temperature": 28.8, + "experience_temperature": 29.9486, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T02:10:06.382571+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 79.6, + "water_total": 3527.0, + "average_temperature": 28.7, + "experience_temperature": 30.0843, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T02:20:05.589511+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 79.7, + "water_total": 3576.0, + "average_temperature": 28.6333, + "experience_temperature": 30.0376, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T02:30:05.486648+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 80.8, + "water_total": 3640.0, + "average_temperature": 28.5667, + "experience_temperature": 29.6552, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T02:40:06.067464+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 81.0, + "water_total": 3689.0, + "average_temperature": 28.4, + "experience_temperature": 29.5286, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T02:50:06.599449+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 82.0, + "water_total": 3745.0, + "average_temperature": 28.6, + "experience_temperature": 29.9286, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T03:00:06.791374+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.3, + "humidity": 80.3, + "water_total": 3829.0, + "average_temperature": 29.0333, + "experience_temperature": 29.4862, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T03:10:06.131344+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 79.6, + "water_total": 3882.0, + "average_temperature": 28.1667, + "experience_temperature": 29.0152, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T03:20:07.272732+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 80.5, + "water_total": 3939.0, + "average_temperature": 28.7333, + "experience_temperature": 29.7619, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T03:30:07.338707+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 80.7, + "water_total": 3992.0, + "average_temperature": 28.3, + "experience_temperature": 29.3686, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T03:40:07.482693+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 82.5, + "water_total": 4049.0, + "average_temperature": 28.2333, + "experience_temperature": 29.6619, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T03:50:05.959122+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 81.1, + "water_total": 4102.0, + "average_temperature": 28.7667, + "experience_temperature": 30.451, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T04:00:05.922466+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 80.5, + "water_total": 4168.0, + "average_temperature": 28.2667, + "experience_temperature": 29.2952, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T04:10:06.188465+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 81.5, + "water_total": 4220.0, + "average_temperature": 27.8667, + "experience_temperature": 29.0952, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T04:20:07.434341+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 80.0, + "water_total": 4253.0, + "average_temperature": 28.1333, + "experience_temperature": 29.5976, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T04:30:06.775732+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.0, + "humidity": 81.5, + "water_total": 4288.0, + "average_temperature": 28.7667, + "experience_temperature": 31.0667, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T04:40:05.758188+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 80.8, + "water_total": 4319.0, + "average_temperature": 28.1, + "experience_temperature": 29.1886, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T04:50:06.335925+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 80.8, + "water_total": 4355.0, + "average_temperature": 28.8, + "experience_temperature": 29.8886, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T05:00:06.148430+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 81.6, + "water_total": 4391.0, + "average_temperature": 28.1333, + "experience_temperature": 29.9176, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T05:10:07.142321+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 80.7, + "water_total": 4432.0, + "average_temperature": 29.0667, + "experience_temperature": 30.1352, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T05:20:06.241677+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 81.0, + "water_total": 4502.0, + "average_temperature": 28.8333, + "experience_temperature": 30.4976, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T05:30:06.360406+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 81.6, + "water_total": 4573.0, + "average_temperature": 28.6333, + "experience_temperature": 29.8819, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T05:40:06.241267+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 80.5, + "water_total": 4635.0, + "average_temperature": 27.8667, + "experience_temperature": 28.8952, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T05:50:07.826199+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 82.2, + "water_total": 4694.0, + "average_temperature": 28.4333, + "experience_temperature": 29.8019, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T06:00:06.346308+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 81.9, + "water_total": 4751.0, + "average_temperature": 28.9, + "experience_temperature": 30.7443, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T06:10:06.244303+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 81.8, + "water_total": 4799.0, + "average_temperature": 27.9, + "experience_temperature": 29.1886, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T06:20:06.029483+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 81.2, + "water_total": 4856.0, + "average_temperature": 28.5667, + "experience_temperature": 30.271, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T06:30:06.430267+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 81.6, + "water_total": 4938.0, + "average_temperature": 28.2333, + "experience_temperature": 29.4819, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T06:40:06.144600+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 82.8, + "water_total": 4996.0, + "average_temperature": 27.8, + "experience_temperature": 29.8243, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T06:50:07.009428+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.3, + "humidity": 81.6, + "water_total": 5059.0, + "average_temperature": 28.5, + "experience_temperature": 29.2129, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T07:00:06.642595+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 82.7, + "water_total": 5116.0, + "average_temperature": 28.8, + "experience_temperature": 30.2686, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T07:10:05.937011+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 82.1, + "water_total": 5192.0, + "average_temperature": 28.9, + "experience_temperature": 30.7843, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T07:20:06.082105+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.0, + "humidity": 82.8, + "water_total": 5248.0, + "average_temperature": 29.3333, + "experience_temperature": 31.8933, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T07:30:06.477457+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 80.5, + "water_total": 5334.0, + "average_temperature": 29.7333, + "experience_temperature": 30.7619, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T07:40:05.940379+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 80.3, + "water_total": 5404.0, + "average_temperature": 29.7333, + "experience_temperature": 31.2576, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T07:50:07.326658+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.4, + "humidity": 80.6, + "water_total": 5462.0, + "average_temperature": 29.8333, + "experience_temperature": 29.8105, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T08:00:07.485101+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.3, + "humidity": 78.5, + "water_total": 5519.0, + "average_temperature": 29.8, + "experience_temperature": 29.8929, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T08:10:05.947516+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.3, + "humidity": 78.5, + "water_total": 5519.0, + "average_temperature": 29.8, + "experience_temperature": 29.8929, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T08:20:06.410455+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.3, + "humidity": 79.8, + "water_total": 5615.0, + "average_temperature": 29.9, + "experience_temperature": 30.2529, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T08:30:06.993273+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.6, + "humidity": 78.7, + "water_total": 5657.0, + "average_temperature": 30.0667, + "experience_temperature": 28.5924, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T08:40:06.726690+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.6, + "humidity": 77.5, + "water_total": 5701.0, + "average_temperature": 30.2333, + "experience_temperature": 28.519, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T08:50:07.569642+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.7, + "humidity": 75.9, + "water_total": 5742.0, + "average_temperature": 30.8333, + "experience_temperature": 28.2633, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T09:00:06.267193+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.7, + "humidity": 75.9, + "water_total": 5742.0, + "average_temperature": 30.8333, + "experience_temperature": 28.2633, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T09:10:06.069635+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.2, + "humidity": 74.0, + "water_total": 5836.0, + "average_temperature": 31.4, + "experience_temperature": 25.7714, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T09:20:07.787339+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.1, + "humidity": 71.5, + "water_total": 5874.0, + "average_temperature": 31.5, + "experience_temperature": 25.9071, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T09:30:06.473989+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.3, + "humidity": 71.4, + "water_total": 5901.0, + "average_temperature": 31.9, + "experience_temperature": 25.2157, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T09:40:06.868350+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.3, + "humidity": 70.7, + "water_total": 5939.0, + "average_temperature": 31.9333, + "experience_temperature": 25.109, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T09:50:06.459133+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.2, + "humidity": 70.1, + "water_total": 5997.0, + "average_temperature": 32.0333, + "experience_temperature": 25.6248, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T10:00:06.496191+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.2, + "humidity": 69.6, + "water_total": 6045.0, + "average_temperature": 32.1, + "experience_temperature": 25.5914, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T10:10:06.453262+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.7, + "humidity": 70.0, + "water_total": 6096.0, + "average_temperature": 32.4667, + "experience_temperature": 23.3595, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T10:20:06.654790+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.8, + "humidity": 66.9, + "water_total": 6138.0, + "average_temperature": 32.5667, + "experience_temperature": 22.3038, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T10:30:06.604521+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.6, + "humidity": 64.1, + "water_total": 6183.0, + "average_temperature": 32.5333, + "experience_temperature": 22.7819, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T10:40:05.940164+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.8, + "humidity": 63.1, + "water_total": 6227.0, + "average_temperature": 32.8667, + "experience_temperature": 21.8438, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T10:50:05.616730+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.8, + "humidity": 62.1, + "water_total": 6266.0, + "average_temperature": 33.4667, + "experience_temperature": 22.2438, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T11:00:05.831085+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.7, + "humidity": 60.6, + "water_total": 6323.0, + "average_temperature": 33.4333, + "experience_temperature": 22.4462, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T11:10:07.175194+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.7, + "humidity": 60.6, + "water_total": 6323.0, + "average_temperature": 33.4333, + "experience_temperature": 22.4462, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T11:20:06.262040+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.7, + "humidity": 59.2, + "water_total": 6417.0, + "average_temperature": 33.7333, + "experience_temperature": 22.4662, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T11:30:05.881985+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.6, + "humidity": 57.7, + "water_total": 6478.0, + "average_temperature": 33.8667, + "experience_temperature": 22.8352, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T11:40:06.373373+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.1, + "humidity": 58.7, + "water_total": 6521.0, + "average_temperature": 34.0667, + "experience_temperature": 20.5567, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T11:50:06.296325+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.7, + "humidity": 57.0, + "water_total": 6572.0, + "average_temperature": 33.9333, + "experience_temperature": 22.2262, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T12:00:06.590067+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.1, + "humidity": 55.7, + "water_total": 6615.0, + "average_temperature": 34.0333, + "experience_temperature": 19.9233, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T12:10:06.446998+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.3, + "humidity": 57.2, + "water_total": 6661.0, + "average_temperature": 34.2333, + "experience_temperature": 19.3519, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T12:20:07.724800+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.2, + "humidity": 56.1, + "water_total": 6699.0, + "average_temperature": 34.3333, + "experience_temperature": 19.7676, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T12:30:07.176510+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.9, + "humidity": 56.5, + "water_total": 6753.0, + "average_temperature": 34.5333, + "experience_temperature": 21.6548, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T12:40:09.273447+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.2, + "humidity": 55.1, + "water_total": 6806.0, + "average_temperature": 34.3667, + "experience_temperature": 19.601, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T12:50:06.390286+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.1, + "humidity": 54.5, + "water_total": 6850.0, + "average_temperature": 34.7333, + "experience_temperature": 20.3833, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T13:00:06.870194+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.2, + "humidity": 52.9, + "water_total": 6896.0, + "average_temperature": 34.6667, + "experience_temperature": 19.461, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T13:10:06.058646+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.2, + "humidity": 53.0, + "water_total": 6943.0, + "average_temperature": 34.3667, + "experience_temperature": 19.181, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T13:20:06.526335+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.1, + "humidity": 55.2, + "water_total": 6988.0, + "average_temperature": 34.6333, + "experience_temperature": 20.4233, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T13:30:06.077268+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.1, + "humidity": 55.2, + "water_total": 6988.0, + "average_temperature": 34.6333, + "experience_temperature": 20.4233, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T13:40:06.405522+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.1, + "humidity": 53.0, + "water_total": 7086.0, + "average_temperature": 34.6, + "experience_temperature": 19.95, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T13:50:08.704220+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.0, + "humidity": 54.4, + "water_total": 7135.0, + "average_temperature": 34.7333, + "experience_temperature": 20.899, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T14:10:06.489714+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.2, + "humidity": 55.1, + "water_total": 7232.0, + "average_temperature": 34.7, + "experience_temperature": 19.9343, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T14:20:07.177006+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.2, + "humidity": 56.5, + "water_total": 7276.0, + "average_temperature": 34.6, + "experience_temperature": 20.1143, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T14:30:08.936312+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.9, + "humidity": 54.8, + "water_total": 7321.0, + "average_temperature": 34.4667, + "experience_temperature": 21.2481, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T14:40:06.757691+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.3, + "humidity": 51.6, + "water_total": 7365.0, + "average_temperature": 34.3667, + "experience_temperature": 18.3652, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T14:50:06.361625+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.1, + "humidity": 51.4, + "water_total": 7409.0, + "average_temperature": 34.4333, + "experience_temperature": 19.4633, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T15:10:06.602340+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.4, + "humidity": 58.0, + "water_total": 7501.0, + "average_temperature": 34.1667, + "experience_temperature": 18.9095, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T15:20:06.547205+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.4, + "humidity": 60.6, + "water_total": 7545.0, + "average_temperature": 33.8667, + "experience_temperature": 19.1295, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T15:30:07.332814+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.8, + "humidity": 60.4, + "water_total": 7580.0, + "average_temperature": 33.6, + "experience_temperature": 22.0371, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T15:40:06.768329+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.9, + "humidity": 61.4, + "water_total": 7619.0, + "average_temperature": 33.4333, + "experience_temperature": 21.5348, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T15:50:06.437918+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.7, + "humidity": 62.1, + "water_total": 7667.0, + "average_temperature": 33.1, + "experience_temperature": 22.4129, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T16:10:06.997384+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 2.1, + "humidity": 62.0, + "water_total": 7754.0, + "average_temperature": 32.6333, + "experience_temperature": 19.7833, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T16:20:07.504740+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.9, + "humidity": 63.2, + "water_total": 7796.0, + "average_temperature": 32.5333, + "experience_temperature": 20.9948, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T16:30:07.487374+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.2, + "humidity": 64.6, + "water_total": 7852.0, + "average_temperature": 32.1667, + "experience_temperature": 24.6581, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T16:40:06.277490+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.4, + "humidity": 65.2, + "water_total": 7900.0, + "average_temperature": 32.0667, + "experience_temperature": 23.6067, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T16:50:06.516250+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.4, + "humidity": 65.2, + "water_total": 7900.0, + "average_temperature": 32.0667, + "experience_temperature": 23.6067, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T17:10:06.033641+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 1.2, + "humidity": 68.4, + "water_total": 38.0, + "average_temperature": 31.3667, + "experience_temperature": 24.6181, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T17:20:07.069972+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.6, + "humidity": 69.6, + "water_total": 81.0, + "average_temperature": 31.2, + "experience_temperature": 27.9057, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T17:30:06.301344+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.8, + "humidity": 69.9, + "water_total": 138.0, + "average_temperature": 31.2333, + "experience_temperature": 26.9276, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T17:40:06.446134+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.7, + "humidity": 71.0, + "water_total": 186.0, + "average_temperature": 31.0667, + "experience_temperature": 27.5167, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T17:50:06.217073+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.8, + "humidity": 72.2, + "water_total": 228.0, + "average_temperature": 30.7, + "experience_temperature": 26.8543, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T18:00:07.557059+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.9, + "humidity": 72.8, + "water_total": 273.0, + "average_temperature": 30.2667, + "experience_temperature": 26.0052, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T18:10:06.512029+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.8, + "humidity": 74.4, + "water_total": 307.0, + "average_temperature": 30.0, + "experience_temperature": 26.5943, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T18:20:06.089703+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.5, + "humidity": 75.0, + "water_total": 338.0, + "average_temperature": 29.7, + "experience_temperature": 28.0214, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T18:30:08.890416+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.7, + "humidity": 75.3, + "water_total": 376.0, + "average_temperature": 29.7, + "experience_temperature": 27.01, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T18:40:06.499707+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.7, + "humidity": 75.4, + "water_total": 424.0, + "average_temperature": 29.8, + "experience_temperature": 27.13, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T18:50:07.166612+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.8, + "humidity": 74.6, + "water_total": 469.0, + "average_temperature": 29.7333, + "experience_temperature": 26.3676, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T19:00:06.397876+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 74.2, + "water_total": 515.0, + "average_temperature": 29.7, + "experience_temperature": 29.4686, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T19:10:08.167807+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.4, + "humidity": 75.2, + "water_total": 553.0, + "average_temperature": 29.6333, + "experience_temperature": 28.5305, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T19:20:05.921365+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 76.2, + "water_total": 594.0, + "average_temperature": 29.6667, + "experience_temperature": 29.8352, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T19:30:07.910020+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.3, + "humidity": 78.3, + "water_total": 632.0, + "average_temperature": 29.7667, + "experience_temperature": 29.8195, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T19:40:06.737054+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 76.3, + "water_total": 662.0, + "average_temperature": 29.6, + "experience_temperature": 29.7886, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T19:50:06.451737+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 77.0, + "water_total": 717.0, + "average_temperature": 29.5667, + "experience_temperature": 29.8952, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T20:00:08.207340+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 77.0, + "water_total": 768.0, + "average_temperature": 29.5, + "experience_temperature": 29.8286, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T20:10:06.721721+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 79.5, + "water_total": 812.0, + "average_temperature": 29.7, + "experience_temperature": 30.5286, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T20:20:07.118683+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.6, + "humidity": 78.5, + "water_total": 854.0, + "average_temperature": 29.7667, + "experience_temperature": 28.2524, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T20:30:06.371875+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.4, + "humidity": 78.1, + "water_total": 903.0, + "average_temperature": 29.7, + "experience_temperature": 29.1771, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T20:40:06.140903+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 77.3, + "water_total": 943.0, + "average_temperature": 29.6667, + "experience_temperature": 30.591, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T20:50:06.949824+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.6, + "humidity": 79.4, + "water_total": 970.0, + "average_temperature": 29.7667, + "experience_temperature": 28.4324, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T21:00:07.331094+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.4, + "humidity": 77.6, + "water_total": 1021.0, + "average_temperature": 29.6333, + "experience_temperature": 29.0105, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T21:10:06.406832+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.7, + "humidity": 78.6, + "water_total": 1085.0, + "average_temperature": 29.7667, + "experience_temperature": 27.7367, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T21:20:06.844716+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 80.0, + "water_total": 1123.0, + "average_temperature": 29.6667, + "experience_temperature": 31.131, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T21:30:06.999631+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 77.7, + "water_total": 1167.0, + "average_temperature": 29.5667, + "experience_temperature": 30.0352, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T21:40:06.470677+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.4, + "humidity": 77.0, + "water_total": 1212.0, + "average_temperature": 29.7, + "experience_temperature": 28.9571, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T21:50:06.546587+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 78.4, + "water_total": 1256.0, + "average_temperature": 29.6667, + "experience_temperature": 30.2752, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T22:00:07.695235+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 79.6, + "water_total": 1298.0, + "average_temperature": 29.5333, + "experience_temperature": 30.9176, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T22:10:07.433678+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 78.6, + "water_total": 1345.0, + "average_temperature": 29.5333, + "experience_temperature": 30.1819, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T22:20:07.188139+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 81.5, + "water_total": 1377.0, + "average_temperature": 29.5667, + "experience_temperature": 31.331, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T22:30:07.402114+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.3, + "humidity": 79.7, + "water_total": 1419.0, + "average_temperature": 29.6667, + "experience_temperature": 29.9995, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T22:40:07.098274+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 79.0, + "water_total": 1453.0, + "average_temperature": 29.6667, + "experience_temperature": 30.3952, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T22:50:07.245618+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 79.0, + "water_total": 1453.0, + "average_temperature": 29.6667, + "experience_temperature": 30.3952, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T23:00:07.270735+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 79.6, + "water_total": 1534.0, + "average_temperature": 29.6333, + "experience_temperature": 30.4819, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T23:10:08.166091+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 79.8, + "water_total": 1570.0, + "average_temperature": 29.6, + "experience_temperature": 30.4886, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T23:20:06.866699+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.2, + "humidity": 79.8, + "water_total": 1570.0, + "average_temperature": 29.6, + "experience_temperature": 30.4886, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T23:30:06.536049+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.3, + "humidity": 79.5, + "water_total": 1614.0, + "average_temperature": 29.1333, + "experience_temperature": 29.4262, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T23:40:08.834505+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 80.1, + "water_total": 1627.0, + "average_temperature": 29.0333, + "experience_temperature": 30.5176, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-07T23:50:06.775538+07:00", + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 80.4, + "water_total": 1641.0, + "average_temperature": 28.9333, + "experience_temperature": 30.4776, + "chill_factor": 5.3571 + }, + { + "timestamp": "2026-06-08T00:00:07.691571+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 79.9, + "water_total": 1653.0, + "average_temperature": 28.8667, + "experience_temperature": 29.8181, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T00:10:06.129068+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 81.3, + "water_total": 1673.0, + "average_temperature": 29.1667, + "experience_temperature": 30.3981, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T00:20:07.226961+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.1, + "humidity": 81.4, + "water_total": 1740.0, + "average_temperature": 29.6, + "experience_temperature": 31.3657, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T00:30:06.678712+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.1, + "humidity": 78.6, + "water_total": 1797.0, + "average_temperature": 29.3333, + "experience_temperature": 30.539, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T00:40:07.145102+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 81.0, + "water_total": 1843.0, + "average_temperature": 29.2333, + "experience_temperature": 30.4048, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T00:50:06.550658+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 80.9, + "water_total": 1884.0, + "average_temperature": 29.0667, + "experience_temperature": 30.2181, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T01:00:06.798329+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 79.6, + "water_total": 1923.0, + "average_temperature": 29.0, + "experience_temperature": 29.8914, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T01:10:07.304292+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.3, + "humidity": 79.9, + "water_total": 1963.0, + "average_temperature": 29.0333, + "experience_temperature": 29.4705, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T01:20:06.459274+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 80.0, + "water_total": 2008.0, + "average_temperature": 29.3667, + "experience_temperature": 30.3381, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T01:30:07.594290+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 79.4, + "water_total": 2055.0, + "average_temperature": 29.2667, + "experience_temperature": 30.1181, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T01:40:07.844802+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.1, + "humidity": 79.7, + "water_total": 2089.0, + "average_temperature": 28.9667, + "experience_temperature": 30.3924, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T01:50:06.750876+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 80.6, + "water_total": 2121.0, + "average_temperature": 29.0333, + "experience_temperature": 30.1248, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T02:00:06.912950+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 80.1, + "water_total": 2148.0, + "average_temperature": 28.7333, + "experience_temperature": 29.7248, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T02:10:05.394533+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 81.2, + "water_total": 2172.0, + "average_temperature": 28.6667, + "experience_temperature": 29.8781, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T02:20:06.197944+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 81.0, + "water_total": 2197.0, + "average_temperature": 28.6667, + "experience_temperature": 29.8381, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T02:30:06.261556+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.1, + "humidity": 80.5, + "water_total": 2230.0, + "average_temperature": 28.8, + "experience_temperature": 30.3857, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T02:40:05.895962+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 82.1, + "water_total": 2263.0, + "average_temperature": 28.9, + "experience_temperature": 30.2914, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T02:50:05.388164+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 82.1, + "water_total": 2263.0, + "average_temperature": 28.9, + "experience_temperature": 30.2914, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T03:00:05.514697+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.1, + "humidity": 80.5, + "water_total": 2329.0, + "average_temperature": 28.9333, + "experience_temperature": 30.519, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T03:10:07.545910+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 81.4, + "water_total": 2345.0, + "average_temperature": 28.3333, + "experience_temperature": 29.5848, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T03:20:05.879100+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.3, + "humidity": 80.3, + "water_total": 2373.0, + "average_temperature": 28.8667, + "experience_temperature": 29.3838, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T03:30:06.214875+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.3, + "humidity": 82.3, + "water_total": 2409.0, + "average_temperature": 28.5, + "experience_temperature": 29.4171, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T03:40:05.879178+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.1, + "humidity": 81.6, + "water_total": 2454.0, + "average_temperature": 28.5, + "experience_temperature": 30.3057, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T03:50:05.700862+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 81.3, + "water_total": 2484.0, + "average_temperature": 28.2333, + "experience_temperature": 29.4648, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T04:00:05.948860+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 82.4, + "water_total": 2513.0, + "average_temperature": 27.9667, + "experience_temperature": 29.4181, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T04:10:06.280490+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 82.5, + "water_total": 2532.0, + "average_temperature": 27.8667, + "experience_temperature": 29.3381, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T04:20:05.578736+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 81.8, + "water_total": 2544.0, + "average_temperature": 27.8, + "experience_temperature": 29.1314, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T04:30:06.001004+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.0, + "humidity": 82.8, + "water_total": 2558.0, + "average_temperature": 28.1333, + "experience_temperature": 30.6933, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T04:40:06.058448+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.0, + "humidity": 82.8, + "water_total": 2558.0, + "average_temperature": 28.1333, + "experience_temperature": 30.6933, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T04:50:05.461091+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.3, + "humidity": 79.9, + "water_total": 2584.0, + "average_temperature": 28.0333, + "experience_temperature": 28.4705, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T05:00:05.443642+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.0, + "humidity": 83.1, + "water_total": 2597.0, + "average_temperature": 28.5, + "experience_temperature": 31.12, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T05:10:06.966670+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.1, + "humidity": 82.5, + "water_total": 2616.0, + "average_temperature": 27.9333, + "experience_temperature": 29.919, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T05:20:05.892704+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 81.1, + "water_total": 2676.0, + "average_temperature": 28.2333, + "experience_temperature": 29.4248, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T05:30:05.585208+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 79.9, + "water_total": 2742.0, + "average_temperature": 28.2, + "experience_temperature": 29.1514, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T05:40:06.105988+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.3, + "humidity": 81.3, + "water_total": 2775.0, + "average_temperature": 28.1, + "experience_temperature": 28.8171, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T05:50:05.884042+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 81.1, + "water_total": 2813.0, + "average_temperature": 27.6, + "experience_temperature": 28.7914, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T06:00:05.342917+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.0, + "humidity": 80.5, + "water_total": 2859.0, + "average_temperature": 28.2667, + "experience_temperature": 30.3667, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T06:10:05.980947+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 79.5, + "water_total": 2906.0, + "average_temperature": 27.6333, + "experience_temperature": 28.5048, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T06:20:05.901689+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 81.8, + "water_total": 2940.0, + "average_temperature": 28.1333, + "experience_temperature": 29.4648, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T06:30:06.131397+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 80.1, + "water_total": 2967.0, + "average_temperature": 28.0333, + "experience_temperature": 29.0248, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T06:40:06.277017+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.3, + "humidity": 80.2, + "water_total": 3017.0, + "average_temperature": 28.3, + "experience_temperature": 28.7971, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T06:50:07.525594+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.3, + "humidity": 80.2, + "water_total": 3078.0, + "average_temperature": 28.5, + "experience_temperature": 28.9971, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T07:00:11.182554+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 81.1, + "water_total": 3116.0, + "average_temperature": 28.6333, + "experience_temperature": 29.8248, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T07:10:06.660030+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 80.7, + "water_total": 3155.0, + "average_temperature": 28.3667, + "experience_temperature": 29.4781, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T07:20:06.928706+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 80.0, + "water_total": 3205.0, + "average_temperature": 28.2667, + "experience_temperature": 29.2381, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T07:30:06.144180+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.3, + "humidity": 80.0, + "water_total": 3245.0, + "average_temperature": 28.6, + "experience_temperature": 29.0571, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T07:40:06.237788+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.3, + "humidity": 81.2, + "water_total": 3299.0, + "average_temperature": 28.6, + "experience_temperature": 29.2971, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T07:50:07.407071+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 78.2, + "water_total": 3346.0, + "average_temperature": 28.4667, + "experience_temperature": 29.0781, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T08:00:09.774709+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 78.2, + "water_total": 3346.0, + "average_temperature": 28.4667, + "experience_temperature": 29.0781, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T08:10:07.637803+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.7, + "humidity": 79.6, + "water_total": 3383.0, + "average_temperature": 28.7667, + "experience_temperature": 27.0867, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T08:20:06.983627+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.8, + "humidity": 77.3, + "water_total": 3425.0, + "average_temperature": 29.0333, + "experience_temperature": 26.379, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T08:30:07.834252+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.8, + "humidity": 75.1, + "water_total": 3533.0, + "average_temperature": 29.9667, + "experience_temperature": 26.8724, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T08:40:07.703248+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.8, + "humidity": 74.1, + "water_total": 3580.0, + "average_temperature": 30.1333, + "experience_temperature": 26.839, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T08:50:06.173122+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.8, + "humidity": 74.1, + "water_total": 3580.0, + "average_temperature": 30.1333, + "experience_temperature": 26.839, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T09:00:06.281615+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.7, + "humidity": 71.4, + "water_total": 3629.0, + "average_temperature": 30.6333, + "experience_temperature": 27.3133, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T09:10:06.802516+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.6, + "humidity": 71.8, + "water_total": 3729.0, + "average_temperature": 31.0667, + "experience_temperature": 28.341, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T09:20:06.425862+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.5, + "humidity": 71.0, + "water_total": 3785.0, + "average_temperature": 31.1, + "experience_temperature": 28.7286, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T09:30:05.599167+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.3, + "humidity": 67.8, + "water_total": 3838.0, + "average_temperature": 31.1667, + "experience_temperature": 24.041, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T09:40:06.007595+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.5, + "humidity": 68.0, + "water_total": 3884.0, + "average_temperature": 31.1333, + "experience_temperature": 23.019, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T09:50:06.179311+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.2, + "humidity": 66.6, + "water_total": 3931.0, + "average_temperature": 31.5, + "experience_temperature": 24.6486, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T10:00:08.260158+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.1, + "humidity": 64.6, + "water_total": 3973.0, + "average_temperature": 31.9333, + "experience_temperature": 25.1962, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T10:10:06.197345+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.8, + "humidity": 66.6, + "water_total": 4013.0, + "average_temperature": 32.1333, + "experience_temperature": 22.1962, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T10:20:06.439496+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.6, + "humidity": 65.8, + "water_total": 4058.0, + "average_temperature": 32.2667, + "experience_temperature": 23.1981, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T10:30:07.588357+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.5, + "humidity": 66.1, + "water_total": 4100.0, + "average_temperature": 32.3667, + "experience_temperature": 23.8724, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T10:40:07.847572+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.6, + "humidity": 64.5, + "water_total": 4156.0, + "average_temperature": 32.4333, + "experience_temperature": 23.1048, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T10:50:07.021683+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.5, + "humidity": 64.1, + "water_total": 4218.0, + "average_temperature": 32.5333, + "experience_temperature": 23.639, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T11:00:07.187235+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.8, + "humidity": 64.2, + "water_total": 4270.0, + "average_temperature": 32.9333, + "experience_temperature": 22.5162, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T11:10:06.693901+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 2.2, + "humidity": 63.1, + "water_total": 4332.0, + "average_temperature": 33.2, + "experience_temperature": 20.5057, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T11:20:06.424639+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 2.2, + "humidity": 64.0, + "water_total": 4377.0, + "average_temperature": 33.1333, + "experience_temperature": 20.619, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T11:30:06.545289+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 2.3, + "humidity": 61.5, + "water_total": 4431.0, + "average_temperature": 33.2333, + "experience_temperature": 19.7048, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T11:40:07.137720+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 2.3, + "humidity": 60.3, + "water_total": 4475.0, + "average_temperature": 33.3, + "experience_temperature": 19.5314, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T11:50:07.257827+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.6, + "humidity": 60.3, + "water_total": 4526.0, + "average_temperature": 33.8667, + "experience_temperature": 23.6981, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T12:00:06.293507+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.9, + "humidity": 60.0, + "water_total": 4585.0, + "average_temperature": 33.7333, + "experience_temperature": 21.9619, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T12:10:08.489372+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 2.3, + "humidity": 59.5, + "water_total": 4630.0, + "average_temperature": 33.5, + "experience_temperature": 19.5714, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T12:20:06.968271+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 2.3, + "humidity": 60.5, + "water_total": 4683.0, + "average_temperature": 33.7667, + "experience_temperature": 20.0381, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T12:30:06.736027+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.9, + "humidity": 58.4, + "water_total": 4731.0, + "average_temperature": 33.9667, + "experience_temperature": 21.8752, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T12:40:05.739434+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 2.1, + "humidity": 60.1, + "water_total": 4782.0, + "average_temperature": 33.7667, + "experience_temperature": 20.9867, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T12:50:07.204262+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 2.3, + "humidity": 58.6, + "water_total": 4831.0, + "average_temperature": 33.8333, + "experience_temperature": 19.7248, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T13:00:06.759482+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 2.1, + "humidity": 59.3, + "water_total": 4894.0, + "average_temperature": 33.9667, + "experience_temperature": 21.0267, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T13:10:06.859420+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.9, + "humidity": 59.1, + "water_total": 4945.0, + "average_temperature": 33.6667, + "experience_temperature": 21.7152, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T13:20:08.195722+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 2.0, + "humidity": 57.9, + "water_total": 4989.0, + "average_temperature": 33.4333, + "experience_temperature": 20.7276, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T13:30:09.712872+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 2.3, + "humidity": 57.8, + "water_total": 5035.0, + "average_temperature": 33.7, + "experience_temperature": 19.4314, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T13:40:10.267686+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.9, + "humidity": 59.2, + "water_total": 5089.0, + "average_temperature": 33.9667, + "experience_temperature": 22.0352, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T13:50:07.359493+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.9, + "humidity": 58.3, + "water_total": 5133.0, + "average_temperature": 33.5333, + "experience_temperature": 21.4219, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T14:10:06.592598+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 2.2, + "humidity": 58.5, + "water_total": 5237.0, + "average_temperature": 33.9333, + "experience_temperature": 20.319, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T14:20:07.765990+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 2.3, + "humidity": 59.2, + "water_total": 5288.0, + "average_temperature": 33.8667, + "experience_temperature": 19.8781, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T14:30:07.800935+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 2.1, + "humidity": 59.6, + "water_total": 5345.0, + "average_temperature": 33.5333, + "experience_temperature": 20.6533, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T14:40:06.875220+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 2.1, + "humidity": 60.3, + "water_total": 5385.0, + "average_temperature": 33.5333, + "experience_temperature": 20.7933, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T14:50:07.619968+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.8, + "humidity": 60.4, + "water_total": 5427.0, + "average_temperature": 33.6333, + "experience_temperature": 22.4562, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T15:10:06.551217+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 2.0, + "humidity": 66.4, + "water_total": 5554.0, + "average_temperature": 33.5667, + "experience_temperature": 22.561, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T15:20:07.267035+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 2.0, + "humidity": 67.6, + "water_total": 5607.0, + "average_temperature": 33.0333, + "experience_temperature": 22.2676, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T15:30:07.412637+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 2.0, + "humidity": 67.6, + "water_total": 5607.0, + "average_temperature": 33.0333, + "experience_temperature": 22.2676, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T15:40:07.511195+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.9, + "humidity": 67.7, + "water_total": 5705.0, + "average_temperature": 32.9667, + "experience_temperature": 22.7352, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T15:50:06.942263+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.9, + "humidity": 66.6, + "water_total": 5742.0, + "average_temperature": 32.9667, + "experience_temperature": 22.5152, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T16:10:10.645297+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.8, + "humidity": 67.2, + "water_total": 5853.0, + "average_temperature": 32.4667, + "experience_temperature": 22.6495, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T16:20:06.598101+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.8, + "humidity": 66.8, + "water_total": 5899.0, + "average_temperature": 32.2333, + "experience_temperature": 22.3362, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T16:30:06.604120+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.6, + "humidity": 67.1, + "water_total": 5947.0, + "average_temperature": 32.0333, + "experience_temperature": 23.2248, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T16:40:06.690989+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.4, + "humidity": 66.7, + "water_total": 5997.0, + "average_temperature": 31.9, + "experience_temperature": 24.04, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T16:50:08.111664+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.2, + "humidity": 66.3, + "water_total": 6056.0, + "average_temperature": 31.7333, + "experience_temperature": 24.8219, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T17:10:07.423418+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.4, + "humidity": 66.3, + "water_total": 40.0, + "average_temperature": 31.1333, + "experience_temperature": 23.1933, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T17:20:06.778308+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.9, + "humidity": 67.2, + "water_total": 88.0, + "average_temperature": 31.0333, + "experience_temperature": 25.8448, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T17:30:06.373665+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 1.2, + "humidity": 67.5, + "water_total": 153.0, + "average_temperature": 31.0667, + "experience_temperature": 24.3952, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T17:40:07.792164+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.6, + "humidity": 67.3, + "water_total": 214.0, + "average_temperature": 30.8333, + "experience_temperature": 27.2076, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T17:50:08.264764+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.8, + "humidity": 68.8, + "water_total": 269.0, + "average_temperature": 30.6, + "experience_temperature": 26.2457, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T18:00:08.066337+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.6, + "humidity": 70.7, + "water_total": 324.0, + "average_temperature": 30.4333, + "experience_temperature": 27.4876, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T18:10:07.866615+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.7, + "humidity": 70.4, + "water_total": 376.0, + "average_temperature": 30.3333, + "experience_temperature": 26.8133, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T18:20:06.582627+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.7, + "humidity": 71.4, + "water_total": 425.0, + "average_temperature": 30.3, + "experience_temperature": 26.98, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T18:30:08.581079+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.7, + "humidity": 71.9, + "water_total": 473.0, + "average_temperature": 30.0667, + "experience_temperature": 26.8467, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T18:40:08.078277+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.7, + "humidity": 72.9, + "water_total": 520.0, + "average_temperature": 30.1333, + "experience_temperature": 27.1133, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T18:50:07.398650+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.7, + "humidity": 74.1, + "water_total": 577.0, + "average_temperature": 30.1667, + "experience_temperature": 27.3867, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T19:00:08.931975+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.7, + "humidity": 75.0, + "water_total": 625.0, + "average_temperature": 29.9, + "experience_temperature": 27.3, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T19:10:06.373297+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.6, + "humidity": 76.1, + "water_total": 672.0, + "average_temperature": 29.8, + "experience_temperature": 27.9343, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T19:20:06.417056+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.5, + "humidity": 77.7, + "water_total": 719.0, + "average_temperature": 29.6667, + "experience_temperature": 28.6352, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T19:30:06.610272+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.6, + "humidity": 77.5, + "water_total": 771.0, + "average_temperature": 29.5667, + "experience_temperature": 27.981, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T19:40:06.456813+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.4, + "humidity": 79.2, + "water_total": 820.0, + "average_temperature": 29.3667, + "experience_temperature": 29.1495, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T19:50:07.000374+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.6, + "humidity": 77.4, + "water_total": 869.0, + "average_temperature": 29.1667, + "experience_temperature": 27.561, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T20:00:07.801736+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.7, + "humidity": 77.5, + "water_total": 923.0, + "average_temperature": 29.2667, + "experience_temperature": 27.1667, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T20:10:07.707160+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.7, + "humidity": 77.0, + "water_total": 968.0, + "average_temperature": 29.4667, + "experience_temperature": 27.2667, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T20:20:06.125261+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.6, + "humidity": 78.1, + "water_total": 1016.0, + "average_temperature": 29.3, + "experience_temperature": 27.8343, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T20:30:06.450445+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.7, + "humidity": 76.5, + "water_total": 1060.0, + "average_temperature": 29.1333, + "experience_temperature": 26.8333, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T20:40:07.199277+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.9, + "humidity": 78.0, + "water_total": 1094.0, + "average_temperature": 28.8667, + "experience_temperature": 25.8381, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T20:50:07.076272+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.8, + "humidity": 78.0, + "water_total": 1149.0, + "average_temperature": 29.0333, + "experience_temperature": 26.519, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T21:00:06.713683+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.6, + "humidity": 78.6, + "water_total": 1213.0, + "average_temperature": 28.6333, + "experience_temperature": 27.2676, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T21:10:07.220262+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.7, + "humidity": 79.4, + "water_total": 1274.0, + "average_temperature": 28.3, + "experience_temperature": 26.58, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T21:20:06.732757+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.8, + "humidity": 80.1, + "water_total": 1325.0, + "average_temperature": 28.3667, + "experience_temperature": 26.2724, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T21:30:07.092110+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.7, + "humidity": 81.3, + "water_total": 1363.0, + "average_temperature": 28.2333, + "experience_temperature": 26.8933, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T21:40:06.940040+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.8, + "humidity": 81.9, + "water_total": 1405.0, + "average_temperature": 28.1333, + "experience_temperature": 26.399, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T21:50:07.728800+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.8, + "humidity": 82.0, + "water_total": 1444.0, + "average_temperature": 28.2333, + "experience_temperature": 26.519, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T22:00:07.554411+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.8, + "humidity": 82.3, + "water_total": 1492.0, + "average_temperature": 28.3, + "experience_temperature": 26.6457, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T22:10:06.708140+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.7, + "humidity": 82.2, + "water_total": 1536.0, + "average_temperature": 28.1, + "experience_temperature": 26.94, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T22:20:06.894000+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.6, + "humidity": 80.9, + "water_total": 1576.0, + "average_temperature": 28.0333, + "experience_temperature": 27.1276, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T22:30:07.337684+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.7, + "humidity": 81.5, + "water_total": 1634.0, + "average_temperature": 28.2667, + "experience_temperature": 26.9667, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T22:40:05.659135+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.4, + "humidity": 80.9, + "water_total": 1692.0, + "average_temperature": 27.9667, + "experience_temperature": 28.0895, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T22:50:07.211471+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.6, + "humidity": 81.4, + "water_total": 1739.0, + "average_temperature": 28.0, + "experience_temperature": 27.1943, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T23:00:05.890490+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.1, + "humidity": 80.2, + "water_total": 1758.0, + "average_temperature": 27.8667, + "experience_temperature": 29.3924, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T23:10:05.804453+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.3, + "humidity": 82.0, + "water_total": 1775.0, + "average_temperature": 28.0333, + "experience_temperature": 28.8905, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T23:20:05.982799+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.5, + "humidity": 81.5, + "water_total": 1786.0, + "average_temperature": 28.0333, + "experience_temperature": 27.7619, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T23:30:06.328526+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.2, + "humidity": 82.8, + "water_total": 1803.0, + "average_temperature": 27.9667, + "experience_temperature": 29.4981, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T23:40:05.854118+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.4, + "humidity": 80.4, + "water_total": 1817.0, + "average_temperature": 27.8667, + "experience_temperature": 27.8895, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-08T23:50:05.567573+07:00", + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.4, + "humidity": 82.6, + "water_total": 1831.0, + "average_temperature": 28.0333, + "experience_temperature": 28.4962, + "chill_factor": 5.1429 + }, + { + "timestamp": "2026-06-09T00:00:07.231253+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 83.4, + "water_total": 1847.0, + "average_temperature": 28.0667, + "experience_temperature": 27.7895, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T00:10:07.328154+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.3, + "humidity": 81.4, + "water_total": 1865.0, + "average_temperature": 27.8333, + "experience_temperature": 28.6348, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T00:20:06.060375+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 83.2, + "water_total": 1959.0, + "average_temperature": 28.0, + "experience_temperature": 27.6829, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T00:30:06.240589+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.4, + "humidity": 81.8, + "water_total": 2015.0, + "average_temperature": 27.8667, + "experience_temperature": 28.2552, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T00:40:05.700562+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.1, + "humidity": 81.5, + "water_total": 2077.0, + "average_temperature": 27.8333, + "experience_temperature": 29.6405, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T00:50:06.053146+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 83.0, + "water_total": 2133.0, + "average_temperature": 27.9667, + "experience_temperature": 27.6095, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T01:00:05.926452+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.8, + "humidity": 82.0, + "water_total": 2197.0, + "average_temperature": 27.9667, + "experience_temperature": 26.4238, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T01:10:06.022319+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 82.5, + "water_total": 2256.0, + "average_temperature": 27.9, + "experience_temperature": 29.4143, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T01:20:06.111586+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 79.7, + "water_total": 2307.0, + "average_temperature": 27.5667, + "experience_temperature": 28.521, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T01:30:05.947225+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 82.3, + "water_total": 2339.0, + "average_temperature": 27.9333, + "experience_temperature": 29.4076, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T01:40:05.916125+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 81.3, + "water_total": 2385.0, + "average_temperature": 27.8333, + "experience_temperature": 27.1362, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T01:50:05.952970+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 81.5, + "water_total": 2435.0, + "average_temperature": 27.8333, + "experience_temperature": 29.1476, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T02:00:06.762754+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 81.8, + "water_total": 2492.0, + "average_temperature": 27.8333, + "experience_temperature": 29.2076, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T02:10:07.200652+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 80.9, + "water_total": 2521.0, + "average_temperature": 27.8667, + "experience_temperature": 29.061, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T02:20:06.322630+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 79.8, + "water_total": 2569.0, + "average_temperature": 27.7667, + "experience_temperature": 26.2767, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T02:30:05.690268+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.0, + "humidity": 82.2, + "water_total": 2602.0, + "average_temperature": 27.9333, + "experience_temperature": 30.3733, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T02:40:06.504857+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 81.1, + "water_total": 2629.0, + "average_temperature": 27.9333, + "experience_temperature": 27.1962, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T02:50:05.403974+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.3, + "humidity": 82.0, + "water_total": 2705.0, + "average_temperature": 27.9, + "experience_temperature": 28.8214, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T03:00:05.522252+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.0, + "humidity": 82.8, + "water_total": 2742.0, + "average_temperature": 27.7667, + "experience_temperature": 30.3267, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T03:10:05.716818+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 82.5, + "water_total": 2776.0, + "average_temperature": 27.8, + "experience_temperature": 29.3143, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T03:20:06.981027+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 82.8, + "water_total": 2822.0, + "average_temperature": 27.9667, + "experience_temperature": 27.5695, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T03:30:06.564629+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 82.4, + "water_total": 2855.0, + "average_temperature": 27.6667, + "experience_temperature": 29.161, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T03:40:06.607981+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 81.1, + "water_total": 2896.0, + "average_temperature": 27.6333, + "experience_temperature": 28.8676, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T03:50:05.773576+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 82.0, + "water_total": 2930.0, + "average_temperature": 27.8333, + "experience_temperature": 29.2476, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T04:00:05.931306+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.8, + "humidity": 82.2, + "water_total": 2965.0, + "average_temperature": 27.9, + "experience_temperature": 26.3971, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T04:10:06.015932+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 81.7, + "water_total": 3008.0, + "average_temperature": 27.4333, + "experience_temperature": 28.7876, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T04:20:05.847724+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.1, + "humidity": 81.2, + "water_total": 3022.0, + "average_temperature": 27.5667, + "experience_temperature": 29.3138, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T04:30:05.764818+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 80.3, + "water_total": 3039.0, + "average_temperature": 27.5333, + "experience_temperature": 28.6076, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T04:40:05.600244+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 81.6, + "water_total": 3052.0, + "average_temperature": 27.3, + "experience_temperature": 28.6343, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T04:50:06.094300+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 81.9, + "water_total": 3065.0, + "average_temperature": 27.3667, + "experience_temperature": 28.761, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T05:00:07.684576+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.1, + "humidity": 82.6, + "water_total": 3082.0, + "average_temperature": 27.8333, + "experience_temperature": 29.8605, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T05:10:07.904663+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 82.4, + "water_total": 3098.0, + "average_temperature": 28.3333, + "experience_temperature": 27.3633, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T05:20:05.612294+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.1, + "humidity": 83.0, + "water_total": 3173.0, + "average_temperature": 27.7333, + "experience_temperature": 29.8405, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T05:30:05.904439+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 81.2, + "water_total": 3243.0, + "average_temperature": 27.7667, + "experience_temperature": 29.021, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T05:40:06.759757+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 81.0, + "water_total": 3286.0, + "average_temperature": 27.5667, + "experience_temperature": 28.781, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T05:50:06.503798+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.5, + "humidity": 83.2, + "water_total": 3338.0, + "average_temperature": 27.9667, + "experience_temperature": 28.1424, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T06:00:05.906287+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 80.9, + "water_total": 3395.0, + "average_temperature": 27.8333, + "experience_temperature": 29.0276, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T06:10:05.860964+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 81.4, + "water_total": 3440.0, + "average_temperature": 27.4667, + "experience_temperature": 28.761, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T06:20:06.583058+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.1, + "humidity": 82.4, + "water_total": 3488.0, + "average_temperature": 27.6, + "experience_temperature": 29.5871, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T06:30:06.278735+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.1, + "humidity": 82.2, + "water_total": 3535.0, + "average_temperature": 27.8, + "experience_temperature": 29.7471, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T06:40:06.225605+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.1, + "humidity": 80.7, + "water_total": 3597.0, + "average_temperature": 27.7, + "experience_temperature": 29.3471, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T06:50:05.877343+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.1, + "humidity": 80.7, + "water_total": 3597.0, + "average_temperature": 27.7, + "experience_temperature": 29.3471, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T07:00:05.632408+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.3, + "humidity": 81.4, + "water_total": 3662.0, + "average_temperature": 27.7333, + "experience_temperature": 28.5348, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T07:10:07.076073+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.2, + "humidity": 81.7, + "water_total": 3710.0, + "average_temperature": 27.6333, + "experience_temperature": 28.9876, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T07:20:06.289359+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.8, + "humidity": 81.7, + "water_total": 3763.0, + "average_temperature": 27.9, + "experience_temperature": 26.2971, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T07:30:05.566206+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.3, + "humidity": 82.3, + "water_total": 3821.0, + "average_temperature": 27.7667, + "experience_temperature": 28.7481, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T07:40:07.737540+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 80.7, + "water_total": 3879.0, + "average_temperature": 27.8333, + "experience_temperature": 27.0162, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T07:50:06.181167+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.3, + "humidity": 82.5, + "water_total": 3925.0, + "average_temperature": 27.8333, + "experience_temperature": 28.8548, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T08:00:11.128444+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 83.4, + "water_total": 3966.0, + "average_temperature": 28.0333, + "experience_temperature": 27.7562, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T08:10:05.784448+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 81.1, + "water_total": 4013.0, + "average_temperature": 28.0333, + "experience_temperature": 27.2962, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T08:20:05.742421+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 81.1, + "water_total": 4013.0, + "average_temperature": 28.0333, + "experience_temperature": 27.2962, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T08:30:05.989719+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 81.7, + "water_total": 4069.0, + "average_temperature": 28.1667, + "experience_temperature": 27.0567, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T08:40:06.508410+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.8, + "humidity": 80.3, + "water_total": 4191.0, + "average_temperature": 29.4667, + "experience_temperature": 27.5838, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T08:50:05.300174+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.8, + "humidity": 81.2, + "water_total": 4251.0, + "average_temperature": 29.4333, + "experience_temperature": 27.7305, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T09:00:06.029607+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 79.5, + "water_total": 4323.0, + "average_temperature": 29.7, + "experience_temperature": 28.15, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T09:10:05.552678+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 78.9, + "water_total": 4385.0, + "average_temperature": 30.2, + "experience_temperature": 28.53, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T09:20:05.905753+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.3, + "humidity": 76.8, + "water_total": 4433.0, + "average_temperature": 29.9, + "experience_temperature": 24.8529, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T09:30:06.066013+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.2, + "humidity": 76.1, + "water_total": 4489.0, + "average_temperature": 30.4333, + "experience_temperature": 25.739, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T09:40:05.898315+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.2, + "humidity": 73.0, + "water_total": 4547.0, + "average_temperature": 30.8333, + "experience_temperature": 25.519, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T09:50:05.866947+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.3, + "humidity": 72.2, + "water_total": 4593.0, + "average_temperature": 31.1667, + "experience_temperature": 25.1995, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T10:00:07.783385+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.2, + "humidity": 70.3, + "water_total": 4644.0, + "average_temperature": 31.2, + "experience_temperature": 25.3457, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T10:10:05.733806+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.5, + "humidity": 71.3, + "water_total": 4692.0, + "average_temperature": 31.5333, + "experience_temperature": 24.4005, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T10:20:07.503915+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.9, + "humidity": 69.6, + "water_total": 4741.0, + "average_temperature": 31.8, + "experience_temperature": 22.3557, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T10:30:06.580380+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.7, + "humidity": 69.5, + "water_total": 4789.0, + "average_temperature": 32.0, + "experience_temperature": 23.5214, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T10:40:07.245467+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.9, + "humidity": 68.1, + "water_total": 4839.0, + "average_temperature": 31.9333, + "experience_temperature": 22.189, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T10:50:06.611896+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.9, + "humidity": 66.8, + "water_total": 4886.0, + "average_temperature": 32.1333, + "experience_temperature": 22.129, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T11:00:06.131457+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.8, + "humidity": 67.4, + "water_total": 4947.0, + "average_temperature": 32.3, + "experience_temperature": 22.9086, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T11:10:06.825423+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.2, + "humidity": 66.6, + "water_total": 5004.0, + "average_temperature": 32.4333, + "experience_temperature": 20.9105, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T11:20:06.144956+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.7, + "humidity": 66.7, + "water_total": 5056.0, + "average_temperature": 32.2333, + "experience_temperature": 23.1948, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T11:30:05.990634+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.7, + "humidity": 66.0, + "water_total": 5104.0, + "average_temperature": 32.0667, + "experience_temperature": 22.8881, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T11:40:06.356120+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.1, + "humidity": 65.9, + "water_total": 5154.0, + "average_temperature": 32.6333, + "experience_temperature": 21.4633, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T11:50:06.097938+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.1, + "humidity": 63.8, + "water_total": 5201.0, + "average_temperature": 32.6667, + "experience_temperature": 21.0767, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T12:00:05.802045+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.0, + "humidity": 65.4, + "water_total": 5251.0, + "average_temperature": 32.7667, + "experience_temperature": 21.9895, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T12:10:05.995905+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.3, + "humidity": 65.2, + "water_total": 5309.0, + "average_temperature": 32.9667, + "experience_temperature": 20.671, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T12:20:07.266075+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.1, + "humidity": 65.1, + "water_total": 5354.0, + "average_temperature": 33.1667, + "experience_temperature": 21.8367, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T12:30:06.118471+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.0, + "humidity": 65.4, + "water_total": 5415.0, + "average_temperature": 33.2, + "experience_temperature": 22.4229, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T12:40:05.900787+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.0, + "humidity": 64.9, + "water_total": 5468.0, + "average_temperature": 33.0, + "experience_temperature": 22.1229, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T12:50:06.137588+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.8, + "humidity": 63.7, + "water_total": 5519.0, + "average_temperature": 32.9667, + "experience_temperature": 22.8352, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T13:00:06.239681+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.9, + "humidity": 64.3, + "water_total": 5575.0, + "average_temperature": 33.1667, + "experience_temperature": 22.6624, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T13:10:06.925992+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.3, + "humidity": 65.0, + "water_total": 5627.0, + "average_temperature": 33.2667, + "experience_temperature": 20.931, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T13:20:05.599752+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.4, + "humidity": 63.9, + "water_total": 5675.0, + "average_temperature": 32.9, + "experience_temperature": 19.8514, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T13:30:05.784502+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.2, + "humidity": 65.6, + "water_total": 5725.0, + "average_temperature": 33.0667, + "experience_temperature": 21.3438, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T13:40:07.010128+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.0, + "humidity": 64.9, + "water_total": 5773.0, + "average_temperature": 32.9333, + "experience_temperature": 22.0562, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T13:50:09.697265+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.9, + "humidity": 65.0, + "water_total": 5829.0, + "average_temperature": 33.1667, + "experience_temperature": 22.8024, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T14:10:08.124285+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.2, + "humidity": 64.2, + "water_total": 5923.0, + "average_temperature": 33.2333, + "experience_temperature": 21.2305, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T14:20:06.076793+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.4, + "humidity": 64.9, + "water_total": 5970.0, + "average_temperature": 33.1667, + "experience_temperature": 20.3181, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T14:30:07.958416+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.9, + "humidity": 65.0, + "water_total": 6001.0, + "average_temperature": 33.1333, + "experience_temperature": 22.769, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T14:40:05.793307+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.9, + "humidity": 65.0, + "water_total": 6001.0, + "average_temperature": 33.1333, + "experience_temperature": 22.769, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T14:50:07.468726+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.9, + "humidity": 65.3, + "water_total": 6099.0, + "average_temperature": 33.1667, + "experience_temperature": 22.8624, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T15:10:07.537589+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.2, + "humidity": 63.7, + "water_total": 6224.0, + "average_temperature": 33.0333, + "experience_temperature": 20.9305, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T15:20:08.412365+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.3, + "humidity": 64.7, + "water_total": 6277.0, + "average_temperature": 32.8667, + "experience_temperature": 20.471, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T15:30:06.648183+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.1, + "humidity": 66.2, + "water_total": 6322.0, + "average_temperature": 32.8667, + "experience_temperature": 21.7567, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T15:40:07.149152+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.4, + "humidity": 65.2, + "water_total": 6379.0, + "average_temperature": 32.7, + "experience_temperature": 19.9114, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T15:50:06.345157+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.2, + "humidity": 66.9, + "water_total": 6426.0, + "average_temperature": 32.6333, + "experience_temperature": 21.1705, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T16:10:07.335893+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 2.2, + "humidity": 66.2, + "water_total": 6548.0, + "average_temperature": 32.3, + "experience_temperature": 20.6971, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T16:20:06.286602+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.7, + "humidity": 67.9, + "water_total": 6593.0, + "average_temperature": 32.1333, + "experience_temperature": 23.3348, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T16:30:06.306464+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.8, + "humidity": 70.2, + "water_total": 6653.0, + "average_temperature": 32.0, + "experience_temperature": 23.1686, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T16:40:05.906340+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.8, + "humidity": 72.5, + "water_total": 6709.0, + "average_temperature": 31.6, + "experience_temperature": 23.2286, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T16:50:05.839744+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.9, + "humidity": 72.7, + "water_total": 6756.0, + "average_temperature": 31.2667, + "experience_temperature": 22.4424, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T17:10:06.559266+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.2, + "humidity": 75.0, + "water_total": 52.0, + "average_temperature": 31.0667, + "experience_temperature": 26.1524, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T17:20:06.259571+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.3, + "humidity": 75.7, + "water_total": 107.0, + "average_temperature": 30.5333, + "experience_temperature": 25.2662, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T17:30:07.256322+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.2, + "humidity": 77.2, + "water_total": 146.0, + "average_temperature": 30.2333, + "experience_temperature": 25.759, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T17:40:06.013392+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.2, + "humidity": 77.6, + "water_total": 178.0, + "average_temperature": 30.0, + "experience_temperature": 25.6057, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T17:50:06.443747+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.3, + "humidity": 77.9, + "water_total": 241.0, + "average_temperature": 29.9, + "experience_temperature": 25.0729, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T18:00:06.645739+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.3, + "humidity": 78.0, + "water_total": 285.0, + "average_temperature": 29.7, + "experience_temperature": 24.8929, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T18:10:06.680902+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.3, + "humidity": 79.0, + "water_total": 320.0, + "average_temperature": 29.4667, + "experience_temperature": 24.8595, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T18:20:08.675948+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.2, + "humidity": 80.0, + "water_total": 368.0, + "average_temperature": 29.3333, + "experience_temperature": 25.419, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T18:30:07.668483+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.3, + "humidity": 79.1, + "water_total": 408.0, + "average_temperature": 29.2667, + "experience_temperature": 24.6795, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T18:40:06.323615+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 79.2, + "water_total": 460.0, + "average_temperature": 29.2, + "experience_temperature": 27.59, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T18:50:06.925245+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.4, + "humidity": 78.8, + "water_total": 511.0, + "average_temperature": 29.2667, + "experience_temperature": 24.1267, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T19:00:07.431689+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.9, + "humidity": 79.8, + "water_total": 558.0, + "average_temperature": 29.3, + "experience_temperature": 26.8243, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T19:10:07.238595+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.5, + "humidity": 79.5, + "water_total": 611.0, + "average_temperature": 29.2333, + "experience_temperature": 28.669, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T19:20:06.989685+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 78.0, + "water_total": 681.0, + "average_temperature": 29.1, + "experience_temperature": 27.25, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T19:30:07.086235+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 78.2, + "water_total": 731.0, + "average_temperature": 29.1333, + "experience_temperature": 27.8162, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T19:40:07.113616+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 77.7, + "water_total": 788.0, + "average_temperature": 29.0, + "experience_temperature": 27.5829, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T19:50:06.975248+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 77.7, + "water_total": 788.0, + "average_temperature": 29.0, + "experience_temperature": 27.5829, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T20:00:06.025500+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 81.5, + "water_total": 897.0, + "average_temperature": 28.6333, + "experience_temperature": 27.9762, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T20:10:05.760683+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 80.4, + "water_total": 938.0, + "average_temperature": 28.5667, + "experience_temperature": 27.6895, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T20:20:05.939091+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.8, + "humidity": 79.5, + "water_total": 990.0, + "average_temperature": 28.6333, + "experience_temperature": 26.5905, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T20:30:05.473950+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 82.6, + "water_total": 1046.0, + "average_temperature": 28.7333, + "experience_temperature": 27.8033, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T20:40:06.353309+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.3, + "humidity": 82.1, + "water_total": 1103.0, + "average_temperature": 28.8333, + "experience_temperature": 24.8462, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T20:50:06.162031+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 80.8, + "water_total": 1152.0, + "average_temperature": 28.6667, + "experience_temperature": 27.8695, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T21:00:06.587021+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 1.0, + "humidity": 81.6, + "water_total": 1210.0, + "average_temperature": 28.6667, + "experience_temperature": 26.0581, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T21:10:08.690408+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.8, + "humidity": 81.4, + "water_total": 1255.0, + "average_temperature": 28.6333, + "experience_temperature": 26.9705, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T21:20:06.576091+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 81.1, + "water_total": 1302.0, + "average_temperature": 28.6333, + "experience_temperature": 27.4033, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T21:30:08.329262+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 82.7, + "water_total": 1350.0, + "average_temperature": 28.6, + "experience_temperature": 27.69, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T21:40:06.946142+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 81.8, + "water_total": 1408.0, + "average_temperature": 28.6, + "experience_temperature": 28.0029, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T21:50:07.120128+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 82.6, + "water_total": 1454.0, + "average_temperature": 28.7, + "experience_temperature": 27.77, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T22:00:06.531509+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 81.2, + "water_total": 1518.0, + "average_temperature": 28.6667, + "experience_temperature": 27.4567, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T22:10:07.753988+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 82.1, + "water_total": 1552.0, + "average_temperature": 28.2667, + "experience_temperature": 27.2367, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T22:20:06.353221+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 84.7, + "water_total": 1583.0, + "average_temperature": 27.8, + "experience_temperature": 27.29, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T22:30:06.720034+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 84.2, + "water_total": 1647.0, + "average_temperature": 28.1333, + "experience_temperature": 27.5233, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T22:40:09.441365+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.8, + "humidity": 82.6, + "water_total": 1707.0, + "average_temperature": 28.1, + "experience_temperature": 26.6771, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T22:50:06.449436+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.8, + "humidity": 83.4, + "water_total": 1742.0, + "average_temperature": 28.3333, + "experience_temperature": 27.0705, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T23:00:06.714954+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 81.4, + "water_total": 1784.0, + "average_temperature": 28.4667, + "experience_temperature": 27.2967, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T23:10:07.098364+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 82.8, + "water_total": 1819.0, + "average_temperature": 28.1333, + "experience_temperature": 27.7362, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T23:20:06.590522+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 83.1, + "water_total": 1859.0, + "average_temperature": 27.8, + "experience_temperature": 26.97, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T23:30:06.507834+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 84.4, + "water_total": 1871.0, + "average_temperature": 27.7333, + "experience_temperature": 27.6562, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T23:40:06.859619+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.6, + "humidity": 85.3, + "water_total": 1885.0, + "average_temperature": 27.8333, + "experience_temperature": 27.9362, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-09T23:50:06.805276+07:00", + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 84.1, + "water_total": 1898.0, + "average_temperature": 27.8, + "experience_temperature": 27.17, + "chill_factor": 4.9286 + }, + { + "timestamp": "2026-06-10T00:00:06.598756+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.8, + "humidity": 84.1, + "water_total": 1911.0, + "average_temperature": 27.8, + "experience_temperature": 26.8486, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T00:10:06.222449+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.0, + "humidity": 86.1, + "water_total": 1933.0, + "average_temperature": 28.8333, + "experience_temperature": 27.339, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T00:20:07.356606+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.8, + "humidity": 84.2, + "water_total": 2034.0, + "average_temperature": 28.4, + "experience_temperature": 27.4686, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T00:30:05.989703+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 83.4, + "water_total": 2104.0, + "average_temperature": 28.0, + "experience_temperature": 27.38, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T00:40:06.467215+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.9, + "humidity": 84.3, + "water_total": 2149.0, + "average_temperature": 27.7333, + "experience_temperature": 26.3505, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T00:50:07.421675+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 85.0, + "water_total": 2206.0, + "average_temperature": 27.8333, + "experience_temperature": 27.5333, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T01:00:06.191147+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 85.3, + "water_total": 2262.0, + "average_temperature": 27.8333, + "experience_temperature": 28.0648, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T01:10:07.820388+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.8, + "humidity": 84.8, + "water_total": 2318.0, + "average_temperature": 27.9667, + "experience_temperature": 27.1552, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T01:20:06.147796+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.5, + "humidity": 84.8, + "water_total": 2372.0, + "average_temperature": 27.7667, + "experience_temperature": 28.3695, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T01:30:07.617389+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 84.5, + "water_total": 2422.0, + "average_temperature": 27.8, + "experience_temperature": 27.4, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T01:40:06.028465+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 83.4, + "water_total": 2470.0, + "average_temperature": 27.9, + "experience_temperature": 27.7514, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T01:50:06.088297+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 84.9, + "water_total": 2508.0, + "average_temperature": 27.4667, + "experience_temperature": 27.1467, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T02:00:06.879739+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 84.0, + "water_total": 2540.0, + "average_temperature": 27.5333, + "experience_temperature": 27.5048, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T02:10:06.172142+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 82.6, + "water_total": 2612.0, + "average_temperature": 27.5, + "experience_temperature": 26.72, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T02:20:07.305052+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.8, + "humidity": 83.5, + "water_total": 2655.0, + "average_temperature": 27.2, + "experience_temperature": 26.1286, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T02:30:06.189028+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 83.5, + "water_total": 2687.0, + "average_temperature": 26.7667, + "experience_temperature": 26.1667, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T02:40:06.892291+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 83.4, + "water_total": 2712.0, + "average_temperature": 26.9667, + "experience_temperature": 26.3467, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T02:50:34.334294+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 83.8, + "water_total": 2738.0, + "average_temperature": 27.1333, + "experience_temperature": 27.0648, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T03:00:06.729783+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.8, + "humidity": 82.8, + "water_total": 2775.0, + "average_temperature": 27.0, + "experience_temperature": 25.7886, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T03:10:06.860882+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 84.6, + "water_total": 2800.0, + "average_temperature": 27.1333, + "experience_temperature": 27.2248, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T03:20:06.298383+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 85.1, + "water_total": 2838.0, + "average_temperature": 26.7, + "experience_temperature": 26.42, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T03:30:06.726199+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.9, + "humidity": 83.9, + "water_total": 2869.0, + "average_temperature": 26.9333, + "experience_temperature": 25.4705, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T03:40:06.407626+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.8, + "humidity": 84.4, + "water_total": 2925.0, + "average_temperature": 26.9667, + "experience_temperature": 26.0752, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T03:50:06.438268+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 84.6, + "water_total": 2951.0, + "average_temperature": 26.7, + "experience_temperature": 26.7914, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T04:00:06.429143+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 84.7, + "water_total": 2976.0, + "average_temperature": 26.6667, + "experience_temperature": 26.3067, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T04:10:06.637399+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 84.7, + "water_total": 2976.0, + "average_temperature": 26.6667, + "experience_temperature": 26.3067, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T04:20:05.985697+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 85.3, + "water_total": 3013.0, + "average_temperature": 26.3667, + "experience_temperature": 26.5981, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T04:30:06.724156+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 83.8, + "water_total": 3026.0, + "average_temperature": 26.3, + "experience_temperature": 25.76, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T04:40:06.981152+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 85.8, + "water_total": 3040.0, + "average_temperature": 26.3667, + "experience_temperature": 26.6981, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T04:50:06.948376+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.8, + "humidity": 85.5, + "water_total": 3053.0, + "average_temperature": 26.3667, + "experience_temperature": 25.6952, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T05:00:06.717480+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 84.9, + "water_total": 3071.0, + "average_temperature": 26.3667, + "experience_temperature": 26.0467, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T05:10:06.847644+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 85.0, + "water_total": 3085.0, + "average_temperature": 26.6333, + "experience_temperature": 26.8048, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T05:20:06.688647+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 84.4, + "water_total": 3166.0, + "average_temperature": 26.9667, + "experience_temperature": 27.0181, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T05:30:06.319228+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.8, + "humidity": 84.5, + "water_total": 3223.0, + "average_temperature": 26.3667, + "experience_temperature": 25.4952, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T05:40:07.627186+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.8, + "humidity": 85.9, + "water_total": 3265.0, + "average_temperature": 26.8667, + "experience_temperature": 26.2752, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T05:50:06.402096+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.8, + "humidity": 84.7, + "water_total": 3337.0, + "average_temperature": 26.4667, + "experience_temperature": 25.6352, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T06:00:06.582616+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 85.3, + "water_total": 3378.0, + "average_temperature": 26.2, + "experience_temperature": 25.96, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T06:10:15.339789+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 79.3, + "water_total": 3378.0, + "average_temperature": 29.7333, + "experience_temperature": 28.2933, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T06:20:06.570036+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 84.2, + "water_total": 3483.0, + "average_temperature": 26.5333, + "experience_temperature": 26.0733, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T06:30:07.378984+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 84.7, + "water_total": 3550.0, + "average_temperature": 26.7, + "experience_temperature": 26.8114, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T06:40:06.789851+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.5, + "humidity": 85.1, + "water_total": 3609.0, + "average_temperature": 26.7, + "experience_temperature": 27.3629, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T06:50:07.144030+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 84.8, + "water_total": 3650.0, + "average_temperature": 26.3333, + "experience_temperature": 25.9933, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T07:00:07.762028+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.5, + "humidity": 86.8, + "water_total": 3687.0, + "average_temperature": 26.6, + "experience_temperature": 27.6029, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T07:10:07.063926+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.5, + "humidity": 84.1, + "water_total": 3732.0, + "average_temperature": 27.0, + "experience_temperature": 27.4629, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T07:20:06.758780+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 85.2, + "water_total": 3798.0, + "average_temperature": 27.3333, + "experience_temperature": 27.5448, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T07:30:05.878412+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 83.5, + "water_total": 3859.0, + "average_temperature": 27.7, + "experience_temperature": 27.5714, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T07:40:05.775729+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 83.5, + "water_total": 3859.0, + "average_temperature": 27.7, + "experience_temperature": 27.5714, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T07:50:05.353525+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 83.4, + "water_total": 3991.0, + "average_temperature": 28.2667, + "experience_temperature": 28.1181, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T08:00:05.546081+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 82.4, + "water_total": 4053.0, + "average_temperature": 28.5333, + "experience_temperature": 28.1848, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T08:10:05.867056+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 82.4, + "water_total": 4053.0, + "average_temperature": 28.5333, + "experience_temperature": 28.1848, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T08:20:06.165186+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.2, + "humidity": 80.5, + "water_total": 4100.0, + "average_temperature": 28.6667, + "experience_temperature": 25.1095, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T08:30:06.230724+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.4, + "humidity": 78.7, + "water_total": 4154.0, + "average_temperature": 29.0667, + "experience_temperature": 24.2067, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T08:40:06.018979+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.3, + "humidity": 74.8, + "water_total": 4286.0, + "average_temperature": 30.1, + "experience_temperature": 24.9314, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T08:50:06.214866+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.2, + "humidity": 73.2, + "water_total": 4338.0, + "average_temperature": 30.5, + "experience_temperature": 25.4829, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T09:00:06.304534+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.2, + "humidity": 73.2, + "water_total": 4338.0, + "average_temperature": 30.5, + "experience_temperature": 25.4829, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T09:10:08.581524+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.3, + "humidity": 70.2, + "water_total": 4459.0, + "average_temperature": 30.7333, + "experience_temperature": 24.6448, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T09:20:06.269606+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.4, + "humidity": 71.7, + "water_total": 4526.0, + "average_temperature": 31.0333, + "experience_temperature": 24.7733, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T09:30:05.867454+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.5, + "humidity": 69.6, + "water_total": 4588.0, + "average_temperature": 31.0, + "experience_temperature": 23.8486, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T09:40:06.678344+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.9, + "humidity": 69.9, + "water_total": 4643.0, + "average_temperature": 31.1667, + "experience_temperature": 22.1895, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T09:50:06.131579+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.9, + "humidity": 69.9, + "water_total": 4643.0, + "average_temperature": 31.1667, + "experience_temperature": 22.1895, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T10:00:06.452067+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.7, + "humidity": 67.4, + "water_total": 4743.0, + "average_temperature": 31.7, + "experience_temperature": 23.1657, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T10:10:05.497024+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.5, + "humidity": 65.2, + "water_total": 4804.0, + "average_temperature": 31.9667, + "experience_temperature": 23.9352, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T10:20:06.656379+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.9, + "humidity": 64.0, + "water_total": 4856.0, + "average_temperature": 32.0667, + "experience_temperature": 21.9095, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T10:30:06.088502+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.9, + "humidity": 63.3, + "water_total": 4908.0, + "average_temperature": 32.4, + "experience_temperature": 22.1029, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T10:40:06.321647+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.1, + "humidity": 63.9, + "water_total": 4965.0, + "average_temperature": 32.7333, + "experience_temperature": 21.6133, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T10:50:08.093054+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.9, + "humidity": 62.4, + "water_total": 5030.0, + "average_temperature": 32.3667, + "experience_temperature": 21.8895, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T11:00:06.016300+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.0, + "humidity": 63.5, + "water_total": 5077.0, + "average_temperature": 32.5333, + "experience_temperature": 21.8048, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T11:10:06.965089+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.9, + "humidity": 61.8, + "water_total": 5125.0, + "average_temperature": 32.8, + "experience_temperature": 22.2029, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T11:20:05.687120+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.1, + "humidity": 60.2, + "water_total": 5175.0, + "average_temperature": 32.7, + "experience_temperature": 20.84, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T11:30:07.441830+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.1, + "humidity": 60.2, + "water_total": 5175.0, + "average_temperature": 32.7, + "experience_temperature": 20.84, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T11:40:05.674914+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.3, + "humidity": 58.6, + "water_total": 5282.0, + "average_temperature": 32.9667, + "experience_temperature": 19.8438, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T11:50:05.966068+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.5, + "humidity": 60.5, + "water_total": 5351.0, + "average_temperature": 33.1667, + "experience_temperature": 19.481, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T12:00:06.183201+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.0, + "humidity": 60.0, + "water_total": 5409.0, + "average_temperature": 32.9, + "experience_temperature": 21.4714, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T12:10:06.092789+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.5, + "humidity": 57.9, + "water_total": 5463.0, + "average_temperature": 33.0667, + "experience_temperature": 18.861, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T12:20:06.239789+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.4, + "humidity": 57.5, + "water_total": 5520.0, + "average_temperature": 33.1333, + "experience_temperature": 19.319, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T12:30:06.517904+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.0, + "humidity": 58.6, + "water_total": 5580.0, + "average_temperature": 33.0, + "experience_temperature": 21.2914, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T12:40:06.075663+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.5, + "humidity": 59.6, + "water_total": 5645.0, + "average_temperature": 33.2, + "experience_temperature": 19.3343, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T12:50:10.796576+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.0, + "humidity": 59.7, + "water_total": 5707.0, + "average_temperature": 33.2, + "experience_temperature": 21.7114, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T13:00:06.055513+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.1, + "humidity": 60.6, + "water_total": 5778.0, + "average_temperature": 33.1, + "experience_temperature": 21.32, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T13:10:06.673406+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.3, + "humidity": 59.4, + "water_total": 5837.0, + "average_temperature": 33.4333, + "experience_temperature": 20.4705, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T13:20:06.041179+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.3, + "humidity": 57.4, + "water_total": 5895.0, + "average_temperature": 33.3333, + "experience_temperature": 19.9705, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T13:30:06.874701+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.6, + "humidity": 59.0, + "water_total": 5956.0, + "average_temperature": 33.3, + "experience_temperature": 18.8429, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T13:40:05.908476+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.5, + "humidity": 58.9, + "water_total": 6005.0, + "average_temperature": 33.1, + "experience_temperature": 19.0943, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T13:50:07.490318+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.5, + "humidity": 59.5, + "water_total": 6071.0, + "average_temperature": 33.3333, + "experience_temperature": 19.4476, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T14:10:06.335101+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.1, + "humidity": 59.0, + "water_total": 6178.0, + "average_temperature": 33.0333, + "experience_temperature": 20.9333, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T14:20:07.624041+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.4, + "humidity": 59.5, + "water_total": 6239.0, + "average_temperature": 33.3333, + "experience_temperature": 19.919, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T14:30:06.002417+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.3, + "humidity": 57.4, + "water_total": 6297.0, + "average_temperature": 33.0333, + "experience_temperature": 19.6705, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T14:40:06.503203+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.5, + "humidity": 57.1, + "water_total": 6354.0, + "average_temperature": 33.2333, + "experience_temperature": 18.8676, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T14:50:07.364511+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.5, + "humidity": 57.0, + "water_total": 6414.0, + "average_temperature": 33.1667, + "experience_temperature": 18.781, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T15:10:05.705976+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.9, + "humidity": 58.8, + "water_total": 6519.0, + "average_temperature": 32.9, + "experience_temperature": 21.7029, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T15:20:06.810631+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.1, + "humidity": 56.0, + "water_total": 6583.0, + "average_temperature": 33.0667, + "experience_temperature": 20.3667, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T15:30:06.276025+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.1, + "humidity": 59.1, + "water_total": 6637.0, + "average_temperature": 33.0333, + "experience_temperature": 20.9533, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T15:40:06.332438+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.1, + "humidity": 61.2, + "water_total": 6704.0, + "average_temperature": 32.9333, + "experience_temperature": 21.2733, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T15:50:06.216832+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.1, + "humidity": 61.2, + "water_total": 6704.0, + "average_temperature": 32.9333, + "experience_temperature": 21.2733, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T16:10:06.848078+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.2, + "humidity": 71.8, + "water_total": 6759.0, + "average_temperature": 30.7333, + "experience_temperature": 25.4362, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T16:20:06.750256+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.9, + "humidity": 69.4, + "water_total": 6924.0, + "average_temperature": 31.5667, + "experience_temperature": 22.4895, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T16:30:08.928878+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 2.0, + "humidity": 69.9, + "water_total": 6987.0, + "average_temperature": 31.3667, + "experience_temperature": 21.9181, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T16:40:06.071075+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.8, + "humidity": 70.5, + "water_total": 7050.0, + "average_temperature": 31.2667, + "experience_temperature": 22.881, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T16:50:07.481284+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.9, + "humidity": 71.5, + "water_total": 7107.0, + "average_temperature": 31.1333, + "experience_temperature": 22.4762, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T17:10:06.224764+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.8, + "humidity": 72.8, + "water_total": 53.0, + "average_temperature": 30.6667, + "experience_temperature": 22.741, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T17:20:07.195080+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.3, + "humidity": 73.3, + "water_total": 113.0, + "average_temperature": 30.6333, + "experience_temperature": 25.1648, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T17:30:05.525073+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.2, + "humidity": 73.6, + "water_total": 177.0, + "average_temperature": 30.5, + "experience_temperature": 25.5629, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T17:40:06.141674+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.4, + "humidity": 74.2, + "water_total": 241.0, + "average_temperature": 30.2, + "experience_temperature": 24.44, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T17:50:06.178332+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.4, + "humidity": 74.8, + "water_total": 302.0, + "average_temperature": 29.9667, + "experience_temperature": 24.3267, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T18:00:06.074171+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.4, + "humidity": 74.8, + "water_total": 302.0, + "average_temperature": 29.9667, + "experience_temperature": 24.3267, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T18:10:06.050905+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.4, + "humidity": 74.3, + "water_total": 337.0, + "average_temperature": 29.4667, + "experience_temperature": 23.7267, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T18:20:06.945471+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.3, + "humidity": 75.2, + "water_total": 351.0, + "average_temperature": 29.3667, + "experience_temperature": 24.2781, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T18:30:05.838615+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.3, + "humidity": 76.2, + "water_total": 361.0, + "average_temperature": 29.1333, + "experience_temperature": 24.2448, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T18:40:06.974031+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.2, + "humidity": 76.7, + "water_total": 385.0, + "average_temperature": 29.3333, + "experience_temperature": 25.0162, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T18:50:06.441525+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.2, + "humidity": 77.6, + "water_total": 480.0, + "average_temperature": 29.2, + "experience_temperature": 25.0629, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T19:00:06.121314+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.3, + "humidity": 78.2, + "water_total": 555.0, + "average_temperature": 28.7333, + "experience_temperature": 24.2448, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T19:10:05.563956+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.3, + "humidity": 79.8, + "water_total": 615.0, + "average_temperature": 28.6333, + "experience_temperature": 24.4648, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T19:20:08.405041+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.2, + "humidity": 80.0, + "water_total": 682.0, + "average_temperature": 28.6333, + "experience_temperature": 24.9762, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T19:30:05.960237+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.4, + "humidity": 79.0, + "water_total": 747.0, + "average_temperature": 28.5667, + "experience_temperature": 23.7667, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T19:40:06.085093+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.8, + "humidity": 78.6, + "water_total": 813.0, + "average_temperature": 28.5, + "experience_temperature": 26.4486, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T19:50:06.433306+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.0, + "humidity": 80.0, + "water_total": 867.0, + "average_temperature": 28.6, + "experience_temperature": 25.8857, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T20:00:06.117892+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.2, + "humidity": 80.1, + "water_total": 940.0, + "average_temperature": 28.6, + "experience_temperature": 24.9629, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T20:10:05.875181+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 79.0, + "water_total": 1005.0, + "average_temperature": 28.4667, + "experience_temperature": 26.9667, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T20:20:05.810334+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.8, + "humidity": 81.8, + "water_total": 1067.0, + "average_temperature": 28.6, + "experience_temperature": 27.1886, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T20:30:06.571597+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.2, + "humidity": 82.1, + "water_total": 1123.0, + "average_temperature": 28.6333, + "experience_temperature": 25.3962, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T20:40:06.615391+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.2, + "humidity": 80.2, + "water_total": 1180.0, + "average_temperature": 28.5667, + "experience_temperature": 24.9495, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T20:50:06.494482+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 80.7, + "water_total": 1216.0, + "average_temperature": 28.4667, + "experience_temperature": 27.3067, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T21:00:06.921267+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.2, + "humidity": 81.8, + "water_total": 1277.0, + "average_temperature": 28.6, + "experience_temperature": 25.3029, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T21:10:06.787825+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 80.9, + "water_total": 1337.0, + "average_temperature": 28.3667, + "experience_temperature": 27.2467, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T21:20:06.008774+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.2, + "humidity": 80.6, + "water_total": 1406.0, + "average_temperature": 28.5333, + "experience_temperature": 24.9962, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T21:30:06.447769+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.8, + "humidity": 80.3, + "water_total": 1460.0, + "average_temperature": 28.4333, + "experience_temperature": 26.7219, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T21:40:06.563859+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 81.9, + "water_total": 1521.0, + "average_temperature": 28.4, + "experience_temperature": 27.9514, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T21:50:06.379956+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.4, + "humidity": 81.2, + "water_total": 1581.0, + "average_temperature": 28.5667, + "experience_temperature": 24.2067, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T22:00:07.666757+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 1.4, + "humidity": 81.2, + "water_total": 1581.0, + "average_temperature": 28.5667, + "experience_temperature": 24.2067, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T22:10:09.146949+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 80.9, + "water_total": 1680.0, + "average_temperature": 28.4, + "experience_temperature": 27.7514, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T22:20:06.534710+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 81.6, + "water_total": 1733.0, + "average_temperature": 28.4, + "experience_temperature": 27.42, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T22:30:06.376951+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 83.0, + "water_total": 1775.0, + "average_temperature": 28.2667, + "experience_temperature": 28.0381, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T22:40:07.750046+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 82.6, + "water_total": 1829.0, + "average_temperature": 28.2333, + "experience_temperature": 27.4533, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T22:50:06.665240+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 83.5, + "water_total": 1881.0, + "average_temperature": 28.2667, + "experience_temperature": 27.6667, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T23:00:06.555359+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 84.0, + "water_total": 1928.0, + "average_temperature": 28.1667, + "experience_temperature": 27.6667, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T23:10:06.353309+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 83.8, + "water_total": 1980.0, + "average_temperature": 28.1333, + "experience_temperature": 28.0648, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T23:20:05.941586+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.7, + "humidity": 83.9, + "water_total": 2023.0, + "average_temperature": 28.0333, + "experience_temperature": 27.5133, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T23:30:06.920286+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.6, + "humidity": 83.0, + "water_total": 2079.0, + "average_temperature": 28.1333, + "experience_temperature": 27.9048, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T23:40:05.879726+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.8, + "humidity": 84.9, + "water_total": 2124.0, + "average_temperature": 27.2667, + "experience_temperature": 26.4752, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-10T23:50:06.755708+07:00", + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.8, + "humidity": 84.9, + "water_total": 2159.0, + "average_temperature": 27.5, + "experience_temperature": 26.7086, + "chill_factor": 4.7143 + }, + { + "timestamp": "2026-06-11T00:00:06.573780+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.8, + "humidity": 84.7, + "water_total": 2203.0, + "average_temperature": 27.6667, + "experience_temperature": 27.0067, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T00:10:06.343354+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 84.7, + "water_total": 2259.0, + "average_temperature": 27.5667, + "experience_temperature": 27.3567, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T00:20:06.595824+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 84.9, + "water_total": 2308.0, + "average_temperature": 27.8, + "experience_temperature": 27.63, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T00:30:06.244999+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 84.5, + "water_total": 2366.0, + "average_temperature": 27.8667, + "experience_temperature": 27.6167, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T00:40:06.243954+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.9, + "humidity": 84.8, + "water_total": 2410.0, + "average_temperature": 27.7333, + "experience_temperature": 26.6433, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T00:50:06.586479+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.8, + "humidity": 85.0, + "water_total": 2445.0, + "average_temperature": 28.0, + "experience_temperature": 27.4, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T01:00:06.030827+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.6, + "humidity": 84.2, + "water_total": 2487.0, + "average_temperature": 27.8, + "experience_temperature": 27.94, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T01:10:06.676979+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 83.8, + "water_total": 2529.0, + "average_temperature": 27.6667, + "experience_temperature": 27.2767, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T01:20:07.315045+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.6, + "humidity": 83.5, + "water_total": 2565.0, + "average_temperature": 27.6667, + "experience_temperature": 27.6667, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T01:30:06.287144+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.8, + "humidity": 84.4, + "water_total": 2604.0, + "average_temperature": 27.8, + "experience_temperature": 27.08, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T01:40:06.438041+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.6, + "humidity": 84.1, + "water_total": 2631.0, + "average_temperature": 27.3667, + "experience_temperature": 27.4867, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T01:50:06.039164+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.9, + "humidity": 83.9, + "water_total": 2645.0, + "average_temperature": 27.0, + "experience_temperature": 25.73, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T02:00:06.360671+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 84.1, + "water_total": 2654.0, + "average_temperature": 26.8667, + "experience_temperature": 26.5367, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T02:10:07.056331+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 86.7, + "water_total": 2673.0, + "average_temperature": 27.2667, + "experience_temperature": 27.4567, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T02:20:06.588957+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.4, + "humidity": 84.9, + "water_total": 2727.0, + "average_temperature": 27.5667, + "experience_temperature": 28.7467, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T02:30:06.265050+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.8, + "humidity": 83.9, + "water_total": 2811.0, + "average_temperature": 27.0667, + "experience_temperature": 26.2467, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T02:40:06.821057+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.9, + "humidity": 85.2, + "water_total": 2852.0, + "average_temperature": 26.5667, + "experience_temperature": 25.5567, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T02:50:06.669724+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.8, + "humidity": 86.4, + "water_total": 2889.0, + "average_temperature": 26.8333, + "experience_temperature": 26.5133, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T03:00:06.224958+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.5, + "humidity": 86.5, + "water_total": 2930.0, + "average_temperature": 27.0667, + "experience_temperature": 28.1167, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T03:10:06.221977+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.6, + "humidity": 87.1, + "water_total": 2970.0, + "average_temperature": 26.9, + "experience_temperature": 27.62, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T03:20:05.851870+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.6, + "humidity": 85.1, + "water_total": 3004.0, + "average_temperature": 26.7, + "experience_temperature": 27.02, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T03:30:06.880397+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 83.7, + "water_total": 3042.0, + "average_temperature": 26.7333, + "experience_temperature": 26.3233, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T03:40:06.317878+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.8, + "humidity": 85.5, + "water_total": 3077.0, + "average_temperature": 26.9, + "experience_temperature": 26.4, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T03:50:06.599158+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.5, + "humidity": 85.0, + "water_total": 3146.0, + "average_temperature": 27.2, + "experience_temperature": 27.95, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T04:00:07.351782+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 85.4, + "water_total": 3215.0, + "average_temperature": 26.4333, + "experience_temperature": 26.3633, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T04:10:07.269788+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.8, + "humidity": 85.6, + "water_total": 3241.0, + "average_temperature": 25.7333, + "experience_temperature": 25.2533, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T04:20:06.273803+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.9, + "humidity": 86.0, + "water_total": 3254.0, + "average_temperature": 25.8333, + "experience_temperature": 24.9833, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T04:30:06.245084+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 86.2, + "water_total": 3272.0, + "average_temperature": 26.1, + "experience_temperature": 26.19, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T04:40:07.001975+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.6, + "humidity": 86.4, + "water_total": 3284.0, + "average_temperature": 25.9, + "experience_temperature": 26.48, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T04:50:06.438280+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.8, + "humidity": 86.5, + "water_total": 3293.0, + "average_temperature": 25.9, + "experience_temperature": 25.6, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T05:00:06.778400+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 85.7, + "water_total": 3305.0, + "average_temperature": 25.8667, + "experience_temperature": 25.8567, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T05:10:07.737043+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.6, + "humidity": 84.7, + "water_total": 3378.0, + "average_temperature": 26.9667, + "experience_temperature": 27.2067, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T05:20:06.312954+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.8, + "humidity": 83.3, + "water_total": 3447.0, + "average_temperature": 26.0, + "experience_temperature": 25.06, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T05:30:06.719792+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 85.5, + "water_total": 3473.0, + "average_temperature": 25.9667, + "experience_temperature": 25.9167, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T05:40:06.987286+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 84.7, + "water_total": 3516.0, + "average_temperature": 26.0333, + "experience_temperature": 25.8233, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T05:50:06.864577+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 82.6, + "water_total": 3573.0, + "average_temperature": 26.3333, + "experience_temperature": 25.7033, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T06:00:06.464200+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.4, + "humidity": 82.5, + "water_total": 3641.0, + "average_temperature": 26.5333, + "experience_temperature": 27.2333, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T06:10:07.725329+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.6, + "humidity": 84.1, + "water_total": 3685.0, + "average_temperature": 25.8333, + "experience_temperature": 25.9533, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T06:20:06.840757+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.5, + "humidity": 86.8, + "water_total": 3721.0, + "average_temperature": 26.3333, + "experience_temperature": 27.4433, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T06:30:09.035893+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 84.7, + "water_total": 3804.0, + "average_temperature": 26.2, + "experience_temperature": 25.99, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T06:40:06.480667+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 84.9, + "water_total": 3852.0, + "average_temperature": 25.7333, + "experience_temperature": 25.5633, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T06:50:07.681619+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 84.4, + "water_total": 3888.0, + "average_temperature": 26.0333, + "experience_temperature": 25.7633, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T07:00:06.803222+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.6, + "humidity": 85.6, + "water_total": 3940.0, + "average_temperature": 25.9667, + "experience_temperature": 26.3867, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T07:10:07.980064+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.6, + "humidity": 84.0, + "water_total": 3987.0, + "average_temperature": 26.5667, + "experience_temperature": 26.6667, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T07:20:06.507817+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.6, + "humidity": 84.4, + "water_total": 4042.0, + "average_temperature": 26.8, + "experience_temperature": 26.98, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T07:30:06.712494+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.5, + "humidity": 83.2, + "water_total": 4092.0, + "average_temperature": 27.1, + "experience_temperature": 27.49, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T07:40:06.348543+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 83.4, + "water_total": 4149.0, + "average_temperature": 27.4, + "experience_temperature": 26.93, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T07:50:06.783297+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 81.8, + "water_total": 4208.0, + "average_temperature": 27.7333, + "experience_temperature": 26.9433, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T08:00:06.897659+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 81.5, + "water_total": 4269.0, + "average_temperature": 27.7333, + "experience_temperature": 26.8833, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T08:10:06.393895+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 0.7, + "humidity": 81.5, + "water_total": 4269.0, + "average_temperature": 27.7333, + "experience_temperature": 26.8833, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T08:20:07.394594+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.3, + "humidity": 79.0, + "water_total": 4348.0, + "average_temperature": 28.3, + "experience_temperature": 24.25, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T08:30:06.311873+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.3, + "humidity": 77.1, + "water_total": 4410.0, + "average_temperature": 29.0, + "experience_temperature": 24.57, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T08:40:07.166692+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.2, + "humidity": 75.4, + "water_total": 4469.0, + "average_temperature": 29.5667, + "experience_temperature": 25.2467, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T08:50:06.585008+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.4, + "humidity": 73.4, + "water_total": 4520.0, + "average_temperature": 29.7667, + "experience_temperature": 24.1467, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T09:00:06.617306+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.4, + "humidity": 73.4, + "water_total": 4520.0, + "average_temperature": 29.7667, + "experience_temperature": 24.1467, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T09:10:07.639237+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.6, + "humidity": 71.5, + "water_total": 4638.0, + "average_temperature": 30.3, + "experience_temperature": 23.4, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T09:20:06.803232+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.6, + "humidity": 71.9, + "water_total": 4691.0, + "average_temperature": 30.3333, + "experience_temperature": 23.5133, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T09:30:08.161688+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.6, + "humidity": 71.4, + "water_total": 4742.0, + "average_temperature": 30.7667, + "experience_temperature": 23.8467, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T09:40:07.056625+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.8, + "humidity": 70.0, + "water_total": 4799.0, + "average_temperature": 30.9667, + "experience_temperature": 22.8667, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T09:50:07.130159+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.9, + "humidity": 68.1, + "water_total": 4858.0, + "average_temperature": 31.3333, + "experience_temperature": 22.4033, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T10:00:11.084248+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.9, + "humidity": 68.1, + "water_total": 4858.0, + "average_temperature": 31.3333, + "experience_temperature": 22.4033, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T10:10:07.351092+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.4, + "humidity": 66.2, + "water_total": 4984.0, + "average_temperature": 31.8667, + "experience_temperature": 20.3067, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T10:20:07.646471+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.3, + "humidity": 65.2, + "water_total": 5040.0, + "average_temperature": 31.9, + "experience_temperature": 20.59, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T10:30:07.399232+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.8, + "humidity": 64.8, + "water_total": 5095.0, + "average_temperature": 31.8333, + "experience_temperature": 22.6933, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T10:40:06.660102+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.2, + "humidity": 64.5, + "water_total": 5153.0, + "average_temperature": 31.7333, + "experience_temperature": 20.7333, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T10:50:06.571405+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.9, + "humidity": 63.7, + "water_total": 5210.0, + "average_temperature": 32.0333, + "experience_temperature": 22.2233, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T11:00:06.803979+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.3, + "humidity": 62.7, + "water_total": 5269.0, + "average_temperature": 32.8333, + "experience_temperature": 21.0233, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T11:10:10.348143+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.3, + "humidity": 59.5, + "water_total": 5323.0, + "average_temperature": 32.7, + "experience_temperature": 20.25, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T11:20:07.143772+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.2, + "humidity": 59.3, + "water_total": 5323.0, + "average_temperature": 32.8, + "experience_temperature": 20.76, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T11:30:07.175924+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.5, + "humidity": 60.9, + "water_total": 5440.0, + "average_temperature": 32.6, + "experience_temperature": 19.53, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T11:40:06.423242+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.5, + "humidity": 61.5, + "water_total": 5502.0, + "average_temperature": 32.7667, + "experience_temperature": 19.8167, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T11:50:08.817690+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.1, + "humidity": 60.5, + "water_total": 5558.0, + "average_temperature": 33.0333, + "experience_temperature": 21.6833, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T12:00:06.577233+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.6, + "humidity": 59.6, + "water_total": 5625.0, + "average_temperature": 33.0, + "experience_temperature": 19.22, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T12:10:06.059032+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.5, + "humidity": 60.5, + "water_total": 5688.0, + "average_temperature": 32.8667, + "experience_temperature": 19.7167, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T12:20:07.421487+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.4, + "humidity": 61.0, + "water_total": 5745.0, + "average_temperature": 33.1, + "experience_temperature": 20.5, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T12:30:06.563717+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.4, + "humidity": 60.5, + "water_total": 5796.0, + "average_temperature": 32.9, + "experience_temperature": 20.2, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T12:40:07.507762+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.4, + "humidity": 60.5, + "water_total": 5796.0, + "average_temperature": 32.9, + "experience_temperature": 20.2, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T12:50:06.131063+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.5, + "humidity": 59.4, + "water_total": 5918.0, + "average_temperature": 33.0667, + "experience_temperature": 19.6967, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T13:00:06.206825+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.9, + "humidity": 59.6, + "water_total": 5976.0, + "average_temperature": 33.0, + "experience_temperature": 22.37, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T13:10:06.610976+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.3, + "humidity": 58.5, + "water_total": 6025.0, + "average_temperature": 32.9, + "experience_temperature": 20.25, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T13:20:08.253003+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.3, + "humidity": 55.9, + "water_total": 6082.0, + "average_temperature": 32.7333, + "experience_temperature": 19.5633, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T13:30:05.757279+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.3, + "humidity": 56.2, + "water_total": 6135.0, + "average_temperature": 32.9667, + "experience_temperature": 19.8567, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T13:40:08.069351+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.5, + "humidity": 55.8, + "water_total": 6187.0, + "average_temperature": 32.8667, + "experience_temperature": 18.7767, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T13:50:06.758179+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.5, + "humidity": 55.8, + "water_total": 6187.0, + "average_temperature": 32.8667, + "experience_temperature": 18.7767, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T14:10:07.055274+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.2, + "humidity": 57.6, + "water_total": 6352.0, + "average_temperature": 33.3, + "experience_temperature": 20.92, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T14:20:06.614038+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.4, + "humidity": 57.6, + "water_total": 6414.0, + "average_temperature": 33.1667, + "experience_temperature": 19.8867, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T14:30:06.937716+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.7, + "humidity": 59.3, + "water_total": 6474.0, + "average_temperature": 33.3667, + "experience_temperature": 19.0767, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T14:40:12.615574+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.6, + "humidity": 57.9, + "water_total": 6543.0, + "average_temperature": 33.2667, + "experience_temperature": 19.1467, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T14:50:10.511519+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.5, + "humidity": 56.0, + "water_total": 6607.0, + "average_temperature": 33.1333, + "experience_temperature": 19.0833, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T15:10:05.919630+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.5, + "humidity": 65.9, + "water_total": 6731.0, + "average_temperature": 32.9333, + "experience_temperature": 20.8633, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T15:20:08.267092+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.6, + "humidity": 67.5, + "water_total": 6789.0, + "average_temperature": 32.6, + "experience_temperature": 20.4, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T15:30:06.246671+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.5, + "humidity": 68.1, + "water_total": 6852.0, + "average_temperature": 32.3667, + "experience_temperature": 20.7367, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T15:40:06.097870+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.6, + "humidity": 68.6, + "water_total": 6905.0, + "average_temperature": 32.3, + "experience_temperature": 20.32, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T15:50:06.917466+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.4, + "humidity": 69.5, + "water_total": 6957.0, + "average_temperature": 32.0333, + "experience_temperature": 21.1333, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T16:10:08.662247+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.6, + "humidity": 68.8, + "water_total": 7051.0, + "average_temperature": 31.8, + "experience_temperature": 19.86, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T16:20:08.192514+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.5, + "humidity": 68.5, + "water_total": 7108.0, + "average_temperature": 31.8, + "experience_temperature": 20.25, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T16:30:07.066531+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.1, + "humidity": 69.5, + "water_total": 7156.0, + "average_temperature": 31.5667, + "experience_temperature": 22.0167, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T16:40:05.863831+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.1, + "humidity": 69.2, + "water_total": 7225.0, + "average_temperature": 31.4667, + "experience_temperature": 21.8567, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T16:50:06.569976+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.2, + "humidity": 71.0, + "water_total": 7279.0, + "average_temperature": 31.2667, + "experience_temperature": 21.5667, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T17:10:05.679063+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 2.3, + "humidity": 71.3, + "water_total": 49.0, + "average_temperature": 30.7333, + "experience_temperature": 20.6433, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T17:20:06.171071+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.8, + "humidity": 72.2, + "water_total": 108.0, + "average_temperature": 30.7, + "experience_temperature": 23.04, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T17:30:06.909021+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.8, + "humidity": 73.0, + "water_total": 169.0, + "average_temperature": 30.4667, + "experience_temperature": 22.9667, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T17:40:05.889501+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.7, + "humidity": 73.4, + "water_total": 222.0, + "average_temperature": 30.1333, + "experience_temperature": 23.1633, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T17:50:05.661173+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.8, + "humidity": 74.5, + "water_total": 276.0, + "average_temperature": 29.9333, + "experience_temperature": 22.7333, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T18:00:06.175395+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.9, + "humidity": 74.8, + "water_total": 298.0, + "average_temperature": 29.7, + "experience_temperature": 22.11, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T18:10:06.289742+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.2, + "humidity": 77.1, + "water_total": 312.0, + "average_temperature": 29.5333, + "experience_temperature": 25.5533, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T18:20:07.941405+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.2, + "humidity": 78.7, + "water_total": 326.0, + "average_temperature": 29.2333, + "experience_temperature": 25.5733, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T18:30:06.024299+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.2, + "humidity": 78.5, + "water_total": 340.0, + "average_temperature": 29.2, + "experience_temperature": 25.5, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T18:40:06.063656+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.9, + "humidity": 76.9, + "water_total": 365.0, + "average_temperature": 29.6333, + "experience_temperature": 22.4633, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T18:50:06.107151+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.9, + "humidity": 78.1, + "water_total": 461.0, + "average_temperature": 29.8667, + "experience_temperature": 22.9367, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T19:00:05.873291+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.9, + "humidity": 78.1, + "water_total": 461.0, + "average_temperature": 29.8667, + "experience_temperature": 22.9367, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T19:10:06.040439+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.3, + "humidity": 78.8, + "water_total": 609.0, + "average_temperature": 29.2333, + "experience_temperature": 25.1433, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T19:20:08.597074+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.4, + "humidity": 79.2, + "water_total": 676.0, + "average_temperature": 29.0667, + "experience_temperature": 24.6067, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T19:30:06.111427+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.3, + "humidity": 79.1, + "water_total": 753.0, + "average_temperature": 29.1667, + "experience_temperature": 25.1367, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T19:40:08.597593+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.4, + "humidity": 78.8, + "water_total": 821.0, + "average_temperature": 29.2, + "experience_temperature": 24.66, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T19:50:05.960129+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.3, + "humidity": 79.1, + "water_total": 898.0, + "average_temperature": 29.3333, + "experience_temperature": 25.3033, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T20:00:06.169266+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.5, + "humidity": 77.9, + "water_total": 967.0, + "average_temperature": 29.5667, + "experience_temperature": 24.3967, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T20:10:06.434292+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.1, + "humidity": 78.4, + "water_total": 1035.0, + "average_temperature": 29.3667, + "experience_temperature": 26.0967, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T20:20:06.971795+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.3, + "humidity": 80.6, + "water_total": 1092.0, + "average_temperature": 29.1667, + "experience_temperature": 25.4367, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T20:30:09.523463+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.3, + "humidity": 79.2, + "water_total": 1149.0, + "average_temperature": 29.2667, + "experience_temperature": 25.2567, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T20:40:06.142213+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.4, + "humidity": 80.8, + "water_total": 1198.0, + "average_temperature": 29.2, + "experience_temperature": 25.06, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T20:50:07.998256+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.3, + "humidity": 81.4, + "water_total": 1253.0, + "average_temperature": 28.8333, + "experience_temperature": 25.2633, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T21:00:05.957124+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.4, + "humidity": 82.1, + "water_total": 1293.0, + "average_temperature": 28.5, + "experience_temperature": 24.62, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T21:10:05.806024+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.4, + "humidity": 81.8, + "water_total": 1335.0, + "average_temperature": 28.7, + "experience_temperature": 24.76, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T21:20:09.690463+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.2, + "humidity": 81.7, + "water_total": 1388.0, + "average_temperature": 28.8667, + "experience_temperature": 25.8067, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T21:30:08.869095+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.3, + "humidity": 81.3, + "water_total": 1445.0, + "average_temperature": 28.9, + "experience_temperature": 25.31, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T21:40:06.668981+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.4, + "humidity": 81.4, + "water_total": 1486.0, + "average_temperature": 28.7667, + "experience_temperature": 24.7467, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T21:50:05.999981+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.2, + "humidity": 81.5, + "water_total": 1550.0, + "average_temperature": 28.7333, + "experience_temperature": 25.6333, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T22:00:09.141358+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.3, + "humidity": 81.4, + "water_total": 1604.0, + "average_temperature": 28.6333, + "experience_temperature": 25.0633, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T22:10:06.243364+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.5, + "humidity": 81.3, + "water_total": 1673.0, + "average_temperature": 28.5333, + "experience_temperature": 24.0433, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T22:20:05.884738+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.4, + "humidity": 81.3, + "water_total": 1728.0, + "average_temperature": 28.4667, + "experience_temperature": 24.4267, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T22:30:06.028430+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.2, + "humidity": 82.1, + "water_total": 1774.0, + "average_temperature": 28.1667, + "experience_temperature": 25.1867, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T22:40:06.000225+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.2, + "humidity": 83.1, + "water_total": 1818.0, + "average_temperature": 28.0667, + "experience_temperature": 25.2867, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T22:50:07.312349+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.3, + "humidity": 82.6, + "water_total": 1866.0, + "average_temperature": 28.4, + "experience_temperature": 25.07, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T23:00:05.809147+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.0, + "humidity": 83.7, + "water_total": 1913.0, + "average_temperature": 28.1, + "experience_temperature": 26.34, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T23:10:06.363366+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.3, + "humidity": 83.1, + "water_total": 1955.0, + "average_temperature": 27.7667, + "experience_temperature": 24.5367, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T23:20:05.592821+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.4, + "humidity": 83.6, + "water_total": 2011.0, + "average_temperature": 27.6667, + "experience_temperature": 24.0867, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T23:30:05.641703+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.4, + "humidity": 84.0, + "water_total": 2064.0, + "average_temperature": 27.6333, + "experience_temperature": 24.1333, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T23:40:05.786257+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.4, + "humidity": 84.3, + "water_total": 2079.0, + "average_temperature": 27.6667, + "experience_temperature": 24.2267, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-11T23:50:06.381074+07:00", + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.2, + "humidity": 84.3, + "water_total": 2092.0, + "average_temperature": 27.6333, + "experience_temperature": 25.0933, + "chill_factor": 4.5 + }, + { + "timestamp": "2026-06-12T00:00:14.588678+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.2, + "humidity": 84.3, + "water_total": 2092.0, + "average_temperature": 27.6333, + "experience_temperature": 25.2648, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T00:10:05.646146+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.4, + "humidity": 85.7, + "water_total": 2121.0, + "average_temperature": 27.6333, + "experience_temperature": 24.6733, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T00:20:05.893238+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.3, + "humidity": 84.5, + "water_total": 2211.0, + "average_temperature": 27.5667, + "experience_temperature": 24.8024, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T00:30:05.932711+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.3, + "humidity": 84.4, + "water_total": 2270.0, + "average_temperature": 27.6333, + "experience_temperature": 24.849, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T00:40:05.748028+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.4, + "humidity": 84.0, + "water_total": 2327.0, + "average_temperature": 27.5333, + "experience_temperature": 24.2333, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T00:50:05.590460+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 85.9, + "water_total": 2376.0, + "average_temperature": 27.5, + "experience_temperature": 27.63, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T01:00:06.874419+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 84.4, + "water_total": 2435.0, + "average_temperature": 27.3667, + "experience_temperature": 27.1967, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T01:10:06.114462+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.6, + "humidity": 85.6, + "water_total": 2497.0, + "average_temperature": 27.4, + "experience_temperature": 27.9057, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T01:20:05.521151+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.8, + "humidity": 83.5, + "water_total": 2560.0, + "average_temperature": 27.3, + "experience_temperature": 26.5143, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T01:30:06.392035+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.5, + "humidity": 84.3, + "water_total": 2626.0, + "average_temperature": 27.6333, + "experience_temperature": 23.9576, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T01:40:06.182233+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.5, + "humidity": 84.3, + "water_total": 2626.0, + "average_temperature": 27.6333, + "experience_temperature": 23.9576, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T01:50:06.486023+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.9, + "humidity": 86.0, + "water_total": 2687.0, + "average_temperature": 26.9, + "experience_temperature": 26.1786, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T02:00:06.114238+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 84.7, + "water_total": 2744.0, + "average_temperature": 27.2333, + "experience_temperature": 27.1233, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T02:10:06.082804+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 84.7, + "water_total": 2805.0, + "average_temperature": 27.3333, + "experience_temperature": 27.2233, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T02:20:06.008504+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.8, + "humidity": 84.8, + "water_total": 2853.0, + "average_temperature": 27.4, + "experience_temperature": 26.8743, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T02:30:05.842202+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.5, + "humidity": 83.7, + "water_total": 2907.0, + "average_temperature": 27.4333, + "experience_temperature": 27.9948, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T02:40:06.052495+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 84.5, + "water_total": 2974.0, + "average_temperature": 27.4667, + "experience_temperature": 27.3167, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T02:50:06.213523+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.6, + "humidity": 85.3, + "water_total": 3024.0, + "average_temperature": 27.4, + "experience_temperature": 27.8457, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T03:00:05.696626+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.1, + "humidity": 85.9, + "water_total": 3068.0, + "average_temperature": 27.6333, + "experience_temperature": 26.0205, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T03:10:06.387577+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.8, + "humidity": 83.5, + "water_total": 3114.0, + "average_temperature": 27.4, + "experience_temperature": 26.6143, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T03:20:06.318197+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.6, + "humidity": 85.0, + "water_total": 3162.0, + "average_temperature": 27.4667, + "experience_temperature": 27.8524, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T03:30:06.009897+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 84.0, + "water_total": 3210.0, + "average_temperature": 27.4667, + "experience_temperature": 27.2167, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T03:40:06.762419+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 83.8, + "water_total": 3275.0, + "average_temperature": 27.3, + "experience_temperature": 27.01, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T03:50:05.825891+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 85.0, + "water_total": 3322.0, + "average_temperature": 27.0, + "experience_temperature": 26.95, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T04:00:06.089982+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 85.5, + "water_total": 3370.0, + "average_temperature": 26.6667, + "experience_temperature": 26.7167, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T04:10:05.703725+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.8, + "humidity": 85.9, + "water_total": 3395.0, + "average_temperature": 26.5, + "experience_temperature": 26.1943, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T04:20:07.093900+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.6, + "humidity": 86.9, + "water_total": 3408.0, + "average_temperature": 26.4333, + "experience_temperature": 27.199, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T04:30:05.998094+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.9, + "humidity": 85.7, + "water_total": 3421.0, + "average_temperature": 26.4333, + "experience_temperature": 25.6519, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T04:40:05.836254+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.9, + "humidity": 86.2, + "water_total": 3431.0, + "average_temperature": 26.4, + "experience_temperature": 25.7186, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T04:50:06.492581+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 85.5, + "water_total": 3443.0, + "average_temperature": 26.2, + "experience_temperature": 26.25, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T05:00:05.695054+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.8, + "humidity": 85.8, + "water_total": 3457.0, + "average_temperature": 26.2, + "experience_temperature": 25.8743, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T05:10:07.044951+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.8, + "humidity": 85.4, + "water_total": 3494.0, + "average_temperature": 27.1333, + "experience_temperature": 26.7276, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T05:20:06.415326+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.5, + "humidity": 83.7, + "water_total": 3573.0, + "average_temperature": 26.8667, + "experience_temperature": 27.4281, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T05:30:06.366739+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 82.6, + "water_total": 3638.0, + "average_temperature": 26.5333, + "experience_temperature": 26.0033, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T05:40:06.012874+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.9, + "humidity": 83.7, + "water_total": 3681.0, + "average_temperature": 26.5, + "experience_temperature": 25.3186, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T05:50:06.514631+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.6, + "humidity": 85.1, + "water_total": 3725.0, + "average_temperature": 26.7667, + "experience_temperature": 27.1724, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T06:00:06.532457+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 83.2, + "water_total": 3772.0, + "average_temperature": 26.5, + "experience_temperature": 26.09, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T06:10:06.110691+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.6, + "humidity": 83.3, + "water_total": 3822.0, + "average_temperature": 26.5333, + "experience_temperature": 26.579, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T06:20:06.277645+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.6, + "humidity": 83.4, + "water_total": 3888.0, + "average_temperature": 27.0, + "experience_temperature": 27.0657, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T06:30:06.807831+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 81.8, + "water_total": 3964.0, + "average_temperature": 26.5333, + "experience_temperature": 25.8433, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T06:40:06.431180+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.9, + "humidity": 83.2, + "water_total": 4005.0, + "average_temperature": 26.2667, + "experience_temperature": 24.9852, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T06:50:06.342469+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 83.1, + "water_total": 4038.0, + "average_temperature": 26.4333, + "experience_temperature": 26.0033, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T07:00:07.705729+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 82.8, + "water_total": 4078.0, + "average_temperature": 26.6333, + "experience_temperature": 26.1433, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T07:10:06.856717+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 82.8, + "water_total": 4078.0, + "average_temperature": 26.6333, + "experience_temperature": 26.1433, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T07:20:06.499761+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.6, + "humidity": 81.8, + "water_total": 4185.0, + "average_temperature": 26.7333, + "experience_temperature": 26.479, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T07:30:06.239036+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.6, + "humidity": 83.2, + "water_total": 4220.0, + "average_temperature": 27.4333, + "experience_temperature": 27.459, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T07:40:08.107045+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 79.1, + "water_total": 4283.0, + "average_temperature": 27.4667, + "experience_temperature": 26.2367, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T07:50:06.208595+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 77.7, + "water_total": 4353.0, + "average_temperature": 27.4, + "experience_temperature": 25.89, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T08:00:06.411386+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 77.7, + "water_total": 4353.0, + "average_temperature": 27.4, + "experience_temperature": 25.89, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T08:10:06.725463+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.2, + "humidity": 77.4, + "water_total": 4411.0, + "average_temperature": 27.7667, + "experience_temperature": 24.0181, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T08:20:06.239139+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.2, + "humidity": 76.2, + "water_total": 4467.0, + "average_temperature": 27.9333, + "experience_temperature": 23.9448, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T08:30:06.384343+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.1, + "humidity": 74.2, + "water_total": 4595.0, + "average_temperature": 28.6, + "experience_temperature": 24.6471, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T08:40:07.034048+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.1, + "humidity": 74.2, + "water_total": 4595.0, + "average_temperature": 28.6, + "experience_temperature": 24.6471, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T08:50:07.150513+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.1, + "humidity": 73.5, + "water_total": 4714.0, + "average_temperature": 29.4333, + "experience_temperature": 25.3405, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T09:00:07.286960+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.7, + "humidity": 72.1, + "water_total": 4763.0, + "average_temperature": 29.7, + "experience_temperature": 22.7129, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T09:10:06.685234+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.7, + "humidity": 71.4, + "water_total": 4815.0, + "average_temperature": 29.8, + "experience_temperature": 22.6729, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T09:20:06.438050+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.6, + "humidity": 71.9, + "water_total": 4863.0, + "average_temperature": 30.2667, + "experience_temperature": 23.6752, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T09:30:06.578169+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.2, + "humidity": 70.1, + "water_total": 4930.0, + "average_temperature": 30.5, + "experience_temperature": 25.2914, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T09:40:07.524217+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.6, + "humidity": 70.8, + "water_total": 4987.0, + "average_temperature": 30.5667, + "experience_temperature": 23.7552, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T09:50:07.877238+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.8, + "humidity": 69.4, + "water_total": 5027.0, + "average_temperature": 30.7, + "experience_temperature": 22.7371, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T10:00:07.350928+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.4, + "humidity": 70.8, + "water_total": 5109.0, + "average_temperature": 31.4, + "experience_temperature": 25.46, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T10:10:06.486036+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.2, + "humidity": 68.6, + "water_total": 5180.0, + "average_temperature": 31.5333, + "experience_temperature": 21.6676, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T10:20:08.045149+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.9, + "humidity": 67.7, + "water_total": 5246.0, + "average_temperature": 31.5, + "experience_temperature": 22.7614, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T10:30:06.636424+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.8, + "humidity": 68.0, + "water_total": 5303.0, + "average_temperature": 31.7667, + "experience_temperature": 23.5238, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T10:40:06.055095+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.9, + "humidity": 66.7, + "water_total": 5354.0, + "average_temperature": 31.8667, + "experience_temperature": 22.9281, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T10:50:06.707478+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.0, + "humidity": 67.9, + "water_total": 5416.0, + "average_temperature": 31.8667, + "experience_temperature": 22.7324, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T11:00:06.662231+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.9, + "humidity": 67.2, + "water_total": 5483.0, + "average_temperature": 32.1, + "experience_temperature": 23.2614, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T11:10:06.905504+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.4, + "humidity": 66.3, + "water_total": 5547.0, + "average_temperature": 32.5333, + "experience_temperature": 21.3362, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T11:20:06.328283+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.0, + "humidity": 65.9, + "water_total": 5603.0, + "average_temperature": 32.3, + "experience_temperature": 22.7657, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T11:30:06.420615+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.9, + "humidity": 67.2, + "water_total": 5647.0, + "average_temperature": 32.5, + "experience_temperature": 23.6614, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T11:40:06.699298+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.9, + "humidity": 66.0, + "water_total": 5708.0, + "average_temperature": 32.4667, + "experience_temperature": 23.3881, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T11:50:06.620007+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.0, + "humidity": 65.1, + "water_total": 5764.0, + "average_temperature": 32.7667, + "experience_temperature": 23.0724, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T12:00:06.419883+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.8, + "humidity": 63.5, + "water_total": 5817.0, + "average_temperature": 32.9667, + "experience_temperature": 19.4667, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T12:10:06.768359+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.4, + "humidity": 61.9, + "water_total": 5873.0, + "average_temperature": 32.7, + "experience_temperature": 20.6229, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T12:20:06.952794+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.3, + "humidity": 62.5, + "water_total": 5932.0, + "average_temperature": 32.5667, + "experience_temperature": 21.0452, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T12:30:08.053319+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.9, + "humidity": 62.9, + "water_total": 5975.0, + "average_temperature": 32.3667, + "experience_temperature": 22.6681, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T12:40:07.504422+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.8, + "humidity": 63.1, + "water_total": 6043.0, + "average_temperature": 33.0333, + "experience_temperature": 19.4533, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T12:50:08.215812+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.5, + "humidity": 63.4, + "water_total": 6101.0, + "average_temperature": 33.2, + "experience_temperature": 20.9871, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T13:00:06.332668+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.8, + "humidity": 62.1, + "water_total": 6161.0, + "average_temperature": 33.2, + "experience_temperature": 19.42, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T13:10:06.804274+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 3.0, + "humidity": 62.7, + "water_total": 6226.0, + "average_temperature": 33.2, + "experience_temperature": 18.6686, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T13:20:08.779359+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.4, + "humidity": 62.0, + "water_total": 6271.0, + "average_temperature": 33.0, + "experience_temperature": 20.9429, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T13:30:08.744350+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.6, + "humidity": 59.3, + "water_total": 6351.0, + "average_temperature": 32.8333, + "experience_temperature": 19.3648, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T13:40:11.890331+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.4, + "humidity": 59.9, + "water_total": 6409.0, + "average_temperature": 33.0333, + "experience_temperature": 20.5562, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T13:50:06.563058+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 3.2, + "humidity": 59.1, + "water_total": 6466.0, + "average_temperature": 33.0667, + "experience_temperature": 16.9438, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T14:10:06.809711+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 3.0, + "humidity": 60.0, + "water_total": 6589.0, + "average_temperature": 33.5333, + "experience_temperature": 18.4619, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T14:20:11.561449+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.4, + "humidity": 60.2, + "water_total": 6638.0, + "average_temperature": 32.9, + "experience_temperature": 20.4829, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T14:30:11.875899+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.6, + "humidity": 62.1, + "water_total": 6681.0, + "average_temperature": 32.6667, + "experience_temperature": 19.7581, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T14:40:07.593853+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.5, + "humidity": 62.5, + "water_total": 6751.0, + "average_temperature": 32.5, + "experience_temperature": 20.1071, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T14:50:07.575248+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.3, + "humidity": 64.3, + "water_total": 6824.0, + "average_temperature": 32.3667, + "experience_temperature": 21.2052, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T15:10:08.093662+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.0, + "humidity": 69.0, + "water_total": 6956.0, + "average_temperature": 32.1, + "experience_temperature": 23.1857, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T15:20:06.847572+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.0, + "humidity": 69.0, + "water_total": 6956.0, + "average_temperature": 32.1, + "experience_temperature": 23.1857, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T15:30:07.448624+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.8, + "humidity": 72.3, + "water_total": 7085.0, + "average_temperature": 31.7, + "experience_temperature": 24.3171, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T15:40:06.622801+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.1, + "humidity": 74.0, + "water_total": 7141.0, + "average_temperature": 31.7, + "experience_temperature": 23.35, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T15:50:06.715739+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.1, + "humidity": 74.0, + "water_total": 7141.0, + "average_temperature": 31.7, + "experience_temperature": 23.35, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T16:10:07.358257+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.7, + "humidity": 72.2, + "water_total": 7251.0, + "average_temperature": 29.7, + "experience_temperature": 22.7329, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T16:20:06.415882+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.0, + "humidity": 72.9, + "water_total": 7380.0, + "average_temperature": 31.5333, + "experience_temperature": 23.399, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T16:30:07.221011+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 2.1, + "humidity": 73.0, + "water_total": 7442.0, + "average_temperature": 31.4667, + "experience_temperature": 22.9167, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T16:40:08.585684+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.7, + "humidity": 73.1, + "water_total": 7509.0, + "average_temperature": 31.4, + "experience_temperature": 24.6129, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T16:50:06.161687+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.9, + "humidity": 72.9, + "water_total": 7578.0, + "average_temperature": 31.3667, + "experience_temperature": 23.6681, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T17:10:06.234427+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.3, + "humidity": 72.2, + "water_total": 58.0, + "average_temperature": 29.4333, + "experience_temperature": 24.209, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T17:20:05.583493+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.2, + "humidity": 74.1, + "water_total": 112.0, + "average_temperature": 29.0667, + "experience_temperature": 24.6581, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T17:30:06.115261+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.3, + "humidity": 75.2, + "water_total": 160.0, + "average_temperature": 28.8667, + "experience_temperature": 24.2424, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T17:40:08.845244+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.2, + "humidity": 77.4, + "water_total": 204.0, + "average_temperature": 28.7667, + "experience_temperature": 25.0181, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T17:50:06.441567+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.3, + "humidity": 77.7, + "water_total": 253.0, + "average_temperature": 28.3667, + "experience_temperature": 24.2424, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T18:00:06.320537+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.4, + "humidity": 79.2, + "water_total": 269.0, + "average_temperature": 28.3333, + "experience_temperature": 24.0733, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T18:10:07.413092+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.3, + "humidity": 79.3, + "water_total": 283.0, + "average_temperature": 28.3, + "experience_temperature": 24.4957, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T18:20:06.894073+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.3, + "humidity": 80.4, + "water_total": 297.0, + "average_temperature": 28.1, + "experience_temperature": 24.5157, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T18:30:06.654386+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.3, + "humidity": 80.8, + "water_total": 309.0, + "average_temperature": 27.9667, + "experience_temperature": 24.4624, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T18:40:06.174120+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.4, + "humidity": 81.6, + "water_total": 323.0, + "average_temperature": 28.2667, + "experience_temperature": 24.4867, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T18:50:06.573242+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.3, + "humidity": 82.2, + "water_total": 422.0, + "average_temperature": 28.1667, + "experience_temperature": 24.9424, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T19:00:06.564220+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.4, + "humidity": 82.2, + "water_total": 501.0, + "average_temperature": 27.9333, + "experience_temperature": 24.2733, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T19:10:06.853465+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.6, + "humidity": 82.7, + "water_total": 567.0, + "average_temperature": 27.7667, + "experience_temperature": 27.6924, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T19:20:06.349768+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 81.9, + "water_total": 637.0, + "average_temperature": 27.7667, + "experience_temperature": 27.0967, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T19:30:09.163038+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 83.6, + "water_total": 709.0, + "average_temperature": 27.8333, + "experience_temperature": 27.5033, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T19:40:06.941321+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 82.8, + "water_total": 779.0, + "average_temperature": 27.7, + "experience_temperature": 27.21, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T19:50:09.939368+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.3, + "humidity": 83.0, + "water_total": 860.0, + "average_temperature": 27.8333, + "experience_temperature": 24.769, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T20:00:06.592215+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.2, + "humidity": 83.5, + "water_total": 924.0, + "average_temperature": 27.9, + "experience_temperature": 25.3714, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T20:10:07.805892+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.6, + "humidity": 82.5, + "water_total": 983.0, + "average_temperature": 27.7667, + "experience_temperature": 27.6524, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T20:20:06.593622+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.2, + "humidity": 82.7, + "water_total": 1040.0, + "average_temperature": 28.1, + "experience_temperature": 25.4114, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T20:30:06.121897+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.2, + "humidity": 83.0, + "water_total": 1090.0, + "average_temperature": 27.9333, + "experience_temperature": 25.3048, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T20:40:06.918070+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 83.1, + "water_total": 1143.0, + "average_temperature": 27.8, + "experience_temperature": 27.37, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T20:50:06.425736+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.8, + "humidity": 83.5, + "water_total": 1194.0, + "average_temperature": 27.7333, + "experience_temperature": 26.9476, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T21:00:07.283294+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.3, + "humidity": 83.2, + "water_total": 1244.0, + "average_temperature": 27.9, + "experience_temperature": 24.8757, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T21:10:06.255709+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 84.7, + "water_total": 1291.0, + "average_temperature": 27.7667, + "experience_temperature": 27.6567, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T21:20:06.448209+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 83.0, + "water_total": 1334.0, + "average_temperature": 27.7333, + "experience_temperature": 27.2833, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T21:30:06.405147+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.2, + "humidity": 84.0, + "water_total": 1365.0, + "average_temperature": 27.7, + "experience_temperature": 25.2714, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T21:40:07.007965+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 84.5, + "water_total": 1417.0, + "average_temperature": 27.8667, + "experience_temperature": 27.7167, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T21:50:07.347339+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 85.0, + "water_total": 1468.0, + "average_temperature": 27.7667, + "experience_temperature": 27.7167, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T22:00:05.822126+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.2, + "humidity": 84.7, + "water_total": 1521.0, + "average_temperature": 28.0333, + "experience_temperature": 25.7448, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T22:10:09.179810+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.2, + "humidity": 85.1, + "water_total": 1574.0, + "average_temperature": 27.8667, + "experience_temperature": 25.6581, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T22:20:06.784860+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.1, + "humidity": 84.9, + "water_total": 1631.0, + "average_temperature": 27.8667, + "experience_temperature": 26.0538, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T22:30:07.056693+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.6, + "humidity": 84.0, + "water_total": 1698.0, + "average_temperature": 27.7, + "experience_temperature": 27.8857, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T22:40:07.796113+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 83.6, + "water_total": 1757.0, + "average_temperature": 27.7667, + "experience_temperature": 27.4367, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T22:50:06.061448+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.6, + "humidity": 83.7, + "water_total": 1822.0, + "average_temperature": 27.8, + "experience_temperature": 27.9257, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T23:00:06.145944+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.6, + "humidity": 83.5, + "water_total": 1893.0, + "average_temperature": 27.8667, + "experience_temperature": 27.9524, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T23:10:06.891033+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.6, + "humidity": 82.7, + "water_total": 1953.0, + "average_temperature": 27.7, + "experience_temperature": 27.6257, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T23:20:06.592818+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 0.7, + "humidity": 84.5, + "water_total": 1963.0, + "average_temperature": 27.8333, + "experience_temperature": 27.6833, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T23:30:07.057783+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.3, + "humidity": 84.6, + "water_total": 1972.0, + "average_temperature": 27.9, + "experience_temperature": 25.1557, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T23:40:06.839708+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.3, + "humidity": 83.0, + "water_total": 1986.0, + "average_temperature": 27.8667, + "experience_temperature": 24.8024, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-12T23:50:07.085644+07:00", + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.2, + "humidity": 82.5, + "water_total": 1995.0, + "average_temperature": 27.8333, + "experience_temperature": 25.1048, + "chill_factor": 4.3571 + }, + { + "timestamp": "2026-06-13T00:00:06.189014+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 82.3, + "water_total": 2009.0, + "average_temperature": 27.8, + "experience_temperature": 25.2029, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T00:10:06.395533+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 82.3, + "water_total": 2009.0, + "average_temperature": 27.8, + "experience_temperature": 25.2029, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T00:20:06.826523+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.3, + "humidity": 83.1, + "water_total": 2108.0, + "average_temperature": 27.7333, + "experience_temperature": 24.8748, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T00:30:06.784474+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.3, + "humidity": 83.6, + "water_total": 2177.0, + "average_temperature": 27.8, + "experience_temperature": 25.0414, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T00:40:06.152585+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.7, + "humidity": 83.6, + "water_total": 2239.0, + "average_temperature": 27.6, + "experience_temperature": 27.37, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T00:50:06.134741+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.6, + "humidity": 83.6, + "water_total": 2303.0, + "average_temperature": 27.7, + "experience_temperature": 27.8914, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T01:00:06.299785+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.7, + "humidity": 84.5, + "water_total": 2359.0, + "average_temperature": 27.7667, + "experience_temperature": 27.7167, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T01:10:08.236778+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 84.1, + "water_total": 2428.0, + "average_temperature": 27.7667, + "experience_temperature": 25.5295, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T01:20:06.358566+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 83.5, + "water_total": 2486.0, + "average_temperature": 27.7, + "experience_temperature": 25.3429, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T01:30:06.438298+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 84.1, + "water_total": 2537.0, + "average_temperature": 27.7667, + "experience_temperature": 25.5295, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T01:40:07.012142+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 84.7, + "water_total": 2572.0, + "average_temperature": 27.7333, + "experience_temperature": 25.6162, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T01:50:07.091632+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.6, + "humidity": 85.3, + "water_total": 2586.0, + "average_temperature": 27.7333, + "experience_temperature": 28.2648, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T02:00:06.805746+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.3, + "humidity": 83.9, + "water_total": 2596.0, + "average_temperature": 27.7333, + "experience_temperature": 25.0348, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T02:10:06.428463+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 83.9, + "water_total": 2610.0, + "average_temperature": 27.8333, + "experience_temperature": 25.5562, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T02:20:07.309445+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 84.1, + "water_total": 2680.0, + "average_temperature": 27.7333, + "experience_temperature": 25.4962, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T02:30:05.925886+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.7, + "humidity": 83.7, + "water_total": 2756.0, + "average_temperature": 27.6667, + "experience_temperature": 27.4567, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T02:40:06.112730+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.7, + "humidity": 83.6, + "water_total": 2813.0, + "average_temperature": 27.7, + "experience_temperature": 27.47, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T02:50:07.154039+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.8, + "humidity": 83.6, + "water_total": 2872.0, + "average_temperature": 27.6667, + "experience_temperature": 27.0152, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T03:00:08.486532+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.7, + "humidity": 83.7, + "water_total": 2930.0, + "average_temperature": 27.6333, + "experience_temperature": 27.4233, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T03:10:06.487565+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.3, + "humidity": 84.6, + "water_total": 2980.0, + "average_temperature": 27.8, + "experience_temperature": 25.2414, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T03:20:07.115698+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.7, + "humidity": 84.8, + "water_total": 3045.0, + "average_temperature": 27.7, + "experience_temperature": 27.71, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T03:30:06.669305+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.6, + "humidity": 84.1, + "water_total": 3099.0, + "average_temperature": 27.6667, + "experience_temperature": 27.9581, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T03:40:08.003046+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.6, + "humidity": 84.8, + "water_total": 3140.0, + "average_temperature": 27.6333, + "experience_temperature": 28.0648, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T03:50:06.659881+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.1, + "humidity": 85.3, + "water_total": 3186.0, + "average_temperature": 27.7333, + "experience_temperature": 26.1576, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T04:00:06.183539+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 86.0, + "water_total": 3243.0, + "average_temperature": 27.7667, + "experience_temperature": 25.9095, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T04:10:06.383902+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 85.0, + "water_total": 3313.0, + "average_temperature": 27.8333, + "experience_temperature": 25.7762, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T04:20:06.220912+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.7, + "humidity": 85.8, + "water_total": 3367.0, + "average_temperature": 27.7, + "experience_temperature": 27.91, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T04:30:06.112152+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.6, + "humidity": 86.1, + "water_total": 3416.0, + "average_temperature": 27.6667, + "experience_temperature": 28.3581, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T04:40:07.345263+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.5, + "humidity": 86.2, + "water_total": 3449.0, + "average_temperature": 27.7, + "experience_temperature": 28.8329, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T04:50:06.311328+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.7, + "humidity": 86.5, + "water_total": 3458.0, + "average_temperature": 27.7333, + "experience_temperature": 28.0833, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T05:00:06.351013+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 86.4, + "water_total": 3471.0, + "average_temperature": 27.7333, + "experience_temperature": 25.9562, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T05:10:06.246203+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.1, + "humidity": 87.0, + "water_total": 3483.0, + "average_temperature": 27.9667, + "experience_temperature": 26.731, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T05:20:07.849123+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 86.6, + "water_total": 3565.0, + "average_temperature": 27.8, + "experience_temperature": 26.0629, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T05:30:07.168712+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.6, + "humidity": 87.4, + "water_total": 3618.0, + "average_temperature": 27.6667, + "experience_temperature": 28.6181, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T05:40:06.654068+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.8, + "humidity": 88.5, + "water_total": 3667.0, + "average_temperature": 27.9333, + "experience_temperature": 28.2619, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T05:50:06.351182+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.1, + "humidity": 86.0, + "water_total": 3720.0, + "average_temperature": 27.8, + "experience_temperature": 26.3643, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T06:00:06.688111+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.8, + "humidity": 88.5, + "water_total": 3772.0, + "average_temperature": 27.8333, + "experience_temperature": 28.1619, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T06:10:07.924344+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.8, + "humidity": 85.0, + "water_total": 3814.0, + "average_temperature": 27.5667, + "experience_temperature": 27.1952, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T06:20:06.484693+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.8, + "humidity": 85.0, + "water_total": 3814.0, + "average_temperature": 27.5667, + "experience_temperature": 27.1952, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T06:30:06.665669+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.6, + "humidity": 85.4, + "water_total": 3888.0, + "average_temperature": 27.6, + "experience_temperature": 28.1514, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T06:40:06.389704+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.6, + "humidity": 85.4, + "water_total": 3888.0, + "average_temperature": 27.6, + "experience_temperature": 28.1514, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T06:50:06.458844+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.9, + "humidity": 85.9, + "water_total": 3990.0, + "average_temperature": 27.7, + "experience_temperature": 27.0871, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T07:00:10.279961+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 0.8, + "humidity": 85.1, + "water_total": 4052.0, + "average_temperature": 27.5667, + "experience_temperature": 27.2152, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T07:10:06.637256+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 87.2, + "water_total": 4084.0, + "average_temperature": 27.7333, + "experience_temperature": 26.1162, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T07:20:06.254479+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.0, + "humidity": 86.3, + "water_total": 4122.0, + "average_temperature": 28.0333, + "experience_temperature": 27.079, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T07:30:06.482264+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.0, + "humidity": 85.7, + "water_total": 4166.0, + "average_temperature": 27.8333, + "experience_temperature": 26.759, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T07:40:06.971052+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 86.0, + "water_total": 4216.0, + "average_temperature": 28.0, + "experience_temperature": 26.1429, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T07:50:07.255618+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 86.7, + "water_total": 4266.0, + "average_temperature": 27.9667, + "experience_temperature": 26.2495, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T08:00:07.841623+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 85.8, + "water_total": 4317.0, + "average_temperature": 28.3, + "experience_temperature": 26.4029, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T08:10:06.447842+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.1, + "humidity": 84.7, + "water_total": 4372.0, + "average_temperature": 28.7, + "experience_temperature": 27.0043, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T08:20:06.871001+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.1, + "humidity": 84.7, + "water_total": 4372.0, + "average_temperature": 28.7, + "experience_temperature": 27.0043, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T08:30:06.975121+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 84.6, + "water_total": 4489.0, + "average_temperature": 28.6333, + "experience_temperature": 26.4962, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T08:40:06.755299+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.5, + "humidity": 82.7, + "water_total": 4557.0, + "average_temperature": 29.3, + "experience_temperature": 25.5186, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T08:50:06.478478+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.5, + "humidity": 81.6, + "water_total": 4618.0, + "average_temperature": 29.2, + "experience_temperature": 25.1986, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T09:00:06.495018+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.4, + "humidity": 82.0, + "water_total": 4659.0, + "average_temperature": 28.9333, + "experience_temperature": 25.4333, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T09:10:06.895456+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.3, + "humidity": 82.0, + "water_total": 4725.0, + "average_temperature": 29.1, + "experience_temperature": 26.0214, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T09:20:07.354988+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.8, + "humidity": 82.4, + "water_total": 4837.0, + "average_temperature": 29.4, + "experience_temperature": 24.2943, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T09:30:08.267336+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.8, + "humidity": 80.4, + "water_total": 4963.0, + "average_temperature": 29.4667, + "experience_temperature": 23.961, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T09:40:06.800351+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.9, + "humidity": 79.4, + "water_total": 5079.0, + "average_temperature": 29.7667, + "experience_temperature": 23.6395, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T09:50:07.393361+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.7, + "humidity": 78.4, + "water_total": 5206.0, + "average_temperature": 29.7, + "experience_temperature": 24.2157, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T10:00:07.299024+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.8, + "humidity": 79.0, + "water_total": 5270.0, + "average_temperature": 29.8333, + "experience_temperature": 24.0476, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T10:10:07.382072+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.7, + "humidity": 79.6, + "water_total": 5299.0, + "average_temperature": 29.5667, + "experience_temperature": 24.3224, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T10:20:07.537159+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.7, + "humidity": 79.2, + "water_total": 5416.0, + "average_temperature": 29.4667, + "experience_temperature": 24.1424, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T10:30:07.486418+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.8, + "humidity": 78.2, + "water_total": 5552.0, + "average_temperature": 29.5667, + "experience_temperature": 23.621, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T10:40:08.183629+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.8, + "humidity": 78.1, + "water_total": 5676.0, + "average_temperature": 30.0, + "experience_temperature": 24.0343, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T10:50:07.362506+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.8, + "humidity": 77.1, + "water_total": 5810.0, + "average_temperature": 29.9333, + "experience_temperature": 23.7676, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T11:00:08.353856+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.8, + "humidity": 75.8, + "water_total": 5928.0, + "average_temperature": 30.3333, + "experience_temperature": 23.9076, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T11:10:06.113938+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.2, + "humidity": 73.9, + "water_total": 5996.0, + "average_temperature": 31.3333, + "experience_temperature": 22.8419, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T11:20:06.128661+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.9, + "humidity": 71.0, + "water_total": 6079.0, + "average_temperature": 31.5333, + "experience_temperature": 23.7262, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T11:30:05.860589+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.0, + "humidity": 69.9, + "water_total": 6148.0, + "average_temperature": 31.6, + "experience_temperature": 23.1514, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T11:40:07.083718+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.1, + "humidity": 69.9, + "water_total": 6203.0, + "average_temperature": 31.9667, + "experience_temperature": 23.0967, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T11:50:06.741935+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.5, + "humidity": 68.5, + "water_total": 6256.0, + "average_temperature": 31.9, + "experience_temperature": 21.0643, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T12:00:06.718913+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.4, + "humidity": 67.8, + "water_total": 6311.0, + "average_temperature": 32.0, + "experience_temperature": 21.4457, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T12:10:06.545986+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.5, + "humidity": 67.8, + "water_total": 6361.0, + "average_temperature": 32.5333, + "experience_temperature": 21.5576, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T12:20:06.308353+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.5, + "humidity": 67.8, + "water_total": 6361.0, + "average_temperature": 32.5333, + "experience_temperature": 21.5576, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T12:30:06.186268+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.3, + "humidity": 66.2, + "water_total": 6460.0, + "average_temperature": 32.3667, + "experience_temperature": 21.9138, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T12:40:05.764295+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.3, + "humidity": 65.8, + "water_total": 6514.0, + "average_temperature": 32.7333, + "experience_temperature": 22.2005, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T12:50:06.083254+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.3, + "humidity": 65.8, + "water_total": 6514.0, + "average_temperature": 32.7333, + "experience_temperature": 22.2005, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T13:00:05.935119+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.7, + "humidity": 64.5, + "water_total": 6605.0, + "average_temperature": 32.7333, + "experience_temperature": 20.2548, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T13:10:05.981312+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.4, + "humidity": 64.2, + "water_total": 6658.0, + "average_temperature": 33.0333, + "experience_temperature": 21.759, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T13:20:06.258511+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.5, + "humidity": 63.0, + "water_total": 6720.0, + "average_temperature": 33.0333, + "experience_temperature": 21.0976, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T13:30:07.018115+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.5, + "humidity": 61.5, + "water_total": 6766.0, + "average_temperature": 33.0667, + "experience_temperature": 20.831, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T13:40:06.925223+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.4, + "humidity": 62.8, + "water_total": 6817.0, + "average_temperature": 33.0, + "experience_temperature": 21.4457, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T13:50:05.767055+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.7, + "humidity": 62.1, + "water_total": 6864.0, + "average_temperature": 33.0333, + "experience_temperature": 20.0748, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T14:10:07.530510+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.6, + "humidity": 60.5, + "water_total": 6954.0, + "average_temperature": 32.5667, + "experience_temperature": 19.7095, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T14:20:05.871721+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.6, + "humidity": 61.8, + "water_total": 7002.0, + "average_temperature": 33.0667, + "experience_temperature": 20.4695, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T14:30:05.869074+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.5, + "humidity": 62.0, + "water_total": 7058.0, + "average_temperature": 32.6333, + "experience_temperature": 20.4976, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T14:40:06.179751+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.7, + "humidity": 62.0, + "water_total": 7106.0, + "average_temperature": 32.5667, + "experience_temperature": 19.5881, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T14:50:06.144486+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.6, + "humidity": 60.6, + "water_total": 7160.0, + "average_temperature": 32.8667, + "experience_temperature": 20.0295, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T15:10:05.771948+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.1, + "humidity": 62.4, + "water_total": 7260.0, + "average_temperature": 32.6667, + "experience_temperature": 22.2967, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T15:20:05.338886+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.7, + "humidity": 62.8, + "water_total": 7305.0, + "average_temperature": 32.4333, + "experience_temperature": 19.6148, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T15:30:05.926507+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.6, + "humidity": 62.5, + "water_total": 7360.0, + "average_temperature": 32.6333, + "experience_temperature": 20.1762, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T15:40:05.805544+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.5, + "humidity": 62.8, + "water_total": 7407.0, + "average_temperature": 32.5, + "experience_temperature": 20.5243, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T15:50:05.603574+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.5, + "humidity": 63.1, + "water_total": 7448.0, + "average_temperature": 32.5, + "experience_temperature": 20.5843, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T16:10:07.530397+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.5, + "humidity": 63.2, + "water_total": 7572.0, + "average_temperature": 32.4333, + "experience_temperature": 20.5376, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T16:20:06.870198+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.3, + "humidity": 63.4, + "water_total": 7635.0, + "average_temperature": 32.2667, + "experience_temperature": 21.2538, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T16:30:06.857297+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.5, + "humidity": 64.2, + "water_total": 7689.0, + "average_temperature": 32.2, + "experience_temperature": 20.5043, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T16:40:06.235841+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.3, + "humidity": 63.4, + "water_total": 7731.0, + "average_temperature": 31.8667, + "experience_temperature": 20.8538, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T16:50:07.968026+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.3, + "humidity": 64.6, + "water_total": 7770.0, + "average_temperature": 31.7667, + "experience_temperature": 20.9938, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T17:10:06.852228+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.1, + "humidity": 65.1, + "water_total": 41.0, + "average_temperature": 31.4333, + "experience_temperature": 21.6033, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T17:20:06.236408+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.0, + "humidity": 65.6, + "water_total": 90.0, + "average_temperature": 31.2333, + "experience_temperature": 21.9248, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T17:30:07.974519+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.9, + "humidity": 66.2, + "water_total": 143.0, + "average_temperature": 30.9333, + "experience_temperature": 22.1662, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T17:40:06.053907+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.0, + "humidity": 66.9, + "water_total": 180.0, + "average_temperature": 30.8667, + "experience_temperature": 21.8181, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T17:50:06.967206+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.0, + "humidity": 66.7, + "water_total": 223.0, + "average_temperature": 30.6333, + "experience_temperature": 21.5448, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T18:00:08.436431+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.6, + "humidity": 67.8, + "water_total": 229.0, + "average_temperature": 30.3333, + "experience_temperature": 23.1505, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T18:10:06.489287+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.7, + "humidity": 68.7, + "water_total": 234.0, + "average_temperature": 30.2, + "experience_temperature": 22.7757, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T18:20:05.332240+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.9, + "humidity": 68.5, + "water_total": 234.0, + "average_temperature": 30.2333, + "experience_temperature": 21.9262, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T18:30:06.474815+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.8, + "humidity": 66.9, + "water_total": 234.0, + "average_temperature": 30.3, + "experience_temperature": 22.0943, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T18:40:06.617157+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.1, + "humidity": 67.7, + "water_total": 238.0, + "average_temperature": 30.4667, + "experience_temperature": 21.1567, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T18:50:06.734036+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 2.0, + "humidity": 68.4, + "water_total": 319.0, + "average_temperature": 30.4667, + "experience_temperature": 21.7181, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T19:00:07.645609+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.8, + "humidity": 70.1, + "water_total": 404.0, + "average_temperature": 29.8667, + "experience_temperature": 22.301, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T19:10:05.850360+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.7, + "humidity": 71.1, + "water_total": 464.0, + "average_temperature": 29.6333, + "experience_temperature": 22.689, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T19:20:06.565493+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.6, + "humidity": 73.2, + "water_total": 520.0, + "average_temperature": 29.3333, + "experience_temperature": 23.2305, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T19:30:07.043340+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.6, + "humidity": 73.5, + "water_total": 569.0, + "average_temperature": 29.2, + "experience_temperature": 23.1571, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T19:40:05.628726+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.7, + "humidity": 73.4, + "water_total": 632.0, + "average_temperature": 29.2333, + "experience_temperature": 22.749, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T19:50:06.079147+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.6, + "humidity": 74.1, + "water_total": 685.0, + "average_temperature": 29.1, + "experience_temperature": 23.1771, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T20:00:06.421000+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.9, + "humidity": 75.3, + "water_total": 738.0, + "average_temperature": 29.0, + "experience_temperature": 22.0529, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T20:10:05.314786+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.8, + "humidity": 75.9, + "water_total": 775.0, + "average_temperature": 29.0667, + "experience_temperature": 22.661, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T20:20:06.474473+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.8, + "humidity": 76.3, + "water_total": 815.0, + "average_temperature": 29.0, + "experience_temperature": 22.6743, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T20:30:05.869144+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.7, + "humidity": 78.0, + "water_total": 858.0, + "average_temperature": 28.9333, + "experience_temperature": 23.369, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T20:40:06.413296+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.3, + "humidity": 78.8, + "water_total": 900.0, + "average_temperature": 28.8333, + "experience_temperature": 25.1148, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T20:50:05.765568+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.3, + "humidity": 79.4, + "water_total": 952.0, + "average_temperature": 28.7333, + "experience_temperature": 25.1348, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T21:00:06.346174+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.4, + "humidity": 80.4, + "water_total": 993.0, + "average_temperature": 28.5667, + "experience_temperature": 24.7467, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T21:10:06.067366+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 81.1, + "water_total": 1019.0, + "average_temperature": 28.3667, + "experience_temperature": 25.5295, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T21:20:06.698265+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.4, + "humidity": 81.3, + "water_total": 1061.0, + "average_temperature": 28.2333, + "experience_temperature": 24.5933, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T21:30:08.626474+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.3, + "humidity": 81.1, + "water_total": 1115.0, + "average_temperature": 28.2, + "experience_temperature": 24.9414, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T21:40:05.748777+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.3, + "humidity": 81.0, + "water_total": 1184.0, + "average_temperature": 28.1333, + "experience_temperature": 24.8548, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T21:50:05.666009+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.3, + "humidity": 82.8, + "water_total": 1252.0, + "average_temperature": 28.2, + "experience_temperature": 25.2814, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T22:00:06.202015+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.3, + "humidity": 83.7, + "water_total": 1314.0, + "average_temperature": 27.8667, + "experience_temperature": 25.1281, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T22:10:06.044315+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.3, + "humidity": 83.4, + "water_total": 1367.0, + "average_temperature": 28.0333, + "experience_temperature": 25.2348, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T22:20:05.721846+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.4, + "humidity": 83.6, + "water_total": 1426.0, + "average_temperature": 28.0, + "experience_temperature": 24.82, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T22:30:05.722521+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 83.9, + "water_total": 1481.0, + "average_temperature": 28.0667, + "experience_temperature": 25.7895, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T22:40:05.945370+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.4, + "humidity": 84.4, + "water_total": 1534.0, + "average_temperature": 27.9333, + "experience_temperature": 24.9133, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T22:50:05.788571+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.3, + "humidity": 84.3, + "water_total": 1585.0, + "average_temperature": 27.7333, + "experience_temperature": 25.1148, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T23:00:06.004186+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.4, + "humidity": 84.8, + "water_total": 1590.0, + "average_temperature": 27.8667, + "experience_temperature": 24.9267, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T23:10:07.299137+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 82.8, + "water_total": 1660.0, + "average_temperature": 28.6667, + "experience_temperature": 26.1695, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T23:20:06.570109+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.3, + "humidity": 83.6, + "water_total": 1749.0, + "average_temperature": 27.9, + "experience_temperature": 25.1414, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T23:30:05.761411+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.5, + "humidity": 83.6, + "water_total": 1800.0, + "average_temperature": 27.9, + "experience_temperature": 24.2986, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T23:40:06.612256+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 83.5, + "water_total": 1800.0, + "average_temperature": 27.4667, + "experience_temperature": 25.1095, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-13T23:50:06.195034+07:00", + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 83.1, + "water_total": 1800.0, + "average_temperature": 27.7, + "experience_temperature": 25.2629, + "chill_factor": 4.2143 + }, + { + "timestamp": "2026-06-14T00:00:06.124257+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 83.1, + "water_total": 1800.0, + "average_temperature": 27.6, + "experience_temperature": 25.3343, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T00:10:06.198942+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 83.7, + "water_total": 1805.0, + "average_temperature": 27.8667, + "experience_temperature": 25.721, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T00:20:06.351924+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 82.2, + "water_total": 1888.0, + "average_temperature": 28.1, + "experience_temperature": 25.6543, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T00:30:05.898330+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 82.8, + "water_total": 1955.0, + "average_temperature": 27.7333, + "experience_temperature": 25.4076, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T00:40:07.364963+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.0, + "humidity": 83.4, + "water_total": 2006.0, + "average_temperature": 27.9333, + "experience_temperature": 26.5419, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T00:50:05.805544+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.3, + "humidity": 82.7, + "water_total": 2057.0, + "average_temperature": 28.0, + "experience_temperature": 25.2471, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T01:00:06.391637+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 82.3, + "water_total": 2105.0, + "average_temperature": 27.9667, + "experience_temperature": 25.541, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T01:10:06.080857+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 82.9, + "water_total": 2153.0, + "average_temperature": 27.8, + "experience_temperature": 25.4943, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T01:20:07.416967+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 82.1, + "water_total": 2202.0, + "average_temperature": 27.7667, + "experience_temperature": 25.301, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T01:30:06.334418+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.3, + "humidity": 82.9, + "water_total": 2248.0, + "average_temperature": 27.6333, + "experience_temperature": 24.9205, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T01:40:06.284629+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 82.5, + "water_total": 2271.0, + "average_temperature": 27.4, + "experience_temperature": 25.0143, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T01:50:06.365612+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 83.0, + "water_total": 2276.0, + "average_temperature": 27.4333, + "experience_temperature": 25.1476, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T02:00:05.932584+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 83.0, + "water_total": 2276.0, + "average_temperature": 27.4333, + "experience_temperature": 25.1476, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T02:10:06.284770+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.0, + "humidity": 82.6, + "water_total": 2276.0, + "average_temperature": 27.7667, + "experience_temperature": 26.2152, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T02:20:06.554876+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 82.3, + "water_total": 2343.0, + "average_temperature": 27.6667, + "experience_temperature": 25.241, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T02:30:07.264176+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.3, + "humidity": 82.9, + "water_total": 2408.0, + "average_temperature": 27.6333, + "experience_temperature": 24.9205, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T02:40:06.776334+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 83.1, + "water_total": 2458.0, + "average_temperature": 27.4667, + "experience_temperature": 25.201, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T02:50:06.045767+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 83.1, + "water_total": 2492.0, + "average_temperature": 27.4, + "experience_temperature": 25.1343, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T03:00:08.285846+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 83.3, + "water_total": 2535.0, + "average_temperature": 27.4667, + "experience_temperature": 25.241, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T03:10:06.346933+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 84.1, + "water_total": 2582.0, + "average_temperature": 27.3667, + "experience_temperature": 25.301, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T03:20:06.032873+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 0.6, + "humidity": 84.8, + "water_total": 2627.0, + "average_temperature": 27.3333, + "experience_temperature": 27.8505, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T03:30:06.588646+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.1, + "humidity": 84.1, + "water_total": 2682.0, + "average_temperature": 27.4333, + "experience_temperature": 25.7748, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T03:40:05.873658+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 0.6, + "humidity": 84.3, + "water_total": 2740.0, + "average_temperature": 27.2, + "experience_temperature": 27.6171, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T03:50:05.913487+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 0.6, + "humidity": 84.7, + "water_total": 2792.0, + "average_temperature": 27.3333, + "experience_temperature": 27.8305, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T04:00:06.053865+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 0.7, + "humidity": 84.2, + "water_total": 2828.0, + "average_temperature": 27.2667, + "experience_temperature": 27.2567, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T04:10:05.980632+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 0.6, + "humidity": 84.0, + "water_total": 2852.0, + "average_temperature": 27.2667, + "experience_temperature": 27.6238, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T04:20:06.232628+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 0.6, + "humidity": 83.8, + "water_total": 2852.0, + "average_temperature": 27.1667, + "experience_temperature": 27.4838, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T04:30:06.534348+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 0.6, + "humidity": 85.4, + "water_total": 2856.0, + "average_temperature": 27.2, + "experience_temperature": 27.8371, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T04:40:05.986286+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 0.6, + "humidity": 85.0, + "water_total": 2856.0, + "average_temperature": 27.3, + "experience_temperature": 27.8571, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T04:50:07.651393+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 0.6, + "humidity": 84.7, + "water_total": 2856.0, + "average_temperature": 27.3, + "experience_temperature": 27.7971, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T05:00:06.526855+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 86.0, + "water_total": 2915.0, + "average_temperature": 27.3667, + "experience_temperature": 25.681, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T05:10:06.074688+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 0.6, + "humidity": 84.3, + "water_total": 2969.0, + "average_temperature": 27.3333, + "experience_temperature": 27.7505, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T05:20:08.216561+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 0.6, + "humidity": 83.8, + "water_total": 3019.0, + "average_temperature": 27.2333, + "experience_temperature": 27.5505, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T05:30:06.170991+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 84.0, + "water_total": 3064.0, + "average_temperature": 27.2667, + "experience_temperature": 25.181, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T05:40:06.425227+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 0.6, + "humidity": 85.7, + "water_total": 3103.0, + "average_temperature": 27.2, + "experience_temperature": 27.8971, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T05:50:06.760754+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 0.9, + "humidity": 84.1, + "water_total": 3163.0, + "average_temperature": 27.2667, + "experience_temperature": 26.4224, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T06:00:06.827328+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 0.6, + "humidity": 85.8, + "water_total": 3235.0, + "average_temperature": 27.2333, + "experience_temperature": 27.9505, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T06:10:07.215886+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 85.9, + "water_total": 3285.0, + "average_temperature": 27.2333, + "experience_temperature": 25.5276, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T06:20:06.052017+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 0.6, + "humidity": 85.6, + "water_total": 3341.0, + "average_temperature": 27.2, + "experience_temperature": 27.8771, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T06:30:06.600480+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 0.6, + "humidity": 86.0, + "water_total": 3399.0, + "average_temperature": 27.2333, + "experience_temperature": 27.9905, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T06:40:06.833289+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 0.6, + "humidity": 85.1, + "water_total": 3445.0, + "average_temperature": 27.1333, + "experience_temperature": 27.7105, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T06:50:06.074588+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 0.6, + "humidity": 85.1, + "water_total": 3445.0, + "average_temperature": 27.1333, + "experience_temperature": 27.7105, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T07:00:07.332877+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 84.8, + "water_total": 3531.0, + "average_temperature": 27.3667, + "experience_temperature": 25.441, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T07:10:06.867809+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 84.7, + "water_total": 3578.0, + "average_temperature": 27.4, + "experience_temperature": 25.4543, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T07:20:06.638189+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 84.1, + "water_total": 3618.0, + "average_temperature": 27.6333, + "experience_temperature": 25.5676, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T07:30:05.784265+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 83.9, + "water_total": 3667.0, + "average_temperature": 27.8333, + "experience_temperature": 25.7276, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T07:40:06.251227+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 81.8, + "water_total": 3719.0, + "average_temperature": 28.2667, + "experience_temperature": 25.741, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T07:50:06.122795+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.1, + "humidity": 82.6, + "water_total": 3776.0, + "average_temperature": 28.5333, + "experience_temperature": 26.5748, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T08:00:07.094512+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.6, + "humidity": 81.4, + "water_total": 3833.0, + "average_temperature": 28.8, + "experience_temperature": 24.5657, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T08:10:06.792860+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.8, + "humidity": 80.8, + "water_total": 3871.0, + "average_temperature": 28.8, + "experience_temperature": 23.6314, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T08:20:06.570775+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.4, + "humidity": 79.5, + "water_total": 3897.0, + "average_temperature": 29.0667, + "experience_temperature": 25.2667, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T08:30:06.115748+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.6, + "humidity": 77.5, + "water_total": 3935.0, + "average_temperature": 29.5, + "experience_temperature": 24.4857, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T08:40:06.639845+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.9, + "humidity": 76.7, + "water_total": 3979.0, + "average_temperature": 29.5333, + "experience_temperature": 23.1376, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T08:50:07.962080+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.7, + "humidity": 75.5, + "water_total": 4021.0, + "average_temperature": 30.0, + "experience_temperature": 24.1786, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T09:00:06.107219+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.3, + "humidity": 74.5, + "water_total": 4086.0, + "average_temperature": 29.9667, + "experience_temperature": 25.5738, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T09:10:06.576347+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.7, + "humidity": 73.9, + "water_total": 4148.0, + "average_temperature": 30.2, + "experience_temperature": 24.0586, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T09:20:06.166421+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.9, + "humidity": 72.7, + "water_total": 4196.0, + "average_temperature": 30.7333, + "experience_temperature": 23.5376, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T09:30:06.785822+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.9, + "humidity": 71.7, + "water_total": 4230.0, + "average_temperature": 30.9667, + "experience_temperature": 23.571, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T09:40:06.523613+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.9, + "humidity": 72.6, + "water_total": 4290.0, + "average_temperature": 31.2, + "experience_temperature": 23.9843, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T09:50:06.461984+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.2, + "humidity": 71.3, + "water_total": 4334.0, + "average_temperature": 31.2333, + "experience_temperature": 22.5362, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T10:00:06.415874+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.1, + "humidity": 70.7, + "water_total": 4374.0, + "average_temperature": 31.4333, + "experience_temperature": 23.0233, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T10:10:06.150011+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.1, + "humidity": 71.6, + "water_total": 4429.0, + "average_temperature": 31.8333, + "experience_temperature": 23.6033, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T10:20:06.339956+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.1, + "humidity": 71.6, + "water_total": 4429.0, + "average_temperature": 31.8333, + "experience_temperature": 23.6033, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T10:30:07.124349+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.7, + "humidity": 65.9, + "water_total": 4524.0, + "average_temperature": 33.0333, + "experience_temperature": 21.2205, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T10:40:06.300219+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.6, + "humidity": 64.0, + "water_total": 4574.0, + "average_temperature": 32.8667, + "experience_temperature": 21.081, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T10:50:06.377509+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 3.0, + "humidity": 64.0, + "water_total": 4636.0, + "average_temperature": 33.3667, + "experience_temperature": 19.9524, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T11:00:06.665314+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.9, + "humidity": 65.2, + "water_total": 4692.0, + "average_temperature": 33.5667, + "experience_temperature": 20.7995, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T11:10:06.889500+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.7, + "humidity": 63.3, + "water_total": 4746.0, + "average_temperature": 33.1667, + "experience_temperature": 20.8338, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T11:20:06.734383+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 3.2, + "humidity": 64.1, + "water_total": 4797.0, + "average_temperature": 33.3333, + "experience_temperature": 19.1248, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T11:30:06.454089+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.5, + "humidity": 63.8, + "water_total": 4851.0, + "average_temperature": 33.1667, + "experience_temperature": 21.7481, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T11:40:06.189700+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.5, + "humidity": 63.9, + "water_total": 4898.0, + "average_temperature": 33.0333, + "experience_temperature": 21.6348, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T11:50:07.233162+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.5, + "humidity": 65.0, + "water_total": 4927.0, + "average_temperature": 32.5667, + "experience_temperature": 21.3881, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T12:00:07.252129+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.8, + "humidity": 64.5, + "water_total": 4991.0, + "average_temperature": 33.0667, + "experience_temperature": 20.5667, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T12:10:06.219387+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.7, + "humidity": 66.3, + "water_total": 5040.0, + "average_temperature": 32.8, + "experience_temperature": 21.0671, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T12:20:06.792875+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 3.2, + "humidity": 65.1, + "water_total": 5088.0, + "average_temperature": 33.3667, + "experience_temperature": 19.3581, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T12:30:06.809253+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.6, + "humidity": 65.1, + "water_total": 5143.0, + "average_temperature": 33.5667, + "experience_temperature": 22.001, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T12:40:07.699729+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.5, + "humidity": 65.0, + "water_total": 5198.0, + "average_temperature": 32.9333, + "experience_temperature": 21.7548, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T12:50:07.232749+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 3.0, + "humidity": 66.9, + "water_total": 5245.0, + "average_temperature": 33.3333, + "experience_temperature": 20.499, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T13:00:07.075291+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.9, + "humidity": 65.4, + "water_total": 5301.0, + "average_temperature": 33.3667, + "experience_temperature": 20.6395, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T13:10:09.339711+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.8, + "humidity": 65.9, + "water_total": 5355.0, + "average_temperature": 33.0333, + "experience_temperature": 20.8133, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T13:20:08.355634+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 3.0, + "humidity": 64.8, + "water_total": 5411.0, + "average_temperature": 33.2333, + "experience_temperature": 19.979, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T13:30:06.754856+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 3.1, + "humidity": 66.0, + "water_total": 5459.0, + "average_temperature": 33.5333, + "experience_temperature": 20.1119, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T13:40:06.944480+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 3.0, + "humidity": 65.0, + "water_total": 5514.0, + "average_temperature": 33.4667, + "experience_temperature": 20.2524, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T13:50:06.796788+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.5, + "humidity": 65.8, + "water_total": 5567.0, + "average_temperature": 33.2667, + "experience_temperature": 22.2481, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T14:10:06.836384+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.8, + "humidity": 64.3, + "water_total": 5667.0, + "average_temperature": 33.4333, + "experience_temperature": 20.8933, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T14:20:06.363313+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.9, + "humidity": 63.5, + "water_total": 5717.0, + "average_temperature": 33.1667, + "experience_temperature": 20.0595, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T14:30:05.953021+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.5, + "humidity": 65.0, + "water_total": 5766.0, + "average_temperature": 33.0333, + "experience_temperature": 21.8548, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T14:40:06.871021+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.4, + "humidity": 66.5, + "water_total": 5808.0, + "average_temperature": 32.5667, + "experience_temperature": 22.0952, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T14:50:07.219969+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.6, + "humidity": 66.4, + "water_total": 5845.0, + "average_temperature": 32.3667, + "experience_temperature": 21.061, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T15:10:06.448623+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.7, + "humidity": 66.3, + "water_total": 5925.0, + "average_temperature": 32.7667, + "experience_temperature": 21.0338, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T15:20:06.851041+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.8, + "humidity": 66.2, + "water_total": 5971.0, + "average_temperature": 32.4, + "experience_temperature": 20.24, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T15:30:06.595949+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.8, + "humidity": 66.2, + "water_total": 6007.0, + "average_temperature": 32.3333, + "experience_temperature": 20.1733, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T15:40:07.702021+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.6, + "humidity": 63.9, + "water_total": 6043.0, + "average_temperature": 32.6333, + "experience_temperature": 20.8276, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T15:50:06.509521+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.9, + "humidity": 65.1, + "water_total": 6091.0, + "average_temperature": 32.5667, + "experience_temperature": 19.7795, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T16:10:10.058169+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.5, + "humidity": 68.7, + "water_total": 6205.0, + "average_temperature": 32.0, + "experience_temperature": 21.5614, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T16:20:08.105198+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.2, + "humidity": 69.6, + "water_total": 6299.0, + "average_temperature": 31.5667, + "experience_temperature": 22.5295, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T16:30:06.649930+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.2, + "humidity": 69.5, + "water_total": 6373.0, + "average_temperature": 31.3, + "experience_temperature": 22.2429, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T16:40:06.965700+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.4, + "humidity": 70.7, + "water_total": 6423.0, + "average_temperature": 31.1667, + "experience_temperature": 21.5352, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T16:50:11.077482+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.6, + "humidity": 68.0, + "water_total": 6469.0, + "average_temperature": 31.1667, + "experience_temperature": 20.181, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T17:10:06.566823+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.1, + "humidity": 68.2, + "water_total": 27.0, + "average_temperature": 31.1, + "experience_temperature": 22.19, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T17:20:06.699770+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.6, + "humidity": 68.0, + "water_total": 71.0, + "average_temperature": 31.1333, + "experience_temperature": 20.1476, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T17:30:07.185106+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.2, + "humidity": 69.0, + "water_total": 109.0, + "average_temperature": 31.1, + "experience_temperature": 21.9429, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T17:40:06.734363+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.1, + "humidity": 69.3, + "water_total": 171.0, + "average_temperature": 30.9667, + "experience_temperature": 22.2767, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T17:50:07.099075+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.2, + "humidity": 69.7, + "water_total": 214.0, + "average_temperature": 30.7, + "experience_temperature": 21.6829, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T18:00:05.539107+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.2, + "humidity": 72.0, + "water_total": 223.0, + "average_temperature": 30.2, + "experience_temperature": 21.6429, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T18:10:05.805408+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.1, + "humidity": 72.9, + "water_total": 227.0, + "average_temperature": 30.2667, + "experience_temperature": 22.2967, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T18:20:10.644672+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.9, + "humidity": 73.3, + "water_total": 227.0, + "average_temperature": 30.2, + "experience_temperature": 23.1243, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T18:30:06.276509+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.1, + "humidity": 73.1, + "water_total": 227.0, + "average_temperature": 30.1667, + "experience_temperature": 22.2367, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T18:40:05.905433+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 2.0, + "humidity": 74.0, + "water_total": 231.0, + "average_temperature": 30.2333, + "experience_temperature": 22.8905, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T18:50:06.073495+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.9, + "humidity": 73.6, + "water_total": 315.0, + "average_temperature": 30.1, + "experience_temperature": 23.0843, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T19:00:05.728865+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.7, + "humidity": 74.3, + "water_total": 392.0, + "average_temperature": 30.0333, + "experience_temperature": 23.9719, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T19:10:07.241222+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.7, + "humidity": 74.3, + "water_total": 470.0, + "average_temperature": 29.9667, + "experience_temperature": 23.9052, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T19:20:06.248262+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.7, + "humidity": 74.9, + "water_total": 549.0, + "average_temperature": 29.9, + "experience_temperature": 23.9586, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T19:30:05.718457+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.7, + "humidity": 76.0, + "water_total": 617.0, + "average_temperature": 29.8333, + "experience_temperature": 24.1119, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T19:40:06.307944+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.6, + "humidity": 76.2, + "water_total": 690.0, + "average_temperature": 30.0, + "experience_temperature": 24.7257, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T19:50:07.425722+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.6, + "humidity": 76.8, + "water_total": 754.0, + "average_temperature": 29.8667, + "experience_temperature": 24.7124, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T20:00:05.600635+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.9, + "humidity": 78.2, + "water_total": 812.0, + "average_temperature": 29.7, + "experience_temperature": 23.6043, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T20:10:05.731371+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.8, + "humidity": 78.2, + "water_total": 861.0, + "average_temperature": 29.4667, + "experience_temperature": 23.7781, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T20:20:05.562743+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.5, + "humidity": 78.1, + "water_total": 896.0, + "average_temperature": 29.6333, + "experience_temperature": 25.1462, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T20:30:05.428384+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.5, + "humidity": 77.4, + "water_total": 948.0, + "average_temperature": 29.6, + "experience_temperature": 24.9729, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T20:40:05.860766+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.6, + "humidity": 78.1, + "water_total": 989.0, + "average_temperature": 29.5333, + "experience_temperature": 24.639, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T20:50:06.985843+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.7, + "humidity": 79.4, + "water_total": 1024.0, + "average_temperature": 29.2667, + "experience_temperature": 24.2252, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T21:00:07.157976+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.7, + "humidity": 79.4, + "water_total": 1024.0, + "average_temperature": 29.2667, + "experience_temperature": 24.2252, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T21:10:06.454661+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.4, + "humidity": 79.0, + "water_total": 1094.0, + "average_temperature": 29.1, + "experience_temperature": 25.2, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T21:20:05.831904+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 80.9, + "water_total": 1123.0, + "average_temperature": 29.1, + "experience_temperature": 26.3943, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T21:30:05.858715+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 80.9, + "water_total": 1123.0, + "average_temperature": 29.1, + "experience_temperature": 26.3943, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T21:40:07.651355+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 81.2, + "water_total": 1192.0, + "average_temperature": 29.0, + "experience_temperature": 26.3543, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T21:50:05.987417+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 81.2, + "water_total": 1192.0, + "average_temperature": 29.0, + "experience_temperature": 26.3543, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T22:00:05.897713+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.3, + "humidity": 82.4, + "water_total": 1266.0, + "average_temperature": 28.8667, + "experience_temperature": 26.0538, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T22:10:05.229032+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 81.9, + "water_total": 1300.0, + "average_temperature": 28.8, + "experience_temperature": 26.2943, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T22:20:06.894945+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.3, + "humidity": 83.2, + "water_total": 1334.0, + "average_temperature": 28.6, + "experience_temperature": 25.9471, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T22:30:06.180680+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.4, + "humidity": 82.7, + "water_total": 1367.0, + "average_temperature": 28.6, + "experience_temperature": 25.44, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T22:40:05.795253+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.3, + "humidity": 83.9, + "water_total": 1388.0, + "average_temperature": 28.5333, + "experience_temperature": 26.0205, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T22:50:05.626514+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.1, + "humidity": 85.6, + "water_total": 1443.0, + "average_temperature": 28.6667, + "experience_temperature": 27.3081, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T23:00:06.310230+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 84.2, + "water_total": 1465.0, + "average_temperature": 28.2667, + "experience_temperature": 26.221, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T23:10:05.799770+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 83.3, + "water_total": 1481.0, + "average_temperature": 28.3, + "experience_temperature": 26.0743, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T23:20:07.269425+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.3, + "humidity": 83.2, + "water_total": 1512.0, + "average_temperature": 28.3, + "experience_temperature": 25.6471, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T23:30:05.826542+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.3, + "humidity": 83.9, + "water_total": 1557.0, + "average_temperature": 28.0667, + "experience_temperature": 25.5538, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T23:40:10.040941+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 84.6, + "water_total": 1596.0, + "average_temperature": 27.7333, + "experience_temperature": 25.7676, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-14T23:50:06.012112+07:00", + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 85.1, + "water_total": 1596.0, + "average_temperature": 27.9, + "experience_temperature": 26.0343, + "chill_factor": 4.0714 + }, + { + "timestamp": "2026-06-15T00:00:05.968334+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 85.5, + "water_total": 1596.0, + "average_temperature": 27.8, + "experience_temperature": 26.1857, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T00:10:07.840094+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 86.1, + "water_total": 1596.0, + "average_temperature": 28.0, + "experience_temperature": 26.5057, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T00:20:06.555024+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 85.6, + "water_total": 1691.0, + "average_temperature": 27.6667, + "experience_temperature": 26.0724, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T00:30:05.336441+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 85.8, + "water_total": 1759.0, + "average_temperature": 27.6667, + "experience_temperature": 26.1124, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T00:40:05.382965+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 85.8, + "water_total": 1759.0, + "average_temperature": 27.6667, + "experience_temperature": 26.1124, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T00:50:06.767250+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.4, + "humidity": 86.1, + "water_total": 1841.0, + "average_temperature": 27.4333, + "experience_temperature": 25.1533, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T01:00:05.910429+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 85.8, + "water_total": 1895.0, + "average_temperature": 27.3333, + "experience_temperature": 25.3862, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T01:10:05.609219+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 85.7, + "water_total": 1932.0, + "average_temperature": 27.4, + "experience_temperature": 25.8257, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T01:20:07.884859+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 85.9, + "water_total": 1979.0, + "average_temperature": 27.3, + "experience_temperature": 25.3729, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T01:30:06.980250+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 86.1, + "water_total": 2023.0, + "average_temperature": 27.1333, + "experience_temperature": 25.639, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T01:40:06.852035+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.1, + "humidity": 86.3, + "water_total": 2044.0, + "average_temperature": 27.1, + "experience_temperature": 26.0386, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T01:50:06.989998+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 86.7, + "water_total": 2044.0, + "average_temperature": 27.1, + "experience_temperature": 25.7257, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T02:00:05.499934+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.4, + "humidity": 86.1, + "water_total": 2044.0, + "average_temperature": 27.0333, + "experience_temperature": 24.7533, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T02:10:05.944794+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.4, + "humidity": 85.8, + "water_total": 2044.0, + "average_temperature": 27.2667, + "experience_temperature": 24.9267, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T02:20:05.901630+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 85.2, + "water_total": 2138.0, + "average_temperature": 27.6333, + "experience_temperature": 25.5662, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T02:30:05.815063+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 0.6, + "humidity": 86.7, + "water_total": 2229.0, + "average_temperature": 27.0667, + "experience_temperature": 28.0495, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T02:40:05.446638+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.4, + "humidity": 87.1, + "water_total": 2283.0, + "average_temperature": 27.1333, + "experience_temperature": 25.0533, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T02:50:05.796602+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 86.5, + "water_total": 2325.0, + "average_temperature": 27.2667, + "experience_temperature": 25.4595, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T03:00:05.440564+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 86.0, + "water_total": 2385.0, + "average_temperature": 27.1, + "experience_temperature": 25.1929, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T03:10:06.126781+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 86.2, + "water_total": 2446.0, + "average_temperature": 27.2, + "experience_temperature": 25.7257, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T03:20:06.101769+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.4, + "humidity": 87.5, + "water_total": 2482.0, + "average_temperature": 27.2, + "experience_temperature": 25.2, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T03:30:06.604893+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.4, + "humidity": 85.9, + "water_total": 2551.0, + "average_temperature": 27.2333, + "experience_temperature": 24.9133, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T03:40:06.353124+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 0.6, + "humidity": 85.7, + "water_total": 2597.0, + "average_temperature": 26.9, + "experience_temperature": 27.6829, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T03:50:05.835401+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 0.6, + "humidity": 86.2, + "water_total": 2645.0, + "average_temperature": 26.9667, + "experience_temperature": 27.8495, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T04:00:05.595490+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 0.9, + "humidity": 86.5, + "water_total": 2688.0, + "average_temperature": 27.0, + "experience_temperature": 26.7643, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T04:10:05.995523+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 0.7, + "humidity": 85.5, + "water_total": 2703.0, + "average_temperature": 26.9333, + "experience_temperature": 27.2833, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T04:20:06.056899+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 0.7, + "humidity": 85.7, + "water_total": 2703.0, + "average_temperature": 27.0, + "experience_temperature": 27.39, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T04:30:05.781264+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 0.6, + "humidity": 85.4, + "water_total": 2703.0, + "average_temperature": 26.8667, + "experience_temperature": 27.5895, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T04:40:05.879632+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.0, + "humidity": 86.1, + "water_total": 2708.0, + "average_temperature": 27.0, + "experience_temperature": 26.2914, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T04:50:06.661423+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 0.6, + "humidity": 85.2, + "water_total": 2708.0, + "average_temperature": 26.9333, + "experience_temperature": 27.6162, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T05:00:05.774602+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 0.6, + "humidity": 86.3, + "water_total": 2708.0, + "average_temperature": 26.8667, + "experience_temperature": 27.7695, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T05:10:07.205059+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 0.6, + "humidity": 85.0, + "water_total": 2708.0, + "average_temperature": 26.9333, + "experience_temperature": 27.5762, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T05:20:06.566953+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 0.6, + "humidity": 85.3, + "water_total": 2786.0, + "average_temperature": 26.9333, + "experience_temperature": 27.6362, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T05:30:05.933309+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 0.6, + "humidity": 84.8, + "water_total": 2867.0, + "average_temperature": 26.9, + "experience_temperature": 27.5029, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T05:40:06.404774+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 85.1, + "water_total": 2922.0, + "average_temperature": 27.1333, + "experience_temperature": 25.0462, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T05:50:06.458006+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 86.7, + "water_total": 2995.0, + "average_temperature": 27.1333, + "experience_temperature": 25.3662, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T06:00:05.806289+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 0.6, + "humidity": 83.9, + "water_total": 3056.0, + "average_temperature": 26.7667, + "experience_temperature": 27.1895, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T06:10:05.856840+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 0.5, + "humidity": 85.3, + "water_total": 3106.0, + "average_temperature": 26.8, + "experience_temperature": 27.8957, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T06:20:05.464675+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 0.6, + "humidity": 86.5, + "water_total": 3180.0, + "average_temperature": 26.8333, + "experience_temperature": 27.7762, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T06:30:06.038941+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 0.6, + "humidity": 86.2, + "water_total": 3212.0, + "average_temperature": 26.9333, + "experience_temperature": 27.8162, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T06:40:06.071207+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 86.0, + "water_total": 3245.0, + "average_temperature": 26.9333, + "experience_temperature": 25.419, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T06:50:10.274323+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 0.8, + "humidity": 85.8, + "water_total": 3283.0, + "average_temperature": 26.9, + "experience_temperature": 26.9171, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T07:00:06.635503+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 0.8, + "humidity": 85.8, + "water_total": 3283.0, + "average_temperature": 26.9, + "experience_temperature": 26.9171, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T07:10:08.507537+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 85.6, + "water_total": 3360.0, + "average_temperature": 27.3, + "experience_temperature": 25.7057, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T07:20:06.502388+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 84.6, + "water_total": 3426.0, + "average_temperature": 27.5333, + "experience_temperature": 25.3462, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T07:30:07.753595+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 84.1, + "water_total": 3469.0, + "average_temperature": 27.8667, + "experience_temperature": 25.9724, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T07:40:06.143443+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 82.6, + "water_total": 3503.0, + "average_temperature": 28.4333, + "experience_temperature": 25.8462, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T07:50:06.175645+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.7, + "humidity": 82.7, + "water_total": 3563.0, + "average_temperature": 29.0, + "experience_temperature": 24.8614, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T08:00:06.127248+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.8, + "humidity": 79.4, + "water_total": 3613.0, + "average_temperature": 29.0, + "experience_temperature": 23.8086, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T08:10:06.795997+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.8, + "humidity": 79.4, + "water_total": 3613.0, + "average_temperature": 29.0, + "experience_temperature": 23.8086, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T08:20:07.679100+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.8, + "humidity": 80.1, + "water_total": 3656.0, + "average_temperature": 29.4333, + "experience_temperature": 24.3819, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T08:30:07.680613+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.8, + "humidity": 75.8, + "water_total": 3762.0, + "average_temperature": 29.7333, + "experience_temperature": 23.8219, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T08:40:06.876740+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.8, + "humidity": 75.1, + "water_total": 3807.0, + "average_temperature": 29.9333, + "experience_temperature": 23.8819, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T08:50:06.971643+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.1, + "humidity": 74.4, + "water_total": 3848.0, + "average_temperature": 30.5333, + "experience_temperature": 23.1633, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T09:00:06.044443+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.0, + "humidity": 72.6, + "water_total": 3885.0, + "average_temperature": 30.9, + "experience_temperature": 23.5629, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T09:10:06.619122+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.4, + "humidity": 72.0, + "water_total": 3934.0, + "average_temperature": 30.9667, + "experience_temperature": 21.9381, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T09:20:07.026984+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.5, + "humidity": 71.1, + "water_total": 3977.0, + "average_temperature": 30.9667, + "experience_temperature": 21.3652, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T09:30:07.494652+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.7, + "humidity": 71.5, + "water_total": 4012.0, + "average_temperature": 31.0333, + "experience_temperature": 20.7262, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T09:40:06.603435+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.4, + "humidity": 71.5, + "water_total": 4049.0, + "average_temperature": 31.3667, + "experience_temperature": 22.2381, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T09:50:06.538054+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.4, + "humidity": 70.7, + "water_total": 4103.0, + "average_temperature": 31.6, + "experience_temperature": 22.3114, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T10:00:07.299221+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.5, + "humidity": 70.0, + "water_total": 4165.0, + "average_temperature": 32.0, + "experience_temperature": 22.1786, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T10:10:06.318522+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.5, + "humidity": 69.5, + "water_total": 4214.0, + "average_temperature": 31.9667, + "experience_temperature": 22.0452, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T10:20:06.407785+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.7, + "humidity": 68.4, + "water_total": 4242.0, + "average_temperature": 31.7, + "experience_temperature": 20.7729, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T10:30:07.437805+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.5, + "humidity": 68.8, + "water_total": 4292.0, + "average_temperature": 32.1667, + "experience_temperature": 22.1052, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T10:40:06.582615+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.7, + "humidity": 68.7, + "water_total": 4333.0, + "average_temperature": 32.1667, + "experience_temperature": 21.2995, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T10:50:07.243395+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.7, + "humidity": 67.7, + "water_total": 4372.0, + "average_temperature": 32.0667, + "experience_temperature": 20.9995, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T11:00:06.731500+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.9, + "humidity": 68.7, + "water_total": 4415.0, + "average_temperature": 32.7, + "experience_temperature": 21.0471, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T11:10:07.093843+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.8, + "humidity": 68.5, + "water_total": 4460.0, + "average_temperature": 32.4667, + "experience_temperature": 21.1667, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T11:20:07.133751+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.5, + "humidity": 68.2, + "water_total": 4502.0, + "average_temperature": 32.3667, + "experience_temperature": 22.1852, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T11:30:06.231496+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.3, + "humidity": 68.0, + "water_total": 4544.0, + "average_temperature": 32.3, + "experience_temperature": 22.8643, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T11:40:08.544420+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.7, + "humidity": 68.2, + "water_total": 4586.0, + "average_temperature": 32.0333, + "experience_temperature": 21.0662, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T11:50:08.355207+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.6, + "humidity": 67.4, + "water_total": 4627.0, + "average_temperature": 32.8667, + "experience_temperature": 22.1324, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T12:00:09.231232+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.8, + "humidity": 66.5, + "water_total": 4666.0, + "average_temperature": 32.4667, + "experience_temperature": 20.7667, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T12:10:06.503032+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.6, + "humidity": 66.7, + "water_total": 4718.0, + "average_temperature": 32.2333, + "experience_temperature": 21.359, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T12:20:06.099856+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.6, + "humidity": 66.7, + "water_total": 4718.0, + "average_temperature": 32.2333, + "experience_temperature": 21.359, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T12:30:11.016142+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.4, + "humidity": 65.9, + "water_total": 4797.0, + "average_temperature": 32.2, + "experience_temperature": 21.9514, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T12:40:06.304243+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.9, + "humidity": 64.7, + "water_total": 4838.0, + "average_temperature": 32.2, + "experience_temperature": 19.7471, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T12:50:06.828426+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 3.1, + "humidity": 64.4, + "water_total": 4883.0, + "average_temperature": 33.3667, + "experience_temperature": 20.0681, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T13:00:05.733442+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 3.0, + "humidity": 64.9, + "water_total": 4933.0, + "average_temperature": 33.2, + "experience_temperature": 20.3943, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T13:10:06.958287+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.7, + "humidity": 67.0, + "water_total": 4981.0, + "average_temperature": 32.4667, + "experience_temperature": 21.2595, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T13:20:09.646804+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 3.0, + "humidity": 70.3, + "water_total": 5022.0, + "average_temperature": 32.2667, + "experience_temperature": 20.541, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T13:30:06.639400+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.5, + "humidity": 74.1, + "water_total": 5050.0, + "average_temperature": 31.4333, + "experience_temperature": 22.4319, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T13:40:08.266774+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.5, + "humidity": 74.1, + "water_total": 5050.0, + "average_temperature": 31.4333, + "experience_temperature": 22.4319, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T13:50:07.576077+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.6, + "humidity": 75.5, + "water_total": 5113.0, + "average_temperature": 31.1667, + "experience_temperature": 22.0524, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T14:10:07.009143+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.6, + "humidity": 75.0, + "water_total": 5216.0, + "average_temperature": 30.3667, + "experience_temperature": 25.081, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T14:20:06.532805+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.1, + "humidity": 74.6, + "water_total": 5248.0, + "average_temperature": 30.1, + "experience_temperature": 22.77, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T14:30:06.655080+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.3, + "humidity": 75.2, + "water_total": 5281.0, + "average_temperature": 30.1, + "experience_temperature": 22.1043, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T14:40:07.784344+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.1, + "humidity": 75.5, + "water_total": 5310.0, + "average_temperature": 30.0333, + "experience_temperature": 22.8833, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T14:50:08.147371+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.0, + "humidity": 74.5, + "water_total": 5342.0, + "average_temperature": 30.0667, + "experience_temperature": 23.1095, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T15:10:07.193268+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.1, + "humidity": 75.4, + "water_total": 5403.0, + "average_temperature": 29.6333, + "experience_temperature": 22.4633, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T15:20:07.354715+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.3, + "humidity": 74.0, + "water_total": 5437.0, + "average_temperature": 29.5667, + "experience_temperature": 21.331, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T15:30:08.389432+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.8, + "humidity": 73.7, + "water_total": 5466.0, + "average_temperature": 29.8, + "experience_temperature": 23.4686, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T15:40:08.727789+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.0, + "humidity": 71.5, + "water_total": 5515.0, + "average_temperature": 30.1333, + "experience_temperature": 22.5762, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T15:50:06.356875+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.5, + "humidity": 72.2, + "water_total": 5537.0, + "average_temperature": 30.3333, + "experience_temperature": 20.9519, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T16:10:06.844318+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.5, + "humidity": 74.1, + "water_total": 5614.0, + "average_temperature": 30.6, + "experience_temperature": 21.5986, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T16:20:07.267903+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.6, + "humidity": 74.2, + "water_total": 5662.0, + "average_temperature": 30.4667, + "experience_temperature": 21.0924, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T16:30:06.656642+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.3, + "humidity": 73.8, + "water_total": 5727.0, + "average_temperature": 30.4333, + "experience_temperature": 22.1576, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T16:40:07.737250+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.9, + "humidity": 75.7, + "water_total": 5795.0, + "average_temperature": 30.2, + "experience_temperature": 23.8757, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T16:50:10.326400+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.2, + "humidity": 75.6, + "water_total": 5846.0, + "average_temperature": 30.1333, + "experience_temperature": 22.6105, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T17:10:07.282952+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.9, + "humidity": 76.7, + "water_total": 5973.0, + "average_temperature": 29.8667, + "experience_temperature": 23.7424, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T17:20:10.760038+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.4, + "humidity": 76.4, + "water_total": 6025.0, + "average_temperature": 29.6667, + "experience_temperature": 21.5181, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T17:30:06.298292+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.1, + "humidity": 76.8, + "water_total": 6070.0, + "average_temperature": 29.5667, + "experience_temperature": 22.6767, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T17:40:06.763024+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.8, + "humidity": 78.4, + "water_total": 6113.0, + "average_temperature": 29.2667, + "experience_temperature": 23.8752, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T17:50:06.788814+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.9, + "humidity": 76.3, + "water_total": 6169.0, + "average_temperature": 29.1667, + "experience_temperature": 22.9624, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T18:00:06.546490+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.9, + "humidity": 77.7, + "water_total": 6222.0, + "average_temperature": 28.7667, + "experience_temperature": 22.8424, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T18:10:06.325739+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 2.0, + "humidity": 79.4, + "water_total": 6257.0, + "average_temperature": 28.3, + "experience_temperature": 22.3229, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T18:20:08.220090+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.8, + "humidity": 79.6, + "water_total": 6297.0, + "average_temperature": 28.2333, + "experience_temperature": 23.0819, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T18:30:06.712151+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.8, + "humidity": 81.1, + "water_total": 6332.0, + "average_temperature": 28.3, + "experience_temperature": 23.4486, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T18:40:06.257470+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.8, + "humidity": 80.9, + "water_total": 6370.0, + "average_temperature": 28.2, + "experience_temperature": 23.3086, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T18:50:06.487340+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.8, + "humidity": 80.7, + "water_total": 6404.0, + "average_temperature": 28.3333, + "experience_temperature": 23.4019, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T19:00:06.073702+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.9, + "humidity": 80.9, + "water_total": 6430.0, + "average_temperature": 28.2667, + "experience_temperature": 22.9824, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T19:10:07.042992+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.9, + "humidity": 82.1, + "water_total": 6483.0, + "average_temperature": 28.0667, + "experience_temperature": 23.0224, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T19:20:07.296489+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.9, + "humidity": 83.7, + "water_total": 6522.0, + "average_temperature": 27.8, + "experience_temperature": 23.0757, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T19:30:07.803900+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.6, + "humidity": 83.1, + "water_total": 6552.0, + "average_temperature": 27.9333, + "experience_temperature": 24.2676, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T19:40:06.472784+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.8, + "humidity": 83.6, + "water_total": 6592.0, + "average_temperature": 27.9667, + "experience_temperature": 23.6152, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T19:50:06.813463+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.4, + "humidity": 84.1, + "water_total": 6627.0, + "average_temperature": 27.6, + "experience_temperature": 24.92, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T20:00:09.145958+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.4, + "humidity": 83.4, + "water_total": 6679.0, + "average_temperature": 27.2667, + "experience_temperature": 24.4467, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T20:10:06.673016+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.5, + "humidity": 83.7, + "water_total": 6730.0, + "average_temperature": 27.2333, + "experience_temperature": 24.0805, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T20:20:06.978085+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 86.5, + "water_total": 6761.0, + "average_temperature": 26.7333, + "experience_temperature": 25.319, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T20:30:09.827758+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 86.1, + "water_total": 6811.0, + "average_temperature": 26.9333, + "experience_temperature": 25.0462, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T20:40:05.850705+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.4, + "humidity": 87.0, + "water_total": 6868.0, + "average_temperature": 26.9333, + "experience_temperature": 24.8333, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T20:50:07.571666+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 87.3, + "water_total": 6920.0, + "average_temperature": 26.8333, + "experience_temperature": 25.1862, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T21:00:07.068264+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.4, + "humidity": 87.3, + "water_total": 6958.0, + "average_temperature": 26.7, + "experience_temperature": 24.66, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T21:10:06.812688+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 86.4, + "water_total": 7029.0, + "average_temperature": 27.4, + "experience_temperature": 25.5729, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T21:20:06.632617+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 87.6, + "water_total": 7100.0, + "average_temperature": 26.7, + "experience_temperature": 25.1129, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T21:30:06.377171+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 88.7, + "water_total": 7142.0, + "average_temperature": 26.7, + "experience_temperature": 25.3329, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T21:40:06.166609+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 88.8, + "water_total": 7182.0, + "average_temperature": 26.7, + "experience_temperature": 25.3529, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T21:50:06.541558+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 88.2, + "water_total": 7226.0, + "average_temperature": 26.8333, + "experience_temperature": 25.3662, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T22:00:06.666984+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 87.8, + "water_total": 7279.0, + "average_temperature": 26.9667, + "experience_temperature": 25.8124, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T22:10:07.108406+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 87.5, + "water_total": 7327.0, + "average_temperature": 26.7333, + "experience_temperature": 25.519, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T22:20:06.695159+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 87.5, + "water_total": 7375.0, + "average_temperature": 26.6, + "experience_temperature": 24.9929, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T22:30:07.108467+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 87.6, + "water_total": 7421.0, + "average_temperature": 26.5667, + "experience_temperature": 25.3724, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T22:40:08.511556+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 88.7, + "water_total": 7461.0, + "average_temperature": 26.5667, + "experience_temperature": 25.1995, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T22:50:07.282592+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 87.3, + "water_total": 7497.0, + "average_temperature": 26.7, + "experience_temperature": 25.0529, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T23:00:09.231823+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 87.7, + "water_total": 7576.0, + "average_temperature": 26.5667, + "experience_temperature": 25.3924, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T23:10:06.304325+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 88.0, + "water_total": 7602.0, + "average_temperature": 26.1, + "experience_temperature": 24.5929, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T23:20:06.826048+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.3, + "humidity": 88.9, + "water_total": 7602.0, + "average_temperature": 25.9667, + "experience_temperature": 24.6395, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T23:30:08.189401+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 88.9, + "water_total": 7602.0, + "average_temperature": 25.9667, + "experience_temperature": 25.0324, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T23:40:06.638042+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 89.1, + "water_total": 7602.0, + "average_temperature": 26.0333, + "experience_temperature": 25.139, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-15T23:50:06.496020+07:00", + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 89.0, + "water_total": 7602.0, + "average_temperature": 25.9333, + "experience_temperature": 25.019, + "chill_factor": 3.9286 + }, + { + "timestamp": "2026-06-16T00:00:06.238078+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 88.9, + "water_total": 7602.0, + "average_temperature": 25.9333, + "experience_temperature": 25.1705, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T00:10:07.388981+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 88.9, + "water_total": 7602.0, + "average_temperature": 25.9333, + "experience_temperature": 25.1705, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T00:20:08.772935+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 87.4, + "water_total": 7687.0, + "average_temperature": 26.4333, + "experience_temperature": 25.3705, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T00:30:06.560896+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.3, + "humidity": 87.6, + "water_total": 7742.0, + "average_temperature": 26.3333, + "experience_temperature": 24.9319, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T00:40:05.803472+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 87.5, + "water_total": 7798.0, + "average_temperature": 26.4, + "experience_temperature": 25.3571, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T00:50:05.508779+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 88.4, + "water_total": 7853.0, + "average_temperature": 26.5, + "experience_temperature": 25.6371, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T01:00:05.596366+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 88.4, + "water_total": 7853.0, + "average_temperature": 26.5, + "experience_temperature": 25.6371, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T01:10:05.535057+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 86.9, + "water_total": 7964.0, + "average_temperature": 26.5333, + "experience_temperature": 25.3705, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T01:20:06.635089+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 88.0, + "water_total": 8017.0, + "average_temperature": 26.3667, + "experience_temperature": 25.4238, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T01:30:05.379943+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 86.8, + "water_total": 8059.0, + "average_temperature": 26.4667, + "experience_temperature": 25.2838, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T01:40:05.702991+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.3, + "humidity": 87.2, + "water_total": 8101.0, + "average_temperature": 26.8, + "experience_temperature": 25.3186, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T01:50:05.800167+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.3, + "humidity": 86.7, + "water_total": 8178.0, + "average_temperature": 26.9, + "experience_temperature": 25.3186, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T02:00:05.499741+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 87.8, + "water_total": 8227.0, + "average_temperature": 26.9, + "experience_temperature": 25.9171, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T02:20:06.592373+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.3, + "humidity": 87.4, + "water_total": 8342.0, + "average_temperature": 26.6667, + "experience_temperature": 25.2252, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T02:30:06.529112+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 87.7, + "water_total": 8377.0, + "average_temperature": 26.6333, + "experience_temperature": 25.6305, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T02:40:06.328748+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 87.7, + "water_total": 8419.0, + "average_temperature": 26.6333, + "experience_temperature": 25.6305, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T02:50:06.008936+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 88.5, + "water_total": 8475.0, + "average_temperature": 26.8, + "experience_temperature": 25.9571, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T03:00:07.189607+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.3, + "humidity": 88.8, + "water_total": 8519.0, + "average_temperature": 26.6, + "experience_temperature": 25.4386, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T03:10:06.454310+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.3, + "humidity": 88.5, + "water_total": 8558.0, + "average_temperature": 26.4333, + "experience_temperature": 25.2119, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T03:20:06.450590+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 88.9, + "water_total": 8597.0, + "average_temperature": 26.5667, + "experience_temperature": 25.8038, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T03:50:06.285641+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.7, + "humidity": 72.6, + "water_total": 8597.0, + "average_temperature": 30.9, + "experience_temperature": 24.9843, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T04:00:05.916158+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.7, + "humidity": 72.6, + "water_total": 8597.0, + "average_temperature": 30.9, + "experience_temperature": 24.9843, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T04:20:06.332335+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 89.5, + "water_total": 8817.0, + "average_temperature": 25.8667, + "experience_temperature": 25.2238, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T04:30:06.333503+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 89.4, + "water_total": 8817.0, + "average_temperature": 26.0, + "experience_temperature": 25.3371, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T04:40:06.294260+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 89.7, + "water_total": 8817.0, + "average_temperature": 26.0333, + "experience_temperature": 25.4305, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T04:50:06.093407+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 89.9, + "water_total": 8822.0, + "average_temperature": 25.8667, + "experience_temperature": 25.3038, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T05:00:06.825169+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 89.9, + "water_total": 8822.0, + "average_temperature": 25.7667, + "experience_temperature": 25.2038, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T05:10:06.745421+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 89.8, + "water_total": 8822.0, + "average_temperature": 26.1667, + "experience_temperature": 25.5838, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T05:20:06.777896+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 89.1, + "water_total": 8874.0, + "average_temperature": 26.0333, + "experience_temperature": 25.3105, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T05:30:05.971347+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 89.6, + "water_total": 8926.0, + "average_temperature": 25.7333, + "experience_temperature": 25.1105, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T05:40:06.337952+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.3, + "humidity": 89.5, + "water_total": 8951.0, + "average_temperature": 25.5333, + "experience_temperature": 24.5119, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T05:50:06.287862+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 90.0, + "water_total": 8971.0, + "average_temperature": 25.7333, + "experience_temperature": 25.1905, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T06:00:05.757943+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.3, + "humidity": 90.3, + "water_total": 8991.0, + "average_temperature": 25.6667, + "experience_temperature": 24.8052, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T06:10:08.123260+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 89.8, + "water_total": 9023.0, + "average_temperature": 25.6333, + "experience_temperature": 25.0505, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T06:20:06.541216+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 89.7, + "water_total": 9049.0, + "average_temperature": 25.4667, + "experience_temperature": 24.8638, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T06:30:06.138093+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.3, + "humidity": 90.6, + "water_total": 9102.0, + "average_temperature": 26.1667, + "experience_temperature": 25.3652, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T06:40:07.618095+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 89.0, + "water_total": 9198.0, + "average_temperature": 25.6333, + "experience_temperature": 24.8905, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T06:50:06.744988+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 89.9, + "water_total": 9252.0, + "average_temperature": 25.8, + "experience_temperature": 25.2371, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T07:00:08.319481+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 89.9, + "water_total": 9252.0, + "average_temperature": 25.8, + "experience_temperature": 25.2371, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T07:10:06.508028+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 91.2, + "water_total": 9339.0, + "average_temperature": 25.8333, + "experience_temperature": 25.5305, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T07:20:06.461139+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.3, + "humidity": 89.9, + "water_total": 9381.0, + "average_temperature": 26.4333, + "experience_temperature": 25.4919, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T07:30:08.269907+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.3, + "humidity": 88.2, + "water_total": 9460.0, + "average_temperature": 26.6333, + "experience_temperature": 25.3519, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T07:40:07.170245+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 87.3, + "water_total": 9518.0, + "average_temperature": 27.0, + "experience_temperature": 25.9171, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T07:50:06.147687+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 85.9, + "water_total": 9569.0, + "average_temperature": 27.2667, + "experience_temperature": 25.9038, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T08:00:06.437843+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.8, + "humidity": 84.5, + "water_total": 9640.0, + "average_temperature": 27.8667, + "experience_temperature": 23.9524, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T08:10:06.870356+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.8, + "humidity": 84.5, + "water_total": 9640.0, + "average_temperature": 27.8667, + "experience_temperature": 23.9524, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T08:20:08.386162+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.4, + "humidity": 83.0, + "water_total": 9754.0, + "average_temperature": 28.6333, + "experience_temperature": 25.9333, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T08:30:06.760363+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.3, + "humidity": 79.9, + "water_total": 9813.0, + "average_temperature": 29.0333, + "experience_temperature": 22.3062, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T08:40:06.185109+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.6, + "humidity": 79.1, + "water_total": 9849.0, + "average_temperature": 29.4333, + "experience_temperature": 25.1962, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T08:50:06.333062+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.0, + "humidity": 76.9, + "water_total": 9897.0, + "average_temperature": 29.6667, + "experience_temperature": 23.4752, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T09:00:06.542520+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.9, + "humidity": 78.0, + "water_total": 9937.0, + "average_temperature": 29.8, + "experience_temperature": 24.2071, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T09:10:06.526211+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.8, + "humidity": 78.4, + "water_total": 9982.0, + "average_temperature": 29.7667, + "experience_temperature": 24.6324, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T09:20:07.074058+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.9, + "humidity": 78.2, + "water_total": 10039.0, + "average_temperature": 30.3, + "experience_temperature": 24.7471, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T09:30:07.337511+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.5, + "humidity": 75.3, + "water_total": 10077.0, + "average_temperature": 30.7333, + "experience_temperature": 22.329, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T09:40:06.189160+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.6, + "humidity": 73.3, + "water_total": 10136.0, + "average_temperature": 30.9333, + "experience_temperature": 21.7505, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T09:50:06.879712+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.0, + "humidity": 72.4, + "water_total": 10187.0, + "average_temperature": 31.0667, + "experience_temperature": 23.9752, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T10:00:06.101390+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.5, + "humidity": 73.9, + "water_total": 10238.0, + "average_temperature": 31.4667, + "experience_temperature": 22.7824, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T10:10:06.191753+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.5, + "humidity": 72.2, + "water_total": 10288.0, + "average_temperature": 31.5667, + "experience_temperature": 22.5424, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T10:20:06.858554+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.4, + "humidity": 71.2, + "water_total": 10318.0, + "average_temperature": 31.6333, + "experience_temperature": 22.7876, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T10:30:06.440015+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.5, + "humidity": 69.7, + "water_total": 10371.0, + "average_temperature": 31.8333, + "experience_temperature": 22.309, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T10:40:06.211130+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.5, + "humidity": 70.5, + "water_total": 10430.0, + "average_temperature": 31.9333, + "experience_temperature": 22.569, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T10:50:06.368071+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.5, + "humidity": 70.7, + "water_total": 10486.0, + "average_temperature": 32.0667, + "experience_temperature": 22.7424, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T11:00:06.985145+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.9, + "humidity": 68.9, + "water_total": 10527.0, + "average_temperature": 32.4, + "experience_temperature": 21.2014, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T11:10:05.659416+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.8, + "humidity": 67.7, + "water_total": 10570.0, + "average_temperature": 32.0333, + "experience_temperature": 20.9733, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T11:20:05.303918+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 3.0, + "humidity": 67.0, + "water_total": 10622.0, + "average_temperature": 32.6333, + "experience_temperature": 20.6762, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T11:30:05.663482+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 3.1, + "humidity": 66.9, + "water_total": 10672.0, + "average_temperature": 32.4, + "experience_temperature": 20.0443, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T11:40:05.448129+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.8, + "humidity": 65.5, + "water_total": 10708.0, + "average_temperature": 32.3333, + "experience_temperature": 20.8333, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T11:50:07.761155+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.8, + "humidity": 65.5, + "water_total": 10708.0, + "average_temperature": 32.3333, + "experience_temperature": 20.8333, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T12:00:08.035380+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.6, + "humidity": 67.6, + "water_total": 10755.0, + "average_temperature": 32.6333, + "experience_temperature": 22.3105, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T12:10:07.032912+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 3.0, + "humidity": 66.6, + "water_total": 10848.0, + "average_temperature": 32.0667, + "experience_temperature": 20.0295, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T12:20:05.683848+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 3.2, + "humidity": 69.0, + "water_total": 10901.0, + "average_temperature": 32.4333, + "experience_temperature": 20.119, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T12:30:06.720403+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 3.0, + "humidity": 68.2, + "water_total": 10947.0, + "average_temperature": 32.4333, + "experience_temperature": 20.7162, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T12:40:05.907240+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.5, + "humidity": 67.3, + "water_total": 10990.0, + "average_temperature": 31.8333, + "experience_temperature": 21.829, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T12:50:06.385432+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.9, + "humidity": 66.5, + "water_total": 11034.0, + "average_temperature": 32.2, + "experience_temperature": 20.5214, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T13:00:05.485672+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.9, + "humidity": 67.5, + "water_total": 11085.0, + "average_temperature": 32.5333, + "experience_temperature": 21.0548, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T13:10:05.946734+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 3.0, + "humidity": 68.6, + "water_total": 11122.0, + "average_temperature": 32.0, + "experience_temperature": 20.3629, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T13:20:06.004727+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.6, + "humidity": 68.9, + "water_total": 11164.0, + "average_temperature": 31.8667, + "experience_temperature": 21.8038, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T13:30:06.160006+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 3.0, + "humidity": 68.5, + "water_total": 11201.0, + "average_temperature": 31.9667, + "experience_temperature": 20.3095, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T13:40:05.360963+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.7, + "humidity": 69.6, + "water_total": 11242.0, + "average_temperature": 32.3, + "experience_temperature": 21.9986, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T13:50:05.682175+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 3.0, + "humidity": 67.7, + "water_total": 11286.0, + "average_temperature": 32.3333, + "experience_temperature": 20.5162, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T14:10:06.406855+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 3.0, + "humidity": 68.8, + "water_total": 11386.0, + "average_temperature": 32.8333, + "experience_temperature": 21.2362, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T14:20:05.418446+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 3.0, + "humidity": 68.8, + "water_total": 11386.0, + "average_temperature": 32.8333, + "experience_temperature": 21.2362, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T14:30:08.167853+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.6, + "humidity": 69.1, + "water_total": 11478.0, + "average_temperature": 32.1333, + "experience_temperature": 22.1105, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T14:40:06.827856+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.6, + "humidity": 69.1, + "water_total": 11478.0, + "average_temperature": 32.1333, + "experience_temperature": 22.1105, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T14:50:05.806026+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.6, + "humidity": 67.3, + "water_total": 11527.0, + "average_temperature": 32.5, + "experience_temperature": 22.1171, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T15:10:05.992847+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 3.0, + "humidity": 68.5, + "water_total": 11653.0, + "average_temperature": 32.4333, + "experience_temperature": 20.7762, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T15:20:05.798989+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 3.2, + "humidity": 66.8, + "water_total": 11704.0, + "average_temperature": 32.4, + "experience_temperature": 19.6457, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T15:30:06.347114+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.7, + "humidity": 67.3, + "water_total": 11757.0, + "average_temperature": 32.3333, + "experience_temperature": 21.5719, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T15:40:05.732054+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 3.2, + "humidity": 65.9, + "water_total": 11802.0, + "average_temperature": 32.1667, + "experience_temperature": 19.2324, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T15:50:06.158473+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.5, + "humidity": 68.4, + "water_total": 11882.0, + "average_temperature": 31.8333, + "experience_temperature": 22.049, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T16:10:05.776096+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.8, + "humidity": 67.2, + "water_total": 11985.0, + "average_temperature": 32.2, + "experience_temperature": 21.04, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T16:20:07.643769+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 3.7, + "humidity": 67.0, + "water_total": 12048.0, + "average_temperature": 31.9333, + "experience_temperature": 17.3262, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T16:30:06.471860+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.5, + "humidity": 67.7, + "water_total": 12104.0, + "average_temperature": 31.8667, + "experience_temperature": 21.9424, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T16:40:05.537446+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.7, + "humidity": 67.0, + "water_total": 12158.0, + "average_temperature": 31.4667, + "experience_temperature": 20.6452, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T16:50:06.195848+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.4, + "humidity": 67.5, + "water_total": 12204.0, + "average_temperature": 31.3667, + "experience_temperature": 21.781, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T17:10:06.056755+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.5, + "humidity": 67.6, + "water_total": 37.0, + "average_temperature": 30.8333, + "experience_temperature": 20.889, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T17:20:06.111020+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.5, + "humidity": 68.8, + "water_total": 77.0, + "average_temperature": 30.8333, + "experience_temperature": 21.129, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T17:30:05.845097+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.5, + "humidity": 69.8, + "water_total": 108.0, + "average_temperature": 30.4667, + "experience_temperature": 20.9624, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T17:40:05.391769+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.4, + "humidity": 72.6, + "water_total": 147.0, + "average_temperature": 30.5, + "experience_temperature": 21.9343, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T17:50:06.985225+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.2, + "humidity": 73.1, + "water_total": 228.0, + "average_temperature": 30.1, + "experience_temperature": 22.3914, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T18:00:06.831115+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.3, + "humidity": 72.9, + "water_total": 272.0, + "average_temperature": 29.8667, + "experience_temperature": 21.7395, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T18:10:06.061529+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.3, + "humidity": 72.9, + "water_total": 272.0, + "average_temperature": 29.8667, + "experience_temperature": 21.7395, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T18:20:06.309675+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.0, + "humidity": 73.1, + "water_total": 342.0, + "average_temperature": 29.7, + "experience_temperature": 22.7486, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T18:30:05.483261+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 2.1, + "humidity": 73.7, + "water_total": 373.0, + "average_temperature": 29.6333, + "experience_temperature": 22.4233, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T18:40:06.232112+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.7, + "humidity": 75.5, + "water_total": 408.0, + "average_temperature": 29.3, + "experience_temperature": 23.9643, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T18:50:05.117302+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.7, + "humidity": 75.7, + "water_total": 445.0, + "average_temperature": 29.2333, + "experience_temperature": 23.9376, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T19:00:06.351177+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.7, + "humidity": 76.2, + "water_total": 494.0, + "average_temperature": 29.1333, + "experience_temperature": 23.9376, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T19:10:05.838321+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.7, + "humidity": 76.2, + "water_total": 494.0, + "average_temperature": 29.1333, + "experience_temperature": 23.9376, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T19:20:05.897129+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.9, + "humidity": 76.7, + "water_total": 571.0, + "average_temperature": 29.1333, + "experience_temperature": 23.2805, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T19:30:07.857427+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.7, + "humidity": 78.1, + "water_total": 611.0, + "average_temperature": 29.0, + "experience_temperature": 24.1843, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T19:40:05.532138+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.8, + "humidity": 77.9, + "water_total": 650.0, + "average_temperature": 28.7667, + "experience_temperature": 23.5324, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T19:50:05.868808+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.8, + "humidity": 78.9, + "water_total": 685.0, + "average_temperature": 28.8, + "experience_temperature": 23.7657, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T20:00:07.191177+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.8, + "humidity": 79.8, + "water_total": 718.0, + "average_temperature": 28.5333, + "experience_temperature": 23.679, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T20:10:09.198404+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.6, + "humidity": 80.5, + "water_total": 757.0, + "average_temperature": 28.3333, + "experience_temperature": 24.3762, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T20:20:05.477366+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.8, + "humidity": 81.0, + "water_total": 800.0, + "average_temperature": 28.2667, + "experience_temperature": 23.6524, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T20:30:06.174209+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.9, + "humidity": 79.4, + "water_total": 841.0, + "average_temperature": 27.9333, + "experience_temperature": 22.6205, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T20:40:07.324730+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.7, + "humidity": 79.9, + "water_total": 868.0, + "average_temperature": 28.0, + "experience_temperature": 23.5443, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T20:50:06.122495+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.8, + "humidity": 81.1, + "water_total": 890.0, + "average_temperature": 27.8, + "experience_temperature": 23.2057, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T21:00:06.136383+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.8, + "humidity": 81.0, + "water_total": 911.0, + "average_temperature": 27.7667, + "experience_temperature": 23.1524, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T21:10:06.368749+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.7, + "humidity": 80.8, + "water_total": 938.0, + "average_temperature": 27.7333, + "experience_temperature": 23.4576, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T21:20:07.473794+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.8, + "humidity": 81.7, + "water_total": 972.0, + "average_temperature": 27.9, + "experience_temperature": 23.4257, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T21:30:05.251333+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.8, + "humidity": 81.7, + "water_total": 972.0, + "average_temperature": 27.9, + "experience_temperature": 23.4257, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T21:40:06.054440+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.6, + "humidity": 80.3, + "water_total": 1047.0, + "average_temperature": 27.8, + "experience_temperature": 23.8029, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T21:50:06.780192+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.9, + "humidity": 81.6, + "water_total": 1069.0, + "average_temperature": 27.4333, + "experience_temperature": 22.5605, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T22:00:06.105142+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.9, + "humidity": 81.6, + "water_total": 1069.0, + "average_temperature": 27.4333, + "experience_temperature": 22.5605, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T22:10:06.645327+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.8, + "humidity": 81.9, + "water_total": 1135.0, + "average_temperature": 27.6667, + "experience_temperature": 23.2324, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T22:20:06.842407+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.6, + "humidity": 82.5, + "water_total": 1201.0, + "average_temperature": 27.3667, + "experience_temperature": 23.8095, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T22:30:06.096419+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.3, + "humidity": 83.2, + "water_total": 1258.0, + "average_temperature": 27.3, + "experience_temperature": 25.0186, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T22:40:07.634773+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.8, + "humidity": 82.9, + "water_total": 1321.0, + "average_temperature": 27.3333, + "experience_temperature": 23.099, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T22:50:06.192785+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.3, + "humidity": 81.8, + "water_total": 1382.0, + "average_temperature": 27.1667, + "experience_temperature": 24.6052, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T23:00:06.445809+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.3, + "humidity": 81.8, + "water_total": 1382.0, + "average_temperature": 27.1667, + "experience_temperature": 24.6052, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T23:10:06.254540+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 82.6, + "water_total": 1479.0, + "average_temperature": 27.1333, + "experience_temperature": 25.1105, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T23:20:06.881222+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.3, + "humidity": 82.3, + "water_total": 1530.0, + "average_temperature": 27.0333, + "experience_temperature": 24.5719, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T23:30:06.685303+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 83.3, + "water_total": 1561.0, + "average_temperature": 26.8667, + "experience_temperature": 24.9838, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T23:40:06.376661+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.2, + "humidity": 83.5, + "water_total": 1561.0, + "average_temperature": 26.7333, + "experience_temperature": 24.8905, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-16T23:50:06.230833+07:00", + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.1, + "humidity": 83.7, + "water_total": 1561.0, + "average_temperature": 26.8333, + "experience_temperature": 25.409, + "chill_factor": 3.7857 + }, + { + "timestamp": "2026-06-17T00:00:06.570128+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.3, + "humidity": 83.6, + "water_total": 1561.0, + "average_temperature": 26.8667, + "experience_temperature": 24.851, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T00:10:06.221074+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.4, + "humidity": 84.3, + "water_total": 1561.0, + "average_temperature": 27.1667, + "experience_temperature": 24.9267, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T00:20:07.238441+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.4, + "humidity": 83.3, + "water_total": 1641.0, + "average_temperature": 27.0, + "experience_temperature": 24.56, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T00:30:06.585269+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.2, + "humidity": 84.0, + "water_total": 1715.0, + "average_temperature": 26.6333, + "experience_temperature": 25.0619, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T00:40:06.378509+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.4, + "humidity": 84.7, + "water_total": 1748.0, + "average_temperature": 26.3333, + "experience_temperature": 24.1733, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T00:50:07.040389+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.3, + "humidity": 84.7, + "water_total": 1776.0, + "average_temperature": 26.3333, + "experience_temperature": 24.5376, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T01:00:07.279092+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.2, + "humidity": 85.2, + "water_total": 1824.0, + "average_temperature": 26.5, + "experience_temperature": 25.1686, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T01:10:08.847479+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.3, + "humidity": 85.7, + "water_total": 1888.0, + "average_temperature": 26.4333, + "experience_temperature": 24.8376, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T01:20:06.363243+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.3, + "humidity": 86.0, + "water_total": 1939.0, + "average_temperature": 26.1, + "experience_temperature": 24.5643, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T01:30:07.062919+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.2, + "humidity": 85.3, + "water_total": 1995.0, + "average_temperature": 26.2667, + "experience_temperature": 24.9552, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T01:40:06.360265+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.2, + "humidity": 85.9, + "water_total": 2044.0, + "average_temperature": 26.4333, + "experience_temperature": 25.2419, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T01:50:06.881479+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.2, + "humidity": 87.5, + "water_total": 2083.0, + "average_temperature": 26.4, + "experience_temperature": 25.5286, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T02:00:06.127683+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.3, + "humidity": 86.6, + "water_total": 2117.0, + "average_temperature": 26.3667, + "experience_temperature": 24.951, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T02:10:06.475837+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.3, + "humidity": 84.1, + "water_total": 2165.0, + "average_temperature": 26.4333, + "experience_temperature": 24.5176, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T02:20:06.440138+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.1, + "humidity": 84.8, + "water_total": 2229.0, + "average_temperature": 26.1333, + "experience_temperature": 25.0862, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T02:40:06.147401+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.2, + "humidity": 86.4, + "water_total": 2290.0, + "average_temperature": 25.7667, + "experience_temperature": 24.6752, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T02:50:06.455296+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.2, + "humidity": 87.2, + "water_total": 2316.0, + "average_temperature": 25.7667, + "experience_temperature": 24.8352, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T03:00:06.462618+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.4, + "humidity": 86.7, + "water_total": 2347.0, + "average_temperature": 25.5667, + "experience_temperature": 23.8067, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T03:10:06.627923+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.3, + "humidity": 87.1, + "water_total": 2374.0, + "average_temperature": 25.5667, + "experience_temperature": 24.251, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T03:20:06.602813+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.0, + "humidity": 87.6, + "water_total": 2421.0, + "average_temperature": 25.6333, + "experience_temperature": 25.5105, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T03:30:05.637444+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.5, + "humidity": 88.7, + "water_total": 2473.0, + "average_temperature": 25.5333, + "experience_temperature": 23.809, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T03:40:05.953748+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.2, + "humidity": 89.4, + "water_total": 2516.0, + "average_temperature": 25.1667, + "experience_temperature": 24.6752, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T03:50:05.761341+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.3, + "humidity": 88.6, + "water_total": 2542.0, + "average_temperature": 25.1667, + "experience_temperature": 24.151, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T04:00:05.565912+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.2, + "humidity": 87.6, + "water_total": 2568.0, + "average_temperature": 25.2333, + "experience_temperature": 24.3819, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T04:10:05.487731+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.2, + "humidity": 87.0, + "water_total": 2594.0, + "average_temperature": 25.2, + "experience_temperature": 24.2286, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T04:20:05.665866+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.3, + "humidity": 86.4, + "water_total": 2619.0, + "average_temperature": 25.1667, + "experience_temperature": 23.711, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T04:30:05.808753+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.3, + "humidity": 87.2, + "water_total": 2656.0, + "average_temperature": 25.3, + "experience_temperature": 24.0043, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T04:40:08.006590+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.1, + "humidity": 86.9, + "water_total": 2684.0, + "average_temperature": 25.1667, + "experience_temperature": 24.5395, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T04:50:05.477881+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.2, + "humidity": 87.4, + "water_total": 2714.0, + "average_temperature": 25.2333, + "experience_temperature": 24.3419, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T05:00:06.803023+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.4, + "humidity": 87.1, + "water_total": 2750.0, + "average_temperature": 25.1333, + "experience_temperature": 23.4533, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T05:10:07.024476+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.3, + "humidity": 87.9, + "water_total": 2758.0, + "average_temperature": 24.9333, + "experience_temperature": 23.7776, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T05:20:06.180723+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.2, + "humidity": 86.1, + "water_total": 2785.0, + "average_temperature": 24.9333, + "experience_temperature": 23.7819, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T05:30:07.075398+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.2, + "humidity": 87.3, + "water_total": 2799.0, + "average_temperature": 24.9333, + "experience_temperature": 24.0219, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T05:40:07.670334+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 0.7, + "humidity": 87.2, + "water_total": 2815.0, + "average_temperature": 24.8333, + "experience_temperature": 25.7233, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T05:50:08.015508+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.3, + "humidity": 88.5, + "water_total": 2847.0, + "average_temperature": 25.0, + "experience_temperature": 23.9643, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T06:00:06.807200+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.2, + "humidity": 87.0, + "water_total": 2883.0, + "average_temperature": 25.4, + "experience_temperature": 24.4286, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T06:10:07.193668+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.2, + "humidity": 88.0, + "water_total": 2904.0, + "average_temperature": 25.0333, + "experience_temperature": 24.2619, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T06:20:06.568484+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.3, + "humidity": 87.0, + "water_total": 2935.0, + "average_temperature": 25.0667, + "experience_temperature": 23.731, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T06:30:06.880519+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.3, + "humidity": 87.0, + "water_total": 2935.0, + "average_temperature": 25.0667, + "experience_temperature": 23.731, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T06:40:06.606925+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.3, + "humidity": 87.3, + "water_total": 3038.0, + "average_temperature": 24.8667, + "experience_temperature": 23.591, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T06:50:07.228542+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.4, + "humidity": 87.4, + "water_total": 3055.0, + "average_temperature": 24.9667, + "experience_temperature": 23.3467, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T07:00:05.907135+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.1, + "humidity": 87.2, + "water_total": 3082.0, + "average_temperature": 25.3, + "experience_temperature": 24.7329, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T07:10:05.395072+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.1, + "humidity": 87.2, + "water_total": 3082.0, + "average_temperature": 25.3, + "experience_temperature": 24.7329, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T07:20:06.128521+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.1, + "humidity": 87.3, + "water_total": 3151.0, + "average_temperature": 25.8333, + "experience_temperature": 25.2862, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T07:30:05.899044+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.2, + "humidity": 86.8, + "water_total": 3188.0, + "average_temperature": 26.2667, + "experience_temperature": 25.2552, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T07:40:05.653271+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.3, + "humidity": 86.2, + "water_total": 3230.0, + "average_temperature": 26.5333, + "experience_temperature": 25.0376, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T07:50:05.625300+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.1, + "humidity": 85.4, + "water_total": 3287.0, + "average_temperature": 27.1, + "experience_temperature": 26.1729, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T08:00:05.984694+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.1, + "humidity": 85.4, + "water_total": 3287.0, + "average_temperature": 27.1, + "experience_temperature": 26.1729, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T08:10:05.853100+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.1, + "humidity": 83.9, + "water_total": 3329.0, + "average_temperature": 27.2667, + "experience_temperature": 26.0395, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T08:20:08.281177+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.7, + "humidity": 80.6, + "water_total": 3445.0, + "average_temperature": 28.3667, + "experience_temperature": 24.2938, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T08:30:06.145676+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.3, + "humidity": 77.6, + "water_total": 3503.0, + "average_temperature": 28.7, + "experience_temperature": 25.4843, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T08:40:05.840813+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.9, + "humidity": 75.9, + "water_total": 3551.0, + "average_temperature": 29.2667, + "experience_temperature": 23.5252, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T08:50:10.091734+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.9, + "humidity": 74.1, + "water_total": 3598.0, + "average_temperature": 29.5667, + "experience_temperature": 23.4652, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T09:00:06.068311+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.0, + "humidity": 73.6, + "water_total": 3650.0, + "average_temperature": 29.8333, + "experience_temperature": 23.2676, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T09:10:06.714259+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.8, + "humidity": 72.7, + "water_total": 3701.0, + "average_temperature": 30.1333, + "experience_temperature": 24.1162, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T09:20:05.684828+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.2, + "humidity": 73.8, + "water_total": 3745.0, + "average_temperature": 30.3333, + "experience_temperature": 23.079, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T09:30:08.019148+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.1, + "humidity": 70.5, + "water_total": 3795.0, + "average_temperature": 30.3, + "experience_temperature": 22.75, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T09:40:07.262473+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.3, + "humidity": 70.1, + "water_total": 3843.0, + "average_temperature": 30.5333, + "experience_temperature": 22.1748, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T09:50:07.342592+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.4, + "humidity": 70.4, + "water_total": 3899.0, + "average_temperature": 31.3, + "experience_temperature": 22.6371, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T10:00:06.762163+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.5, + "humidity": 69.0, + "water_total": 3960.0, + "average_temperature": 31.3667, + "experience_temperature": 22.0595, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T10:10:06.673088+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.5, + "humidity": 68.4, + "water_total": 4013.0, + "average_temperature": 31.3333, + "experience_temperature": 21.9062, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T10:20:11.251806+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.5, + "humidity": 67.4, + "water_total": 4057.0, + "average_temperature": 31.1333, + "experience_temperature": 21.5062, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T10:30:06.363938+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.5, + "humidity": 66.6, + "water_total": 4098.0, + "average_temperature": 31.5333, + "experience_temperature": 21.7462, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T10:40:06.399430+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.6, + "humidity": 64.2, + "water_total": 4153.0, + "average_temperature": 32.3667, + "experience_temperature": 21.7352, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T10:50:06.060009+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.8, + "humidity": 64.3, + "water_total": 4208.0, + "average_temperature": 32.0, + "experience_temperature": 20.66, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T11:00:06.760082+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.6, + "humidity": 63.7, + "water_total": 4265.0, + "average_temperature": 32.2, + "experience_temperature": 21.4686, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T11:10:06.773762+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.6, + "humidity": 64.8, + "water_total": 4305.0, + "average_temperature": 31.6333, + "experience_temperature": 21.1219, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T11:20:06.432495+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.7, + "humidity": 62.5, + "water_total": 4363.0, + "average_temperature": 32.0, + "experience_temperature": 20.6643, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T11:30:06.676306+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.9, + "humidity": 62.5, + "water_total": 4400.0, + "average_temperature": 32.1333, + "experience_temperature": 20.069, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T11:40:06.012053+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.7, + "humidity": 61.7, + "water_total": 4458.0, + "average_temperature": 32.2667, + "experience_temperature": 20.771, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T11:50:05.779246+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.6, + "humidity": 64.4, + "water_total": 4502.0, + "average_temperature": 32.1, + "experience_temperature": 21.5086, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T12:00:05.711295+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.9, + "humidity": 64.5, + "water_total": 4544.0, + "average_temperature": 32.1333, + "experience_temperature": 20.469, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T12:10:06.998067+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.5, + "humidity": 65.2, + "water_total": 4585.0, + "average_temperature": 31.8333, + "experience_temperature": 21.7662, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T12:20:06.333697+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.6, + "humidity": 62.2, + "water_total": 4622.0, + "average_temperature": 32.4333, + "experience_temperature": 21.4019, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T12:30:06.978108+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.9, + "humidity": 63.3, + "water_total": 4677.0, + "average_temperature": 32.1, + "experience_temperature": 20.1957, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T12:40:06.038899+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.6, + "humidity": 63.3, + "water_total": 4727.0, + "average_temperature": 31.8667, + "experience_temperature": 21.0552, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T12:50:07.779413+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 3.1, + "humidity": 61.5, + "water_total": 4768.0, + "average_temperature": 32.4, + "experience_temperature": 19.4071, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T13:00:08.277543+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.2, + "humidity": 61.7, + "water_total": 4823.0, + "average_temperature": 32.1667, + "experience_temperature": 22.4924, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T13:10:06.085024+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.6, + "humidity": 61.8, + "water_total": 4860.0, + "average_temperature": 32.2667, + "experience_temperature": 21.1552, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T13:20:07.560673+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.6, + "humidity": 61.8, + "water_total": 4860.0, + "average_temperature": 32.2667, + "experience_temperature": 21.1552, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T13:30:06.917921+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.8, + "humidity": 61.0, + "water_total": 4962.0, + "average_temperature": 32.2333, + "experience_temperature": 20.2333, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T13:40:06.387195+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.7, + "humidity": 62.2, + "water_total": 5005.0, + "average_temperature": 32.1667, + "experience_temperature": 20.771, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T13:50:06.524222+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.9, + "humidity": 61.4, + "water_total": 5043.0, + "average_temperature": 32.4333, + "experience_temperature": 20.149, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T14:10:07.217180+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.5, + "humidity": 58.5, + "water_total": 5130.0, + "average_temperature": 31.9333, + "experience_temperature": 20.5262, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T14:20:09.558069+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 3.0, + "humidity": 59.1, + "water_total": 5167.0, + "average_temperature": 32.1, + "experience_temperature": 18.9914, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T14:30:06.040903+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 3.0, + "humidity": 59.1, + "water_total": 5199.0, + "average_temperature": 32.2667, + "experience_temperature": 19.1581, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T14:40:06.445868+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 3.0, + "humidity": 61.0, + "water_total": 5256.0, + "average_temperature": 32.2667, + "experience_temperature": 19.5381, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T14:50:10.333932+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 3.0, + "humidity": 61.0, + "water_total": 5256.0, + "average_temperature": 32.2667, + "experience_temperature": 19.5381, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T15:10:06.442013+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.4, + "humidity": 60.4, + "water_total": 5292.0, + "average_temperature": 32.0, + "experience_temperature": 21.3371, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T15:20:06.531921+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.5, + "humidity": 61.7, + "water_total": 5417.0, + "average_temperature": 32.1667, + "experience_temperature": 21.3995, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T15:30:06.182811+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.5, + "humidity": 62.2, + "water_total": 5477.0, + "average_temperature": 31.6667, + "experience_temperature": 20.9995, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T15:40:08.183224+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.5, + "humidity": 62.2, + "water_total": 5477.0, + "average_temperature": 31.6667, + "experience_temperature": 20.9995, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T15:50:06.737441+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.5, + "humidity": 63.8, + "water_total": 5581.0, + "average_temperature": 32.2333, + "experience_temperature": 21.8862, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T16:10:06.927464+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.7, + "humidity": 68.0, + "water_total": 5682.0, + "average_temperature": 31.7333, + "experience_temperature": 21.4976, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T16:20:07.724315+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.6, + "humidity": 69.8, + "water_total": 5717.0, + "average_temperature": 31.6, + "experience_temperature": 22.0886, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T16:30:06.646733+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.6, + "humidity": 69.8, + "water_total": 5717.0, + "average_temperature": 31.6, + "experience_temperature": 22.0886, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T16:40:07.211822+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.8, + "humidity": 69.7, + "water_total": 5774.0, + "average_temperature": 31.2667, + "experience_temperature": 21.0067, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T16:50:06.394373+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.5, + "humidity": 70.0, + "water_total": 5815.0, + "average_temperature": 31.4, + "experience_temperature": 22.2929, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T17:10:07.921985+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.5, + "humidity": 70.2, + "water_total": 45.0, + "average_temperature": 31.1333, + "experience_temperature": 22.0662, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T17:20:06.134989+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.3, + "humidity": 69.8, + "water_total": 104.0, + "average_temperature": 30.8667, + "experience_temperature": 22.4481, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T17:30:06.402622+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.4, + "humidity": 70.9, + "water_total": 147.0, + "average_temperature": 30.7, + "experience_temperature": 22.1371, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T17:40:06.114447+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.1, + "humidity": 71.2, + "water_total": 187.0, + "average_temperature": 30.5667, + "experience_temperature": 23.1567, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T17:50:08.275279+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.6, + "humidity": 72.4, + "water_total": 222.0, + "average_temperature": 30.3, + "experience_temperature": 21.3086, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T18:00:07.046246+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.3, + "humidity": 73.1, + "water_total": 227.0, + "average_temperature": 30.1333, + "experience_temperature": 22.3748, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T18:10:05.840205+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.0, + "humidity": 73.3, + "water_total": 227.0, + "average_temperature": 30.0, + "experience_temperature": 23.3743, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T18:20:06.428403+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.2, + "humidity": 73.8, + "water_total": 227.0, + "average_temperature": 29.9, + "experience_temperature": 22.6457, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T18:30:07.748824+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.0, + "humidity": 71.9, + "water_total": 227.0, + "average_temperature": 30.0, + "experience_temperature": 23.0943, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T18:40:07.224505+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.5, + "humidity": 72.6, + "water_total": 227.0, + "average_temperature": 30.4667, + "experience_temperature": 21.8795, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T18:50:05.668233+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.5, + "humidity": 74.2, + "water_total": 324.0, + "average_temperature": 30.0667, + "experience_temperature": 21.7995, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T19:00:08.967759+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.3, + "humidity": 74.4, + "water_total": 402.0, + "average_temperature": 30.0333, + "experience_temperature": 22.5348, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T19:10:06.807424+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.4, + "humidity": 72.9, + "water_total": 466.0, + "average_temperature": 30.1333, + "experience_temperature": 21.9705, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T19:20:07.063877+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.3, + "humidity": 71.7, + "water_total": 512.0, + "average_temperature": 30.2, + "experience_temperature": 22.1614, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T19:30:08.766056+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.1, + "humidity": 74.1, + "water_total": 572.0, + "average_temperature": 29.8667, + "experience_temperature": 23.0367, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T19:40:07.511177+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.2, + "humidity": 72.7, + "water_total": 631.0, + "average_temperature": 29.9667, + "experience_temperature": 22.4924, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T19:50:08.135454+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.0, + "humidity": 73.3, + "water_total": 692.0, + "average_temperature": 29.8667, + "experience_temperature": 23.241, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T20:00:09.545653+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.9, + "humidity": 74.6, + "water_total": 741.0, + "average_temperature": 29.6, + "experience_temperature": 23.5986, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T20:10:06.183353+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.8, + "humidity": 73.9, + "water_total": 799.0, + "average_temperature": 29.6333, + "experience_temperature": 23.8562, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T20:20:06.586687+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.0, + "humidity": 73.6, + "water_total": 840.0, + "average_temperature": 29.7, + "experience_temperature": 23.1343, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T20:30:06.531314+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.9, + "humidity": 73.8, + "water_total": 884.0, + "average_temperature": 29.4, + "experience_temperature": 23.2386, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T20:40:07.167831+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.2, + "humidity": 74.8, + "water_total": 925.0, + "average_temperature": 29.5, + "experience_temperature": 22.4457, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T20:50:07.662964+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.9, + "humidity": 75.3, + "water_total": 959.0, + "average_temperature": 29.4, + "experience_temperature": 23.5386, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T21:00:07.730043+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.1, + "humidity": 76.6, + "water_total": 1007.0, + "average_temperature": 29.4, + "experience_temperature": 23.07, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T21:10:08.176661+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.0, + "humidity": 77.1, + "water_total": 1023.0, + "average_temperature": 29.3333, + "experience_temperature": 23.4676, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T21:20:07.277178+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.1, + "humidity": 77.7, + "water_total": 1060.0, + "average_temperature": 29.0333, + "experience_temperature": 22.9233, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T21:30:07.703704+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 2.1, + "humidity": 77.7, + "water_total": 1060.0, + "average_temperature": 29.0333, + "experience_temperature": 22.9233, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T21:40:06.478368+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.8, + "humidity": 79.0, + "water_total": 1171.0, + "average_temperature": 29.0333, + "experience_temperature": 24.2762, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T21:50:09.685929+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.7, + "humidity": 79.6, + "water_total": 1217.0, + "average_temperature": 28.7, + "experience_temperature": 24.4271, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T22:00:07.784273+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.6, + "humidity": 78.8, + "water_total": 1262.0, + "average_temperature": 28.7333, + "experience_temperature": 24.6648, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T22:10:06.591969+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.7, + "humidity": 78.2, + "water_total": 1315.0, + "average_temperature": 28.7667, + "experience_temperature": 24.2138, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T22:20:06.530511+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.8, + "humidity": 79.4, + "water_total": 1387.0, + "average_temperature": 28.3667, + "experience_temperature": 23.6895, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T22:30:06.105369+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.8, + "humidity": 80.8, + "water_total": 1445.0, + "average_temperature": 28.0, + "experience_temperature": 23.6029, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T22:40:06.476669+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.9, + "humidity": 81.6, + "water_total": 1479.0, + "average_temperature": 27.9667, + "experience_temperature": 23.3652, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T22:50:08.699073+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.7, + "humidity": 81.0, + "water_total": 1521.0, + "average_temperature": 27.8333, + "experience_temperature": 23.8405, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T23:00:06.586081+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.8, + "humidity": 82.1, + "water_total": 1576.0, + "average_temperature": 27.7667, + "experience_temperature": 23.6295, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T23:10:07.554124+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.7, + "humidity": 80.8, + "water_total": 1617.0, + "average_temperature": 27.7667, + "experience_temperature": 23.7338, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T23:20:08.136256+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.9, + "humidity": 81.7, + "water_total": 1650.0, + "average_temperature": 27.8333, + "experience_temperature": 23.2519, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T23:30:06.562995+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.7, + "humidity": 81.8, + "water_total": 1666.0, + "average_temperature": 27.5, + "experience_temperature": 23.6671, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T23:40:06.502610+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.7, + "humidity": 81.5, + "water_total": 1666.0, + "average_temperature": 27.5667, + "experience_temperature": 23.6738, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-17T23:50:06.671755+07:00", + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.6, + "humidity": 81.3, + "water_total": 1666.0, + "average_temperature": 27.5667, + "experience_temperature": 23.9981, + "chill_factor": 3.6429 + }, + { + "timestamp": "2026-06-18T00:00:06.560261+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.6, + "humidity": 81.3, + "water_total": 1666.0, + "average_temperature": 27.5667, + "experience_temperature": 24.2267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T00:10:05.686759+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.7, + "humidity": 81.8, + "water_total": 1666.0, + "average_temperature": 27.9667, + "experience_temperature": 24.3767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T00:20:06.200875+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.8, + "humidity": 81.4, + "water_total": 1759.0, + "average_temperature": 27.9667, + "experience_temperature": 23.9467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T00:30:05.502979+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.6, + "humidity": 83.1, + "water_total": 1822.0, + "average_temperature": 27.6667, + "experience_temperature": 24.6867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T00:40:06.572224+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.9, + "humidity": 82.6, + "water_total": 1858.0, + "average_temperature": 27.5, + "experience_temperature": 23.37, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T00:50:06.499718+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.8, + "humidity": 83.4, + "water_total": 1901.0, + "average_temperature": 27.6, + "experience_temperature": 23.98, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T01:00:07.089261+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.9, + "humidity": 84.4, + "water_total": 1952.0, + "average_temperature": 27.6667, + "experience_temperature": 23.8967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T01:10:06.168313+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.9, + "humidity": 83.0, + "water_total": 2004.0, + "average_temperature": 27.7667, + "experience_temperature": 23.7167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T01:20:06.616575+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.7, + "humidity": 84.2, + "water_total": 2058.0, + "average_temperature": 27.5667, + "experience_temperature": 24.4567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T01:30:06.319498+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.5, + "humidity": 83.3, + "water_total": 2102.0, + "average_temperature": 27.6333, + "experience_temperature": 25.0433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T01:40:06.310512+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.7, + "humidity": 82.6, + "water_total": 2139.0, + "average_temperature": 27.5333, + "experience_temperature": 24.1033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T01:50:05.657748+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.9, + "humidity": 82.6, + "water_total": 2178.0, + "average_temperature": 27.6667, + "experience_temperature": 23.5367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T02:00:05.741221+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.8, + "humidity": 83.1, + "water_total": 2221.0, + "average_temperature": 27.6667, + "experience_temperature": 23.9867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T02:10:06.125261+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.5, + "humidity": 83.0, + "water_total": 2262.0, + "average_temperature": 27.5667, + "experience_temperature": 24.9167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T02:20:06.145102+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.9, + "humidity": 81.9, + "water_total": 2296.0, + "average_temperature": 27.7333, + "experience_temperature": 23.4633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T02:30:05.856275+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.8, + "humidity": 82.6, + "water_total": 2330.0, + "average_temperature": 27.7, + "experience_temperature": 23.92, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T02:40:07.449368+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.9, + "humidity": 83.1, + "water_total": 2370.0, + "average_temperature": 27.6667, + "experience_temperature": 23.6367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T02:50:06.162985+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.9, + "humidity": 83.1, + "water_total": 2370.0, + "average_temperature": 27.6667, + "experience_temperature": 23.6367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T03:00:05.884457+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.9, + "humidity": 82.2, + "water_total": 2404.0, + "average_temperature": 27.7333, + "experience_temperature": 23.5233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T03:10:06.182230+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.9, + "humidity": 81.6, + "water_total": 2480.0, + "average_temperature": 27.6667, + "experience_temperature": 23.3367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T03:20:06.799656+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.8, + "humidity": 82.8, + "water_total": 2514.0, + "average_temperature": 27.6, + "experience_temperature": 23.86, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T03:30:09.452495+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.8, + "humidity": 83.0, + "water_total": 2554.0, + "average_temperature": 27.5333, + "experience_temperature": 23.8333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T03:40:06.474013+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.7, + "humidity": 82.9, + "water_total": 2585.0, + "average_temperature": 27.5333, + "experience_temperature": 24.1633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T03:50:05.787715+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.8, + "humidity": 82.3, + "water_total": 2618.0, + "average_temperature": 27.4333, + "experience_temperature": 23.5933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T04:00:06.424177+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.8, + "humidity": 82.3, + "water_total": 2618.0, + "average_temperature": 27.4333, + "experience_temperature": 23.5933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T04:10:05.535653+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.7, + "humidity": 83.6, + "water_total": 2677.0, + "average_temperature": 27.1, + "experience_temperature": 23.87, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T04:20:06.042757+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.2, + "humidity": 84.5, + "water_total": 2710.0, + "average_temperature": 26.8333, + "experience_temperature": 25.5333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T04:30:07.321889+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.7, + "humidity": 86.0, + "water_total": 2759.0, + "average_temperature": 27.0333, + "experience_temperature": 24.2833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T04:40:05.701678+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.3, + "humidity": 85.2, + "water_total": 2804.0, + "average_temperature": 26.9, + "experience_temperature": 25.39, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T04:50:06.400809+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.3, + "humidity": 85.4, + "water_total": 2844.0, + "average_temperature": 26.8, + "experience_temperature": 25.33, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T05:00:06.271444+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.4, + "humidity": 86.4, + "water_total": 2884.0, + "average_temperature": 26.5333, + "experience_temperature": 24.9133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T05:10:07.175400+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.4, + "humidity": 85.9, + "water_total": 2911.0, + "average_temperature": 26.6, + "experience_temperature": 24.88, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T05:20:06.362511+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.3, + "humidity": 84.7, + "water_total": 2938.0, + "average_temperature": 26.1667, + "experience_temperature": 24.5567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T05:30:06.214160+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.2, + "humidity": 86.5, + "water_total": 2946.0, + "average_temperature": 26.0667, + "experience_temperature": 25.1667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T05:40:05.814731+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.3, + "humidity": 85.3, + "water_total": 2966.0, + "average_temperature": 25.9, + "experience_temperature": 24.41, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T05:50:05.385260+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.3, + "humidity": 85.3, + "water_total": 2966.0, + "average_temperature": 25.9, + "experience_temperature": 24.41, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T06:00:05.763783+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.1, + "humidity": 85.1, + "water_total": 3071.0, + "average_temperature": 26.3667, + "experience_temperature": 25.5367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T06:10:05.763112+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.3, + "humidity": 85.6, + "water_total": 3111.0, + "average_temperature": 25.9667, + "experience_temperature": 24.5367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T06:20:06.754224+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.3, + "humidity": 85.8, + "water_total": 3158.0, + "average_temperature": 25.8, + "experience_temperature": 24.41, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T06:30:06.418083+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.3, + "humidity": 86.3, + "water_total": 3207.0, + "average_temperature": 25.7667, + "experience_temperature": 24.4767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T06:40:06.202638+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.2, + "humidity": 85.7, + "water_total": 3252.0, + "average_temperature": 25.7667, + "experience_temperature": 24.7067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T06:50:06.560019+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.1, + "humidity": 85.5, + "water_total": 3306.0, + "average_temperature": 25.9667, + "experience_temperature": 25.2167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T07:00:06.315405+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.2, + "humidity": 86.2, + "water_total": 3359.0, + "average_temperature": 26.0667, + "experience_temperature": 25.1067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T07:10:05.746843+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.2, + "humidity": 85.5, + "water_total": 3413.0, + "average_temperature": 26.1, + "experience_temperature": 25.0, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T07:20:06.630040+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.3, + "humidity": 84.2, + "water_total": 3472.0, + "average_temperature": 26.3667, + "experience_temperature": 24.6567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T07:30:12.868990+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.3, + "humidity": 83.3, + "water_total": 3536.0, + "average_temperature": 26.6, + "experience_temperature": 24.71, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T07:40:06.472236+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.2, + "humidity": 82.6, + "water_total": 3616.0, + "average_temperature": 26.8333, + "experience_temperature": 25.1533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T07:50:08.658430+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.5, + "humidity": 80.2, + "water_total": 3670.0, + "average_temperature": 27.2333, + "experience_temperature": 24.0233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T08:00:06.945620+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.5, + "humidity": 80.2, + "water_total": 3670.0, + "average_temperature": 27.2333, + "experience_temperature": 24.0233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T08:10:09.508357+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.4, + "humidity": 79.1, + "water_total": 3741.0, + "average_temperature": 28.1333, + "experience_temperature": 25.0533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T08:20:07.197749+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.4, + "humidity": 79.1, + "water_total": 3741.0, + "average_temperature": 28.1333, + "experience_temperature": 25.0533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T08:30:07.364465+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.2, + "humidity": 76.2, + "water_total": 3858.0, + "average_temperature": 28.8667, + "experience_temperature": 22.4067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T08:40:06.160099+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.9, + "humidity": 76.0, + "water_total": 3907.0, + "average_temperature": 29.2667, + "experience_temperature": 23.8167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T08:50:06.597199+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.9, + "humidity": 76.0, + "water_total": 3907.0, + "average_temperature": 29.2667, + "experience_temperature": 23.8167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T09:00:06.988984+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.0, + "humidity": 73.0, + "water_total": 4021.0, + "average_temperature": 29.7, + "experience_temperature": 23.3, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T09:10:07.178939+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.2, + "humidity": 70.7, + "water_total": 4079.0, + "average_temperature": 30.0, + "experience_temperature": 22.44, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T09:20:07.675161+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.9, + "humidity": 71.0, + "water_total": 4132.0, + "average_temperature": 30.1333, + "experience_temperature": 23.6833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T09:30:06.861049+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.3, + "humidity": 70.6, + "water_total": 4172.0, + "average_temperature": 30.6, + "experience_temperature": 22.67, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T09:40:08.886102+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.5, + "humidity": 68.0, + "water_total": 4229.0, + "average_temperature": 31.0, + "experience_temperature": 21.85, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T09:50:10.460796+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.5, + "humidity": 65.0, + "water_total": 4269.0, + "average_temperature": 31.1333, + "experience_temperature": 21.3833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T10:00:06.424315+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.6, + "humidity": 63.7, + "water_total": 4321.0, + "average_temperature": 31.4667, + "experience_temperature": 21.1067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T10:10:06.432574+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 3.1, + "humidity": 62.5, + "water_total": 4381.0, + "average_temperature": 31.9333, + "experience_temperature": 19.5833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T10:30:09.299695+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.8, + "humidity": 61.5, + "water_total": 4473.0, + "average_temperature": 32.1667, + "experience_temperature": 20.6667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T10:40:07.701188+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 3.0, + "humidity": 62.6, + "water_total": 4533.0, + "average_temperature": 32.3667, + "experience_temperature": 20.3867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T10:50:08.946964+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 3.2, + "humidity": 60.7, + "water_total": 4588.0, + "average_temperature": 32.1, + "experience_temperature": 19.04, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T11:00:10.105647+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.4, + "humidity": 60.1, + "water_total": 4665.0, + "average_temperature": 32.2, + "experience_temperature": 21.82, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T11:10:06.774807+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.7, + "humidity": 59.7, + "water_total": 4739.0, + "average_temperature": 32.1333, + "experience_temperature": 20.6233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T11:20:07.686845+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.6, + "humidity": 60.1, + "water_total": 4794.0, + "average_temperature": 32.3333, + "experience_temperature": 21.2533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T11:30:07.120091+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.9, + "humidity": 61.1, + "water_total": 4889.0, + "average_temperature": 32.1333, + "experience_temperature": 20.2033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T11:40:06.486795+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.8, + "humidity": 59.6, + "water_total": 4959.0, + "average_temperature": 32.3333, + "experience_temperature": 20.4533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T11:50:09.807743+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.1, + "humidity": 60.9, + "water_total": 5006.0, + "average_temperature": 32.0, + "experience_temperature": 22.83, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T12:00:07.372473+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 3.1, + "humidity": 61.0, + "water_total": 5080.0, + "average_temperature": 32.7333, + "experience_temperature": 20.0833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T12:10:06.674508+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.6, + "humidity": 62.0, + "water_total": 5148.0, + "average_temperature": 32.1333, + "experience_temperature": 21.4333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T12:20:07.715470+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.8, + "humidity": 61.9, + "water_total": 5202.0, + "average_temperature": 32.0667, + "experience_temperature": 20.6467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T12:30:06.626743+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 3.1, + "humidity": 63.2, + "water_total": 5263.0, + "average_temperature": 32.0333, + "experience_temperature": 19.8233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T12:40:06.770482+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.5, + "humidity": 61.2, + "water_total": 5314.0, + "average_temperature": 32.3, + "experience_temperature": 21.79, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T12:50:07.746409+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.7, + "humidity": 61.7, + "water_total": 5387.0, + "average_temperature": 32.0333, + "experience_temperature": 20.9233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T13:00:08.247152+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 3.2, + "humidity": 61.2, + "water_total": 5431.0, + "average_temperature": 32.5667, + "experience_temperature": 19.6067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T13:10:09.751375+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 3.0, + "humidity": 61.6, + "water_total": 5501.0, + "average_temperature": 31.8667, + "experience_temperature": 19.6867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T13:20:06.256602+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.9, + "humidity": 60.1, + "water_total": 5564.0, + "average_temperature": 32.4667, + "experience_temperature": 20.3367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T13:30:06.770691+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 3.0, + "humidity": 60.9, + "water_total": 5627.0, + "average_temperature": 32.1667, + "experience_temperature": 19.8467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T13:40:06.970017+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.7, + "humidity": 62.0, + "water_total": 5679.0, + "average_temperature": 32.0, + "experience_temperature": 20.95, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T13:50:06.883044+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.8, + "humidity": 61.2, + "water_total": 5741.0, + "average_temperature": 32.5, + "experience_temperature": 20.94, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T14:10:07.190491+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.8, + "humidity": 61.0, + "water_total": 5867.0, + "average_temperature": 32.1667, + "experience_temperature": 20.5667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T14:20:07.381678+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.8, + "humidity": 61.3, + "water_total": 5925.0, + "average_temperature": 32.0333, + "experience_temperature": 20.4933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T14:30:06.304333+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.5, + "humidity": 61.4, + "water_total": 5962.0, + "average_temperature": 31.7, + "experience_temperature": 21.23, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T14:40:06.703849+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.9, + "humidity": 60.3, + "water_total": 6016.0, + "average_temperature": 32.3667, + "experience_temperature": 20.2767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T14:50:06.732790+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.9, + "humidity": 60.3, + "water_total": 6062.0, + "average_temperature": 32.6667, + "experience_temperature": 20.5767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T15:10:08.458860+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.8, + "humidity": 62.2, + "water_total": 6176.0, + "average_temperature": 32.3667, + "experience_temperature": 21.0067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T15:20:06.237767+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 3.0, + "humidity": 63.4, + "water_total": 6251.0, + "average_temperature": 32.0667, + "experience_temperature": 20.2467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T15:30:09.355785+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.6, + "humidity": 67.8, + "water_total": 6301.0, + "average_temperature": 31.9667, + "experience_temperature": 22.4267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T15:40:06.746955+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.9, + "humidity": 67.5, + "water_total": 6355.0, + "average_temperature": 32.0, + "experience_temperature": 21.35, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T15:50:09.132210+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.7, + "humidity": 67.1, + "water_total": 6423.0, + "average_temperature": 32.0667, + "experience_temperature": 22.0367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T16:10:06.660590+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.5, + "humidity": 67.5, + "water_total": 6531.0, + "average_temperature": 31.8, + "experience_temperature": 22.55, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T16:20:07.073794+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.9, + "humidity": 67.9, + "water_total": 6567.0, + "average_temperature": 31.7667, + "experience_temperature": 21.1967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T16:30:07.034159+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.6, + "humidity": 68.6, + "water_total": 6634.0, + "average_temperature": 31.4333, + "experience_temperature": 22.0533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T16:40:07.361410+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.6, + "humidity": 68.6, + "water_total": 6634.0, + "average_temperature": 31.4333, + "experience_temperature": 22.0533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T16:50:06.957997+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.6, + "humidity": 70.3, + "water_total": 6759.0, + "average_temperature": 31.1333, + "experience_temperature": 22.0933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T17:10:07.105057+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.5, + "humidity": 69.6, + "water_total": 6860.0, + "average_temperature": 30.9667, + "experience_temperature": 22.1367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T17:20:06.866709+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.4, + "humidity": 69.8, + "water_total": 6898.0, + "average_temperature": 30.8, + "experience_temperature": 22.36, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T17:30:06.505053+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.2, + "humidity": 69.8, + "water_total": 6951.0, + "average_temperature": 30.6, + "experience_temperature": 22.86, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T17:40:07.440280+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.5, + "humidity": 71.9, + "water_total": 6998.0, + "average_temperature": 30.2333, + "experience_temperature": 21.8633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T17:50:06.464498+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.5, + "humidity": 72.0, + "water_total": 7014.0, + "average_temperature": 29.8667, + "experience_temperature": 21.5167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T18:00:08.703608+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.5, + "humidity": 72.4, + "water_total": 7019.0, + "average_temperature": 29.7, + "experience_temperature": 21.43, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T18:10:06.570941+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.5, + "humidity": 72.4, + "water_total": 7019.0, + "average_temperature": 29.7, + "experience_temperature": 21.43, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T18:20:06.072117+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.6, + "humidity": 73.1, + "water_total": 7019.0, + "average_temperature": 29.6, + "experience_temperature": 24.62, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T18:30:07.775674+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.1, + "humidity": 72.9, + "water_total": 7023.0, + "average_temperature": 29.5667, + "experience_temperature": 22.7967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T18:40:05.658120+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.6, + "humidity": 73.0, + "water_total": 7023.0, + "average_temperature": 29.6667, + "experience_temperature": 21.1667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T18:50:05.988417+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.9, + "humidity": 74.0, + "water_total": 7111.0, + "average_temperature": 29.5333, + "experience_temperature": 23.6833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T19:00:06.455691+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.2, + "humidity": 74.7, + "water_total": 7191.0, + "average_temperature": 29.3333, + "experience_temperature": 22.5733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T19:10:05.335395+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.2, + "humidity": 74.7, + "water_total": 7191.0, + "average_temperature": 29.3333, + "experience_temperature": 22.5733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T19:20:05.736249+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.0, + "humidity": 76.2, + "water_total": 7301.0, + "average_temperature": 29.0333, + "experience_temperature": 23.2733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T19:30:06.338841+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 2.1, + "humidity": 77.2, + "water_total": 7349.0, + "average_temperature": 29.0333, + "experience_temperature": 23.1233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T19:40:06.627283+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.9, + "humidity": 78.6, + "water_total": 7414.0, + "average_temperature": 28.7667, + "experience_temperature": 23.8367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T19:50:05.195307+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.5, + "humidity": 79.1, + "water_total": 7466.0, + "average_temperature": 28.5333, + "experience_temperature": 25.1033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T20:00:06.667563+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.7, + "humidity": 78.9, + "water_total": 7523.0, + "average_temperature": 28.5667, + "experience_temperature": 24.3967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T20:10:05.641744+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.8, + "humidity": 78.8, + "water_total": 7568.0, + "average_temperature": 28.4667, + "experience_temperature": 23.9267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T20:20:05.995863+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.8, + "humidity": 79.9, + "water_total": 7613.0, + "average_temperature": 28.3, + "experience_temperature": 23.98, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T20:30:09.478432+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.6, + "humidity": 80.1, + "water_total": 7654.0, + "average_temperature": 28.4333, + "experience_temperature": 24.8533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T20:40:05.994864+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.8, + "humidity": 79.9, + "water_total": 7697.0, + "average_temperature": 28.3667, + "experience_temperature": 24.0467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T20:50:05.956643+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.8, + "humidity": 79.6, + "water_total": 7740.0, + "average_temperature": 28.3, + "experience_temperature": 23.92, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T21:00:08.197691+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.9, + "humidity": 80.4, + "water_total": 7783.0, + "average_temperature": 28.0667, + "experience_temperature": 23.4967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T21:10:08.004646+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.9, + "humidity": 81.1, + "water_total": 7816.0, + "average_temperature": 28.0333, + "experience_temperature": 23.6033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T21:20:05.843892+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.5, + "humidity": 81.5, + "water_total": 7853.0, + "average_temperature": 27.9667, + "experience_temperature": 25.0167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T21:30:06.655193+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.7, + "humidity": 81.6, + "water_total": 7911.0, + "average_temperature": 27.7, + "experience_temperature": 24.07, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T21:40:05.385763+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.7, + "humidity": 81.8, + "water_total": 7951.0, + "average_temperature": 27.5, + "experience_temperature": 23.91, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T21:50:06.238098+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.7, + "humidity": 82.7, + "water_total": 7975.0, + "average_temperature": 27.4, + "experience_temperature": 23.99, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T22:00:05.970472+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.9, + "humidity": 83.5, + "water_total": 8001.0, + "average_temperature": 27.1, + "experience_temperature": 23.15, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T22:10:06.260152+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.8, + "humidity": 83.5, + "water_total": 8022.0, + "average_temperature": 27.1333, + "experience_temperature": 23.5333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T22:20:06.289382+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.8, + "humidity": 83.4, + "water_total": 8048.0, + "average_temperature": 26.9, + "experience_temperature": 23.28, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T22:30:05.847181+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.6, + "humidity": 84.0, + "water_total": 8074.0, + "average_temperature": 26.9667, + "experience_temperature": 24.1667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T22:40:06.139524+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.9, + "humidity": 82.6, + "water_total": 8131.0, + "average_temperature": 27.6, + "experience_temperature": 23.47, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T22:50:06.118761+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.6, + "humidity": 82.6, + "water_total": 8164.0, + "average_temperature": 27.1333, + "experience_temperature": 24.0533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T23:00:05.615380+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.6, + "humidity": 82.6, + "water_total": 8164.0, + "average_temperature": 27.1333, + "experience_temperature": 24.0533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T23:10:06.108723+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.7, + "humidity": 84.5, + "water_total": 8245.0, + "average_temperature": 27.0, + "experience_temperature": 23.95, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T23:20:05.734276+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.3, + "humidity": 83.7, + "water_total": 8270.0, + "average_temperature": 26.6333, + "experience_temperature": 24.8233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T23:30:06.587611+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.6, + "humidity": 84.3, + "water_total": 8270.0, + "average_temperature": 26.6667, + "experience_temperature": 23.9267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T23:40:06.240287+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.8, + "humidity": 84.5, + "water_total": 8274.0, + "average_temperature": 26.6333, + "experience_temperature": 23.2333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-18T23:50:06.168864+07:00", + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.4, + "humidity": 84.4, + "water_total": 8274.0, + "average_temperature": 26.5667, + "experience_temperature": 24.5467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T00:00:06.025008+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.8, + "humidity": 85.2, + "water_total": 8274.0, + "average_temperature": 26.5667, + "experience_temperature": 23.3067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T00:10:05.720151+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.7, + "humidity": 84.8, + "water_total": 8274.0, + "average_temperature": 26.7333, + "experience_temperature": 23.7433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T00:20:07.292545+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.7, + "humidity": 84.9, + "water_total": 8372.0, + "average_temperature": 26.7, + "experience_temperature": 23.73, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T00:30:06.018144+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.7, + "humidity": 84.9, + "water_total": 8372.0, + "average_temperature": 26.7, + "experience_temperature": 23.73, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T00:40:06.149476+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.8, + "humidity": 85.2, + "water_total": 8514.0, + "average_temperature": 26.6667, + "experience_temperature": 23.4067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T00:50:05.688243+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.5, + "humidity": 84.9, + "water_total": 8555.0, + "average_temperature": 26.4667, + "experience_temperature": 24.1967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T01:00:07.213054+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.1, + "humidity": 85.4, + "water_total": 8591.0, + "average_temperature": 26.4667, + "experience_temperature": 25.6967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T01:10:06.230632+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 84.7, + "water_total": 8661.0, + "average_temperature": 26.4667, + "experience_temperature": 24.8567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T01:20:06.106441+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 85.5, + "water_total": 8728.0, + "average_temperature": 26.2333, + "experience_temperature": 24.7833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T01:30:06.399896+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.2, + "humidity": 86.0, + "water_total": 8769.0, + "average_temperature": 26.1667, + "experience_temperature": 25.1667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T01:40:06.225242+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.2, + "humidity": 85.8, + "water_total": 8836.0, + "average_temperature": 26.1, + "experience_temperature": 25.06, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T01:50:07.025292+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.2, + "humidity": 85.7, + "water_total": 8889.0, + "average_temperature": 26.0, + "experience_temperature": 24.94, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T02:00:06.117815+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.2, + "humidity": 85.7, + "water_total": 8889.0, + "average_temperature": 26.0, + "experience_temperature": 24.94, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T02:10:05.883133+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 85.8, + "water_total": 9001.0, + "average_temperature": 25.7333, + "experience_temperature": 24.3433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T02:20:06.205328+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 86.7, + "water_total": 9041.0, + "average_temperature": 25.6333, + "experience_temperature": 24.4233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T02:30:06.404328+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.2, + "humidity": 87.7, + "water_total": 9075.0, + "average_temperature": 25.8333, + "experience_temperature": 25.1733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T02:40:06.958984+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.2, + "humidity": 86.0, + "water_total": 9115.0, + "average_temperature": 25.6333, + "experience_temperature": 24.6333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T02:50:06.191887+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.2, + "humidity": 86.5, + "water_total": 9154.0, + "average_temperature": 25.6, + "experience_temperature": 24.7, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T03:00:06.053451+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 86.3, + "water_total": 9188.0, + "average_temperature": 25.5, + "experience_temperature": 24.21, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T03:10:06.228465+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 87.0, + "water_total": 9222.0, + "average_temperature": 25.5667, + "experience_temperature": 24.4167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T03:20:06.372362+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.2, + "humidity": 86.1, + "water_total": 9257.0, + "average_temperature": 25.4667, + "experience_temperature": 24.4867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T03:30:06.751918+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.2, + "humidity": 86.3, + "water_total": 9291.0, + "average_temperature": 25.3333, + "experience_temperature": 24.3933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T03:40:07.177274+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 86.7, + "water_total": 9325.0, + "average_temperature": 25.3, + "experience_temperature": 24.09, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T03:50:05.892877+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.2, + "humidity": 86.7, + "water_total": 9362.0, + "average_temperature": 25.1667, + "experience_temperature": 24.3067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T04:00:07.170516+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 86.3, + "water_total": 9397.0, + "average_temperature": 25.1333, + "experience_temperature": 23.8433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T04:10:06.277060+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.4, + "humidity": 87.7, + "water_total": 9444.0, + "average_temperature": 25.3667, + "experience_temperature": 24.0067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T04:20:06.413456+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 87.7, + "water_total": 9477.0, + "average_temperature": 25.2, + "experience_temperature": 24.19, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T04:30:06.655624+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.2, + "humidity": 87.2, + "water_total": 9520.0, + "average_temperature": 25.1, + "experience_temperature": 24.34, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T04:40:06.550600+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 87.5, + "water_total": 9538.0, + "average_temperature": 24.8, + "experience_temperature": 23.75, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T04:50:07.464760+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.1, + "humidity": 87.5, + "water_total": 9538.0, + "average_temperature": 24.6333, + "experience_temperature": 24.2833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T05:00:06.856074+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 87.5, + "water_total": 9538.0, + "average_temperature": 24.7, + "experience_temperature": 23.65, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T05:10:05.991732+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.2, + "humidity": 85.8, + "water_total": 9591.0, + "average_temperature": 24.9333, + "experience_temperature": 23.8933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T05:20:06.042729+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 87.1, + "water_total": 9629.0, + "average_temperature": 24.7333, + "experience_temperature": 23.6033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T05:30:06.525434+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 86.1, + "water_total": 9644.0, + "average_temperature": 24.5333, + "experience_temperature": 23.2033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T05:40:07.518050+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.2, + "humidity": 86.4, + "water_total": 9658.0, + "average_temperature": 24.5333, + "experience_temperature": 23.6133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T05:50:08.241471+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.4, + "humidity": 86.9, + "water_total": 9673.0, + "average_temperature": 24.5667, + "experience_temperature": 23.0467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T06:00:06.661282+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 86.6, + "water_total": 9694.0, + "average_temperature": 24.5, + "experience_temperature": 23.27, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T06:10:06.391274+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 86.8, + "water_total": 9715.0, + "average_temperature": 24.6, + "experience_temperature": 23.41, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T06:20:06.562666+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.4, + "humidity": 86.7, + "water_total": 9736.0, + "average_temperature": 24.5667, + "experience_temperature": 23.0067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T06:30:06.920774+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 87.0, + "water_total": 9831.0, + "average_temperature": 24.6333, + "experience_temperature": 23.4833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T06:40:06.663042+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.2, + "humidity": 86.9, + "water_total": 9897.0, + "average_temperature": 25.1, + "experience_temperature": 24.28, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T06:50:06.725895+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 86.8, + "water_total": 9941.0, + "average_temperature": 24.5667, + "experience_temperature": 23.3767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T07:00:06.983662+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 87.8, + "water_total": 9976.0, + "average_temperature": 24.6667, + "experience_temperature": 23.6767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T07:10:07.652375+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.1, + "humidity": 86.4, + "water_total": 10031.0, + "average_temperature": 25.0333, + "experience_temperature": 24.4633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T07:20:07.258048+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.1, + "humidity": 86.4, + "water_total": 10100.0, + "average_temperature": 25.4667, + "experience_temperature": 24.8967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T07:30:07.088133+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.2, + "humidity": 85.0, + "water_total": 10180.0, + "average_temperature": 25.8333, + "experience_temperature": 24.6333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T07:40:06.558345+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.3, + "humidity": 84.1, + "water_total": 10255.0, + "average_temperature": 26.1667, + "experience_temperature": 24.4367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T07:50:06.849934+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.8, + "humidity": 84.1, + "water_total": 10323.0, + "average_temperature": 26.5333, + "experience_temperature": 23.0533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T08:00:07.057545+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.8, + "humidity": 84.1, + "water_total": 10323.0, + "average_temperature": 26.5333, + "experience_temperature": 23.0533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T08:10:06.466967+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.9, + "humidity": 83.6, + "water_total": 10373.0, + "average_temperature": 26.9667, + "experience_temperature": 23.0367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T08:20:06.985062+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.4, + "humidity": 79.8, + "water_total": 10495.0, + "average_temperature": 27.8667, + "experience_temperature": 24.9267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T08:30:08.481430+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.5, + "humidity": 78.8, + "water_total": 10575.0, + "average_temperature": 28.3667, + "experience_temperature": 24.8767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T08:40:06.882358+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.8, + "humidity": 76.9, + "water_total": 10655.0, + "average_temperature": 28.6, + "experience_temperature": 23.68, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T08:50:07.780671+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.9, + "humidity": 75.2, + "water_total": 10719.0, + "average_temperature": 29.2667, + "experience_temperature": 23.6567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T09:00:06.872929+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.9, + "humidity": 73.5, + "water_total": 10784.0, + "average_temperature": 29.5, + "experience_temperature": 23.55, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T09:10:08.732288+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.2, + "humidity": 73.1, + "water_total": 10845.0, + "average_temperature": 29.8333, + "experience_temperature": 22.7533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T09:20:08.283882+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.9, + "humidity": 71.5, + "water_total": 10936.0, + "average_temperature": 30.2333, + "experience_temperature": 23.8833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T09:30:06.583295+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.0, + "humidity": 69.7, + "water_total": 10994.0, + "average_temperature": 30.6333, + "experience_temperature": 23.5733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T09:40:06.655461+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.4, + "humidity": 68.7, + "water_total": 11053.0, + "average_temperature": 30.8333, + "experience_temperature": 22.1733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T09:50:07.221218+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.4, + "humidity": 65.4, + "water_total": 11109.0, + "average_temperature": 31.1667, + "experience_temperature": 21.8467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T10:00:06.405071+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.8, + "humidity": 64.1, + "water_total": 11172.0, + "average_temperature": 31.6333, + "experience_temperature": 20.6533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T10:10:06.020961+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 3.0, + "humidity": 62.7, + "water_total": 11245.0, + "average_temperature": 32.0, + "experience_temperature": 20.04, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T10:20:06.478521+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 3.0, + "humidity": 60.3, + "water_total": 11294.0, + "average_temperature": 31.8667, + "experience_temperature": 19.4267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T10:30:07.520532+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.8, + "humidity": 61.0, + "water_total": 11356.0, + "average_temperature": 32.2, + "experience_temperature": 20.6, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T10:40:06.137976+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.7, + "humidity": 59.7, + "water_total": 11432.0, + "average_temperature": 32.2, + "experience_temperature": 20.69, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T10:50:06.024672+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.5, + "humidity": 57.3, + "water_total": 11500.0, + "average_temperature": 32.2333, + "experience_temperature": 20.9433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T11:00:06.926278+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.5, + "humidity": 58.7, + "water_total": 11560.0, + "average_temperature": 32.3333, + "experience_temperature": 21.3233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T11:10:06.220965+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 3.1, + "humidity": 57.1, + "water_total": 11628.0, + "average_temperature": 32.7, + "experience_temperature": 19.27, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T11:20:06.615459+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.7, + "humidity": 55.3, + "water_total": 11699.0, + "average_temperature": 32.4333, + "experience_temperature": 20.0433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T11:30:06.291354+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 3.2, + "humidity": 56.2, + "water_total": 11747.0, + "average_temperature": 32.6667, + "experience_temperature": 18.7067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T11:50:06.152843+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.7, + "humidity": 55.6, + "water_total": 11855.0, + "average_temperature": 32.3333, + "experience_temperature": 20.0033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T12:20:06.064347+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 3.1, + "humidity": 55.6, + "water_total": 11975.0, + "average_temperature": 32.6333, + "experience_temperature": 18.9033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T12:30:06.053203+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 3.0, + "humidity": 57.3, + "water_total": 12001.0, + "average_temperature": 32.9667, + "experience_temperature": 19.9267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T12:40:07.762762+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 3.3, + "humidity": 54.2, + "water_total": 12017.0, + "average_temperature": 32.5333, + "experience_temperature": 17.8233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T12:50:06.224839+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 3.2, + "humidity": 54.1, + "water_total": 12026.0, + "average_temperature": 32.7333, + "experience_temperature": 18.3533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T13:00:06.839575+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 3.2, + "humidity": 54.1, + "water_total": 12026.0, + "average_temperature": 32.7333, + "experience_temperature": 18.3533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T13:10:09.087272+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.7, + "humidity": 55.1, + "water_total": 12046.0, + "average_temperature": 32.9333, + "experience_temperature": 20.5033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T13:20:08.006595+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.9, + "humidity": 53.4, + "water_total": 12051.0, + "average_temperature": 32.8667, + "experience_temperature": 19.3967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T13:30:08.276068+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.7, + "humidity": 53.7, + "water_total": 12056.0, + "average_temperature": 33.1333, + "experience_temperature": 20.4233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T13:40:05.835448+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.9, + "humidity": 54.7, + "water_total": 12065.0, + "average_temperature": 33.2333, + "experience_temperature": 20.0233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T13:50:06.901930+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 3.1, + "humidity": 54.3, + "water_total": 12065.0, + "average_temperature": 32.9333, + "experience_temperature": 18.9433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T14:10:06.145854+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.0, + "humidity": 73.6, + "water_total": 12065.0, + "average_temperature": 29.5, + "experience_temperature": 23.22, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T14:20:07.227029+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 3.2, + "humidity": 53.8, + "water_total": 12085.0, + "average_temperature": 33.2667, + "experience_temperature": 18.8267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T14:30:06.328453+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.7, + "humidity": 54.7, + "water_total": 12137.0, + "average_temperature": 32.8, + "experience_temperature": 20.29, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T14:40:06.380340+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.5, + "humidity": 63.0, + "water_total": 12258.0, + "average_temperature": 32.7667, + "experience_temperature": 22.6167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T14:50:06.762219+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 3.0, + "humidity": 65.1, + "water_total": 12383.0, + "average_temperature": 32.1, + "experience_temperature": 20.62, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T15:10:07.447488+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.9, + "humidity": 68.5, + "water_total": 12576.0, + "average_temperature": 32.0, + "experience_temperature": 21.55, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T15:20:06.547884+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.9, + "humidity": 68.2, + "water_total": 12669.0, + "average_temperature": 32.2333, + "experience_temperature": 21.7233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T15:30:08.108984+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 3.0, + "humidity": 66.9, + "water_total": 12738.0, + "average_temperature": 32.0667, + "experience_temperature": 20.9467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T15:40:08.052870+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 3.1, + "humidity": 67.6, + "water_total": 12808.0, + "average_temperature": 31.8, + "experience_temperature": 20.47, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T15:50:06.338733+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.5, + "humidity": 68.5, + "water_total": 12901.0, + "average_temperature": 31.2, + "experience_temperature": 22.15, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T16:10:06.071794+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 3.0, + "humidity": 68.2, + "water_total": 13070.0, + "average_temperature": 31.7333, + "experience_temperature": 20.8733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T16:20:06.414596+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 3.1, + "humidity": 68.3, + "water_total": 13145.0, + "average_temperature": 31.6667, + "experience_temperature": 20.4767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T16:30:05.743922+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.8, + "humidity": 68.6, + "water_total": 13219.0, + "average_temperature": 31.6333, + "experience_temperature": 21.5533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T16:40:06.254710+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.6, + "humidity": 68.3, + "water_total": 13285.0, + "average_temperature": 31.4667, + "experience_temperature": 22.0267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T16:50:06.503475+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.0, + "humidity": 73.6, + "water_total": 13285.0, + "average_temperature": 29.5, + "experience_temperature": 23.22, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T17:10:05.994298+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.6, + "humidity": 69.1, + "water_total": 78.0, + "average_temperature": 30.9, + "experience_temperature": 21.62, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T17:20:06.795257+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.7, + "humidity": 69.2, + "water_total": 141.0, + "average_temperature": 30.9333, + "experience_temperature": 21.3233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T17:30:05.700670+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.6, + "humidity": 69.9, + "water_total": 203.0, + "average_temperature": 30.6667, + "experience_temperature": 21.5467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T17:40:06.886786+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.1, + "humidity": 70.1, + "water_total": 262.0, + "average_temperature": 30.5, + "experience_temperature": 23.17, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T17:50:06.189726+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.0, + "humidity": 72.0, + "water_total": 320.0, + "average_temperature": 30.3333, + "experience_temperature": 23.7333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T18:00:06.342606+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.3, + "humidity": 72.3, + "water_total": 385.0, + "average_temperature": 30.1667, + "experience_temperature": 22.5767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T18:10:06.264009+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.4, + "humidity": 72.9, + "water_total": 441.0, + "average_temperature": 29.9667, + "experience_temperature": 22.1467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T18:20:07.291290+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.8, + "humidity": 74.2, + "water_total": 495.0, + "average_temperature": 29.5667, + "experience_temperature": 20.6067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T18:30:07.902406+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.3, + "humidity": 74.3, + "water_total": 547.0, + "average_temperature": 29.6333, + "experience_temperature": 22.4433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T18:40:06.243704+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.1, + "humidity": 74.3, + "water_total": 602.0, + "average_temperature": 29.5333, + "experience_temperature": 23.0433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T18:50:06.525634+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.3, + "humidity": 75.5, + "water_total": 658.0, + "average_temperature": 29.4667, + "experience_temperature": 22.5167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T19:00:06.470488+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.9, + "humidity": 75.3, + "water_total": 705.0, + "average_temperature": 29.5667, + "experience_temperature": 23.9767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T19:10:06.550485+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.5, + "humidity": 75.1, + "water_total": 753.0, + "average_temperature": 29.5, + "experience_temperature": 21.77, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T19:20:06.937184+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.5, + "humidity": 75.1, + "water_total": 753.0, + "average_temperature": 29.5, + "experience_temperature": 21.77, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T19:30:06.414076+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.9, + "humidity": 79.6, + "water_total": 836.0, + "average_temperature": 29.2333, + "experience_temperature": 24.5033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T19:40:06.076364+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.9, + "humidity": 80.1, + "water_total": 869.0, + "average_temperature": 29.1667, + "experience_temperature": 24.5367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T19:50:06.068800+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.6, + "humidity": 81.1, + "water_total": 905.0, + "average_temperature": 29.0, + "experience_temperature": 25.62, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T20:00:06.502122+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.2, + "humidity": 80.7, + "water_total": 938.0, + "average_temperature": 28.7667, + "experience_temperature": 23.2067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T20:10:05.923463+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.0, + "humidity": 81.0, + "water_total": 968.0, + "average_temperature": 28.5333, + "experience_temperature": 23.7333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T20:20:06.819520+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.1, + "humidity": 81.6, + "water_total": 1021.0, + "average_temperature": 28.5, + "experience_temperature": 23.47, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T20:30:07.251021+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 2.2, + "humidity": 81.5, + "water_total": 1091.0, + "average_temperature": 28.3667, + "experience_temperature": 22.9667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T20:40:06.323481+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.9, + "humidity": 82.0, + "water_total": 1148.0, + "average_temperature": 28.3333, + "experience_temperature": 24.0833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T20:50:05.632692+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.7, + "humidity": 83.0, + "water_total": 1199.0, + "average_temperature": 28.1667, + "experience_temperature": 24.8167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T21:00:07.583341+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.8, + "humidity": 83.8, + "water_total": 1251.0, + "average_temperature": 28.1667, + "experience_temperature": 24.6267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T21:10:05.862144+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.8, + "humidity": 83.8, + "water_total": 1251.0, + "average_temperature": 28.1667, + "experience_temperature": 24.6267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T21:20:06.056996+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.6, + "humidity": 84.1, + "water_total": 1355.0, + "average_temperature": 27.7, + "experience_temperature": 24.92, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T21:30:05.796666+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.8, + "humidity": 84.3, + "water_total": 1400.0, + "average_temperature": 27.8, + "experience_temperature": 24.36, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T21:40:06.060972+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.6, + "humidity": 84.5, + "water_total": 1451.0, + "average_temperature": 27.4667, + "experience_temperature": 24.7667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T21:50:05.967047+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.5, + "humidity": 85.3, + "water_total": 1493.0, + "average_temperature": 27.6, + "experience_temperature": 25.41, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T22:00:06.727818+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.8, + "humidity": 83.2, + "water_total": 1538.0, + "average_temperature": 27.5667, + "experience_temperature": 23.9067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T22:10:06.830413+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.8, + "humidity": 83.2, + "water_total": 1538.0, + "average_temperature": 27.5667, + "experience_temperature": 23.9067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T22:20:05.727126+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.6, + "humidity": 83.7, + "water_total": 1646.0, + "average_temperature": 27.6333, + "experience_temperature": 24.7733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T22:30:06.768682+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.8, + "humidity": 83.7, + "water_total": 1715.0, + "average_temperature": 27.5667, + "experience_temperature": 24.0067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T22:40:06.702373+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.8, + "humidity": 82.4, + "water_total": 1784.0, + "average_temperature": 27.7667, + "experience_temperature": 23.9467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T22:50:06.388282+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.6, + "humidity": 82.8, + "water_total": 1847.0, + "average_temperature": 27.6, + "experience_temperature": 24.56, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T23:00:05.906701+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.8, + "humidity": 84.3, + "water_total": 1902.0, + "average_temperature": 27.5333, + "experience_temperature": 24.0933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T23:10:07.398449+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.7, + "humidity": 83.1, + "water_total": 1963.0, + "average_temperature": 27.5333, + "experience_temperature": 24.2033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T23:20:06.070945+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.9, + "humidity": 84.6, + "water_total": 2026.0, + "average_temperature": 27.4, + "experience_temperature": 23.67, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T23:30:06.849503+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.7, + "humidity": 85.1, + "water_total": 2058.0, + "average_temperature": 26.9667, + "experience_temperature": 24.0367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T23:40:06.537045+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.9, + "humidity": 85.3, + "water_total": 2076.0, + "average_temperature": 26.8, + "experience_temperature": 23.21, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-19T23:50:06.686608+07:00", + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.6, + "humidity": 85.3, + "water_total": 2091.0, + "average_temperature": 26.8333, + "experience_temperature": 24.2933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T00:00:06.779181+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 85.6, + "water_total": 2105.0, + "average_temperature": 26.9333, + "experience_temperature": 24.1033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T00:10:07.473454+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.8, + "humidity": 85.6, + "water_total": 2122.0, + "average_temperature": 27.0667, + "experience_temperature": 23.8867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T00:20:06.011052+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.8, + "humidity": 84.5, + "water_total": 2210.0, + "average_temperature": 27.2333, + "experience_temperature": 23.8333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T00:30:06.285892+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.6, + "humidity": 85.2, + "water_total": 2281.0, + "average_temperature": 27.1667, + "experience_temperature": 24.6067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T00:40:05.986117+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.6, + "humidity": 85.2, + "water_total": 2281.0, + "average_temperature": 27.1667, + "experience_temperature": 24.6067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T00:50:05.923858+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.9, + "humidity": 85.5, + "water_total": 2373.0, + "average_temperature": 27.0333, + "experience_temperature": 23.4833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T01:00:06.094369+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 85.6, + "water_total": 2413.0, + "average_temperature": 26.9667, + "experience_temperature": 24.1367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T01:10:06.383872+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 85.3, + "water_total": 2463.0, + "average_temperature": 27.0333, + "experience_temperature": 24.1433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T01:20:05.476285+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.8, + "humidity": 86.2, + "water_total": 2518.0, + "average_temperature": 26.9667, + "experience_temperature": 23.9067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T01:30:06.030322+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.6, + "humidity": 84.6, + "water_total": 2609.0, + "average_temperature": 27.0333, + "experience_temperature": 24.3533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T01:40:06.035391+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 86.3, + "water_total": 2669.0, + "average_temperature": 26.6, + "experience_temperature": 23.91, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T01:50:06.104886+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.8, + "humidity": 86.4, + "water_total": 2710.0, + "average_temperature": 26.5, + "experience_temperature": 23.48, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T02:00:05.769622+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 86.8, + "water_total": 2743.0, + "average_temperature": 26.3333, + "experience_temperature": 23.7433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T02:10:06.109867+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 87.4, + "water_total": 2776.0, + "average_temperature": 26.3333, + "experience_temperature": 23.8633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T02:20:06.445538+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.9, + "humidity": 86.5, + "water_total": 2808.0, + "average_temperature": 26.3, + "experience_temperature": 22.95, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T02:30:05.753205+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 87.3, + "water_total": 2849.0, + "average_temperature": 26.3, + "experience_temperature": 23.81, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T02:40:06.172466+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.8, + "humidity": 86.6, + "water_total": 2889.0, + "average_temperature": 26.3, + "experience_temperature": 23.32, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T02:50:05.509464+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 87.7, + "water_total": 2946.0, + "average_temperature": 26.7, + "experience_temperature": 24.29, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T03:00:06.717248+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.6, + "humidity": 88.2, + "water_total": 3002.0, + "average_temperature": 26.2333, + "experience_temperature": 24.2733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T03:10:06.219846+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.6, + "humidity": 86.9, + "water_total": 3047.0, + "average_temperature": 26.2667, + "experience_temperature": 24.0467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T03:20:06.454515+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 87.9, + "water_total": 3092.0, + "average_temperature": 26.3667, + "experience_temperature": 23.9967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T03:30:06.224976+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 87.9, + "water_total": 3092.0, + "average_temperature": 26.3667, + "experience_temperature": 23.9967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T03:40:06.529968+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.3, + "humidity": 86.1, + "water_total": 3236.0, + "average_temperature": 25.9333, + "experience_temperature": 24.6033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T03:50:05.627737+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.2, + "humidity": 87.2, + "water_total": 3277.0, + "average_temperature": 25.9333, + "experience_temperature": 25.1733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T04:00:05.852156+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.0, + "humidity": 87.1, + "water_total": 3316.0, + "average_temperature": 26.0, + "experience_temperature": 25.92, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T04:10:05.185632+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.3, + "humidity": 87.2, + "water_total": 3347.0, + "average_temperature": 25.9, + "experience_temperature": 24.79, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T04:20:05.404730+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.2, + "humidity": 86.8, + "water_total": 3362.0, + "average_temperature": 25.7667, + "experience_temperature": 24.9267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T04:30:05.811338+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.0, + "humidity": 87.1, + "water_total": 3376.0, + "average_temperature": 25.8, + "experience_temperature": 25.72, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T04:40:05.803736+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.2, + "humidity": 86.7, + "water_total": 3391.0, + "average_temperature": 25.8333, + "experience_temperature": 24.9733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T04:50:06.161865+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.3, + "humidity": 86.4, + "water_total": 3405.0, + "average_temperature": 25.7, + "experience_temperature": 24.43, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T05:00:05.845370+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.4, + "humidity": 87.3, + "water_total": 3415.0, + "average_temperature": 25.6667, + "experience_temperature": 24.2267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T05:10:06.677254+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.3, + "humidity": 86.7, + "water_total": 3430.0, + "average_temperature": 25.9333, + "experience_temperature": 24.7233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T05:20:05.952765+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.2, + "humidity": 87.1, + "water_total": 3491.0, + "average_temperature": 25.9, + "experience_temperature": 25.12, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T05:30:06.012733+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.2, + "humidity": 86.4, + "water_total": 3568.0, + "average_temperature": 25.8667, + "experience_temperature": 24.9467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T05:40:06.447356+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.3, + "humidity": 87.9, + "water_total": 3613.0, + "average_temperature": 25.6333, + "experience_temperature": 24.6633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T05:50:05.751729+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.4, + "humidity": 87.9, + "water_total": 3661.0, + "average_temperature": 25.6667, + "experience_temperature": 24.3467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T06:00:06.899071+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.2, + "humidity": 88.2, + "water_total": 3690.0, + "average_temperature": 25.6, + "experience_temperature": 25.04, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T06:10:06.296917+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.3, + "humidity": 87.0, + "water_total": 3722.0, + "average_temperature": 25.5, + "experience_temperature": 24.35, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T06:20:06.756531+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.4, + "humidity": 86.2, + "water_total": 3742.0, + "average_temperature": 25.5333, + "experience_temperature": 23.8733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T06:30:06.899120+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.3, + "humidity": 86.4, + "water_total": 3761.0, + "average_temperature": 25.5333, + "experience_temperature": 24.2633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T06:40:06.476637+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.2, + "humidity": 87.1, + "water_total": 3774.0, + "average_temperature": 25.6, + "experience_temperature": 24.82, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T06:50:07.940488+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.3, + "humidity": 86.9, + "water_total": 3784.0, + "average_temperature": 25.7, + "experience_temperature": 24.53, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T07:00:06.535311+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.4, + "humidity": 86.0, + "water_total": 3793.0, + "average_temperature": 25.7, + "experience_temperature": 24.0, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T07:10:06.184416+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.8, + "humidity": 86.2, + "water_total": 3802.0, + "average_temperature": 25.8, + "experience_temperature": 22.74, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T07:20:06.253280+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 86.4, + "water_total": 3812.0, + "average_temperature": 26.0, + "experience_temperature": 23.33, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T07:30:05.622708+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.8, + "humidity": 85.5, + "water_total": 3821.0, + "average_temperature": 26.2667, + "experience_temperature": 23.0667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T07:40:07.002905+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.2, + "humidity": 87.0, + "water_total": 3829.0, + "average_temperature": 26.8, + "experience_temperature": 26.0, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T07:50:06.496695+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.5, + "humidity": 82.7, + "water_total": 3851.0, + "average_temperature": 27.2, + "experience_temperature": 24.49, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T08:00:05.512997+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 83.2, + "water_total": 4002.0, + "average_temperature": 27.4, + "experience_temperature": 24.09, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T08:10:18.905977+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 83.2, + "water_total": 4002.0, + "average_temperature": 27.4, + "experience_temperature": 24.09, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T08:20:06.361945+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.2, + "humidity": 81.7, + "water_total": 4193.0, + "average_temperature": 28.0667, + "experience_temperature": 22.7067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T08:30:06.746070+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.9, + "humidity": 80.4, + "water_total": 4257.0, + "average_temperature": 28.4667, + "experience_temperature": 23.8967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T08:40:06.431213+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.6, + "humidity": 77.2, + "water_total": 4359.0, + "average_temperature": 29.1667, + "experience_temperature": 25.0067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T08:50:06.129655+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.0, + "humidity": 75.9, + "water_total": 4451.0, + "average_temperature": 29.3, + "experience_temperature": 23.48, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T09:00:06.573955+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.5, + "humidity": 76.4, + "water_total": 4511.0, + "average_temperature": 29.6667, + "experience_temperature": 22.1967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T09:10:06.570589+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.1, + "humidity": 74.4, + "water_total": 4574.0, + "average_temperature": 30.1, + "experience_temperature": 23.63, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T09:20:06.531758+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.5, + "humidity": 73.0, + "water_total": 4645.0, + "average_temperature": 30.3667, + "experience_temperature": 22.2167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T09:30:05.939273+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.3, + "humidity": 72.3, + "water_total": 4732.0, + "average_temperature": 30.9, + "experience_temperature": 23.31, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T09:40:06.495588+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.7, + "humidity": 71.7, + "water_total": 4815.0, + "average_temperature": 30.9, + "experience_temperature": 21.79, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T09:50:07.054967+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.3, + "humidity": 71.5, + "water_total": 4909.0, + "average_temperature": 31.2667, + "experience_temperature": 23.5167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T10:00:07.143186+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.6, + "humidity": 69.4, + "water_total": 4995.0, + "average_temperature": 31.5, + "experience_temperature": 22.28, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T10:10:06.067984+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.7, + "humidity": 69.0, + "water_total": 5065.0, + "average_temperature": 31.7, + "experience_temperature": 22.05, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T10:20:06.324660+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.3, + "humidity": 69.7, + "water_total": 5131.0, + "average_temperature": 31.9333, + "experience_temperature": 23.8233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T10:30:06.438853+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.9, + "humidity": 70.3, + "water_total": 5212.0, + "average_temperature": 32.0333, + "experience_temperature": 21.9433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T10:40:06.727702+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.8, + "humidity": 67.7, + "water_total": 5294.0, + "average_temperature": 32.5333, + "experience_temperature": 22.2733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T10:50:06.302350+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.7, + "humidity": 68.1, + "water_total": 5363.0, + "average_temperature": 31.8333, + "experience_temperature": 22.0033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T11:00:06.256313+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.5, + "humidity": 67.6, + "water_total": 5439.0, + "average_temperature": 32.1, + "experience_temperature": 22.87, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T11:10:06.890008+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.8, + "humidity": 65.8, + "water_total": 5508.0, + "average_temperature": 32.3667, + "experience_temperature": 21.7267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T11:20:07.055266+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 3.1, + "humidity": 67.8, + "water_total": 5574.0, + "average_temperature": 32.3, + "experience_temperature": 21.01, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T11:30:06.883649+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.3, + "humidity": 67.4, + "water_total": 5640.0, + "average_temperature": 32.1333, + "experience_temperature": 23.5633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T11:40:05.733579+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.9, + "humidity": 65.3, + "water_total": 5683.0, + "average_temperature": 31.8, + "experience_temperature": 20.71, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T11:50:08.695866+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.7, + "humidity": 64.7, + "water_total": 5775.0, + "average_temperature": 32.4667, + "experience_temperature": 21.9567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T12:00:05.898206+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.7, + "humidity": 64.7, + "water_total": 5775.0, + "average_temperature": 32.4667, + "experience_temperature": 21.9567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T12:10:06.961319+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 3.3, + "humidity": 65.6, + "water_total": 5896.0, + "average_temperature": 32.4667, + "experience_temperature": 20.0367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T12:20:06.242279+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.7, + "humidity": 64.5, + "water_total": 5946.0, + "average_temperature": 32.3667, + "experience_temperature": 21.8167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T12:30:07.164709+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.6, + "humidity": 63.4, + "water_total": 6004.0, + "average_temperature": 32.5333, + "experience_temperature": 22.1133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T12:40:05.762791+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.4, + "humidity": 62.9, + "water_total": 6067.0, + "average_temperature": 32.4333, + "experience_temperature": 22.6133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T12:50:07.535485+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 3.0, + "humidity": 64.4, + "water_total": 6121.0, + "average_temperature": 32.1667, + "experience_temperature": 20.5467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T13:00:06.464705+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.7, + "humidity": 64.8, + "water_total": 6177.0, + "average_temperature": 32.5333, + "experience_temperature": 22.0433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T13:10:06.376367+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.9, + "humidity": 64.8, + "water_total": 6230.0, + "average_temperature": 32.4333, + "experience_temperature": 21.2433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T13:20:06.212497+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.9, + "humidity": 64.9, + "water_total": 6281.0, + "average_temperature": 32.3333, + "experience_temperature": 21.1633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T13:30:06.538880+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.9, + "humidity": 64.9, + "water_total": 6281.0, + "average_temperature": 32.3333, + "experience_temperature": 21.1633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T13:40:07.207197+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 3.0, + "humidity": 64.7, + "water_total": 6394.0, + "average_temperature": 32.9, + "experience_temperature": 21.34, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T13:50:06.006013+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.5, + "humidity": 64.8, + "water_total": 6451.0, + "average_temperature": 32.7667, + "experience_temperature": 22.9767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T14:10:06.834983+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.5, + "humidity": 64.3, + "water_total": 6569.0, + "average_temperature": 32.5333, + "experience_temperature": 22.6433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T14:20:06.788800+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.9, + "humidity": 64.3, + "water_total": 6622.0, + "average_temperature": 32.4333, + "experience_temperature": 21.1433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T14:30:06.564610+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.9, + "humidity": 64.3, + "water_total": 6622.0, + "average_temperature": 32.4333, + "experience_temperature": 21.1433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T14:40:07.455715+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 3.1, + "humidity": 71.7, + "water_total": 6719.0, + "average_temperature": 32.2667, + "experience_temperature": 21.7567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T14:50:06.441530+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.9, + "humidity": 72.2, + "water_total": 6775.0, + "average_temperature": 32.2667, + "experience_temperature": 22.5567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T15:10:06.376052+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 3.2, + "humidity": 76.3, + "water_total": 6870.0, + "average_temperature": 31.4, + "experience_temperature": 21.46, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T15:20:05.995792+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.5, + "humidity": 75.4, + "water_total": 6916.0, + "average_temperature": 31.1, + "experience_temperature": 23.43, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T15:30:06.509116+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.7, + "humidity": 72.7, + "water_total": 6948.0, + "average_temperature": 30.8667, + "experience_temperature": 21.9567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T15:40:11.510499+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.6, + "humidity": 72.4, + "water_total": 7009.0, + "average_temperature": 31.0333, + "experience_temperature": 22.4133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T15:50:06.742256+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.9, + "humidity": 73.0, + "water_total": 7070.0, + "average_temperature": 30.8333, + "experience_temperature": 21.2833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T16:10:07.447153+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.5, + "humidity": 73.4, + "water_total": 7227.0, + "average_temperature": 30.9667, + "experience_temperature": 22.8967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T16:20:05.934475+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.5, + "humidity": 73.9, + "water_total": 7293.0, + "average_temperature": 30.6667, + "experience_temperature": 22.6967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T16:30:08.143286+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.8, + "humidity": 74.9, + "water_total": 7365.0, + "average_temperature": 30.5333, + "experience_temperature": 21.7133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T16:40:06.824219+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.7, + "humidity": 74.6, + "water_total": 7430.0, + "average_temperature": 30.5667, + "experience_temperature": 22.0367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T16:50:06.993785+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.8, + "humidity": 76.4, + "water_total": 7499.0, + "average_temperature": 30.5333, + "experience_temperature": 22.0133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T17:10:06.927910+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.7, + "humidity": 75.8, + "water_total": 64.0, + "average_temperature": 30.3, + "experience_temperature": 22.01, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T17:20:06.856317+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.5, + "humidity": 76.5, + "water_total": 108.0, + "average_temperature": 30.3, + "experience_temperature": 22.85, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T17:30:06.243220+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.3, + "humidity": 76.5, + "water_total": 161.0, + "average_temperature": 30.2, + "experience_temperature": 23.45, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T17:40:06.754165+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.2, + "humidity": 75.6, + "water_total": 211.0, + "average_temperature": 30.0667, + "experience_temperature": 23.4867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T17:50:06.413387+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.3, + "humidity": 75.5, + "water_total": 272.0, + "average_temperature": 29.7333, + "experience_temperature": 22.7833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T18:00:06.661979+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.2, + "humidity": 78.1, + "water_total": 293.0, + "average_temperature": 29.5, + "experience_temperature": 23.42, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T18:10:07.180584+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.6, + "humidity": 78.9, + "water_total": 314.0, + "average_temperature": 29.2667, + "experience_temperature": 21.9467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T18:20:06.199191+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.6, + "humidity": 78.9, + "water_total": 314.0, + "average_temperature": 29.2667, + "experience_temperature": 21.9467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T18:30:06.492043+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.5, + "humidity": 79.1, + "water_total": 362.0, + "average_temperature": 29.1667, + "experience_temperature": 22.2367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T18:40:06.392393+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.5, + "humidity": 78.2, + "water_total": 384.0, + "average_temperature": 29.4333, + "experience_temperature": 22.3233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T18:50:06.263749+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.4, + "humidity": 76.9, + "water_total": 476.0, + "average_temperature": 29.5667, + "experience_temperature": 22.5467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T19:00:06.661851+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.2, + "humidity": 76.9, + "water_total": 570.0, + "average_temperature": 29.1667, + "experience_temperature": 22.8467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T19:10:06.487139+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.3, + "humidity": 76.8, + "water_total": 640.0, + "average_temperature": 29.3, + "experience_temperature": 22.61, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T19:20:06.135821+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.4, + "humidity": 76.1, + "water_total": 700.0, + "average_temperature": 29.3667, + "experience_temperature": 22.1867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T19:30:06.069468+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.5, + "humidity": 75.2, + "water_total": 766.0, + "average_temperature": 29.2333, + "experience_temperature": 21.5233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T19:40:05.885447+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.9, + "humidity": 80.5, + "water_total": 810.0, + "average_temperature": 28.1667, + "experience_temperature": 23.6167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T19:50:07.298260+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.1, + "humidity": 82.0, + "water_total": 887.0, + "average_temperature": 27.9333, + "experience_temperature": 22.9833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T20:00:06.794703+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 2.0, + "humidity": 85.0, + "water_total": 942.0, + "average_temperature": 27.8, + "experience_temperature": 23.8, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T20:10:06.105803+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.9, + "humidity": 84.7, + "water_total": 1039.0, + "average_temperature": 27.7667, + "experience_temperature": 24.0567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T20:20:05.901676+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.6, + "humidity": 85.4, + "water_total": 1093.0, + "average_temperature": 26.8667, + "experience_temperature": 24.3467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T20:30:06.282144+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.9, + "humidity": 86.8, + "water_total": 1149.0, + "average_temperature": 26.6333, + "experience_temperature": 23.3433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T20:40:08.632992+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.9, + "humidity": 86.2, + "water_total": 1201.0, + "average_temperature": 26.4333, + "experience_temperature": 23.0233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T20:50:06.457316+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 85.9, + "water_total": 1242.0, + "average_temperature": 25.7, + "experience_temperature": 22.93, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T21:00:06.058406+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 87.1, + "water_total": 1288.0, + "average_temperature": 25.7667, + "experience_temperature": 23.2367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T21:10:07.458837+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 87.4, + "water_total": 1368.0, + "average_temperature": 25.9, + "experience_temperature": 23.43, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T21:20:06.843360+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 86.8, + "water_total": 1425.0, + "average_temperature": 25.6333, + "experience_temperature": 23.0433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T21:30:06.710507+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.1, + "humidity": 87.1, + "water_total": 1489.0, + "average_temperature": 25.3667, + "experience_temperature": 24.9367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T21:40:06.548465+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.4, + "humidity": 86.9, + "water_total": 1554.0, + "average_temperature": 25.5, + "experience_temperature": 23.98, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T21:50:06.281648+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.8, + "humidity": 85.5, + "water_total": 1625.0, + "average_temperature": 25.5333, + "experience_temperature": 22.3333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T22:00:06.467722+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.3, + "humidity": 86.0, + "water_total": 1705.0, + "average_temperature": 25.5, + "experience_temperature": 24.15, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T22:10:06.525773+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.3, + "humidity": 86.0, + "water_total": 1705.0, + "average_temperature": 25.5, + "experience_temperature": 24.15, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T22:20:06.804704+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.2, + "humidity": 86.9, + "water_total": 1844.0, + "average_temperature": 25.4667, + "experience_temperature": 24.6467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T22:30:06.884706+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 0.7, + "humidity": 86.5, + "water_total": 1926.0, + "average_temperature": 25.5, + "experience_temperature": 26.35, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T22:40:06.603978+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.2, + "humidity": 88.0, + "water_total": 2007.0, + "average_temperature": 25.3667, + "experience_temperature": 24.7667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T22:50:06.719506+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 87.9, + "water_total": 2102.0, + "average_temperature": 25.5333, + "experience_temperature": 23.1633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T23:00:06.486571+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.8, + "humidity": 87.7, + "water_total": 2168.0, + "average_temperature": 25.5333, + "experience_temperature": 22.7733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T23:10:06.483370+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.3, + "humidity": 87.4, + "water_total": 2217.0, + "average_temperature": 25.5, + "experience_temperature": 24.43, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T23:20:06.784955+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.8, + "humidity": 87.7, + "water_total": 2252.0, + "average_temperature": 25.5667, + "experience_temperature": 22.8067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T23:30:06.582933+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.8, + "humidity": 87.7, + "water_total": 2252.0, + "average_temperature": 25.5667, + "experience_temperature": 22.8067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T23:40:07.406381+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.8, + "humidity": 87.4, + "water_total": 2331.0, + "average_temperature": 25.5333, + "experience_temperature": 22.7133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-20T23:50:06.807016+07:00", + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 87.8, + "water_total": 2370.0, + "average_temperature": 25.6, + "experience_temperature": 23.21, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T00:00:06.212474+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 87.4, + "water_total": 2410.0, + "average_temperature": 25.5333, + "experience_temperature": 23.0633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T00:10:06.788673+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 87.1, + "water_total": 2449.0, + "average_temperature": 25.9333, + "experience_temperature": 23.0533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T00:20:07.604686+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.9, + "humidity": 87.0, + "water_total": 2561.0, + "average_temperature": 26.2, + "experience_temperature": 22.95, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T00:30:07.089430+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 87.1, + "water_total": 2664.0, + "average_temperature": 26.1, + "experience_temperature": 23.57, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T00:40:08.483740+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 87.1, + "water_total": 2664.0, + "average_temperature": 26.1, + "experience_temperature": 23.57, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T00:50:06.459903+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 87.7, + "water_total": 2798.0, + "average_temperature": 25.9667, + "experience_temperature": 23.5567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T01:00:06.533126+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 88.4, + "water_total": 2868.0, + "average_temperature": 26.0, + "experience_temperature": 23.38, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T01:10:06.678200+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 90.0, + "water_total": 2937.0, + "average_temperature": 26.1667, + "experience_temperature": 23.8667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T01:20:07.166287+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 87.8, + "water_total": 3017.0, + "average_temperature": 26.1333, + "experience_temperature": 23.3933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T01:30:06.849928+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.5, + "humidity": 89.8, + "water_total": 3091.0, + "average_temperature": 26.1667, + "experience_temperature": 24.8767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T01:40:07.366769+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 88.2, + "water_total": 3145.0, + "average_temperature": 25.8667, + "experience_temperature": 23.5567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T01:50:07.153098+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.9, + "humidity": 88.6, + "water_total": 3183.0, + "average_temperature": 25.8667, + "experience_temperature": 22.9367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T02:00:07.385791+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.6, + "humidity": 88.9, + "water_total": 3219.0, + "average_temperature": 25.9, + "experience_temperature": 24.08, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T02:10:06.726103+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 89.4, + "water_total": 3260.0, + "average_temperature": 26.1333, + "experience_temperature": 24.0633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T02:20:07.137427+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 89.4, + "water_total": 3260.0, + "average_temperature": 26.1333, + "experience_temperature": 24.0633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T02:30:06.728532+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 88.7, + "water_total": 3493.0, + "average_temperature": 26.0333, + "experience_temperature": 23.8233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T02:40:07.266081+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 89.2, + "water_total": 3568.0, + "average_temperature": 25.9, + "experience_temperature": 23.44, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T02:50:06.925014+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.9, + "humidity": 89.6, + "water_total": 3628.0, + "average_temperature": 25.8, + "experience_temperature": 23.07, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T03:00:07.382274+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 88.5, + "water_total": 3696.0, + "average_temperature": 25.7667, + "experience_temperature": 23.5167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T03:10:05.487986+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 89.3, + "water_total": 3775.0, + "average_temperature": 25.9333, + "experience_temperature": 23.4933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T03:20:05.626838+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.9, + "humidity": 88.7, + "water_total": 3856.0, + "average_temperature": 25.9, + "experience_temperature": 22.99, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T03:30:06.002371+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 88.2, + "water_total": 3913.0, + "average_temperature": 25.9, + "experience_temperature": 23.59, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T03:40:06.320837+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.5, + "humidity": 88.9, + "water_total": 4003.0, + "average_temperature": 25.8667, + "experience_temperature": 24.3967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T03:50:05.816662+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 89.5, + "water_total": 4072.0, + "average_temperature": 25.7667, + "experience_temperature": 23.3667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T04:00:05.801167+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 89.5, + "water_total": 4072.0, + "average_temperature": 25.7667, + "experience_temperature": 23.3667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T04:10:05.678775+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.3, + "humidity": 89.7, + "water_total": 4193.0, + "average_temperature": 25.4333, + "experience_temperature": 24.8233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T04:20:06.273613+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.3, + "humidity": 89.6, + "water_total": 4230.0, + "average_temperature": 25.4333, + "experience_temperature": 24.8033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T04:30:06.020759+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.2, + "humidity": 89.8, + "water_total": 4268.0, + "average_temperature": 25.4667, + "experience_temperature": 25.2267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T04:40:06.278692+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.3, + "humidity": 89.1, + "water_total": 4306.0, + "average_temperature": 25.4333, + "experience_temperature": 24.7033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T04:50:05.498135+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.3, + "humidity": 89.2, + "water_total": 4337.0, + "average_temperature": 25.5, + "experience_temperature": 24.79, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T05:00:05.969461+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.2, + "humidity": 89.7, + "water_total": 4375.0, + "average_temperature": 25.5, + "experience_temperature": 25.24, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T05:10:06.601397+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 90.3, + "water_total": 4413.0, + "average_temperature": 25.6667, + "experience_temperature": 23.7767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T05:20:06.878713+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 88.3, + "water_total": 4497.0, + "average_temperature": 25.9, + "experience_temperature": 23.61, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T05:30:07.363766+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.6, + "humidity": 89.2, + "water_total": 4604.0, + "average_temperature": 25.6333, + "experience_temperature": 23.8733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T05:40:06.626963+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 89.4, + "water_total": 4675.0, + "average_temperature": 25.6, + "experience_temperature": 23.18, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T05:50:06.460705+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 88.7, + "water_total": 4739.0, + "average_temperature": 25.5333, + "experience_temperature": 22.9733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T06:00:06.742133+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.6, + "humidity": 88.0, + "water_total": 4809.0, + "average_temperature": 25.8333, + "experience_temperature": 23.8333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T06:10:08.196117+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.2, + "humidity": 88.5, + "water_total": 4919.0, + "average_temperature": 25.6667, + "experience_temperature": 25.1667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T06:20:05.609771+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 89.7, + "water_total": 5005.0, + "average_temperature": 25.4667, + "experience_temperature": 23.1067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T06:30:06.375156+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.9, + "humidity": 88.7, + "water_total": 5097.0, + "average_temperature": 25.5333, + "experience_temperature": 22.6233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T06:40:06.369000+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 88.5, + "water_total": 5193.0, + "average_temperature": 25.8333, + "experience_temperature": 23.5833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T06:50:05.681342+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.6, + "humidity": 89.3, + "water_total": 5273.0, + "average_temperature": 25.6667, + "experience_temperature": 23.9267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T07:00:09.545288+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.6, + "humidity": 89.3, + "water_total": 5273.0, + "average_temperature": 25.6667, + "experience_temperature": 23.9267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T07:10:06.200218+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.5, + "humidity": 88.9, + "water_total": 5406.0, + "average_temperature": 25.9, + "experience_temperature": 24.43, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T07:20:06.707814+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 89.1, + "water_total": 5493.0, + "average_temperature": 26.0333, + "experience_temperature": 23.9033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T07:30:06.639655+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.5, + "humidity": 89.9, + "water_total": 5602.0, + "average_temperature": 26.8333, + "experience_temperature": 25.5633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T07:40:05.337108+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 88.8, + "water_total": 5711.0, + "average_temperature": 26.4333, + "experience_temperature": 24.2433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T07:50:06.439339+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.6, + "humidity": 89.3, + "water_total": 5787.0, + "average_temperature": 26.7333, + "experience_temperature": 24.9933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T08:00:10.032600+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 88.9, + "water_total": 5868.0, + "average_temperature": 27.0667, + "experience_temperature": 24.5467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T08:10:06.003989+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 88.9, + "water_total": 5868.0, + "average_temperature": 27.0667, + "experience_temperature": 24.5467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T08:20:06.655093+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.0, + "humidity": 87.5, + "water_total": 6039.0, + "average_temperature": 27.6, + "experience_temperature": 24.1, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T08:30:06.790438+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.9, + "humidity": 86.7, + "water_total": 6117.0, + "average_temperature": 27.9333, + "experience_temperature": 24.6233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T08:40:05.835967+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.6, + "humidity": 85.4, + "water_total": 6199.0, + "average_temperature": 28.4667, + "experience_temperature": 25.9467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T08:50:07.257651+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.9, + "humidity": 83.2, + "water_total": 6286.0, + "average_temperature": 28.9, + "experience_temperature": 24.89, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T09:00:06.111366+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.3, + "humidity": 81.4, + "water_total": 6368.0, + "average_temperature": 29.3667, + "experience_temperature": 23.5967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T09:10:05.977733+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.1, + "humidity": 78.3, + "water_total": 6448.0, + "average_temperature": 29.7667, + "experience_temperature": 24.0767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T09:20:06.532935+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.3, + "humidity": 81.1, + "water_total": 6527.0, + "average_temperature": 30.0, + "experience_temperature": 24.17, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T09:30:06.022099+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.5, + "humidity": 77.4, + "water_total": 6610.0, + "average_temperature": 30.1667, + "experience_temperature": 22.8967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T09:40:06.008186+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.5, + "humidity": 77.5, + "water_total": 6684.0, + "average_temperature": 30.5333, + "experience_temperature": 23.2833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T09:50:06.175209+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.5, + "humidity": 77.5, + "water_total": 6684.0, + "average_temperature": 30.5333, + "experience_temperature": 23.2833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T10:00:06.310415+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.6, + "humidity": 76.2, + "water_total": 6873.0, + "average_temperature": 30.7667, + "experience_temperature": 22.9067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T10:10:05.371311+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.5, + "humidity": 75.1, + "water_total": 6975.0, + "average_temperature": 30.9, + "experience_temperature": 23.17, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T10:20:06.036899+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.7, + "humidity": 73.5, + "water_total": 7082.0, + "average_temperature": 31.3667, + "experience_temperature": 22.6167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T10:30:06.146046+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 3.0, + "humidity": 73.0, + "water_total": 7186.0, + "average_temperature": 31.3667, + "experience_temperature": 21.4667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T10:40:05.554750+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.8, + "humidity": 71.0, + "water_total": 7321.0, + "average_temperature": 31.5333, + "experience_temperature": 21.9333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T10:50:07.144697+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 3.0, + "humidity": 70.4, + "water_total": 7434.0, + "average_temperature": 31.4667, + "experience_temperature": 21.0467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T11:00:07.699220+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.8, + "humidity": 70.7, + "water_total": 7540.0, + "average_temperature": 31.6333, + "experience_temperature": 21.9733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T11:10:06.311794+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.9, + "humidity": 71.5, + "water_total": 7659.0, + "average_temperature": 31.7, + "experience_temperature": 21.85, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T11:20:08.483028+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.5, + "humidity": 69.3, + "water_total": 7789.0, + "average_temperature": 31.8667, + "experience_temperature": 22.9767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T11:30:06.324195+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 3.1, + "humidity": 68.8, + "water_total": 7923.0, + "average_temperature": 32.0, + "experience_temperature": 20.91, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T11:40:05.993353+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.7, + "humidity": 69.7, + "water_total": 8029.0, + "average_temperature": 31.8, + "experience_temperature": 22.29, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T11:50:06.036344+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.7, + "humidity": 69.7, + "water_total": 8029.0, + "average_temperature": 31.8, + "experience_temperature": 22.29, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T12:00:07.336380+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 3.0, + "humidity": 69.2, + "water_total": 8238.0, + "average_temperature": 31.7, + "experience_temperature": 21.04, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T12:10:06.637050+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.7, + "humidity": 70.2, + "water_total": 8324.0, + "average_temperature": 31.9667, + "experience_temperature": 22.5567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T12:20:07.015161+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.5, + "humidity": 69.0, + "water_total": 8423.0, + "average_temperature": 31.5333, + "experience_temperature": 22.5833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T12:30:06.846541+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.8, + "humidity": 68.5, + "water_total": 8521.0, + "average_temperature": 31.7333, + "experience_temperature": 21.6333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T12:40:05.916740+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.8, + "humidity": 67.3, + "water_total": 8610.0, + "average_temperature": 31.4667, + "experience_temperature": 21.1267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T12:50:05.986188+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.7, + "humidity": 65.6, + "water_total": 8703.0, + "average_temperature": 32.0333, + "experience_temperature": 21.7033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T13:00:06.413188+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.8, + "humidity": 68.0, + "water_total": 8792.0, + "average_temperature": 32.4, + "experience_temperature": 22.2, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T13:10:07.298518+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.9, + "humidity": 69.0, + "water_total": 8889.0, + "average_temperature": 32.0333, + "experience_temperature": 21.6833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T13:20:06.842596+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.7, + "humidity": 68.7, + "water_total": 8990.0, + "average_temperature": 31.7667, + "experience_temperature": 22.0567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T13:30:06.363581+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.8, + "humidity": 69.0, + "water_total": 9074.0, + "average_temperature": 32.0667, + "experience_temperature": 22.0667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T13:40:05.943432+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.7, + "humidity": 68.2, + "water_total": 9168.0, + "average_temperature": 32.1, + "experience_temperature": 22.29, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T13:50:08.117061+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 3.0, + "humidity": 66.7, + "water_total": 9263.0, + "average_temperature": 32.0667, + "experience_temperature": 20.9067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T14:10:05.783261+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 3.2, + "humidity": 70.4, + "water_total": 9455.0, + "average_temperature": 31.8, + "experience_temperature": 20.68, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T14:20:05.952927+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.6, + "humidity": 74.6, + "water_total": 9546.0, + "average_temperature": 31.8333, + "experience_temperature": 23.6533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T14:30:05.268072+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.6, + "humidity": 73.7, + "water_total": 9641.0, + "average_temperature": 31.8333, + "experience_temperature": 23.4733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T14:40:07.080718+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.6, + "humidity": 75.0, + "water_total": 9734.0, + "average_temperature": 31.7, + "experience_temperature": 23.6, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T14:50:05.689954+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 3.1, + "humidity": 74.7, + "water_total": 9824.0, + "average_temperature": 31.5333, + "experience_temperature": 21.6233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T15:10:06.155929+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.7, + "humidity": 74.2, + "water_total": 9988.0, + "average_temperature": 30.9333, + "experience_temperature": 22.3233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T15:20:06.074927+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.7, + "humidity": 74.2, + "water_total": 9988.0, + "average_temperature": 30.9333, + "experience_temperature": 22.3233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T15:30:06.340302+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.8, + "humidity": 74.6, + "water_total": 10156.0, + "average_temperature": 31.0667, + "experience_temperature": 22.1867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T15:40:05.443061+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.6, + "humidity": 72.8, + "water_total": 10229.0, + "average_temperature": 31.1667, + "experience_temperature": 22.6267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T15:50:05.709091+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.6, + "humidity": 72.8, + "water_total": 10307.0, + "average_temperature": 31.2667, + "experience_temperature": 22.7267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T16:10:05.769008+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.5, + "humidity": 73.4, + "water_total": 10391.0, + "average_temperature": 31.0667, + "experience_temperature": 22.9967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T16:20:05.963083+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.6, + "humidity": 74.0, + "water_total": 10574.0, + "average_temperature": 31.3667, + "experience_temperature": 23.0667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T16:30:06.206883+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.9, + "humidity": 73.8, + "water_total": 10659.0, + "average_temperature": 31.0333, + "experience_temperature": 21.6433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T16:40:05.898199+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.8, + "humidity": 76.4, + "water_total": 10752.0, + "average_temperature": 30.7333, + "experience_temperature": 22.2133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T16:50:06.225611+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.6, + "humidity": 76.8, + "water_total": 10849.0, + "average_temperature": 30.7, + "experience_temperature": 22.96, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T17:10:05.161797+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.3, + "humidity": 77.5, + "water_total": 79.0, + "average_temperature": 30.3667, + "experience_temperature": 23.8167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T17:20:06.351868+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.3, + "humidity": 77.5, + "water_total": 79.0, + "average_temperature": 30.3667, + "experience_temperature": 23.8167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T17:30:06.163163+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.8, + "humidity": 77.5, + "water_total": 236.0, + "average_temperature": 30.3, + "experience_temperature": 22.0, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T17:40:08.491610+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.7, + "humidity": 77.6, + "water_total": 312.0, + "average_temperature": 30.2, + "experience_temperature": 22.27, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T17:50:06.386058+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.1, + "humidity": 77.4, + "water_total": 393.0, + "average_temperature": 30.1667, + "experience_temperature": 24.2967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T18:00:06.185332+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.3, + "humidity": 79.0, + "water_total": 458.0, + "average_temperature": 28.7667, + "experience_temperature": 22.5167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T18:10:06.152617+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 80.9, + "water_total": 532.0, + "average_temperature": 28.5, + "experience_temperature": 24.38, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T18:20:06.386055+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.0, + "humidity": 83.2, + "water_total": 592.0, + "average_temperature": 27.6667, + "experience_temperature": 23.3067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T18:30:06.435631+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 84.9, + "water_total": 655.0, + "average_temperature": 27.2667, + "experience_temperature": 24.2967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T18:40:05.670023+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 85.4, + "water_total": 713.0, + "average_temperature": 27.4333, + "experience_temperature": 24.2133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T18:50:09.752700+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 85.6, + "water_total": 790.0, + "average_temperature": 27.3, + "experience_temperature": 24.47, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T19:00:06.102900+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.5, + "humidity": 85.1, + "water_total": 887.0, + "average_temperature": 27.0667, + "experience_temperature": 24.8367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T19:10:05.420401+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.0, + "humidity": 87.7, + "water_total": 973.0, + "average_temperature": 27.1, + "experience_temperature": 23.64, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T19:20:06.267523+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 86.1, + "water_total": 1030.0, + "average_temperature": 26.8333, + "experience_temperature": 23.7533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T19:30:06.550244+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.6, + "humidity": 86.5, + "water_total": 1099.0, + "average_temperature": 27.1, + "experience_temperature": 24.8, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T19:40:07.148277+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 86.5, + "water_total": 1170.0, + "average_temperature": 27.0667, + "experience_temperature": 24.0667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T19:50:05.860083+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.9, + "humidity": 86.9, + "water_total": 1252.0, + "average_temperature": 26.8333, + "experience_temperature": 23.5633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T20:00:06.042442+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 87.9, + "water_total": 1311.0, + "average_temperature": 26.9, + "experience_temperature": 24.18, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T20:10:05.096110+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 87.9, + "water_total": 1311.0, + "average_temperature": 26.9, + "experience_temperature": 24.18, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T20:20:06.026672+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.9, + "humidity": 87.8, + "water_total": 1426.0, + "average_temperature": 27.0333, + "experience_temperature": 23.9433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T20:30:06.094316+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.8, + "humidity": 87.4, + "water_total": 1500.0, + "average_temperature": 26.9, + "experience_temperature": 24.08, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T20:40:06.401634+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.9, + "humidity": 87.9, + "water_total": 1564.0, + "average_temperature": 26.8333, + "experience_temperature": 23.7633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T20:50:05.466581+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.2, + "humidity": 88.9, + "water_total": 1611.0, + "average_temperature": 26.7667, + "experience_temperature": 22.8467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T21:00:05.837376+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.3, + "humidity": 87.5, + "water_total": 1655.0, + "average_temperature": 26.8, + "experience_temperature": 22.25, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T21:10:05.620480+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.0, + "humidity": 87.8, + "water_total": 1701.0, + "average_temperature": 26.9, + "experience_temperature": 23.46, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T21:20:06.419405+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.2, + "humidity": 89.0, + "water_total": 1754.0, + "average_temperature": 26.9, + "experience_temperature": 23.0, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T21:30:05.800520+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 2.0, + "humidity": 88.8, + "water_total": 1807.0, + "average_temperature": 26.9, + "experience_temperature": 23.66, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T21:40:06.941240+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.9, + "humidity": 88.1, + "water_total": 1855.0, + "average_temperature": 26.9667, + "experience_temperature": 23.9367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T21:50:06.353826+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.9, + "humidity": 88.1, + "water_total": 1855.0, + "average_temperature": 26.9667, + "experience_temperature": 23.9367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T22:00:06.912751+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.9, + "humidity": 88.4, + "water_total": 1976.0, + "average_temperature": 27.0333, + "experience_temperature": 24.0633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T22:10:08.999701+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.6, + "humidity": 88.6, + "water_total": 2025.0, + "average_temperature": 26.9667, + "experience_temperature": 25.0867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T22:20:05.652683+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.9, + "humidity": 88.4, + "water_total": 2085.0, + "average_temperature": 27.0333, + "experience_temperature": 24.0633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T22:30:06.269006+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.9, + "humidity": 89.5, + "water_total": 2142.0, + "average_temperature": 27.1, + "experience_temperature": 24.35, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T22:40:06.018421+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.4, + "humidity": 89.6, + "water_total": 2198.0, + "average_temperature": 27.2667, + "experience_temperature": 26.2867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T22:50:06.269867+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 88.5, + "water_total": 2276.0, + "average_temperature": 27.2333, + "experience_temperature": 24.9833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T23:00:06.083493+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.9, + "humidity": 89.2, + "water_total": 2352.0, + "average_temperature": 26.9, + "experience_temperature": 24.09, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T23:10:06.424418+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.4, + "humidity": 89.2, + "water_total": 2388.0, + "average_temperature": 26.6, + "experience_temperature": 25.54, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T23:20:08.059166+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.5, + "humidity": 90.1, + "water_total": 2412.0, + "average_temperature": 26.6333, + "experience_temperature": 25.4033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T23:30:05.906557+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.7, + "humidity": 89.8, + "water_total": 2433.0, + "average_temperature": 26.6667, + "experience_temperature": 24.6767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T23:40:06.489429+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.5, + "humidity": 89.4, + "water_total": 2454.0, + "average_temperature": 26.5667, + "experience_temperature": 25.1967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-21T23:50:09.637910+07:00", + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.6, + "humidity": 89.7, + "water_total": 2477.0, + "average_temperature": 26.6, + "experience_temperature": 24.94, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T00:00:06.024614+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.6, + "humidity": 90.2, + "water_total": 2501.0, + "average_temperature": 26.6333, + "experience_temperature": 25.0733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T00:10:06.312950+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.8, + "humidity": 89.3, + "water_total": 2522.0, + "average_temperature": 26.9667, + "experience_temperature": 24.5267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T00:20:05.395592+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.8, + "humidity": 89.3, + "water_total": 2522.0, + "average_temperature": 26.9667, + "experience_temperature": 24.5267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T00:30:05.848900+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 88.0, + "water_total": 2604.0, + "average_temperature": 26.9667, + "experience_temperature": 23.9167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T00:40:06.031735+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.5, + "humidity": 89.3, + "water_total": 2722.0, + "average_temperature": 26.6667, + "experience_temperature": 25.2767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T00:50:06.621610+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.6, + "humidity": 88.7, + "water_total": 2763.0, + "average_temperature": 26.6667, + "experience_temperature": 24.8067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T01:00:05.991885+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.8, + "humidity": 89.4, + "water_total": 2815.0, + "average_temperature": 26.7667, + "experience_temperature": 24.3467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T01:10:06.490950+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.2, + "humidity": 88.1, + "water_total": 2864.0, + "average_temperature": 26.8667, + "experience_temperature": 22.7867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T01:20:06.244791+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.7, + "humidity": 88.4, + "water_total": 2948.0, + "average_temperature": 26.9333, + "experience_temperature": 24.6633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T01:30:05.576634+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 88.8, + "water_total": 3013.0, + "average_temperature": 26.7667, + "experience_temperature": 23.8767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T01:40:05.935041+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.7, + "humidity": 88.3, + "water_total": 3087.0, + "average_temperature": 26.8333, + "experience_temperature": 24.5433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T01:50:05.985054+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.7, + "humidity": 88.4, + "water_total": 3165.0, + "average_temperature": 27.0333, + "experience_temperature": 24.7633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T02:00:07.526414+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.8, + "humidity": 89.4, + "water_total": 3272.0, + "average_temperature": 26.8667, + "experience_temperature": 24.4467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T02:10:06.401540+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.7, + "humidity": 89.8, + "water_total": 3344.0, + "average_temperature": 26.7333, + "experience_temperature": 24.7433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T02:20:06.199744+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.4, + "humidity": 90.0, + "water_total": 3411.0, + "average_temperature": 26.6667, + "experience_temperature": 25.7667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T02:30:08.934319+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.6, + "humidity": 89.3, + "water_total": 3484.0, + "average_temperature": 26.6667, + "experience_temperature": 24.9267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T02:40:08.498150+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.6, + "humidity": 89.3, + "water_total": 3556.0, + "average_temperature": 26.6667, + "experience_temperature": 24.9267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T02:50:06.130854+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 89.7, + "water_total": 3619.0, + "average_temperature": 26.8, + "experience_temperature": 24.09, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T03:00:05.997468+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.6, + "humidity": 89.6, + "water_total": 3684.0, + "average_temperature": 26.6667, + "experience_temperature": 24.9867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T03:10:06.034983+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.5, + "humidity": 90.1, + "water_total": 3744.0, + "average_temperature": 26.6667, + "experience_temperature": 25.4367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T03:20:08.601913+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 90.1, + "water_total": 3802.0, + "average_temperature": 26.8, + "experience_temperature": 24.17, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T03:30:06.554353+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 90.1, + "water_total": 3802.0, + "average_temperature": 26.8, + "experience_temperature": 24.17, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T03:40:06.062686+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 90.1, + "water_total": 3802.0, + "average_temperature": 26.8, + "experience_temperature": 24.17, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T03:50:05.944638+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 89.5, + "water_total": 3982.0, + "average_temperature": 26.8333, + "experience_temperature": 24.0833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T04:00:06.086026+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.0, + "humidity": 89.6, + "water_total": 4034.0, + "average_temperature": 26.7667, + "experience_temperature": 23.6867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T04:10:07.173230+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.5, + "humidity": 89.5, + "water_total": 4069.0, + "average_temperature": 26.5, + "experience_temperature": 25.15, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T04:20:06.186664+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.8, + "humidity": 89.8, + "water_total": 4090.0, + "average_temperature": 26.6, + "experience_temperature": 24.26, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T04:30:06.352559+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.8, + "humidity": 89.5, + "water_total": 4111.0, + "average_temperature": 26.6667, + "experience_temperature": 24.2667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T04:40:06.157640+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.7, + "humidity": 89.7, + "water_total": 4132.0, + "average_temperature": 26.7, + "experience_temperature": 24.69, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T04:50:07.369686+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.6, + "humidity": 89.9, + "water_total": 4157.0, + "average_temperature": 26.7, + "experience_temperature": 25.08, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T05:00:06.983467+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.8, + "humidity": 89.9, + "water_total": 4180.0, + "average_temperature": 26.7333, + "experience_temperature": 24.4133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T05:10:06.824151+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 89.7, + "water_total": 4260.0, + "average_temperature": 27.1333, + "experience_temperature": 24.4233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T05:20:06.121973+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.0, + "humidity": 89.0, + "water_total": 4386.0, + "average_temperature": 26.9333, + "experience_temperature": 23.7333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T05:30:06.708195+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.6, + "humidity": 89.2, + "water_total": 4465.0, + "average_temperature": 26.7, + "experience_temperature": 24.94, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T05:40:06.461342+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.5, + "humidity": 89.4, + "water_total": 4528.0, + "average_temperature": 26.6667, + "experience_temperature": 25.2967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T05:50:06.430049+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.6, + "humidity": 88.7, + "water_total": 4594.0, + "average_temperature": 26.6667, + "experience_temperature": 24.8067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T06:00:07.144187+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.8, + "humidity": 89.4, + "water_total": 4653.0, + "average_temperature": 26.7333, + "experience_temperature": 24.3133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T06:10:06.713802+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.5, + "humidity": 89.6, + "water_total": 4708.0, + "average_temperature": 26.6667, + "experience_temperature": 25.3367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T06:20:06.457818+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 89.5, + "water_total": 4768.0, + "average_temperature": 26.7667, + "experience_temperature": 24.0167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T06:30:06.409141+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.7, + "humidity": 89.5, + "water_total": 4836.0, + "average_temperature": 26.8667, + "experience_temperature": 24.8167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T06:40:06.209357+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.2, + "humidity": 89.6, + "water_total": 4902.0, + "average_temperature": 26.7, + "experience_temperature": 22.92, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T06:50:07.359492+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 90.1, + "water_total": 4965.0, + "average_temperature": 26.7, + "experience_temperature": 24.07, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T07:00:06.085267+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 90.1, + "water_total": 4965.0, + "average_temperature": 26.7, + "experience_temperature": 24.07, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T07:10:05.824187+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 91.9, + "water_total": 5066.0, + "average_temperature": 26.7, + "experience_temperature": 24.43, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T07:20:06.392565+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.1, + "humidity": 91.2, + "water_total": 5108.0, + "average_temperature": 26.8333, + "experience_temperature": 23.7233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T07:30:06.185028+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 90.3, + "water_total": 5158.0, + "average_temperature": 26.8333, + "experience_temperature": 24.2433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T07:40:07.745304+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 89.9, + "water_total": 5213.0, + "average_temperature": 26.9, + "experience_temperature": 24.23, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T07:50:06.338486+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.0, + "humidity": 89.3, + "water_total": 5269.0, + "average_temperature": 26.8, + "experience_temperature": 23.66, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T08:00:09.507209+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.7, + "humidity": 88.4, + "water_total": 5312.0, + "average_temperature": 26.9, + "experience_temperature": 24.63, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T08:10:08.306621+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.7, + "humidity": 88.4, + "water_total": 5312.0, + "average_temperature": 26.9, + "experience_temperature": 24.63, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T08:20:07.513610+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.0, + "humidity": 87.0, + "water_total": 5417.0, + "average_temperature": 27.3333, + "experience_temperature": 23.7333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T08:30:06.993648+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 85.6, + "water_total": 5496.0, + "average_temperature": 27.6667, + "experience_temperature": 24.1367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T08:40:08.638206+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.8, + "humidity": 84.6, + "water_total": 5555.0, + "average_temperature": 28.0, + "experience_temperature": 24.62, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T08:50:06.235606+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.1, + "humidity": 83.1, + "water_total": 5614.0, + "average_temperature": 28.2, + "experience_temperature": 23.47, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T09:00:06.585493+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.1, + "humidity": 83.1, + "water_total": 5614.0, + "average_temperature": 28.2, + "experience_temperature": 23.47, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T09:10:06.466482+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.1, + "humidity": 81.7, + "water_total": 5742.0, + "average_temperature": 28.7667, + "experience_temperature": 23.7567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T09:20:07.060206+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.4, + "humidity": 80.7, + "water_total": 5799.0, + "average_temperature": 29.4333, + "experience_temperature": 23.1733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T09:30:06.229864+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.8, + "humidity": 78.4, + "water_total": 5857.0, + "average_temperature": 29.6333, + "experience_temperature": 21.5133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T09:40:06.566175+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.6, + "humidity": 77.8, + "water_total": 5915.0, + "average_temperature": 29.9667, + "experience_temperature": 22.4267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T09:50:07.485027+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.3, + "humidity": 78.4, + "water_total": 5968.0, + "average_temperature": 29.6333, + "experience_temperature": 23.2633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T10:00:06.671259+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.4, + "humidity": 77.7, + "water_total": 6028.0, + "average_temperature": 29.6667, + "experience_temperature": 22.8067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T10:10:07.599814+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.3, + "humidity": 79.2, + "water_total": 6085.0, + "average_temperature": 29.5, + "experience_temperature": 23.29, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T10:20:08.662984+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.6, + "humidity": 77.3, + "water_total": 6145.0, + "average_temperature": 29.8, + "experience_temperature": 22.16, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T10:30:06.672909+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.6, + "humidity": 76.7, + "water_total": 6203.0, + "average_temperature": 29.9333, + "experience_temperature": 22.1733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T10:40:06.579077+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.2, + "humidity": 76.0, + "water_total": 6282.0, + "average_temperature": 30.1667, + "experience_temperature": 23.6667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T10:50:09.337057+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.4, + "humidity": 76.5, + "water_total": 6353.0, + "average_temperature": 30.4, + "experience_temperature": 23.3, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T11:00:08.869477+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.3, + "humidity": 75.1, + "water_total": 6432.0, + "average_temperature": 30.5333, + "experience_temperature": 23.5033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T11:10:07.391430+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.5, + "humidity": 74.1, + "water_total": 6499.0, + "average_temperature": 30.7333, + "experience_temperature": 22.8033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T11:20:06.718359+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.3, + "humidity": 74.2, + "water_total": 6568.0, + "average_temperature": 31.2, + "experience_temperature": 23.99, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T11:30:07.131021+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 3.0, + "humidity": 71.8, + "water_total": 6653.0, + "average_temperature": 31.4333, + "experience_temperature": 21.2933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T11:40:07.190469+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.7, + "humidity": 71.7, + "water_total": 6737.0, + "average_temperature": 31.2333, + "experience_temperature": 22.1233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T11:50:06.701142+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.4, + "humidity": 69.7, + "water_total": 6804.0, + "average_temperature": 31.5333, + "experience_temperature": 23.0733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T12:00:09.804717+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 3.0, + "humidity": 70.4, + "water_total": 6884.0, + "average_temperature": 31.3667, + "experience_temperature": 20.9467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T12:10:07.284740+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.5, + "humidity": 71.0, + "water_total": 6953.0, + "average_temperature": 31.1333, + "experience_temperature": 22.5833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T12:20:07.285019+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.4, + "humidity": 71.6, + "water_total": 7018.0, + "average_temperature": 31.4667, + "experience_temperature": 23.3867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T12:30:09.356319+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.7, + "humidity": 68.4, + "water_total": 7079.0, + "average_temperature": 31.3333, + "experience_temperature": 21.5633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T12:40:08.019343+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.8, + "humidity": 71.2, + "water_total": 7156.0, + "average_temperature": 31.8333, + "experience_temperature": 22.2733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T12:50:07.945154+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 3.1, + "humidity": 73.0, + "water_total": 7217.0, + "average_temperature": 31.6333, + "experience_temperature": 21.3833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T13:00:07.261742+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 3.2, + "humidity": 71.9, + "water_total": 7273.0, + "average_temperature": 31.0667, + "experience_temperature": 20.2467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T13:10:08.059585+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.9, + "humidity": 72.5, + "water_total": 7346.0, + "average_temperature": 31.6333, + "experience_temperature": 21.9833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T13:20:06.835374+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.8, + "humidity": 71.2, + "water_total": 7413.0, + "average_temperature": 31.5, + "experience_temperature": 21.94, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T13:30:06.733200+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.4, + "humidity": 73.0, + "water_total": 7482.0, + "average_temperature": 31.5333, + "experience_temperature": 23.7333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T13:40:07.211693+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.7, + "humidity": 70.4, + "water_total": 7547.0, + "average_temperature": 31.5667, + "experience_temperature": 22.1967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T13:50:07.757536+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.5, + "humidity": 69.0, + "water_total": 7606.0, + "average_temperature": 31.6333, + "experience_temperature": 22.6833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T14:10:06.527670+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 3.0, + "humidity": 70.6, + "water_total": 7722.0, + "average_temperature": 31.9333, + "experience_temperature": 21.5533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T14:20:06.705410+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.5, + "humidity": 71.0, + "water_total": 7796.0, + "average_temperature": 31.4667, + "experience_temperature": 22.9167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T14:30:08.797120+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.6, + "humidity": 68.2, + "water_total": 7852.0, + "average_temperature": 31.2333, + "experience_temperature": 21.7733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T14:40:07.942164+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.7, + "humidity": 67.0, + "water_total": 7906.0, + "average_temperature": 31.7667, + "experience_temperature": 21.7167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T14:50:07.058980+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.8, + "humidity": 67.8, + "water_total": 7969.0, + "average_temperature": 31.7, + "experience_temperature": 21.46, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T15:10:07.580832+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.6, + "humidity": 76.0, + "water_total": 8106.0, + "average_temperature": 31.4333, + "experience_temperature": 23.5333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T15:20:08.083518+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.5, + "humidity": 77.2, + "water_total": 8172.0, + "average_temperature": 30.8667, + "experience_temperature": 23.5567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T15:30:08.271777+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.5, + "humidity": 77.2, + "water_total": 8172.0, + "average_temperature": 30.8667, + "experience_temperature": 23.5567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T15:40:07.965987+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.5, + "humidity": 75.7, + "water_total": 8273.0, + "average_temperature": 30.6, + "experience_temperature": 22.99, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T15:50:07.873399+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 3.2, + "humidity": 75.4, + "water_total": 8312.0, + "average_temperature": 30.8667, + "experience_temperature": 20.7467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T16:10:07.293430+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.9, + "humidity": 73.5, + "water_total": 8410.0, + "average_temperature": 31.2333, + "experience_temperature": 21.7833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T16:20:06.861314+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.8, + "humidity": 74.2, + "water_total": 8472.0, + "average_temperature": 31.2333, + "experience_temperature": 22.2733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T16:30:10.790606+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.6, + "humidity": 73.3, + "water_total": 8534.0, + "average_temperature": 30.8667, + "experience_temperature": 22.4267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T16:40:08.535524+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.5, + "humidity": 75.7, + "water_total": 8592.0, + "average_temperature": 30.7333, + "experience_temperature": 23.1233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T16:50:06.853673+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.5, + "humidity": 73.9, + "water_total": 8647.0, + "average_temperature": 30.5667, + "experience_temperature": 22.5967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T17:10:06.514676+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.8, + "humidity": 73.3, + "water_total": 57.0, + "average_temperature": 30.0667, + "experience_temperature": 20.9267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T17:20:09.586363+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.5, + "humidity": 76.0, + "water_total": 116.0, + "average_temperature": 29.1333, + "experience_temperature": 21.5833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T17:30:06.390955+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.0, + "humidity": 79.8, + "water_total": 162.0, + "average_temperature": 28.6333, + "experience_temperature": 23.5933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T17:40:08.003613+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.5, + "humidity": 84.4, + "water_total": 204.0, + "average_temperature": 28.5667, + "experience_temperature": 22.6967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T17:50:09.574081+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.5, + "humidity": 84.4, + "water_total": 204.0, + "average_temperature": 28.5667, + "experience_temperature": 22.6967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T18:00:07.187471+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 84.0, + "water_total": 356.0, + "average_temperature": 28.3667, + "experience_temperature": 24.5167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T18:10:08.000935+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.7, + "humidity": 85.7, + "water_total": 424.0, + "average_temperature": 28.0333, + "experience_temperature": 25.2233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T18:20:08.140079+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.0, + "humidity": 85.9, + "water_total": 475.0, + "average_temperature": 27.6667, + "experience_temperature": 23.8467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T18:30:06.633790+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.0, + "humidity": 86.6, + "water_total": 496.0, + "average_temperature": 27.3667, + "experience_temperature": 23.6867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T18:40:05.596889+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.8, + "humidity": 87.2, + "water_total": 512.0, + "average_temperature": 27.5333, + "experience_temperature": 24.6733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T18:50:05.807865+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 86.1, + "water_total": 617.0, + "average_temperature": 27.6667, + "experience_temperature": 24.2367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T19:00:05.834343+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.2, + "humidity": 86.6, + "water_total": 680.0, + "average_temperature": 27.4333, + "experience_temperature": 23.0533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T19:10:05.753509+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.2, + "humidity": 86.6, + "water_total": 680.0, + "average_temperature": 27.4333, + "experience_temperature": 23.0533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T19:20:05.394323+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.3, + "humidity": 87.6, + "water_total": 795.0, + "average_temperature": 27.5, + "experience_temperature": 22.97, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T19:30:10.892192+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 87.1, + "water_total": 846.0, + "average_temperature": 27.4, + "experience_temperature": 24.17, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T19:40:06.040949+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.6, + "humidity": 87.8, + "water_total": 902.0, + "average_temperature": 27.6333, + "experience_temperature": 25.5933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T19:50:05.773482+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 87.2, + "water_total": 962.0, + "average_temperature": 27.4667, + "experience_temperature": 24.2567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T20:00:08.597824+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.0, + "humidity": 87.3, + "water_total": 1017.0, + "average_temperature": 27.4667, + "experience_temperature": 23.9267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T20:10:06.671819+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 88.2, + "water_total": 1075.0, + "average_temperature": 27.5667, + "experience_temperature": 24.5567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T20:20:06.215307+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 88.2, + "water_total": 1075.0, + "average_temperature": 27.5667, + "experience_temperature": 24.5567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T20:30:05.469967+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.7, + "humidity": 88.9, + "water_total": 1190.0, + "average_temperature": 27.6, + "experience_temperature": 25.43, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T20:40:06.201053+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.0, + "humidity": 87.5, + "water_total": 1247.0, + "average_temperature": 27.5667, + "experience_temperature": 24.0667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T20:50:05.443058+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 87.4, + "water_total": 1302.0, + "average_temperature": 27.4667, + "experience_temperature": 24.2967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T21:00:05.775789+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.0, + "humidity": 87.1, + "water_total": 1362.0, + "average_temperature": 27.0667, + "experience_temperature": 23.4867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T21:10:08.013330+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.8, + "humidity": 86.7, + "water_total": 1417.0, + "average_temperature": 27.2333, + "experience_temperature": 24.2733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T21:20:06.898903+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 87.3, + "water_total": 1476.0, + "average_temperature": 26.9667, + "experience_temperature": 23.7767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T21:30:06.430343+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.8, + "humidity": 89.5, + "water_total": 1525.0, + "average_temperature": 27.0667, + "experience_temperature": 24.6667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T21:40:05.401302+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 87.0, + "water_total": 1568.0, + "average_temperature": 26.8667, + "experience_temperature": 23.6167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T21:50:05.671144+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 87.0, + "water_total": 1568.0, + "average_temperature": 26.8667, + "experience_temperature": 23.6167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T22:00:06.463256+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.1, + "humidity": 84.8, + "water_total": 1694.0, + "average_temperature": 27.2, + "experience_temperature": 22.81, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T22:10:05.884603+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.8, + "humidity": 86.5, + "water_total": 1757.0, + "average_temperature": 27.1667, + "experience_temperature": 24.1667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T22:20:05.896926+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.6, + "humidity": 87.1, + "water_total": 1827.0, + "average_temperature": 27.0667, + "experience_temperature": 24.8867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T22:30:06.606697+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.2, + "humidity": 87.7, + "water_total": 1904.0, + "average_temperature": 27.0, + "experience_temperature": 22.84, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T22:40:06.961417+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.1, + "humidity": 87.5, + "water_total": 1975.0, + "average_temperature": 26.8, + "experience_temperature": 22.95, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T22:50:05.463375+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.1, + "humidity": 87.5, + "water_total": 1975.0, + "average_temperature": 26.8, + "experience_temperature": 22.95, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T23:00:06.104217+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 87.7, + "water_total": 2079.0, + "average_temperature": 26.8333, + "experience_temperature": 23.7233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T23:10:05.711278+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.8, + "humidity": 87.3, + "water_total": 2135.0, + "average_temperature": 26.9667, + "experience_temperature": 24.1267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T23:20:06.033414+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 2.0, + "humidity": 87.9, + "water_total": 2165.0, + "average_temperature": 26.6333, + "experience_temperature": 23.2133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T23:30:05.935018+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.8, + "humidity": 88.8, + "water_total": 2185.0, + "average_temperature": 26.6, + "experience_temperature": 24.06, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T23:40:06.230952+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 88.7, + "water_total": 2203.0, + "average_temperature": 26.7667, + "experience_temperature": 23.8567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-22T23:50:06.379271+07:00", + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 88.6, + "water_total": 2221.0, + "average_temperature": 26.8, + "experience_temperature": 23.87, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T00:00:07.045662+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.0, + "humidity": 88.2, + "water_total": 2241.0, + "average_temperature": 26.7, + "experience_temperature": 23.34, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T00:10:06.067397+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.0, + "humidity": 88.2, + "water_total": 2241.0, + "average_temperature": 26.7, + "experience_temperature": 23.34, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T00:20:05.975532+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 88.1, + "water_total": 2367.0, + "average_temperature": 27.1333, + "experience_temperature": 24.1033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T00:30:05.417885+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.7, + "humidity": 88.2, + "water_total": 2446.0, + "average_temperature": 26.8, + "experience_temperature": 24.49, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T00:40:06.109356+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 88.3, + "water_total": 2500.0, + "average_temperature": 26.8667, + "experience_temperature": 23.8767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T00:50:06.244327+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.0, + "humidity": 88.2, + "water_total": 2545.0, + "average_temperature": 26.8333, + "experience_temperature": 23.4733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T01:00:05.829883+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 89.1, + "water_total": 2590.0, + "average_temperature": 26.8333, + "experience_temperature": 24.0033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T01:10:05.686375+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 89.1, + "water_total": 2590.0, + "average_temperature": 26.8333, + "experience_temperature": 24.0033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T01:20:06.060959+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 88.2, + "water_total": 2699.0, + "average_temperature": 26.8667, + "experience_temperature": 23.8567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T01:30:06.598469+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 88.3, + "water_total": 2746.0, + "average_temperature": 26.9, + "experience_temperature": 23.91, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T01:40:05.872466+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.8, + "humidity": 88.7, + "water_total": 2779.0, + "average_temperature": 26.6333, + "experience_temperature": 24.0733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T01:50:06.294359+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.0, + "humidity": 89.5, + "water_total": 2799.0, + "average_temperature": 26.6333, + "experience_temperature": 23.5333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T02:00:05.919125+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 88.8, + "water_total": 2815.0, + "average_temperature": 26.6, + "experience_temperature": 23.71, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T02:10:06.023638+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 89.2, + "water_total": 2835.0, + "average_temperature": 26.9333, + "experience_temperature": 24.1233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T02:20:06.432186+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 88.0, + "water_total": 2910.0, + "average_temperature": 27.0667, + "experience_temperature": 24.0167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T02:30:05.891502+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.7, + "humidity": 88.7, + "water_total": 3004.0, + "average_temperature": 26.8333, + "experience_temperature": 24.6233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T02:40:05.869573+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 89.5, + "water_total": 3062.0, + "average_temperature": 26.7, + "experience_temperature": 23.95, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T02:50:07.330362+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.0, + "humidity": 88.7, + "water_total": 3107.0, + "average_temperature": 26.7, + "experience_temperature": 23.44, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T03:00:05.834589+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.6, + "humidity": 88.9, + "water_total": 3150.0, + "average_temperature": 26.7, + "experience_temperature": 24.88, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T03:10:05.688271+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 88.8, + "water_total": 3204.0, + "average_temperature": 26.7, + "experience_temperature": 23.81, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T03:20:06.019247+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 88.6, + "water_total": 3245.0, + "average_temperature": 26.6667, + "experience_temperature": 23.7367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T03:30:05.559545+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 89.1, + "water_total": 3305.0, + "average_temperature": 26.6667, + "experience_temperature": 23.8367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T03:50:06.352746+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 89.0, + "water_total": 3402.0, + "average_temperature": 26.7, + "experience_temperature": 23.85, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T04:00:06.363206+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.0, + "humidity": 89.2, + "water_total": 3447.0, + "average_temperature": 26.7333, + "experience_temperature": 23.5733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T04:10:05.687999+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.7, + "humidity": 89.0, + "water_total": 3483.0, + "average_temperature": 26.5667, + "experience_temperature": 24.4167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T04:20:06.028643+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.0, + "humidity": 89.4, + "water_total": 3503.0, + "average_temperature": 26.5333, + "experience_temperature": 23.4133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T04:30:06.367878+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 89.8, + "water_total": 3522.0, + "average_temperature": 26.6667, + "experience_temperature": 23.9767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T04:40:06.390633+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 89.3, + "water_total": 3539.0, + "average_temperature": 26.5667, + "experience_temperature": 23.7767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T04:50:06.002626+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.1, + "humidity": 89.5, + "water_total": 3559.0, + "average_temperature": 26.6, + "experience_temperature": 23.15, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T05:00:05.975962+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 89.7, + "water_total": 3578.0, + "average_temperature": 26.6667, + "experience_temperature": 23.9567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T05:10:06.076567+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.7, + "humidity": 89.4, + "water_total": 3595.0, + "average_temperature": 27.0, + "experience_temperature": 24.93, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T05:20:06.003218+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 88.2, + "water_total": 3679.0, + "average_temperature": 27.1, + "experience_temperature": 24.09, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T05:30:06.274765+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 89.9, + "water_total": 3770.0, + "average_temperature": 26.8667, + "experience_temperature": 24.1967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T05:40:06.429015+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.8, + "humidity": 89.9, + "water_total": 3827.0, + "average_temperature": 26.7333, + "experience_temperature": 24.4133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T06:00:05.626025+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.6, + "humidity": 89.0, + "water_total": 3939.0, + "average_temperature": 27.1, + "experience_temperature": 25.3, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T06:10:06.706444+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 89.5, + "water_total": 4014.0, + "average_temperature": 26.8, + "experience_temperature": 24.05, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T06:30:06.554777+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.3, + "humidity": 90.3, + "water_total": 4202.0, + "average_temperature": 26.7, + "experience_temperature": 22.71, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T06:40:07.068291+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.0, + "humidity": 89.5, + "water_total": 4263.0, + "average_temperature": 26.5333, + "experience_temperature": 23.4333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T06:50:06.676742+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.0, + "humidity": 90.2, + "water_total": 4326.0, + "average_temperature": 26.6333, + "experience_temperature": 23.6733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T07:00:05.690110+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.0, + "humidity": 90.2, + "water_total": 4326.0, + "average_temperature": 26.6333, + "experience_temperature": 23.6733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T07:10:06.388322+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 90.6, + "water_total": 4461.0, + "average_temperature": 27.0, + "experience_temperature": 24.47, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T07:20:07.321088+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.8, + "humidity": 89.9, + "water_total": 4518.0, + "average_temperature": 27.0, + "experience_temperature": 24.68, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T07:30:06.308447+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.8, + "humidity": 89.9, + "water_total": 4518.0, + "average_temperature": 27.0, + "experience_temperature": 24.68, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T07:40:06.394862+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.0, + "humidity": 89.7, + "water_total": 4649.0, + "average_temperature": 27.5, + "experience_temperature": 24.44, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T07:50:07.554098+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 89.4, + "water_total": 4706.0, + "average_temperature": 27.2, + "experience_temperature": 24.43, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T08:00:05.984265+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 89.4, + "water_total": 4706.0, + "average_temperature": 27.2, + "experience_temperature": 24.43, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T08:10:06.670992+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.2, + "humidity": 89.4, + "water_total": 4771.0, + "average_temperature": 27.5, + "experience_temperature": 23.68, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T08:20:06.649679+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.2, + "humidity": 88.9, + "water_total": 4838.0, + "average_temperature": 27.8333, + "experience_temperature": 23.9133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T08:30:08.919467+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.6, + "humidity": 85.9, + "water_total": 4954.0, + "average_temperature": 28.8667, + "experience_temperature": 22.9467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T08:40:06.802027+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.8, + "humidity": 84.0, + "water_total": 5013.0, + "average_temperature": 28.8667, + "experience_temperature": 21.8667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T08:50:06.734421+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.4, + "humidity": 83.1, + "water_total": 5066.0, + "average_temperature": 29.1, + "experience_temperature": 23.32, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T09:00:06.283080+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.7, + "humidity": 83.1, + "water_total": 5123.0, + "average_temperature": 29.0, + "experience_temperature": 22.17, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T09:10:05.825708+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 82.0, + "water_total": 5180.0, + "average_temperature": 28.8667, + "experience_temperature": 22.5167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T09:20:06.912891+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.6, + "humidity": 81.2, + "water_total": 5248.0, + "average_temperature": 29.2333, + "experience_temperature": 22.3733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T09:30:06.817925+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.8, + "humidity": 80.1, + "water_total": 5313.0, + "average_temperature": 29.3333, + "experience_temperature": 25.0533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T09:40:08.165390+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.6, + "humidity": 77.8, + "water_total": 5381.0, + "average_temperature": 29.5333, + "experience_temperature": 21.9933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T09:50:07.470032+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.6, + "humidity": 77.2, + "water_total": 5453.0, + "average_temperature": 29.7667, + "experience_temperature": 22.1067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T10:00:11.638116+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 78.5, + "water_total": 5534.0, + "average_temperature": 29.8, + "experience_temperature": 22.75, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T10:10:06.509859+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 77.9, + "water_total": 5593.0, + "average_temperature": 29.8667, + "experience_temperature": 22.6967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T10:20:06.822144+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 77.9, + "water_total": 5593.0, + "average_temperature": 29.8667, + "experience_temperature": 22.6967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T10:30:06.312047+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 72.8, + "water_total": 5699.0, + "average_temperature": 30.7333, + "experience_temperature": 22.5433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T10:40:06.544415+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.9, + "humidity": 71.9, + "water_total": 5778.0, + "average_temperature": 30.9667, + "experience_temperature": 21.1967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T10:50:07.489900+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.9, + "humidity": 71.6, + "water_total": 5856.0, + "average_temperature": 31.0, + "experience_temperature": 21.17, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T11:00:06.419918+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 3.1, + "humidity": 73.6, + "water_total": 5930.0, + "average_temperature": 30.9667, + "experience_temperature": 20.8367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T11:10:11.092647+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.8, + "humidity": 73.9, + "water_total": 6007.0, + "average_temperature": 30.7667, + "experience_temperature": 21.7467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T11:20:06.867596+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 73.9, + "water_total": 6084.0, + "average_temperature": 30.8, + "experience_temperature": 22.83, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T11:30:06.890456+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 73.8, + "water_total": 6162.0, + "average_temperature": 30.7, + "experience_temperature": 22.71, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T11:40:06.385759+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 73.8, + "water_total": 6238.0, + "average_temperature": 31.1333, + "experience_temperature": 23.1433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T11:50:07.792258+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 73.8, + "water_total": 6238.0, + "average_temperature": 31.1333, + "experience_temperature": 23.1433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T12:00:07.350277+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 3.0, + "humidity": 72.9, + "water_total": 6362.0, + "average_temperature": 30.7333, + "experience_temperature": 20.8133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T12:10:06.848383+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 3.1, + "humidity": 72.6, + "water_total": 6422.0, + "average_temperature": 31.2333, + "experience_temperature": 20.9033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T12:20:07.046204+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.4, + "humidity": 73.5, + "water_total": 6482.0, + "average_temperature": 30.6, + "experience_temperature": 22.9, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T12:30:06.973625+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 3.2, + "humidity": 73.4, + "water_total": 6543.0, + "average_temperature": 31.0333, + "experience_temperature": 20.5133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T12:40:07.558727+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.8, + "humidity": 72.8, + "water_total": 6611.0, + "average_temperature": 31.1, + "experience_temperature": 21.86, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T12:50:08.202760+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.8, + "humidity": 72.9, + "water_total": 6670.0, + "average_temperature": 31.0333, + "experience_temperature": 21.8133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T13:00:06.683383+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.9, + "humidity": 73.7, + "water_total": 6741.0, + "average_temperature": 31.2333, + "experience_temperature": 21.8233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T13:10:07.175217+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.7, + "humidity": 75.4, + "water_total": 6803.0, + "average_temperature": 30.5333, + "experience_temperature": 22.1633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T13:20:08.275804+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.4, + "humidity": 75.3, + "water_total": 6862.0, + "average_temperature": 30.3667, + "experience_temperature": 23.0267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T13:30:09.750606+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 76.3, + "water_total": 6918.0, + "average_temperature": 30.3, + "experience_temperature": 22.81, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T13:40:11.201553+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.9, + "humidity": 78.7, + "water_total": 6974.0, + "average_temperature": 30.3667, + "experience_temperature": 21.9567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T13:50:07.683700+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 77.0, + "water_total": 7021.0, + "average_temperature": 30.1667, + "experience_temperature": 22.8167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T14:10:10.032890+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 76.5, + "water_total": 7135.0, + "average_temperature": 30.5333, + "experience_temperature": 23.0833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T14:20:07.299507+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.6, + "humidity": 79.4, + "water_total": 7192.0, + "average_temperature": 29.2667, + "experience_temperature": 22.0467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T14:30:07.873791+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 79.7, + "water_total": 7235.0, + "average_temperature": 28.9, + "experience_temperature": 22.09, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T14:40:07.812347+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.3, + "humidity": 80.9, + "water_total": 7278.0, + "average_temperature": 28.5, + "experience_temperature": 22.63, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T14:50:07.012090+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.3, + "humidity": 82.1, + "water_total": 7317.0, + "average_temperature": 28.3667, + "experience_temperature": 22.7367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T15:10:06.719356+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.2, + "humidity": 83.0, + "water_total": 7417.0, + "average_temperature": 28.6333, + "experience_temperature": 23.5333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T15:20:08.600744+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.2, + "humidity": 83.0, + "water_total": 7417.0, + "average_temperature": 28.6333, + "experience_temperature": 23.5333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T15:30:08.432518+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 79.5, + "water_total": 7519.0, + "average_temperature": 29.6667, + "experience_temperature": 22.8167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T15:40:06.567329+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.7, + "humidity": 79.5, + "water_total": 7567.0, + "average_temperature": 29.9333, + "experience_temperature": 22.3833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T15:50:07.025758+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.6, + "humidity": 81.3, + "water_total": 7627.0, + "average_temperature": 29.8, + "experience_temperature": 22.96, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T16:10:08.600460+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 80.9, + "water_total": 7760.0, + "average_temperature": 29.7667, + "experience_temperature": 23.1967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T16:20:08.115147+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.7, + "humidity": 80.6, + "water_total": 7813.0, + "average_temperature": 29.8333, + "experience_temperature": 22.5033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T16:30:09.740122+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.9, + "humidity": 80.6, + "water_total": 7866.0, + "average_temperature": 29.9, + "experience_temperature": 21.87, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T16:40:07.887444+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.7, + "humidity": 81.5, + "water_total": 7922.0, + "average_temperature": 29.7333, + "experience_temperature": 22.5833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T16:50:06.916403+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.3, + "humidity": 82.1, + "water_total": 8000.0, + "average_temperature": 29.5, + "experience_temperature": 23.87, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T17:10:06.942820+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.2, + "humidity": 82.4, + "water_total": 66.0, + "average_temperature": 29.2, + "experience_temperature": 23.98, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T17:20:06.699177+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.4, + "humidity": 83.4, + "water_total": 120.0, + "average_temperature": 29.1, + "experience_temperature": 23.38, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T17:30:06.782928+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.3, + "humidity": 82.6, + "water_total": 155.0, + "average_temperature": 29.0333, + "experience_temperature": 23.5033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T17:40:07.558078+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.6, + "humidity": 83.1, + "water_total": 188.0, + "average_temperature": 28.8333, + "experience_temperature": 22.3533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T17:50:06.672835+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.2, + "humidity": 82.1, + "water_total": 223.0, + "average_temperature": 28.7, + "experience_temperature": 23.42, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T18:00:06.726388+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 83.6, + "water_total": 227.0, + "average_temperature": 28.8, + "experience_temperature": 22.77, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T18:10:07.605424+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.4, + "humidity": 84.6, + "water_total": 227.0, + "average_temperature": 28.5667, + "experience_temperature": 23.0867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T18:20:07.582986+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.4, + "humidity": 86.4, + "water_total": 227.0, + "average_temperature": 28.0667, + "experience_temperature": 22.9467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T18:30:10.444575+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.1, + "humidity": 86.5, + "water_total": 227.0, + "average_temperature": 27.9, + "experience_temperature": 23.85, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T18:40:06.712400+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 87.4, + "water_total": 233.0, + "average_temperature": 28.1, + "experience_temperature": 22.83, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T18:50:07.298434+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.2, + "humidity": 85.7, + "water_total": 324.0, + "average_temperature": 28.3, + "experience_temperature": 23.74, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T19:00:07.041923+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.2, + "humidity": 89.9, + "water_total": 404.0, + "average_temperature": 28.1, + "experience_temperature": 24.38, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T19:10:07.111130+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.1, + "humidity": 89.1, + "water_total": 458.0, + "average_temperature": 28.0, + "experience_temperature": 24.47, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T19:20:07.151450+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.1, + "humidity": 87.6, + "water_total": 502.0, + "average_temperature": 27.9667, + "experience_temperature": 24.1367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T19:30:06.900754+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.1, + "humidity": 87.8, + "water_total": 554.0, + "average_temperature": 27.8667, + "experience_temperature": 24.0767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T19:40:06.464947+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.4, + "humidity": 86.7, + "water_total": 602.0, + "average_temperature": 28.0, + "experience_temperature": 22.94, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T19:50:07.818093+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.2, + "humidity": 86.1, + "water_total": 648.0, + "average_temperature": 28.0667, + "experience_temperature": 23.5867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T20:00:07.114166+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 87.0, + "water_total": 693.0, + "average_temperature": 27.8, + "experience_temperature": 22.45, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T20:10:09.137372+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 87.3, + "water_total": 733.0, + "average_temperature": 28.0667, + "experience_temperature": 22.7767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T20:20:09.024132+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.3, + "humidity": 85.1, + "water_total": 774.0, + "average_temperature": 28.1333, + "experience_temperature": 23.1033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T20:30:07.097524+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.3, + "humidity": 85.1, + "water_total": 774.0, + "average_temperature": 28.1333, + "experience_temperature": 23.1033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T20:40:07.214187+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.5, + "humidity": 85.8, + "water_total": 837.0, + "average_temperature": 27.9333, + "experience_temperature": 22.3433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T20:50:07.664392+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.7, + "humidity": 85.9, + "water_total": 870.0, + "average_temperature": 27.7, + "experience_temperature": 24.93, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T21:00:06.707143+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 87.5, + "water_total": 905.0, + "average_temperature": 27.6333, + "experience_temperature": 24.4833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T21:10:07.837729+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.8, + "humidity": 88.6, + "water_total": 948.0, + "average_temperature": 27.6333, + "experience_temperature": 25.0533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T21:20:06.734112+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.2, + "humidity": 88.7, + "water_total": 988.0, + "average_temperature": 27.8, + "experience_temperature": 23.84, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T21:30:05.800967+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.0, + "humidity": 88.2, + "water_total": 1027.0, + "average_temperature": 27.4667, + "experience_temperature": 24.1067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T21:40:05.810131+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.8, + "humidity": 88.5, + "water_total": 1073.0, + "average_temperature": 27.5333, + "experience_temperature": 24.9333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T21:50:06.373478+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.8, + "humidity": 87.4, + "water_total": 1108.0, + "average_temperature": 27.4333, + "experience_temperature": 24.6133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T22:00:09.711957+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.8, + "humidity": 86.9, + "water_total": 1155.0, + "average_temperature": 27.4333, + "experience_temperature": 24.5133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T22:10:08.013421+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.5, + "humidity": 87.3, + "water_total": 1214.0, + "average_temperature": 27.3333, + "experience_temperature": 25.5433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T22:20:05.747335+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 87.9, + "water_total": 1258.0, + "average_temperature": 27.1667, + "experience_temperature": 24.0967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T22:30:05.694445+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.8, + "humidity": 88.0, + "water_total": 1303.0, + "average_temperature": 26.9, + "experience_temperature": 24.2, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T22:40:05.773807+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.7, + "humidity": 88.2, + "water_total": 1333.0, + "average_temperature": 26.7333, + "experience_temperature": 24.4233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T22:50:06.059502+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.7, + "humidity": 88.2, + "water_total": 1333.0, + "average_temperature": 26.7333, + "experience_temperature": 24.4233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T23:00:05.464478+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 2.0, + "humidity": 88.7, + "water_total": 1360.0, + "average_temperature": 26.7333, + "experience_temperature": 23.4733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T23:10:07.445380+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 88.8, + "water_total": 1365.0, + "average_temperature": 26.6667, + "experience_temperature": 23.7767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T23:20:05.827207+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 88.8, + "water_total": 1365.0, + "average_temperature": 26.7667, + "experience_temperature": 23.8767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T23:30:06.068538+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 88.5, + "water_total": 1365.0, + "average_temperature": 26.7, + "experience_temperature": 23.75, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T23:40:06.287470+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 88.9, + "water_total": 1366.0, + "average_temperature": 26.7333, + "experience_temperature": 23.8633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-23T23:50:07.085835+07:00", + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 89.0, + "water_total": 1370.0, + "average_temperature": 26.6333, + "experience_temperature": 23.7833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T00:00:05.844258+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 88.6, + "water_total": 1370.0, + "average_temperature": 26.6, + "experience_temperature": 23.67, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T00:10:06.155433+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 89.1, + "water_total": 1377.0, + "average_temperature": 27.2333, + "experience_temperature": 24.4033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T00:20:06.200713+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 87.1, + "water_total": 1470.0, + "average_temperature": 27.2333, + "experience_temperature": 24.0033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T00:30:05.984454+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 88.0, + "water_total": 1548.0, + "average_temperature": 26.9333, + "experience_temperature": 23.8833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T00:40:05.600261+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 88.5, + "water_total": 1586.0, + "average_temperature": 26.7667, + "experience_temperature": 23.8167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T00:50:06.526384+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.0, + "humidity": 90.9, + "water_total": 1618.0, + "average_temperature": 26.9, + "experience_temperature": 24.08, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T01:00:06.637942+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 92.1, + "water_total": 1646.0, + "average_temperature": 26.4667, + "experience_temperature": 24.2367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T01:10:05.728350+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 89.9, + "water_total": 1680.0, + "average_temperature": 26.4667, + "experience_temperature": 23.7967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T01:20:05.417587+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 89.5, + "water_total": 1713.0, + "average_temperature": 26.0333, + "experience_temperature": 23.2833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T01:30:06.534873+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.7, + "humidity": 90.9, + "water_total": 1736.0, + "average_temperature": 25.8667, + "experience_temperature": 24.0967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T01:40:06.113446+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.7, + "humidity": 89.9, + "water_total": 1749.0, + "average_temperature": 26.0, + "experience_temperature": 24.03, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T01:50:05.806996+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 90.2, + "water_total": 1749.0, + "average_temperature": 25.9667, + "experience_temperature": 23.3567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T02:00:06.524790+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 90.2, + "water_total": 1749.0, + "average_temperature": 25.9667, + "experience_temperature": 23.3567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T02:10:05.308655+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 90.9, + "water_total": 1754.0, + "average_temperature": 26.0667, + "experience_temperature": 23.5967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T02:20:05.981375+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 88.3, + "water_total": 1813.0, + "average_temperature": 26.6, + "experience_temperature": 23.61, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T02:30:06.052307+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.8, + "humidity": 90.9, + "water_total": 1895.0, + "average_temperature": 26.2, + "experience_temperature": 24.08, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T02:40:05.891244+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 94.7, + "water_total": 1930.0, + "average_temperature": 25.7667, + "experience_temperature": 24.0567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T02:50:06.686683+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.4, + "humidity": 93.5, + "water_total": 1951.0, + "average_temperature": 25.5667, + "experience_temperature": 25.3667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T03:00:05.803187+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.6, + "humidity": 93.0, + "water_total": 1978.0, + "average_temperature": 25.5667, + "experience_temperature": 24.5667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T03:10:05.241331+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.7, + "humidity": 90.6, + "water_total": 1999.0, + "average_temperature": 25.6333, + "experience_temperature": 23.8033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T03:20:05.396103+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.6, + "humidity": 91.6, + "water_total": 2014.0, + "average_temperature": 25.5333, + "experience_temperature": 24.2533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T03:30:06.190429+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.7, + "humidity": 90.8, + "water_total": 2040.0, + "average_temperature": 25.5667, + "experience_temperature": 23.7767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T03:40:05.749301+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.8, + "humidity": 91.0, + "water_total": 2064.0, + "average_temperature": 25.7333, + "experience_temperature": 23.6333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T03:50:05.311665+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 90.3, + "water_total": 2088.0, + "average_temperature": 25.7, + "experience_temperature": 23.11, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T04:00:05.570449+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.7, + "humidity": 90.5, + "water_total": 2103.0, + "average_temperature": 25.6667, + "experience_temperature": 23.8167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T04:10:06.099101+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.4, + "humidity": 89.8, + "water_total": 2118.0, + "average_temperature": 25.5667, + "experience_temperature": 24.6267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T04:20:05.957176+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.4, + "humidity": 89.1, + "water_total": 2144.0, + "average_temperature": 25.6333, + "experience_temperature": 24.5533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T04:30:06.038735+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.6, + "humidity": 89.5, + "water_total": 2170.0, + "average_temperature": 25.8, + "experience_temperature": 24.1, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T04:40:06.060885+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.2, + "humidity": 90.8, + "water_total": 2191.0, + "average_temperature": 25.6, + "experience_temperature": 25.56, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T04:50:05.482256+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.8, + "humidity": 91.9, + "water_total": 2217.0, + "average_temperature": 25.5667, + "experience_temperature": 23.6467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T05:00:06.198044+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.6, + "humidity": 90.8, + "water_total": 2237.0, + "average_temperature": 25.4667, + "experience_temperature": 24.0267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T05:10:06.507779+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.7, + "humidity": 90.8, + "water_total": 2257.0, + "average_temperature": 25.5, + "experience_temperature": 23.71, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T05:20:06.398719+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.7, + "humidity": 90.5, + "water_total": 2279.0, + "average_temperature": 25.5667, + "experience_temperature": 23.7167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T05:30:07.004936+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.7, + "humidity": 90.1, + "water_total": 2301.0, + "average_temperature": 25.4667, + "experience_temperature": 23.5367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T05:40:06.406197+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.4, + "humidity": 90.4, + "water_total": 2327.0, + "average_temperature": 25.3667, + "experience_temperature": 24.5467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T05:50:06.896384+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.6, + "humidity": 92.2, + "water_total": 2348.0, + "average_temperature": 25.5, + "experience_temperature": 24.34, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T06:00:06.163682+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.6, + "humidity": 92.2, + "water_total": 2348.0, + "average_temperature": 25.5, + "experience_temperature": 24.34, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T06:10:05.683593+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.7, + "humidity": 92.7, + "water_total": 2402.0, + "average_temperature": 25.3667, + "experience_temperature": 23.9567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T06:20:05.732037+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.7, + "humidity": 91.7, + "water_total": 2422.0, + "average_temperature": 25.3667, + "experience_temperature": 23.7567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T06:30:06.292982+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.6, + "humidity": 91.2, + "water_total": 2432.0, + "average_temperature": 25.4333, + "experience_temperature": 24.0733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T06:40:07.025544+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.5, + "humidity": 91.6, + "water_total": 2442.0, + "average_temperature": 25.2333, + "experience_temperature": 24.3033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T06:50:06.174736+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.5, + "humidity": 91.5, + "water_total": 2446.0, + "average_temperature": 25.5, + "experience_temperature": 21.05, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T07:00:05.726784+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.1, + "humidity": 91.0, + "water_total": 2473.0, + "average_temperature": 25.5667, + "experience_temperature": 22.4167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T07:10:06.666286+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.8, + "humidity": 91.9, + "water_total": 2494.0, + "average_temperature": 25.4333, + "experience_temperature": 23.5133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T07:20:06.111137+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.4, + "humidity": 92.3, + "water_total": 2504.0, + "average_temperature": 25.5667, + "experience_temperature": 21.6267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T07:30:06.312445+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.6, + "humidity": 91.5, + "water_total": 2513.0, + "average_temperature": 25.8333, + "experience_temperature": 21.0333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T07:40:06.065919+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.1, + "humidity": 91.2, + "water_total": 2529.0, + "average_temperature": 26.0, + "experience_temperature": 22.89, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T07:50:07.617745+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 90.9, + "water_total": 2550.0, + "average_temperature": 26.3, + "experience_temperature": 23.83, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T08:00:05.725991+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 90.9, + "water_total": 2550.0, + "average_temperature": 26.3, + "experience_temperature": 23.83, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T08:10:05.207057+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.1, + "humidity": 88.7, + "water_total": 2565.0, + "average_temperature": 26.5667, + "experience_temperature": 19.4567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T08:20:06.873024+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.5, + "humidity": 85.4, + "water_total": 2580.0, + "average_temperature": 27.5333, + "experience_temperature": 21.8633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T08:30:06.072641+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 4.1, + "humidity": 82.3, + "water_total": 2629.0, + "average_temperature": 27.9667, + "experience_temperature": 16.0767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T08:40:06.666335+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.5, + "humidity": 82.1, + "water_total": 2638.0, + "average_temperature": 28.3667, + "experience_temperature": 22.0367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T08:50:07.096829+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.1, + "humidity": 81.0, + "water_total": 2653.0, + "average_temperature": 28.7, + "experience_temperature": 20.05, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T09:00:06.031601+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.4, + "humidity": 79.7, + "water_total": 2663.0, + "average_temperature": 29.5333, + "experience_temperature": 23.0733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T09:10:05.942804+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.7, + "humidity": 78.2, + "water_total": 2684.0, + "average_temperature": 29.6, + "experience_temperature": 21.79, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T09:20:07.576984+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.6, + "humidity": 73.5, + "water_total": 2699.0, + "average_temperature": 29.8333, + "experience_temperature": 21.4333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T09:30:07.563134+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 5.1, + "humidity": 71.6, + "water_total": 2709.0, + "average_temperature": 30.0667, + "experience_temperature": 12.5367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T09:40:06.857680+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 5.7, + "humidity": 71.7, + "water_total": 2719.0, + "average_temperature": 30.1667, + "experience_temperature": 10.5567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T09:50:07.291333+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.0, + "humidity": 72.3, + "water_total": 2734.0, + "average_temperature": 30.2333, + "experience_temperature": 20.1933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T10:00:07.055500+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.0, + "humidity": 72.3, + "water_total": 2734.0, + "average_temperature": 30.2333, + "experience_temperature": 20.1933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T10:10:06.741673+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 5.6, + "humidity": 71.5, + "water_total": 2753.0, + "average_temperature": 30.5667, + "experience_temperature": 11.2667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T10:20:06.932366+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.2, + "humidity": 70.9, + "water_total": 2763.0, + "average_temperature": 30.4333, + "experience_temperature": 19.4133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T10:30:06.566996+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.8, + "humidity": 70.9, + "water_total": 2778.0, + "average_temperature": 30.6667, + "experience_temperature": 21.0467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T10:40:06.059571+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.8, + "humidity": 70.5, + "water_total": 2783.0, + "average_temperature": 30.7667, + "experience_temperature": 21.0667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T10:50:08.944427+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.8, + "humidity": 69.6, + "water_total": 2792.0, + "average_temperature": 31.0667, + "experience_temperature": 21.1867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T11:00:06.574789+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.0, + "humidity": 69.5, + "water_total": 2802.0, + "average_temperature": 31.0667, + "experience_temperature": 20.4667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T11:10:07.227604+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.9, + "humidity": 69.2, + "water_total": 2807.0, + "average_temperature": 30.8333, + "experience_temperature": 20.5233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T11:20:05.994619+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.9, + "humidity": 69.2, + "water_total": 2807.0, + "average_temperature": 30.8333, + "experience_temperature": 20.5233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T11:30:07.315387+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.6, + "humidity": 70.9, + "water_total": 2827.0, + "average_temperature": 31.2333, + "experience_temperature": 22.3133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T11:40:08.250367+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.0, + "humidity": 68.4, + "water_total": 2838.0, + "average_temperature": 31.1333, + "experience_temperature": 20.3133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T11:50:06.929882+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.0, + "humidity": 68.4, + "water_total": 2838.0, + "average_temperature": 31.1333, + "experience_temperature": 20.3133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T12:00:06.458050+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.2, + "humidity": 69.2, + "water_total": 2857.0, + "average_temperature": 31.0333, + "experience_temperature": 19.6733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T12:10:07.448767+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.0, + "humidity": 67.0, + "water_total": 2903.0, + "average_temperature": 31.4333, + "experience_temperature": 20.3333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T12:20:07.371590+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.2, + "humidity": 69.7, + "water_total": 2919.0, + "average_temperature": 31.3, + "experience_temperature": 20.04, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T12:30:06.507939+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.8, + "humidity": 68.5, + "water_total": 2946.0, + "average_temperature": 31.5667, + "experience_temperature": 21.4667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T12:40:06.496726+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.2, + "humidity": 67.3, + "water_total": 2968.0, + "average_temperature": 31.2, + "experience_temperature": 19.46, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T12:50:07.268239+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.2, + "humidity": 68.5, + "water_total": 2989.0, + "average_temperature": 31.2333, + "experience_temperature": 19.7333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T13:00:07.060182+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.8, + "humidity": 68.2, + "water_total": 3006.0, + "average_temperature": 31.0333, + "experience_temperature": 20.8733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T13:10:07.806777+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.7, + "humidity": 67.5, + "water_total": 3025.0, + "average_temperature": 31.4667, + "experience_temperature": 21.5167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T13:20:06.663958+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.2, + "humidity": 66.1, + "water_total": 3038.0, + "average_temperature": 31.4, + "experience_temperature": 19.42, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T13:30:07.451724+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.2, + "humidity": 70.0, + "water_total": 3058.0, + "average_temperature": 31.9333, + "experience_temperature": 20.7333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T13:40:06.876351+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.0, + "humidity": 69.8, + "water_total": 3077.0, + "average_temperature": 31.5333, + "experience_temperature": 20.9933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T13:50:07.783849+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.1, + "humidity": 71.9, + "water_total": 3093.0, + "average_temperature": 31.2, + "experience_temperature": 20.73, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T14:10:07.761617+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.1, + "humidity": 70.4, + "water_total": 3113.0, + "average_temperature": 31.3333, + "experience_temperature": 20.5633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T14:20:07.190743+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.9, + "humidity": 70.1, + "water_total": 3124.0, + "average_temperature": 31.6333, + "experience_temperature": 21.5033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T14:30:06.716761+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.0, + "humidity": 73.6, + "water_total": 3134.0, + "average_temperature": 30.8, + "experience_temperature": 21.02, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T14:40:07.642366+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.9, + "humidity": 75.1, + "water_total": 3144.0, + "average_temperature": 30.7667, + "experience_temperature": 21.6367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T14:50:06.050470+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.2, + "humidity": 73.6, + "water_total": 3154.0, + "average_temperature": 31.3, + "experience_temperature": 20.82, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T15:10:17.322956+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.0, + "humidity": 73.6, + "water_total": 3180.0, + "average_temperature": 30.7667, + "experience_temperature": 20.9867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T15:20:05.933524+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.9, + "humidity": 75.3, + "water_total": 3188.0, + "average_temperature": 30.8333, + "experience_temperature": 21.7433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T15:30:05.392022+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.9, + "humidity": 73.1, + "water_total": 3200.0, + "average_temperature": 31.0333, + "experience_temperature": 21.5033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T15:40:05.905990+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.9, + "humidity": 73.1, + "water_total": 3200.0, + "average_temperature": 31.0333, + "experience_temperature": 21.5033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T15:50:05.882765+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.0, + "humidity": 75.4, + "water_total": 3220.0, + "average_temperature": 30.7, + "experience_temperature": 21.28, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T16:10:06.772781+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.8, + "humidity": 77.7, + "water_total": 3240.0, + "average_temperature": 30.3667, + "experience_temperature": 22.1067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T16:20:06.526665+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.7, + "humidity": 77.9, + "water_total": 3245.0, + "average_temperature": 30.5, + "experience_temperature": 22.63, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T16:30:06.041449+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.6, + "humidity": 77.8, + "water_total": 3255.0, + "average_temperature": 30.3, + "experience_temperature": 22.76, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T16:40:06.254362+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.8, + "humidity": 78.0, + "water_total": 3271.0, + "average_temperature": 30.3333, + "experience_temperature": 22.1333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T16:50:06.136336+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.7, + "humidity": 77.1, + "water_total": 3304.0, + "average_temperature": 30.4667, + "experience_temperature": 22.4367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T17:10:05.737812+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.5, + "humidity": 79.5, + "water_total": 31.0, + "average_temperature": 29.4667, + "experience_temperature": 22.6167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T17:20:07.288417+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.6, + "humidity": 79.6, + "water_total": 67.0, + "average_temperature": 29.4667, + "experience_temperature": 22.2867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T17:30:08.527088+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.1, + "humidity": 78.1, + "water_total": 98.0, + "average_temperature": 29.7, + "experience_temperature": 20.47, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T17:40:06.032625+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.1, + "humidity": 78.1, + "water_total": 98.0, + "average_temperature": 29.7, + "experience_temperature": 20.47, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T17:50:07.411836+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 3.0, + "humidity": 75.4, + "water_total": 146.0, + "average_temperature": 29.9, + "experience_temperature": 20.48, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T18:00:06.560912+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.9, + "humidity": 80.3, + "water_total": 146.0, + "average_temperature": 29.2667, + "experience_temperature": 21.1767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T18:10:07.017179+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.5, + "humidity": 81.8, + "water_total": 146.0, + "average_temperature": 28.8333, + "experience_temperature": 22.4433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T18:20:05.908515+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.5, + "humidity": 82.4, + "water_total": 150.0, + "average_temperature": 28.7, + "experience_temperature": 22.43, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T18:30:05.950705+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.7, + "humidity": 82.4, + "water_total": 150.0, + "average_temperature": 28.7333, + "experience_temperature": 21.7633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T18:40:06.878600+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.4, + "humidity": 82.5, + "water_total": 150.0, + "average_temperature": 28.7, + "experience_temperature": 22.8, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T18:50:06.256956+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.6, + "humidity": 83.3, + "water_total": 208.0, + "average_temperature": 28.6, + "experience_temperature": 22.16, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T19:00:05.695602+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.4, + "humidity": 82.9, + "water_total": 254.0, + "average_temperature": 28.4667, + "experience_temperature": 22.6467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T19:10:06.413335+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.3, + "humidity": 83.3, + "water_total": 287.0, + "average_temperature": 28.3333, + "experience_temperature": 22.9433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T19:20:05.439367+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.5, + "humidity": 83.2, + "water_total": 309.0, + "average_temperature": 28.3, + "experience_temperature": 22.19, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T19:30:06.035433+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 83.3, + "water_total": 336.0, + "average_temperature": 28.2333, + "experience_temperature": 24.2433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T19:40:09.877134+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.2, + "humidity": 84.0, + "water_total": 363.0, + "average_temperature": 28.1, + "experience_temperature": 23.2, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T19:50:05.611967+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.3, + "humidity": 84.5, + "water_total": 385.0, + "average_temperature": 27.9667, + "experience_temperature": 22.8167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T20:00:06.754234+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.3, + "humidity": 84.5, + "water_total": 385.0, + "average_temperature": 27.9667, + "experience_temperature": 22.8167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T20:10:06.231375+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.5, + "humidity": 84.7, + "water_total": 427.0, + "average_temperature": 27.9, + "experience_temperature": 22.09, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T20:20:05.835584+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 85.4, + "water_total": 448.0, + "average_temperature": 27.8, + "experience_temperature": 24.23, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T20:30:06.713484+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.3, + "humidity": 85.4, + "water_total": 470.0, + "average_temperature": 27.7667, + "experience_temperature": 22.7967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T20:40:08.528954+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.2, + "humidity": 86.0, + "water_total": 485.0, + "average_temperature": 27.6667, + "experience_temperature": 23.1667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T20:50:06.706528+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.3, + "humidity": 85.9, + "water_total": 506.0, + "average_temperature": 27.6333, + "experience_temperature": 22.7633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T21:00:05.907365+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.4, + "humidity": 86.2, + "water_total": 522.0, + "average_temperature": 27.5333, + "experience_temperature": 22.3733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T21:10:05.821992+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.3, + "humidity": 85.8, + "water_total": 542.0, + "average_temperature": 27.6667, + "experience_temperature": 22.7767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T21:20:10.165356+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.2, + "humidity": 86.0, + "water_total": 564.0, + "average_temperature": 27.6, + "experience_temperature": 23.1, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T21:30:06.154663+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.4, + "humidity": 87.4, + "water_total": 591.0, + "average_temperature": 27.4667, + "experience_temperature": 22.5467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T21:40:08.633758+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.8, + "humidity": 87.2, + "water_total": 620.0, + "average_temperature": 27.4333, + "experience_temperature": 24.5733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T21:50:06.235135+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 87.0, + "water_total": 658.0, + "average_temperature": 27.4, + "experience_temperature": 24.15, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T22:00:06.579125+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.2, + "humidity": 87.0, + "water_total": 681.0, + "average_temperature": 27.3, + "experience_temperature": 23.0, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T22:10:05.874512+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 87.6, + "water_total": 702.0, + "average_temperature": 27.2, + "experience_temperature": 24.07, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T22:20:06.245905+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 87.4, + "water_total": 723.0, + "average_temperature": 27.2667, + "experience_temperature": 24.0967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T22:30:06.211465+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.1, + "humidity": 87.5, + "water_total": 745.0, + "average_temperature": 27.0333, + "experience_temperature": 23.1833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T22:40:05.768407+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 88.6, + "water_total": 760.0, + "average_temperature": 26.9, + "experience_temperature": 23.97, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T22:50:07.260632+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 89.1, + "water_total": 781.0, + "average_temperature": 26.9333, + "experience_temperature": 24.1033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T23:00:06.506050+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.0, + "humidity": 89.4, + "water_total": 786.0, + "average_temperature": 26.7667, + "experience_temperature": 23.6467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T23:10:06.843597+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 90.1, + "water_total": 786.0, + "average_temperature": 26.6, + "experience_temperature": 23.97, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T23:20:06.777400+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.3, + "humidity": 90.6, + "water_total": 786.0, + "average_temperature": 26.6333, + "experience_temperature": 22.7033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T23:30:06.114795+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.0, + "humidity": 90.9, + "water_total": 786.0, + "average_temperature": 26.7667, + "experience_temperature": 23.9467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T23:40:06.363745+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 2.0, + "humidity": 90.5, + "water_total": 786.0, + "average_temperature": 26.7333, + "experience_temperature": 23.8333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-24T23:50:06.198864+07:00", + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 90.5, + "water_total": 786.0, + "average_temperature": 26.7, + "experience_temperature": 24.15, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T00:00:05.921956+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.0, + "humidity": 90.6, + "water_total": 791.0, + "average_temperature": 26.6, + "experience_temperature": 23.72, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T00:10:06.661207+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.8, + "humidity": 90.4, + "water_total": 791.0, + "average_temperature": 26.7667, + "experience_temperature": 24.5467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T00:20:06.192919+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.0, + "humidity": 89.9, + "water_total": 862.0, + "average_temperature": 26.7333, + "experience_temperature": 23.7133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T00:30:05.922282+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 89.4, + "water_total": 923.0, + "average_temperature": 26.6333, + "experience_temperature": 23.8633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T00:40:07.726758+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 90.5, + "water_total": 961.0, + "average_temperature": 26.4667, + "experience_temperature": 23.9167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T00:50:05.512426+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 90.1, + "water_total": 986.0, + "average_temperature": 26.3333, + "experience_temperature": 23.7033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T01:00:05.890038+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 90.7, + "water_total": 1002.0, + "average_temperature": 26.3, + "experience_temperature": 23.79, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T01:10:06.434136+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.7, + "humidity": 89.9, + "water_total": 1028.0, + "average_temperature": 26.3667, + "experience_temperature": 24.3967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T01:20:05.685701+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.0, + "humidity": 90.8, + "water_total": 1050.0, + "average_temperature": 26.3333, + "experience_temperature": 23.4933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T01:30:06.321063+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.0, + "humidity": 90.6, + "water_total": 1071.0, + "average_temperature": 26.2667, + "experience_temperature": 23.3867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T01:40:06.754360+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.7, + "humidity": 90.8, + "water_total": 1091.0, + "average_temperature": 26.3667, + "experience_temperature": 24.5767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T01:50:06.465928+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.2, + "humidity": 91.0, + "water_total": 1091.0, + "average_temperature": 26.3, + "experience_temperature": 22.8, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T02:00:06.499521+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 91.3, + "water_total": 1091.0, + "average_temperature": 26.2667, + "experience_temperature": 23.8767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T02:10:06.437602+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.1, + "humidity": 91.4, + "water_total": 1091.0, + "average_temperature": 26.4, + "experience_temperature": 23.33, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T02:20:06.115374+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.8, + "humidity": 90.7, + "water_total": 1129.0, + "average_temperature": 26.6, + "experience_temperature": 24.44, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T02:30:06.584097+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.7, + "humidity": 89.5, + "water_total": 1180.0, + "average_temperature": 26.6333, + "experience_temperature": 24.5833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T02:40:07.940721+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.1, + "humidity": 90.4, + "water_total": 1209.0, + "average_temperature": 26.4, + "experience_temperature": 23.13, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T02:50:06.658944+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.0, + "humidity": 91.6, + "water_total": 1229.0, + "average_temperature": 26.1333, + "experience_temperature": 23.4533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T03:00:07.299031+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.8, + "humidity": 92.0, + "water_total": 1249.0, + "average_temperature": 26.1333, + "experience_temperature": 24.2333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T03:10:06.202082+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 91.6, + "water_total": 1264.0, + "average_temperature": 26.0333, + "experience_temperature": 23.7033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T03:20:06.100894+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 91.1, + "water_total": 1289.0, + "average_temperature": 26.0333, + "experience_temperature": 23.6033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T03:30:05.892005+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.0, + "humidity": 91.8, + "water_total": 1310.0, + "average_temperature": 25.9667, + "experience_temperature": 23.3267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T03:40:05.510076+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.7, + "humidity": 91.8, + "water_total": 1325.0, + "average_temperature": 26.0667, + "experience_temperature": 24.4767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T03:50:05.866714+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 92.0, + "water_total": 1337.0, + "average_temperature": 25.9, + "experience_temperature": 23.65, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T04:00:06.080245+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 92.0, + "water_total": 1337.0, + "average_temperature": 25.9, + "experience_temperature": 23.65, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T04:10:06.475311+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 91.9, + "water_total": 1369.0, + "average_temperature": 25.8333, + "experience_temperature": 23.5633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T04:20:08.185758+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.8, + "humidity": 92.2, + "water_total": 1369.0, + "average_temperature": 25.8333, + "experience_temperature": 23.9733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T04:30:06.741262+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 92.9, + "water_total": 1369.0, + "average_temperature": 25.7, + "experience_temperature": 23.63, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T04:40:06.488796+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.0, + "humidity": 92.8, + "water_total": 1369.0, + "average_temperature": 25.7, + "experience_temperature": 23.26, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T04:50:07.075482+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.0, + "humidity": 92.6, + "water_total": 1369.0, + "average_temperature": 25.7, + "experience_temperature": 23.22, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T05:00:07.147755+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 92.9, + "water_total": 1369.0, + "average_temperature": 25.6333, + "experience_temperature": 23.5633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T05:10:07.271263+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.8, + "humidity": 92.8, + "water_total": 1369.0, + "average_temperature": 25.5667, + "experience_temperature": 23.8267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T05:20:07.548910+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 92.2, + "water_total": 1398.0, + "average_temperature": 25.7667, + "experience_temperature": 23.5567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T05:30:06.326307+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.7, + "humidity": 91.5, + "water_total": 1453.0, + "average_temperature": 25.7333, + "experience_temperature": 24.0833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T05:40:07.059450+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 91.0, + "water_total": 1485.0, + "average_temperature": 25.5667, + "experience_temperature": 23.1167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T05:50:06.362703+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.0, + "humidity": 92.1, + "water_total": 1505.0, + "average_temperature": 25.4333, + "experience_temperature": 22.8533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T06:00:07.054895+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.8, + "humidity": 92.6, + "water_total": 1518.0, + "average_temperature": 25.4333, + "experience_temperature": 23.6533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T06:10:06.497960+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.0, + "humidity": 92.9, + "water_total": 1534.0, + "average_temperature": 25.3, + "experience_temperature": 22.88, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T06:20:07.089788+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.8, + "humidity": 93.1, + "water_total": 1549.0, + "average_temperature": 25.3667, + "experience_temperature": 23.6867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T06:30:07.050235+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.1, + "humidity": 92.8, + "water_total": 1575.0, + "average_temperature": 25.5, + "experience_temperature": 22.71, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T06:40:06.613016+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 92.3, + "water_total": 1595.0, + "average_temperature": 25.4667, + "experience_temperature": 23.2767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T06:50:09.124376+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.7, + "humidity": 92.5, + "water_total": 1610.0, + "average_temperature": 25.5333, + "experience_temperature": 24.0833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T07:00:07.113009+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.8, + "humidity": 91.7, + "water_total": 1630.0, + "average_temperature": 25.7, + "experience_temperature": 23.74, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T07:10:06.862015+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 92.1, + "water_total": 1650.0, + "average_temperature": 25.8333, + "experience_temperature": 23.6033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T07:20:06.673629+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.0, + "humidity": 92.4, + "water_total": 1671.0, + "average_temperature": 25.9, + "experience_temperature": 23.38, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T07:30:05.767936+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 91.9, + "water_total": 1691.0, + "average_temperature": 26.0333, + "experience_temperature": 23.7633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T07:40:05.917253+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 91.6, + "water_total": 1717.0, + "average_temperature": 26.2667, + "experience_temperature": 23.9367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T07:50:05.681382+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 90.1, + "water_total": 1743.0, + "average_temperature": 26.6, + "experience_temperature": 23.97, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T08:00:06.722058+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 89.1, + "water_total": 1759.0, + "average_temperature": 27.0, + "experience_temperature": 24.17, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T08:10:06.985332+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 87.0, + "water_total": 1798.0, + "average_temperature": 27.1, + "experience_temperature": 23.85, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T08:20:19.216791+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 87.0, + "water_total": 1798.0, + "average_temperature": 27.1, + "experience_temperature": 23.85, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T08:30:06.529461+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 85.2, + "water_total": 1859.0, + "average_temperature": 27.9, + "experience_temperature": 22.19, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T08:40:05.688337+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 85.2, + "water_total": 1859.0, + "average_temperature": 27.9, + "experience_temperature": 22.19, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T08:50:07.278507+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.6, + "humidity": 82.8, + "water_total": 1900.0, + "average_temperature": 28.2667, + "experience_temperature": 21.7267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T09:00:06.524769+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 83.0, + "water_total": 1933.0, + "average_temperature": 28.2333, + "experience_temperature": 22.0833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T09:10:05.882609+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.3, + "humidity": 83.1, + "water_total": 1960.0, + "average_temperature": 28.0333, + "experience_temperature": 22.6033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T09:20:05.904410+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.3, + "humidity": 83.1, + "water_total": 1960.0, + "average_temperature": 28.0333, + "experience_temperature": 22.6033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T09:30:06.889973+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.3, + "humidity": 81.3, + "water_total": 2007.0, + "average_temperature": 28.3333, + "experience_temperature": 22.5433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T09:40:09.203761+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 80.7, + "water_total": 2041.0, + "average_temperature": 28.8, + "experience_temperature": 22.19, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T09:50:07.875563+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 79.4, + "water_total": 2071.0, + "average_temperature": 29.1667, + "experience_temperature": 22.2967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T10:00:07.146378+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 79.4, + "water_total": 2071.0, + "average_temperature": 29.1667, + "experience_temperature": 22.2967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T10:10:05.800844+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.6, + "humidity": 77.9, + "water_total": 2110.0, + "average_temperature": 29.2667, + "experience_temperature": 21.7467, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T10:20:07.068905+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.9, + "humidity": 75.7, + "water_total": 2171.0, + "average_temperature": 29.8, + "experience_temperature": 20.79, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T10:30:06.036180+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.9, + "humidity": 75.7, + "water_total": 2171.0, + "average_temperature": 29.8, + "experience_temperature": 20.79, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T10:40:06.398278+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.9, + "humidity": 73.7, + "water_total": 2224.0, + "average_temperature": 30.9, + "experience_temperature": 21.49, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T10:50:06.721213+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.9, + "humidity": 73.7, + "water_total": 2253.0, + "average_temperature": 30.5333, + "experience_temperature": 21.1233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T11:00:11.854039+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.9, + "humidity": 73.7, + "water_total": 2253.0, + "average_temperature": 30.5333, + "experience_temperature": 21.1233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T11:10:09.434335+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 3.0, + "humidity": 74.2, + "water_total": 2282.0, + "average_temperature": 30.6333, + "experience_temperature": 20.9733, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T11:20:06.038087+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 3.0, + "humidity": 75.0, + "water_total": 2327.0, + "average_temperature": 30.6, + "experience_temperature": 21.1, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T11:30:10.142596+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.9, + "humidity": 73.2, + "water_total": 2349.0, + "average_temperature": 31.0333, + "experience_temperature": 21.5233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T11:40:07.772873+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 3.2, + "humidity": 73.4, + "water_total": 2372.0, + "average_temperature": 30.6, + "experience_temperature": 20.08, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T11:50:07.898960+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.6, + "humidity": 75.0, + "water_total": 2394.0, + "average_temperature": 30.1333, + "experience_temperature": 22.0333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T12:00:07.722019+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.6, + "humidity": 78.5, + "water_total": 2410.0, + "average_temperature": 29.2333, + "experience_temperature": 21.8333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T12:10:06.471671+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 85.6, + "water_total": 2416.0, + "average_temperature": 28.8, + "experience_temperature": 23.17, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T12:20:06.674202+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 83.7, + "water_total": 2435.0, + "average_temperature": 28.2, + "experience_temperature": 24.29, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T12:30:08.693599+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 83.4, + "water_total": 2456.0, + "average_temperature": 28.6667, + "experience_temperature": 22.5967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T12:40:07.532038+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 81.1, + "water_total": 2471.0, + "average_temperature": 28.9667, + "experience_temperature": 22.4367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T12:50:07.089543+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 79.8, + "water_total": 2487.0, + "average_temperature": 29.6, + "experience_temperature": 22.81, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T13:00:06.550338+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.6, + "humidity": 78.2, + "water_total": 2503.0, + "average_temperature": 29.9, + "experience_temperature": 22.44, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T13:10:05.891028+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.6, + "humidity": 78.2, + "water_total": 2503.0, + "average_temperature": 29.9, + "experience_temperature": 22.44, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T13:20:06.998880+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 79.0, + "water_total": 2546.0, + "average_temperature": 28.9333, + "experience_temperature": 21.9833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T13:30:06.845978+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.9, + "humidity": 80.3, + "water_total": 2561.0, + "average_temperature": 28.6, + "experience_temperature": 20.51, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T13:40:06.906586+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 81.6, + "water_total": 2577.0, + "average_temperature": 28.5, + "experience_temperature": 22.07, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T13:50:06.163945+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.9, + "humidity": 81.2, + "water_total": 2597.0, + "average_temperature": 28.3667, + "experience_temperature": 20.4567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T14:10:06.637937+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 82.0, + "water_total": 2641.0, + "average_temperature": 28.4333, + "experience_temperature": 22.0833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T14:20:06.638571+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 83.3, + "water_total": 2661.0, + "average_temperature": 28.3, + "experience_temperature": 22.21, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T14:30:07.506311+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 84.0, + "water_total": 2671.0, + "average_temperature": 28.2, + "experience_temperature": 22.25, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T14:40:06.906324+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 84.0, + "water_total": 2671.0, + "average_temperature": 28.2, + "experience_temperature": 22.25, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T14:50:06.007681+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 83.8, + "water_total": 2719.0, + "average_temperature": 28.1333, + "experience_temperature": 22.1433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T15:10:06.359303+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.1, + "humidity": 82.6, + "water_total": 2755.0, + "average_temperature": 27.8667, + "experience_temperature": 23.0367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T15:20:06.609138+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.1, + "humidity": 78.8, + "water_total": 2771.0, + "average_temperature": 28.1667, + "experience_temperature": 22.5767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T15:30:07.390642+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.0, + "humidity": 79.8, + "water_total": 2786.0, + "average_temperature": 28.5, + "experience_temperature": 23.46, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T15:40:05.972510+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.3, + "humidity": 80.3, + "water_total": 2806.0, + "average_temperature": 28.5667, + "experience_temperature": 22.5767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T15:50:07.358161+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 81.5, + "water_total": 2816.0, + "average_temperature": 28.4667, + "experience_temperature": 22.0167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T16:10:07.316499+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.4, + "humidity": 83.1, + "water_total": 2865.0, + "average_temperature": 28.6, + "experience_temperature": 22.82, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T16:20:08.188965+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.4, + "humidity": 82.9, + "water_total": 2890.0, + "average_temperature": 28.8333, + "experience_temperature": 23.0133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T16:30:10.022165+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.4, + "humidity": 80.9, + "water_total": 2934.0, + "average_temperature": 29.0333, + "experience_temperature": 22.8133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T16:40:06.726746+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 3.0, + "humidity": 81.5, + "water_total": 2967.0, + "average_temperature": 28.9333, + "experience_temperature": 20.7333, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T16:50:07.402421+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.7, + "humidity": 81.7, + "water_total": 2989.0, + "average_temperature": 29.0667, + "experience_temperature": 21.9567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T17:10:06.409812+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.7, + "humidity": 82.9, + "water_total": 15.0, + "average_temperature": 28.7333, + "experience_temperature": 21.8633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T17:20:06.226007+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 83.1, + "water_total": 29.0, + "average_temperature": 28.6667, + "experience_temperature": 22.5367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T17:30:07.203201+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.6, + "humidity": 84.8, + "water_total": 44.0, + "average_temperature": 28.6333, + "experience_temperature": 22.4933, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T17:40:06.317717+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.6, + "humidity": 83.6, + "water_total": 54.0, + "average_temperature": 28.5667, + "experience_temperature": 22.1867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T17:50:06.326044+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.6, + "humidity": 82.2, + "water_total": 70.0, + "average_temperature": 28.4667, + "experience_temperature": 21.8067, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T18:00:06.697259+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.7, + "humidity": 82.7, + "water_total": 74.0, + "average_temperature": 28.2333, + "experience_temperature": 21.3233, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T18:10:05.879733+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.3, + "humidity": 84.3, + "water_total": 74.0, + "average_temperature": 28.0667, + "experience_temperature": 22.8767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T18:20:07.742737+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.3, + "humidity": 85.0, + "water_total": 74.0, + "average_temperature": 28.0333, + "experience_temperature": 22.9833, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T18:30:05.749280+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 85.8, + "water_total": 74.0, + "average_temperature": 27.8, + "experience_temperature": 22.21, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T18:40:05.875515+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 86.8, + "water_total": 74.0, + "average_temperature": 27.7333, + "experience_temperature": 22.3433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T18:50:07.473999+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.4, + "humidity": 87.0, + "water_total": 112.0, + "average_temperature": 27.9667, + "experience_temperature": 22.9667, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T19:00:06.312932+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.5, + "humidity": 87.1, + "water_total": 158.0, + "average_temperature": 27.7333, + "experience_temperature": 22.4033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T19:10:07.027127+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.3, + "humidity": 87.6, + "water_total": 191.0, + "average_temperature": 27.5333, + "experience_temperature": 23.0033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T19:20:08.229988+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.3, + "humidity": 88.1, + "water_total": 212.0, + "average_temperature": 27.2667, + "experience_temperature": 22.8367, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T19:30:06.019440+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.2, + "humidity": 88.5, + "water_total": 232.0, + "average_temperature": 27.3, + "experience_temperature": 23.3, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T19:40:06.374038+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.2, + "humidity": 88.3, + "water_total": 252.0, + "average_temperature": 27.3, + "experience_temperature": 23.26, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T19:50:05.799765+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.1, + "humidity": 87.7, + "water_total": 273.0, + "average_temperature": 27.2667, + "experience_temperature": 23.4567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T20:00:07.488423+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.1, + "humidity": 87.7, + "water_total": 273.0, + "average_temperature": 27.2667, + "experience_temperature": 23.4567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T20:10:06.246515+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.2, + "humidity": 88.6, + "water_total": 313.0, + "average_temperature": 27.1667, + "experience_temperature": 23.1867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T20:20:09.641735+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.4, + "humidity": 88.4, + "water_total": 335.0, + "average_temperature": 27.2, + "experience_temperature": 22.48, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T20:30:06.585652+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 88.1, + "water_total": 358.0, + "average_temperature": 27.0333, + "experience_temperature": 24.0033, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T20:40:06.350793+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 88.4, + "water_total": 378.0, + "average_temperature": 27.0333, + "experience_temperature": 24.0633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T20:50:05.863179+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 88.9, + "water_total": 403.0, + "average_temperature": 26.8, + "experience_temperature": 23.93, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T21:00:05.605182+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 88.9, + "water_total": 403.0, + "average_temperature": 26.8, + "experience_temperature": 23.93, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T21:10:06.522458+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.1, + "humidity": 89.3, + "water_total": 438.0, + "average_temperature": 26.7333, + "experience_temperature": 23.2433, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T21:20:08.082803+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 88.7, + "water_total": 447.0, + "average_temperature": 26.8, + "experience_temperature": 23.89, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T21:30:06.050946+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 89.2, + "water_total": 461.0, + "average_temperature": 26.7667, + "experience_temperature": 23.9567, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T21:50:06.726665+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 89.4, + "water_total": 480.0, + "average_temperature": 26.5333, + "experience_temperature": 23.7633, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T22:00:06.644596+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.7, + "humidity": 89.1, + "water_total": 489.0, + "average_temperature": 26.8, + "experience_temperature": 24.67, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T22:10:07.176025+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 88.8, + "water_total": 499.0, + "average_temperature": 26.5667, + "experience_temperature": 23.6767, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T22:20:06.494090+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.8, + "humidity": 89.1, + "water_total": 508.0, + "average_temperature": 26.4667, + "experience_temperature": 23.9867, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T22:30:07.891114+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.0, + "humidity": 86.8, + "water_total": 512.0, + "average_temperature": 26.4667, + "experience_temperature": 22.8267, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T22:40:06.529481+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.0, + "humidity": 89.9, + "water_total": 517.0, + "average_temperature": 26.2333, + "experience_temperature": 23.2133, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T22:50:06.438199+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 89.9, + "water_total": 522.0, + "average_temperature": 26.2667, + "experience_temperature": 23.5967, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T23:00:06.361784+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.1, + "humidity": 86.8, + "water_total": 526.0, + "average_temperature": 26.4, + "experience_temperature": 22.41, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T23:10:06.391574+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.0, + "humidity": 86.1, + "water_total": 531.0, + "average_temperature": 26.2333, + "experience_temperature": 22.4533, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T23:20:06.540182+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 1.9, + "humidity": 86.8, + "water_total": 535.0, + "average_temperature": 26.3, + "experience_temperature": 23.01, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T23:30:06.815345+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.1, + "humidity": 86.2, + "water_total": 540.0, + "average_temperature": 26.3, + "experience_temperature": 22.19, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T23:40:06.870589+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.3, + "humidity": 87.0, + "water_total": 544.0, + "average_temperature": 26.1667, + "experience_temperature": 21.5167, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-25T23:50:06.312206+07:00", + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.3, + "humidity": 86.6, + "water_total": 549.0, + "average_temperature": 26.2, + "experience_temperature": 21.47, + "chill_factor": 3.5 + }, + { + "timestamp": "2026-06-26T00:00:11.150519+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.0, + "humidity": 86.5, + "water_total": 555.0, + "average_temperature": 26.0667, + "experience_temperature": 22.5095, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T00:10:07.289884+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 88.5, + "water_total": 555.0, + "average_temperature": 25.8333, + "experience_temperature": 23.019, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T00:20:06.575828+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.8, + "humidity": 89.2, + "water_total": 560.0, + "average_temperature": 26.1, + "experience_temperature": 23.7686, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T00:30:06.132340+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 89.5, + "water_total": 560.0, + "average_temperature": 25.6333, + "experience_temperature": 23.019, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T00:40:08.147208+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 3.2, + "humidity": 92.1, + "water_total": 564.0, + "average_temperature": 25.5, + "experience_temperature": 18.9486, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T00:50:06.204664+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 3.3, + "humidity": 92.4, + "water_total": 564.0, + "average_temperature": 25.4, + "experience_temperature": 18.5657, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T01:00:07.550201+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 3.0, + "humidity": 93.0, + "water_total": 569.0, + "average_temperature": 25.3, + "experience_temperature": 19.6143, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T01:10:07.979267+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 93.3, + "water_total": 569.0, + "average_temperature": 25.1667, + "experience_temperature": 23.3124, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T01:20:06.448039+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 93.2, + "water_total": 574.0, + "average_temperature": 25.2, + "experience_temperature": 23.3257, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T01:30:08.086654+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.8, + "humidity": 93.0, + "water_total": 578.0, + "average_temperature": 25.0667, + "experience_temperature": 23.4952, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T01:40:06.417452+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 92.8, + "water_total": 583.0, + "average_temperature": 25.0333, + "experience_temperature": 23.079, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T01:50:07.617606+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.7, + "humidity": 93.1, + "water_total": 588.0, + "average_temperature": 24.9667, + "experience_temperature": 23.7581, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T02:00:06.957143+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 93.1, + "water_total": 592.0, + "average_temperature": 24.9667, + "experience_temperature": 23.0724, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T02:10:06.422237+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.0, + "humidity": 93.2, + "water_total": 597.0, + "average_temperature": 24.8, + "experience_temperature": 22.5829, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T02:20:06.513225+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 93.4, + "water_total": 601.0, + "average_temperature": 24.8, + "experience_temperature": 22.9657, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T02:30:06.628275+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 93.4, + "water_total": 606.0, + "average_temperature": 24.7, + "experience_temperature": 22.8657, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T02:40:06.458247+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 93.3, + "water_total": 611.0, + "average_temperature": 24.6667, + "experience_temperature": 22.8124, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T02:50:06.283403+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.0, + "humidity": 93.4, + "water_total": 611.0, + "average_temperature": 24.6667, + "experience_temperature": 22.4895, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T03:00:06.672177+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.0, + "humidity": 93.4, + "water_total": 611.0, + "average_temperature": 24.6667, + "experience_temperature": 22.4895, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T03:10:06.543927+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 93.4, + "water_total": 620.0, + "average_temperature": 24.6333, + "experience_temperature": 22.799, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T03:20:06.789753+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 93.5, + "water_total": 624.0, + "average_temperature": 24.5333, + "experience_temperature": 22.719, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T03:30:08.199878+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 93.5, + "water_total": 629.0, + "average_temperature": 24.5333, + "experience_temperature": 22.719, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T03:40:06.121479+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 93.1, + "water_total": 629.0, + "average_temperature": 24.5333, + "experience_temperature": 22.639, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T03:50:06.708444+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.6, + "humidity": 93.1, + "water_total": 634.0, + "average_temperature": 24.4, + "experience_temperature": 23.5343, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T04:00:05.678742+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.6, + "humidity": 92.9, + "water_total": 638.0, + "average_temperature": 24.3, + "experience_temperature": 23.3943, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T04:10:05.995975+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.7, + "humidity": 93.2, + "water_total": 643.0, + "average_temperature": 24.5333, + "experience_temperature": 23.3448, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T04:20:06.165722+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.5, + "humidity": 93.1, + "water_total": 643.0, + "average_temperature": 24.4667, + "experience_temperature": 23.9438, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T04:30:07.164828+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.8, + "humidity": 93.1, + "water_total": 647.0, + "average_temperature": 24.5667, + "experience_temperature": 23.0152, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T04:40:06.098758+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.6, + "humidity": 92.9, + "water_total": 647.0, + "average_temperature": 24.2333, + "experience_temperature": 23.3276, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T04:50:05.924244+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.6, + "humidity": 92.9, + "water_total": 647.0, + "average_temperature": 24.2333, + "experience_temperature": 23.3276, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T05:00:05.810248+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 94.5, + "water_total": 652.0, + "average_temperature": 24.1333, + "experience_temperature": 22.519, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T05:10:05.699419+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.6, + "humidity": 95.0, + "water_total": 652.0, + "average_temperature": 24.0333, + "experience_temperature": 23.5476, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T05:20:06.254254+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.6, + "humidity": 95.2, + "water_total": 657.0, + "average_temperature": 24.1333, + "experience_temperature": 23.6876, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T05:30:06.287555+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.6, + "humidity": 94.5, + "water_total": 661.0, + "average_temperature": 24.1333, + "experience_temperature": 23.5476, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T05:40:05.609780+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.5, + "humidity": 93.6, + "water_total": 666.0, + "average_temperature": 24.0667, + "experience_temperature": 23.6438, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T05:50:05.825002+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.2, + "humidity": 94.1, + "water_total": 671.0, + "average_temperature": 24.1667, + "experience_temperature": 24.8724, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T06:00:06.470839+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.2, + "humidity": 94.1, + "water_total": 671.0, + "average_temperature": 24.1667, + "experience_temperature": 24.8724, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T06:10:06.974801+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.6, + "humidity": 92.9, + "water_total": 680.0, + "average_temperature": 23.9667, + "experience_temperature": 23.061, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T06:20:06.732933+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.3, + "humidity": 93.7, + "water_total": 684.0, + "average_temperature": 24.0667, + "experience_temperature": 24.3495, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T06:30:06.542339+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.6, + "humidity": 94.2, + "water_total": 694.0, + "average_temperature": 24.1, + "experience_temperature": 23.4543, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T06:40:06.618278+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.5, + "humidity": 94.6, + "water_total": 698.0, + "average_temperature": 24.3, + "experience_temperature": 24.0771, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T06:50:07.477822+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.5, + "humidity": 94.3, + "water_total": 703.0, + "average_temperature": 24.3, + "experience_temperature": 24.0171, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T07:00:06.049245+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.4, + "humidity": 94.1, + "water_total": 707.0, + "average_temperature": 24.4, + "experience_temperature": 24.42, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T07:10:06.308186+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.0, + "humidity": 93.9, + "water_total": 712.0, + "average_temperature": 24.5333, + "experience_temperature": 22.4562, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T07:20:06.453259+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.6, + "humidity": 93.9, + "water_total": 717.0, + "average_temperature": 24.7, + "experience_temperature": 23.9943, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T07:30:06.348593+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 93.6, + "water_total": 721.0, + "average_temperature": 24.7667, + "experience_temperature": 22.9724, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T07:40:06.818928+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 93.4, + "water_total": 726.0, + "average_temperature": 24.9333, + "experience_temperature": 23.099, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T07:50:06.298907+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 93.2, + "water_total": 731.0, + "average_temperature": 25.0667, + "experience_temperature": 23.1924, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T08:00:06.852209+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.8, + "humidity": 93.6, + "water_total": 735.0, + "average_temperature": 25.1667, + "experience_temperature": 23.7152, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T08:10:06.931855+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.8, + "humidity": 93.6, + "water_total": 735.0, + "average_temperature": 25.1667, + "experience_temperature": 23.7152, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T08:20:06.606953+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.0, + "humidity": 93.6, + "water_total": 777.0, + "average_temperature": 25.8667, + "experience_temperature": 23.7295, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T08:30:07.614197+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.0, + "humidity": 93.6, + "water_total": 777.0, + "average_temperature": 25.8667, + "experience_temperature": 23.7295, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T08:40:06.544226+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.0, + "humidity": 88.8, + "water_total": 807.0, + "average_temperature": 27.0, + "experience_temperature": 23.9029, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T08:50:06.436895+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.4, + "humidity": 87.5, + "water_total": 817.0, + "average_temperature": 27.3667, + "experience_temperature": 22.6381, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T09:00:07.514178+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.4, + "humidity": 87.5, + "water_total": 817.0, + "average_temperature": 27.3667, + "experience_temperature": 22.6381, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T09:10:06.423658+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.2, + "humidity": 85.3, + "water_total": 837.0, + "average_temperature": 27.8333, + "experience_temperature": 23.3505, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T09:20:06.195344+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.4, + "humidity": 81.2, + "water_total": 878.0, + "average_temperature": 28.6333, + "experience_temperature": 22.6448, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T09:30:06.449726+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.5, + "humidity": 81.2, + "water_total": 888.0, + "average_temperature": 28.8667, + "experience_temperature": 22.5352, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T09:40:06.241484+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.6, + "humidity": 79.9, + "water_total": 897.0, + "average_temperature": 28.8667, + "experience_temperature": 21.9324, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T09:50:06.749411+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.3, + "humidity": 81.1, + "water_total": 912.0, + "average_temperature": 29.0333, + "experience_temperature": 23.3676, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T10:00:06.654529+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.4, + "humidity": 79.6, + "water_total": 933.0, + "average_temperature": 29.3333, + "experience_temperature": 23.0248, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T10:10:10.585003+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.4, + "humidity": 78.6, + "water_total": 948.0, + "average_temperature": 28.9333, + "experience_temperature": 22.4248, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T10:20:06.160858+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.5, + "humidity": 78.5, + "water_total": 957.0, + "average_temperature": 29.6667, + "experience_temperature": 22.7952, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T10:30:06.948760+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.7, + "humidity": 75.7, + "water_total": 967.0, + "average_temperature": 29.6, + "experience_temperature": 21.4829, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T10:40:07.512643+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.4, + "humidity": 75.7, + "water_total": 976.0, + "average_temperature": 29.8667, + "experience_temperature": 22.7781, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T10:50:09.672971+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.5, + "humidity": 73.8, + "water_total": 991.0, + "average_temperature": 30.0, + "experience_temperature": 22.1886, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T11:00:07.314800+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.9, + "humidity": 74.8, + "water_total": 1001.0, + "average_temperature": 29.9, + "experience_temperature": 20.9171, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T11:10:06.518769+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.9, + "humidity": 74.4, + "water_total": 1016.0, + "average_temperature": 30.1, + "experience_temperature": 21.0371, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T11:20:07.985235+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.3, + "humidity": 72.9, + "water_total": 1030.0, + "average_temperature": 30.8333, + "experience_temperature": 23.5276, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T11:30:09.551173+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.3, + "humidity": 74.1, + "water_total": 1045.0, + "average_temperature": 30.7, + "experience_temperature": 23.6343, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T11:40:06.657283+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.7, + "humidity": 73.8, + "water_total": 1057.0, + "average_temperature": 30.2667, + "experience_temperature": 21.7695, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T11:50:07.890496+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.8, + "humidity": 74.3, + "water_total": 1069.0, + "average_temperature": 30.1, + "experience_temperature": 21.36, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T12:00:11.294492+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.6, + "humidity": 73.3, + "water_total": 1079.0, + "average_temperature": 30.5, + "experience_temperature": 22.2457, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T12:10:08.144856+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.8, + "humidity": 72.8, + "water_total": 1088.0, + "average_temperature": 30.3667, + "experience_temperature": 21.3267, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T12:20:07.279181+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.9, + "humidity": 71.6, + "water_total": 1098.0, + "average_temperature": 30.8667, + "experience_temperature": 21.2438, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T12:30:06.867670+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.7, + "humidity": 71.7, + "water_total": 1108.0, + "average_temperature": 30.5333, + "experience_temperature": 21.6162, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T12:40:07.253177+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.7, + "humidity": 71.9, + "water_total": 1115.0, + "average_temperature": 30.4, + "experience_temperature": 21.5229, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T12:50:07.357448+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 3.0, + "humidity": 72.0, + "water_total": 1122.0, + "average_temperature": 30.8, + "experience_temperature": 20.9143, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T13:00:06.871776+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.7, + "humidity": 70.3, + "water_total": 1132.0, + "average_temperature": 30.9333, + "experience_temperature": 21.7362, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T13:10:07.730664+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.4, + "humidity": 73.6, + "water_total": 1144.0, + "average_temperature": 31.0, + "experience_temperature": 23.4914, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T13:20:07.702602+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 70.5, + "water_total": 1157.0, + "average_temperature": 30.7, + "experience_temperature": 24.2857, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T13:30:06.781272+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.7, + "humidity": 73.7, + "water_total": 1167.0, + "average_temperature": 30.7, + "experience_temperature": 22.1829, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T13:40:06.551254+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.7, + "humidity": 73.7, + "water_total": 1167.0, + "average_temperature": 30.7, + "experience_temperature": 22.1829, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T13:50:06.719111+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.5, + "humidity": 72.7, + "water_total": 1182.0, + "average_temperature": 30.8, + "experience_temperature": 22.7686, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T14:10:06.535580+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.3, + "humidity": 70.2, + "water_total": 1203.0, + "average_temperature": 31.0333, + "experience_temperature": 23.1876, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T14:20:09.037729+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.8, + "humidity": 75.0, + "water_total": 1213.0, + "average_temperature": 30.5, + "experience_temperature": 21.9, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T14:30:07.725349+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.5, + "humidity": 72.2, + "water_total": 1223.0, + "average_temperature": 30.8667, + "experience_temperature": 22.7352, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T14:40:06.611753+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.4, + "humidity": 73.2, + "water_total": 1233.0, + "average_temperature": 31.0333, + "experience_temperature": 23.4448, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T14:50:07.648650+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 3.2, + "humidity": 72.9, + "water_total": 1243.0, + "average_temperature": 30.8667, + "experience_temperature": 20.4752, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T15:10:08.520543+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 3.1, + "humidity": 74.3, + "water_total": 1258.0, + "average_temperature": 30.2, + "experience_temperature": 20.4314, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T15:20:06.657135+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.6, + "humidity": 74.1, + "water_total": 1263.0, + "average_temperature": 30.4667, + "experience_temperature": 22.3724, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T15:30:08.172329+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.8, + "humidity": 72.5, + "water_total": 1268.0, + "average_temperature": 30.9, + "experience_temperature": 21.8, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T15:40:06.956407+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.5, + "humidity": 73.8, + "water_total": 1279.0, + "average_temperature": 30.6, + "experience_temperature": 22.7886, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T15:50:06.782757+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.7, + "humidity": 75.6, + "water_total": 1283.0, + "average_temperature": 30.2, + "experience_temperature": 22.0629, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T16:10:07.357845+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.9, + "humidity": 75.1, + "water_total": 1293.0, + "average_temperature": 30.2667, + "experience_temperature": 21.3438, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T16:20:06.710425+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.7, + "humidity": 75.5, + "water_total": 1303.0, + "average_temperature": 30.1333, + "experience_temperature": 21.9762, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T16:30:07.215793+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.5, + "humidity": 76.5, + "water_total": 1308.0, + "average_temperature": 29.8667, + "experience_temperature": 22.5952, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T16:40:06.724266+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.5, + "humidity": 77.6, + "water_total": 1318.0, + "average_temperature": 29.7, + "experience_temperature": 22.6486, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T16:50:07.278786+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.4, + "humidity": 80.8, + "water_total": 1329.0, + "average_temperature": 29.0333, + "experience_temperature": 22.9648, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T17:10:07.876316+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.4, + "humidity": 80.8, + "water_total": 1329.0, + "average_temperature": 29.0333, + "experience_temperature": 22.9648, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T17:20:07.932997+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.5, + "humidity": 84.5, + "water_total": 24.0, + "average_temperature": 28.3333, + "experience_temperature": 22.6619, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T17:30:06.213998+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.5, + "humidity": 84.4, + "water_total": 126.0, + "average_temperature": 28.6, + "experience_temperature": 22.9086, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T17:40:07.185681+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.4, + "humidity": 85.0, + "water_total": 258.0, + "average_temperature": 28.3, + "experience_temperature": 23.0714, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T17:50:06.335686+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.0, + "humidity": 85.3, + "water_total": 398.0, + "average_temperature": 28.2333, + "experience_temperature": 24.4362, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T18:00:07.915663+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.2, + "humidity": 85.9, + "water_total": 534.0, + "average_temperature": 27.9667, + "experience_temperature": 23.6038, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T18:10:08.340184+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.4, + "humidity": 85.8, + "water_total": 671.0, + "average_temperature": 28.0333, + "experience_temperature": 22.9648, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T18:20:06.000539+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.3, + "humidity": 86.2, + "water_total": 808.0, + "average_temperature": 28.2, + "experience_temperature": 23.5543, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T18:30:05.069749+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.4, + "humidity": 84.6, + "water_total": 941.0, + "average_temperature": 28.4667, + "experience_temperature": 23.1581, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T18:40:08.376484+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.8, + "humidity": 84.0, + "water_total": 1001.0, + "average_temperature": 28.4, + "experience_temperature": 21.6, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T18:50:05.578542+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.5, + "humidity": 85.9, + "water_total": 1016.0, + "average_temperature": 28.1, + "experience_temperature": 22.7086, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T19:00:05.991995+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.2, + "humidity": 86.5, + "water_total": 1036.0, + "average_temperature": 27.9667, + "experience_temperature": 23.7238, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T19:10:06.311703+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.5, + "humidity": 84.4, + "water_total": 1045.0, + "average_temperature": 28.0667, + "experience_temperature": 22.3752, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T19:20:06.088781+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.5, + "humidity": 84.2, + "water_total": 1060.0, + "average_temperature": 28.1667, + "experience_temperature": 22.4352, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T19:30:06.783017+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.5, + "humidity": 83.9, + "water_total": 1067.0, + "average_temperature": 27.9667, + "experience_temperature": 22.1752, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T19:40:07.342444+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.5, + "humidity": 85.9, + "water_total": 1079.0, + "average_temperature": 28.0333, + "experience_temperature": 22.6419, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T19:50:06.192666+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.1, + "humidity": 85.9, + "water_total": 1088.0, + "average_temperature": 27.7, + "experience_temperature": 23.68, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T20:00:07.519721+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.3, + "humidity": 80.9, + "water_total": 1093.0, + "average_temperature": 27.7333, + "experience_temperature": 22.0276, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T20:20:08.510597+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.1, + "humidity": 79.7, + "water_total": 1107.0, + "average_temperature": 27.6333, + "experience_temperature": 22.3733, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T20:30:08.457922+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 80.5, + "water_total": 1117.0, + "average_temperature": 27.6, + "experience_temperature": 23.1857, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T20:40:09.864016+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.9, + "humidity": 83.1, + "water_total": 1121.0, + "average_temperature": 26.9, + "experience_temperature": 23.0057, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T20:50:07.034427+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 2.9, + "humidity": 83.2, + "water_total": 1126.0, + "average_temperature": 27.4, + "experience_temperature": 20.0971, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T21:00:07.051600+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 5.1, + "humidity": 83.6, + "water_total": 1126.0, + "average_temperature": 27.1667, + "experience_temperature": 12.401, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T21:10:05.211609+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 3.0, + "humidity": 84.3, + "water_total": 1130.0, + "average_temperature": 26.9333, + "experience_temperature": 19.5076, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T21:20:05.379167+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 3.8, + "humidity": 87.4, + "water_total": 1130.0, + "average_temperature": 26.6, + "experience_temperature": 17.0514, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T21:30:05.749268+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 3.6, + "humidity": 88.2, + "water_total": 1135.0, + "average_temperature": 26.4667, + "experience_temperature": 17.7638, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T21:40:08.225090+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 3.4, + "humidity": 87.7, + "water_total": 1150.0, + "average_temperature": 26.3333, + "experience_temperature": 18.2162, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T21:50:05.993254+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.6, + "humidity": 87.5, + "water_total": 1170.0, + "average_temperature": 26.3667, + "experience_temperature": 24.381, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T22:00:05.360189+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.6, + "humidity": 87.5, + "water_total": 1170.0, + "average_temperature": 26.3667, + "experience_temperature": 24.381, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T22:10:05.876166+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.6, + "humidity": 87.4, + "water_total": 1189.0, + "average_temperature": 26.5, + "experience_temperature": 24.4943, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T22:20:05.960153+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.6, + "humidity": 87.4, + "water_total": 1189.0, + "average_temperature": 26.5, + "experience_temperature": 24.4943, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T22:30:06.342091+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.7, + "humidity": 88.3, + "water_total": 1198.0, + "average_temperature": 26.3, + "experience_temperature": 24.1314, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T22:40:07.556968+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.3, + "humidity": 88.6, + "water_total": 1208.0, + "average_temperature": 26.2, + "experience_temperature": 25.4629, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T22:50:06.923962+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.7, + "humidity": 88.6, + "water_total": 1213.0, + "average_temperature": 26.1, + "experience_temperature": 23.9914, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T23:00:06.192351+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.7, + "humidity": 88.8, + "water_total": 1222.0, + "average_temperature": 26.0667, + "experience_temperature": 23.9981, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T23:10:05.558463+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.5, + "humidity": 89.2, + "water_total": 1227.0, + "average_temperature": 26.1, + "experience_temperature": 24.7971, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T23:20:05.605186+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.8, + "humidity": 89.7, + "water_total": 1232.0, + "average_temperature": 25.9333, + "experience_temperature": 23.7019, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T23:30:07.075932+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.2, + "humidity": 90.0, + "water_total": 1237.0, + "average_temperature": 25.9, + "experience_temperature": 25.7857, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T23:40:05.805616+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.2, + "humidity": 90.2, + "water_total": 1242.0, + "average_temperature": 25.9333, + "experience_temperature": 25.859, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-26T23:50:05.612659+07:00", + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.1, + "humidity": 90.2, + "water_total": 1247.0, + "average_temperature": 25.8333, + "experience_temperature": 26.1019, + "chill_factor": 3.4286 + }, + { + "timestamp": "2026-06-27T00:00:05.437912+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.1, + "humidity": 90.2, + "water_total": 1247.0, + "average_temperature": 25.8333, + "experience_temperature": 26.1805, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T00:10:05.291489+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 90.4, + "water_total": 1256.0, + "average_temperature": 25.7667, + "experience_temperature": 25.8181, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T00:20:05.994332+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 90.7, + "water_total": 1261.0, + "average_temperature": 25.8333, + "experience_temperature": 25.9448, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T00:30:06.039731+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.1, + "humidity": 90.5, + "water_total": 1271.0, + "average_temperature": 25.8, + "experience_temperature": 26.2071, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T00:40:06.435619+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 90.7, + "water_total": 1276.0, + "average_temperature": 25.7333, + "experience_temperature": 25.8448, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T00:50:06.664407+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 90.9, + "water_total": 1281.0, + "average_temperature": 25.6333, + "experience_temperature": 25.7848, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T01:00:05.699424+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 90.9, + "water_total": 1281.0, + "average_temperature": 25.6333, + "experience_temperature": 25.7848, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T01:10:05.797799+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.3, + "humidity": 91.0, + "water_total": 1290.0, + "average_temperature": 25.4333, + "experience_temperature": 25.269, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T01:20:05.778780+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.3, + "humidity": 91.7, + "water_total": 1295.0, + "average_temperature": 25.3667, + "experience_temperature": 25.3424, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T01:30:05.366540+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 91.6, + "water_total": 1300.0, + "average_temperature": 25.4, + "experience_temperature": 25.6914, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T01:40:06.050766+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.3, + "humidity": 91.9, + "water_total": 1304.0, + "average_temperature": 25.4667, + "experience_temperature": 25.4824, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T01:50:06.565355+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 92.3, + "water_total": 1313.0, + "average_temperature": 25.4, + "experience_temperature": 25.8314, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T02:00:07.474327+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 92.1, + "water_total": 1318.0, + "average_temperature": 25.4333, + "experience_temperature": 25.8248, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T02:10:05.582154+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 92.3, + "water_total": 1323.0, + "average_temperature": 25.1667, + "experience_temperature": 25.5981, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T02:20:05.953599+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 92.8, + "water_total": 1328.0, + "average_temperature": 25.2, + "experience_temperature": 25.7314, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T02:30:05.598354+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.3, + "humidity": 92.7, + "water_total": 1333.0, + "average_temperature": 25.1, + "experience_temperature": 25.2757, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T02:40:05.898523+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 93.0, + "water_total": 1337.0, + "average_temperature": 25.1667, + "experience_temperature": 25.7381, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T02:50:05.834657+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 93.0, + "water_total": 1342.0, + "average_temperature": 25.0, + "experience_temperature": 25.5714, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T03:00:06.281172+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 93.3, + "water_total": 1347.0, + "average_temperature": 24.9, + "experience_temperature": 25.5314, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T03:10:05.977718+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 93.5, + "water_total": 1351.0, + "average_temperature": 24.9333, + "experience_temperature": 25.6048, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T03:20:05.827236+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.1, + "humidity": 93.5, + "water_total": 1356.0, + "average_temperature": 24.8, + "experience_temperature": 25.8071, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T03:30:06.629790+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 93.5, + "water_total": 1362.0, + "average_temperature": 24.7333, + "experience_temperature": 25.4048, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T03:40:06.201774+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 93.6, + "water_total": 1367.0, + "average_temperature": 24.6, + "experience_temperature": 25.2914, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T03:50:06.073164+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 93.6, + "water_total": 1367.0, + "average_temperature": 24.6, + "experience_temperature": 25.2914, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T04:00:06.033659+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 94.0, + "water_total": 1377.0, + "average_temperature": 24.5333, + "experience_temperature": 25.3048, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T04:10:06.143956+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 94.0, + "water_total": 1381.0, + "average_temperature": 24.5667, + "experience_temperature": 25.3381, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T04:20:06.019647+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 94.0, + "water_total": 1386.0, + "average_temperature": 24.5333, + "experience_temperature": 25.3048, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T04:30:06.614883+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 94.1, + "water_total": 1386.0, + "average_temperature": 24.4667, + "experience_temperature": 25.2581, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T04:40:06.013860+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 94.0, + "water_total": 1396.0, + "average_temperature": 24.4333, + "experience_temperature": 25.2048, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T04:50:05.747716+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.3, + "humidity": 94.0, + "water_total": 1401.0, + "average_temperature": 24.2667, + "experience_temperature": 24.7024, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T05:00:06.238354+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 94.0, + "water_total": 1401.0, + "average_temperature": 24.2, + "experience_temperature": 24.9714, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T05:10:06.577440+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 94.2, + "water_total": 1406.0, + "average_temperature": 24.3, + "experience_temperature": 25.1114, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T05:20:05.936484+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 94.2, + "water_total": 1410.0, + "average_temperature": 24.4, + "experience_temperature": 25.2114, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T05:30:06.324724+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 94.2, + "water_total": 1410.0, + "average_temperature": 24.4, + "experience_temperature": 25.2114, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T05:40:05.826403+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 94.1, + "water_total": 1419.0, + "average_temperature": 24.3667, + "experience_temperature": 25.1581, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T05:50:05.740274+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 94.0, + "water_total": 1424.0, + "average_temperature": 24.3667, + "experience_temperature": 25.1381, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T06:00:08.587219+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.3, + "humidity": 94.0, + "water_total": 1429.0, + "average_temperature": 24.3, + "experience_temperature": 24.7357, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T06:10:06.869611+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.3, + "humidity": 94.1, + "water_total": 1433.0, + "average_temperature": 24.3, + "experience_temperature": 24.7557, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T06:20:07.186239+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 94.0, + "water_total": 1443.0, + "average_temperature": 24.3667, + "experience_temperature": 25.1381, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T06:30:06.574496+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 94.0, + "water_total": 1443.0, + "average_temperature": 24.4333, + "experience_temperature": 25.2048, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T06:40:06.304770+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 93.9, + "water_total": 1468.0, + "average_temperature": 24.4667, + "experience_temperature": 25.2181, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T06:50:06.076747+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 94.0, + "water_total": 1516.0, + "average_temperature": 24.6, + "experience_temperature": 25.3714, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T07:00:06.079677+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 93.7, + "water_total": 1575.0, + "average_temperature": 24.8667, + "experience_temperature": 25.5781, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T07:10:06.234878+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.2, + "humidity": 93.2, + "water_total": 1635.0, + "average_temperature": 25.0667, + "experience_temperature": 25.6781, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T07:20:07.124738+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.1, + "humidity": 93.3, + "water_total": 1647.0, + "average_temperature": 25.4667, + "experience_temperature": 26.4338, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T07:30:06.745850+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.1, + "humidity": 93.3, + "water_total": 1647.0, + "average_temperature": 25.4667, + "experience_temperature": 26.4338, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T07:40:06.055637+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.6, + "humidity": 92.0, + "water_total": 1661.0, + "average_temperature": 25.8333, + "experience_temperature": 24.8619, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T07:50:06.172200+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.7, + "humidity": 91.5, + "water_total": 1665.0, + "average_temperature": 26.1, + "experience_temperature": 24.6929, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T08:00:06.353681+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.7, + "humidity": 91.5, + "water_total": 1665.0, + "average_temperature": 26.1, + "experience_temperature": 24.6929, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T08:10:06.168070+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.7, + "humidity": 90.5, + "water_total": 1680.0, + "average_temperature": 26.4667, + "experience_temperature": 24.8595, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T08:20:07.457652+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.8, + "humidity": 89.6, + "water_total": 1689.0, + "average_temperature": 27.0, + "experience_temperature": 24.8771, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T08:30:06.871969+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.5, + "humidity": 85.7, + "water_total": 1709.0, + "average_temperature": 27.8667, + "experience_temperature": 25.971, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T08:40:08.688023+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.7, + "humidity": 85.0, + "water_total": 1718.0, + "average_temperature": 28.1667, + "experience_temperature": 25.4595, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T08:50:06.225406+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.8, + "humidity": 82.6, + "water_total": 1760.0, + "average_temperature": 28.4, + "experience_temperature": 24.8771, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T09:00:07.010545+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.9, + "humidity": 82.7, + "water_total": 1843.0, + "average_temperature": 28.8667, + "experience_temperature": 25.0281, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T09:10:06.155404+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.0, + "humidity": 82.7, + "water_total": 1843.0, + "average_temperature": 28.9, + "experience_temperature": 24.7257, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T09:20:06.248082+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.9, + "humidity": 80.0, + "water_total": 2155.0, + "average_temperature": 29.5333, + "experience_temperature": 25.1548, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T09:30:06.769023+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.4, + "humidity": 78.6, + "water_total": 2359.0, + "average_temperature": 30.0333, + "experience_temperature": 23.6962, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T09:40:06.492697+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.3, + "humidity": 74.7, + "water_total": 2520.0, + "average_temperature": 29.9, + "experience_temperature": 23.1186, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T09:50:06.378849+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 75.8, + "water_total": 2656.0, + "average_temperature": 30.2667, + "experience_temperature": 23.0338, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T10:00:06.540983+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.4, + "humidity": 73.2, + "water_total": 2739.0, + "average_temperature": 30.3667, + "experience_temperature": 22.9495, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T10:10:07.058779+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.2, + "humidity": 74.3, + "water_total": 2830.0, + "average_temperature": 31.0333, + "experience_temperature": 24.5076, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T10:20:07.644027+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 71.5, + "water_total": 2914.0, + "average_temperature": 30.8667, + "experience_temperature": 22.7738, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T10:30:05.847841+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 71.5, + "water_total": 2914.0, + "average_temperature": 30.8667, + "experience_temperature": 22.7738, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T10:40:09.708555+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 71.4, + "water_total": 3077.0, + "average_temperature": 30.9667, + "experience_temperature": 22.8538, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T10:50:07.341604+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 71.0, + "water_total": 3175.0, + "average_temperature": 31.2667, + "experience_temperature": 23.0738, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T11:00:06.695602+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 71.0, + "water_total": 3175.0, + "average_temperature": 31.2667, + "experience_temperature": 23.0738, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T11:10:06.590941+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.3, + "humidity": 72.3, + "water_total": 3348.0, + "average_temperature": 31.2667, + "experience_temperature": 24.0052, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T11:20:07.477513+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 71.2, + "water_total": 3439.0, + "average_temperature": 30.9667, + "experience_temperature": 22.8138, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T11:30:06.256216+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 71.5, + "water_total": 3517.0, + "average_temperature": 30.6667, + "experience_temperature": 22.5738, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T11:40:07.251676+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 70.6, + "water_total": 3612.0, + "average_temperature": 30.5, + "experience_temperature": 22.2271, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T11:50:06.650273+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.6, + "humidity": 71.1, + "water_total": 3691.0, + "average_temperature": 30.6333, + "experience_temperature": 22.1248, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T12:00:09.211285+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 70.2, + "water_total": 3777.0, + "average_temperature": 31.2, + "experience_temperature": 22.8471, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T12:10:06.888496+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 71.6, + "water_total": 3861.0, + "average_temperature": 31.0, + "experience_temperature": 22.9271, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T12:20:06.238503+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 70.7, + "water_total": 3953.0, + "average_temperature": 30.9, + "experience_temperature": 22.6471, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T12:30:06.386390+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.2, + "humidity": 70.4, + "water_total": 4041.0, + "average_temperature": 30.8333, + "experience_temperature": 23.5276, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T12:40:07.206764+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 68.9, + "water_total": 4129.0, + "average_temperature": 30.9667, + "experience_temperature": 22.3538, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T12:50:06.083432+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.4, + "humidity": 68.3, + "water_total": 4206.0, + "average_temperature": 31.2333, + "experience_temperature": 22.8362, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T13:00:07.134844+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.8, + "humidity": 69.1, + "water_total": 4290.0, + "average_temperature": 31.9667, + "experience_temperature": 22.3867, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T13:10:07.103213+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.2, + "humidity": 69.9, + "water_total": 4382.0, + "average_temperature": 31.0333, + "experience_temperature": 23.6276, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T13:20:08.792186+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.4, + "humidity": 70.1, + "water_total": 4456.0, + "average_temperature": 30.8667, + "experience_temperature": 22.8295, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T13:30:07.867200+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.2, + "humidity": 68.6, + "water_total": 4549.0, + "average_temperature": 31.2333, + "experience_temperature": 23.5676, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T13:40:19.909289+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.2, + "humidity": 68.6, + "water_total": 4549.0, + "average_temperature": 31.2333, + "experience_temperature": 23.5676, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T13:50:06.949495+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.4, + "humidity": 71.6, + "water_total": 4725.0, + "average_temperature": 31.6667, + "experience_temperature": 23.9295, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T14:10:07.018135+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.4, + "humidity": 67.9, + "water_total": 4891.0, + "average_temperature": 31.2, + "experience_temperature": 22.7229, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T14:20:08.989866+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 67.9, + "water_total": 4913.0, + "average_temperature": 31.3333, + "experience_temperature": 22.5205, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T14:30:06.982081+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 69.7, + "water_total": 4926.0, + "average_temperature": 30.9667, + "experience_temperature": 22.5138, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T14:40:05.941122+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 72.8, + "water_total": 4934.0, + "average_temperature": 31.3333, + "experience_temperature": 23.5005, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T14:50:08.615567+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.4, + "humidity": 70.6, + "water_total": 4944.0, + "average_temperature": 31.4667, + "experience_temperature": 23.5295, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T15:10:06.809415+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 71.1, + "water_total": 4960.0, + "average_temperature": 31.2, + "experience_temperature": 23.0271, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T15:20:06.662557+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 70.3, + "water_total": 4971.0, + "average_temperature": 31.2333, + "experience_temperature": 22.9005, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T15:30:07.027630+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 69.3, + "water_total": 4976.0, + "average_temperature": 31.4333, + "experience_temperature": 22.9005, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T15:40:07.859566+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.3, + "humidity": 74.6, + "water_total": 4987.0, + "average_temperature": 30.7333, + "experience_temperature": 23.9319, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T15:50:06.826268+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.4, + "humidity": 75.0, + "water_total": 4991.0, + "average_temperature": 30.2667, + "experience_temperature": 23.2095, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T16:10:08.942443+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.4, + "humidity": 76.4, + "water_total": 5006.0, + "average_temperature": 30.4333, + "experience_temperature": 23.6562, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T16:20:07.216919+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.3, + "humidity": 76.7, + "water_total": 5011.0, + "average_temperature": 30.3, + "experience_temperature": 23.9186, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T16:30:06.606762+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.4, + "humidity": 77.6, + "water_total": 5016.0, + "average_temperature": 30.2667, + "experience_temperature": 23.7295, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T16:40:05.977926+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.4, + "humidity": 77.8, + "water_total": 5124.0, + "average_temperature": 30.2333, + "experience_temperature": 23.7362, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T16:50:06.578487+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.4, + "humidity": 78.2, + "water_total": 5255.0, + "average_temperature": 30.3333, + "experience_temperature": 23.9162, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T17:10:06.939095+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.5, + "humidity": 80.3, + "water_total": 182.0, + "average_temperature": 29.9, + "experience_temperature": 23.5671, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T17:20:06.896345+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.9, + "humidity": 80.2, + "water_total": 366.0, + "average_temperature": 29.6333, + "experience_temperature": 25.2948, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T17:30:06.839819+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.1, + "humidity": 80.8, + "water_total": 549.0, + "average_temperature": 29.2667, + "experience_temperature": 24.3767, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T17:40:06.661709+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.1, + "humidity": 81.5, + "water_total": 678.0, + "average_temperature": 29.0667, + "experience_temperature": 24.3167, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T17:50:06.966817+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.1, + "humidity": 81.8, + "water_total": 678.0, + "average_temperature": 28.9333, + "experience_temperature": 24.2433, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T18:00:06.472978+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.0, + "humidity": 81.6, + "water_total": 731.0, + "average_temperature": 29.0, + "experience_temperature": 24.6057, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T18:10:07.857979+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 2.2, + "humidity": 82.2, + "water_total": 829.0, + "average_temperature": 28.8, + "experience_temperature": 23.8543, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T18:20:06.480595+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.8, + "humidity": 81.7, + "water_total": 912.0, + "average_temperature": 28.6667, + "experience_temperature": 24.9638, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T18:30:09.214706+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.6, + "humidity": 81.9, + "water_total": 1008.0, + "average_temperature": 28.5333, + "experience_temperature": 25.5419, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T18:40:08.244729+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.9, + "humidity": 81.6, + "water_total": 1105.0, + "average_temperature": 28.4333, + "experience_temperature": 24.3748, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T18:50:06.729926+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.7, + "humidity": 81.5, + "water_total": 1200.0, + "average_temperature": 28.3333, + "experience_temperature": 24.9262, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T19:00:06.188720+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.8, + "humidity": 82.5, + "water_total": 1299.0, + "average_temperature": 28.3, + "experience_temperature": 24.7571, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T19:10:05.940372+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.7, + "humidity": 83.5, + "water_total": 1398.0, + "average_temperature": 28.1667, + "experience_temperature": 25.1595, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T19:20:06.960438+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.7, + "humidity": 84.3, + "water_total": 1491.0, + "average_temperature": 28.0333, + "experience_temperature": 25.1862, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T19:30:06.474102+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.8, + "humidity": 83.9, + "water_total": 1585.0, + "average_temperature": 28.2333, + "experience_temperature": 24.9705, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T19:40:06.537900+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.8, + "humidity": 85.8, + "water_total": 1679.0, + "average_temperature": 27.8667, + "experience_temperature": 24.9838, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T19:50:07.471077+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.6, + "humidity": 87.3, + "water_total": 1776.0, + "average_temperature": 27.6, + "experience_temperature": 25.6886, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T20:00:06.777255+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.6, + "humidity": 87.3, + "water_total": 1776.0, + "average_temperature": 27.6, + "experience_temperature": 25.6886, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T20:10:09.047583+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.8, + "humidity": 88.1, + "water_total": 1974.0, + "average_temperature": 27.5333, + "experience_temperature": 25.1105, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T20:20:06.869436+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.9, + "humidity": 88.0, + "water_total": 2070.0, + "average_temperature": 27.5, + "experience_temperature": 24.7214, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T20:30:06.528133+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.7, + "humidity": 87.9, + "water_total": 2163.0, + "average_temperature": 27.4333, + "experience_temperature": 25.3062, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T20:40:06.930578+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.7, + "humidity": 88.4, + "water_total": 2255.0, + "average_temperature": 27.3333, + "experience_temperature": 25.3062, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T21:00:09.217862+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.6, + "humidity": 88.9, + "water_total": 2455.0, + "average_temperature": 27.0, + "experience_temperature": 25.4086, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T21:10:05.488993+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.6, + "humidity": 89.2, + "water_total": 2543.0, + "average_temperature": 27.0, + "experience_temperature": 25.4686, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T21:20:05.983715+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.6, + "humidity": 89.5, + "water_total": 2633.0, + "average_temperature": 27.0667, + "experience_temperature": 25.5952, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T21:30:06.466583+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.6, + "humidity": 90.1, + "water_total": 2738.0, + "average_temperature": 27.1, + "experience_temperature": 25.7486, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T21:40:06.802523+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.7, + "humidity": 90.4, + "water_total": 2816.0, + "average_temperature": 26.9667, + "experience_temperature": 25.3395, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T21:50:05.983722+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.5, + "humidity": 90.9, + "water_total": 2923.0, + "average_temperature": 26.9, + "experience_temperature": 26.0443, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T22:00:06.011987+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.8, + "humidity": 91.2, + "water_total": 3012.0, + "average_temperature": 26.8667, + "experience_temperature": 25.0638, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T22:10:07.347337+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.7, + "humidity": 91.6, + "water_total": 3110.0, + "average_temperature": 26.9333, + "experience_temperature": 25.5462, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T22:20:06.049623+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.5, + "humidity": 91.6, + "water_total": 3199.0, + "average_temperature": 26.8, + "experience_temperature": 26.0843, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T22:30:06.311066+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.8, + "humidity": 91.7, + "water_total": 3295.0, + "average_temperature": 26.7667, + "experience_temperature": 25.0638, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T22:40:06.588781+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.8, + "humidity": 91.9, + "water_total": 3386.0, + "average_temperature": 26.5667, + "experience_temperature": 24.9038, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T22:50:07.255506+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.6, + "humidity": 91.9, + "water_total": 3481.0, + "average_temperature": 26.6667, + "experience_temperature": 25.6752, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T23:00:07.038568+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.6, + "humidity": 92.1, + "water_total": 3569.0, + "average_temperature": 26.6667, + "experience_temperature": 25.7152, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T23:10:06.229704+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.6, + "humidity": 92.1, + "water_total": 3569.0, + "average_temperature": 26.6667, + "experience_temperature": 25.7152, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T23:20:06.563620+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.6, + "humidity": 92.3, + "water_total": 3766.0, + "average_temperature": 26.6667, + "experience_temperature": 25.7552, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T23:30:06.732489+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.7, + "humidity": 92.2, + "water_total": 3856.0, + "average_temperature": 26.6667, + "experience_temperature": 25.3995, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T23:40:07.222106+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.6, + "humidity": 92.3, + "water_total": 3972.0, + "average_temperature": 26.7333, + "experience_temperature": 25.8219, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-27T23:50:07.050738+07:00", + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.8, + "humidity": 92.3, + "water_total": 4069.0, + "average_temperature": 26.6667, + "experience_temperature": 25.0838, + "chill_factor": 3.3571 + }, + { + "timestamp": "2026-06-28T00:00:06.501160+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.7, + "humidity": 92.6, + "water_total": 4089.0, + "average_temperature": 26.5333, + "experience_temperature": 25.4676, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T00:10:07.136484+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.7, + "humidity": 92.8, + "water_total": 4104.0, + "average_temperature": 26.5333, + "experience_temperature": 25.5076, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T00:20:07.293732+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.7, + "humidity": 92.7, + "water_total": 4117.0, + "average_temperature": 26.5, + "experience_temperature": 25.4543, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T00:30:06.224123+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.5, + "humidity": 92.9, + "water_total": 4132.0, + "average_temperature": 26.1667, + "experience_temperature": 25.8181, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T00:40:06.204165+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.8, + "humidity": 93.3, + "water_total": 4146.0, + "average_temperature": 26.1333, + "experience_temperature": 24.879, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T00:50:06.541480+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.7, + "humidity": 93.6, + "water_total": 4160.0, + "average_temperature": 26.1333, + "experience_temperature": 25.2676, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T01:00:08.038757+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 93.6, + "water_total": 4169.0, + "average_temperature": 26.1, + "experience_temperature": 25.5629, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T01:10:07.188095+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.7, + "humidity": 93.9, + "water_total": 4179.0, + "average_temperature": 26.1667, + "experience_temperature": 25.361, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T01:20:06.037774+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.5, + "humidity": 93.9, + "water_total": 4188.0, + "average_temperature": 26.1, + "experience_temperature": 25.9514, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T01:30:06.348303+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 94.0, + "water_total": 4197.0, + "average_temperature": 25.9667, + "experience_temperature": 25.5095, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T01:40:06.216219+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.7, + "humidity": 94.0, + "water_total": 4207.0, + "average_temperature": 25.9667, + "experience_temperature": 25.181, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T01:50:06.418221+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.8, + "humidity": 94.2, + "water_total": 4216.0, + "average_temperature": 25.9667, + "experience_temperature": 24.8924, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T02:00:06.319062+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.8, + "humidity": 94.2, + "water_total": 4216.0, + "average_temperature": 25.9667, + "experience_temperature": 24.8924, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T02:10:05.827715+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.7, + "humidity": 94.4, + "water_total": 4238.0, + "average_temperature": 25.9333, + "experience_temperature": 25.2276, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T02:20:05.982923+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.9, + "humidity": 94.3, + "water_total": 4244.0, + "average_temperature": 25.9, + "experience_temperature": 24.5171, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T02:30:05.534609+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.9, + "humidity": 94.3, + "water_total": 4244.0, + "average_temperature": 25.9, + "experience_temperature": 24.5171, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T02:40:06.297897+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 94.5, + "water_total": 4264.0, + "average_temperature": 25.8333, + "experience_temperature": 25.4762, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T02:50:06.402435+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.7, + "humidity": 94.4, + "water_total": 4273.0, + "average_temperature": 25.8, + "experience_temperature": 25.0943, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T03:10:05.663787+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.2, + "humidity": 94.6, + "water_total": 4297.0, + "average_temperature": 25.7667, + "experience_temperature": 26.7438, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T03:20:06.451069+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.3, + "humidity": 94.4, + "water_total": 4307.0, + "average_temperature": 25.5333, + "experience_temperature": 26.1419, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T03:30:06.115661+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.3, + "humidity": 94.3, + "water_total": 4316.0, + "average_temperature": 25.5667, + "experience_temperature": 26.1552, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T03:40:07.045881+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.2, + "humidity": 94.2, + "water_total": 4326.0, + "average_temperature": 25.4333, + "experience_temperature": 26.3305, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T03:50:06.252224+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.2, + "humidity": 94.3, + "water_total": 4335.0, + "average_temperature": 25.3, + "experience_temperature": 26.2171, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T04:00:06.499681+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.3, + "humidity": 94.3, + "water_total": 4345.0, + "average_temperature": 25.1333, + "experience_temperature": 25.7219, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T04:10:06.402356+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.3, + "humidity": 94.2, + "water_total": 4354.0, + "average_temperature": 25.1, + "experience_temperature": 25.6686, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T04:20:06.809856+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.3, + "humidity": 94.4, + "water_total": 4361.0, + "average_temperature": 25.0667, + "experience_temperature": 25.6752, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T04:30:06.127768+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.2, + "humidity": 94.4, + "water_total": 4373.0, + "average_temperature": 25.0333, + "experience_temperature": 25.9705, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T04:40:05.605181+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.3, + "humidity": 94.3, + "water_total": 4382.0, + "average_temperature": 24.9333, + "experience_temperature": 25.5219, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T04:50:06.125244+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.2, + "humidity": 94.4, + "water_total": 4392.0, + "average_temperature": 24.9667, + "experience_temperature": 25.9038, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T05:00:06.024396+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.2, + "humidity": 94.4, + "water_total": 4402.0, + "average_temperature": 24.9667, + "experience_temperature": 25.9038, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T05:10:06.199929+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.4, + "humidity": 94.2, + "water_total": 4411.0, + "average_temperature": 24.6333, + "experience_temperature": 24.8733, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T05:20:06.739409+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.3, + "humidity": 94.7, + "water_total": 4421.0, + "average_temperature": 24.7333, + "experience_temperature": 25.4019, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T05:30:06.757875+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.4, + "humidity": 94.3, + "water_total": 4430.0, + "average_temperature": 24.6333, + "experience_temperature": 24.8933, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T05:40:06.168380+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.3, + "humidity": 94.8, + "water_total": 4440.0, + "average_temperature": 24.6333, + "experience_temperature": 25.3219, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T05:50:05.879373+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.2, + "humidity": 94.5, + "water_total": 4445.0, + "average_temperature": 24.5, + "experience_temperature": 25.4571, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T06:00:07.416454+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.2, + "humidity": 94.7, + "water_total": 4459.0, + "average_temperature": 24.6333, + "experience_temperature": 25.6305, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T06:10:07.451498+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.2, + "humidity": 94.6, + "water_total": 4468.0, + "average_temperature": 24.4, + "experience_temperature": 25.3771, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T06:20:06.710222+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.3, + "humidity": 94.9, + "water_total": 4478.0, + "average_temperature": 24.5333, + "experience_temperature": 25.2419, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T06:30:06.869237+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.4, + "humidity": 94.7, + "water_total": 4491.0, + "average_temperature": 24.5667, + "experience_temperature": 24.9067, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T06:40:07.308976+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.2, + "humidity": 95.1, + "water_total": 4501.0, + "average_temperature": 24.6667, + "experience_temperature": 25.7438, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T06:50:07.417578+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.3, + "humidity": 95.0, + "water_total": 4513.0, + "average_temperature": 24.8333, + "experience_temperature": 25.5619, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T07:00:07.163915+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.2, + "humidity": 95.1, + "water_total": 4525.0, + "average_temperature": 24.8667, + "experience_temperature": 25.9438, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T07:10:07.623487+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.3, + "humidity": 95.2, + "water_total": 4534.0, + "average_temperature": 25.0667, + "experience_temperature": 25.8352, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T07:20:06.141931+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.4, + "humidity": 95.1, + "water_total": 4544.0, + "average_temperature": 25.2, + "experience_temperature": 25.62, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T07:30:05.663210+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.2, + "humidity": 95.2, + "water_total": 4558.0, + "average_temperature": 25.5333, + "experience_temperature": 26.6305, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T07:40:06.371350+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.2, + "humidity": 95.2, + "water_total": 4558.0, + "average_temperature": 25.5333, + "experience_temperature": 26.6305, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T07:50:07.984772+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.9, + "humidity": 94.6, + "water_total": 4585.0, + "average_temperature": 25.8, + "experience_temperature": 24.4771, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T08:00:06.271383+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 93.8, + "water_total": 4596.0, + "average_temperature": 26.1, + "experience_temperature": 25.6029, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T08:10:08.831733+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 93.8, + "water_total": 4596.0, + "average_temperature": 26.1, + "experience_temperature": 25.6029, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T08:20:07.105649+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 92.3, + "water_total": 4606.0, + "average_temperature": 26.2667, + "experience_temperature": 25.4695, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T08:30:09.314284+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.8, + "humidity": 87.5, + "water_total": 4625.0, + "average_temperature": 27.0667, + "experience_temperature": 24.6524, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T08:40:05.813125+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 84.5, + "water_total": 4721.0, + "average_temperature": 27.7667, + "experience_temperature": 25.4095, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T08:50:06.415293+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.8, + "humidity": 81.8, + "water_total": 4875.0, + "average_temperature": 28.4667, + "experience_temperature": 24.9124, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T09:00:06.067743+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 79.7, + "water_total": 5102.0, + "average_temperature": 28.7, + "experience_temperature": 25.3829, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T09:10:06.306895+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.0, + "humidity": 78.0, + "water_total": 5267.0, + "average_temperature": 29.0333, + "experience_temperature": 24.0619, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T09:20:08.495094+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.1, + "humidity": 78.4, + "water_total": 5439.0, + "average_temperature": 29.0333, + "experience_temperature": 23.8133, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T09:30:06.276895+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.3, + "humidity": 78.0, + "water_total": 5606.0, + "average_temperature": 29.3333, + "experience_temperature": 23.3762, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T09:40:05.909498+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.2, + "humidity": 78.4, + "water_total": 5753.0, + "average_temperature": 29.5667, + "experience_temperature": 24.0181, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T09:50:06.770201+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.2, + "humidity": 77.2, + "water_total": 5853.0, + "average_temperature": 29.6667, + "experience_temperature": 23.8781, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T10:00:06.036480+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 76.7, + "water_total": 5954.0, + "average_temperature": 30.1333, + "experience_temperature": 23.259, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T10:10:07.695801+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.4, + "humidity": 75.7, + "water_total": 6048.0, + "average_temperature": 30.5, + "experience_temperature": 23.7543, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T10:20:06.009264+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 73.3, + "water_total": 6140.0, + "average_temperature": 30.7667, + "experience_temperature": 23.2124, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T10:30:06.586420+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.6, + "humidity": 71.7, + "water_total": 6246.0, + "average_temperature": 30.6333, + "experience_temperature": 22.4305, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T10:40:05.981792+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 72.0, + "water_total": 6355.0, + "average_temperature": 30.8333, + "experience_temperature": 23.019, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T10:50:06.398710+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 71.4, + "water_total": 6453.0, + "average_temperature": 31.2, + "experience_temperature": 23.2657, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T11:00:06.109162+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 70.6, + "water_total": 6563.0, + "average_temperature": 31.2, + "experience_temperature": 23.1057, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T11:10:06.364123+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 70.2, + "water_total": 6668.0, + "average_temperature": 31.0333, + "experience_temperature": 22.859, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T11:20:05.939966+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 71.4, + "water_total": 6758.0, + "average_temperature": 31.5667, + "experience_temperature": 23.6324, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T11:30:08.676135+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.4, + "humidity": 70.7, + "water_total": 6805.0, + "average_temperature": 31.0333, + "experience_temperature": 23.2876, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T11:40:07.123742+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.4, + "humidity": 70.7, + "water_total": 6805.0, + "average_temperature": 31.0333, + "experience_temperature": 23.2876, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T11:50:07.627246+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.4, + "humidity": 70.3, + "water_total": 6829.0, + "average_temperature": 31.0333, + "experience_temperature": 23.2076, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T12:00:06.045601+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 69.2, + "water_total": 6834.0, + "average_temperature": 31.5667, + "experience_temperature": 23.1924, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T12:10:07.046226+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 69.8, + "water_total": 6844.0, + "average_temperature": 31.2, + "experience_temperature": 22.9457, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T12:20:07.500760+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 71.3, + "water_total": 6853.0, + "average_temperature": 31.2667, + "experience_temperature": 23.3124, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T12:30:06.487880+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 72.0, + "water_total": 6858.0, + "average_temperature": 31.2667, + "experience_temperature": 23.4524, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T12:40:07.438653+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 71.9, + "water_total": 6867.0, + "average_temperature": 31.1, + "experience_temperature": 23.2657, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T12:50:06.651432+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 70.6, + "water_total": 6877.0, + "average_temperature": 30.7, + "experience_temperature": 22.6057, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T13:00:06.326061+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.6, + "humidity": 69.0, + "water_total": 6882.0, + "average_temperature": 30.8667, + "experience_temperature": 22.1238, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T13:10:06.412478+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.6, + "humidity": 70.0, + "water_total": 6891.0, + "average_temperature": 31.0, + "experience_temperature": 22.4571, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T13:20:05.928036+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.8, + "humidity": 69.9, + "water_total": 6896.0, + "average_temperature": 31.9, + "experience_temperature": 22.68, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T13:30:06.616033+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 71.6, + "water_total": 6906.0, + "average_temperature": 30.9333, + "experience_temperature": 23.039, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T13:40:06.309934+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 73.6, + "water_total": 6916.0, + "average_temperature": 31.4667, + "experience_temperature": 23.9724, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T13:50:07.318059+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.6, + "humidity": 73.1, + "water_total": 6924.0, + "average_temperature": 31.4667, + "experience_temperature": 23.5438, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T14:10:05.831882+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 75.3, + "water_total": 6939.0, + "average_temperature": 30.9667, + "experience_temperature": 23.8124, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T14:20:06.580939+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 76.4, + "water_total": 6948.0, + "average_temperature": 30.8333, + "experience_temperature": 23.899, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T14:30:06.808735+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 76.4, + "water_total": 6948.0, + "average_temperature": 30.8333, + "experience_temperature": 23.899, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T14:40:06.095126+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 74.1, + "water_total": 6962.0, + "average_temperature": 31.5, + "experience_temperature": 24.1057, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T14:50:06.765667+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 73.5, + "water_total": 6971.0, + "average_temperature": 31.3667, + "experience_temperature": 23.8524, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T15:10:08.622706+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 73.7, + "water_total": 6985.0, + "average_temperature": 30.6667, + "experience_temperature": 23.1924, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T15:20:07.681899+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 71.6, + "water_total": 6990.0, + "average_temperature": 30.7, + "experience_temperature": 22.8057, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T15:30:06.400066+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.4, + "humidity": 68.7, + "water_total": 7000.0, + "average_temperature": 31.2333, + "experience_temperature": 23.0876, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T15:40:06.522025+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.4, + "humidity": 70.0, + "water_total": 7005.0, + "average_temperature": 30.8, + "experience_temperature": 22.9143, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T15:50:07.631915+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.3, + "humidity": 70.2, + "water_total": 7009.0, + "average_temperature": 30.6, + "experience_temperature": 23.0829, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T16:10:07.066422+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 70.6, + "water_total": 7019.0, + "average_temperature": 30.8667, + "experience_temperature": 22.7724, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T16:20:06.736273+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.5, + "humidity": 71.5, + "water_total": 7019.0, + "average_temperature": 30.6333, + "experience_temperature": 22.719, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T16:30:06.480321+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 3.2, + "humidity": 72.2, + "water_total": 7024.0, + "average_temperature": 30.4667, + "experience_temperature": 20.3924, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T16:40:07.441541+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.9, + "humidity": 74.3, + "water_total": 7029.0, + "average_temperature": 30.2333, + "experience_temperature": 24.8505, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T16:50:06.525474+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.9, + "humidity": 74.7, + "water_total": 7034.0, + "average_temperature": 29.9667, + "experience_temperature": 24.6638, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T17:10:06.785436+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.2, + "humidity": 76.1, + "water_total": 4.0, + "average_temperature": 29.6333, + "experience_temperature": 23.6248, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T17:20:06.463211+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.0, + "humidity": 76.7, + "water_total": 9.0, + "average_temperature": 29.4667, + "experience_temperature": 24.2352, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T17:30:06.502678+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.0, + "humidity": 77.1, + "water_total": 14.0, + "average_temperature": 29.2333, + "experience_temperature": 24.0819, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T17:40:09.567896+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.9, + "humidity": 77.8, + "water_total": 18.0, + "average_temperature": 29.0333, + "experience_temperature": 24.3505, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T17:50:06.793575+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.9, + "humidity": 78.3, + "water_total": 23.0, + "average_temperature": 29.0333, + "experience_temperature": 24.4505, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T18:00:10.692919+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 2.0, + "humidity": 78.4, + "water_total": 27.0, + "average_temperature": 28.8333, + "experience_temperature": 23.9419, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T18:10:06.811472+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.9, + "humidity": 77.7, + "water_total": 32.0, + "average_temperature": 28.9333, + "experience_temperature": 24.2305, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T18:20:07.344477+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.9, + "humidity": 78.4, + "water_total": 32.0, + "average_temperature": 28.7333, + "experience_temperature": 24.1705, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T18:30:06.655426+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 79.4, + "water_total": 37.0, + "average_temperature": 28.4667, + "experience_temperature": 25.0895, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T18:40:07.128224+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.5, + "humidity": 80.1, + "water_total": 41.0, + "average_temperature": 28.2667, + "experience_temperature": 25.3581, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T18:50:06.647029+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 78.6, + "water_total": 46.0, + "average_temperature": 28.6, + "experience_temperature": 25.0629, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T19:00:07.021321+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 79.9, + "water_total": 51.0, + "average_temperature": 28.5667, + "experience_temperature": 25.2895, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T19:10:06.341481+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.4, + "humidity": 80.1, + "water_total": 56.0, + "average_temperature": 28.4, + "experience_temperature": 25.82, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T19:20:08.343496+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.7, + "humidity": 80.5, + "water_total": 56.0, + "average_temperature": 28.2, + "experience_temperature": 24.7143, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T19:30:07.156507+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.7, + "humidity": 81.8, + "water_total": 60.0, + "average_temperature": 27.9, + "experience_temperature": 24.6743, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T19:40:07.060672+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.7, + "humidity": 82.4, + "water_total": 65.0, + "average_temperature": 27.6667, + "experience_temperature": 24.561, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T19:50:05.905086+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 82.6, + "water_total": 65.0, + "average_temperature": 27.5, + "experience_temperature": 24.7629, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T20:00:06.281138+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.7, + "humidity": 82.4, + "water_total": 70.0, + "average_temperature": 27.3667, + "experience_temperature": 24.261, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T20:10:06.080684+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.7, + "humidity": 82.4, + "water_total": 74.0, + "average_temperature": 27.4667, + "experience_temperature": 24.361, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T20:20:05.548962+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 82.3, + "water_total": 76.0, + "average_temperature": 27.3333, + "experience_temperature": 24.5362, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T20:30:05.500379+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.7, + "humidity": 82.9, + "water_total": 79.0, + "average_temperature": 27.2333, + "experience_temperature": 24.2276, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T20:40:05.868910+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 83.4, + "water_total": 84.0, + "average_temperature": 27.0333, + "experience_temperature": 24.4562, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T20:50:05.771414+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 84.1, + "water_total": 84.0, + "average_temperature": 26.7333, + "experience_temperature": 24.2962, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T21:00:06.676938+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.7, + "humidity": 84.6, + "water_total": 88.0, + "average_temperature": 26.4667, + "experience_temperature": 23.801, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T21:10:08.486394+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 85.5, + "water_total": 88.0, + "average_temperature": 26.2667, + "experience_temperature": 24.1095, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T21:20:05.588273+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.5, + "humidity": 86.4, + "water_total": 93.0, + "average_temperature": 26.1667, + "experience_temperature": 24.5181, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T21:30:06.657087+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.5, + "humidity": 87.0, + "water_total": 98.0, + "average_temperature": 26.1333, + "experience_temperature": 24.6048, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T21:40:06.537408+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.4, + "humidity": 87.5, + "water_total": 98.0, + "average_temperature": 26.0333, + "experience_temperature": 24.9333, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T21:50:06.927704+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.5, + "humidity": 88.1, + "water_total": 102.0, + "average_temperature": 25.9333, + "experience_temperature": 24.6248, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T22:00:06.497397+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.4, + "humidity": 88.4, + "water_total": 102.0, + "average_temperature": 25.9333, + "experience_temperature": 25.0133, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T22:10:06.118556+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 88.6, + "water_total": 106.0, + "average_temperature": 25.9, + "experience_temperature": 24.3629, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T22:20:07.112390+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 88.9, + "water_total": 106.0, + "average_temperature": 25.8, + "experience_temperature": 24.3229, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T22:30:06.122830+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.5, + "humidity": 89.3, + "water_total": 111.0, + "average_temperature": 25.7667, + "experience_temperature": 24.6981, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T22:40:06.426353+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 89.7, + "water_total": 116.0, + "average_temperature": 25.6667, + "experience_temperature": 24.3495, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T22:50:06.732488+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 89.9, + "water_total": 116.0, + "average_temperature": 25.6667, + "experience_temperature": 24.3895, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T23:00:06.468482+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.6, + "humidity": 89.9, + "water_total": 116.0, + "average_temperature": 25.6667, + "experience_temperature": 24.3895, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T23:10:06.338983+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.4, + "humidity": 90.2, + "water_total": 120.0, + "average_temperature": 25.6, + "experience_temperature": 25.04, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T23:20:07.373737+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.2, + "humidity": 90.3, + "water_total": 125.0, + "average_temperature": 25.5333, + "experience_temperature": 25.6505, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T23:30:06.859967+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.2, + "humidity": 90.5, + "water_total": 129.0, + "average_temperature": 25.4667, + "experience_temperature": 25.6238, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T23:40:06.238374+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.2, + "humidity": 90.7, + "water_total": 129.0, + "average_temperature": 25.4, + "experience_temperature": 25.5971, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-28T23:50:06.591156+07:00", + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.2, + "humidity": 90.9, + "water_total": 134.0, + "average_temperature": 25.3333, + "experience_temperature": 25.5705, + "chill_factor": 3.2857 + }, + { + "timestamp": "2026-06-29T00:00:06.440218+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.1, + "humidity": 91.1, + "water_total": 138.0, + "average_temperature": 25.3, + "experience_temperature": 25.9843, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T00:10:07.108264+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 91.2, + "water_total": 138.0, + "average_temperature": 25.2667, + "experience_temperature": 25.6495, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T00:20:05.822215+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 91.3, + "water_total": 143.0, + "average_temperature": 25.3, + "experience_temperature": 25.7029, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T00:30:07.217314+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 91.3, + "water_total": 143.0, + "average_temperature": 25.2667, + "experience_temperature": 25.6695, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T00:40:06.885907+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.1, + "humidity": 91.6, + "water_total": 148.0, + "average_temperature": 25.2333, + "experience_temperature": 26.0176, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T00:50:06.404727+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 91.6, + "water_total": 152.0, + "average_temperature": 25.1333, + "experience_temperature": 25.5962, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T01:00:10.463352+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.1, + "humidity": 91.7, + "water_total": 152.0, + "average_temperature": 25.1333, + "experience_temperature": 25.9376, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T01:10:06.374112+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.1, + "humidity": 91.7, + "water_total": 157.0, + "average_temperature": 25.0667, + "experience_temperature": 25.871, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T01:20:06.333177+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 91.8, + "water_total": 157.0, + "average_temperature": 25.0, + "experience_temperature": 25.5029, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T01:30:06.487405+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 92.0, + "water_total": 161.0, + "average_temperature": 24.9, + "experience_temperature": 25.4429, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T01:40:07.040643+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.3, + "humidity": 92.1, + "water_total": 161.0, + "average_temperature": 24.8667, + "experience_temperature": 25.1081, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T01:50:07.339201+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 92.1, + "water_total": 165.0, + "average_temperature": 24.8333, + "experience_temperature": 25.3962, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T02:00:06.871401+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 92.2, + "water_total": 170.0, + "average_temperature": 24.8, + "experience_temperature": 25.3829, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T02:10:06.700842+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 92.3, + "water_total": 170.0, + "average_temperature": 24.6667, + "experience_temperature": 25.2695, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T02:20:06.200492+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 92.6, + "water_total": 175.0, + "average_temperature": 24.6667, + "experience_temperature": 25.3295, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T02:30:06.251572+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 92.8, + "water_total": 175.0, + "average_temperature": 24.6333, + "experience_temperature": 25.3362, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T02:40:07.091386+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 92.8, + "water_total": 179.0, + "average_temperature": 24.5667, + "experience_temperature": 25.2695, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T02:50:06.734036+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 92.9, + "water_total": 179.0, + "average_temperature": 24.5, + "experience_temperature": 25.2229, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T03:00:07.171051+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 92.9, + "water_total": 184.0, + "average_temperature": 24.3667, + "experience_temperature": 25.0895, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T03:10:07.141227+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 93.0, + "water_total": 184.0, + "average_temperature": 24.3, + "experience_temperature": 25.0429, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T03:20:07.562523+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 93.1, + "water_total": 189.0, + "average_temperature": 24.2667, + "experience_temperature": 25.0295, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T03:30:06.981503+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.3, + "humidity": 93.1, + "water_total": 189.0, + "average_temperature": 24.2667, + "experience_temperature": 24.7081, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T03:40:06.683691+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.3, + "humidity": 93.1, + "water_total": 189.0, + "average_temperature": 24.2667, + "experience_temperature": 24.7081, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T03:50:06.901789+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.3, + "humidity": 93.2, + "water_total": 193.0, + "average_temperature": 24.0667, + "experience_temperature": 24.5281, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T04:00:06.314078+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 93.2, + "water_total": 198.0, + "average_temperature": 24.0, + "experience_temperature": 24.7829, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T04:10:06.305664+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 93.3, + "water_total": 198.0, + "average_temperature": 24.0, + "experience_temperature": 24.8029, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T04:20:06.072579+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 93.4, + "water_total": 202.0, + "average_temperature": 23.9333, + "experience_temperature": 24.7562, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T04:30:05.503193+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 93.4, + "water_total": 207.0, + "average_temperature": 23.8333, + "experience_temperature": 24.6562, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T04:40:05.527490+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.1, + "humidity": 93.7, + "water_total": 207.0, + "average_temperature": 23.8333, + "experience_temperature": 25.0376, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T04:50:05.673939+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 93.7, + "water_total": 207.0, + "average_temperature": 23.8667, + "experience_temperature": 24.7495, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T05:00:06.015990+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 93.8, + "water_total": 211.0, + "average_temperature": 23.8333, + "experience_temperature": 24.7362, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T05:10:05.520868+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 93.7, + "water_total": 211.0, + "average_temperature": 23.6333, + "experience_temperature": 24.5162, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T05:20:05.819530+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 93.7, + "water_total": 211.0, + "average_temperature": 23.6333, + "experience_temperature": 24.5162, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T05:30:06.257029+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 94.0, + "water_total": 216.0, + "average_temperature": 23.6, + "experience_temperature": 24.5429, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T05:40:06.848151+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 94.0, + "water_total": 216.0, + "average_temperature": 23.6, + "experience_temperature": 24.5429, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T05:50:06.512014+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 93.8, + "water_total": 225.0, + "average_temperature": 23.2333, + "experience_temperature": 24.1362, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T06:00:06.751646+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 93.8, + "water_total": 225.0, + "average_temperature": 23.2333, + "experience_temperature": 24.1362, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T06:10:06.864834+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 94.4, + "water_total": 230.0, + "average_temperature": 23.3667, + "experience_temperature": 24.3895, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T06:20:06.647181+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 94.3, + "water_total": 230.0, + "average_temperature": 23.3, + "experience_temperature": 24.3029, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T06:30:06.697211+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.1, + "humidity": 94.6, + "water_total": 234.0, + "average_temperature": 23.5333, + "experience_temperature": 24.9176, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T06:40:06.884460+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.1, + "humidity": 94.6, + "water_total": 234.0, + "average_temperature": 23.5333, + "experience_temperature": 24.9176, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T06:50:06.525811+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 94.7, + "water_total": 240.0, + "average_temperature": 23.8333, + "experience_temperature": 24.9162, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T07:00:07.158028+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 94.5, + "water_total": 240.0, + "average_temperature": 23.9667, + "experience_temperature": 25.0095, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T07:10:07.470752+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.1, + "humidity": 94.5, + "water_total": 245.0, + "average_temperature": 24.1333, + "experience_temperature": 25.4976, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T07:20:06.255286+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.1, + "humidity": 94.2, + "water_total": 245.0, + "average_temperature": 24.2333, + "experience_temperature": 25.5376, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T07:30:07.119611+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 94.0, + "water_total": 249.0, + "average_temperature": 24.4333, + "experience_temperature": 25.3762, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T07:40:05.969719+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.1, + "humidity": 93.6, + "water_total": 249.0, + "average_temperature": 24.6667, + "experience_temperature": 25.851, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T07:50:06.709063+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 92.9, + "water_total": 254.0, + "average_temperature": 24.8333, + "experience_temperature": 25.5562, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T08:00:07.565525+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.2, + "humidity": 92.9, + "water_total": 254.0, + "average_temperature": 24.8333, + "experience_temperature": 25.5562, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T08:10:07.959817+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.4, + "humidity": 90.5, + "water_total": 258.0, + "average_temperature": 25.8333, + "experience_temperature": 25.4333, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T08:20:08.717327+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.5, + "humidity": 88.7, + "water_total": 263.0, + "average_temperature": 26.2667, + "experience_temperature": 25.1852, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T08:30:07.062946+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.7, + "humidity": 86.7, + "water_total": 263.0, + "average_temperature": 26.7667, + "experience_temperature": 24.6424, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T08:40:06.719559+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.5, + "humidity": 84.6, + "water_total": 267.0, + "average_temperature": 27.0667, + "experience_temperature": 25.1652, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T08:50:06.505144+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.6, + "humidity": 83.5, + "water_total": 279.0, + "average_temperature": 27.6333, + "experience_temperature": 25.1905, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T09:00:07.289111+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.6, + "humidity": 80.9, + "water_total": 281.0, + "average_temperature": 28.0, + "experience_temperature": 25.0371, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T09:10:06.969803+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.5, + "humidity": 79.7, + "water_total": 284.0, + "average_temperature": 28.5, + "experience_temperature": 25.6186, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T09:20:08.105688+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.9, + "humidity": 77.8, + "water_total": 293.0, + "average_temperature": 28.9333, + "experience_temperature": 24.3862, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T09:30:07.546505+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.8, + "humidity": 76.9, + "water_total": 293.0, + "average_temperature": 29.3667, + "experience_temperature": 24.961, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T09:40:06.808046+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.9, + "humidity": 77.0, + "water_total": 309.0, + "average_temperature": 29.2667, + "experience_temperature": 24.5595, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T09:50:11.534928+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.9, + "humidity": 75.0, + "water_total": 387.0, + "average_temperature": 29.3667, + "experience_temperature": 24.2595, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T10:00:08.168563+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.5, + "humidity": 76.2, + "water_total": 591.0, + "average_temperature": 29.7333, + "experience_temperature": 22.9376, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T10:10:09.131300+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.3, + "humidity": 72.7, + "water_total": 743.0, + "average_temperature": 29.7667, + "experience_temperature": 22.9138, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T10:20:06.495711+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.4, + "humidity": 72.2, + "water_total": 938.0, + "average_temperature": 29.7667, + "experience_temperature": 22.4924, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T10:30:06.708092+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.1, + "humidity": 72.4, + "water_total": 1102.0, + "average_temperature": 30.4, + "experience_temperature": 24.13, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T10:40:08.135904+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.2, + "humidity": 69.8, + "water_total": 1254.0, + "average_temperature": 30.2333, + "experience_temperature": 23.1219, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T10:50:07.165349+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.2, + "humidity": 71.2, + "water_total": 1364.0, + "average_temperature": 30.1333, + "experience_temperature": 23.3019, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T11:00:06.932164+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.3, + "humidity": 71.3, + "water_total": 1441.0, + "average_temperature": 29.9333, + "experience_temperature": 22.8005, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T11:10:06.859362+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.3, + "humidity": 70.0, + "water_total": 1550.0, + "average_temperature": 30.6, + "experience_temperature": 23.2071, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T11:20:09.151724+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.4, + "humidity": 71.1, + "water_total": 1640.0, + "average_temperature": 30.5, + "experience_temperature": 23.0057, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T11:30:07.277603+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.1, + "humidity": 70.0, + "water_total": 1729.0, + "average_temperature": 30.8333, + "experience_temperature": 24.0833, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T11:40:07.099136+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.2, + "humidity": 70.8, + "water_total": 1739.0, + "average_temperature": 30.8333, + "experience_temperature": 23.9219, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T11:50:05.747914+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.2, + "humidity": 68.8, + "water_total": 1749.0, + "average_temperature": 31.1333, + "experience_temperature": 23.8219, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T12:00:06.073245+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.2, + "humidity": 68.8, + "water_total": 1749.0, + "average_temperature": 31.1333, + "experience_temperature": 23.8219, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T12:10:08.586530+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.4, + "humidity": 70.6, + "water_total": 1774.0, + "average_temperature": 30.8, + "experience_temperature": 23.2057, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T12:20:06.245510+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.3, + "humidity": 69.9, + "water_total": 1788.0, + "average_temperature": 30.9333, + "experience_temperature": 23.5205, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T12:30:05.792939+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.1, + "humidity": 67.5, + "water_total": 1801.0, + "average_temperature": 31.0667, + "experience_temperature": 23.8167, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T12:40:06.763145+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.4, + "humidity": 67.3, + "water_total": 1812.0, + "average_temperature": 31.0, + "experience_temperature": 22.7457, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T12:50:06.041494+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.1, + "humidity": 70.1, + "water_total": 1822.0, + "average_temperature": 30.6333, + "experience_temperature": 23.9033, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T13:00:05.955047+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.0, + "humidity": 67.6, + "water_total": 1836.0, + "average_temperature": 31.0333, + "experience_temperature": 24.1248, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T13:10:05.607142+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.3, + "humidity": 66.9, + "water_total": 1846.0, + "average_temperature": 30.8, + "experience_temperature": 22.7871, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T13:20:08.494406+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.3, + "humidity": 68.8, + "water_total": 1860.0, + "average_temperature": 30.6667, + "experience_temperature": 23.0338, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T13:30:06.959458+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.3, + "humidity": 68.3, + "water_total": 1870.0, + "average_temperature": 31.2, + "experience_temperature": 23.4671, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T13:40:06.965772+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.2, + "humidity": 67.1, + "water_total": 1885.0, + "average_temperature": 31.2, + "experience_temperature": 23.5486, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T13:50:06.582497+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.4, + "humidity": 67.4, + "water_total": 1895.0, + "average_temperature": 31.1, + "experience_temperature": 22.8657, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T14:10:06.566303+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.4, + "humidity": 69.5, + "water_total": 1981.0, + "average_temperature": 31.2333, + "experience_temperature": 23.419, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T14:20:06.311720+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.4, + "humidity": 69.5, + "water_total": 1981.0, + "average_temperature": 31.2333, + "experience_temperature": 23.419, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T14:30:06.785528+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.2, + "humidity": 69.4, + "water_total": 2138.0, + "average_temperature": 30.7333, + "experience_temperature": 23.5419, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T14:40:06.879760+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.5, + "humidity": 69.0, + "water_total": 2231.0, + "average_temperature": 31.1333, + "experience_temperature": 22.8976, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T14:50:06.054323+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.4, + "humidity": 65.9, + "water_total": 2313.0, + "average_temperature": 31.0, + "experience_temperature": 22.4657, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T15:10:06.231124+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.2, + "humidity": 73.6, + "water_total": 2471.0, + "average_temperature": 30.9333, + "experience_temperature": 24.5819, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T15:20:07.286183+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.1, + "humidity": 72.6, + "water_total": 2535.0, + "average_temperature": 30.9333, + "experience_temperature": 24.7033, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T15:30:06.380614+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.1, + "humidity": 72.7, + "water_total": 2585.0, + "average_temperature": 30.9, + "experience_temperature": 24.69, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T15:40:09.512919+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.3, + "humidity": 72.2, + "water_total": 2622.0, + "average_temperature": 30.8, + "experience_temperature": 23.8471, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T15:50:07.098793+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.5, + "humidity": 72.5, + "water_total": 2664.0, + "average_temperature": 30.7333, + "experience_temperature": 23.1976, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T16:10:06.588676+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.3, + "humidity": 72.6, + "water_total": 2757.0, + "average_temperature": 30.6, + "experience_temperature": 23.7271, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T16:20:15.880136+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.4, + "humidity": 72.9, + "water_total": 2801.0, + "average_temperature": 30.3667, + "experience_temperature": 23.2324, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T16:30:06.268645+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.4, + "humidity": 73.5, + "water_total": 2844.0, + "average_temperature": 30.1, + "experience_temperature": 23.0857, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T16:40:08.492932+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.1, + "humidity": 73.7, + "water_total": 2886.0, + "average_temperature": 30.0, + "experience_temperature": 23.99, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T16:50:06.406878+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.3, + "humidity": 74.1, + "water_total": 2925.0, + "average_temperature": 29.9667, + "experience_temperature": 23.3938, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T17:10:07.518255+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.1, + "humidity": 73.4, + "water_total": 40.0, + "average_temperature": 29.7, + "experience_temperature": 23.63, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T17:20:06.495998+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 2.0, + "humidity": 73.9, + "water_total": 81.0, + "average_temperature": 29.5, + "experience_temperature": 23.8514, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T17:30:06.851401+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.8, + "humidity": 73.7, + "water_total": 116.0, + "average_temperature": 29.4, + "experience_temperature": 24.3543, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T17:40:06.518735+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.9, + "humidity": 73.6, + "water_total": 171.0, + "average_temperature": 29.2333, + "experience_temperature": 23.8462, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T17:50:06.096044+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.8, + "humidity": 74.7, + "water_total": 212.0, + "average_temperature": 29.1, + "experience_temperature": 24.2543, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T18:00:06.321948+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.8, + "humidity": 74.7, + "water_total": 212.0, + "average_temperature": 29.1, + "experience_temperature": 24.2543, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T18:10:06.482908+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.9, + "humidity": 76.3, + "water_total": 295.0, + "average_temperature": 28.7333, + "experience_temperature": 23.8862, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T18:20:06.833833+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.9, + "humidity": 76.6, + "water_total": 342.0, + "average_temperature": 28.6, + "experience_temperature": 23.8129, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T18:30:06.644496+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.6, + "humidity": 76.9, + "water_total": 383.0, + "average_temperature": 28.4667, + "experience_temperature": 24.7038, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T18:40:06.351441+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.5, + "humidity": 78.7, + "water_total": 430.0, + "average_temperature": 28.1333, + "experience_temperature": 25.0519, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T18:50:05.957419+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.4, + "humidity": 80.1, + "water_total": 471.0, + "average_temperature": 27.7333, + "experience_temperature": 25.2533, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T19:00:06.889316+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.5, + "humidity": 80.1, + "water_total": 513.0, + "average_temperature": 27.7333, + "experience_temperature": 24.9319, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T19:10:05.869699+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.5, + "humidity": 79.6, + "water_total": 554.0, + "average_temperature": 27.9333, + "experience_temperature": 25.0319, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T19:20:08.080562+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.4, + "humidity": 79.8, + "water_total": 596.0, + "average_temperature": 27.9333, + "experience_temperature": 25.3933, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T19:30:06.583859+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.7, + "humidity": 79.2, + "water_total": 643.0, + "average_temperature": 27.9333, + "experience_temperature": 24.309, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T19:40:06.245907+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.4, + "humidity": 78.8, + "water_total": 678.0, + "average_temperature": 28.0, + "experience_temperature": 25.26, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T19:50:06.374385+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.7, + "humidity": 79.2, + "water_total": 725.0, + "average_temperature": 27.9333, + "experience_temperature": 24.309, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T20:00:05.835824+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.7, + "humidity": 79.2, + "water_total": 725.0, + "average_temperature": 27.9333, + "experience_temperature": 24.309, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T20:10:06.458795+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.4, + "humidity": 80.3, + "water_total": 808.0, + "average_temperature": 27.7667, + "experience_temperature": 25.3267, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T20:20:06.561681+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.6, + "humidity": 81.7, + "water_total": 849.0, + "average_temperature": 27.4333, + "experience_temperature": 24.6305, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T20:30:06.377248+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.4, + "humidity": 82.3, + "water_total": 896.0, + "average_temperature": 27.3, + "experience_temperature": 25.26, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T20:40:06.604810+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.5, + "humidity": 82.8, + "water_total": 939.0, + "average_temperature": 27.2333, + "experience_temperature": 24.9719, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T20:50:06.444640+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.5, + "humidity": 82.9, + "water_total": 1001.0, + "average_temperature": 27.1667, + "experience_temperature": 24.9252, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T21:00:06.439364+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.7, + "humidity": 83.8, + "water_total": 1064.0, + "average_temperature": 27.0667, + "experience_temperature": 24.3624, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T21:10:08.024800+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.6, + "humidity": 84.8, + "water_total": 1128.0, + "average_temperature": 26.8667, + "experience_temperature": 24.6838, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T21:20:05.823223+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.6, + "humidity": 84.8, + "water_total": 1128.0, + "average_temperature": 26.8667, + "experience_temperature": 24.6838, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T21:30:06.346821+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.7, + "humidity": 86.2, + "water_total": 1185.0, + "average_temperature": 26.6, + "experience_temperature": 24.3757, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T21:40:06.410957+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.5, + "humidity": 86.1, + "water_total": 1308.0, + "average_temperature": 26.6333, + "experience_temperature": 25.0319, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T21:50:06.955703+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.8, + "humidity": 86.3, + "water_total": 1370.0, + "average_temperature": 26.6333, + "experience_temperature": 24.1076, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T22:00:06.433217+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.8, + "humidity": 86.3, + "water_total": 1370.0, + "average_temperature": 26.6333, + "experience_temperature": 24.1076, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T22:10:06.306467+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.5, + "humidity": 87.4, + "water_total": 1497.0, + "average_temperature": 26.4, + "experience_temperature": 25.0586, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T22:20:07.034456+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.6, + "humidity": 87.8, + "water_total": 1558.0, + "average_temperature": 26.2333, + "experience_temperature": 24.6505, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T22:30:07.360504+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.6, + "humidity": 88.2, + "water_total": 1618.0, + "average_temperature": 26.2, + "experience_temperature": 24.6971, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T22:40:07.043349+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.4, + "humidity": 88.2, + "water_total": 1678.0, + "average_temperature": 26.1667, + "experience_temperature": 25.3067, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T22:50:06.655620+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.4, + "humidity": 87.7, + "water_total": 1739.0, + "average_temperature": 26.4, + "experience_temperature": 25.44, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T23:00:07.758776+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.4, + "humidity": 88.6, + "water_total": 1801.0, + "average_temperature": 26.5667, + "experience_temperature": 25.7867, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T23:10:06.153709+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.6, + "humidity": 88.5, + "water_total": 1861.0, + "average_temperature": 26.5, + "experience_temperature": 25.0571, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T23:20:05.725226+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.6, + "humidity": 88.5, + "water_total": 1861.0, + "average_temperature": 26.5, + "experience_temperature": 25.0571, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T23:30:07.797665+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.7, + "humidity": 88.2, + "water_total": 1988.0, + "average_temperature": 26.5333, + "experience_temperature": 24.709, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T23:40:06.378999+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.4, + "humidity": 88.2, + "water_total": 2050.0, + "average_temperature": 26.6, + "experience_temperature": 25.74, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-29T23:50:07.418675+07:00", + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.4, + "humidity": 88.2, + "water_total": 2050.0, + "average_temperature": 26.6, + "experience_temperature": 25.74, + "chill_factor": 3.2143 + }, + { + "timestamp": "2026-06-30T00:10:07.082112+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.7, + "humidity": 88.6, + "water_total": 2236.0, + "average_temperature": 26.5, + "experience_temperature": 24.8771, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T00:20:08.812650+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 88.2, + "water_total": 2294.0, + "average_temperature": 26.5333, + "experience_temperature": 25.459, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T00:30:08.099293+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 88.0, + "water_total": 2357.0, + "average_temperature": 26.5667, + "experience_temperature": 25.4524, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T00:40:06.570688+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 88.5, + "water_total": 2418.0, + "average_temperature": 26.4333, + "experience_temperature": 25.1048, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T00:50:06.977064+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.4, + "humidity": 88.5, + "water_total": 2476.0, + "average_temperature": 26.2667, + "experience_temperature": 25.5667, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T01:00:05.826313+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 88.7, + "water_total": 2542.0, + "average_temperature": 26.1333, + "experience_temperature": 25.159, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T01:10:06.506954+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 88.7, + "water_total": 2600.0, + "average_temperature": 26.0, + "experience_temperature": 24.7114, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T01:20:06.023939+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 89.7, + "water_total": 2660.0, + "average_temperature": 25.7, + "experience_temperature": 24.6114, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T01:30:05.189932+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 90.3, + "water_total": 2724.0, + "average_temperature": 25.6333, + "experience_temperature": 24.979, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T01:40:05.367159+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.4, + "humidity": 90.2, + "water_total": 2783.0, + "average_temperature": 25.8, + "experience_temperature": 25.44, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T01:50:05.393573+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 90.4, + "water_total": 2841.0, + "average_temperature": 25.7, + "experience_temperature": 25.0657, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T02:00:06.009438+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 90.8, + "water_total": 2902.0, + "average_temperature": 25.7, + "experience_temperature": 25.1457, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T02:10:05.384258+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.3, + "humidity": 90.9, + "water_total": 2964.0, + "average_temperature": 25.6333, + "experience_temperature": 25.7276, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T02:20:05.749916+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 91.2, + "water_total": 3029.0, + "average_temperature": 25.5667, + "experience_temperature": 25.0924, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T02:30:05.538378+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 91.2, + "water_total": 3029.0, + "average_temperature": 25.5667, + "experience_temperature": 25.0924, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T02:40:04.985862+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 91.5, + "water_total": 3148.0, + "average_temperature": 25.4, + "experience_temperature": 24.6714, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T02:50:06.286726+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.2, + "humidity": 91.4, + "water_total": 3213.0, + "average_temperature": 25.3, + "experience_temperature": 25.8086, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T03:00:06.113519+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.2, + "humidity": 91.6, + "water_total": 3273.0, + "average_temperature": 25.2667, + "experience_temperature": 25.8152, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T03:10:05.730981+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.2, + "humidity": 91.7, + "water_total": 3335.0, + "average_temperature": 25.2333, + "experience_temperature": 25.8019, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T03:20:06.050442+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.1, + "humidity": 91.8, + "water_total": 3396.0, + "average_temperature": 25.2, + "experience_temperature": 26.1029, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T03:30:05.958675+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.2, + "humidity": 91.9, + "water_total": 3455.0, + "average_temperature": 25.2, + "experience_temperature": 25.8086, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T03:40:05.668380+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.2, + "humidity": 92.1, + "water_total": 3514.0, + "average_temperature": 25.2, + "experience_temperature": 25.8486, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T03:50:05.984332+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.2, + "humidity": 92.2, + "water_total": 3572.0, + "average_temperature": 25.1333, + "experience_temperature": 25.8019, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T04:00:05.784887+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.2, + "humidity": 92.2, + "water_total": 3572.0, + "average_temperature": 25.1333, + "experience_temperature": 25.8019, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T04:10:05.971942+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.2, + "humidity": 92.5, + "water_total": 3703.0, + "average_temperature": 25.0, + "experience_temperature": 25.7286, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T04:20:05.829615+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.1, + "humidity": 92.6, + "water_total": 3763.0, + "average_temperature": 24.9333, + "experience_temperature": 25.9962, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T04:30:06.184237+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.2, + "humidity": 92.6, + "water_total": 3823.0, + "average_temperature": 24.9, + "experience_temperature": 25.6486, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T04:40:05.778539+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.1, + "humidity": 92.8, + "water_total": 3885.0, + "average_temperature": 24.7333, + "experience_temperature": 25.8362, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T04:50:05.288796+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.2, + "humidity": 92.7, + "water_total": 3948.0, + "average_temperature": 24.7, + "experience_temperature": 25.4686, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T08:00:06.208871+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.2, + "humidity": 92.7, + "water_total": 3948.0, + "average_temperature": 24.7, + "experience_temperature": 25.4686, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T08:10:06.208136+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.4, + "humidity": 91.6, + "water_total": 5162.0, + "average_temperature": 25.7, + "experience_temperature": 25.62, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T08:20:09.224265+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 90.7, + "water_total": 5292.0, + "average_temperature": 25.9333, + "experience_temperature": 25.0448, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T08:30:05.888300+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 90.7, + "water_total": 5292.0, + "average_temperature": 25.9333, + "experience_temperature": 25.0448, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T08:40:06.219954+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.4, + "humidity": 89.6, + "water_total": 5600.0, + "average_temperature": 26.8333, + "experience_temperature": 26.3533, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T08:50:06.899172+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 88.5, + "water_total": 5733.0, + "average_temperature": 27.0667, + "experience_temperature": 25.7381, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T09:00:10.448277+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 86.7, + "water_total": 5946.0, + "average_temperature": 27.7333, + "experience_temperature": 26.0448, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T09:10:08.927345+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 83.6, + "water_total": 6136.0, + "average_temperature": 28.2333, + "experience_temperature": 25.9248, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T09:20:06.789636+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.9, + "humidity": 80.8, + "water_total": 6220.0, + "average_temperature": 28.7333, + "experience_temperature": 24.9219, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T09:30:06.532979+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.9, + "humidity": 77.8, + "water_total": 6248.0, + "average_temperature": 28.9333, + "experience_temperature": 24.5219, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T09:40:10.442383+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.9, + "humidity": 75.5, + "water_total": 6395.0, + "average_temperature": 29.1667, + "experience_temperature": 24.2952, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T09:50:07.005092+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.9, + "humidity": 71.7, + "water_total": 6605.0, + "average_temperature": 29.4, + "experience_temperature": 23.7686, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T10:00:07.041223+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.9, + "humidity": 71.7, + "water_total": 6605.0, + "average_temperature": 29.4, + "experience_temperature": 23.7686, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T10:10:06.727024+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.4, + "humidity": 69.1, + "water_total": 7009.0, + "average_temperature": 30.1333, + "experience_temperature": 22.4105, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T10:20:06.882527+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.1, + "humidity": 66.8, + "water_total": 7214.0, + "average_temperature": 30.2333, + "experience_temperature": 22.9933, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T10:30:09.303788+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.3, + "humidity": 68.3, + "water_total": 7245.0, + "average_temperature": 30.2667, + "experience_temperature": 22.6981, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T10:40:08.369593+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.4, + "humidity": 66.1, + "water_total": 7251.0, + "average_temperature": 30.8667, + "experience_temperature": 22.5438, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T10:50:06.503114+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.3, + "humidity": 67.3, + "water_total": 7322.0, + "average_temperature": 30.8333, + "experience_temperature": 23.0648, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T11:00:07.500340+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.4, + "humidity": 64.8, + "water_total": 7407.0, + "average_temperature": 30.9, + "experience_temperature": 22.3171, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T11:10:08.042307+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.2, + "humidity": 66.9, + "water_total": 7512.0, + "average_temperature": 30.5333, + "experience_temperature": 22.999, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T11:20:06.919541+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.2, + "humidity": 65.4, + "water_total": 7612.0, + "average_temperature": 30.5333, + "experience_temperature": 22.699, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T11:30:07.004964+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.2, + "humidity": 63.5, + "water_total": 7705.0, + "average_temperature": 30.9667, + "experience_temperature": 22.7524, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T11:40:07.931749+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.3, + "humidity": 64.7, + "water_total": 7799.0, + "average_temperature": 30.8667, + "experience_temperature": 22.5781, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T11:50:08.368108+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.2, + "humidity": 64.2, + "water_total": 7892.0, + "average_temperature": 30.8, + "experience_temperature": 22.7257, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T12:00:06.948417+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.3, + "humidity": 65.5, + "water_total": 7991.0, + "average_temperature": 31.2667, + "experience_temperature": 23.1381, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T12:10:08.950809+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.3, + "humidity": 66.8, + "water_total": 8063.0, + "average_temperature": 30.9333, + "experience_temperature": 23.0648, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T12:20:06.918764+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.1, + "humidity": 66.9, + "water_total": 8174.0, + "average_temperature": 30.7667, + "experience_temperature": 23.5467, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T12:30:07.258154+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.2, + "humidity": 64.8, + "water_total": 8269.0, + "average_temperature": 30.9333, + "experience_temperature": 22.979, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T12:40:06.820505+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.2, + "humidity": 64.4, + "water_total": 8362.0, + "average_temperature": 30.8667, + "experience_temperature": 22.8324, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T12:50:06.971809+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.2, + "humidity": 66.1, + "water_total": 8456.0, + "average_temperature": 30.8, + "experience_temperature": 23.1057, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T13:00:05.994454+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.4, + "humidity": 66.5, + "water_total": 8553.0, + "average_temperature": 30.5, + "experience_temperature": 22.2571, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T13:10:06.986286+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.3, + "humidity": 65.1, + "water_total": 8645.0, + "average_temperature": 31.2333, + "experience_temperature": 23.0248, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T13:20:06.003365+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.2, + "humidity": 66.2, + "water_total": 8730.0, + "average_temperature": 31.2, + "experience_temperature": 23.5257, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T13:30:07.247017+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.4, + "humidity": 66.7, + "water_total": 8829.0, + "average_temperature": 30.9333, + "experience_temperature": 22.7305, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T13:40:07.980149+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.5, + "humidity": 67.4, + "water_total": 8921.0, + "average_temperature": 30.7333, + "experience_temperature": 22.3562, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T13:50:06.313013+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.3, + "humidity": 69.0, + "water_total": 9023.0, + "average_temperature": 30.8, + "experience_temperature": 23.3714, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T14:10:06.057231+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.2, + "humidity": 65.8, + "water_total": 9105.0, + "average_temperature": 30.9333, + "experience_temperature": 23.179, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T14:20:07.255190+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.2, + "humidity": 66.5, + "water_total": 9114.0, + "average_temperature": 30.7333, + "experience_temperature": 23.119, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T14:30:08.338038+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.4, + "humidity": 62.7, + "water_total": 9119.0, + "average_temperature": 30.9333, + "experience_temperature": 21.9305, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T14:40:06.632131+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.2, + "humidity": 65.1, + "water_total": 9124.0, + "average_temperature": 30.9333, + "experience_temperature": 23.039, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T14:50:06.255614+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.4, + "humidity": 66.1, + "water_total": 9133.0, + "average_temperature": 30.5, + "experience_temperature": 22.1771, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T15:10:09.219415+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.3, + "humidity": 65.6, + "water_total": 9142.0, + "average_temperature": 31.2, + "experience_temperature": 23.0914, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T15:20:06.957400+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.2, + "humidity": 70.6, + "water_total": 9147.0, + "average_temperature": 30.4, + "experience_temperature": 23.6057, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T15:30:07.233475+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.3, + "humidity": 72.3, + "water_total": 9152.0, + "average_temperature": 30.1, + "experience_temperature": 23.3314, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T15:40:08.127505+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.4, + "humidity": 72.0, + "water_total": 9157.0, + "average_temperature": 30.4, + "experience_temperature": 23.2571, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T15:50:06.585799+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.4, + "humidity": 72.0, + "water_total": 9157.0, + "average_temperature": 30.4, + "experience_temperature": 23.2571, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T16:10:07.034245+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.1, + "humidity": 71.7, + "water_total": 9171.0, + "average_temperature": 30.2333, + "experience_temperature": 23.9733, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T16:20:06.686151+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.1, + "humidity": 72.2, + "water_total": 9176.0, + "average_temperature": 30.2, + "experience_temperature": 24.04, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T16:30:06.375910+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.2, + "humidity": 72.6, + "water_total": 9180.0, + "average_temperature": 30.1, + "experience_temperature": 23.7057, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T16:40:06.487634+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.3, + "humidity": 73.5, + "water_total": 9185.0, + "average_temperature": 29.8, + "experience_temperature": 23.2714, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T16:50:07.991161+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 2.2, + "humidity": 74.1, + "water_total": 9189.0, + "average_temperature": 29.5667, + "experience_temperature": 23.4724, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T17:10:09.433346+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.9, + "humidity": 73.5, + "water_total": 4.0, + "average_temperature": 29.2333, + "experience_temperature": 23.9619, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T17:20:06.899666+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.9, + "humidity": 73.0, + "water_total": 9.0, + "average_temperature": 29.0333, + "experience_temperature": 23.6619, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T17:30:08.327512+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.9, + "humidity": 73.0, + "water_total": 13.0, + "average_temperature": 28.7667, + "experience_temperature": 23.3952, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T17:40:06.676447+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.9, + "humidity": 73.0, + "water_total": 18.0, + "average_temperature": 28.6, + "experience_temperature": 23.2286, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T17:50:06.937687+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.9, + "humidity": 73.3, + "water_total": 23.0, + "average_temperature": 28.4333, + "experience_temperature": 23.1219, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T18:00:07.869814+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 74.7, + "water_total": 27.0, + "average_temperature": 28.1333, + "experience_temperature": 24.0448, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T18:10:06.943258+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.7, + "humidity": 76.1, + "water_total": 32.0, + "average_temperature": 27.9, + "experience_temperature": 23.7771, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T18:20:07.559063+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.7, + "humidity": 76.3, + "water_total": 36.0, + "average_temperature": 27.8667, + "experience_temperature": 23.7838, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T18:30:06.724519+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.7, + "humidity": 76.3, + "water_total": 41.0, + "average_temperature": 27.8333, + "experience_temperature": 23.7505, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T18:40:06.831646+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 77.0, + "water_total": 45.0, + "average_temperature": 27.7333, + "experience_temperature": 24.1048, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T18:50:06.747990+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 79.3, + "water_total": 45.0, + "average_temperature": 27.3667, + "experience_temperature": 24.1981, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T19:00:07.594212+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 78.9, + "water_total": 54.0, + "average_temperature": 27.2333, + "experience_temperature": 24.299, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T19:10:06.520805+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.4, + "humidity": 79.2, + "water_total": 54.0, + "average_temperature": 27.2333, + "experience_temperature": 24.6733, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T19:20:07.257748+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 79.4, + "water_total": 59.0, + "average_temperature": 27.1333, + "experience_temperature": 23.9848, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T19:30:06.508013+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 79.4, + "water_total": 59.0, + "average_temperature": 27.1333, + "experience_temperature": 23.9848, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T19:40:07.324061+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 82.7, + "water_total": 67.0, + "average_temperature": 26.7, + "experience_temperature": 24.5257, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T19:50:06.452835+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 82.3, + "water_total": 72.0, + "average_temperature": 26.7333, + "experience_temperature": 24.479, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T20:00:06.808713+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 82.3, + "water_total": 72.0, + "average_temperature": 26.7333, + "experience_temperature": 24.479, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T20:10:06.776406+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 79.3, + "water_total": 76.0, + "average_temperature": 27.2333, + "experience_temperature": 24.0648, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T20:20:06.620489+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 80.3, + "water_total": 81.0, + "average_temperature": 27.1333, + "experience_temperature": 24.479, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T20:30:07.553098+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 81.7, + "water_total": 85.0, + "average_temperature": 26.9333, + "experience_temperature": 24.559, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T20:40:06.839993+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 82.1, + "water_total": 90.0, + "average_temperature": 26.9333, + "experience_temperature": 24.3248, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T20:50:06.944317+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 82.0, + "water_total": 94.0, + "average_temperature": 26.9333, + "experience_temperature": 24.3048, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T21:00:06.779015+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.7, + "humidity": 82.1, + "water_total": 99.0, + "average_temperature": 27.0333, + "experience_temperature": 24.1105, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T21:10:06.863149+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 82.3, + "water_total": 99.0, + "average_temperature": 27.0333, + "experience_temperature": 24.779, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T21:20:06.914130+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.7, + "humidity": 82.4, + "water_total": 104.0, + "average_temperature": 26.9333, + "experience_temperature": 24.0705, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T21:30:07.516227+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 82.5, + "water_total": 108.0, + "average_temperature": 27.0, + "experience_temperature": 24.7857, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T21:40:06.606848+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 82.6, + "water_total": 113.0, + "average_temperature": 27.0333, + "experience_temperature": 24.839, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T21:50:06.737784+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 82.8, + "water_total": 117.0, + "average_temperature": 27.0333, + "experience_temperature": 24.5648, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T22:00:06.857269+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 84.2, + "water_total": 117.0, + "average_temperature": 26.6, + "experience_temperature": 24.4114, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T22:10:06.421868+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.4, + "humidity": 85.5, + "water_total": 121.0, + "average_temperature": 26.4667, + "experience_temperature": 25.1667, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T22:20:06.498258+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 86.0, + "water_total": 126.0, + "average_temperature": 26.2667, + "experience_temperature": 24.7524, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T22:30:08.583040+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.4, + "humidity": 85.4, + "water_total": 126.0, + "average_temperature": 26.2667, + "experience_temperature": 24.9467, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T22:40:06.926855+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.4, + "humidity": 84.2, + "water_total": 130.0, + "average_temperature": 26.3, + "experience_temperature": 24.74, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T22:50:07.407820+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 83.0, + "water_total": 135.0, + "average_temperature": 26.2667, + "experience_temperature": 24.1524, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T23:00:06.814102+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 81.6, + "water_total": 139.0, + "average_temperature": 26.2333, + "experience_temperature": 23.839, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T23:10:05.442772+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 81.8, + "water_total": 139.0, + "average_temperature": 26.2333, + "experience_temperature": 23.879, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T23:20:05.115782+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.7, + "humidity": 82.4, + "water_total": 143.0, + "average_temperature": 26.1333, + "experience_temperature": 23.2705, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T23:30:06.496732+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.5, + "humidity": 83.5, + "water_total": 148.0, + "average_temperature": 26.0, + "experience_temperature": 23.9857, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T23:40:06.086390+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 84.3, + "water_total": 148.0, + "average_temperature": 25.9, + "experience_temperature": 23.7314, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-06-30T23:50:05.306855+07:00", + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 84.3, + "water_total": 148.0, + "average_temperature": 25.9, + "experience_temperature": 23.7314, + "chill_factor": 3.1429 + }, + { + "timestamp": "2026-07-01T00:00:06.420455+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.8, + "humidity": 83.4, + "water_total": 156.0, + "average_temperature": 25.5333, + "experience_temperature": 22.6848, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T00:10:06.674401+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 83.4, + "water_total": 157.0, + "average_temperature": 25.4333, + "experience_temperature": 23.5062, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T00:20:06.023701+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 83.3, + "water_total": 162.0, + "average_temperature": 25.2333, + "experience_temperature": 24.2076, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T00:30:08.303779+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 84.6, + "water_total": 168.0, + "average_temperature": 25.1667, + "experience_temperature": 24.401, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T00:40:05.833151+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 84.6, + "water_total": 168.0, + "average_temperature": 25.1667, + "experience_temperature": 24.401, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T00:50:05.447216+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.1, + "humidity": 86.2, + "water_total": 172.0, + "average_temperature": 24.9, + "experience_temperature": 24.7614, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T01:00:06.010454+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.1, + "humidity": 86.2, + "water_total": 172.0, + "average_temperature": 24.9, + "experience_temperature": 24.7614, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T01:10:06.125659+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 87.0, + "water_total": 177.0, + "average_temperature": 24.5333, + "experience_temperature": 24.2476, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T01:20:05.489331+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.1, + "humidity": 86.7, + "water_total": 182.0, + "average_temperature": 24.3, + "experience_temperature": 24.2614, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T01:30:05.552795+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 86.3, + "water_total": 182.0, + "average_temperature": 24.1667, + "experience_temperature": 23.741, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T01:40:05.779142+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 86.1, + "water_total": 188.0, + "average_temperature": 24.0, + "experience_temperature": 23.5343, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T01:50:05.654112+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 86.1, + "water_total": 192.0, + "average_temperature": 23.9667, + "experience_temperature": 23.501, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T02:00:05.457745+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 86.1, + "water_total": 192.0, + "average_temperature": 23.9667, + "experience_temperature": 23.501, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T02:10:05.188073+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 86.1, + "water_total": 198.0, + "average_temperature": 23.6667, + "experience_temperature": 23.201, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T02:20:05.713650+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 86.3, + "water_total": 202.0, + "average_temperature": 23.6333, + "experience_temperature": 23.2076, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T02:30:06.179435+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 86.4, + "water_total": 202.0, + "average_temperature": 23.5, + "experience_temperature": 23.0943, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T02:40:06.069729+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 86.5, + "water_total": 207.0, + "average_temperature": 23.4333, + "experience_temperature": 23.0476, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T02:50:07.717782+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 86.7, + "water_total": 207.0, + "average_temperature": 23.2, + "experience_temperature": 22.8543, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T03:00:05.688231+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 86.7, + "water_total": 207.0, + "average_temperature": 23.2, + "experience_temperature": 22.8543, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T03:10:05.190630+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.1, + "humidity": 86.9, + "water_total": 213.0, + "average_temperature": 23.1, + "experience_temperature": 23.1014, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T03:20:06.197324+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 87.9, + "water_total": 219.0, + "average_temperature": 22.8333, + "experience_temperature": 22.7276, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T03:30:05.941056+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 88.1, + "water_total": 224.0, + "average_temperature": 22.9, + "experience_temperature": 22.8343, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T03:40:06.167994+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.0, + "humidity": 88.2, + "water_total": 233.0, + "average_temperature": 22.8, + "experience_temperature": 23.3686, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T03:50:05.457075+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 88.2, + "water_total": 233.0, + "average_temperature": 22.7, + "experience_temperature": 22.6543, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T04:00:05.397290+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 88.2, + "water_total": 233.0, + "average_temperature": 22.7, + "experience_temperature": 22.6543, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T04:10:06.077911+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.1, + "humidity": 88.4, + "water_total": 248.0, + "average_temperature": 22.5667, + "experience_temperature": 22.8681, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T04:20:05.760182+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.1, + "humidity": 88.6, + "water_total": 260.0, + "average_temperature": 22.4667, + "experience_temperature": 22.8081, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T04:30:06.473358+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 88.7, + "water_total": 269.0, + "average_temperature": 22.4, + "experience_temperature": 22.4543, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T04:40:05.950408+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.1, + "humidity": 88.9, + "water_total": 280.0, + "average_temperature": 22.3, + "experience_temperature": 22.7014, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T04:50:05.867597+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.3, + "humidity": 89.0, + "water_total": 294.0, + "average_temperature": 22.2333, + "experience_temperature": 22.0405, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T05:00:06.071333+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 89.1, + "water_total": 303.0, + "average_temperature": 22.1667, + "experience_temperature": 22.301, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T05:10:05.511267+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 89.0, + "water_total": 319.0, + "average_temperature": 22.1333, + "experience_temperature": 22.2476, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T05:20:05.737689+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 88.9, + "water_total": 329.0, + "average_temperature": 22.0667, + "experience_temperature": 22.161, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T05:30:06.334629+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 88.8, + "water_total": 339.0, + "average_temperature": 21.9333, + "experience_temperature": 22.0076, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T05:40:05.845377+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.1, + "humidity": 89.5, + "water_total": 348.0, + "average_temperature": 21.9333, + "experience_temperature": 22.4548, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T05:50:05.246596+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 89.7, + "water_total": 357.0, + "average_temperature": 21.9333, + "experience_temperature": 22.1876, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T06:00:06.477174+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 89.7, + "water_total": 357.0, + "average_temperature": 21.9333, + "experience_temperature": 22.1876, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T06:10:05.991166+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 90.1, + "water_total": 380.0, + "average_temperature": 21.6667, + "experience_temperature": 22.001, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T06:20:05.791868+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.1, + "humidity": 90.3, + "water_total": 390.0, + "average_temperature": 21.6667, + "experience_temperature": 22.3481, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T06:30:05.686610+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 90.6, + "water_total": 400.0, + "average_temperature": 21.7, + "experience_temperature": 22.1343, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T06:40:06.631917+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 90.7, + "water_total": 410.0, + "average_temperature": 21.8, + "experience_temperature": 22.2543, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T06:50:05.902868+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.1, + "humidity": 90.7, + "water_total": 426.0, + "average_temperature": 22.0667, + "experience_temperature": 22.8281, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T07:00:06.791966+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 90.5, + "water_total": 437.0, + "average_temperature": 22.3, + "experience_temperature": 22.7143, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T07:10:07.167600+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.1, + "humidity": 90.2, + "water_total": 446.0, + "average_temperature": 22.5333, + "experience_temperature": 23.1948, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T07:20:05.823700+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 89.4, + "water_total": 456.0, + "average_temperature": 22.8, + "experience_temperature": 22.9943, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T07:30:06.052347+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.1, + "humidity": 88.6, + "water_total": 470.0, + "average_temperature": 23.2667, + "experience_temperature": 23.6081, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T07:40:06.139415+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.1, + "humidity": 87.5, + "water_total": 482.0, + "average_temperature": 23.7, + "experience_temperature": 23.8214, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T07:50:06.264103+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 86.2, + "water_total": 491.0, + "average_temperature": 24.2667, + "experience_temperature": 23.821, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T08:00:05.953745+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 86.2, + "water_total": 491.0, + "average_temperature": 24.2667, + "experience_temperature": 23.821, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T08:10:07.896266+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.2, + "humidity": 84.4, + "water_total": 507.0, + "average_temperature": 24.8333, + "experience_temperature": 24.0276, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T08:20:06.350598+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.4, + "humidity": 81.0, + "water_total": 528.0, + "average_temperature": 26.0, + "experience_temperature": 23.9, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T08:30:06.044323+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 78.9, + "water_total": 543.0, + "average_temperature": 26.5, + "experience_temperature": 23.6729, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T08:40:06.284067+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.6, + "humidity": 77.4, + "water_total": 554.0, + "average_temperature": 27.1333, + "experience_temperature": 23.699, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T08:50:06.905170+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 76.3, + "water_total": 569.0, + "average_temperature": 27.6, + "experience_temperature": 24.2529, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T09:00:08.283063+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 74.4, + "water_total": 608.0, + "average_temperature": 28.2, + "experience_temperature": 24.4729, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T09:10:06.204584+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.8, + "humidity": 72.9, + "water_total": 660.0, + "average_temperature": 28.6333, + "experience_temperature": 23.6848, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T09:20:06.542389+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.9, + "humidity": 70.3, + "water_total": 775.0, + "average_temperature": 28.7667, + "experience_temperature": 22.991, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T09:30:06.144811+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.9, + "humidity": 71.1, + "water_total": 999.0, + "average_temperature": 29.2333, + "experience_temperature": 23.6176, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T09:40:06.462782+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.3, + "humidity": 68.3, + "water_total": 1188.0, + "average_temperature": 29.6, + "experience_temperature": 22.1957, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T09:50:06.644411+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.4, + "humidity": 66.8, + "water_total": 1380.0, + "average_temperature": 29.8333, + "experience_temperature": 21.8219, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T10:00:09.072692+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.3, + "humidity": 63.2, + "water_total": 1537.0, + "average_temperature": 29.8, + "experience_temperature": 21.3757, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T10:10:06.698948+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.2, + "humidity": 61.4, + "water_total": 1623.0, + "average_temperature": 30.1667, + "experience_temperature": 21.6895, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T10:20:06.750805+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.3, + "humidity": 65.1, + "water_total": 1696.0, + "average_temperature": 30.4333, + "experience_temperature": 22.389, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T10:30:10.795912+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.2, + "humidity": 64.2, + "water_total": 1726.0, + "average_temperature": 30.4333, + "experience_temperature": 22.5162, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T10:40:08.918046+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.3, + "humidity": 63.5, + "water_total": 1731.0, + "average_temperature": 30.2333, + "experience_temperature": 21.869, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T10:50:06.500101+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.3, + "humidity": 64.0, + "water_total": 1740.0, + "average_temperature": 30.9333, + "experience_temperature": 22.669, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T11:00:09.098741+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.4, + "humidity": 63.1, + "water_total": 1745.0, + "average_temperature": 30.5667, + "experience_temperature": 21.8152, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T11:10:05.884733+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.2, + "humidity": 63.1, + "water_total": 1750.0, + "average_temperature": 30.7333, + "experience_temperature": 22.5962, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T11:20:06.713810+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.3, + "humidity": 62.4, + "water_total": 1754.0, + "average_temperature": 30.4, + "experience_temperature": 21.8157, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T11:30:09.701598+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.3, + "humidity": 62.4, + "water_total": 1754.0, + "average_temperature": 30.4, + "experience_temperature": 21.8157, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T11:40:06.973045+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.2, + "humidity": 63.9, + "water_total": 1764.0, + "average_temperature": 30.3333, + "experience_temperature": 22.3562, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T11:50:06.691150+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.2, + "humidity": 60.4, + "water_total": 1773.0, + "average_temperature": 30.7333, + "experience_temperature": 22.0562, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T12:00:05.888671+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.1, + "humidity": 61.7, + "water_total": 1777.0, + "average_temperature": 30.5, + "experience_temperature": 22.39, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T12:10:07.381084+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.4, + "humidity": 60.2, + "water_total": 1782.0, + "average_temperature": 30.6667, + "experience_temperature": 21.3352, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T12:20:05.891408+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.2, + "humidity": 61.8, + "water_total": 1787.0, + "average_temperature": 30.6333, + "experience_temperature": 22.2362, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T12:30:06.869342+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.1, + "humidity": 60.6, + "water_total": 1792.0, + "average_temperature": 31.1333, + "experience_temperature": 22.8033, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T12:40:06.747901+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.4, + "humidity": 62.7, + "water_total": 1796.0, + "average_temperature": 30.8333, + "experience_temperature": 22.0019, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T12:50:06.289275+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.3, + "humidity": 62.8, + "water_total": 1801.0, + "average_temperature": 30.6333, + "experience_temperature": 22.129, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T13:00:06.240749+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.3, + "humidity": 62.1, + "water_total": 1806.0, + "average_temperature": 30.7333, + "experience_temperature": 22.089, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T13:10:07.498298+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.3, + "humidity": 61.4, + "water_total": 1814.0, + "average_temperature": 30.9667, + "experience_temperature": 22.1824, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T13:20:06.573351+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.2, + "humidity": 61.6, + "water_total": 1815.0, + "average_temperature": 30.7333, + "experience_temperature": 22.2962, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T13:30:07.005164+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.3, + "humidity": 60.8, + "water_total": 1825.0, + "average_temperature": 30.5667, + "experience_temperature": 21.6624, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T13:40:05.969197+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.2, + "humidity": 61.0, + "water_total": 1825.0, + "average_temperature": 31.0, + "experience_temperature": 22.4429, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T13:50:05.739260+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.4, + "humidity": 59.9, + "water_total": 1830.0, + "average_temperature": 31.1, + "experience_temperature": 21.7086, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T14:10:06.129936+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.4, + "humidity": 65.0, + "water_total": 1840.0, + "average_temperature": 30.5667, + "experience_temperature": 22.1952, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T14:20:08.244911+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.4, + "humidity": 65.0, + "water_total": 1840.0, + "average_temperature": 30.5667, + "experience_temperature": 22.1952, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T14:30:10.561415+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.2, + "humidity": 61.1, + "water_total": 1849.0, + "average_temperature": 30.7333, + "experience_temperature": 22.1962, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T14:40:09.113830+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.2, + "humidity": 63.3, + "water_total": 1854.0, + "average_temperature": 31.1667, + "experience_temperature": 23.0695, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T14:50:06.161703+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.2, + "humidity": 63.3, + "water_total": 1854.0, + "average_temperature": 31.1667, + "experience_temperature": 23.0695, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T15:10:05.729521+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.3, + "humidity": 63.4, + "water_total": 1868.0, + "average_temperature": 30.7667, + "experience_temperature": 22.3824, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T15:20:05.707436+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.3, + "humidity": 63.2, + "water_total": 1873.0, + "average_temperature": 30.8667, + "experience_temperature": 22.4424, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T15:30:08.596039+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.1, + "humidity": 63.5, + "water_total": 1878.0, + "average_temperature": 30.3667, + "experience_temperature": 22.6167, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T15:40:06.498568+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.4, + "humidity": 63.0, + "water_total": 1878.0, + "average_temperature": 30.4333, + "experience_temperature": 21.6619, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T15:50:05.539804+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.4, + "humidity": 64.7, + "water_total": 1883.0, + "average_temperature": 30.7333, + "experience_temperature": 22.3019, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T16:10:06.150848+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.4, + "humidity": 64.7, + "water_total": 1883.0, + "average_temperature": 30.7333, + "experience_temperature": 22.3019, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T16:20:07.067529+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.3, + "humidity": 63.5, + "water_total": 1892.0, + "average_temperature": 30.6, + "experience_temperature": 22.2357, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T16:30:05.635104+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.3, + "humidity": 63.7, + "water_total": 1897.0, + "average_temperature": 30.4, + "experience_temperature": 22.0757, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T16:40:05.806931+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.1, + "humidity": 62.9, + "water_total": 1902.0, + "average_temperature": 30.3667, + "experience_temperature": 22.4967, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T16:50:05.931098+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.4, + "humidity": 62.8, + "water_total": 1906.0, + "average_temperature": 30.4, + "experience_temperature": 21.5886, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T17:10:06.252649+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.2, + "humidity": 70.2, + "water_total": 0.0, + "average_temperature": 29.3333, + "experience_temperature": 22.6162, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T17:20:06.332494+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.1, + "humidity": 71.3, + "water_total": 4.0, + "average_temperature": 29.2333, + "experience_temperature": 23.0433, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T17:30:06.042522+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.8, + "humidity": 72.4, + "water_total": 9.0, + "average_temperature": 29.0, + "experience_temperature": 23.9514, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T17:40:06.048332+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.0, + "humidity": 72.8, + "water_total": 14.0, + "average_temperature": 28.8333, + "experience_temperature": 23.2505, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T17:50:05.140421+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.9, + "humidity": 73.6, + "water_total": 14.0, + "average_temperature": 28.6, + "experience_temperature": 23.4843, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T18:00:06.316358+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 2.1, + "humidity": 74.4, + "water_total": 19.0, + "average_temperature": 28.3333, + "experience_temperature": 22.7633, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T18:10:06.307438+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 75.2, + "water_total": 24.0, + "average_temperature": 28.1333, + "experience_temperature": 24.5662, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T18:20:06.705704+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.6, + "humidity": 75.7, + "water_total": 29.0, + "average_temperature": 28.0, + "experience_temperature": 24.2257, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T18:30:07.376070+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 76.4, + "water_total": 29.0, + "average_temperature": 27.8333, + "experience_temperature": 24.5062, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T18:40:06.158309+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 76.4, + "water_total": 29.0, + "average_temperature": 27.8333, + "experience_temperature": 24.5062, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T18:50:06.749322+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.7, + "humidity": 77.8, + "water_total": 39.0, + "average_temperature": 27.5667, + "experience_temperature": 23.9052, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T19:00:07.067338+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.7, + "humidity": 78.0, + "water_total": 39.0, + "average_temperature": 27.5667, + "experience_temperature": 23.9452, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T19:10:08.348855+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.6, + "humidity": 78.8, + "water_total": 43.0, + "average_temperature": 27.3667, + "experience_temperature": 24.2124, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T19:20:11.780718+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 79.4, + "water_total": 48.0, + "average_temperature": 27.2, + "experience_temperature": 24.4729, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T19:30:07.187233+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 79.4, + "water_total": 48.0, + "average_temperature": 27.2, + "experience_temperature": 24.4729, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T19:40:07.585523+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.7, + "humidity": 79.4, + "water_total": 53.0, + "average_temperature": 27.2333, + "experience_temperature": 23.8919, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T19:50:06.009343+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.6, + "humidity": 79.5, + "water_total": 58.0, + "average_temperature": 27.3333, + "experience_temperature": 24.319, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T20:00:05.888324+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.6, + "humidity": 79.5, + "water_total": 58.0, + "average_temperature": 27.3333, + "experience_temperature": 24.319, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T20:10:06.477502+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 74.4, + "water_total": 58.0, + "average_temperature": 28.2, + "experience_temperature": 24.4729, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T20:20:06.582581+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 74.4, + "water_total": 64.0, + "average_temperature": 28.2, + "experience_temperature": 24.4729, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T20:30:06.795934+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.6, + "humidity": 80.8, + "water_total": 69.0, + "average_temperature": 27.0333, + "experience_temperature": 24.279, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T20:40:06.233017+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.4, + "humidity": 82.1, + "water_total": 70.0, + "average_temperature": 26.7, + "experience_temperature": 24.82, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T20:50:07.174410+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.6, + "humidity": 82.9, + "water_total": 75.0, + "average_temperature": 26.9333, + "experience_temperature": 24.599, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T21:00:06.932045+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.4, + "humidity": 83.2, + "water_total": 75.0, + "average_temperature": 26.7667, + "experience_temperature": 25.1067, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T21:10:06.940006+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.6, + "humidity": 84.0, + "water_total": 80.0, + "average_temperature": 26.6333, + "experience_temperature": 24.519, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T21:20:08.163159+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 83.9, + "water_total": 84.0, + "average_temperature": 26.5, + "experience_temperature": 24.6729, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T21:30:06.838199+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 84.5, + "water_total": 84.0, + "average_temperature": 26.4333, + "experience_temperature": 24.7262, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T21:40:06.317387+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.7, + "humidity": 84.8, + "water_total": 88.0, + "average_temperature": 26.2333, + "experience_temperature": 23.9719, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T21:50:06.633155+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 84.3, + "water_total": 88.0, + "average_temperature": 26.2333, + "experience_temperature": 24.4862, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T22:00:07.927980+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 85.0, + "water_total": 93.0, + "average_temperature": 26.1333, + "experience_temperature": 24.5262, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T22:10:06.660041+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 85.1, + "water_total": 95.0, + "average_temperature": 25.9333, + "experience_temperature": 24.3462, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T22:20:06.310625+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 85.1, + "water_total": 95.0, + "average_temperature": 25.9333, + "experience_temperature": 24.3462, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T22:30:07.112651+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.6, + "humidity": 86.9, + "water_total": 99.0, + "average_temperature": 25.6333, + "experience_temperature": 24.099, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T22:40:07.745133+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.6, + "humidity": 87.3, + "water_total": 100.0, + "average_temperature": 25.5, + "experience_temperature": 24.0457, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T22:50:07.986930+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 88.0, + "water_total": 104.0, + "average_temperature": 25.5333, + "experience_temperature": 24.5262, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T23:00:06.881037+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.6, + "humidity": 87.9, + "water_total": 105.0, + "average_temperature": 25.6333, + "experience_temperature": 24.299, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T23:10:06.068176+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.4, + "humidity": 87.8, + "water_total": 110.0, + "average_temperature": 25.6333, + "experience_temperature": 24.8933, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T23:20:06.738630+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.4, + "humidity": 87.3, + "water_total": 111.0, + "average_temperature": 25.6667, + "experience_temperature": 24.8267, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T23:30:06.247655+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.4, + "humidity": 87.3, + "water_total": 111.0, + "average_temperature": 25.6667, + "experience_temperature": 24.8267, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T23:40:06.958262+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 86.6, + "water_total": 117.0, + "average_temperature": 25.6, + "experience_temperature": 24.3129, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-01T23:50:08.103427+07:00", + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 86.8, + "water_total": 123.0, + "average_temperature": 25.5, + "experience_temperature": 24.2529, + "chill_factor": 3.0714 + }, + { + "timestamp": "2026-07-02T00:00:06.833517+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.5, + "humidity": 86.8, + "water_total": 123.0, + "average_temperature": 25.5, + "experience_temperature": 24.36, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T00:10:06.932837+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.5, + "humidity": 87.5, + "water_total": 126.0, + "average_temperature": 25.2333, + "experience_temperature": 24.2333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T00:20:07.032744+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.6, + "humidity": 87.7, + "water_total": 132.0, + "average_temperature": 25.1333, + "experience_temperature": 23.8733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T00:30:06.990510+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.6, + "humidity": 87.7, + "water_total": 132.0, + "average_temperature": 25.1333, + "experience_temperature": 23.8733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T00:40:06.190116+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 87.4, + "water_total": 132.0, + "average_temperature": 25.0667, + "experience_temperature": 24.9467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T00:50:06.515903+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 87.1, + "water_total": 138.0, + "average_temperature": 25.0333, + "experience_temperature": 24.8533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T01:00:07.085152+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.1, + "humidity": 86.9, + "water_total": 144.0, + "average_temperature": 25.0667, + "experience_temperature": 25.1467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T01:10:06.724075+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.6, + "humidity": 83.9, + "water_total": 144.0, + "average_temperature": 26.5333, + "experience_temperature": 24.5133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T01:20:06.198085+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 87.4, + "water_total": 158.0, + "average_temperature": 24.9333, + "experience_temperature": 24.8133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T01:30:06.097951+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 88.0, + "water_total": 163.0, + "average_temperature": 24.9, + "experience_temperature": 24.9, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T01:40:06.469890+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 88.6, + "water_total": 169.0, + "average_temperature": 24.8, + "experience_temperature": 24.92, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T01:50:06.796369+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.1, + "humidity": 89.0, + "water_total": 169.0, + "average_temperature": 24.7333, + "experience_temperature": 25.2333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T02:00:06.914956+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 89.2, + "water_total": 174.0, + "average_temperature": 24.6667, + "experience_temperature": 24.9067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T02:10:07.535406+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 89.5, + "water_total": 177.0, + "average_temperature": 24.6, + "experience_temperature": 24.9, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T02:20:06.464159+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.1, + "humidity": 89.8, + "water_total": 181.0, + "average_temperature": 24.5, + "experience_temperature": 25.16, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T02:30:07.348436+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 90.0, + "water_total": 181.0, + "average_temperature": 24.4, + "experience_temperature": 24.8, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T02:40:06.923488+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.0, + "humidity": 90.1, + "water_total": 188.0, + "average_temperature": 24.3333, + "experience_temperature": 25.3533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T02:50:06.088616+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 90.4, + "water_total": 195.0, + "average_temperature": 24.3, + "experience_temperature": 24.78, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T03:00:06.405017+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 90.6, + "water_total": 201.0, + "average_temperature": 24.2, + "experience_temperature": 24.72, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T03:10:06.917185+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 90.8, + "water_total": 201.0, + "average_temperature": 24.1667, + "experience_temperature": 24.7267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T03:20:06.010726+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.1, + "humidity": 90.8, + "water_total": 206.0, + "average_temperature": 24.1667, + "experience_temperature": 25.0267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T03:30:06.493463+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 90.7, + "water_total": 213.0, + "average_temperature": 24.0667, + "experience_temperature": 24.6067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T03:40:06.323063+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.1, + "humidity": 90.3, + "water_total": 216.0, + "average_temperature": 23.9667, + "experience_temperature": 24.7267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T03:50:06.502213+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 90.0, + "water_total": 224.0, + "average_temperature": 23.8333, + "experience_temperature": 24.2333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T04:00:06.764988+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 89.6, + "water_total": 229.0, + "average_temperature": 23.7667, + "experience_temperature": 24.0867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T04:10:06.515217+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 88.8, + "water_total": 229.0, + "average_temperature": 23.6333, + "experience_temperature": 23.7933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T04:20:07.537922+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 87.8, + "water_total": 236.0, + "average_temperature": 23.5333, + "experience_temperature": 23.4933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T04:30:06.451279+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 86.8, + "water_total": 243.0, + "average_temperature": 23.4333, + "experience_temperature": 23.1933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T04:40:07.679712+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.1, + "humidity": 85.8, + "water_total": 243.0, + "average_temperature": 23.4333, + "experience_temperature": 23.2933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T04:50:06.415459+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 85.3, + "water_total": 248.0, + "average_temperature": 23.4333, + "experience_temperature": 22.8933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T05:00:09.005591+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.1, + "humidity": 85.3, + "water_total": 254.0, + "average_temperature": 23.4333, + "experience_temperature": 23.1933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T05:10:06.153957+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 85.7, + "water_total": 260.0, + "average_temperature": 23.4333, + "experience_temperature": 22.9733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T05:20:06.747475+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 86.2, + "water_total": 264.0, + "average_temperature": 23.2667, + "experience_temperature": 22.9067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T05:30:06.219888+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 86.7, + "water_total": 272.0, + "average_temperature": 23.2, + "experience_temperature": 22.94, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T05:40:07.901497+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 87.0, + "water_total": 277.0, + "average_temperature": 23.1333, + "experience_temperature": 22.9333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T05:50:06.306226+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 87.3, + "water_total": 286.0, + "average_temperature": 23.1333, + "experience_temperature": 22.9933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T06:00:06.503956+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 87.3, + "water_total": 286.0, + "average_temperature": 23.1333, + "experience_temperature": 22.9933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T06:10:06.166091+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.1, + "humidity": 87.6, + "water_total": 294.0, + "average_temperature": 23.0333, + "experience_temperature": 23.2533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T06:20:06.959401+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.1, + "humidity": 87.8, + "water_total": 298.0, + "average_temperature": 22.9333, + "experience_temperature": 23.1933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T06:30:07.098789+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 88.1, + "water_total": 301.0, + "average_temperature": 22.9333, + "experience_temperature": 22.9533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T06:40:06.005998+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.1, + "humidity": 88.4, + "water_total": 306.0, + "average_temperature": 22.8667, + "experience_temperature": 23.2467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T06:50:08.645937+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.1, + "humidity": 88.3, + "water_total": 312.0, + "average_temperature": 22.9333, + "experience_temperature": 23.2933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T07:00:07.404320+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 87.7, + "water_total": 318.0, + "average_temperature": 23.1, + "experience_temperature": 23.04, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T07:10:07.501513+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 86.6, + "water_total": 324.0, + "average_temperature": 23.4333, + "experience_temperature": 23.1533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T07:20:06.860107+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 86.6, + "water_total": 324.0, + "average_temperature": 23.4333, + "experience_temperature": 23.1533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T07:30:07.652876+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 84.5, + "water_total": 332.0, + "average_temperature": 24.1, + "experience_temperature": 23.4, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T07:40:06.298210+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.1, + "humidity": 83.5, + "water_total": 333.0, + "average_temperature": 24.6333, + "experience_temperature": 24.0333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T07:50:07.638867+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 80.9, + "water_total": 339.0, + "average_temperature": 24.9667, + "experience_temperature": 23.5467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T08:00:08.344361+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.2, + "humidity": 80.9, + "water_total": 339.0, + "average_temperature": 24.9667, + "experience_temperature": 23.5467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T08:10:07.840397+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.4, + "humidity": 79.8, + "water_total": 347.0, + "average_temperature": 25.5667, + "experience_temperature": 23.3267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T08:20:09.742498+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.4, + "humidity": 76.7, + "water_total": 360.0, + "average_temperature": 26.4333, + "experience_temperature": 23.5733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T08:30:06.479463+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.5, + "humidity": 75.8, + "water_total": 364.0, + "average_temperature": 26.7667, + "experience_temperature": 23.4267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T08:40:06.730918+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.6, + "humidity": 74.9, + "water_total": 370.0, + "average_temperature": 27.2333, + "experience_temperature": 23.4133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T08:50:07.408243+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.4, + "humidity": 73.2, + "water_total": 376.0, + "average_temperature": 27.8, + "experience_temperature": 24.24, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T09:00:07.879370+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.9, + "humidity": 70.5, + "water_total": 382.0, + "average_temperature": 28.1667, + "experience_temperature": 22.5667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T09:10:07.366949+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.9, + "humidity": 69.1, + "water_total": 390.0, + "average_temperature": 28.6333, + "experience_temperature": 22.7533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T09:20:07.353007+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.9, + "humidity": 66.3, + "water_total": 397.0, + "average_temperature": 28.8, + "experience_temperature": 22.36, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T09:30:08.389300+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.9, + "humidity": 65.7, + "water_total": 402.0, + "average_temperature": 29.1, + "experience_temperature": 22.54, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T09:40:06.713014+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.3, + "humidity": 66.0, + "water_total": 411.0, + "average_temperature": 29.4333, + "experience_temperature": 21.7333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T09:50:06.759090+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.3, + "humidity": 65.8, + "water_total": 419.0, + "average_temperature": 29.8667, + "experience_temperature": 22.1267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T10:00:10.494343+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.2, + "humidity": 64.4, + "water_total": 427.0, + "average_temperature": 29.7333, + "experience_temperature": 22.0133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T10:10:07.275861+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.3, + "humidity": 63.0, + "water_total": 434.0, + "average_temperature": 29.9667, + "experience_temperature": 21.6667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T10:20:13.839307+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.2, + "humidity": 62.9, + "water_total": 442.0, + "average_temperature": 30.3, + "experience_temperature": 22.28, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T10:30:06.927439+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.2, + "humidity": 60.5, + "water_total": 449.0, + "average_temperature": 30.2333, + "experience_temperature": 21.7333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T10:40:08.179413+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.3, + "humidity": 59.2, + "water_total": 454.0, + "average_temperature": 30.2667, + "experience_temperature": 21.2067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T10:50:08.786347+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.2, + "humidity": 61.1, + "water_total": 457.0, + "average_temperature": 30.7667, + "experience_temperature": 22.3867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T11:00:09.463637+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.4, + "humidity": 60.5, + "water_total": 464.0, + "average_temperature": 30.5333, + "experience_temperature": 21.4333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T11:10:07.023675+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.3, + "humidity": 61.9, + "water_total": 469.0, + "average_temperature": 30.6, + "experience_temperature": 22.08, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T11:20:07.766557+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.3, + "humidity": 61.9, + "water_total": 469.0, + "average_temperature": 30.6, + "experience_temperature": 22.08, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T11:30:20.247934+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.9, + "humidity": 70.5, + "water_total": 474.0, + "average_temperature": 28.1667, + "experience_temperature": 22.5667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T11:40:07.689474+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.3, + "humidity": 62.9, + "water_total": 485.0, + "average_temperature": 30.6, + "experience_temperature": 22.28, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T11:50:07.356844+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.4, + "humidity": 62.1, + "water_total": 489.0, + "average_temperature": 30.9333, + "experience_temperature": 22.1533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T12:00:07.724853+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.4, + "humidity": 62.1, + "water_total": 492.0, + "average_temperature": 30.5, + "experience_temperature": 21.72, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T12:10:06.982993+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.5, + "humidity": 61.8, + "water_total": 498.0, + "average_temperature": 30.4, + "experience_temperature": 21.26, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T12:20:09.335921+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.4, + "humidity": 59.3, + "water_total": 504.0, + "average_temperature": 30.9333, + "experience_temperature": 21.5933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T12:30:07.691673+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.5, + "humidity": 61.1, + "water_total": 509.0, + "average_temperature": 30.4, + "experience_temperature": 21.12, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T12:40:12.018231+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.2, + "humidity": 62.5, + "water_total": 510.0, + "average_temperature": 30.2667, + "experience_temperature": 22.1667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T12:50:08.213424+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.3, + "humidity": 60.3, + "water_total": 510.0, + "average_temperature": 30.9667, + "experience_temperature": 22.1267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T13:00:06.864211+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.2, + "humidity": 61.7, + "water_total": 523.0, + "average_temperature": 30.1667, + "experience_temperature": 21.9067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T13:10:07.608333+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.3, + "humidity": 65.0, + "water_total": 529.0, + "average_temperature": 30.3, + "experience_temperature": 22.4, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T13:20:11.222703+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.3, + "humidity": 61.8, + "water_total": 530.0, + "average_temperature": 31.0, + "experience_temperature": 22.46, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T13:30:07.578459+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.5, + "humidity": 61.3, + "water_total": 530.0, + "average_temperature": 31.2333, + "experience_temperature": 21.9933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T13:40:07.209956+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.3, + "humidity": 61.9, + "water_total": 535.0, + "average_temperature": 30.3333, + "experience_temperature": 21.8133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T13:50:07.489463+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.4, + "humidity": 61.1, + "water_total": 548.0, + "average_temperature": 31.3, + "experience_temperature": 22.32, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T14:10:12.473842+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.3, + "humidity": 60.6, + "water_total": 555.0, + "average_temperature": 30.6, + "experience_temperature": 21.82, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T14:20:06.142021+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.3, + "humidity": 60.6, + "water_total": 555.0, + "average_temperature": 30.6, + "experience_temperature": 21.82, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T14:30:06.275772+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.4, + "humidity": 59.4, + "water_total": 564.0, + "average_temperature": 30.2, + "experience_temperature": 20.88, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T14:40:08.334606+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.4, + "humidity": 56.1, + "water_total": 584.0, + "average_temperature": 30.7333, + "experience_temperature": 20.7533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T14:50:13.826580+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.1, + "humidity": 55.2, + "water_total": 642.0, + "average_temperature": 30.2, + "experience_temperature": 20.94, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T15:10:31.496258+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.1, + "humidity": 56.9, + "water_total": 775.0, + "average_temperature": 30.8667, + "experience_temperature": 21.9467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T15:20:10.781576+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.1, + "humidity": 56.9, + "water_total": 775.0, + "average_temperature": 30.8667, + "experience_temperature": 21.9467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T15:30:08.062737+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.4, + "humidity": 68.1, + "water_total": 900.0, + "average_temperature": 30.5, + "experience_temperature": 22.92, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T15:40:07.551097+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.2, + "humidity": 69.3, + "water_total": 970.0, + "average_temperature": 30.3, + "experience_temperature": 23.56, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T15:50:11.134893+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.4, + "humidity": 69.8, + "water_total": 1001.0, + "average_temperature": 30.4333, + "experience_temperature": 23.1933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T16:10:07.570773+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.4, + "humidity": 69.5, + "water_total": 1016.0, + "average_temperature": 30.2333, + "experience_temperature": 22.9333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T16:20:07.218606+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.4, + "humidity": 70.0, + "water_total": 1022.0, + "average_temperature": 30.1, + "experience_temperature": 22.9, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T16:30:07.940913+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.3, + "humidity": 69.8, + "water_total": 1028.0, + "average_temperature": 29.9333, + "experience_temperature": 22.9933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T16:40:08.854308+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.4, + "humidity": 69.8, + "water_total": 1034.0, + "average_temperature": 29.7333, + "experience_temperature": 22.4933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T16:50:06.777361+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.5, + "humidity": 69.9, + "water_total": 1038.0, + "average_temperature": 29.6667, + "experience_temperature": 22.1467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T17:10:06.881481+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.3, + "humidity": 71.1, + "water_total": 5.0, + "average_temperature": 29.4333, + "experience_temperature": 22.7533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T17:20:06.908703+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.8, + "humidity": 72.1, + "water_total": 5.0, + "average_temperature": 29.1333, + "experience_temperature": 24.1533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T17:30:07.537599+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.9, + "humidity": 73.1, + "water_total": 10.0, + "average_temperature": 28.9, + "experience_temperature": 23.82, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T17:40:06.436214+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.9, + "humidity": 74.1, + "water_total": 16.0, + "average_temperature": 28.6333, + "experience_temperature": 23.7533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T17:50:09.051637+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.0, + "humidity": 74.6, + "water_total": 23.0, + "average_temperature": 28.3667, + "experience_temperature": 23.2867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T18:00:06.368699+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 2.0, + "humidity": 75.2, + "water_total": 29.0, + "average_temperature": 28.1, + "experience_temperature": 23.14, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T18:10:06.879798+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.7, + "humidity": 76.5, + "water_total": 33.0, + "average_temperature": 27.8667, + "experience_temperature": 24.0667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T18:20:06.516888+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.6, + "humidity": 77.9, + "water_total": 35.0, + "average_temperature": 27.5667, + "experience_temperature": 24.3467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T18:30:06.426030+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.5, + "humidity": 78.7, + "water_total": 42.0, + "average_temperature": 27.4, + "experience_temperature": 24.64, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T18:40:06.300686+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.6, + "humidity": 80.3, + "water_total": 48.0, + "average_temperature": 27.0, + "experience_temperature": 24.26, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T18:50:07.544705+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.5, + "humidity": 80.9, + "water_total": 58.0, + "average_temperature": 26.9667, + "experience_temperature": 24.6467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T19:00:06.825586+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.5, + "humidity": 82.5, + "water_total": 60.0, + "average_temperature": 26.6333, + "experience_temperature": 24.6333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T19:10:07.617939+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.6, + "humidity": 83.3, + "water_total": 66.0, + "average_temperature": 26.4667, + "experience_temperature": 24.3267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T19:20:06.911790+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.5, + "humidity": 83.9, + "water_total": 70.0, + "average_temperature": 26.3333, + "experience_temperature": 24.6133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T19:30:06.719420+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.5, + "humidity": 83.9, + "water_total": 70.0, + "average_temperature": 26.3333, + "experience_temperature": 24.6133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T19:40:06.790028+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.6, + "humidity": 84.5, + "water_total": 80.0, + "average_temperature": 26.4, + "experience_temperature": 24.5, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T19:50:06.740800+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.4, + "humidity": 84.8, + "water_total": 87.0, + "average_temperature": 26.4333, + "experience_temperature": 25.1933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T20:00:06.741957+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.3, + "humidity": 85.1, + "water_total": 90.0, + "average_temperature": 26.2667, + "experience_temperature": 25.3867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T20:10:06.651953+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.5, + "humidity": 86.5, + "water_total": 95.0, + "average_temperature": 25.9667, + "experience_temperature": 24.7667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T20:20:06.265728+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.6, + "humidity": 86.7, + "water_total": 99.0, + "average_temperature": 26.1333, + "experience_temperature": 24.6733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T20:30:10.571309+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.5, + "humidity": 85.8, + "water_total": 104.0, + "average_temperature": 26.2333, + "experience_temperature": 24.8933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T20:40:07.534864+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.5, + "humidity": 86.1, + "water_total": 109.0, + "average_temperature": 26.3, + "experience_temperature": 25.02, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T20:50:07.171043+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.5, + "humidity": 86.1, + "water_total": 109.0, + "average_temperature": 26.3, + "experience_temperature": 25.02, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T21:00:06.811734+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.7, + "humidity": 87.1, + "water_total": 118.0, + "average_temperature": 26.2333, + "experience_temperature": 24.5533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T21:10:06.471393+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.5, + "humidity": 86.9, + "water_total": 123.0, + "average_temperature": 26.2333, + "experience_temperature": 25.1133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T21:20:06.486442+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.4, + "humidity": 87.0, + "water_total": 126.0, + "average_temperature": 26.2333, + "experience_temperature": 25.4333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T21:30:06.785018+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.6, + "humidity": 86.6, + "water_total": 134.0, + "average_temperature": 26.4333, + "experience_temperature": 24.9533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T21:40:06.902177+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.5, + "humidity": 86.4, + "water_total": 138.0, + "average_temperature": 26.5333, + "experience_temperature": 25.3133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T21:50:06.640116+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.4, + "humidity": 86.3, + "water_total": 147.0, + "average_temperature": 26.5333, + "experience_temperature": 25.5933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T22:00:07.405985+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.6, + "humidity": 86.0, + "water_total": 154.0, + "average_temperature": 26.6, + "experience_temperature": 25.0, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T22:10:08.457131+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.5, + "humidity": 86.8, + "water_total": 159.0, + "average_temperature": 26.5, + "experience_temperature": 25.36, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T22:20:07.070123+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.4, + "humidity": 87.1, + "water_total": 162.0, + "average_temperature": 26.3333, + "experience_temperature": 25.5533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T22:30:07.376229+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.4, + "humidity": 86.6, + "water_total": 164.0, + "average_temperature": 26.3333, + "experience_temperature": 25.4533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T22:40:07.665010+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.5, + "humidity": 86.1, + "water_total": 170.0, + "average_temperature": 26.3333, + "experience_temperature": 25.0533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T22:50:06.502276+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.4, + "humidity": 85.9, + "water_total": 176.0, + "average_temperature": 26.3333, + "experience_temperature": 25.3133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T23:00:07.657078+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.7, + "humidity": 87.1, + "water_total": 182.0, + "average_temperature": 26.2667, + "experience_temperature": 24.5867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T23:10:07.134670+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.4, + "humidity": 87.0, + "water_total": 187.0, + "average_temperature": 26.1333, + "experience_temperature": 25.3333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T23:20:07.209671+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.5, + "humidity": 86.9, + "water_total": 188.0, + "average_temperature": 26.0, + "experience_temperature": 24.88, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T23:30:06.297719+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.4, + "humidity": 88.0, + "water_total": 188.0, + "average_temperature": 25.9333, + "experience_temperature": 25.3333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T23:40:06.685453+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.4, + "humidity": 88.0, + "water_total": 188.0, + "average_temperature": 25.9333, + "experience_temperature": 25.3333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-02T23:50:07.016867+07:00", + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.6, + "humidity": 88.5, + "water_total": 193.0, + "average_temperature": 25.7333, + "experience_temperature": 24.6333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T00:00:08.325490+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 88.3, + "water_total": 196.0, + "average_temperature": 25.5667, + "experience_temperature": 24.7267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T00:10:06.416482+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 88.3, + "water_total": 197.0, + "average_temperature": 25.5, + "experience_temperature": 24.66, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T00:20:07.251166+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.4, + "humidity": 88.4, + "water_total": 200.0, + "average_temperature": 25.5333, + "experience_temperature": 25.0133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T00:30:06.632892+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 88.7, + "water_total": 209.0, + "average_temperature": 25.4667, + "experience_temperature": 24.7067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T00:40:08.044475+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 89.0, + "water_total": 213.0, + "average_temperature": 25.3667, + "experience_temperature": 24.6667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T00:50:06.252752+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 89.2, + "water_total": 218.0, + "average_temperature": 25.2333, + "experience_temperature": 24.5733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T01:00:06.412007+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.4, + "humidity": 89.2, + "water_total": 220.0, + "average_temperature": 25.1333, + "experience_temperature": 24.7733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T01:10:06.866406+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.4, + "humidity": 89.4, + "water_total": 220.0, + "average_temperature": 25.0333, + "experience_temperature": 24.7133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T01:20:06.588615+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.6, + "humidity": 89.2, + "water_total": 225.0, + "average_temperature": 25.0667, + "experience_temperature": 24.1067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T01:30:06.628399+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 89.0, + "water_total": 227.0, + "average_temperature": 25.0333, + "experience_temperature": 25.2333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T01:40:06.658498+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 88.8, + "water_total": 231.0, + "average_temperature": 24.9333, + "experience_temperature": 25.0933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T01:50:06.499324+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 89.6, + "water_total": 231.0, + "average_temperature": 24.7333, + "experience_temperature": 25.0533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T02:00:06.401718+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 89.9, + "water_total": 231.0, + "average_temperature": 24.7333, + "experience_temperature": 25.1133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T02:10:06.294710+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.1, + "humidity": 90.5, + "water_total": 234.0, + "average_temperature": 24.7667, + "experience_temperature": 25.5667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T02:20:08.338752+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 90.1, + "water_total": 237.0, + "average_temperature": 24.7, + "experience_temperature": 25.12, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T02:30:06.630136+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 90.1, + "water_total": 237.0, + "average_temperature": 24.7, + "experience_temperature": 25.12, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T02:50:06.265702+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 90.6, + "water_total": 246.0, + "average_temperature": 24.6333, + "experience_temperature": 25.1533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T03:00:06.081241+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.1, + "humidity": 90.6, + "water_total": 249.0, + "average_temperature": 24.7333, + "experience_temperature": 25.5533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T03:10:06.024204+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 90.6, + "water_total": 249.0, + "average_temperature": 24.7333, + "experience_temperature": 25.2533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T03:20:05.953025+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.1, + "humidity": 90.3, + "water_total": 249.0, + "average_temperature": 24.7333, + "experience_temperature": 25.4933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T03:30:05.792775+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 90.1, + "water_total": 249.0, + "average_temperature": 24.7333, + "experience_temperature": 25.1533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T03:40:05.837095+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 90.1, + "water_total": 249.0, + "average_temperature": 24.7333, + "experience_temperature": 25.1533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T03:50:05.891497+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.1, + "humidity": 90.4, + "water_total": 252.0, + "average_temperature": 24.6667, + "experience_temperature": 25.4467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T04:00:05.674242+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.1, + "humidity": 90.4, + "water_total": 252.0, + "average_temperature": 24.6667, + "experience_temperature": 25.4467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T04:10:06.268417+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 90.9, + "water_total": 258.0, + "average_temperature": 24.5333, + "experience_temperature": 25.1133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T04:20:06.152149+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 90.9, + "water_total": 258.0, + "average_temperature": 24.4333, + "experience_temperature": 25.0133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T04:30:05.638392+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 91.0, + "water_total": 258.0, + "average_temperature": 24.4333, + "experience_temperature": 25.0333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T04:40:05.674021+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.1, + "humidity": 91.2, + "water_total": 258.0, + "average_temperature": 24.4333, + "experience_temperature": 25.3733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T04:50:05.445735+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 91.3, + "water_total": 258.0, + "average_temperature": 24.4333, + "experience_temperature": 25.0933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T05:00:06.622908+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 91.4, + "water_total": 259.0, + "average_temperature": 24.4333, + "experience_temperature": 25.1133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T05:10:07.934369+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.1, + "humidity": 91.4, + "water_total": 259.0, + "average_temperature": 24.4333, + "experience_temperature": 25.4133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T05:20:06.632424+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 91.4, + "water_total": 259.0, + "average_temperature": 24.4, + "experience_temperature": 25.08, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T05:30:06.476379+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 91.6, + "water_total": 259.0, + "average_temperature": 24.2667, + "experience_temperature": 24.9867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T05:40:06.764420+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 91.6, + "water_total": 259.0, + "average_temperature": 24.2667, + "experience_temperature": 24.9867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T05:50:06.416339+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 92.0, + "water_total": 259.0, + "average_temperature": 24.0667, + "experience_temperature": 24.8667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T06:00:07.624043+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.1, + "humidity": 92.1, + "water_total": 259.0, + "average_temperature": 24.0, + "experience_temperature": 25.12, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T06:10:06.441059+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 92.2, + "water_total": 261.0, + "average_temperature": 23.9, + "experience_temperature": 24.74, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T06:20:07.172391+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 92.1, + "water_total": 261.0, + "average_temperature": 23.8, + "experience_temperature": 24.62, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T06:30:07.069733+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 92.1, + "water_total": 261.0, + "average_temperature": 23.7333, + "experience_temperature": 24.5533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T06:40:06.307945+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 92.2, + "water_total": 261.0, + "average_temperature": 23.7333, + "experience_temperature": 24.5733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T06:50:06.785773+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 92.1, + "water_total": 261.0, + "average_temperature": 23.9, + "experience_temperature": 24.72, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T07:00:06.751446+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.1, + "humidity": 92.1, + "water_total": 261.0, + "average_temperature": 24.0667, + "experience_temperature": 25.1867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T07:10:07.548763+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.1, + "humidity": 92.0, + "water_total": 261.0, + "average_temperature": 24.3333, + "experience_temperature": 25.4333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T07:20:07.620315+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 91.5, + "water_total": 261.0, + "average_temperature": 24.5, + "experience_temperature": 25.2, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T07:30:06.845428+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.2, + "humidity": 90.9, + "water_total": 261.0, + "average_temperature": 24.7333, + "experience_temperature": 25.3133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T07:40:06.568930+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 89.8, + "water_total": 261.0, + "average_temperature": 25.0667, + "experience_temperature": 24.5267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T07:50:06.675764+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.4, + "humidity": 88.4, + "water_total": 261.0, + "average_temperature": 25.3667, + "experience_temperature": 24.8467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T08:00:07.215082+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.4, + "humidity": 87.0, + "water_total": 261.0, + "average_temperature": 25.8, + "experience_temperature": 25.0, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T08:10:06.916649+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.4, + "humidity": 84.7, + "water_total": 261.0, + "average_temperature": 26.2667, + "experience_temperature": 25.0067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T08:20:07.423268+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.4, + "humidity": 84.7, + "water_total": 261.0, + "average_temperature": 26.2667, + "experience_temperature": 25.0067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T08:30:08.209207+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 79.9, + "water_total": 261.0, + "average_temperature": 27.2667, + "experience_temperature": 24.7467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T08:40:06.731393+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.4, + "humidity": 79.3, + "water_total": 261.0, + "average_temperature": 27.8, + "experience_temperature": 25.46, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T08:50:09.084824+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 77.2, + "water_total": 262.0, + "average_temperature": 28.1333, + "experience_temperature": 25.0733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T09:00:07.426861+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.6, + "humidity": 76.9, + "water_total": 262.0, + "average_temperature": 28.5, + "experience_temperature": 25.08, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T09:10:08.152839+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.6, + "humidity": 74.7, + "water_total": 262.0, + "average_temperature": 28.5333, + "experience_temperature": 24.6733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T09:20:07.336267+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.6, + "humidity": 74.7, + "water_total": 262.0, + "average_temperature": 28.5333, + "experience_temperature": 24.6733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T09:30:07.190858+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.6, + "humidity": 72.4, + "water_total": 262.0, + "average_temperature": 29.0667, + "experience_temperature": 24.7467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T09:40:06.727520+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.8, + "humidity": 71.5, + "water_total": 262.0, + "average_temperature": 29.4333, + "experience_temperature": 24.3333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T09:50:07.241884+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 70.4, + "water_total": 262.0, + "average_temperature": 29.4333, + "experience_temperature": 23.8133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T10:00:07.056377+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 2.0, + "humidity": 69.9, + "water_total": 262.0, + "average_temperature": 29.8333, + "experience_temperature": 23.8133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T10:10:07.497183+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 2.0, + "humidity": 69.1, + "water_total": 262.0, + "average_temperature": 30.0333, + "experience_temperature": 23.8533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T10:20:06.804278+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 2.0, + "humidity": 69.1, + "water_total": 262.0, + "average_temperature": 30.0333, + "experience_temperature": 23.8533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T10:30:07.468306+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 68.5, + "water_total": 265.0, + "average_temperature": 30.1667, + "experience_temperature": 24.1667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T10:40:12.470890+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.7, + "humidity": 67.9, + "water_total": 267.0, + "average_temperature": 30.4333, + "experience_temperature": 24.9133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T10:50:06.791846+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.7, + "humidity": 67.9, + "water_total": 267.0, + "average_temperature": 30.4333, + "experience_temperature": 24.9133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T11:00:08.533416+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 67.8, + "water_total": 268.0, + "average_temperature": 30.6333, + "experience_temperature": 24.4933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T11:10:07.317674+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.8, + "humidity": 68.7, + "water_total": 269.0, + "average_temperature": 30.4667, + "experience_temperature": 24.8067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T11:20:06.612960+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.8, + "humidity": 68.7, + "water_total": 269.0, + "average_temperature": 30.4667, + "experience_temperature": 24.8067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T11:30:07.132659+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 66.5, + "water_total": 271.0, + "average_temperature": 30.4667, + "experience_temperature": 24.0667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T11:40:06.970777+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 67.1, + "water_total": 274.0, + "average_temperature": 30.5, + "experience_temperature": 24.22, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T11:50:06.799760+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 67.1, + "water_total": 278.0, + "average_temperature": 30.7333, + "experience_temperature": 24.4533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T12:00:09.944402+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 67.1, + "water_total": 280.0, + "average_temperature": 30.0667, + "experience_temperature": 23.7867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T12:10:07.024814+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 68.2, + "water_total": 284.0, + "average_temperature": 29.9, + "experience_temperature": 23.84, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T12:30:07.318817+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 2.1, + "humidity": 65.8, + "water_total": 291.0, + "average_temperature": 31.0, + "experience_temperature": 23.86, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T12:40:06.803220+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 2.0, + "humidity": 67.5, + "water_total": 293.0, + "average_temperature": 29.7333, + "experience_temperature": 23.2333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T12:50:08.225630+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 68.4, + "water_total": 300.0, + "average_temperature": 30.1, + "experience_temperature": 24.08, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T13:00:06.076942+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 65.0, + "water_total": 302.0, + "average_temperature": 31.0, + "experience_temperature": 24.3, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T13:10:08.612004+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 65.5, + "water_total": 305.0, + "average_temperature": 30.8, + "experience_temperature": 24.2, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T13:20:07.640690+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 66.5, + "water_total": 306.0, + "average_temperature": 30.5, + "experience_temperature": 24.1, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T13:30:08.290112+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 66.6, + "water_total": 307.0, + "average_temperature": 30.4333, + "experience_temperature": 24.0533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T13:40:06.967177+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 66.2, + "water_total": 311.0, + "average_temperature": 30.3667, + "experience_temperature": 23.9067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T13:50:06.908770+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 2.1, + "humidity": 65.8, + "water_total": 313.0, + "average_temperature": 30.6333, + "experience_temperature": 23.4933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T14:10:06.943082+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 67.7, + "water_total": 325.0, + "average_temperature": 30.3667, + "experience_temperature": 24.2067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T14:20:07.730646+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 66.7, + "water_total": 326.0, + "average_temperature": 30.2667, + "experience_temperature": 23.9067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T14:30:06.173107+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 65.0, + "water_total": 328.0, + "average_temperature": 30.9333, + "experience_temperature": 24.2333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T14:40:06.803007+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 62.3, + "water_total": 330.0, + "average_temperature": 30.9667, + "experience_temperature": 23.7267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T14:50:07.117711+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 67.5, + "water_total": 333.0, + "average_temperature": 30.5333, + "experience_temperature": 24.3333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T15:10:07.675891+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 2.0, + "humidity": 73.6, + "water_total": 340.0, + "average_temperature": 30.1667, + "experience_temperature": 24.8867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T15:20:10.209808+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 72.4, + "water_total": 343.0, + "average_temperature": 30.2333, + "experience_temperature": 25.0133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T15:30:06.814761+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 72.4, + "water_total": 343.0, + "average_temperature": 30.2333, + "experience_temperature": 25.0133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T15:40:06.850997+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 72.9, + "water_total": 348.0, + "average_temperature": 30.2333, + "experience_temperature": 25.1133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T15:50:07.053026+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 72.8, + "water_total": 349.0, + "average_temperature": 30.4333, + "experience_temperature": 25.2933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T16:10:06.411091+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 73.2, + "water_total": 353.0, + "average_temperature": 30.0667, + "experience_temperature": 25.0067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T16:20:06.142012+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.7, + "humidity": 73.6, + "water_total": 355.0, + "average_temperature": 29.7667, + "experience_temperature": 25.3867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T16:30:07.065807+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.7, + "humidity": 73.6, + "water_total": 355.0, + "average_temperature": 29.7667, + "experience_temperature": 25.3867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T16:40:06.958635+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 74.4, + "water_total": 365.0, + "average_temperature": 29.6667, + "experience_temperature": 24.8467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T16:50:06.608721+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 74.6, + "water_total": 366.0, + "average_temperature": 29.6, + "experience_temperature": 24.82, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T17:10:07.822455+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 2.0, + "humidity": 75.1, + "water_total": 367.0, + "average_temperature": 29.4667, + "experience_temperature": 24.4867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T17:20:06.437769+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 2.1, + "humidity": 76.2, + "water_total": 7.0, + "average_temperature": 29.2, + "experience_temperature": 24.14, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T17:30:06.643717+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 77.0, + "water_total": 8.0, + "average_temperature": 29.0333, + "experience_temperature": 24.7333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T17:40:05.806302+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.9, + "humidity": 77.0, + "water_total": 8.0, + "average_temperature": 29.0333, + "experience_temperature": 24.7333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T17:50:06.284462+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 78.1, + "water_total": 16.0, + "average_temperature": 28.7, + "experience_temperature": 25.82, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T18:00:06.774062+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 78.1, + "water_total": 16.0, + "average_temperature": 28.7, + "experience_temperature": 25.82, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T18:10:06.217649+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.7, + "humidity": 77.8, + "water_total": 17.0, + "average_temperature": 28.7, + "experience_temperature": 25.16, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T18:20:06.419091+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.7, + "humidity": 77.8, + "water_total": 17.0, + "average_temperature": 28.6333, + "experience_temperature": 25.0933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T18:30:06.571995+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 78.0, + "water_total": 17.0, + "average_temperature": 28.6, + "experience_temperature": 25.7, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T18:40:06.431849+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 75.3, + "water_total": 20.0, + "average_temperature": 28.7667, + "experience_temperature": 25.3267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T18:50:05.727237+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 74.8, + "water_total": 23.0, + "average_temperature": 28.8333, + "experience_temperature": 25.2933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T19:00:06.717527+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.6, + "humidity": 74.4, + "water_total": 24.0, + "average_temperature": 28.8667, + "experience_temperature": 24.9467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T19:10:05.812005+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 74.2, + "water_total": 25.0, + "average_temperature": 28.8, + "experience_temperature": 25.14, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T19:20:06.004379+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 74.0, + "water_total": 27.0, + "average_temperature": 28.7333, + "experience_temperature": 25.0333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T19:30:06.469650+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 74.1, + "water_total": 30.0, + "average_temperature": 28.6, + "experience_temperature": 24.92, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T19:40:06.724527+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.6, + "humidity": 74.9, + "water_total": 32.0, + "average_temperature": 28.4333, + "experience_temperature": 24.6133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T19:50:06.081925+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 75.5, + "water_total": 32.0, + "average_temperature": 28.2333, + "experience_temperature": 24.8333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T20:00:06.580227+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.6, + "humidity": 76.4, + "water_total": 33.0, + "average_temperature": 28.1, + "experience_temperature": 24.58, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T20:10:07.807876+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 77.2, + "water_total": 33.0, + "average_temperature": 27.9667, + "experience_temperature": 24.9067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T20:20:06.976387+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.7, + "humidity": 78.3, + "water_total": 34.0, + "average_temperature": 27.7333, + "experience_temperature": 24.2933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T20:30:06.151257+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.4, + "humidity": 79.0, + "water_total": 38.0, + "average_temperature": 27.7333, + "experience_temperature": 25.3333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T20:40:06.600006+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.7, + "humidity": 79.5, + "water_total": 38.0, + "average_temperature": 27.7, + "experience_temperature": 24.5, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T20:50:06.109627+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 79.5, + "water_total": 38.0, + "average_temperature": 27.7, + "experience_temperature": 25.1, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T21:00:06.331194+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.6, + "humidity": 79.5, + "water_total": 39.0, + "average_temperature": 27.7333, + "experience_temperature": 24.8333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T21:10:06.791034+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 79.6, + "water_total": 39.0, + "average_temperature": 27.6333, + "experience_temperature": 25.0533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T21:20:06.906254+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.6, + "humidity": 79.8, + "water_total": 40.0, + "average_temperature": 27.6, + "experience_temperature": 24.76, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T21:30:06.946939+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.6, + "humidity": 79.8, + "water_total": 40.0, + "average_temperature": 27.6, + "experience_temperature": 24.76, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T21:40:05.834061+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.4, + "humidity": 81.3, + "water_total": 40.0, + "average_temperature": 27.1667, + "experience_temperature": 25.2267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T21:50:05.997357+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 81.0, + "water_total": 40.0, + "average_temperature": 27.2333, + "experience_temperature": 24.9333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T22:00:05.785892+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 81.0, + "water_total": 40.0, + "average_temperature": 27.2333, + "experience_temperature": 24.9333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T22:10:07.178425+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.4, + "humidity": 81.0, + "water_total": 40.0, + "average_temperature": 27.2, + "experience_temperature": 25.2, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T22:20:05.795611+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.4, + "humidity": 81.3, + "water_total": 40.0, + "average_temperature": 27.0667, + "experience_temperature": 25.1267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T22:30:07.516654+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 81.7, + "water_total": 40.0, + "average_temperature": 26.9333, + "experience_temperature": 24.7733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T22:40:06.114141+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.6, + "humidity": 82.2, + "water_total": 40.0, + "average_temperature": 26.9333, + "experience_temperature": 24.5733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T22:50:06.040759+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.5, + "humidity": 82.6, + "water_total": 40.0, + "average_temperature": 26.9, + "experience_temperature": 24.92, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T23:00:06.482352+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.6, + "humidity": 83.2, + "water_total": 40.0, + "average_temperature": 26.7667, + "experience_temperature": 24.6067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T23:10:06.001223+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.6, + "humidity": 83.7, + "water_total": 40.0, + "average_temperature": 26.7333, + "experience_temperature": 24.6733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T23:20:06.305902+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.6, + "humidity": 84.3, + "water_total": 40.0, + "average_temperature": 26.6, + "experience_temperature": 24.66, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T23:30:07.319909+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.4, + "humidity": 84.7, + "water_total": 40.0, + "average_temperature": 26.4333, + "experience_temperature": 25.1733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T23:40:06.258035+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.6, + "humidity": 85.2, + "water_total": 40.0, + "average_temperature": 26.4333, + "experience_temperature": 24.6733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-03T23:50:06.554336+07:00", + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.6, + "humidity": 84.9, + "water_total": 40.0, + "average_temperature": 26.5667, + "experience_temperature": 24.7467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T00:00:06.024673+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 84.9, + "water_total": 40.0, + "average_temperature": 26.5667, + "experience_temperature": 24.7467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T00:10:06.537673+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 85.1, + "water_total": 40.0, + "average_temperature": 26.5, + "experience_temperature": 25.02, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T00:20:06.346340+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.7, + "humidity": 85.3, + "water_total": 40.0, + "average_temperature": 26.5333, + "experience_temperature": 24.4933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T00:30:06.346292+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 85.5, + "water_total": 40.0, + "average_temperature": 26.5, + "experience_temperature": 24.8, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T00:40:06.186147+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 85.8, + "water_total": 40.0, + "average_temperature": 26.5333, + "experience_temperature": 24.8933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T00:50:05.985323+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 85.9, + "water_total": 40.0, + "average_temperature": 26.4667, + "experience_temperature": 25.1467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T01:00:06.442810+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 86.2, + "water_total": 40.0, + "average_temperature": 26.4, + "experience_temperature": 25.14, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T01:10:06.124371+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 86.2, + "water_total": 40.0, + "average_temperature": 26.3, + "experience_temperature": 25.04, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T01:20:06.179839+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 86.5, + "water_total": 40.0, + "average_temperature": 26.2, + "experience_temperature": 25.0, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T01:30:06.000420+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.7, + "humidity": 86.7, + "water_total": 40.0, + "average_temperature": 26.0667, + "experience_temperature": 24.3067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T01:40:06.479217+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 87.0, + "water_total": 40.0, + "average_temperature": 25.9667, + "experience_temperature": 24.8667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T01:50:06.154489+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 87.2, + "water_total": 40.0, + "average_temperature": 25.9, + "experience_temperature": 24.54, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T02:00:06.526556+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 87.2, + "water_total": 40.0, + "average_temperature": 25.9, + "experience_temperature": 24.54, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T02:10:06.226330+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 87.5, + "water_total": 40.0, + "average_temperature": 25.7, + "experience_temperature": 24.4, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T02:20:06.036868+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.7, + "humidity": 87.7, + "water_total": 40.0, + "average_temperature": 25.6333, + "experience_temperature": 24.0733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T02:30:06.095966+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 87.9, + "water_total": 40.0, + "average_temperature": 25.5333, + "experience_temperature": 24.6133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T02:40:06.701375+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 87.9, + "water_total": 40.0, + "average_temperature": 25.5333, + "experience_temperature": 24.6133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T02:50:06.105069+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 88.2, + "water_total": 40.0, + "average_temperature": 25.4, + "experience_temperature": 24.54, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T03:00:06.848806+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 88.2, + "water_total": 40.0, + "average_temperature": 25.3, + "experience_temperature": 24.14, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T03:10:06.080597+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 88.2, + "water_total": 40.0, + "average_temperature": 25.2333, + "experience_temperature": 24.3733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T03:20:06.998946+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 88.4, + "water_total": 40.0, + "average_temperature": 25.1333, + "experience_temperature": 24.3133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T03:30:06.051969+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 88.6, + "water_total": 40.0, + "average_temperature": 25.0667, + "experience_temperature": 24.2867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T03:40:06.162882+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 88.7, + "water_total": 40.0, + "average_temperature": 25.1, + "experience_temperature": 24.34, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T03:50:07.462849+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.4, + "humidity": 88.7, + "water_total": 40.0, + "average_temperature": 25.1, + "experience_temperature": 24.64, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T04:00:06.769855+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 88.9, + "water_total": 40.0, + "average_temperature": 25.0667, + "experience_temperature": 24.3467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T04:10:07.339330+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.2, + "humidity": 89.1, + "water_total": 40.0, + "average_temperature": 25.0, + "experience_temperature": 25.22, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T04:20:06.400114+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.2, + "humidity": 89.1, + "water_total": 40.0, + "average_temperature": 24.9333, + "experience_temperature": 25.1533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T04:30:05.914094+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.2, + "humidity": 89.1, + "water_total": 40.0, + "average_temperature": 24.9, + "experience_temperature": 25.12, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T04:40:06.347479+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.2, + "humidity": 89.1, + "water_total": 40.0, + "average_temperature": 24.9, + "experience_temperature": 25.12, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T04:50:05.817564+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.2, + "humidity": 89.1, + "water_total": 40.0, + "average_temperature": 24.8333, + "experience_temperature": 25.0533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T05:00:07.446517+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.2, + "humidity": 89.1, + "water_total": 40.0, + "average_temperature": 24.8, + "experience_temperature": 25.02, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T05:10:05.923112+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.2, + "humidity": 88.9, + "water_total": 40.0, + "average_temperature": 24.7667, + "experience_temperature": 24.9467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T05:20:06.507767+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.2, + "humidity": 88.9, + "water_total": 40.0, + "average_temperature": 24.7333, + "experience_temperature": 24.9133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T05:30:06.624622+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.2, + "humidity": 89.4, + "water_total": 40.0, + "average_temperature": 24.6333, + "experience_temperature": 24.9133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T05:40:07.225915+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.2, + "humidity": 89.3, + "water_total": 40.0, + "average_temperature": 24.6, + "experience_temperature": 24.86, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T05:50:07.211128+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.1, + "humidity": 89.7, + "water_total": 40.0, + "average_temperature": 24.5333, + "experience_temperature": 25.1733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T06:00:06.255904+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.2, + "humidity": 89.9, + "water_total": 40.0, + "average_temperature": 24.6, + "experience_temperature": 24.98, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T06:10:06.974338+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.2, + "humidity": 90.1, + "water_total": 40.0, + "average_temperature": 24.5333, + "experience_temperature": 24.9533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T06:20:06.142821+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.2, + "humidity": 90.1, + "water_total": 40.0, + "average_temperature": 24.5333, + "experience_temperature": 24.9533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T06:30:07.012465+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.2, + "humidity": 90.8, + "water_total": 40.0, + "average_temperature": 24.5333, + "experience_temperature": 25.0933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T06:40:06.241101+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.2, + "humidity": 90.9, + "water_total": 40.0, + "average_temperature": 24.5, + "experience_temperature": 25.08, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T06:50:06.713191+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.1, + "humidity": 91.3, + "water_total": 40.0, + "average_temperature": 24.6, + "experience_temperature": 25.56, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T07:00:06.933021+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.1, + "humidity": 91.3, + "water_total": 40.0, + "average_temperature": 24.7333, + "experience_temperature": 25.6933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T07:10:06.429345+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.1, + "humidity": 91.0, + "water_total": 40.0, + "average_temperature": 24.9333, + "experience_temperature": 25.8333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T07:20:06.512469+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.1, + "humidity": 91.0, + "water_total": 40.0, + "average_temperature": 24.9333, + "experience_temperature": 25.8333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T07:30:06.513859+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.7, + "humidity": 89.3, + "water_total": 40.0, + "average_temperature": 25.5333, + "experience_temperature": 24.2933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T07:40:06.447319+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 87.9, + "water_total": 40.0, + "average_temperature": 25.9667, + "experience_temperature": 24.7467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T07:50:07.867614+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.7, + "humidity": 85.8, + "water_total": 40.0, + "average_temperature": 26.3, + "experience_temperature": 24.36, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T08:00:19.242052+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.7, + "humidity": 85.8, + "water_total": 40.0, + "average_temperature": 26.3, + "experience_temperature": 24.36, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T08:10:06.756199+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 83.6, + "water_total": 40.0, + "average_temperature": 26.9333, + "experience_temperature": 25.1533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T08:20:06.334304+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 78.2, + "water_total": 40.0, + "average_temperature": 27.7, + "experience_temperature": 24.84, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T08:30:06.264772+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 76.8, + "water_total": 40.0, + "average_temperature": 28.0, + "experience_temperature": 24.56, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T08:40:06.408003+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.4, + "humidity": 76.9, + "water_total": 40.0, + "average_temperature": 28.2333, + "experience_temperature": 25.4133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T08:50:06.415289+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.4, + "humidity": 76.9, + "water_total": 40.0, + "average_temperature": 28.2333, + "experience_temperature": 25.4133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T09:00:05.830422+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 76.4, + "water_total": 40.0, + "average_temperature": 28.3, + "experience_temperature": 24.78, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T09:10:06.613169+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 75.1, + "water_total": 40.0, + "average_temperature": 28.9333, + "experience_temperature": 25.4533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T09:20:06.794405+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 74.4, + "water_total": 40.0, + "average_temperature": 29.0667, + "experience_temperature": 24.2467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T09:30:06.811021+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 72.9, + "water_total": 40.0, + "average_temperature": 29.4667, + "experience_temperature": 24.3467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T09:40:07.315362+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 71.9, + "water_total": 40.0, + "average_temperature": 29.6667, + "experience_temperature": 24.3467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T09:50:06.691541+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 71.8, + "water_total": 40.0, + "average_temperature": 29.9333, + "experience_temperature": 24.5933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T10:00:06.880407+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 2.0, + "humidity": 70.7, + "water_total": 40.0, + "average_temperature": 30.0667, + "experience_temperature": 24.2067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T10:10:07.401348+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 2.0, + "humidity": 70.7, + "water_total": 40.0, + "average_temperature": 30.1, + "experience_temperature": 24.24, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T10:20:07.584869+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 2.0, + "humidity": 70.6, + "water_total": 40.0, + "average_temperature": 30.1333, + "experience_temperature": 24.2533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T10:30:07.447649+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.7, + "humidity": 69.9, + "water_total": 40.0, + "average_temperature": 30.4333, + "experience_temperature": 25.3133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T10:40:06.737046+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 68.7, + "water_total": 40.0, + "average_temperature": 30.6333, + "experience_temperature": 24.6733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T10:50:08.488454+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 69.2, + "water_total": 40.0, + "average_temperature": 30.4, + "experience_temperature": 24.54, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T11:00:09.038572+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.8, + "humidity": 69.4, + "water_total": 40.0, + "average_temperature": 30.4333, + "experience_temperature": 24.9133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T11:10:06.658075+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 69.5, + "water_total": 40.0, + "average_temperature": 30.6, + "experience_temperature": 24.8, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T11:20:06.524267+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 2.0, + "humidity": 70.9, + "water_total": 40.0, + "average_temperature": 30.1333, + "experience_temperature": 24.3133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T11:30:07.219589+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 70.2, + "water_total": 40.0, + "average_temperature": 30.2667, + "experience_temperature": 24.6067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T11:40:06.692350+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 2.0, + "humidity": 67.5, + "water_total": 40.0, + "average_temperature": 30.7, + "experience_temperature": 24.2, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T11:50:06.649608+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 69.0, + "water_total": 40.0, + "average_temperature": 30.2333, + "experience_temperature": 24.3333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T12:00:07.151756+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 69.5, + "water_total": 40.0, + "average_temperature": 30.2667, + "experience_temperature": 24.4667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T12:10:07.351900+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 67.6, + "water_total": 40.0, + "average_temperature": 30.4333, + "experience_temperature": 24.2533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T12:20:07.382745+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 2.3, + "humidity": 65.3, + "water_total": 40.0, + "average_temperature": 31.0333, + "experience_temperature": 23.1933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T12:30:07.124776+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.8, + "humidity": 68.9, + "water_total": 40.0, + "average_temperature": 30.7667, + "experience_temperature": 25.1467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T12:40:06.929705+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 68.6, + "water_total": 40.0, + "average_temperature": 30.6333, + "experience_temperature": 25.5533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T12:50:06.442113+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 2.2, + "humidity": 69.0, + "water_total": 40.0, + "average_temperature": 29.9667, + "experience_temperature": 23.1667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T13:00:07.014805+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 69.1, + "water_total": 40.0, + "average_temperature": 30.2, + "experience_temperature": 24.32, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T13:10:06.010782+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 2.3, + "humidity": 67.9, + "water_total": 40.0, + "average_temperature": 31.0333, + "experience_temperature": 23.7133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T13:20:07.987609+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 68.1, + "water_total": 40.0, + "average_temperature": 30.7, + "experience_temperature": 24.62, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T13:30:06.528005+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 69.4, + "water_total": 40.0, + "average_temperature": 30.0, + "experience_temperature": 24.18, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T13:40:06.524989+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 67.5, + "water_total": 40.0, + "average_temperature": 30.4, + "experience_temperature": 24.2, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T13:50:06.738197+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 67.5, + "water_total": 40.0, + "average_temperature": 30.4, + "experience_temperature": 24.2, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T14:10:07.074884+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.7, + "humidity": 71.6, + "water_total": 40.0, + "average_temperature": 29.9, + "experience_temperature": 25.12, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T14:20:07.112895+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 68.8, + "water_total": 40.0, + "average_temperature": 30.4, + "experience_temperature": 24.46, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T14:30:09.237037+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 2.5, + "humidity": 66.7, + "water_total": 40.0, + "average_temperature": 31.2333, + "experience_temperature": 23.0733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T14:40:07.321448+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 71.0, + "water_total": 40.0, + "average_temperature": 30.1333, + "experience_temperature": 24.6333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T14:50:07.310399+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 2.0, + "humidity": 71.2, + "water_total": 40.0, + "average_temperature": 29.9333, + "experience_temperature": 24.1733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T15:10:06.819609+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 67.4, + "water_total": 40.0, + "average_temperature": 30.7333, + "experience_temperature": 24.5133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T15:20:06.689187+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 69.9, + "water_total": 40.0, + "average_temperature": 30.2, + "experience_temperature": 24.48, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T15:30:08.032873+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 68.9, + "water_total": 40.0, + "average_temperature": 30.2333, + "experience_temperature": 24.3133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T15:40:06.608917+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 68.1, + "water_total": 40.0, + "average_temperature": 30.7667, + "experience_temperature": 24.6867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T15:50:06.703061+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 2.0, + "humidity": 67.8, + "water_total": 40.0, + "average_temperature": 30.6333, + "experience_temperature": 24.1933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T16:10:06.016702+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 2.0, + "humidity": 69.0, + "water_total": 40.0, + "average_temperature": 30.2, + "experience_temperature": 24.0, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T16:20:06.164361+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 68.2, + "water_total": 40.0, + "average_temperature": 30.3333, + "experience_temperature": 24.2733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T16:30:06.585583+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 67.2, + "water_total": 40.0, + "average_temperature": 30.4333, + "experience_temperature": 24.1733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T16:40:05.886897+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 67.2, + "water_total": 40.0, + "average_temperature": 30.4333, + "experience_temperature": 24.1733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T16:50:06.285201+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 67.2, + "water_total": 40.0, + "average_temperature": 30.4, + "experience_temperature": 24.14, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T17:10:05.731596+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 2.0, + "humidity": 67.8, + "water_total": 0.0, + "average_temperature": 30.2333, + "experience_temperature": 23.7933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T17:20:05.957634+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 68.6, + "water_total": 0.0, + "average_temperature": 30.1333, + "experience_temperature": 24.1533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T17:30:05.940135+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 2.1, + "humidity": 69.5, + "water_total": 0.0, + "average_temperature": 30.0, + "experience_temperature": 23.6, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T17:40:06.709660+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 70.1, + "water_total": 0.0, + "average_temperature": 29.7333, + "experience_temperature": 24.0533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T17:50:06.012682+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 70.4, + "water_total": 0.0, + "average_temperature": 29.6, + "experience_temperature": 23.98, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T18:00:17.951150+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 70.4, + "water_total": 0.0, + "average_temperature": 29.6, + "experience_temperature": 23.98, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T18:10:05.374076+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 70.7, + "water_total": 0.0, + "average_temperature": 29.4333, + "experience_temperature": 23.8733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T18:20:05.790184+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 71.7, + "water_total": 0.0, + "average_temperature": 29.2333, + "experience_temperature": 24.7733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T18:30:05.861160+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 73.4, + "water_total": 0.0, + "average_temperature": 29.2333, + "experience_temperature": 24.2133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T18:40:05.545887+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.9, + "humidity": 74.2, + "water_total": 0.0, + "average_temperature": 29.1333, + "experience_temperature": 24.2733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T18:50:06.066172+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.4, + "humidity": 74.6, + "water_total": 0.0, + "average_temperature": 29.0333, + "experience_temperature": 25.7533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T19:00:06.761285+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.7, + "humidity": 75.1, + "water_total": 0.0, + "average_temperature": 28.8667, + "experience_temperature": 24.7867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T19:10:06.345410+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 75.5, + "water_total": 0.0, + "average_temperature": 28.6667, + "experience_temperature": 24.9667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T19:20:06.647626+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 75.8, + "water_total": 0.0, + "average_temperature": 28.6, + "experience_temperature": 25.26, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T19:30:07.392460+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.4, + "humidity": 76.7, + "water_total": 0.0, + "average_temperature": 28.5333, + "experience_temperature": 25.6733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T19:40:07.148471+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.7, + "humidity": 77.3, + "water_total": 0.0, + "average_temperature": 28.4667, + "experience_temperature": 24.8267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T19:50:07.053076+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.4, + "humidity": 78.0, + "water_total": 0.0, + "average_temperature": 28.2667, + "experience_temperature": 25.6667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T20:00:06.095198+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 76.0, + "water_total": 0.0, + "average_temperature": 28.5667, + "experience_temperature": 25.2667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T20:10:06.444889+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.7, + "humidity": 78.9, + "water_total": 0.0, + "average_temperature": 28.0333, + "experience_temperature": 24.7133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T20:20:07.488029+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 79.5, + "water_total": 0.0, + "average_temperature": 27.9, + "experience_temperature": 25.0, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T20:30:07.003792+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 80.0, + "water_total": 0.0, + "average_temperature": 27.7333, + "experience_temperature": 24.9333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T20:40:06.802872+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 80.2, + "water_total": 0.0, + "average_temperature": 27.7667, + "experience_temperature": 25.0067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T20:50:07.753927+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.4, + "humidity": 80.6, + "water_total": 0.0, + "average_temperature": 27.7, + "experience_temperature": 25.62, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T21:00:06.864493+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.4, + "humidity": 80.9, + "water_total": 0.0, + "average_temperature": 27.6333, + "experience_temperature": 25.6133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T21:10:06.272884+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.4, + "humidity": 81.2, + "water_total": 0.0, + "average_temperature": 27.5667, + "experience_temperature": 25.6067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T21:20:07.096139+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.4, + "humidity": 81.5, + "water_total": 0.0, + "average_temperature": 27.4333, + "experience_temperature": 25.5333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T21:30:07.652613+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 81.9, + "water_total": 0.0, + "average_temperature": 27.3, + "experience_temperature": 25.18, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T21:40:06.951023+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 82.2, + "water_total": 0.0, + "average_temperature": 27.2, + "experience_temperature": 25.14, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T21:50:07.184667+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 82.6, + "water_total": 0.0, + "average_temperature": 27.0667, + "experience_temperature": 25.0867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T22:00:06.687008+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 82.5, + "water_total": 0.0, + "average_temperature": 26.9333, + "experience_temperature": 24.9333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T22:10:06.550948+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 82.4, + "water_total": 0.0, + "average_temperature": 26.9, + "experience_temperature": 24.88, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T22:20:06.578121+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 82.9, + "water_total": 0.0, + "average_temperature": 26.7333, + "experience_temperature": 24.5133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T22:30:07.220604+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 83.2, + "water_total": 0.0, + "average_temperature": 26.6333, + "experience_temperature": 24.7733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T22:40:06.922300+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 83.8, + "water_total": 0.0, + "average_temperature": 26.5, + "experience_temperature": 24.76, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T22:50:06.310131+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 84.5, + "water_total": 0.0, + "average_temperature": 26.2667, + "experience_temperature": 24.6667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T23:00:05.982036+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.7, + "humidity": 84.9, + "water_total": 0.0, + "average_temperature": 26.1667, + "experience_temperature": 24.0467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T23:10:06.830439+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 85.7, + "water_total": 0.0, + "average_temperature": 26.0, + "experience_temperature": 24.64, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T23:20:06.362533+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 86.0, + "water_total": 0.0, + "average_temperature": 25.7667, + "experience_temperature": 24.1667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T23:30:06.584518+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.5, + "humidity": 85.9, + "water_total": 0.0, + "average_temperature": 25.8, + "experience_temperature": 24.48, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T23:40:07.358644+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.4, + "humidity": 85.8, + "water_total": 0.0, + "average_temperature": 25.7, + "experience_temperature": 24.66, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-04T23:50:07.739366+07:00", + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 85.4, + "water_total": 0.0, + "average_temperature": 25.7333, + "experience_temperature": 24.0133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T00:00:06.658512+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 85.7, + "water_total": 0.0, + "average_temperature": 25.7, + "experience_temperature": 24.34, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T00:10:07.045032+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 86.6, + "water_total": 0.0, + "average_temperature": 25.4, + "experience_temperature": 23.92, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T00:20:06.739384+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 86.8, + "water_total": 0.0, + "average_temperature": 25.2333, + "experience_temperature": 24.0933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T00:30:06.591317+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 86.8, + "water_total": 0.0, + "average_temperature": 25.2333, + "experience_temperature": 23.7933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T00:40:07.114476+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 87.0, + "water_total": 0.0, + "average_temperature": 25.1667, + "experience_temperature": 23.7667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T00:50:07.288137+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 87.4, + "water_total": 0.0, + "average_temperature": 25.1, + "experience_temperature": 24.08, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T01:00:06.962316+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 87.4, + "water_total": 0.0, + "average_temperature": 25.0333, + "experience_temperature": 24.0133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T01:10:06.210403+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.7, + "humidity": 88.3, + "water_total": 0.0, + "average_temperature": 25.0333, + "experience_temperature": 23.5933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T01:20:06.607059+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 88.0, + "water_total": 0.0, + "average_temperature": 24.8, + "experience_temperature": 24.8, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T01:30:06.888906+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.3, + "humidity": 88.8, + "water_total": 0.0, + "average_temperature": 24.9333, + "experience_temperature": 24.7933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T01:40:05.983904+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 89.2, + "water_total": 0.0, + "average_temperature": 24.9667, + "experience_temperature": 25.2067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T01:50:06.980772+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 89.3, + "water_total": 0.0, + "average_temperature": 24.8667, + "experience_temperature": 25.1267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T02:00:07.855955+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 89.7, + "water_total": 0.0, + "average_temperature": 24.7, + "experience_temperature": 25.04, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T02:10:07.113914+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.1, + "humidity": 89.9, + "water_total": 0.0, + "average_temperature": 24.6333, + "experience_temperature": 25.3133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T02:20:06.600810+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 90.0, + "water_total": 0.0, + "average_temperature": 24.5, + "experience_temperature": 24.9, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T02:30:07.664889+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 89.1, + "water_total": 0.0, + "average_temperature": 24.4667, + "experience_temperature": 24.6867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T02:40:07.200255+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.1, + "humidity": 88.9, + "water_total": 0.0, + "average_temperature": 24.3667, + "experience_temperature": 24.8467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T02:50:07.138250+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 89.0, + "water_total": 0.0, + "average_temperature": 24.2667, + "experience_temperature": 24.4667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T03:00:06.421345+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.1, + "humidity": 89.5, + "water_total": 0.0, + "average_temperature": 24.0667, + "experience_temperature": 24.6667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T03:10:06.508478+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 89.5, + "water_total": 0.0, + "average_temperature": 23.9667, + "experience_temperature": 24.2667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T03:20:07.017806+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 89.7, + "water_total": 0.0, + "average_temperature": 23.8, + "experience_temperature": 24.14, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T03:30:06.625027+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 89.9, + "water_total": 0.0, + "average_temperature": 23.8, + "experience_temperature": 24.18, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T03:40:06.669684+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 90.1, + "water_total": 0.0, + "average_temperature": 23.8, + "experience_temperature": 24.22, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T03:50:06.914567+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 90.2, + "water_total": 0.0, + "average_temperature": 23.8667, + "experience_temperature": 24.3067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T04:00:06.533439+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 90.6, + "water_total": 0.0, + "average_temperature": 23.9333, + "experience_temperature": 24.4533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T04:10:06.971165+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 91.4, + "water_total": 0.0, + "average_temperature": 24.0667, + "experience_temperature": 24.7467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T04:20:06.019147+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.1, + "humidity": 91.1, + "water_total": 0.0, + "average_temperature": 23.8667, + "experience_temperature": 24.7867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T04:30:05.458057+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.0, + "humidity": 91.4, + "water_total": 0.0, + "average_temperature": 23.8, + "experience_temperature": 25.08, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T04:40:05.772092+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 91.1, + "water_total": 0.0, + "average_temperature": 23.4667, + "experience_temperature": 24.0867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T04:50:09.022294+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.1, + "humidity": 91.5, + "water_total": 0.0, + "average_temperature": 23.4, + "experience_temperature": 24.4, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T05:00:05.282660+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.1, + "humidity": 91.5, + "water_total": 0.0, + "average_temperature": 23.4, + "experience_temperature": 24.4, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T05:10:05.147473+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 91.9, + "water_total": 0.0, + "average_temperature": 23.5, + "experience_temperature": 24.28, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T05:20:07.095430+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 91.7, + "water_total": 0.0, + "average_temperature": 23.3667, + "experience_temperature": 24.1067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T05:30:07.414729+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 91.9, + "water_total": 0.0, + "average_temperature": 23.3333, + "experience_temperature": 24.1133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T05:40:05.655610+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 92.1, + "water_total": 0.0, + "average_temperature": 23.2, + "experience_temperature": 24.02, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T05:50:06.594887+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 92.5, + "water_total": 0.0, + "average_temperature": 23.1667, + "experience_temperature": 24.0667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T06:00:05.753247+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 92.4, + "water_total": 0.0, + "average_temperature": 23.2, + "experience_temperature": 24.08, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T06:10:05.690424+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 92.5, + "water_total": 0.0, + "average_temperature": 23.1667, + "experience_temperature": 24.0667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T06:20:06.419013+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 92.4, + "water_total": 0.0, + "average_temperature": 23.1333, + "experience_temperature": 24.0133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T06:30:05.597230+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 92.4, + "water_total": 0.0, + "average_temperature": 23.1333, + "experience_temperature": 24.0133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T06:40:05.400244+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 92.4, + "water_total": 0.0, + "average_temperature": 23.2, + "experience_temperature": 24.08, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T06:50:06.278447+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.1, + "humidity": 92.1, + "water_total": 0.0, + "average_temperature": 23.3667, + "experience_temperature": 24.4867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T07:00:05.868449+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 91.7, + "water_total": 0.0, + "average_temperature": 23.5, + "experience_temperature": 24.24, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T07:10:05.660198+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.0, + "humidity": 91.3, + "water_total": 0.0, + "average_temperature": 23.6667, + "experience_temperature": 24.9267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T07:20:06.548500+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 90.4, + "water_total": 0.0, + "average_temperature": 24.0667, + "experience_temperature": 24.5467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T07:30:06.280227+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 89.3, + "water_total": 0.0, + "average_temperature": 24.4667, + "experience_temperature": 24.7267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T07:40:06.110509+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.2, + "humidity": 89.3, + "water_total": 0.0, + "average_temperature": 24.4667, + "experience_temperature": 24.7267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T07:50:06.188489+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 86.8, + "water_total": 0.0, + "average_temperature": 25.3, + "experience_temperature": 24.16, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T08:00:06.225065+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 85.0, + "water_total": 0.0, + "average_temperature": 25.8667, + "experience_temperature": 24.0667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T08:10:06.165264+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 85.0, + "water_total": 0.0, + "average_temperature": 25.8667, + "experience_temperature": 24.0667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T08:20:06.672128+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 81.7, + "water_total": 0.0, + "average_temperature": 27.0, + "experience_temperature": 24.84, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T08:30:06.384316+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 81.7, + "water_total": 0.0, + "average_temperature": 27.0, + "experience_temperature": 24.84, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T08:40:06.334571+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 78.3, + "water_total": 0.0, + "average_temperature": 27.7667, + "experience_temperature": 24.6267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T08:50:06.661048+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.4, + "humidity": 77.2, + "water_total": 0.0, + "average_temperature": 28.0, + "experience_temperature": 25.24, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T09:00:05.997174+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 75.6, + "water_total": 0.0, + "average_temperature": 28.3667, + "experience_temperature": 24.9867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T09:10:07.452917+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 75.1, + "water_total": 0.0, + "average_temperature": 28.8, + "experience_temperature": 25.32, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T09:20:06.464224+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 73.1, + "water_total": 0.0, + "average_temperature": 28.9667, + "experience_temperature": 25.0867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T09:30:06.642177+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 73.0, + "water_total": 0.0, + "average_temperature": 29.4, + "experience_temperature": 24.3, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T09:40:05.875468+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 71.4, + "water_total": 0.0, + "average_temperature": 29.5667, + "experience_temperature": 24.1467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T09:50:07.159261+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 70.6, + "water_total": 0.0, + "average_temperature": 30.0333, + "experience_temperature": 24.4533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T10:00:20.744123+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 70.6, + "water_total": 0.0, + "average_temperature": 30.0333, + "experience_temperature": 24.4533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T10:10:07.520646+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.0, + "humidity": 67.6, + "water_total": 0.0, + "average_temperature": 30.3, + "experience_temperature": 23.82, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T10:20:07.104583+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.0, + "humidity": 68.8, + "water_total": 0.0, + "average_temperature": 30.5333, + "experience_temperature": 24.2933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T10:30:06.577167+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.0, + "humidity": 66.8, + "water_total": 0.0, + "average_temperature": 30.4333, + "experience_temperature": 23.7933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T10:40:06.074488+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.8, + "humidity": 65.3, + "water_total": 0.0, + "average_temperature": 30.7333, + "experience_temperature": 24.3933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T10:50:07.760815+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.2, + "humidity": 66.3, + "water_total": 0.0, + "average_temperature": 30.3333, + "experience_temperature": 22.9933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T11:00:05.878464+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.0, + "humidity": 64.7, + "water_total": 0.0, + "average_temperature": 30.6667, + "experience_temperature": 23.6067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T11:10:06.475727+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.8, + "humidity": 66.5, + "water_total": 0.0, + "average_temperature": 30.5333, + "experience_temperature": 24.4333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T11:20:06.250731+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 65.2, + "water_total": 0.0, + "average_temperature": 30.8, + "experience_temperature": 24.14, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T11:30:07.063130+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 65.9, + "water_total": 0.0, + "average_temperature": 30.6667, + "experience_temperature": 24.1467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T11:40:07.448972+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.8, + "humidity": 66.3, + "water_total": 0.0, + "average_temperature": 30.2667, + "experience_temperature": 24.1267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T11:50:05.781750+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.8, + "humidity": 66.2, + "water_total": 0.0, + "average_temperature": 30.9, + "experience_temperature": 24.74, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T12:00:05.897672+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 62.7, + "water_total": 0.0, + "average_temperature": 30.9667, + "experience_temperature": 23.8067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T12:10:05.848285+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.0, + "humidity": 66.3, + "water_total": 0.0, + "average_temperature": 30.1, + "experience_temperature": 23.36, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T12:20:05.502334+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 63.8, + "water_total": 0.0, + "average_temperature": 30.5333, + "experience_temperature": 23.5933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T12:30:05.875015+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 62.8, + "water_total": 0.0, + "average_temperature": 30.9333, + "experience_temperature": 23.7933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T12:40:06.901374+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 64.7, + "water_total": 0.0, + "average_temperature": 30.4333, + "experience_temperature": 23.6733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T12:50:07.451196+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 61.2, + "water_total": 0.0, + "average_temperature": 31.0333, + "experience_temperature": 23.5733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T13:00:06.021317+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 64.3, + "water_total": 0.0, + "average_temperature": 30.3, + "experience_temperature": 23.46, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T13:10:06.205259+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 67.4, + "water_total": 0.0, + "average_temperature": 29.9667, + "experience_temperature": 23.7467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T13:20:06.912231+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.3, + "humidity": 60.8, + "water_total": 0.0, + "average_temperature": 31.0333, + "experience_temperature": 22.2933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T13:30:07.456213+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.0, + "humidity": 61.2, + "water_total": 0.0, + "average_temperature": 30.7, + "experience_temperature": 22.94, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T13:40:06.709247+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 64.8, + "water_total": 0.0, + "average_temperature": 30.2667, + "experience_temperature": 23.5267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T13:50:06.863740+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 60.0, + "water_total": 0.0, + "average_temperature": 30.7667, + "experience_temperature": 23.0667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T14:10:07.577958+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.8, + "humidity": 63.7, + "water_total": 0.0, + "average_temperature": 30.4, + "experience_temperature": 23.74, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T14:20:06.294422+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.3, + "humidity": 58.8, + "water_total": 0.0, + "average_temperature": 31.1333, + "experience_temperature": 21.9933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T14:30:06.837987+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.2, + "humidity": 61.8, + "water_total": 0.0, + "average_temperature": 31.2333, + "experience_temperature": 22.9933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T14:40:06.175022+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 65.5, + "water_total": 0.0, + "average_temperature": 30.3, + "experience_temperature": 23.7, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T14:50:06.240683+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.0, + "humidity": 64.5, + "water_total": 0.0, + "average_temperature": 30.7, + "experience_temperature": 23.6, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T15:10:05.838601+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.3, + "humidity": 75.6, + "water_total": 0.0, + "average_temperature": 28.3667, + "experience_temperature": 25.5867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T15:20:06.986257+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 72.2, + "water_total": 0.0, + "average_temperature": 30.5, + "experience_temperature": 25.24, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T15:30:06.260022+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.0, + "humidity": 71.9, + "water_total": 0.0, + "average_temperature": 30.3333, + "experience_temperature": 24.7133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T15:40:06.929904+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.0, + "humidity": 71.9, + "water_total": 0.0, + "average_temperature": 30.3333, + "experience_temperature": 24.7133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T15:50:06.604844+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.1, + "humidity": 72.5, + "water_total": 0.0, + "average_temperature": 30.5333, + "experience_temperature": 24.7333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T16:10:07.007616+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 73.4, + "water_total": 0.0, + "average_temperature": 30.3667, + "experience_temperature": 25.3467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T16:20:06.075365+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.0, + "humidity": 75.4, + "water_total": 0.0, + "average_temperature": 29.8, + "experience_temperature": 24.88, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T16:30:06.648892+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 76.0, + "water_total": 0.0, + "average_temperature": 29.5333, + "experience_temperature": 25.0333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T16:40:07.303718+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.0, + "humidity": 75.4, + "water_total": 0.0, + "average_temperature": 29.6333, + "experience_temperature": 24.7133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T16:50:06.577271+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.0, + "humidity": 74.5, + "water_total": 0.0, + "average_temperature": 30.0, + "experience_temperature": 24.9, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T17:10:07.009285+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 73.9, + "water_total": 0.0, + "average_temperature": 29.9333, + "experience_temperature": 25.0133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T17:20:06.852098+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 73.4, + "water_total": 0.0, + "average_temperature": 29.9, + "experience_temperature": 24.88, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T17:30:06.189608+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.0, + "humidity": 73.3, + "water_total": 0.0, + "average_temperature": 29.8333, + "experience_temperature": 24.4933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T17:40:06.145351+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 73.4, + "water_total": 0.0, + "average_temperature": 29.7333, + "experience_temperature": 24.7133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T17:50:06.597513+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.1, + "humidity": 73.7, + "water_total": 0.0, + "average_temperature": 29.7333, + "experience_temperature": 24.1733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T18:00:06.667453+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 74.1, + "water_total": 0.0, + "average_temperature": 29.6, + "experience_temperature": 24.72, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T18:10:06.030830+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 74.7, + "water_total": 0.0, + "average_temperature": 29.5, + "experience_temperature": 24.74, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T18:20:06.449660+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 74.6, + "water_total": 0.0, + "average_temperature": 29.4333, + "experience_temperature": 24.6533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T18:30:07.069994+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 2.1, + "humidity": 74.4, + "water_total": 0.0, + "average_temperature": 29.4333, + "experience_temperature": 24.0133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T18:40:06.611985+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.9, + "humidity": 74.7, + "water_total": 0.0, + "average_temperature": 29.4, + "experience_temperature": 24.64, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T18:50:06.776943+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 72.4, + "water_total": 0.0, + "average_temperature": 28.7333, + "experience_temperature": 24.4133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T19:00:06.840278+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 72.9, + "water_total": 0.0, + "average_temperature": 28.1667, + "experience_temperature": 23.9467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T19:10:07.610427+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.4, + "humidity": 73.3, + "water_total": 0.0, + "average_temperature": 28.2, + "experience_temperature": 24.66, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T19:20:06.141420+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 74.7, + "water_total": 0.0, + "average_temperature": 27.9667, + "experience_temperature": 24.4067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T19:30:06.880000+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 74.7, + "water_total": 0.0, + "average_temperature": 27.9667, + "experience_temperature": 24.4067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T19:40:07.322136+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 74.9, + "water_total": 0.0, + "average_temperature": 28.4333, + "experience_temperature": 24.6133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T19:50:06.288304+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 74.9, + "water_total": 0.0, + "average_temperature": 28.4667, + "experience_temperature": 24.9467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T20:00:06.419240+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.4, + "humidity": 75.1, + "water_total": 0.0, + "average_temperature": 28.4, + "experience_temperature": 25.22, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T20:10:06.962528+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 74.5, + "water_total": 0.0, + "average_temperature": 28.5, + "experience_temperature": 24.6, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T20:20:06.149326+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 75.6, + "water_total": 0.0, + "average_temperature": 28.1667, + "experience_temperature": 24.4867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T20:30:06.631815+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 75.5, + "water_total": 0.0, + "average_temperature": 28.1, + "experience_temperature": 24.7, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T20:40:06.043775+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.4, + "humidity": 76.0, + "water_total": 0.0, + "average_temperature": 27.9667, + "experience_temperature": 24.9667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T20:50:06.511768+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.4, + "humidity": 76.8, + "water_total": 0.0, + "average_temperature": 27.7333, + "experience_temperature": 24.8933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T21:00:06.463341+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 77.2, + "water_total": 0.0, + "average_temperature": 27.7333, + "experience_temperature": 24.6733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T21:10:06.649144+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 77.2, + "water_total": 0.0, + "average_temperature": 27.7333, + "experience_temperature": 24.6733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T21:20:06.346541+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 78.5, + "water_total": 0.0, + "average_temperature": 27.4667, + "experience_temperature": 24.3667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T21:30:09.485326+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.8, + "humidity": 79.8, + "water_total": 0.0, + "average_temperature": 27.2, + "experience_temperature": 23.76, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T21:40:06.973577+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 80.7, + "water_total": 0.0, + "average_temperature": 27.0333, + "experience_temperature": 24.3733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T21:50:07.631404+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 80.7, + "water_total": 0.0, + "average_temperature": 27.0333, + "experience_temperature": 24.3733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T22:00:11.417773+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 82.6, + "water_total": 0.0, + "average_temperature": 26.7333, + "experience_temperature": 24.4533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T22:10:08.980824+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 84.1, + "water_total": 0.0, + "average_temperature": 26.5667, + "experience_temperature": 24.5867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T22:20:08.986304+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 84.8, + "water_total": 0.0, + "average_temperature": 26.3667, + "experience_temperature": 24.5267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T22:30:07.686448+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 85.2, + "water_total": 0.0, + "average_temperature": 26.1667, + "experience_temperature": 24.7067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T22:40:07.121290+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 85.6, + "water_total": 0.0, + "average_temperature": 26.2333, + "experience_temperature": 24.5533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T22:50:06.965423+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.7, + "humidity": 84.6, + "water_total": 0.0, + "average_temperature": 26.4667, + "experience_temperature": 24.2867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T23:00:06.646967+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 84.2, + "water_total": 0.0, + "average_temperature": 26.5, + "experience_temperature": 24.84, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T23:10:07.427262+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 84.8, + "water_total": 0.0, + "average_temperature": 26.3333, + "experience_temperature": 24.7933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T23:20:08.329441+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.7, + "humidity": 85.9, + "water_total": 0.0, + "average_temperature": 26.1667, + "experience_temperature": 24.2467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T23:30:06.805221+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 86.6, + "water_total": 0.0, + "average_temperature": 25.9667, + "experience_temperature": 24.7867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T23:40:06.780513+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.6, + "humidity": 86.9, + "water_total": 0.0, + "average_temperature": 25.8667, + "experience_temperature": 24.4467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-05T23:50:06.440408+07:00", + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 87.3, + "water_total": 0.0, + "average_temperature": 25.8, + "experience_temperature": 24.76, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T00:00:07.463207+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 87.9, + "water_total": 0.0, + "average_temperature": 25.9, + "experience_temperature": 24.68, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T00:10:07.779428+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.5, + "humidity": 87.9, + "water_total": 0.0, + "average_temperature": 25.9333, + "experience_temperature": 25.0133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T00:20:06.200801+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.7, + "humidity": 87.9, + "water_total": 0.0, + "average_temperature": 25.5667, + "experience_temperature": 24.0467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T00:30:06.420312+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.7, + "humidity": 87.9, + "water_total": 0.0, + "average_temperature": 25.5667, + "experience_temperature": 24.0467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T00:40:06.950693+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.7, + "humidity": 89.0, + "water_total": 0.0, + "average_temperature": 25.3667, + "experience_temperature": 24.0667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T00:50:06.558401+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 89.4, + "water_total": 0.0, + "average_temperature": 25.2667, + "experience_temperature": 24.3467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T01:00:06.670428+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 89.4, + "water_total": 0.0, + "average_temperature": 25.1667, + "experience_temperature": 24.2467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T01:10:06.477734+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.1, + "humidity": 89.7, + "water_total": 0.0, + "average_temperature": 25.0, + "experience_temperature": 25.64, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T01:20:06.572996+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 89.9, + "water_total": 0.0, + "average_temperature": 24.9333, + "experience_temperature": 25.3133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T01:30:06.630267+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 90.1, + "water_total": 0.0, + "average_temperature": 24.9, + "experience_temperature": 25.32, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T01:40:06.890293+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.1, + "humidity": 90.6, + "water_total": 0.0, + "average_temperature": 24.8333, + "experience_temperature": 25.6533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T01:50:06.153437+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 90.7, + "water_total": 0.0, + "average_temperature": 24.7, + "experience_temperature": 25.24, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T02:00:06.995066+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 91.1, + "water_total": 0.0, + "average_temperature": 24.6667, + "experience_temperature": 25.2867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T02:10:06.888539+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 91.1, + "water_total": 0.0, + "average_temperature": 24.6667, + "experience_temperature": 25.2867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T02:20:06.531887+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 91.0, + "water_total": 0.0, + "average_temperature": 24.5, + "experience_temperature": 25.1, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T02:30:06.620786+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.1, + "humidity": 90.8, + "water_total": 0.0, + "average_temperature": 24.2333, + "experience_temperature": 25.0933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T02:40:07.296845+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 91.6, + "water_total": 0.0, + "average_temperature": 24.2333, + "experience_temperature": 24.9533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T02:50:08.009325+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 91.9, + "water_total": 0.0, + "average_temperature": 24.3333, + "experience_temperature": 25.1133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T03:00:06.724328+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 91.8, + "water_total": 0.0, + "average_temperature": 24.2667, + "experience_temperature": 25.0267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T03:10:06.727103+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 91.9, + "water_total": 0.0, + "average_temperature": 24.2667, + "experience_temperature": 25.0467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T03:20:06.540296+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 92.1, + "water_total": 0.0, + "average_temperature": 24.3333, + "experience_temperature": 25.1533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T03:30:07.462908+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.1, + "humidity": 92.3, + "water_total": 0.0, + "average_temperature": 24.5, + "experience_temperature": 25.66, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T03:40:07.416622+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.1, + "humidity": 92.1, + "water_total": 0.0, + "average_temperature": 24.5, + "experience_temperature": 25.62, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T03:50:06.666414+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 92.0, + "water_total": 0.0, + "average_temperature": 24.5667, + "experience_temperature": 25.3667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T04:00:07.215747+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 92.0, + "water_total": 0.0, + "average_temperature": 24.5333, + "experience_temperature": 25.3333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T04:10:07.344795+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 91.9, + "water_total": 0.0, + "average_temperature": 24.6, + "experience_temperature": 25.38, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T04:20:07.187753+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 91.9, + "water_total": 0.0, + "average_temperature": 24.5, + "experience_temperature": 25.28, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T04:30:06.956479+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.1, + "humidity": 91.9, + "water_total": 0.0, + "average_temperature": 24.5, + "experience_temperature": 25.58, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T04:40:06.822906+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 92.2, + "water_total": 0.0, + "average_temperature": 24.6667, + "experience_temperature": 25.5067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T04:50:07.804741+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.1, + "humidity": 91.9, + "water_total": 0.0, + "average_temperature": 24.5, + "experience_temperature": 25.58, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T05:00:08.219344+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 92.3, + "water_total": 0.0, + "average_temperature": 24.4667, + "experience_temperature": 25.3267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T05:10:07.564815+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 92.2, + "water_total": 0.0, + "average_temperature": 24.4667, + "experience_temperature": 25.3067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T05:20:07.347664+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 92.2, + "water_total": 0.0, + "average_temperature": 24.4667, + "experience_temperature": 25.3067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T05:30:06.817582+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.1, + "humidity": 92.3, + "water_total": 0.0, + "average_temperature": 24.4667, + "experience_temperature": 25.6267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T05:40:05.545487+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 92.4, + "water_total": 0.0, + "average_temperature": 24.4667, + "experience_temperature": 25.3467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T05:50:06.248982+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 92.1, + "water_total": 0.0, + "average_temperature": 24.1, + "experience_temperature": 24.92, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T06:00:06.068914+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 92.4, + "water_total": 0.0, + "average_temperature": 24.3, + "experience_temperature": 25.18, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T06:10:06.089371+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 92.4, + "water_total": 0.0, + "average_temperature": 24.3, + "experience_temperature": 25.18, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T06:20:06.095695+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 92.5, + "water_total": 0.0, + "average_temperature": 24.2667, + "experience_temperature": 25.1667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T06:30:06.458075+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 92.7, + "water_total": 0.0, + "average_temperature": 24.3333, + "experience_temperature": 25.2733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T06:40:05.685184+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 92.6, + "water_total": 0.0, + "average_temperature": 24.4, + "experience_temperature": 25.32, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T06:50:06.146401+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 92.8, + "water_total": 0.0, + "average_temperature": 24.4667, + "experience_temperature": 25.4267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T07:00:05.956467+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 92.8, + "water_total": 0.0, + "average_temperature": 24.6, + "experience_temperature": 25.56, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T07:10:05.848847+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.2, + "humidity": 92.5, + "water_total": 0.0, + "average_temperature": 24.8, + "experience_temperature": 25.7, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T07:20:06.415181+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 92.2, + "water_total": 0.0, + "average_temperature": 25.0333, + "experience_temperature": 24.6733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T07:30:07.355930+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.7, + "humidity": 91.9, + "water_total": 0.0, + "average_temperature": 25.3, + "experience_temperature": 24.58, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T07:40:06.247131+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.5, + "humidity": 91.4, + "water_total": 0.0, + "average_temperature": 25.5333, + "experience_temperature": 25.3133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T07:50:06.129702+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.4, + "humidity": 90.5, + "water_total": 0.0, + "average_temperature": 25.6, + "experience_temperature": 25.5, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T08:00:06.192951+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.4, + "humidity": 90.5, + "water_total": 0.0, + "average_temperature": 25.6, + "experience_temperature": 25.5, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T08:10:06.260831+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.4, + "humidity": 90.1, + "water_total": 0.0, + "average_temperature": 25.9333, + "experience_temperature": 25.7533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T08:20:06.817022+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.5, + "humidity": 86.1, + "water_total": 0.0, + "average_temperature": 26.8667, + "experience_temperature": 25.5867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T08:30:06.107617+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 84.4, + "water_total": 0.0, + "average_temperature": 27.5, + "experience_temperature": 25.58, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T08:40:06.203047+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.4, + "humidity": 82.2, + "water_total": 0.0, + "average_temperature": 27.8, + "experience_temperature": 26.04, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T08:50:06.904602+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 80.5, + "water_total": 0.0, + "average_temperature": 28.3, + "experience_temperature": 25.6, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T09:00:07.089479+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 80.5, + "water_total": 0.0, + "average_temperature": 28.3, + "experience_temperature": 25.6, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T09:10:10.399571+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 76.6, + "water_total": 0.0, + "average_temperature": 29.0667, + "experience_temperature": 24.6867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T09:20:05.727829+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 2.0, + "humidity": 74.6, + "water_total": 0.0, + "average_temperature": 29.2333, + "experience_temperature": 24.1533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T09:30:10.245716+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 71.8, + "water_total": 0.0, + "average_temperature": 29.7, + "experience_temperature": 24.36, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T09:40:07.068651+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 2.0, + "humidity": 70.8, + "water_total": 0.0, + "average_temperature": 29.7, + "experience_temperature": 23.86, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T09:50:08.466240+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 72.2, + "water_total": 0.0, + "average_temperature": 30.1, + "experience_temperature": 24.84, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T10:00:07.890469+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 72.2, + "water_total": 0.0, + "average_temperature": 30.1, + "experience_temperature": 24.84, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T10:10:07.555912+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 70.9, + "water_total": 0.0, + "average_temperature": 30.4333, + "experience_temperature": 24.9133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T10:20:07.134543+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 70.1, + "water_total": 0.0, + "average_temperature": 30.2333, + "experience_temperature": 24.5533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T10:30:05.999227+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 70.1, + "water_total": 0.0, + "average_temperature": 30.2333, + "experience_temperature": 24.5533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T10:40:06.638144+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 2.0, + "humidity": 71.8, + "water_total": 0.0, + "average_temperature": 30.6333, + "experience_temperature": 24.9933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T10:50:07.042748+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 71.2, + "water_total": 0.0, + "average_temperature": 30.6333, + "experience_temperature": 25.1733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T11:00:07.165904+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 71.3, + "water_total": 0.0, + "average_temperature": 30.2, + "experience_temperature": 24.76, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T11:10:06.193148+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 2.1, + "humidity": 69.4, + "water_total": 0.0, + "average_temperature": 30.3667, + "experience_temperature": 23.9467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T11:20:07.189849+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.8, + "humidity": 68.6, + "water_total": 0.0, + "average_temperature": 30.5333, + "experience_temperature": 24.8533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T11:30:07.678939+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 68.2, + "water_total": 0.0, + "average_temperature": 30.6333, + "experience_temperature": 24.5733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T11:40:05.855876+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 2.2, + "humidity": 70.6, + "water_total": 0.0, + "average_temperature": 30.6, + "experience_temperature": 24.12, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T11:50:07.612823+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 2.1, + "humidity": 70.9, + "water_total": 0.0, + "average_temperature": 30.3, + "experience_temperature": 24.18, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T12:00:06.644697+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 2.0, + "humidity": 67.5, + "water_total": 0.0, + "average_temperature": 30.5, + "experience_temperature": 24.0, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T12:10:07.285594+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 68.6, + "water_total": 0.0, + "average_temperature": 30.5333, + "experience_temperature": 24.5533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T12:20:08.954808+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 66.6, + "water_total": 0.0, + "average_temperature": 30.7, + "experience_temperature": 24.32, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T12:30:06.786018+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 68.4, + "water_total": 0.0, + "average_temperature": 30.9, + "experience_temperature": 24.88, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T12:40:06.424666+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 66.9, + "water_total": 0.0, + "average_temperature": 30.6667, + "experience_temperature": 24.3467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T12:50:05.948872+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 2.0, + "humidity": 67.7, + "water_total": 0.0, + "average_temperature": 30.4333, + "experience_temperature": 23.9733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T13:00:07.462697+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 2.0, + "humidity": 69.6, + "water_total": 0.0, + "average_temperature": 29.9, + "experience_temperature": 23.82, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T13:10:08.304640+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 67.5, + "water_total": 0.0, + "average_temperature": 30.1667, + "experience_temperature": 23.9667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T13:20:06.607102+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.8, + "humidity": 66.1, + "water_total": 0.0, + "average_temperature": 30.7667, + "experience_temperature": 24.5867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T13:30:06.685621+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.8, + "humidity": 66.1, + "water_total": 0.0, + "average_temperature": 30.7667, + "experience_temperature": 24.5867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T13:40:06.659366+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 2.0, + "humidity": 69.7, + "water_total": 0.0, + "average_temperature": 29.6, + "experience_temperature": 23.54, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T13:50:07.564247+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 2.0, + "humidity": 71.1, + "water_total": 0.0, + "average_temperature": 29.8333, + "experience_temperature": 24.0533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T14:10:06.292509+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 66.0, + "water_total": 0.0, + "average_temperature": 30.5, + "experience_temperature": 24.0, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T14:20:06.359169+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 70.2, + "water_total": 0.0, + "average_temperature": 30.3333, + "experience_temperature": 24.6733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T14:30:06.155687+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 2.0, + "humidity": 68.1, + "water_total": 0.0, + "average_temperature": 30.4, + "experience_temperature": 24.02, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T14:40:06.456253+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.8, + "humidity": 69.1, + "water_total": 0.0, + "average_temperature": 30.9333, + "experience_temperature": 25.3533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T14:50:08.491282+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 2.0, + "humidity": 70.8, + "water_total": 0.0, + "average_temperature": 30.6333, + "experience_temperature": 24.7933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T15:10:06.694048+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 73.4, + "water_total": 0.0, + "average_temperature": 30.1333, + "experience_temperature": 25.1133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T15:20:06.907197+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 72.3, + "water_total": 0.0, + "average_temperature": 30.1333, + "experience_temperature": 24.8933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T15:30:06.896954+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 72.2, + "water_total": 0.0, + "average_temperature": 30.4333, + "experience_temperature": 25.1733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T15:40:07.499487+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 2.0, + "humidity": 71.5, + "water_total": 0.0, + "average_temperature": 30.4667, + "experience_temperature": 24.7667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T15:50:08.030687+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 2.1, + "humidity": 72.4, + "water_total": 0.0, + "average_temperature": 30.4333, + "experience_temperature": 24.6133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T16:20:17.136658+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 2.0, + "humidity": 70.6, + "water_total": 0.0, + "average_temperature": 30.2333, + "experience_temperature": 24.3533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T16:30:14.473320+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 2.2, + "humidity": 70.5, + "water_total": 0.0, + "average_temperature": 30.2333, + "experience_temperature": 23.7333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T16:40:13.048140+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 70.0, + "water_total": 0.0, + "average_temperature": 30.1, + "experience_temperature": 24.4, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T16:50:08.510305+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 69.9, + "water_total": 0.0, + "average_temperature": 29.8667, + "experience_temperature": 24.1467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T17:10:06.689020+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 2.0, + "humidity": 71.1, + "water_total": 0.0, + "average_temperature": 29.4333, + "experience_temperature": 23.6533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T17:20:07.355103+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 71.1, + "water_total": 0.0, + "average_temperature": 29.3333, + "experience_temperature": 23.8533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T17:30:06.321022+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.9, + "humidity": 71.1, + "water_total": 0.0, + "average_temperature": 29.3333, + "experience_temperature": 23.8533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T17:40:06.664632+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.5, + "humidity": 72.2, + "water_total": 0.0, + "average_temperature": 28.9333, + "experience_temperature": 24.8733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T17:50:07.485575+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 73.1, + "water_total": 0.0, + "average_temperature": 28.7, + "experience_temperature": 24.52, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T18:00:06.399574+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.8, + "humidity": 73.9, + "water_total": 0.0, + "average_temperature": 28.4667, + "experience_temperature": 23.8467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T18:10:05.702452+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.7, + "humidity": 75.4, + "water_total": 0.0, + "average_temperature": 28.1333, + "experience_temperature": 24.1133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T18:20:06.217022+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.7, + "humidity": 75.4, + "water_total": 0.0, + "average_temperature": 28.1333, + "experience_temperature": 24.1133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T18:30:06.323030+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.5, + "humidity": 76.7, + "water_total": 0.0, + "average_temperature": 27.8333, + "experience_temperature": 24.6733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T18:40:07.364604+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.5, + "humidity": 77.3, + "water_total": 0.0, + "average_temperature": 27.8667, + "experience_temperature": 24.8267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T18:50:06.166623+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.5, + "humidity": 78.0, + "water_total": 0.0, + "average_temperature": 27.7333, + "experience_temperature": 24.8333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T19:00:05.842978+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.4, + "humidity": 78.8, + "water_total": 0.0, + "average_temperature": 27.6333, + "experience_temperature": 25.1933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T19:10:05.922620+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 78.5, + "water_total": 0.0, + "average_temperature": 27.7333, + "experience_temperature": 24.6333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T19:20:07.092868+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.7, + "humidity": 79.3, + "water_total": 0.0, + "average_temperature": 27.5667, + "experience_temperature": 24.3267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T19:30:05.960891+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.7, + "humidity": 78.8, + "water_total": 0.0, + "average_temperature": 27.5333, + "experience_temperature": 24.1933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T19:40:08.491644+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 79.0, + "water_total": 0.0, + "average_temperature": 27.5333, + "experience_temperature": 24.5333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T19:50:06.003637+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.7, + "humidity": 79.7, + "water_total": 0.0, + "average_temperature": 27.4333, + "experience_temperature": 24.2733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T20:00:06.306033+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.7, + "humidity": 79.7, + "water_total": 0.0, + "average_temperature": 27.4333, + "experience_temperature": 24.2733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T20:10:08.725135+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.5, + "humidity": 80.3, + "water_total": 0.0, + "average_temperature": 27.4667, + "experience_temperature": 25.0267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T20:20:07.243234+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.4, + "humidity": 80.4, + "water_total": 0.0, + "average_temperature": 27.4333, + "experience_temperature": 25.3133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T20:30:06.029260+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.5, + "humidity": 80.7, + "water_total": 0.0, + "average_temperature": 27.4, + "experience_temperature": 25.04, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T20:40:05.726352+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.8, + "humidity": 81.2, + "water_total": 0.0, + "average_temperature": 27.2667, + "experience_temperature": 24.1067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T20:50:06.185700+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 81.6, + "water_total": 0.0, + "average_temperature": 27.3333, + "experience_temperature": 24.8533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T21:00:06.322497+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 81.8, + "water_total": 0.0, + "average_temperature": 27.2333, + "experience_temperature": 24.7933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T21:10:06.831156+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.7, + "humidity": 82.7, + "water_total": 0.0, + "average_temperature": 26.9333, + "experience_temperature": 24.3733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T21:20:05.851180+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 84.8, + "water_total": 0.0, + "average_temperature": 26.4333, + "experience_temperature": 24.5933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T21:30:06.056657+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 84.3, + "water_total": 0.0, + "average_temperature": 26.7333, + "experience_temperature": 24.7933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T21:40:06.012605+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.7, + "humidity": 84.4, + "water_total": 0.0, + "average_temperature": 26.6, + "experience_temperature": 24.38, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T21:50:05.684798+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.7, + "humidity": 85.4, + "water_total": 0.0, + "average_temperature": 26.4667, + "experience_temperature": 24.4467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T22:00:06.092081+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 85.3, + "water_total": 0.0, + "average_temperature": 26.4333, + "experience_temperature": 24.6933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T22:10:06.067338+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.4, + "humidity": 85.2, + "water_total": 0.0, + "average_temperature": 26.3667, + "experience_temperature": 25.2067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T22:20:06.648384+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 85.2, + "water_total": 0.0, + "average_temperature": 26.2667, + "experience_temperature": 24.5067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T22:30:06.351416+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 84.9, + "water_total": 0.0, + "average_temperature": 26.2, + "experience_temperature": 24.38, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T22:40:07.006925+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.5, + "humidity": 84.9, + "water_total": 0.0, + "average_temperature": 26.2333, + "experience_temperature": 24.7133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T22:50:05.766925+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 84.8, + "water_total": 0.0, + "average_temperature": 26.1333, + "experience_temperature": 24.2933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T23:00:06.364794+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 84.8, + "water_total": 0.0, + "average_temperature": 26.1333, + "experience_temperature": 24.2933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T23:10:05.801957+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 86.2, + "water_total": 0.0, + "average_temperature": 25.7667, + "experience_temperature": 24.2067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T23:20:06.130267+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.4, + "humidity": 86.4, + "water_total": 0.0, + "average_temperature": 25.7, + "experience_temperature": 24.78, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T23:30:06.645859+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.6, + "humidity": 86.5, + "water_total": 0.0, + "average_temperature": 25.6667, + "experience_temperature": 24.1667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T23:40:05.649243+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.7, + "humidity": 86.7, + "water_total": 0.0, + "average_temperature": 25.6, + "experience_temperature": 23.84, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-06T23:50:05.661263+07:00", + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.7, + "humidity": 87.1, + "water_total": 0.0, + "average_temperature": 25.4, + "experience_temperature": 23.72, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T00:00:05.406585+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.7, + "humidity": 87.1, + "water_total": 0.0, + "average_temperature": 25.4, + "experience_temperature": 23.72, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T00:10:06.338415+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 87.7, + "water_total": 0.0, + "average_temperature": 25.3, + "experience_temperature": 24.34, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T00:20:05.938894+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.4, + "humidity": 87.9, + "water_total": 0.0, + "average_temperature": 25.2667, + "experience_temperature": 24.6467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T00:30:06.000557+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.7, + "humidity": 88.5, + "water_total": 0.0, + "average_temperature": 25.2333, + "experience_temperature": 23.8333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T00:40:07.150978+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.7, + "humidity": 88.6, + "water_total": 0.0, + "average_temperature": 25.1667, + "experience_temperature": 23.7867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T00:50:05.871917+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 89.2, + "water_total": 0.0, + "average_temperature": 25.1667, + "experience_temperature": 24.5067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T01:00:05.441948+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 89.8, + "water_total": 0.0, + "average_temperature": 25.1667, + "experience_temperature": 24.3267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T01:10:05.952821+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 89.8, + "water_total": 0.0, + "average_temperature": 24.9667, + "experience_temperature": 25.3267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T01:20:05.554732+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 90.0, + "water_total": 0.0, + "average_temperature": 25.1, + "experience_temperature": 24.6, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T01:30:06.348100+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 90.0, + "water_total": 0.0, + "average_temperature": 25.1667, + "experience_temperature": 24.3667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T01:40:05.619909+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 90.0, + "water_total": 0.0, + "average_temperature": 25.1333, + "experience_temperature": 24.3333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T01:50:06.155498+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 90.2, + "water_total": 0.0, + "average_temperature": 25.1, + "experience_temperature": 24.64, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T02:00:05.572326+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 90.5, + "water_total": 0.0, + "average_temperature": 25.0333, + "experience_temperature": 24.6333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T02:10:06.729478+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 90.3, + "water_total": 0.0, + "average_temperature": 24.9333, + "experience_temperature": 25.3933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T02:20:05.748166+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.1, + "humidity": 90.7, + "water_total": 0.0, + "average_temperature": 24.8333, + "experience_temperature": 25.6733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T02:30:06.021877+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 90.9, + "water_total": 0.0, + "average_temperature": 24.8333, + "experience_temperature": 25.4133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T02:40:05.971820+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 91.0, + "water_total": 0.0, + "average_temperature": 24.7333, + "experience_temperature": 25.3333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T02:50:05.605307+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 91.4, + "water_total": 0.0, + "average_temperature": 24.6667, + "experience_temperature": 25.3467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T03:00:05.539449+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 91.4, + "water_total": 0.0, + "average_temperature": 24.6333, + "experience_temperature": 25.3133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T03:10:05.406655+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 91.4, + "water_total": 0.0, + "average_temperature": 24.5333, + "experience_temperature": 25.2133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T03:20:05.627914+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 91.6, + "water_total": 0.0, + "average_temperature": 24.6333, + "experience_temperature": 25.3533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T03:30:06.453661+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 91.6, + "water_total": 0.0, + "average_temperature": 24.4667, + "experience_temperature": 25.1867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T03:40:05.709305+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.1, + "humidity": 91.8, + "water_total": 0.0, + "average_temperature": 24.5, + "experience_temperature": 25.56, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T03:50:06.102057+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 92.0, + "water_total": 0.0, + "average_temperature": 24.4, + "experience_temperature": 25.2, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T04:00:05.963490+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 92.0, + "water_total": 0.0, + "average_temperature": 24.4, + "experience_temperature": 25.2, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T04:10:05.880757+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.0, + "humidity": 92.4, + "water_total": 0.0, + "average_temperature": 24.2, + "experience_temperature": 25.68, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T04:20:06.420505+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 92.6, + "water_total": 0.0, + "average_temperature": 24.2, + "experience_temperature": 25.12, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T04:30:06.086992+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 92.9, + "water_total": 0.0, + "average_temperature": 24.1, + "experience_temperature": 25.08, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T04:40:05.260066+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 93.0, + "water_total": 0.0, + "average_temperature": 24.1333, + "experience_temperature": 25.1333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T04:50:06.207269+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 92.7, + "water_total": 0.0, + "average_temperature": 23.9667, + "experience_temperature": 24.9067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T05:00:06.495080+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 92.8, + "water_total": 0.0, + "average_temperature": 23.8667, + "experience_temperature": 24.8267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T05:10:06.304171+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.1, + "humidity": 93.2, + "water_total": 0.0, + "average_temperature": 24.0, + "experience_temperature": 25.34, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T05:20:05.774059+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 93.4, + "water_total": 0.0, + "average_temperature": 24.0667, + "experience_temperature": 25.1467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T05:30:05.820618+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.1, + "humidity": 93.1, + "water_total": 0.0, + "average_temperature": 24.0333, + "experience_temperature": 25.3533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T05:40:06.392028+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.1, + "humidity": 93.1, + "water_total": 0.0, + "average_temperature": 24.0333, + "experience_temperature": 25.3533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T05:50:05.324172+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 93.1, + "water_total": 0.0, + "average_temperature": 23.8, + "experience_temperature": 24.82, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T06:00:06.286214+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 93.1, + "water_total": 0.0, + "average_temperature": 23.8, + "experience_temperature": 24.82, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T06:10:06.725506+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 93.4, + "water_total": 0.0, + "average_temperature": 23.9, + "experience_temperature": 24.98, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T06:20:07.593331+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 93.4, + "water_total": 0.0, + "average_temperature": 23.8333, + "experience_temperature": 24.9133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T06:30:06.111773+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 93.5, + "water_total": 0.0, + "average_temperature": 23.8, + "experience_temperature": 24.9, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T06:40:06.889924+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 93.4, + "water_total": 0.0, + "average_temperature": 23.8667, + "experience_temperature": 24.9467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T06:50:06.235348+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.1, + "humidity": 93.6, + "water_total": 0.0, + "average_temperature": 23.8333, + "experience_temperature": 25.2533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T07:00:10.067867+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.1, + "humidity": 93.5, + "water_total": 0.0, + "average_temperature": 24.1, + "experience_temperature": 25.5, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T07:10:07.164576+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.3, + "humidity": 93.7, + "water_total": 0.0, + "average_temperature": 24.2667, + "experience_temperature": 25.1067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T07:20:06.146386+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 93.5, + "water_total": 0.0, + "average_temperature": 24.5, + "experience_temperature": 25.6, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T07:30:07.199387+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 93.5, + "water_total": 0.0, + "average_temperature": 24.7, + "experience_temperature": 25.8, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T07:40:06.703292+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.2, + "humidity": 93.1, + "water_total": 0.0, + "average_temperature": 24.9667, + "experience_temperature": 25.9867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T07:50:06.538469+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 92.4, + "water_total": 0.0, + "average_temperature": 25.3, + "experience_temperature": 25.28, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T08:00:06.376141+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 91.3, + "water_total": 0.0, + "average_temperature": 25.7667, + "experience_temperature": 25.5267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T08:10:06.678792+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 91.3, + "water_total": 0.0, + "average_temperature": 25.7667, + "experience_temperature": 25.5267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T08:20:07.309112+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.7, + "humidity": 90.1, + "water_total": 0.0, + "average_temperature": 26.1333, + "experience_temperature": 25.0533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T08:30:06.633671+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 86.2, + "water_total": 0.0, + "average_temperature": 27.2333, + "experience_temperature": 25.9733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T08:40:07.026428+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 84.2, + "water_total": 0.0, + "average_temperature": 27.7333, + "experience_temperature": 25.7733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T08:50:06.077469+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 82.5, + "water_total": 0.0, + "average_temperature": 28.0667, + "experience_temperature": 26.0667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T09:00:06.033903+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.7, + "humidity": 80.7, + "water_total": 0.0, + "average_temperature": 28.5667, + "experience_temperature": 25.6067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T09:10:05.974410+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 80.7, + "water_total": 0.0, + "average_temperature": 28.5, + "experience_temperature": 25.84, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T09:20:09.956911+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 77.4, + "water_total": 0.0, + "average_temperature": 29.0, + "experience_temperature": 25.98, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T09:30:06.353244+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 77.4, + "water_total": 0.0, + "average_temperature": 29.0, + "experience_temperature": 25.98, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T09:40:07.664225+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 2.1, + "humidity": 74.4, + "water_total": 0.0, + "average_temperature": 29.2667, + "experience_temperature": 23.8467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T09:50:06.562232+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 2.1, + "humidity": 74.4, + "water_total": 0.0, + "average_temperature": 29.2667, + "experience_temperature": 23.8467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T10:00:06.098091+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.9, + "humidity": 74.3, + "water_total": 0.0, + "average_temperature": 29.4333, + "experience_temperature": 24.5933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T10:10:06.464395+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 2.0, + "humidity": 73.5, + "water_total": 0.0, + "average_temperature": 29.6333, + "experience_temperature": 24.3333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T10:20:09.228208+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.9, + "humidity": 71.0, + "water_total": 0.0, + "average_temperature": 30.0333, + "experience_temperature": 24.5333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T10:30:08.189682+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.9, + "humidity": 71.0, + "water_total": 0.0, + "average_temperature": 30.0333, + "experience_temperature": 24.5333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T10:40:07.831428+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 2.0, + "humidity": 71.4, + "water_total": 0.0, + "average_temperature": 30.4333, + "experience_temperature": 24.7133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T10:50:07.382517+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 2.0, + "humidity": 70.7, + "water_total": 0.0, + "average_temperature": 30.2, + "experience_temperature": 24.34, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T11:00:06.645619+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 2.0, + "humidity": 70.7, + "water_total": 0.0, + "average_temperature": 30.2, + "experience_temperature": 24.34, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T11:10:06.949186+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 2.0, + "humidity": 70.2, + "water_total": 0.0, + "average_temperature": 30.4, + "experience_temperature": 24.44, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T11:20:07.320153+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 2.0, + "humidity": 68.5, + "water_total": 0.0, + "average_temperature": 30.6, + "experience_temperature": 24.3, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T11:30:06.784908+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.9, + "humidity": 69.4, + "water_total": 0.0, + "average_temperature": 30.3333, + "experience_temperature": 24.5133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T11:40:06.799239+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 2.0, + "humidity": 69.1, + "water_total": 0.0, + "average_temperature": 30.2333, + "experience_temperature": 24.0533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T11:50:08.954114+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 2.1, + "humidity": 69.1, + "water_total": 0.0, + "average_temperature": 30.4333, + "experience_temperature": 23.9533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T12:00:06.520338+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 2.1, + "humidity": 69.1, + "water_total": 0.0, + "average_temperature": 30.4333, + "experience_temperature": 23.9533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T12:10:06.643070+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.9, + "humidity": 69.4, + "water_total": 0.0, + "average_temperature": 30.3667, + "experience_temperature": 24.5467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T12:20:06.147942+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.9, + "humidity": 69.3, + "water_total": 0.0, + "average_temperature": 30.2333, + "experience_temperature": 24.3933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T12:30:06.290974+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.9, + "humidity": 69.2, + "water_total": 0.0, + "average_temperature": 30.4667, + "experience_temperature": 24.6067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T12:40:06.686623+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.9, + "humidity": 67.0, + "water_total": 0.0, + "average_temperature": 30.7333, + "experience_temperature": 24.4333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T12:50:06.733344+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 2.1, + "humidity": 69.4, + "water_total": 0.0, + "average_temperature": 30.8667, + "experience_temperature": 24.4467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T13:00:06.797511+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.9, + "humidity": 70.3, + "water_total": 0.0, + "average_temperature": 30.5667, + "experience_temperature": 24.9267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T13:10:06.619400+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 2.2, + "humidity": 71.5, + "water_total": 0.0, + "average_temperature": 30.7, + "experience_temperature": 24.4, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T13:20:06.552611+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 2.0, + "humidity": 69.3, + "water_total": 0.0, + "average_temperature": 30.2667, + "experience_temperature": 24.1267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T13:30:06.456604+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.9, + "humidity": 68.5, + "water_total": 0.0, + "average_temperature": 30.3667, + "experience_temperature": 24.3667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T13:40:08.558739+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 2.4, + "humidity": 68.7, + "water_total": 0.0, + "average_temperature": 31.1333, + "experience_temperature": 23.6733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T13:50:06.461544+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.8, + "humidity": 68.8, + "water_total": 0.0, + "average_temperature": 30.4, + "experience_temperature": 24.76, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T14:10:06.934475+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 2.0, + "humidity": 69.2, + "water_total": 0.0, + "average_temperature": 30.8667, + "experience_temperature": 24.7067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T14:20:07.322255+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.9, + "humidity": 66.0, + "water_total": 0.0, + "average_temperature": 30.7667, + "experience_temperature": 24.2667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T14:30:06.586580+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.9, + "humidity": 67.3, + "water_total": 0.0, + "average_temperature": 30.6333, + "experience_temperature": 24.3933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T14:40:07.173985+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.9, + "humidity": 71.0, + "water_total": 0.0, + "average_temperature": 30.3333, + "experience_temperature": 24.8333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T14:50:08.504540+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 2.0, + "humidity": 74.1, + "water_total": 0.0, + "average_temperature": 30.2, + "experience_temperature": 25.02, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T15:10:07.597123+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.9, + "humidity": 73.6, + "water_total": 0.0, + "average_temperature": 30.4667, + "experience_temperature": 25.4867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T15:20:08.388586+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.9, + "humidity": 72.6, + "water_total": 0.0, + "average_temperature": 30.2, + "experience_temperature": 25.02, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T15:30:07.544727+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.9, + "humidity": 73.0, + "water_total": 0.0, + "average_temperature": 30.2, + "experience_temperature": 25.1, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T15:40:07.215062+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.9, + "humidity": 73.0, + "water_total": 0.0, + "average_temperature": 30.2, + "experience_temperature": 25.1, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T15:50:10.349644+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.9, + "humidity": 73.8, + "water_total": 0.0, + "average_temperature": 30.3, + "experience_temperature": 25.36, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T16:10:07.440303+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 80.7, + "water_total": 0.0, + "average_temperature": 28.5, + "experience_temperature": 25.84, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T16:20:18.120252+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.7, + "humidity": 73.1, + "water_total": 0.0, + "average_temperature": 28.8333, + "experience_temperature": 24.3533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T16:30:07.105955+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.7, + "humidity": 73.7, + "water_total": 0.0, + "average_temperature": 28.7333, + "experience_temperature": 24.3733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T16:40:07.044190+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 73.6, + "water_total": 0.0, + "average_temperature": 28.8, + "experience_temperature": 24.72, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T16:50:09.209656+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 73.4, + "water_total": 0.0, + "average_temperature": 28.9333, + "experience_temperature": 24.8133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T17:10:06.560856+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.7, + "humidity": 72.7, + "water_total": 0.0, + "average_temperature": 28.8667, + "experience_temperature": 24.3067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T17:20:07.259703+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.7, + "humidity": 73.2, + "water_total": 0.0, + "average_temperature": 28.7667, + "experience_temperature": 24.3067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T17:30:07.167105+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 73.3, + "water_total": 0.0, + "average_temperature": 28.6333, + "experience_temperature": 24.7933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T17:40:06.706273+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 73.4, + "water_total": 0.0, + "average_temperature": 28.6, + "experience_temperature": 24.48, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T17:50:08.857918+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 74.3, + "water_total": 0.0, + "average_temperature": 28.4667, + "experience_temperature": 24.5267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T18:00:06.200197+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 75.0, + "water_total": 0.0, + "average_temperature": 28.4, + "experience_temperature": 24.9, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T18:10:05.500022+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 76.1, + "water_total": 0.0, + "average_temperature": 28.2333, + "experience_temperature": 24.9533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T18:20:06.265950+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.7, + "humidity": 77.8, + "water_total": 0.0, + "average_temperature": 27.9667, + "experience_temperature": 24.4267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T18:30:06.324607+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 79.4, + "water_total": 0.0, + "average_temperature": 27.6667, + "experience_temperature": 24.7467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T18:40:05.698137+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.7, + "humidity": 77.5, + "water_total": 0.0, + "average_temperature": 27.9333, + "experience_temperature": 24.3333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T18:50:05.963489+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.7, + "humidity": 77.0, + "water_total": 0.0, + "average_temperature": 27.9333, + "experience_temperature": 24.2333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T19:00:05.584254+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.4, + "humidity": 77.9, + "water_total": 0.0, + "average_temperature": 27.7, + "experience_temperature": 25.08, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T19:10:08.364688+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 79.6, + "water_total": 0.0, + "average_temperature": 27.3667, + "experience_temperature": 24.7867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T19:20:06.465121+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 78.5, + "water_total": 0.0, + "average_temperature": 27.6667, + "experience_temperature": 24.5667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T19:30:06.322500+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 80.5, + "water_total": 0.0, + "average_temperature": 27.6, + "experience_temperature": 24.9, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T19:40:06.264193+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.7, + "humidity": 81.1, + "water_total": 0.0, + "average_temperature": 27.3333, + "experience_temperature": 24.4533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T19:50:06.458939+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 80.4, + "water_total": 0.0, + "average_temperature": 27.3, + "experience_temperature": 24.58, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T20:00:06.695690+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 80.0, + "water_total": 0.0, + "average_temperature": 27.2333, + "experience_temperature": 24.7333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T20:10:06.101269+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 80.8, + "water_total": 0.0, + "average_temperature": 27.2, + "experience_temperature": 24.56, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T20:20:06.444493+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 81.2, + "water_total": 0.0, + "average_temperature": 26.9667, + "experience_temperature": 24.7067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T20:30:06.801544+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 81.6, + "water_total": 0.0, + "average_temperature": 27.1, + "experience_temperature": 24.92, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T20:40:07.348891+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 81.7, + "water_total": 0.0, + "average_temperature": 26.9333, + "experience_temperature": 24.7733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T20:50:07.553206+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 82.3, + "water_total": 0.0, + "average_temperature": 26.9333, + "experience_temperature": 24.5933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T21:00:06.845289+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 83.9, + "water_total": 0.0, + "average_temperature": 26.9667, + "experience_temperature": 25.2467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T21:10:07.963326+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 84.9, + "water_total": 0.0, + "average_temperature": 26.8667, + "experience_temperature": 25.3467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T21:20:07.727365+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 84.7, + "water_total": 0.0, + "average_temperature": 26.7667, + "experience_temperature": 24.9067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T21:30:06.534132+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 84.7, + "water_total": 0.0, + "average_temperature": 26.7, + "experience_temperature": 25.14, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T21:40:08.983223+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 84.7, + "water_total": 0.0, + "average_temperature": 26.9333, + "experience_temperature": 25.3733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T21:50:06.705701+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 84.7, + "water_total": 0.0, + "average_temperature": 26.9333, + "experience_temperature": 25.3733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T22:00:07.181695+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 85.5, + "water_total": 0.0, + "average_temperature": 26.5333, + "experience_temperature": 24.8333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T22:10:07.273509+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 86.7, + "water_total": 0.0, + "average_temperature": 26.3667, + "experience_temperature": 24.9067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T22:20:06.795160+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.3, + "humidity": 87.0, + "water_total": 0.0, + "average_temperature": 26.2333, + "experience_temperature": 25.7333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T22:30:07.085181+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.3, + "humidity": 86.9, + "water_total": 0.0, + "average_temperature": 26.1, + "experience_temperature": 25.58, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T22:40:07.694448+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.3, + "humidity": 87.4, + "water_total": 0.0, + "average_temperature": 25.9333, + "experience_temperature": 25.5133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T22:50:06.735791+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 87.6, + "water_total": 0.0, + "average_temperature": 25.9, + "experience_temperature": 24.62, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T23:00:06.416237+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 88.2, + "water_total": 0.0, + "average_temperature": 25.7333, + "experience_temperature": 24.5733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T23:10:07.049031+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 88.7, + "water_total": 0.0, + "average_temperature": 25.7333, + "experience_temperature": 24.6733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T23:20:06.322665+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 88.6, + "water_total": 0.0, + "average_temperature": 25.5667, + "experience_temperature": 24.4867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T23:30:06.685610+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.7, + "humidity": 88.6, + "water_total": 0.0, + "average_temperature": 25.5, + "experience_temperature": 24.12, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T23:40:06.410288+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.6, + "humidity": 88.6, + "water_total": 0.0, + "average_temperature": 25.4333, + "experience_temperature": 24.3533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-07T23:50:06.055256+07:00", + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 88.9, + "water_total": 0.0, + "average_temperature": 25.3, + "experience_temperature": 24.58, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T00:00:05.998184+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.5, + "humidity": 88.9, + "water_total": 0.0, + "average_temperature": 25.3, + "experience_temperature": 24.58, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T00:10:06.553460+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.6, + "humidity": 89.7, + "water_total": 0.0, + "average_temperature": 25.1333, + "experience_temperature": 24.2733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T00:20:06.952903+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.5, + "humidity": 90.1, + "water_total": 0.0, + "average_temperature": 25.1333, + "experience_temperature": 24.6533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T00:30:06.318221+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.5, + "humidity": 90.1, + "water_total": 0.0, + "average_temperature": 25.2, + "experience_temperature": 24.72, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T00:40:07.576445+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.7, + "humidity": 89.8, + "water_total": 0.0, + "average_temperature": 25.2333, + "experience_temperature": 24.0933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T00:50:06.186114+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.7, + "humidity": 89.3, + "water_total": 0.0, + "average_temperature": 25.2, + "experience_temperature": 23.96, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T01:00:07.144975+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.7, + "humidity": 88.8, + "water_total": 0.0, + "average_temperature": 25.2, + "experience_temperature": 23.86, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T01:10:06.330674+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.7, + "humidity": 88.9, + "water_total": 0.0, + "average_temperature": 25.1333, + "experience_temperature": 23.8133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T01:20:06.419457+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.4, + "humidity": 89.4, + "water_total": 0.0, + "average_temperature": 25.1, + "experience_temperature": 24.78, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T01:30:06.444388+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.4, + "humidity": 89.4, + "water_total": 0.0, + "average_temperature": 25.1, + "experience_temperature": 24.78, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T01:40:06.613836+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 89.8, + "water_total": 0.0, + "average_temperature": 24.7, + "experience_temperature": 25.06, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T01:50:05.915120+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 90.5, + "water_total": 0.0, + "average_temperature": 24.7, + "experience_temperature": 25.2, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T02:00:06.346871+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.1, + "humidity": 90.6, + "water_total": 0.0, + "average_temperature": 24.5667, + "experience_temperature": 25.3867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T02:10:05.866633+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 90.8, + "water_total": 0.0, + "average_temperature": 24.4333, + "experience_temperature": 24.9933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T02:20:07.079185+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 90.9, + "water_total": 0.0, + "average_temperature": 24.3, + "experience_temperature": 24.88, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T02:30:07.227732+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 90.9, + "water_total": 0.0, + "average_temperature": 24.2333, + "experience_temperature": 24.8133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T02:40:06.092915+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 90.9, + "water_total": 0.0, + "average_temperature": 24.2333, + "experience_temperature": 24.8133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T02:50:06.278636+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 91.1, + "water_total": 0.0, + "average_temperature": 24.1333, + "experience_temperature": 24.7533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T03:00:07.363346+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.1, + "humidity": 91.4, + "water_total": 0.0, + "average_temperature": 23.9667, + "experience_temperature": 24.9467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T03:10:07.456250+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 91.8, + "water_total": 0.0, + "average_temperature": 23.9333, + "experience_temperature": 24.6933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T03:20:07.090082+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 91.7, + "water_total": 0.0, + "average_temperature": 23.9, + "experience_temperature": 24.64, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T03:30:05.737112+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 91.9, + "water_total": 0.0, + "average_temperature": 23.9, + "experience_temperature": 24.68, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T03:40:06.556952+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 92.1, + "water_total": 0.0, + "average_temperature": 23.7333, + "experience_temperature": 24.5533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T03:50:06.790149+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 92.1, + "water_total": 0.0, + "average_temperature": 23.7667, + "experience_temperature": 24.5867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T04:00:06.462051+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 92.1, + "water_total": 0.0, + "average_temperature": 23.7667, + "experience_temperature": 24.5867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T04:10:06.793560+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 92.0, + "water_total": 0.0, + "average_temperature": 23.6, + "experience_temperature": 24.4, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T04:20:06.437993+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.1, + "humidity": 92.1, + "water_total": 0.0, + "average_temperature": 23.5, + "experience_temperature": 24.62, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T04:30:06.211924+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 92.2, + "water_total": 0.0, + "average_temperature": 23.5, + "experience_temperature": 24.34, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T04:40:06.435987+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 92.4, + "water_total": 0.0, + "average_temperature": 23.5, + "experience_temperature": 24.38, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T04:50:06.606418+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 92.4, + "water_total": 0.0, + "average_temperature": 23.4333, + "experience_temperature": 24.3133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T05:00:06.757211+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 92.5, + "water_total": 0.0, + "average_temperature": 23.4, + "experience_temperature": 24.3, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T05:10:06.472699+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.1, + "humidity": 92.6, + "water_total": 0.0, + "average_temperature": 23.2667, + "experience_temperature": 24.4867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T05:20:05.775514+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.1, + "humidity": 92.6, + "water_total": 0.0, + "average_temperature": 23.2667, + "experience_temperature": 24.4867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T05:30:06.556205+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 92.7, + "water_total": 0.0, + "average_temperature": 23.2, + "experience_temperature": 24.14, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T05:40:06.302866+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 92.6, + "water_total": 0.0, + "average_temperature": 23.2333, + "experience_temperature": 24.1533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T05:50:06.513468+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 92.5, + "water_total": 0.0, + "average_temperature": 23.1333, + "experience_temperature": 24.0333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T06:00:06.751363+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 92.5, + "water_total": 0.0, + "average_temperature": 23.1333, + "experience_temperature": 24.0333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T06:10:06.389164+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 92.5, + "water_total": 0.0, + "average_temperature": 22.9667, + "experience_temperature": 23.8667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T06:20:06.537295+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 91.5, + "water_total": 0.0, + "average_temperature": 22.6667, + "experience_temperature": 23.3667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T06:30:06.548193+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.1, + "humidity": 90.2, + "water_total": 0.0, + "average_temperature": 22.2333, + "experience_temperature": 22.9733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T06:40:06.915762+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 89.6, + "water_total": 0.0, + "average_temperature": 22.2667, + "experience_temperature": 22.5867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T06:50:06.623748+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 89.3, + "water_total": 0.0, + "average_temperature": 22.4333, + "experience_temperature": 22.6933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T07:00:06.381034+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 87.9, + "water_total": 0.0, + "average_temperature": 22.7, + "experience_temperature": 22.68, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T07:10:06.901797+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 86.8, + "water_total": 0.0, + "average_temperature": 23.0667, + "experience_temperature": 22.8267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T07:20:07.172805+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 84.7, + "water_total": 0.0, + "average_temperature": 23.4, + "experience_temperature": 22.74, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T07:30:07.236451+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 82.9, + "water_total": 0.0, + "average_temperature": 24.0667, + "experience_temperature": 23.0467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T07:40:06.657772+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.1, + "humidity": 80.3, + "water_total": 0.0, + "average_temperature": 24.5667, + "experience_temperature": 23.3267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T07:50:06.621871+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.4, + "humidity": 79.0, + "water_total": 0.0, + "average_temperature": 25.0667, + "experience_temperature": 22.6667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T08:00:06.476619+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.4, + "humidity": 77.6, + "water_total": 0.0, + "average_temperature": 25.6, + "experience_temperature": 22.92, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T08:10:06.229865+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.5, + "humidity": 75.8, + "water_total": 0.0, + "average_temperature": 25.9, + "experience_temperature": 22.56, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T08:20:08.645362+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.5, + "humidity": 74.9, + "water_total": 0.0, + "average_temperature": 26.2333, + "experience_temperature": 22.7133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T08:30:06.061222+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.5, + "humidity": 74.9, + "water_total": 0.0, + "average_temperature": 26.2333, + "experience_temperature": 22.7133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T08:40:06.735504+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.5, + "humidity": 71.9, + "water_total": 0.0, + "average_temperature": 27.0333, + "experience_temperature": 22.9133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T08:50:07.050090+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.5, + "humidity": 70.3, + "water_total": 0.0, + "average_temperature": 27.5333, + "experience_temperature": 23.0933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T09:00:06.706341+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.9, + "humidity": 68.1, + "water_total": 0.0, + "average_temperature": 28.2333, + "experience_temperature": 22.1533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T09:10:06.679058+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.9, + "humidity": 67.7, + "water_total": 0.0, + "average_temperature": 28.6, + "experience_temperature": 22.44, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T09:20:08.153998+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.9, + "humidity": 66.4, + "water_total": 0.0, + "average_temperature": 28.8, + "experience_temperature": 22.38, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T09:30:06.172657+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.2, + "humidity": 62.8, + "water_total": 0.0, + "average_temperature": 29.1, + "experience_temperature": 21.06, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T09:40:11.911741+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.3, + "humidity": 61.2, + "water_total": 0.0, + "average_temperature": 29.6667, + "experience_temperature": 21.0067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T09:50:07.056635+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.3, + "humidity": 60.5, + "water_total": 0.0, + "average_temperature": 30.0667, + "experience_temperature": 21.2667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T10:00:07.500373+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.2, + "humidity": 59.9, + "water_total": 0.0, + "average_temperature": 30.1, + "experience_temperature": 21.48, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T10:10:09.439796+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.4, + "humidity": 61.6, + "water_total": 0.0, + "average_temperature": 29.9333, + "experience_temperature": 21.0533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T10:20:06.728390+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.3, + "humidity": 60.4, + "water_total": 0.0, + "average_temperature": 30.2667, + "experience_temperature": 21.4467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T10:30:08.635321+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.3, + "humidity": 59.4, + "water_total": 0.0, + "average_temperature": 30.3333, + "experience_temperature": 21.3133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T10:40:07.147213+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.2, + "humidity": 60.5, + "water_total": 0.0, + "average_temperature": 30.3, + "experience_temperature": 21.8, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T10:50:08.727486+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.2, + "humidity": 60.5, + "water_total": 0.0, + "average_temperature": 30.3, + "experience_temperature": 21.8, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T11:00:07.228835+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.2, + "humidity": 60.7, + "water_total": 0.0, + "average_temperature": 30.5333, + "experience_temperature": 22.0733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T11:10:07.261057+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.4, + "humidity": 61.5, + "water_total": 0.0, + "average_temperature": 30.1, + "experience_temperature": 21.2, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T11:20:09.316717+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.4, + "humidity": 61.2, + "water_total": 0.0, + "average_temperature": 30.3, + "experience_temperature": 21.34, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T11:30:09.005937+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.3, + "humidity": 60.1, + "water_total": 0.0, + "average_temperature": 30.3, + "experience_temperature": 21.42, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T11:40:07.573416+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.3, + "humidity": 61.6, + "water_total": 0.0, + "average_temperature": 30.3333, + "experience_temperature": 21.7533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T11:50:08.222100+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.2, + "humidity": 60.6, + "water_total": 0.0, + "average_temperature": 30.9, + "experience_temperature": 22.42, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T12:00:07.213929+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.4, + "humidity": 61.5, + "water_total": 0.0, + "average_temperature": 30.5667, + "experience_temperature": 21.6667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T12:10:08.923773+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.4, + "humidity": 58.2, + "water_total": 0.0, + "average_temperature": 31.0333, + "experience_temperature": 21.4733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T12:20:07.501463+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.3, + "humidity": 58.7, + "water_total": 0.0, + "average_temperature": 30.5667, + "experience_temperature": 21.4067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T12:30:07.246000+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.2, + "humidity": 61.6, + "water_total": 0.0, + "average_temperature": 30.0, + "experience_temperature": 21.72, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T12:40:09.602204+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.4, + "humidity": 61.5, + "water_total": 0.0, + "average_temperature": 30.4667, + "experience_temperature": 21.5667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T12:50:07.754380+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.8, + "humidity": 58.8, + "water_total": 0.0, + "average_temperature": 31.0667, + "experience_temperature": 20.4267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T13:00:06.926303+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.8, + "humidity": 58.8, + "water_total": 0.0, + "average_temperature": 31.0667, + "experience_temperature": 20.4267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T13:10:07.528295+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.2, + "humidity": 60.1, + "water_total": 0.0, + "average_temperature": 30.6667, + "experience_temperature": 22.0867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T13:20:06.810679+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.3, + "humidity": 59.3, + "water_total": 0.0, + "average_temperature": 30.5333, + "experience_temperature": 21.4933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T13:30:07.343470+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.4, + "humidity": 61.9, + "water_total": 0.0, + "average_temperature": 30.5667, + "experience_temperature": 21.7467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T13:40:07.487415+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.2, + "humidity": 57.5, + "water_total": 0.0, + "average_temperature": 31.0, + "experience_temperature": 21.9, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T13:50:09.165361+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.2, + "humidity": 60.8, + "water_total": 0.0, + "average_temperature": 30.4, + "experience_temperature": 21.96, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T14:10:07.895326+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.5, + "humidity": 59.9, + "water_total": 0.0, + "average_temperature": 30.7, + "experience_temperature": 21.18, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T14:20:07.148048+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.3, + "humidity": 61.1, + "water_total": 0.0, + "average_temperature": 30.3667, + "experience_temperature": 21.6867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T14:30:07.629257+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.5, + "humidity": 65.4, + "water_total": 0.0, + "average_temperature": 30.3, + "experience_temperature": 21.88, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T14:40:08.956215+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.7, + "humidity": 63.3, + "water_total": 0.0, + "average_temperature": 31.2333, + "experience_temperature": 21.7933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T14:50:06.906185+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.1, + "humidity": 67.6, + "water_total": 0.0, + "average_temperature": 30.4667, + "experience_temperature": 23.6867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T15:10:06.568002+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.9, + "humidity": 68.8, + "water_total": 0.0, + "average_temperature": 30.1667, + "experience_temperature": 24.2267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T15:20:07.112282+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.8, + "humidity": 65.9, + "water_total": 0.0, + "average_temperature": 30.3667, + "experience_temperature": 24.1467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T15:30:07.801130+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.9, + "humidity": 66.4, + "water_total": 0.0, + "average_temperature": 30.4, + "experience_temperature": 23.98, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T15:40:07.352326+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.1, + "humidity": 65.4, + "water_total": 0.0, + "average_temperature": 30.4333, + "experience_temperature": 23.2133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T15:50:07.132012+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.0, + "humidity": 65.2, + "water_total": 0.0, + "average_temperature": 30.4, + "experience_temperature": 23.44, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T16:10:07.606511+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.0, + "humidity": 65.2, + "water_total": 0.0, + "average_temperature": 30.2, + "experience_temperature": 23.24, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T16:20:06.713435+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.0, + "humidity": 65.8, + "water_total": 0.0, + "average_temperature": 30.0, + "experience_temperature": 23.16, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T16:30:08.207855+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.0, + "humidity": 66.8, + "water_total": 0.0, + "average_temperature": 29.9, + "experience_temperature": 23.26, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T16:40:07.645939+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.9, + "humidity": 66.3, + "water_total": 0.0, + "average_temperature": 29.7333, + "experience_temperature": 23.2933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T16:50:07.629500+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.9, + "humidity": 66.1, + "water_total": 0.0, + "average_temperature": 29.6, + "experience_temperature": 23.12, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T17:10:10.498275+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 2.0, + "humidity": 67.2, + "water_total": 0.0, + "average_temperature": 29.2667, + "experience_temperature": 22.7067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T17:20:08.813587+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.9, + "humidity": 67.5, + "water_total": 0.0, + "average_temperature": 29.0667, + "experience_temperature": 22.8667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T17:30:07.266138+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.6, + "humidity": 67.7, + "water_total": 0.0, + "average_temperature": 28.7, + "experience_temperature": 23.44, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T17:40:06.823764+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.6, + "humidity": 69.0, + "water_total": 0.0, + "average_temperature": 28.4333, + "experience_temperature": 23.4333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T17:50:06.768673+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.5, + "humidity": 68.9, + "water_total": 0.0, + "average_temperature": 28.2, + "experience_temperature": 23.48, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T18:00:09.295943+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.7, + "humidity": 71.1, + "water_total": 0.0, + "average_temperature": 27.7667, + "experience_temperature": 22.8867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T18:10:07.047462+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.6, + "humidity": 70.9, + "water_total": 0.0, + "average_temperature": 27.7, + "experience_temperature": 23.08, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T18:20:06.930212+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.6, + "humidity": 73.5, + "water_total": 0.0, + "average_temperature": 27.1667, + "experience_temperature": 23.0667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T18:30:08.107195+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.6, + "humidity": 75.0, + "water_total": 0.0, + "average_temperature": 26.9, + "experience_temperature": 23.1, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T18:40:09.415444+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.6, + "humidity": 75.3, + "water_total": 0.0, + "average_temperature": 26.9333, + "experience_temperature": 23.1933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T18:50:07.288350+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.8, + "humidity": 75.3, + "water_total": 0.0, + "average_temperature": 26.9, + "experience_temperature": 22.56, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T19:00:06.940700+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.8, + "humidity": 75.3, + "water_total": 0.0, + "average_temperature": 26.9, + "experience_temperature": 22.56, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T19:10:06.589352+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.5, + "humidity": 75.9, + "water_total": 0.0, + "average_temperature": 26.8, + "experience_temperature": 23.48, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T19:20:07.222823+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.6, + "humidity": 76.4, + "water_total": 0.0, + "average_temperature": 27.0333, + "experience_temperature": 23.5133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T19:30:05.867877+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.5, + "humidity": 75.6, + "water_total": 0.0, + "average_temperature": 27.0, + "experience_temperature": 23.62, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T19:40:06.530618+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.6, + "humidity": 75.4, + "water_total": 0.0, + "average_temperature": 27.1, + "experience_temperature": 23.38, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T19:50:28.781911+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.7, + "humidity": 76.7, + "water_total": 0.0, + "average_temperature": 26.8667, + "experience_temperature": 23.1067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T20:00:06.318477+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.7, + "humidity": 76.7, + "water_total": 0.0, + "average_temperature": 26.8667, + "experience_temperature": 23.1067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T20:10:05.765838+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.5, + "humidity": 77.3, + "water_total": 0.0, + "average_temperature": 26.7, + "experience_temperature": 23.66, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T20:20:06.560361+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.6, + "humidity": 77.3, + "water_total": 0.0, + "average_temperature": 26.7333, + "experience_temperature": 23.3933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T20:30:10.436157+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.6, + "humidity": 78.1, + "water_total": 0.0, + "average_temperature": 26.5, + "experience_temperature": 23.32, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T20:40:06.908872+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.5, + "humidity": 78.1, + "water_total": 0.0, + "average_temperature": 26.4333, + "experience_temperature": 23.5533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T20:50:05.685268+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.6, + "humidity": 77.7, + "water_total": 0.0, + "average_temperature": 26.5667, + "experience_temperature": 23.3067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T21:00:05.899955+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.6, + "humidity": 77.2, + "water_total": 0.0, + "average_temperature": 26.6, + "experience_temperature": 23.24, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T21:10:06.501780+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.1, + "humidity": 77.7, + "water_total": 0.0, + "average_temperature": 26.5667, + "experience_temperature": 24.8067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T21:20:05.835526+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.4, + "humidity": 78.6, + "water_total": 0.0, + "average_temperature": 26.3333, + "experience_temperature": 23.8533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T21:30:06.711276+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.2, + "humidity": 79.8, + "water_total": 0.0, + "average_temperature": 26.0, + "experience_temperature": 24.36, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T21:40:06.215182+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.6, + "humidity": 80.2, + "water_total": 0.0, + "average_temperature": 25.9, + "experience_temperature": 23.14, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T21:50:06.088270+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.7, + "humidity": 80.5, + "water_total": 0.0, + "average_temperature": 25.6333, + "experience_temperature": 22.6333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T22:00:07.029752+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.7, + "humidity": 80.5, + "water_total": 0.0, + "average_temperature": 25.6333, + "experience_temperature": 22.6333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T22:10:05.554731+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.7, + "humidity": 80.7, + "water_total": 0.0, + "average_temperature": 25.9, + "experience_temperature": 22.94, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T22:20:05.869165+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.5, + "humidity": 80.4, + "water_total": 0.0, + "average_temperature": 25.8667, + "experience_temperature": 23.4467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T22:30:07.524072+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.7, + "humidity": 80.4, + "water_total": 0.0, + "average_temperature": 25.7667, + "experience_temperature": 22.7467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T22:40:06.304471+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.5, + "humidity": 81.3, + "water_total": 0.0, + "average_temperature": 25.7333, + "experience_temperature": 23.4933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T22:50:06.551329+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.5, + "humidity": 81.6, + "water_total": 0.0, + "average_temperature": 25.7, + "experience_temperature": 23.52, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T23:00:06.783485+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.7, + "humidity": 82.2, + "water_total": 0.0, + "average_temperature": 25.6333, + "experience_temperature": 22.9733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T23:10:05.761168+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.5, + "humidity": 82.7, + "water_total": 0.0, + "average_temperature": 25.5, + "experience_temperature": 23.54, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T23:20:06.011676+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.4, + "humidity": 83.1, + "water_total": 0.0, + "average_temperature": 25.4333, + "experience_temperature": 23.8533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T23:30:06.333039+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.6, + "humidity": 82.4, + "water_total": 0.0, + "average_temperature": 25.6667, + "experience_temperature": 23.3467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T23:40:06.342871+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.7, + "humidity": 81.9, + "water_total": 0.0, + "average_temperature": 25.7333, + "experience_temperature": 23.0133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-08T23:50:06.127090+07:00", + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.4, + "humidity": 82.3, + "water_total": 0.0, + "average_temperature": 25.7, + "experience_temperature": 23.96, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T00:00:05.563129+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.4, + "humidity": 82.3, + "water_total": 0.0, + "average_temperature": 25.7, + "experience_temperature": 23.96, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T00:10:05.547008+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.5, + "humidity": 83.9, + "water_total": 0.0, + "average_temperature": 25.4, + "experience_temperature": 23.68, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T00:20:05.638570+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.6, + "humidity": 84.1, + "water_total": 0.0, + "average_temperature": 25.2333, + "experience_temperature": 23.2533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T00:30:05.645078+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.6, + "humidity": 84.2, + "water_total": 0.0, + "average_temperature": 25.1, + "experience_temperature": 23.14, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T00:40:06.089438+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.6, + "humidity": 84.1, + "water_total": 0.0, + "average_temperature": 25.1, + "experience_temperature": 23.12, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T00:50:06.110468+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.3, + "humidity": 84.2, + "water_total": 0.0, + "average_temperature": 25.0667, + "experience_temperature": 24.0067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T01:00:06.058969+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.3, + "humidity": 84.4, + "water_total": 0.0, + "average_temperature": 25.0333, + "experience_temperature": 24.0133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T01:10:05.672260+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 84.5, + "water_total": 0.0, + "average_temperature": 25.0, + "experience_temperature": 24.3, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T01:20:06.171045+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 84.7, + "water_total": 0.0, + "average_temperature": 24.9333, + "experience_temperature": 24.2733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T01:30:06.861315+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.1, + "humidity": 84.8, + "water_total": 0.0, + "average_temperature": 24.9333, + "experience_temperature": 24.5933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T01:40:07.221410+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.1, + "humidity": 84.9, + "water_total": 0.0, + "average_temperature": 24.8, + "experience_temperature": 24.48, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T01:50:06.106555+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 85.3, + "water_total": 0.0, + "average_temperature": 24.7, + "experience_temperature": 24.16, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T02:00:06.176066+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.1, + "humidity": 85.8, + "water_total": 0.0, + "average_temperature": 24.5667, + "experience_temperature": 24.4267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T02:10:06.679762+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 86.3, + "water_total": 0.0, + "average_temperature": 24.4333, + "experience_temperature": 24.0933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T02:20:06.135112+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 86.7, + "water_total": 0.0, + "average_temperature": 24.2333, + "experience_temperature": 23.9733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T02:30:05.638194+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 87.6, + "water_total": 0.0, + "average_temperature": 24.1667, + "experience_temperature": 24.0867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T02:40:05.520362+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 88.1, + "water_total": 0.0, + "average_temperature": 24.1, + "experience_temperature": 24.12, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T02:50:05.825705+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.1, + "humidity": 88.4, + "water_total": 0.0, + "average_temperature": 23.9333, + "experience_temperature": 24.3133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T03:00:06.329989+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 88.4, + "water_total": 0.0, + "average_temperature": 23.7667, + "experience_temperature": 23.8467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T03:10:06.216620+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 88.8, + "water_total": 0.0, + "average_temperature": 23.6667, + "experience_temperature": 23.8267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T03:20:05.668266+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.1, + "humidity": 89.1, + "water_total": 0.0, + "average_temperature": 23.6, + "experience_temperature": 24.12, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T03:30:06.361306+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 89.1, + "water_total": 0.0, + "average_temperature": 23.6, + "experience_temperature": 23.82, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T03:40:07.177811+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 89.2, + "water_total": 0.0, + "average_temperature": 23.6, + "experience_temperature": 23.84, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T03:50:06.087418+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 89.2, + "water_total": 0.0, + "average_temperature": 23.6, + "experience_temperature": 23.84, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T04:00:05.892541+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 89.3, + "water_total": 0.0, + "average_temperature": 23.6, + "experience_temperature": 23.86, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T04:10:06.066457+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.1, + "humidity": 89.3, + "water_total": 0.0, + "average_temperature": 23.6, + "experience_temperature": 24.16, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T04:20:05.891204+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 89.2, + "water_total": 0.0, + "average_temperature": 23.5667, + "experience_temperature": 23.8067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T04:30:05.845819+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 89.4, + "water_total": 0.0, + "average_temperature": 23.4333, + "experience_temperature": 23.7133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T04:40:05.813833+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 89.4, + "water_total": 0.0, + "average_temperature": 23.4333, + "experience_temperature": 23.7133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T04:50:06.284125+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 89.7, + "water_total": 0.0, + "average_temperature": 23.3, + "experience_temperature": 23.64, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T05:00:05.922874+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 90.0, + "water_total": 0.0, + "average_temperature": 23.1333, + "experience_temperature": 23.5333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T05:10:06.265345+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 89.8, + "water_total": 0.0, + "average_temperature": 23.1333, + "experience_temperature": 23.4933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T05:20:06.338126+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.1, + "humidity": 89.7, + "water_total": 0.0, + "average_temperature": 23.0667, + "experience_temperature": 23.7067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T05:30:07.261402+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.0, + "humidity": 89.7, + "water_total": 0.0, + "average_temperature": 23.0667, + "experience_temperature": 24.0067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T05:40:05.737031+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 89.5, + "water_total": 0.0, + "average_temperature": 23.0, + "experience_temperature": 23.3, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T05:50:06.290788+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 89.7, + "water_total": 0.0, + "average_temperature": 22.9, + "experience_temperature": 23.24, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T06:00:05.900476+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.1, + "humidity": 89.9, + "water_total": 0.0, + "average_temperature": 22.9, + "experience_temperature": 23.58, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T06:10:06.334907+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 89.8, + "water_total": 0.0, + "average_temperature": 22.9333, + "experience_temperature": 23.2933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T06:20:05.702511+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 89.8, + "water_total": 0.0, + "average_temperature": 22.9333, + "experience_temperature": 23.2933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T06:30:07.279263+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 90.0, + "water_total": 0.0, + "average_temperature": 22.9, + "experience_temperature": 23.3, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T06:40:06.061109+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 90.2, + "water_total": 0.0, + "average_temperature": 22.9333, + "experience_temperature": 23.3733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T06:50:06.492701+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.3, + "humidity": 90.1, + "water_total": 0.0, + "average_temperature": 23.1, + "experience_temperature": 23.22, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T07:00:07.836992+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 89.7, + "water_total": 0.0, + "average_temperature": 23.2333, + "experience_temperature": 23.5733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T07:10:06.294987+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 89.2, + "water_total": 0.0, + "average_temperature": 23.5333, + "experience_temperature": 23.7733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T07:20:05.953522+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.1, + "humidity": 88.8, + "water_total": 0.0, + "average_temperature": 23.7333, + "experience_temperature": 24.1933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T07:30:06.479799+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.1, + "humidity": 88.2, + "water_total": 0.0, + "average_temperature": 24.1, + "experience_temperature": 24.44, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T07:40:07.040322+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.1, + "humidity": 87.2, + "water_total": 0.0, + "average_temperature": 24.4, + "experience_temperature": 24.54, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T07:50:06.213749+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 85.9, + "water_total": 0.0, + "average_temperature": 24.8333, + "experience_temperature": 24.4133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T08:00:07.339325+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.2, + "humidity": 85.9, + "water_total": 0.0, + "average_temperature": 24.8333, + "experience_temperature": 24.4133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T08:10:06.268035+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 1.5, + "humidity": 84.5, + "water_total": 0.0, + "average_temperature": 25.3333, + "experience_temperature": 23.7333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T08:20:08.319694+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 82.4, + "water_total": 0.0, + "average_temperature": 26.4, + "experience_temperature": 26.78, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T08:30:07.583515+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.0, + "humidity": 80.7, + "water_total": 0.0, + "average_temperature": 26.8, + "experience_temperature": 28.94, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T08:40:06.473993+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.0, + "humidity": 89.3, + "water_total": 0.0, + "average_temperature": 26.0667, + "experience_temperature": 29.9267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T08:50:06.725651+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.0, + "humidity": 89.3, + "water_total": 0.0, + "average_temperature": 26.0667, + "experience_temperature": 29.9267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T09:00:06.694088+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.6, + "humidity": 78.8, + "water_total": 0.0, + "average_temperature": 28.1667, + "experience_temperature": 28.1267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T09:10:06.542241+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 75.0, + "water_total": 0.0, + "average_temperature": 28.6333, + "experience_temperature": 27.5333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T09:20:07.225815+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.6, + "humidity": 72.8, + "water_total": 0.0, + "average_temperature": 29.2667, + "experience_temperature": 28.0267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T09:30:13.154302+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 70.6, + "water_total": 0.0, + "average_temperature": 29.8667, + "experience_temperature": 27.5867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T09:40:07.021629+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 68.3, + "water_total": 0.0, + "average_temperature": 30.0667, + "experience_temperature": 27.3267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T09:50:07.198772+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 68.3, + "water_total": 0.0, + "average_temperature": 30.0667, + "experience_temperature": 27.3267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T10:00:06.796059+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 67.1, + "water_total": 0.0, + "average_temperature": 30.4667, + "experience_temperature": 27.4867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T10:10:08.600985+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 61.7, + "water_total": 0.0, + "average_temperature": 31.0333, + "experience_temperature": 27.2733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T10:20:06.519003+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 62.1, + "water_total": 0.0, + "average_temperature": 31.3, + "experience_temperature": 27.32, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T10:30:06.555229+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 63.3, + "water_total": 0.0, + "average_temperature": 31.6667, + "experience_temperature": 27.9267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T10:40:06.208532+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 59.3, + "water_total": 0.0, + "average_temperature": 31.8333, + "experience_temperature": 27.5933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T10:50:07.167391+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.6, + "humidity": 59.5, + "water_total": 0.0, + "average_temperature": 32.0, + "experience_temperature": 28.1, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T11:00:10.377124+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.6, + "humidity": 56.8, + "water_total": 0.0, + "average_temperature": 32.1667, + "experience_temperature": 27.7267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T11:10:06.511011+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 54.3, + "water_total": 0.0, + "average_temperature": 32.2667, + "experience_temperature": 27.0267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T11:20:07.151357+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.6, + "humidity": 53.1, + "water_total": 0.0, + "average_temperature": 32.7333, + "experience_temperature": 27.5533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T11:30:06.765614+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 52.9, + "water_total": 0.0, + "average_temperature": 32.8, + "experience_temperature": 27.28, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T11:40:07.635283+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 51.9, + "water_total": 0.0, + "average_temperature": 33.0333, + "experience_temperature": 27.0133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T11:50:05.776440+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 51.9, + "water_total": 0.0, + "average_temperature": 33.0333, + "experience_temperature": 27.0133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T12:00:06.661279+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.6, + "humidity": 51.3, + "water_total": 0.0, + "average_temperature": 33.3333, + "experience_temperature": 27.7933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T12:10:07.588443+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 50.7, + "water_total": 0.0, + "average_temperature": 33.5333, + "experience_temperature": 27.5733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T12:20:06.337069+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 50.7, + "water_total": 0.0, + "average_temperature": 33.5333, + "experience_temperature": 27.5733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T12:30:06.852788+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 50.6, + "water_total": 0.0, + "average_temperature": 33.7667, + "experience_temperature": 27.7867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T12:40:06.586714+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.9, + "humidity": 49.9, + "water_total": 0.0, + "average_temperature": 34.0333, + "experience_temperature": 27.3133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T12:50:06.561976+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 49.0, + "water_total": 0.0, + "average_temperature": 34.0, + "experience_temperature": 27.7, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T13:00:05.642947+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.9, + "humidity": 49.2, + "water_total": 0.0, + "average_temperature": 34.0667, + "experience_temperature": 27.2067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T13:10:05.939939+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 47.4, + "water_total": 0.0, + "average_temperature": 33.9, + "experience_temperature": 27.28, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T13:20:06.701590+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 47.8, + "water_total": 0.0, + "average_temperature": 33.8, + "experience_temperature": 27.26, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T13:30:07.206417+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 48.6, + "water_total": 0.0, + "average_temperature": 33.5, + "experience_temperature": 27.12, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T13:40:06.565439+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 48.6, + "water_total": 0.0, + "average_temperature": 33.5, + "experience_temperature": 27.12, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T13:50:07.074665+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 44.1, + "water_total": 0.0, + "average_temperature": 34.5333, + "experience_temperature": 26.9533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T14:10:06.797266+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.6, + "humidity": 43.2, + "water_total": 0.0, + "average_temperature": 34.4, + "experience_temperature": 27.24, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T14:20:07.561842+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 41.4, + "water_total": 0.0, + "average_temperature": 34.3333, + "experience_temperature": 26.5133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T14:30:06.272378+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 44.0, + "water_total": 0.0, + "average_temperature": 34.4, + "experience_temperature": 26.8, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T14:40:06.969526+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 42.6, + "water_total": 0.0, + "average_temperature": 34.1667, + "experience_temperature": 26.5867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T14:50:06.785321+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 41.8, + "water_total": 0.0, + "average_temperature": 33.8667, + "experience_temperature": 26.1267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T15:10:07.595250+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 44.4, + "water_total": 0.0, + "average_temperature": 33.1667, + "experience_temperature": 25.9467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T15:20:06.148320+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 45.1, + "water_total": 0.0, + "average_temperature": 33.2, + "experience_temperature": 25.82, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T15:30:08.549187+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 45.1, + "water_total": 0.0, + "average_temperature": 33.2, + "experience_temperature": 25.82, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T15:40:06.310039+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 46.0, + "water_total": 0.0, + "average_temperature": 33.2, + "experience_temperature": 26.3, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T15:50:05.650182+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.9, + "humidity": 43.3, + "water_total": 0.0, + "average_temperature": 33.0667, + "experience_temperature": 25.0267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T16:10:06.119001+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.6, + "humidity": 78.9, + "water_total": 0.0, + "average_temperature": 28.1667, + "experience_temperature": 28.1467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T16:20:06.073968+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.6, + "humidity": 47.7, + "water_total": 0.0, + "average_temperature": 32.1, + "experience_temperature": 25.84, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T16:30:06.273187+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.6, + "humidity": 48.0, + "water_total": 0.0, + "average_temperature": 31.5333, + "experience_temperature": 25.3333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T16:40:06.708917+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 51.7, + "water_total": 0.0, + "average_temperature": 31.6667, + "experience_temperature": 25.9067, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T16:50:08.826924+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 55.4, + "water_total": 0.0, + "average_temperature": 31.5333, + "experience_temperature": 26.2133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T17:10:05.950105+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.6, + "humidity": 63.9, + "water_total": 0.0, + "average_temperature": 30.2333, + "experience_temperature": 27.2133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T17:20:05.406041+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 65.4, + "water_total": 0.0, + "average_temperature": 30.2, + "experience_temperature": 26.88, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T17:30:06.515470+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 66.7, + "water_total": 0.0, + "average_temperature": 29.9, + "experience_temperature": 27.14, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T17:40:05.906615+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 68.2, + "water_total": 0.0, + "average_temperature": 29.6, + "experience_temperature": 26.84, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T17:50:05.836327+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 69.4, + "water_total": 0.0, + "average_temperature": 29.3667, + "experience_temperature": 26.8467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T18:00:06.487673+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 70.6, + "water_total": 0.0, + "average_temperature": 28.9667, + "experience_temperature": 26.6867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T18:10:07.028512+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 71.7, + "water_total": 0.0, + "average_temperature": 28.7, + "experience_temperature": 26.94, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T18:20:07.650857+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 72.3, + "water_total": 0.0, + "average_temperature": 28.4667, + "experience_temperature": 26.5267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T18:30:06.479957+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 72.3, + "water_total": 0.0, + "average_temperature": 28.4667, + "experience_temperature": 26.5267, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T18:40:06.525084+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 72.8, + "water_total": 0.0, + "average_temperature": 28.3, + "experience_temperature": 26.76, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T18:50:07.007406+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 74.8, + "water_total": 0.0, + "average_temperature": 27.9333, + "experience_temperature": 26.7933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T19:00:06.633064+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 75.5, + "water_total": 0.0, + "average_temperature": 27.8667, + "experience_temperature": 26.8667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T19:10:06.518845+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 75.6, + "water_total": 0.0, + "average_temperature": 27.7, + "experience_temperature": 26.72, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T19:20:08.589867+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 76.0, + "water_total": 0.0, + "average_temperature": 27.6, + "experience_temperature": 26.4, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T19:30:06.263455+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 76.2, + "water_total": 0.0, + "average_temperature": 27.4333, + "experience_temperature": 26.2733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T19:40:05.694115+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 76.2, + "water_total": 0.0, + "average_temperature": 27.4333, + "experience_temperature": 26.2733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T19:50:06.443538+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.6, + "humidity": 76.6, + "water_total": 0.0, + "average_temperature": 27.3, + "experience_temperature": 26.82, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T20:00:06.590684+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.6, + "humidity": 76.6, + "water_total": 0.0, + "average_temperature": 27.3, + "experience_temperature": 26.82, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T20:10:08.354348+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 78.5, + "water_total": 0.0, + "average_temperature": 26.8667, + "experience_temperature": 26.4667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T20:20:07.141057+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 78.5, + "water_total": 0.0, + "average_temperature": 26.8667, + "experience_temperature": 26.4667, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T20:30:06.684929+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 80.1, + "water_total": 0.0, + "average_temperature": 26.4667, + "experience_temperature": 26.3867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T20:40:06.230506+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.6, + "humidity": 80.6, + "water_total": 0.0, + "average_temperature": 26.3333, + "experience_temperature": 26.6533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T20:50:06.812680+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 81.0, + "water_total": 0.0, + "average_temperature": 26.2, + "experience_temperature": 26.0, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T21:00:12.592412+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 82.1, + "water_total": 0.0, + "average_temperature": 26.0667, + "experience_temperature": 26.0867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T21:10:09.685175+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.6, + "humidity": 82.9, + "water_total": 0.0, + "average_temperature": 25.9667, + "experience_temperature": 26.7467, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T21:20:05.681628+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 83.4, + "water_total": 0.0, + "average_temperature": 25.8333, + "experience_temperature": 26.4133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T21:30:07.286984+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 84.0, + "water_total": 0.0, + "average_temperature": 25.7, + "experience_temperature": 26.4, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T21:40:07.029345+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 84.3, + "water_total": 0.0, + "average_temperature": 25.5333, + "experience_temperature": 26.2933, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T21:50:07.355124+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 84.4, + "water_total": 0.0, + "average_temperature": 25.4333, + "experience_temperature": 26.2133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T22:00:06.260246+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 84.4, + "water_total": 0.0, + "average_temperature": 25.4333, + "experience_temperature": 26.2133, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T22:10:05.537216+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 85.0, + "water_total": 0.0, + "average_temperature": 25.3333, + "experience_temperature": 26.2333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T22:20:05.964092+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 85.0, + "water_total": 0.0, + "average_temperature": 25.2, + "experience_temperature": 26.1, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T22:30:06.241111+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 85.6, + "water_total": 0.0, + "average_temperature": 25.0, + "experience_temperature": 26.02, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T22:40:06.984580+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 86.0, + "water_total": 0.0, + "average_temperature": 24.8333, + "experience_temperature": 25.9333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T22:50:07.142219+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 86.1, + "water_total": 0.0, + "average_temperature": 24.7667, + "experience_temperature": 25.8867, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T23:00:06.633385+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 85.7, + "water_total": 0.0, + "average_temperature": 24.7333, + "experience_temperature": 25.7733, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T23:10:07.230131+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.6, + "humidity": 85.0, + "water_total": 0.0, + "average_temperature": 24.5333, + "experience_temperature": 25.7333, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T23:20:07.613470+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 84.3, + "water_total": 0.0, + "average_temperature": 24.5, + "experience_temperature": 25.26, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T23:30:06.586759+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 83.6, + "water_total": 0.0, + "average_temperature": 24.4333, + "experience_temperature": 25.0533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T23:40:05.966598+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.8, + "humidity": 82.6, + "water_total": 0.0, + "average_temperature": 24.3333, + "experience_temperature": 24.4533, + "chill_factor": 3.0 + }, + { + "timestamp": "2026-07-09T23:50:07.002269+07:00", + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 82.0, + "water_total": 0.0, + "average_temperature": 24.2, + "experience_temperature": 24.5, + "chill_factor": 3.0 + } + ] +} diff --git a/scripts/iot_panel_cycle_extract.json b/scripts/iot_panel_cycle_extract.json new file mode 100644 index 0000000..f97019d --- /dev/null +++ b/scripts/iot_panel_cycle_extract.json @@ -0,0 +1,1105 @@ +{ + "cycle_start": "2026-05-22", + "cycle_end": "2026-07-09", + "experience_temperature": "avg_temp - (wind_speed * chill_factor - (humidity-70)/5); wind_speed is sensor m/s not fan count", + "flocks": [ + { + "name": "Lantai 1", + "iot_flock_id": "686df69f407b21002da8750c", + "source": "api", + "rows": [ + { + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 1667.0, + "average_temperature": 34.1667, + "experience_temperature": 20.1867, + "chill_factor": 8.0, + "cycle_day": 0 + }, + { + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 286.0, + "average_temperature": 34.2333, + "experience_temperature": 20.2333, + "chill_factor": 7.8333, + "cycle_day": 1 + }, + { + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 0.1, + "water_total": 3720.0, + "average_temperature": 33.0, + "experience_temperature": 19.02, + "chill_factor": 7.6667, + "cycle_day": 2 + }, + { + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 0.0, + "water_total": 9045.0, + "average_temperature": 32.3667, + "experience_temperature": 18.3667, + "chill_factor": 7.5, + "cycle_day": 3 + }, + { + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 85.9, + "water_total": 681.0, + "average_temperature": 32.7333, + "experience_temperature": 35.9133, + "chill_factor": 7.3333, + "cycle_day": 4 + }, + { + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 79.9, + "water_total": 582.0, + "average_temperature": 31.5, + "experience_temperature": 33.48, + "chill_factor": 7.1667, + "cycle_day": 5 + }, + { + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 79.8, + "water_total": 1065.0, + "average_temperature": 30.4333, + "experience_temperature": 32.3933, + "chill_factor": 7.0, + "cycle_day": 6 + }, + { + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 83.1, + "water_total": 890.0, + "average_temperature": 30.1333, + "experience_temperature": 32.7533, + "chill_factor": 6.8571, + "cycle_day": 7 + }, + { + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 84.7, + "water_total": 10.0, + "average_temperature": 29.5667, + "experience_temperature": 32.5067, + "chill_factor": 6.7143, + "cycle_day": 8 + }, + { + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 83.7, + "water_total": 10.0, + "average_temperature": 29.3, + "experience_temperature": 32.04, + "chill_factor": 6.5714, + "cycle_day": 9 + }, + { + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 84.4, + "water_total": 1139.0, + "average_temperature": 29.1, + "experience_temperature": 31.98, + "chill_factor": 6.4286, + "cycle_day": 10 + }, + { + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.3, + "humidity": 82.9, + "water_total": 903.0, + "average_temperature": 29.4, + "experience_temperature": 30.0943, + "chill_factor": 6.2857, + "cycle_day": 11 + }, + { + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.2, + "humidity": 83.1, + "water_total": 1583.0, + "average_temperature": 29.8333, + "experience_temperature": 31.2248, + "chill_factor": 6.1429, + "cycle_day": 12 + }, + { + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.2, + "humidity": 86.2, + "water_total": 55.0, + "average_temperature": 29.2667, + "experience_temperature": 31.3067, + "chill_factor": 6.0, + "cycle_day": 13 + }, + { + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.2, + "humidity": 83.0, + "water_total": 23.0, + "average_temperature": 29.7667, + "experience_temperature": 31.2095, + "chill_factor": 5.7857, + "cycle_day": 14 + }, + { + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.1, + "humidity": 79.0, + "water_total": 2619.0, + "average_temperature": 29.3, + "experience_temperature": 30.5429, + "chill_factor": 5.5714, + "cycle_day": 15 + }, + { + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.1, + "humidity": 80.4, + "water_total": 1641.0, + "average_temperature": 28.9333, + "experience_temperature": 30.4776, + "chill_factor": 5.3571, + "cycle_day": 16 + }, + { + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.4, + "humidity": 82.6, + "water_total": 1831.0, + "average_temperature": 28.0333, + "experience_temperature": 28.4962, + "chill_factor": 5.1429, + "cycle_day": 17 + }, + { + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.7, + "humidity": 84.1, + "water_total": 1898.0, + "average_temperature": 27.8, + "experience_temperature": 27.17, + "chill_factor": 4.9286, + "cycle_day": 18 + }, + { + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.8, + "humidity": 84.9, + "water_total": 2159.0, + "average_temperature": 27.5, + "experience_temperature": 26.7086, + "chill_factor": 4.7143, + "cycle_day": 19 + }, + { + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.2, + "humidity": 84.3, + "water_total": 2092.0, + "average_temperature": 27.6333, + "experience_temperature": 25.0933, + "chill_factor": 4.5, + "cycle_day": 20 + }, + { + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.2, + "humidity": 82.5, + "water_total": 1995.0, + "average_temperature": 27.8333, + "experience_temperature": 25.1048, + "chill_factor": 4.3571, + "cycle_day": 21 + }, + { + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.2, + "humidity": 83.1, + "water_total": 1800.0, + "average_temperature": 27.7, + "experience_temperature": 25.2629, + "chill_factor": 4.2143, + "cycle_day": 22 + }, + { + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.2, + "humidity": 85.1, + "water_total": 1596.0, + "average_temperature": 27.9, + "experience_temperature": 26.0343, + "chill_factor": 4.0714, + "cycle_day": 23 + }, + { + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.2, + "humidity": 89.0, + "water_total": 7602.0, + "average_temperature": 25.9333, + "experience_temperature": 25.019, + "chill_factor": 3.9286, + "cycle_day": 24 + }, + { + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.1, + "humidity": 83.7, + "water_total": 1561.0, + "average_temperature": 26.8333, + "experience_temperature": 25.409, + "chill_factor": 3.7857, + "cycle_day": 25 + }, + { + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.6, + "humidity": 81.3, + "water_total": 1666.0, + "average_temperature": 27.5667, + "experience_temperature": 23.9981, + "chill_factor": 3.6429, + "cycle_day": 26 + }, + { + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.4, + "humidity": 84.4, + "water_total": 8274.0, + "average_temperature": 26.5667, + "experience_temperature": 24.5467, + "chill_factor": 3.5, + "cycle_day": 27 + }, + { + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.6, + "humidity": 85.3, + "water_total": 2091.0, + "average_temperature": 26.8333, + "experience_temperature": 24.2933, + "chill_factor": 3.5, + "cycle_day": 28 + }, + { + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.7, + "humidity": 87.8, + "water_total": 2370.0, + "average_temperature": 25.6, + "experience_temperature": 23.21, + "chill_factor": 3.5, + "cycle_day": 29 + }, + { + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.6, + "humidity": 89.7, + "water_total": 2477.0, + "average_temperature": 26.6, + "experience_temperature": 24.94, + "chill_factor": 3.5, + "cycle_day": 30 + }, + { + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.9, + "humidity": 88.6, + "water_total": 2221.0, + "average_temperature": 26.8, + "experience_temperature": 23.87, + "chill_factor": 3.5, + "cycle_day": 31 + }, + { + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.9, + "humidity": 89.0, + "water_total": 1370.0, + "average_temperature": 26.6333, + "experience_temperature": 23.7833, + "chill_factor": 3.5, + "cycle_day": 32 + }, + { + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.9, + "humidity": 90.5, + "water_total": 786.0, + "average_temperature": 26.7, + "experience_temperature": 24.15, + "chill_factor": 3.5, + "cycle_day": 33 + }, + { + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.3, + "humidity": 86.6, + "water_total": 549.0, + "average_temperature": 26.2, + "experience_temperature": 21.47, + "chill_factor": 3.5, + "cycle_day": 34 + }, + { + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.1, + "humidity": 90.2, + "water_total": 1247.0, + "average_temperature": 25.8333, + "experience_temperature": 26.1019, + "chill_factor": 3.4286, + "cycle_day": 35 + }, + { + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.8, + "humidity": 92.3, + "water_total": 4069.0, + "average_temperature": 26.6667, + "experience_temperature": 25.0838, + "chill_factor": 3.3571, + "cycle_day": 36 + }, + { + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.2, + "humidity": 90.9, + "water_total": 134.0, + "average_temperature": 25.3333, + "experience_temperature": 25.5705, + "chill_factor": 3.2857, + "cycle_day": 37 + }, + { + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.4, + "humidity": 88.2, + "water_total": 2050.0, + "average_temperature": 26.6, + "experience_temperature": 25.74, + "chill_factor": 3.2143, + "cycle_day": 38 + }, + { + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.6, + "humidity": 84.3, + "water_total": 148.0, + "average_temperature": 25.9, + "experience_temperature": 23.7314, + "chill_factor": 3.1429, + "cycle_day": 39 + }, + { + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.5, + "humidity": 86.8, + "water_total": 123.0, + "average_temperature": 25.5, + "experience_temperature": 24.2529, + "chill_factor": 3.0714, + "cycle_day": 40 + }, + { + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.6, + "humidity": 88.5, + "water_total": 193.0, + "average_temperature": 25.7333, + "experience_temperature": 24.6333, + "chill_factor": 3.0, + "cycle_day": 41 + }, + { + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.6, + "humidity": 84.9, + "water_total": 40.0, + "average_temperature": 26.5667, + "experience_temperature": 24.7467, + "chill_factor": 3.0, + "cycle_day": 42 + }, + { + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.6, + "humidity": 85.4, + "water_total": 0.0, + "average_temperature": 25.7333, + "experience_temperature": 24.0133, + "chill_factor": 3.0, + "cycle_day": 43 + }, + { + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.5, + "humidity": 87.3, + "water_total": 0.0, + "average_temperature": 25.8, + "experience_temperature": 24.76, + "chill_factor": 3.0, + "cycle_day": 44 + }, + { + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.7, + "humidity": 87.1, + "water_total": 0.0, + "average_temperature": 25.4, + "experience_temperature": 23.72, + "chill_factor": 3.0, + "cycle_day": 45 + }, + { + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.5, + "humidity": 88.9, + "water_total": 0.0, + "average_temperature": 25.3, + "experience_temperature": 24.58, + "chill_factor": 3.0, + "cycle_day": 46 + }, + { + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.4, + "humidity": 82.3, + "water_total": 0.0, + "average_temperature": 25.7, + "experience_temperature": 23.96, + "chill_factor": 3.0, + "cycle_day": 47 + }, + { + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.7, + "humidity": 82.0, + "water_total": 0.0, + "average_temperature": 24.2, + "experience_temperature": 24.5, + "chill_factor": 3.0, + "cycle_day": 48 + } + ] + }, + { + "name": "Lantai 2", + "iot_flock_id": "686df69f407b21002da8750d", + "source": "cloned_from_lantai_1", + "adjust": { + "wind_speed_delta": -0.05, + "humidity_delta": 1.2, + "average_temperature_delta": -0.3, + "water_total_factor": 0.96 + }, + "rows": [ + { + "date": "2026-05-22", + "age": 1, + "wind_speed": 0.0, + "humidity": 1.3, + "water_total": 1600.3, + "average_temperature": 33.8667, + "experience_temperature": 20.1267, + "chill_factor": 8.0, + "cycle_day": 0 + }, + { + "date": "2026-05-23", + "age": 2, + "wind_speed": 0.0, + "humidity": 1.2, + "water_total": 274.6, + "average_temperature": 33.9333, + "experience_temperature": 20.1733, + "chill_factor": 7.8333, + "cycle_day": 1 + }, + { + "date": "2026-05-24", + "age": 3, + "wind_speed": 0.0, + "humidity": 1.3, + "water_total": 3571.2, + "average_temperature": 32.7, + "experience_temperature": 18.96, + "chill_factor": 7.6667, + "cycle_day": 2 + }, + { + "date": "2026-05-25", + "age": 4, + "wind_speed": 0.0, + "humidity": 1.2, + "water_total": 8683.2, + "average_temperature": 32.0667, + "experience_temperature": 18.3067, + "chill_factor": 7.5, + "cycle_day": 3 + }, + { + "date": "2026-05-26", + "age": 5, + "wind_speed": 0.0, + "humidity": 87.1, + "water_total": 653.8, + "average_temperature": 32.4333, + "experience_temperature": 35.8533, + "chill_factor": 7.3333, + "cycle_day": 4 + }, + { + "date": "2026-05-27", + "age": 6, + "wind_speed": 0.0, + "humidity": 81.1, + "water_total": 558.7, + "average_temperature": 31.2, + "experience_temperature": 33.42, + "chill_factor": 7.1667, + "cycle_day": 5 + }, + { + "date": "2026-05-28", + "age": 7, + "wind_speed": 0.0, + "humidity": 81.0, + "water_total": 1022.4, + "average_temperature": 30.1333, + "experience_temperature": 32.3333, + "chill_factor": 7.0, + "cycle_day": 6 + }, + { + "date": "2026-05-29", + "age": 8, + "wind_speed": 0.0, + "humidity": 84.3, + "water_total": 854.4, + "average_temperature": 29.8333, + "experience_temperature": 32.6933, + "chill_factor": 6.8571, + "cycle_day": 7 + }, + { + "date": "2026-05-30", + "age": 9, + "wind_speed": 0.0, + "humidity": 85.9, + "water_total": 9.6, + "average_temperature": 29.2667, + "experience_temperature": 32.4467, + "chill_factor": 6.7143, + "cycle_day": 8 + }, + { + "date": "2026-05-31", + "age": 10, + "wind_speed": 0.0, + "humidity": 84.9, + "water_total": 9.6, + "average_temperature": 29.0, + "experience_temperature": 31.98, + "chill_factor": 6.5714, + "cycle_day": 9 + }, + { + "date": "2026-06-01", + "age": 11, + "wind_speed": 0.0, + "humidity": 85.6, + "water_total": 1093.4, + "average_temperature": 28.8, + "experience_temperature": 31.92, + "chill_factor": 6.4286, + "cycle_day": 10 + }, + { + "date": "2026-06-02", + "age": 12, + "wind_speed": 0.25, + "humidity": 84.1, + "water_total": 866.9, + "average_temperature": 29.1, + "experience_temperature": 30.3486, + "chill_factor": 6.2857, + "cycle_day": 11 + }, + { + "date": "2026-06-03", + "age": 13, + "wind_speed": 0.15, + "humidity": 84.3, + "water_total": 1519.7, + "average_temperature": 29.5333, + "experience_temperature": 31.4719, + "chill_factor": 6.1429, + "cycle_day": 12 + }, + { + "date": "2026-06-04", + "age": 14, + "wind_speed": 0.15, + "humidity": 87.4, + "water_total": 52.8, + "average_temperature": 28.9667, + "experience_temperature": 31.5467, + "chill_factor": 6.0, + "cycle_day": 13 + }, + { + "date": "2026-06-05", + "age": 15, + "wind_speed": 0.15, + "humidity": 84.2, + "water_total": 22.1, + "average_temperature": 29.4667, + "experience_temperature": 31.4388, + "chill_factor": 5.7857, + "cycle_day": 14 + }, + { + "date": "2026-06-06", + "age": 16, + "wind_speed": 0.05, + "humidity": 80.2, + "water_total": 2514.2, + "average_temperature": 29.0, + "experience_temperature": 30.7614, + "chill_factor": 5.5714, + "cycle_day": 15 + }, + { + "date": "2026-06-07", + "age": 17, + "wind_speed": 0.05, + "humidity": 81.6, + "water_total": 1575.4, + "average_temperature": 28.6333, + "experience_temperature": 30.6854, + "chill_factor": 5.3571, + "cycle_day": 16 + }, + { + "date": "2026-06-08", + "age": 18, + "wind_speed": 0.35, + "humidity": 83.8, + "water_total": 1757.8, + "average_temperature": 27.7333, + "experience_temperature": 28.6933, + "chill_factor": 5.1429, + "cycle_day": 17 + }, + { + "date": "2026-06-09", + "age": 19, + "wind_speed": 0.65, + "humidity": 85.3, + "water_total": 1822.1, + "average_temperature": 27.5, + "experience_temperature": 27.3564, + "chill_factor": 4.9286, + "cycle_day": 18 + }, + { + "date": "2026-06-10", + "age": 20, + "wind_speed": 0.75, + "humidity": 86.1, + "water_total": 2072.6, + "average_temperature": 27.2, + "experience_temperature": 26.8843, + "chill_factor": 4.7143, + "cycle_day": 19 + }, + { + "date": "2026-06-11", + "age": 21, + "wind_speed": 1.15, + "humidity": 85.5, + "water_total": 2008.3, + "average_temperature": 27.3333, + "experience_temperature": 25.2583, + "chill_factor": 4.5, + "cycle_day": 20 + }, + { + "date": "2026-06-12", + "age": 22, + "wind_speed": 1.15, + "humidity": 83.7, + "water_total": 1915.2, + "average_temperature": 27.5333, + "experience_temperature": 25.2626, + "chill_factor": 4.3571, + "cycle_day": 21 + }, + { + "date": "2026-06-13", + "age": 23, + "wind_speed": 1.15, + "humidity": 84.3, + "water_total": 1728.0, + "average_temperature": 27.4, + "experience_temperature": 25.4136, + "chill_factor": 4.2143, + "cycle_day": 22 + }, + { + "date": "2026-06-14", + "age": 24, + "wind_speed": 1.15, + "humidity": 86.3, + "water_total": 1532.2, + "average_temperature": 27.6, + "experience_temperature": 26.1779, + "chill_factor": 4.0714, + "cycle_day": 23 + }, + { + "date": "2026-06-15", + "age": 25, + "wind_speed": 1.15, + "humidity": 90.2, + "water_total": 7297.9, + "average_temperature": 25.6333, + "experience_temperature": 25.1554, + "chill_factor": 3.9286, + "cycle_day": 24 + }, + { + "date": "2026-06-16", + "age": 26, + "wind_speed": 1.05, + "humidity": 84.9, + "water_total": 1498.6, + "average_temperature": 26.5333, + "experience_temperature": 25.5383, + "chill_factor": 3.7857, + "cycle_day": 25 + }, + { + "date": "2026-06-17", + "age": 27, + "wind_speed": 1.55, + "humidity": 82.5, + "water_total": 1599.4, + "average_temperature": 27.2667, + "experience_temperature": 24.1203, + "chill_factor": 3.6429, + "cycle_day": 26 + }, + { + "date": "2026-06-18", + "age": 28, + "wind_speed": 1.35, + "humidity": 85.6, + "water_total": 7943.0, + "average_temperature": 26.2667, + "experience_temperature": 24.6617, + "chill_factor": 3.5, + "cycle_day": 27 + }, + { + "date": "2026-06-19", + "age": 29, + "wind_speed": 1.55, + "humidity": 86.5, + "water_total": 2007.4, + "average_temperature": 26.5333, + "experience_temperature": 24.4083, + "chill_factor": 3.5, + "cycle_day": 28 + }, + { + "date": "2026-06-20", + "age": 30, + "wind_speed": 1.65, + "humidity": 89.0, + "water_total": 2275.2, + "average_temperature": 25.3, + "experience_temperature": 23.325, + "chill_factor": 3.5, + "cycle_day": 29 + }, + { + "date": "2026-06-21", + "age": 31, + "wind_speed": 1.55, + "humidity": 90.9, + "water_total": 2377.9, + "average_temperature": 26.3, + "experience_temperature": 25.055, + "chill_factor": 3.5, + "cycle_day": 30 + }, + { + "date": "2026-06-22", + "age": 32, + "wind_speed": 1.85, + "humidity": 89.8, + "water_total": 2132.2, + "average_temperature": 26.5, + "experience_temperature": 23.985, + "chill_factor": 3.5, + "cycle_day": 31 + }, + { + "date": "2026-06-23", + "age": 33, + "wind_speed": 1.85, + "humidity": 90.2, + "water_total": 1315.2, + "average_temperature": 26.3333, + "experience_temperature": 23.8983, + "chill_factor": 3.5, + "cycle_day": 32 + }, + { + "date": "2026-06-24", + "age": 34, + "wind_speed": 1.85, + "humidity": 91.7, + "water_total": 754.6, + "average_temperature": 26.4, + "experience_temperature": 24.265, + "chill_factor": 3.5, + "cycle_day": 33 + }, + { + "date": "2026-06-25", + "age": 35, + "wind_speed": 2.25, + "humidity": 87.8, + "water_total": 527.0, + "average_temperature": 25.9, + "experience_temperature": 21.585, + "chill_factor": 3.5, + "cycle_day": 34 + }, + { + "date": "2026-06-26", + "age": 36, + "wind_speed": 1.05, + "humidity": 91.4, + "water_total": 1197.1, + "average_temperature": 25.5333, + "experience_temperature": 26.2133, + "chill_factor": 3.4286, + "cycle_day": 35 + }, + { + "date": "2026-06-27", + "age": 37, + "wind_speed": 1.75, + "humidity": 93.5, + "water_total": 3906.2, + "average_temperature": 26.3667, + "experience_temperature": 25.1917, + "chill_factor": 3.3571, + "cycle_day": 36 + }, + { + "date": "2026-06-28", + "age": 38, + "wind_speed": 1.15, + "humidity": 92.1, + "water_total": 128.6, + "average_temperature": 25.0333, + "experience_temperature": 25.6747, + "chill_factor": 3.2857, + "cycle_day": 37 + }, + { + "date": "2026-06-29", + "age": 39, + "wind_speed": 1.35, + "humidity": 89.4, + "water_total": 1968.0, + "average_temperature": 26.3, + "experience_temperature": 25.8407, + "chill_factor": 3.2143, + "cycle_day": 38 + }, + { + "date": "2026-06-30", + "age": 40, + "wind_speed": 1.55, + "humidity": 85.5, + "water_total": 142.1, + "average_temperature": 25.6, + "experience_temperature": 23.8286, + "chill_factor": 3.1429, + "cycle_day": 39 + }, + { + "date": "2026-07-01", + "age": 41, + "wind_speed": 1.45, + "humidity": 88.0, + "water_total": 118.1, + "average_temperature": 25.2, + "experience_temperature": 24.3464, + "chill_factor": 3.0714, + "cycle_day": 40 + }, + { + "date": "2026-07-02", + "age": 42, + "wind_speed": 1.55, + "humidity": 89.7, + "water_total": 185.3, + "average_temperature": 25.4333, + "experience_temperature": 24.7233, + "chill_factor": 3.0, + "cycle_day": 41 + }, + { + "date": "2026-07-03", + "age": 43, + "wind_speed": 1.55, + "humidity": 86.1, + "water_total": 38.4, + "average_temperature": 26.2667, + "experience_temperature": 24.8367, + "chill_factor": 3.0, + "cycle_day": 42 + }, + { + "date": "2026-07-04", + "age": 44, + "wind_speed": 1.55, + "humidity": 86.6, + "water_total": 0.0, + "average_temperature": 25.4333, + "experience_temperature": 24.1033, + "chill_factor": 3.0, + "cycle_day": 43 + }, + { + "date": "2026-07-05", + "age": 45, + "wind_speed": 1.45, + "humidity": 88.5, + "water_total": 0.0, + "average_temperature": 25.5, + "experience_temperature": 24.85, + "chill_factor": 3.0, + "cycle_day": 44 + }, + { + "date": "2026-07-06", + "age": 46, + "wind_speed": 1.65, + "humidity": 88.3, + "water_total": 0.0, + "average_temperature": 25.1, + "experience_temperature": 23.81, + "chill_factor": 3.0, + "cycle_day": 45 + }, + { + "date": "2026-07-07", + "age": 47, + "wind_speed": 1.45, + "humidity": 90.1, + "water_total": 0.0, + "average_temperature": 25.0, + "experience_temperature": 24.67, + "chill_factor": 3.0, + "cycle_day": 46 + }, + { + "date": "2026-07-08", + "age": 48, + "wind_speed": 1.35, + "humidity": 83.5, + "water_total": 0.0, + "average_temperature": 25.4, + "experience_temperature": 24.05, + "chill_factor": 3.0, + "cycle_day": 47 + }, + { + "date": "2026-07-09", + "age": 49, + "wind_speed": 0.65, + "humidity": 83.2, + "water_total": 0.0, + "average_temperature": 23.9, + "experience_temperature": 24.59, + "chill_factor": 3.0, + "cycle_day": 48 + } + ] + } + ] +} diff --git a/scripts/peek_xlsx.py b/scripts/peek_xlsx.py new file mode 100644 index 0000000..5d1d430 --- /dev/null +++ b/scripts/peek_xlsx.py @@ -0,0 +1,13 @@ +import openpyxl + +path = r"D:\DashboardCPSP\rework\dashboard-cpsp\dashboard-new-v2\backup\Laporan_Akhir-Siklus_Sukawarna_Kandang-Atas_Akhir-Siklus_2026-05-22_sd_2026-07-09.xlsx" + +wb = openpyxl.load_workbook(path, data_only=True) + +for sheet in ["Feed In", "Feed Use"]: + ws = wb[sheet] + print(f"\n===== SHEET: {sheet} =====") + for row in ws.iter_rows(): + vals = [(c.coordinate, c.value) for c in row if c.value is not None] + if vals: + print(vals) diff --git a/scripts/weigh_sample_count.py b/scripts/weigh_sample_count.py new file mode 100644 index 0000000..4bababb --- /dev/null +++ b/scripts/weigh_sample_count.py @@ -0,0 +1,21 @@ +"""Generate chicken_weight.chicken_count as weigh-sample size (not leftover birds).""" + +from __future__ import annotations + +import random + +# Deterministic: same cycle always gets the same sample sizes. +SAMPLE_RNG_SEED = 20260522 +SAMPLE_MIN = 180 +SAMPLE_MAX = 320 + + +def weigh_sample_count(*, average_weight: float, rng: random.Random | None = None) -> int: + """Birds used to compute that day's average_weight. + + 0 when there is no BW reading (age 38+ user decision). + """ + if average_weight is None or float(average_weight) <= 0: + return 0 + rng = rng or random.Random(SAMPLE_RNG_SEED) + return rng.randint(SAMPLE_MIN, SAMPLE_MAX) diff --git a/services/__tests__/apiClient.test.ts b/services/__tests__/apiClient.test.ts new file mode 100644 index 0000000..2cd09a8 --- /dev/null +++ b/services/__tests__/apiClient.test.ts @@ -0,0 +1,75 @@ +import { afterEach, describe, expect, it, vi } from 'vitest'; +import { api, ApiError, errorMessage } from '../apiClient.ts'; + +const jsonResponse = (body: unknown, status = 200, headers: Record = {}) => + new Response(JSON.stringify(body), { + status, + headers: { 'Content-Type': 'application/json', ...headers }, + }); + +describe('apiClient', () => { + afterEach(() => { + vi.unstubAllGlobals(); + document.cookie = 'csrftoken=; Max-Age=0; path=/'; + }); + + it('unwraps paginated list results', async () => { + vi.stubGlobal( + 'fetch', + vi.fn().mockResolvedValue( + jsonResponse({ + count: 1, + next: null, + previous: null, + results: [{ id: 7, site_name: 'Sukawarna', user: 1 }], + }) + ) + ); + + const sites = await api.sites.list(); + expect(sites).toEqual([{ id: 7, site_name: 'Sukawarna', user: 1 }]); + }); + + it('unwraps a bare array list', async () => { + vi.stubGlobal( + 'fetch', + vi.fn().mockResolvedValue(jsonResponse([{ id: 2, site_name: 'Cilayang', user: 1 }])) + ); + + const sites = await api.sites.list(); + expect(sites[0]?.site_name).toBe('Cilayang'); + }); + + it('sends CSRF token on POST', async () => { + document.cookie = 'csrftoken=abc123; path=/'; + const fetchMock = vi.fn().mockResolvedValue(jsonResponse({ id: 1, user_name: 'admin' })); + vi.stubGlobal('fetch', fetchMock); + + await api.auth.login('admin', 'admin123'); + + const init = fetchMock.mock.calls[0]?.[1] as RequestInit; + const headers = new Headers(init.headers); + expect(headers.get('X-CSRFToken')).toBe('abc123'); + expect(init.credentials).toBe('include'); + }); + + it('throws ApiError with detail and status', async () => { + document.cookie = 'csrftoken=abc123; path=/'; + vi.stubGlobal( + 'fetch', + vi.fn().mockResolvedValue(jsonResponse({ detail: 'Bad credentials' }, 400)) + ); + + await expect(api.auth.login('x', 'y')).rejects.toMatchObject({ + name: 'ApiError', + status: 400, + message: 'Bad credentials', + }); + }); + + it('maps unknown errors through errorMessage', () => { + expect(errorMessage(new ApiError('Gagal', 502, null))).toBe('Gagal'); + expect(errorMessage(new Error('boom'))).toBe('boom'); + expect(errorMessage('nope')).toBe('Terjadi kesalahan'); + }); +}); diff --git a/services/apiClient.ts b/services/apiClient.ts new file mode 100644 index 0000000..f6066e8 --- /dev/null +++ b/services/apiClient.ts @@ -0,0 +1,220 @@ +import type { + AIInsight, + ChickenCounting, + ChickenWeight, + CountingWrite, + Cycle, + CycleFilter, + CycleWrite, + Flock, + InitialBalanceResult, + Karung, + KarungRequestResult, + Kandang, + KandangWrite, + KPI, + LatestAvg, + ManualInput, + ManualInputWrite, + Paginated, + PanelIoT, + Site, + SiteWrite, + User, +} from '../types/api.ts'; + +const API_BASE = (import.meta.env.VITE_API_BASE || '/api/v1').replace(/\/$/, ''); + +export const AUTH_UNAUTHORIZED_EVENT = 'dashboard-auth-unauthorized'; + +export class ApiError extends Error { + status: number; + body: unknown; + + constructor(message: string, status: number, body: unknown) { + super(message); + this.name = 'ApiError'; + this.status = status; + this.body = body; + } +} + +export function errorMessage(err: unknown): string { + if (err instanceof ApiError) return err.message; + if (err instanceof Error) return err.message; + return 'Terjadi kesalahan'; +} + +function getCookie(name: string): string | null { + const escaped = name.replace(/([.$?*|{}()[\]\\/+^])/g, '\\$1'); + const match = document.cookie.match(new RegExp(`(?:^|; )${escaped}=([^;]*)`)); + return match?.[1] ? decodeURIComponent(match[1]) : null; +} + +function parseDetail(body: unknown): string { + if (!body || typeof body !== 'object') return 'Request failed'; + const detail = (body as { detail?: unknown }).detail; + if (typeof detail === 'string') return detail; + if (Array.isArray(detail)) return detail.map(String).join(', '); + const entries = Object.entries(body as Record) + .filter(([key]) => key !== 'detail') + .map(([key, value]) => `${key}: ${Array.isArray(value) ? value.join(', ') : String(value)}`); + return entries.length > 0 ? entries.join('; ') : 'Request failed'; +} + +async function ensureCsrf(): Promise { + const existing = getCookie('csrftoken'); + if (existing) return existing; + const res = await fetch(`${API_BASE}/auth/csrf/`, { credentials: 'include' }); + if (!res.ok) { + throw new ApiError('Gagal mengambil CSRF token', res.status, null); + } + const data = (await res.json()) as { csrfToken?: string }; + return data.csrfToken || getCookie('csrftoken') || ''; +} + +type Query = Record; + +function withQuery(path: string, query?: Query): string { + if (!query) return path; + const params = new URLSearchParams(); + for (const [key, value] of Object.entries(query)) { + if (value === undefined || value === null || value === '') continue; + params.set(key, String(value)); + } + const qs = params.toString(); + return qs ? `${path}?${qs}` : path; +} + +async function request(path: string, init: RequestInit = {}): Promise { + const method = (init.method || 'GET').toUpperCase(); + const headers = new Headers(init.headers); + headers.set('Accept', 'application/json'); + if (init.body && !headers.has('Content-Type')) { + headers.set('Content-Type', 'application/json'); + } + if (method !== 'GET' && method !== 'HEAD') { + const csrf = await ensureCsrf(); + if (csrf) headers.set('X-CSRFToken', csrf); + } + + const res = await fetch(`${API_BASE}${path}`, { + ...init, + method, + headers, + credentials: 'include', + }); + + if (res.status === 204) { + return undefined as T; + } + + const text = await res.text(); + let body: unknown = null; + if (text) { + try { + body = JSON.parse(text) as unknown; + } catch { + body = text; + } + } + + if (!res.ok) { + if (res.status === 401 || res.status === 403) { + window.dispatchEvent(new CustomEvent(AUTH_UNAUTHORIZED_EVENT)); + } + throw new ApiError(parseDetail(body), res.status, body); + } + return body as T; +} + +function unwrapList(data: Paginated | T[]): T[] { + if (Array.isArray(data)) return data; + return data.results ?? []; +} + +const get = (path: string, query?: Query) => request(withQuery(path, query)); +const post = (path: string, body?: unknown) => + request(path, { method: 'POST', body: body !== undefined ? JSON.stringify(body) : undefined }); +const patch = (path: string, body: unknown) => + request(path, { method: 'PATCH', body: JSON.stringify(body) }); +const del = (path: string) => request(path, { method: 'DELETE' }); + +export const api = { + auth: { + csrf: () => get<{ csrfToken: string }>('/auth/csrf/'), + login: (user_name: string, password: string) => + post('/auth/login/', { user_name, password }), + logout: () => post('/auth/logout/'), + me: () => get('/auth/me/'), + }, + sites: { + list: async (query?: { user_id?: number }) => + unwrapList(await get | Site[]>('/sites/', query)), + create: (body: SiteWrite) => post('/sites/', body), + update: (id: number, body: Partial) => patch(`/sites/${id}/`, body), + remove: (id: number) => del(`/sites/${id}/`), + }, + kandangs: { + list: async (query?: { site_id?: number }) => + unwrapList(await get | Kandang[]>('/kandangs/', query)), + create: (body: KandangWrite) => post('/kandangs/', body), + update: (id: number, body: Partial) => patch(`/kandangs/${id}/`, body), + remove: (id: number) => del(`/kandangs/${id}/`), + }, + flocks: { + list: async (query?: { cycle_id?: number }) => + unwrapList(await get | Flock[]>('/flocks/', query)), + }, + cycles: { + list: async (query?: CycleFilter) => + unwrapList(await get | Cycle[]>('/cycles/', query)), + create: (body: CycleWrite) => post('/cycles/', body), + update: (id: number, body: Partial) => patch(`/cycles/${id}/`, body), + remove: (id: number) => del(`/cycles/${id}/`), + initialBalance: (id: number, body: { date: string; feed_in_manual: number }) => + post(`/cycles/${id}/initial-balance/`, body), + }, + kpis: { + list: async (query?: CycleFilter) => + unwrapList(await get | KPI[]>('/kpis/', query)), + }, + manualInputs: { + list: async (query?: CycleFilter) => + unwrapList(await get | ManualInput[]>('/manual-inputs/', query)), + create: (body: ManualInputWrite) => post('/manual-inputs/', body), + update: (id: number, body: Partial) => + patch(`/manual-inputs/${id}/`, body), + }, + countings: { + list: async (query?: CycleFilter) => + unwrapList( + await get | ChickenCounting[]>('/chicken-countings/', query) + ), + create: (body: CountingWrite) => post('/chicken-countings/', body), + update: (id: number, body: Partial) => + patch(`/chicken-countings/${id}/`, body), + remove: (id: number) => del(`/chicken-countings/${id}/`), + }, + weights: { + list: async (query?: CycleFilter) => + unwrapList(await get | ChickenWeight[]>('/chicken-weights/', query)), + latestAvg: (query?: CycleFilter) => get('/chicken-weights/latest-avg/', query), + }, + karungs: { + list: async (query?: CycleFilter) => + unwrapList(await get | Karung[]>('/karungs/', query)), + latest: (query?: CycleFilter) => get('/karungs/latest/', query), + request: (body: { cycle_id: number; section?: 'today' | 'yesterday_history' }) => + post('/karungs/request/', body), + }, + panelIot: { + list: async (query?: CycleFilter) => + unwrapList(await get | PanelIoT[]>('/panel-iot/', query)), + dates: async (query?: CycleFilter) => get('/panel-iot/dates/', query), + }, + insights: { + list: async (query?: CycleFilter) => + unwrapList(await get | AIInsight[]>('/ai-insights/', query)), + }, +}; diff --git a/tests/setup.ts b/tests/setup.ts new file mode 100644 index 0000000..117b3a6 --- /dev/null +++ b/tests/setup.ts @@ -0,0 +1,9 @@ +import { expect, afterEach } from 'vitest'; +import { cleanup } from '@testing-library/react'; +import * as matchers from '@testing-library/jest-dom/matchers'; + +expect.extend(matchers); + +afterEach(() => { + cleanup(); +}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..39182ce --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "isolatedModules": true, + "moduleDetection": "force", + "jsx": "react-jsx", + "noEmit": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "allowImportingTsExtensions": true, + "types": ["vite/client", "vitest/globals", "@testing-library/jest-dom", "node"], + "paths": { + "@/*": ["./*"] + } + }, + "include": ["./**/*.ts", "./**/*.tsx"] +} diff --git a/types/api.ts b/types/api.ts new file mode 100644 index 0000000..048590f --- /dev/null +++ b/types/api.ts @@ -0,0 +1,260 @@ +export type Paginated = { + count: number; + next: string | null; + previous: string | null; + results: T[]; +}; + +export type UserStatus = 'active' | 'inactive' | 'superadmin'; + +export type User = { + id: number; + user_name: string; + status: UserStatus; + created_at: string; + updated_at: string; +}; + +export type Site = { + id: number; + site_name: string; + user: number; + created_at: string; + updated_at: string; +}; + +export type Kandang = { + id: number; + kandang_name: string; + site: number; + created_at: string; + updated_at: string; +}; + +export type Flock = { + id: number; + flock_name: string; + cycle: number; + created_at: string; + updated_at: string; +}; + +export type CycleStatus = 'active' | 'closed'; + +export type Cycle = { + id: number; + kandang: number; + flock: number; + total_days: number; + current_day: number; + start_date: string; + end_date: string; + chick_in_weight: number; + doc_in_count: number; + feed_initial_balance: number; + status: CycleStatus; + created_at: string; + updated_at: string; +}; + +export type KPI = { + id: number; + cycle: number; + kandang: number; + flock_id: number; + date: string; + age: number; + mortality: number; + mortality_total: number; + feed: number; + feed_total: number; + harvest: number; + harvest_total: number; + harvest_weight: number; + harvest_weight_total: number; + chicken_life: number; + chicken_life_percentage: number; + iot_weight: number; + average_harvest_day: number; + average_harvest_weight: number; + fcr: number; + eef: number; + cc: number; + cw: number; + fs: number; + manual: number; + created_at: string; + updated_at: string; +}; + +export type ManualInput = { + id: number; + cycle: number; + kandang: number; + flock_id: number; + date: string; + age_manual: number; + mortality_manual: number; + mortality_manual_total: number; + feed_in_manual: number; + feed_use_manual: number; + feed_in_manual_total: number; + feed_use_manual_total: number; + feed_out_manual: number; + feed_out_manual_total: number; + harvest_manual: number; + harvest_manual_total: number; + harvest_weight_manual: number; + harvest_weight_manual_total: number; + manual_weight: number; + average_harvest_day_manual: number; + average_harvest_weight_manual: number; + fcr_manual: number; + eef_manual: number; + created_at: string; + updated_at: string; +}; + +export type ChickenCounting = { + id: number; + cycle: number; + kandang: number; + flock_id: number; + date: string; + total_count: number; + mortality_count: number; + created_at: string; + updated_at: string; +}; + +export type ChickenWeight = { + id: number; + cycle: number; + kandang: number; + flock_id: number; + date: string; + age: number; + doc_weight: number; + average_weight: number; + chicken_count: number; + uniformity: number; + average_daily_gain: number; + created_at: string; + updated_at: string; +}; + +export type LatestAvg = { + average_weight: number; + date: string; + age: number; + uniformity: number; + average_daily_gain: number; + cycle: number; + kandang: number; +}; + +export type Karung = { + id: number; + cycle: number; + kandang: number; + flock_id: number; + date: string; + in_today: number; + out_today: number; + in_total: number; + out_total: number; + feed_use_today: number; + feed_use_total: number; + created_at: string; + updated_at: string; +}; + +export type PanelIoT = { + id: number; + flock: number; + flock_id: number; + kandang: number | null; + date: string; + timestamp: string | null; + wind_speed: number; + humidity: number; + water_total: number; + average_temperature: number; + experience_temperature: number; + created_at: string; + updated_at: string; +}; + +export type AIInsight = { + id: number; + cycle: number; + kandang: number; + flock_id: number; + date: string; + insight_text: string; + alert: string; + section: string; + session: string; + created_at: string; + updated_at: string; +}; + +export type KarungRequestResult = { + karung: Karung; + upstream: Record; +}; + +export type CycleFilter = { + cycle_id?: number; + kandang_id?: number; + site_id?: number; + flock_id?: number; + date?: string; + status?: CycleStatus; +}; + +export type SiteWrite = { site_name: string; user: number }; +export type KandangWrite = { + kandang_name: string; + site: number; +}; +export type CycleWrite = { + kandang: number; + flock?: number; + total_days: number; + current_day?: number; + start_date: string; + end_date: string; + chick_in_weight: number; + doc_in_count: number; + feed_initial_balance?: number; + status?: CycleStatus; +}; + +export type InitialBalanceResult = { + cycle: number; + date: string; + feed_initial_balance: number; + manual: number; + manual_total: number; + iot: number | null; + accuracy: number | null; + sync_error: string | null; +}; +export type CountingWrite = { + cycle: number; + date: string; + total_count?: number; + mortality_count?: number; +}; +export type ManualInputWrite = { + cycle: number; + date?: string; + age_manual?: number; + mortality_manual?: number; + feed_in_manual?: number; + feed_use_manual?: number; + harvest_manual?: number; + harvest_weight_manual?: number; + manual_weight?: number; +}; diff --git a/types/common.ts b/types/common.ts new file mode 100644 index 0000000..d32b7ae --- /dev/null +++ b/types/common.ts @@ -0,0 +1,11 @@ +export type View = + | 'dashboard' + | 'dataManagement' + | 'weightMonitoring' + | 'weightStandard' + | 'feedSackCounting' + | 'cobbStandard' + | 'iotPanel' + | 'fcrDashboard' + | 'eefDashboard' + | 'kandangSettings'; diff --git a/types/dashboardReport.ts b/types/dashboardReport.ts new file mode 100644 index 0000000..f621036 --- /dev/null +++ b/types/dashboardReport.ts @@ -0,0 +1,84 @@ +export type ReportAccuracy = number | null; + +export type DashboardReportType = 'daily' | 'end_cycle'; + +export interface DashboardReportCountingRow { + date: string; + day: number; + countBefore: number | null; + mortality: number | null; + harvest: number | null; + harvestWeight: number | null; + countAfter: number | null; + iotCount: number | null; + accuracy: ReportAccuracy; +} + +export interface DashboardReportWeightRow { + date: string; + day: number; + avgManual: number | null; + avgIot: number | null; + uniformity: number | null; + difference: number | null; + accuracy: ReportAccuracy; +} + +export interface DashboardReportFeedInRow { + date: string; + manualIn: number | null; + iotIn: number | null; + accuracy: ReportAccuracy; +} + +export interface DashboardReportFeedUseRow { + date: string; + day: number; + manualUse: number | null; + iotUse: number | null; + accuracy: ReportAccuracy; +} + +export interface DashboardReportFeedOutRow { + date: string; + manualOut: number | null; + iotOut: number | null; + accuracy: ReportAccuracy; +} + +export interface DashboardReportFcrRow { + day: number; + iotFcr: number | null; + feedTotal: number | null; + iotWeight: number | null; + chickenLife: number | null; + harvestWeightTotal: number | null; +} + +export interface DashboardReportEefRow { + day: number; + iotEef: number | null; + chickenLifePercentage: number | null; + iotAverageHarvestBw: number | null; + iotAverageDayWeight: number | null; + iotFcr: number | null; +} + +export interface DashboardReportPayload { + cycleId: string; + cycleStart: string; + cycleEnd: string; + kandangId: number; + kandangName: string; + area: string; + upToDay: number; + generatedAt: string; + reportType: DashboardReportType; + counting: DashboardReportCountingRow[]; + weight: DashboardReportWeightRow[]; + feedIn: DashboardReportFeedInRow[]; + feedUse: DashboardReportFeedUseRow[]; + feedOut: DashboardReportFeedOutRow[]; + fcr: DashboardReportFcrRow[]; + eef: DashboardReportEefRow[]; +} diff --git a/utils/__tests__/buildInMemoryReport.test.ts b/utils/__tests__/buildInMemoryReport.test.ts new file mode 100644 index 0000000..2479416 --- /dev/null +++ b/utils/__tests__/buildInMemoryReport.test.ts @@ -0,0 +1,107 @@ +import { describe, expect, it } from 'vitest'; +import { buildInMemoryReport } from '../buildInMemoryReport.ts'; +import type { ChickenCounting, Cycle, Karung, KPI } from '../../types/api.ts'; + +const cycle: Cycle = { + id: 1, + kandang: 9, + flock: 1, + total_days: 35, + current_day: 2, + start_date: '2026-05-01', + end_date: '2026-06-04', + chick_in_weight: 45, + doc_in_count: 20000, + feed_initial_balance: 0, + status: 'active', + created_at: '', + updated_at: '', +}; + +describe('buildInMemoryReport', () => { + it('maps IoT counting and karung onto daily rows up to current_day', () => { + const countings: ChickenCounting[] = [ + { + id: 1, + cycle: 1, + kandang: 9, + flock_id: 1, + date: '2026-05-02', + total_count: 19800, + mortality_count: 12, + created_at: '', + updated_at: '', + }, + ]; + const karungs: Karung[] = [ + { + id: 1, + cycle: 1, + kandang: 9, + flock_id: 1, + date: '2026-05-02', + in_today: 10, + out_today: 8, + in_total: 10, + out_total: 8, + feed_use_today: 8, + feed_use_total: 8, + created_at: '', + updated_at: '', + }, + ]; + const kpis: KPI[] = [ + { + id: 1, + cycle: 1, + kandang: 9, + flock_id: 1, + date: '2026-05-02', + age: 1, + mortality: 12, + mortality_total: 12, + feed: 8, + feed_total: 8, + harvest: 0, + harvest_total: 0, + harvest_weight: 0, + harvest_weight_total: 0, + chicken_life: 19800, + chicken_life_percentage: 99, + iot_weight: 0, + average_harvest_day: 0, + average_harvest_weight: 0, + fcr: 1.2, + eef: 250, + cc: 1, + cw: 1, + fs: 1, + manual: 1, + created_at: '', + updated_at: '', + }, + ]; + + const payload = buildInMemoryReport({ + cycle, + kandangId: 9, + kandangName: 'Kandang 1', + area: 'Sukawarna', + reportType: 'daily', + countings, + manuals: [], + weights: [], + karungs, + kpis, + }); + + expect(payload.upToDay).toBe(1); + expect(payload.counting).toHaveLength(2); + const day1 = payload.counting.find((row) => row.day === 1); + expect(day1?.iotCount).toBe(19800); + expect(day1?.mortality).toBe(12); + const feed1 = payload.feedUse.find((row) => row.day === 1); + expect(feed1?.iotUse).toBe(8); + expect(payload.fcr.find((row) => row.day === 1)?.iotFcr).toBe(1.2); + }); +}); diff --git a/utils/buildInMemoryReport.ts b/utils/buildInMemoryReport.ts new file mode 100644 index 0000000..36183e3 --- /dev/null +++ b/utils/buildInMemoryReport.ts @@ -0,0 +1,211 @@ +import type { + ChickenCounting, + ChickenWeight, + Cycle, + Karung, + KPI, + ManualInput, +} from '../types/api.ts'; +import type { DashboardReportPayload, DashboardReportType } from '../types/dashboardReport.ts'; +import { cycleDayForDate } from './format.ts'; + +export type BuildInMemoryReportInput = { + cycle: Cycle; + kandangId: number; + kandangName: string; + area: string; + reportType: DashboardReportType; + countings: ChickenCounting[]; + manuals: ManualInput[]; + weights: ChickenWeight[]; + karungs: Karung[]; + kpis: KPI[]; + generatedAt?: string; + /** Override the report's last day (0-based); defaults to current day / cycle end. */ + upToDay?: number; +}; + +function accuracy(iot: number | null, manual: number | null): number | null { + if (iot == null || manual == null || manual === 0) return null; + return Math.round((1 - Math.abs(iot - manual) / Math.abs(manual)) * 1000) / 10; +} + +/** Feed accuracy: both manual and IoT reading zero means a perfect match (100%); + * if only one side has a reading, the match is 0%. */ +function feedAccuracy(iot: number | null, manual: number | null): number | null { + if (manual != null && iot != null) { + if (manual === 0 && iot === 0) return 100; + if (manual === 0 || iot === 0) return 0; + } + return accuracy(iot, manual); +} + +export function buildInMemoryReport(input: BuildInMemoryReportInput): DashboardReportPayload { + const { cycle } = input; + // Day numbering stays 0-based (day 0 = start_date), but the report must never + // run past the cycle end date. lastDay = start_date → end_date in days, which + // is total_days - 1 for a contiguous cycle. + const lastDay = cycleDayForDate(cycle.start_date, cycle.end_date); + const endCycleUpTo = Math.min(cycle.total_days, lastDay); + // cycle.current_day is 1-based (day 1 = start_date); reports use 0-based days, + // so the latest report day is current_day - 1. + const defaultUpTo = + input.reportType === 'end_cycle' + ? endCycleUpTo + : Math.min(Math.max(cycle.current_day - 1, 0), lastDay); + const upToDay = + input.upToDay != null && Number.isFinite(input.upToDay) + ? Math.min(Math.max(Math.floor(input.upToDay), 0), lastDay) + : defaultUpTo; + const days = Array.from({ length: Math.max(upToDay, 0) + 1 }, (_, day) => day); + + const countingByDay = new Map(); + for (const row of input.countings) { + countingByDay.set(cycleDayForDate(cycle.start_date, row.date), row); + } + const weightByDay = new Map(); + for (const row of input.weights) { + weightByDay.set(cycleDayForDate(cycle.start_date, row.date), row); + } + const karungByDay = new Map(); + for (const row of input.karungs) { + karungByDay.set(cycleDayForDate(cycle.start_date, row.date), row); + } + const kpiByAge = new Map(); + for (const row of input.kpis) { + kpiByAge.set(row.age, row); + } + const manualWeightByDay = new Map(); + const manualFeedInByDay = new Map(); + const manualFeedUseByDay = new Map(); + const manualFeedOutByDay = new Map(); + for (const row of input.manuals) { + const day = cycleDayForDate(cycle.start_date, row.date); + if (row.manual_weight > 0) manualWeightByDay.set(day, row.manual_weight); + manualFeedInByDay.set(day, row.feed_in_manual); + manualFeedUseByDay.set(day, row.feed_use_manual); + manualFeedOutByDay.set(day, row.feed_out_manual); + } + const latestManual = input.manuals[0] ?? null; + + const counting = days.map((day) => { + const iot = countingByDay.get(day) ?? null; + const kpi = kpiByAge.get(day) ?? null; + const iotCount = iot?.total_count ?? null; + const after = kpi?.chicken_life ?? iotCount; + return { + date: addDate(cycle.start_date, day), + day, + countBefore: after == null ? null : after + (kpi?.mortality ?? iot?.mortality_count ?? 0), + mortality: kpi?.mortality ?? iot?.mortality_count ?? latestManual?.mortality_manual ?? null, + harvest: kpi?.harvest ?? null, + harvestWeight: kpi?.harvest_weight ?? null, + countAfter: after, + iotCount, + accuracy: accuracy(iotCount, after), + }; + }); + + const weight = days.map((day) => { + const iot = weightByDay.get(day) ?? null; + const avgIot = iot?.average_weight ?? null; + const avgManual = manualWeightByDay.get(day) ?? null; + return { + date: addDate(cycle.start_date, day), + day, + avgManual, + avgIot, + uniformity: iot?.uniformity ?? null, + difference: avgIot != null && avgManual != null ? avgIot - avgManual : null, + accuracy: accuracy(avgIot, avgManual), + }; + }); + + const feedIn = days.map((day) => { + const karung = karungByDay.get(day) ?? null; + const iotIn = karung?.in_today ?? null; + const manualIn = manualFeedInByDay.get(day) ?? null; + return { + date: addDate(cycle.start_date, day), + manualIn, + iotIn, + accuracy: feedAccuracy(iotIn, manualIn), + }; + }); + + const feedUse = days.map((day) => { + const karung = karungByDay.get(day) ?? null; + const iotUse = karung?.feed_use_today ?? karung?.out_today ?? null; + const manualUse = manualFeedUseByDay.get(day) ?? null; + return { + date: addDate(cycle.start_date, day), + day, + manualUse, + iotUse, + accuracy: feedAccuracy(iotUse, manualUse), + }; + }); + + const feedOut = days.map((day) => { + const karung = karungByDay.get(day) ?? null; + const iotOut = karung?.out_today ?? null; + const manualOut = manualFeedOutByDay.get(day) ?? null; + return { + date: addDate(cycle.start_date, day), + manualOut, + iotOut, + accuracy: feedAccuracy(iotOut, manualOut), + }; + }); + + const fcr = days.map((day) => { + const kpi = kpiByAge.get(day) ?? null; + const weightRow = weightByDay.get(day) ?? null; + return { + day, + iotFcr: kpi?.fcr ?? null, + feedTotal: kpi?.feed_total ?? null, + iotWeight: weightRow?.average_weight ?? kpi?.iot_weight ?? null, + chickenLife: kpi?.chicken_life ?? null, + harvestWeightTotal: kpi?.harvest_weight_total ?? null, + }; + }); + + const eef = days.map((day) => { + const kpi = kpiByAge.get(day) ?? null; + return { + day, + iotEef: kpi?.eef ?? null, + chickenLifePercentage: kpi?.chicken_life_percentage ?? null, + iotAverageHarvestBw: kpi?.average_harvest_weight ?? null, + iotAverageDayWeight: kpi?.iot_weight ?? null, + iotFcr: kpi?.fcr ?? null, + }; + }); + + return { + cycleId: String(cycle.id), + cycleStart: cycle.start_date, + cycleEnd: cycle.end_date, + kandangId: input.kandangId, + kandangName: input.kandangName, + area: input.area, + upToDay, + generatedAt: input.generatedAt ?? new Date().toISOString(), + reportType: input.reportType, + counting, + weight, + feedIn, + feedUse, + feedOut, + fcr, + eef, + }; +} + +function addDate(start: string, day: number): string { + const date = new Date(`${start}T00:00:00`); + date.setDate(date.getDate() + day); + const pad = (n: number) => String(n).padStart(2, '0'); + return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`; +} diff --git a/utils/format.ts b/utils/format.ts new file mode 100644 index 0000000..d6d0f9e --- /dev/null +++ b/utils/format.ts @@ -0,0 +1,56 @@ +export function formatNumber( + value: number, + maxDecimals = 2, + minDecimals = 0, + truncate = false +): string { + let display = value; + if (truncate) { + const factor = 10 ** maxDecimals; + display = Math.trunc(display * factor) / factor; + } + return display.toLocaleString('id-ID', { + maximumFractionDigits: maxDecimals, + minimumFractionDigits: minDecimals, + }); +} + +export function formatRatio(value: number, decimals = 3): string { + const factor = 10 ** decimals; + const truncated = Math.trunc(value * factor) / factor; + return truncated.toFixed(decimals); +} + +export function formatDateId(iso: string): string { + const date = new Date(`${iso}T00:00:00`); + if (Number.isNaN(date.getTime())) return iso; + return date.toLocaleDateString('id-ID', { day: 'numeric', month: 'short', year: 'numeric' }); +} + +export function formatDateRange(startIso: string, endIso: string): string { + return `${formatDateId(startIso)} – ${formatDateId(endIso)}`; +} + +export function todayIso(): string { + const now = new Date(); + const pad = (n: number) => String(n).padStart(2, '0'); + return `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())}`; +} + +export function addDaysIso(iso: string, days: number): string { + const date = new Date(`${iso}T00:00:00`); + date.setDate(date.getDate() + days); + const pad = (n: number) => String(n).padStart(2, '0'); + return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`; +} + +export function cycleDayForDate(startDate: string, isoDate: string): number { + const start = new Date(`${startDate}T00:00:00`); + const current = new Date(`${isoDate}T00:00:00`); + const diff = Math.round((current.getTime() - start.getTime()) / 86400000); + return Math.max(0, diff); +} + +export function inclusiveDayCount(startIso: string, endIso: string): number { + return Math.max(1, cycleDayForDate(startIso, endIso) + 1); +} diff --git a/utils/pdfExport.ts b/utils/pdfExport.ts new file mode 100644 index 0000000..3025802 --- /dev/null +++ b/utils/pdfExport.ts @@ -0,0 +1,131 @@ +import { jsPDF } from 'jspdf'; +import html2canvas from 'html2canvas'; + +const PAGE_WIDTH_MM = 210; +const PAGE_HEIGHT_MM = 297; +const MARGIN_MM = 10; +const CONTENT_WIDTH_MM = PAGE_WIDTH_MM - MARGIN_MM * 2; +const USABLE_HEIGHT_MM = PAGE_HEIGHT_MM - MARGIN_MM * 2; + +export const usableHeightCssPx = (widthPx: number): number => + (USABLE_HEIGHT_MM / CONTENT_WIDTH_MM) * widthPx; + +/** + * Safe page-break offsets for `data-pdf-block` nodes. + * + * A block's start is only a break point when the whole block fits on one page. + * Oversized tables (e.g. a 49-day report) must start under the header instead + * of being deferred to page 2. + */ +export function pdfBlockBreakOffsets( + blocks: Array<{ top: number; bottom: number }>, + usableHeightPx: number +): number[] { + const breaks: number[] = []; + for (const block of blocks) { + const height = block.bottom - block.top; + if (height <= usableHeightPx && block.top > 0) { + breaks.push(block.top); + } + if (block.bottom > 0) { + breaks.push(block.bottom); + } + } + return [...new Set(breaks.map((value) => Math.round(value)))].sort((a, b) => a - b); +} + +export function choosePdfSliceHeight( + cursor: number, + canvasHeight: number, + usableHeightPx: number, + breakPoints: number[] +): number { + const remaining = canvasHeight - cursor; + if (remaining <= usableHeightPx) return remaining; + const limit = cursor + usableHeightPx; + const candidate = [...breakPoints].reverse().find((point) => point > cursor && point <= limit); + return candidate ? candidate - cursor : usableHeightPx; +} + +/** + * Render an element to a multi-page A4 PDF. + * + * html2canvas photographs the whole report once, then the canvas is sliced at + * `data-pdf-block` boundaries (so a page break never cuts through a table) and + * each slice is written as a compressed JPEG page. + */ +export async function exportElementToPdf( + element: HTMLElement, + filename: string, + options?: { widthPx?: number } +): Promise { + const widthPx = options?.widthPx ?? 800; + const scale = 1.5; + const jpegQuality = 0.82; + const blockRects: Array<{ top: number; bottom: number }> = []; + + const canvas = await html2canvas(element, { + scale, + useCORS: true, + backgroundColor: '#ffffff', + windowWidth: widthPx, + onclone: (_clonedDoc, clonedElement) => { + clonedElement.style.width = `${widthPx}px`; + clonedElement.style.maxWidth = `${widthPx}px`; + clonedElement.style.margin = '0'; + + const top = clonedElement.getBoundingClientRect().top; + clonedElement.querySelectorAll('[data-pdf-block]').forEach((node) => { + const rect = node.getBoundingClientRect(); + blockRects.push({ top: rect.top - top, bottom: rect.bottom - top }); + }); + }, + }); + + const doc = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4', compress: true }); + const pageWidthMm = doc.internal.pageSize.getWidth(); + const pageHeightMm = doc.internal.pageSize.getHeight(); + const contentWidthMm = pageWidthMm - MARGIN_MM * 2; + const usableHeightMm = pageHeightMm - MARGIN_MM * 2; + + const mmPerPx = contentWidthMm / canvas.width; + const usableHeightPx = usableHeightMm / mmPerPx; + const safeBreaks = pdfBlockBreakOffsets(blockRects, usableHeightCssPx(widthPx)); + + // Clone-CSS px -> canvas px, de-duplicated and ordered. + const breakPoints = [...new Set(safeBreaks.map((value) => Math.round(value * scale)))] + .filter((value) => value > 0 && value < canvas.height) + .sort((a, b) => a - b); + + let cursor = 0; + let firstPage = true; + + while (cursor < canvas.height) { + const sliceHeight = choosePdfSliceHeight(cursor, canvas.height, usableHeightPx, breakPoints); + if (sliceHeight <= 0) break; + + const slice = document.createElement('canvas'); + slice.width = canvas.width; + slice.height = Math.max(1, Math.round(sliceHeight)); + const ctx = slice.getContext('2d'); + if (!ctx) break; + ctx.fillStyle = '#ffffff'; + ctx.fillRect(0, 0, slice.width, slice.height); + ctx.drawImage(canvas, 0, cursor, canvas.width, slice.height, 0, 0, canvas.width, slice.height); + + if (!firstPage) doc.addPage(); + doc.addImage( + slice.toDataURL('image/jpeg', jpegQuality), + 'JPEG', + MARGIN_MM, + MARGIN_MM, + contentWidthMm, + slice.height * mmPerPx + ); + + firstPage = false; + cursor += slice.height; + } + + doc.save(filename); +} diff --git a/utils/reportExcel.ts b/utils/reportExcel.ts new file mode 100644 index 0000000..bf8a377 --- /dev/null +++ b/utils/reportExcel.ts @@ -0,0 +1,120 @@ +import ExcelJS from 'exceljs'; +import type { DashboardReportPayload } from '../types/dashboardReport.ts'; + +const na = (value: number | null | undefined): number | string => + value == null || !Number.isFinite(value) ? 'N/A' : value; + +export async function downloadReportExcel(payload: DashboardReportPayload): Promise { + const workbook = new ExcelJS.Workbook(); + workbook.creator = 'Dashboard CPSP'; + + const counting = workbook.addWorksheet('Chicken Counting'); + counting.addRow([ + 'Tanggal', + 'Hari', + 'Stok awal', + 'Mortalitas', + 'Panen', + 'Stok akhir', + 'IoT', + 'Akurasi %', + ]); + for (const row of payload.counting) { + counting.addRow([ + row.date, + row.day, + na(row.countBefore), + na(row.mortality), + na(row.harvest), + na(row.countAfter), + na(row.iotCount), + na(row.accuracy), + ]); + } + + const weight = workbook.addWorksheet('Weight'); + weight.addRow([ + 'Tanggal', + 'Hari', + 'AVG manual', + 'AVG IoT', + 'Keseragaman', + 'Selisih', + 'Akurasi %', + ]); + for (const row of payload.weight) { + weight.addRow([ + row.date, + row.day, + na(row.avgManual), + na(row.avgIot), + na(row.uniformity), + na(row.difference), + na(row.accuracy), + ]); + } + + const feedInSheet = workbook.addWorksheet('Feed In'); + feedInSheet.addRow(['Tanggal', 'Manual in', 'IoT in', 'Akurasi in %']); + for (const row of payload.feedIn) { + feedInSheet.addRow([row.date, na(row.manualIn), na(row.iotIn), na(row.accuracy)]); + } + + const feedUseSheet = workbook.addWorksheet('Feed Use'); + feedUseSheet.addRow(['Tanggal', 'Hari', 'Manual use', 'IoT use', 'Akurasi use %']); + for (const row of payload.feedUse) { + feedUseSheet.addRow([row.date, row.day, na(row.manualUse), na(row.iotUse), na(row.accuracy)]); + } + + const feedOutSheet = workbook.addWorksheet('Feed Out'); + feedOutSheet.addRow(['Tanggal', 'Manual out', 'IoT out', 'Akurasi out %']); + for (const row of payload.feedOut) { + feedOutSheet.addRow([row.date, na(row.manualOut), na(row.iotOut), na(row.accuracy)]); + } + + const fcrSheet = workbook.addWorksheet('FCR'); + fcrSheet.addRow(['Hari', 'FCR', 'Total Pakan', 'Bobot IoT', 'Ayam Hidup', 'Total Bobot Panen']); + for (const row of payload.fcr) { + fcrSheet.addRow([ + row.day, + na(row.iotFcr), + na(row.feedTotal), + na(row.iotWeight), + na(row.chickenLife), + na(row.harvestWeightTotal), + ]); + } + + const eefSheet = workbook.addWorksheet('EEF'); + eefSheet.addRow([ + 'Hari', + 'EEF', + 'Persentase Ayam Hidup', + 'BW Rata-rata Panen', + 'Umur Rata-rata Panen', + 'FCR', + ]); + for (const row of payload.eef) { + eefSheet.addRow([ + row.day, + na(row.iotEef), + na(row.chickenLifePercentage), + na(row.iotAverageHarvestBw), + na(row.iotAverageDayWeight), + na(row.iotFcr), + ]); + } + + const buffer = await workbook.xlsx.writeBuffer(); + const blob = new Blob([buffer], { + type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + }); + const period = + payload.reportType === 'end_cycle' ? 'Akhir-Siklus' : `Harian-Hari-${payload.upToDay}`; + const url = URL.createObjectURL(blob); + const anchor = document.createElement('a'); + anchor.href = url; + anchor.download = `Laporan-${period}-${payload.area}-${payload.kandangName}-${payload.cycleStart}_sd_${payload.cycleEnd}.xlsx`; + anchor.click(); + URL.revokeObjectURL(url); +} diff --git a/utils/reportTotals.ts b/utils/reportTotals.ts new file mode 100644 index 0000000..0c209d5 --- /dev/null +++ b/utils/reportTotals.ts @@ -0,0 +1,112 @@ +import type { + DashboardReportCountingRow, + DashboardReportFeedInRow, + DashboardReportFeedOutRow, + DashboardReportFeedUseRow, +} from '../types/dashboardReport.ts'; + +export const REPORT_TOTAL_LABEL = 'Total'; + +const isPresentNumber = (value: number | null | undefined): value is number => + typeof value === 'number' && Number.isFinite(value); + +function sumPresent(values: Array): number | null { + let total = 0; + let any = false; + for (const value of values) { + if (!isPresentNumber(value)) continue; + total += value; + any = true; + } + return any ? total : null; +} + +const sackAccuracy = (manual: number | null, iot: number | null): number | null => { + if (manual != null && iot != null && manual > 0 && iot > 0) { + return Math.round((Math.min(manual, iot) / Math.max(manual, iot)) * 1000) / 10; + } + if (manual === 0 && iot === 0) return 100; + return null; +}; + +export interface CountingTotalsRow { + label: string; + countBefore: number | null; + mortality: number | null; + harvest: number | null; + harvestWeight: number | null; + countAfter: number | null; + iotCount: number | null; + accuracy: number | null; +} + +export interface FeedInTotalsRow { + label: string; + manualIn: number | null; + iotIn: number | null; + accuracy: number | null; +} + +export interface FeedUseTotalsRow { + label: string; + manualUse: number | null; + iotUse: number | null; + accuracy: number | null; +} + +export interface FeedOutTotalsRow { + label: string; + manualOut: number | null; + iotOut: number | null; + accuracy: number | null; +} + +export function countingTotals(rows: DashboardReportCountingRow[]): CountingTotalsRow | null { + if (!rows.length) return null; + return { + label: REPORT_TOTAL_LABEL, + countBefore: null, + mortality: sumPresent(rows.map((row) => row.mortality)), + harvest: sumPresent(rows.map((row) => row.harvest)), + harvestWeight: sumPresent(rows.map((row) => row.harvestWeight)), + countAfter: null, + iotCount: null, + accuracy: null, + }; +} + +export function feedInTotals(rows: DashboardReportFeedInRow[]): FeedInTotalsRow | null { + if (!rows.length) return null; + const manualIn = sumPresent(rows.map((row) => row.manualIn)); + const iotIn = sumPresent(rows.map((row) => row.iotIn)); + return { + label: REPORT_TOTAL_LABEL, + manualIn, + iotIn, + accuracy: sackAccuracy(manualIn, iotIn), + }; +} + +export function feedUseTotals(rows: DashboardReportFeedUseRow[]): FeedUseTotalsRow | null { + if (!rows.length) return null; + const manualUse = sumPresent(rows.map((row) => row.manualUse)); + const iotUse = sumPresent(rows.map((row) => row.iotUse)); + return { + label: REPORT_TOTAL_LABEL, + manualUse, + iotUse, + accuracy: sackAccuracy(manualUse, iotUse), + }; +} + +export function feedOutTotals(rows: DashboardReportFeedOutRow[]): FeedOutTotalsRow | null { + if (!rows.length) return null; + const manualOut = sumPresent(rows.map((row) => row.manualOut)); + const iotOut = sumPresent(rows.map((row) => row.iotOut)); + return { + label: REPORT_TOTAL_LABEL, + manualOut, + iotOut, + accuracy: sackAccuracy(manualOut, iotOut), + }; +} diff --git a/utils/weight.ts b/utils/weight.ts new file mode 100644 index 0000000..1bf0bf7 --- /dev/null +++ b/utils/weight.ts @@ -0,0 +1,107 @@ +import { weightStandardData } from '../mockData/weightStandardData.ts'; + +/** + * Formats a weight value in grams into a locale-aware string. Values at or + * below 999 g stay in grams; larger values are shown in kg. Negative values + * (e.g. ADG during close-out) are shown with a minus sign. + * + * By default every value is shown with 4 decimal places (never rounded). + * Callers may override with options: + * - `decimals` decimal places to show (default 4) + * - `stripTrailingZeros` drop trailing zeros so the exact value is shown + * - `truncate` truncate instead of round (default false) + */ +export function formatWeight( + grams: number | null | undefined, + options?: { suffix?: string; decimals?: number; stripTrailingZeros?: boolean; truncate?: boolean } +): string { + const suffix = options?.suffix ?? ''; + const decimals = options?.decimals ?? 4; + const minDecimals = options?.stripTrailingZeros ? 0 : decimals; + + const format = (value: number, unit: string): string => { + let display = value; + if (options?.truncate) { + const factor = 10 ** decimals; + display = Math.trunc(display * factor) / factor; + } + const formatted = display.toLocaleString('id-ID', { + minimumFractionDigits: minDecimals, + maximumFractionDigits: decimals, + }); + return `${formatted} ${unit}${suffix}`; + }; + + if (grams == null) return format(0, 'g'); + const sign = grams < 0 ? '-' : ''; + const abs = Math.abs(grams); + const unit = abs <= 999 ? 'g' : 'kg'; + const display = abs <= 999 ? abs : abs / 1000; + return `${sign}${format(display, unit)}`; +} + +/** + * Picks the standard table whose harvest day is closest to the cycle's + * `total_days`. Every row carries values for days 1..35, so a 35-, 42- or + * 45-day cycle all map onto a matching table. + */ +function pickStandardValues(totalDays: number): number[] { + const rows = weightStandardData.data; + if (rows.length === 0) return []; + const exact = rows.find((row) => row.day === totalDays); + if (exact) return exact.values; + let closest = rows[0]!; + for (const row of rows) { + if (Math.abs(row.day - totalDays) < Math.abs(closest.day - totalDays)) { + closest = row; + } + } + return closest.values; +} + +/** Target body weight (grams) for a cycle day from the Ross 308 standard. */ +export function getTargetWeightForAge(age: number, totalDays: number): number | null { + const values = pickStandardValues(totalDays); + if (age < 1 || age > values.length) return null; + return values[age - 1] ?? null; +} + +/** Target daily weight gain (grams/day) for a cycle day from the standard. */ +export function getTargetGainForAge(age: number, totalDays: number): number | null { + const values = pickStandardValues(totalDays); + if (age < 2 || age > values.length) return null; + const current = values[age - 1]; + const previous = values[age - 2]; + if (current == null || previous == null) return null; + return current - previous; +} + +export type WeightStatus = 'ok' | 'warning' | 'critical'; + +/** ADG threshold used by the old dashboard: >=60 ok, >=40 warning, else critical. */ +export function adgStatus(adg: number | null | undefined): WeightStatus { + if (adg == null || adg < 0) return 'critical'; + if (adg >= 60) return 'ok'; + if (adg >= 40) return 'warning'; + return 'critical'; +} + +/** Uniformity threshold (CP 707): >=80 ok, >=70 warning, else critical. */ +export function uniformityStatus(uniformity: number | null | undefined): WeightStatus { + if (uniformity == null || uniformity < 0) return 'critical'; + if (uniformity >= 80) return 'ok'; + if (uniformity >= 70) return 'warning'; + return 'critical'; +} + +/** Average-weight status from the deviation against the standard target. */ +export function weightDeviationStatus( + actual: number | null | undefined, + target: number | null | undefined +): WeightStatus { + if (actual == null || target == null || target <= 0) return 'ok'; + const deviation = ((actual - target) / target) * 100; + if (deviation < -20) return 'critical'; + if (deviation < -10) return 'warning'; + return 'ok'; +} diff --git a/vite-env.d.ts b/vite-env.d.ts new file mode 100644 index 0000000..7a7f1cd --- /dev/null +++ b/vite-env.d.ts @@ -0,0 +1,9 @@ +/// + +interface ImportMetaEnv { + readonly VITE_API_BASE?: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..589e75e --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,29 @@ +/// +import path from 'path'; +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; + +export default defineConfig({ + plugins: [react()], + resolve: { + alias: { + '@': path.resolve(__dirname, '.'), + }, + }, + server: { + port: 3001, + host: '0.0.0.0', + proxy: { + '/api': { + target: 'http://127.0.0.1:8000', + changeOrigin: true, + }, + }, + }, + test: { + globals: true, + environment: 'jsdom', + setupFiles: './tests/setup.ts', + exclude: ['node_modules/**', 'dist/**'], + }, +});