# WellNuo API Documentation ## Overview WellNuo - система мониторинга здоровья пожилых людей. API позволяет получать данные о пациентах, их активности, локации и состоянии здоровья. **Дата тестирования:** 2025-12-10 **Статус:** Работает --- ## Endpoints ### Base URL ``` https://eluxnetworks.net/function/well-api/api ``` ### Web Dashboard ``` https://react.eluxnetworks.net/dashboard ``` --- ## Authentication ### Credentials ``` Username: anandk Password: anandk_8 Client ID: 001 ``` ### Получение токена **Request:** ```bash curl -X POST "https://eluxnetworks.net/function/well-api/api" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "function=credentials&clientId=001&user_name=anandk&ps=anandk_8&nonce=$(uuidgen)" ``` **Parameters:** | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | function | string | Yes | `credentials` | | clientId | string | Yes | `001` | | user_name | string | Yes | Username | | ps | string | Yes | Password | | nonce | string | Yes | Unique UUID for each request | **Response (200 OK):** ```json { "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "privileges": "21,38,29,41,42", "user_id": 43, "max_role": 2, "status": "200 OK" } ``` **Token Format:** JWT (JSON Web Token) - Algorithm: HS256 - Expiration: ~7 days (exp claim in payload) --- ## API Endpoints ### 1. Dashboard List (Список пациентов) **Request:** ```bash curl -X POST "https://eluxnetworks.net/function/well-api/api" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "function=dashboard_list&user_name=anandk&token=&date=2025-12-10&nonce=" ``` **Parameters:** | Parameter | Type | Required | Description | |-----------|------|----------|-------------| | function | string | Yes | `dashboard_list` | | user_name | string | Yes | Username | | token | string | Yes | JWT access token | | date | string | Yes | Date in YYYY-MM-DD format | | nonce | string | Yes | Unique UUID | **Response:** ```json { "result_list": [ { "user_id": 25, "name": "Ferdinand Zmrzli", "address": "661 Encore Way", "time_zone": "America/Los_Angeles", "picture": "/", "bathroom_at": "2025-12-10T13:52:00", "kitchen_at": "2025-12-10T14:48:00", "bedroom_at": "2025-12-10T09:14:00", "temperature": 72.77, "smell": "clean", "bathroom_delayed": [6, 12], "kitchen_delayed": [6, 12], "bedroom_delayed": [13, 16], "last_location": "Kitchen", "last_detected_time": "2025-12-10T14:47:00", "before_last_location": "Living Room", "last_present_duration": 1, "wellness_score_percent": 90, "wellness_descriptor": "Great!", "wellness_descriptor_color": "bg-green-100 text-green-700", "bedroom_temperature": 15.22, "sleep_bathroom_visit_count": 0, "bedroom_co2": 500, "shower_detected_time": "2025-12-10T13:52:00", "breakfast_detected_time": 0, "living_room_time_spent": 0, "outside_hours": 0, "most_time_spent_in": "Bedroom", "sleep_hours": 11.12, "units": "°F", "deployment_id": 21, "location_list": ["Living Room", "Bathroom Small", "Bedroom", "Dining Room", "Bathroom Main", "Kitchen", "Office"] } ], "status": "200 OK" } ``` --- ## Available Patients (Тестовые данные) | User ID | Name | Address | Timezone | Deployment ID | |---------|------|---------|----------|---------------| | 25 | Ferdinand Zmrzli | 661 Encore Way | America/Los_Angeles | 21 | | 34 | Helga Kleine | - | Europe/Berlin | 29 | | 48 | Đurđica Božičević-Radić | A.T. Mimare 38 | Europe/Zagreb | 38 | | 50 | Tarik Hubana | - | Europe/Sarajevo | 41 | | 54 | Jamie Rivera-Vallestero | 2088 Trafalgar Ave | US/Pacific | 42 | --- ## Data Structure ### Patient Object Fields | Field | Type | Description | |-------|------|-------------| | user_id | int | Unique patient ID | | name | string | Patient full name | | address | string | Home address | | time_zone | string | IANA timezone | | temperature | float | Current room temperature | | smell | string | Air quality (clean/etc) | | last_location | string | Current room | | last_detected_time | datetime | Last activity timestamp | | wellness_score_percent | int | Health score 0-100 | | wellness_descriptor | string | Status text | | sleep_hours | float | Hours slept | | bathroom_at | datetime | Last bathroom visit | | kitchen_at | datetime | Last kitchen visit | | bedroom_at | datetime | Last bedroom visit | | location_list | array | Available rooms in home | | units | string | Temperature units (°F/°C) | | deployment_id | int | Sensor deployment ID | --- ## Integration Notes ### WebView Integration (React Native) Для встраивания dashboard в React Native приложение: ```javascript import { WebView } from 'react-native-webview'; // Inject credentials and auto-login const injectedJS = ` localStorage.setItem('auth2', JSON.stringify({ username: 'anandk', token: '${token}', user_id: 43 })); window.location.reload(); true; `; ``` ### Request Headers All requests use: ``` Content-Type: application/x-www-form-urlencoded ``` ### Nonce Generation Each request requires a unique nonce (UUID): ```javascript const nonce = crypto.randomUUID(); // or const nonce = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { const r = Math.random() * 16 | 0; return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16); }); ``` --- ## Error Handling | Status | Description | |--------|-------------| | 200 OK | Success | | 401 | Invalid token | | 403 | Access denied | | 404 | Resource not found | | 405 | Method not allowed (use POST) | --- ## Quick Test Commands ### 1. Get Token ```bash curl -s -X POST "https://eluxnetworks.net/function/well-api/api" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "function=credentials&clientId=001&user_name=anandk&ps=anandk_8&nonce=test-123" ``` ### 2. Get Dashboard ```bash TOKEN="" curl -s -X POST "https://eluxnetworks.net/function/well-api/api" \ -d "function=dashboard_list&user_name=anandk&token=$TOKEN&date=$(date +%Y-%m-%d)&nonce=test-456" ``` --- --- ## Patient Context API (для AI чата) ### Endpoint ``` https://wellnuo.smartlaunchhub.com/api/patient/context ``` ### Request ```bash curl -s "https://wellnuo.smartlaunchhub.com/api/patient/context" ``` ### Response Structure API возвращает детальные данные о пациенте для использования в AI чате: ```json { "patient": { "id": "dad", "name": "John Smith", "age": 78, "relationship": "Father", "address": "123 Oak Street, San Francisco, CA", "timezone": "America/Los_Angeles", "emergency_contact": { "name": "Sarah Smith", "phone": "+1 (555) 123-4567" } }, "current_status": { "location": "Living Room", "presence_detected": true, "is_moving": false, "last_movement": "2025-12-10T22:51:43.316Z", "estimated_activity": "resting", "time_in_current_room_minutes": 45 }, "environment": { "living_room": { "temperature_c": 22.2, "temperature_f": 72, "humidity_percent": 45, "co2_ppm": 650, "voc_index": 85, "light_lux": 320, "air_quality_status": "good", "presence": true, "motion_level": "low" } }, "sleep_analysis": { "last_night": { "bed_time_detected": "2025-11-30T22:18:00Z", "wake_time_detected": "2025-12-01T05:45:00Z", "total_hours": 7.45, "quality_score": 78, "bathroom_visits": 1 } }, "activity_patterns": { "today": { "total_active_minutes": 185, "sedentary_minutes": 240, "rooms_visited": ["Bedroom", "Bathroom", "Kitchen", "Living Room"] } }, "recent_events": [ { "time": "2025-12-01T10:45:00Z", "type": "presence", "event": "Continued presence in living room", "room": "Living Room" } ], "alerts": { "active": [], "recent": [ { "id": "alert_001", "type": "possible_fall", "severity": "high", "timestamp": "2025-11-15T14:22:00Z", "room": "Bathroom", "resolved": true } ] } } ``` ### Доступные данные для чата: | Раздел | Описание | |--------|----------| | patient | Информация о пациенте | | current_status | Текущее местоположение и активность | | environment | Данные сенсоров по комнатам | | environment_history | История показателей за день | | sleep_analysis | Анализ сна | | activity_patterns | Паттерны активности | | recent_events | Последние события (до 90 записей) | | alerts | Активные и недавние алерты | --- ## Files - `tests/api-check.spec.js` - Playwright tests for API - `tests/network-capture.spec.js` - Network capture for debugging - `tests/api-discovery.spec.js` - API endpoint discovery - `tests/screenshots/` - Visual verification screenshots --- --- ## React Native WebView Integration ### Installation ```bash npm install react-native-webview ``` ### Usage Example ```tsx import { DashboardWebView } from './src/components'; function DashboardScreen() { const handlePatientSelect = (patientId: number, patientName: string) => { console.log('Selected patient:', patientId, patientName); // Navigate to patient details or start voice chat }; return ( console.error(error)} /> ); } ``` ### Component: `src/components/DashboardWebView.tsx` Компонент автоматически: 1. Получает JWT токен через API 2. Автоматически логинится в веб-интерфейс 3. Отображает dashboard внутри приложения 4. Перехватывает клики на пациентах ### Credentials в коде: ```typescript const CREDENTIALS = { username: 'anandk', password: 'anandk_8', clientId: '001' }; ``` --- --- ## Gitea Repository Access ### Credentials ``` URL: https://gitea.wellnua.com Username: sergei_t Password: WellNuo2025!Secure Email: serter2069@gmail.com ``` ### Repository ``` https://gitea.wellnua.com/robert/MobileApp_react_native ``` ### Clone Command ```bash git clone https://sergei_t:WellNuo2025%21Secure@gitea.wellnua.com/robert/MobileApp_react_native.git ``` ### Local Clone ``` ~/Desktop/Wellnuo/wellnuo-mobile-repo/ ``` --- ## Contact / Support - Dashboard: https://react.eluxnetworks.net/dashboard - API Base: https://eluxnetworks.net/function/well-api/api - Patient Context: https://wellnuo.smartlaunchhub.com/api/patient/context - Gitea: https://gitea.wellnua.com