Documents available API endpoints and their limitations: - set_deployment: Creates deployment (WORKS, returns deployment_id) - device_form: Attaches device to deployment (WORKS) - request_devices: Gets devices list (BROKEN - KeyError in Legacy API) Includes room location codes, SQL queries for WellNuo DB access, and complete flow examples for beneficiary setup. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
9.7 KiB
9.7 KiB
Legacy API — Device & Deployment Management
Overview
WellNuo использует Legacy API (eluxnetworks.net) для управления IoT устройствами и деплойментами.
Архитектура баз данных:
- Legacy DB (eluxnetworks.net, внутренняя) — хранит deployments, users, devices созданные через API
- WellNuo DB (
wellnuo_appна eluxnetworks.net:5432) — хранит связи WellNuo beneficiaries с Legacy deployments
Authentication
Login (Get Token)
curl -s -X POST https://eluxnetworks.net/function/well-api/api \
-d "function=credentials" \
-d "user_name=robster" \
-d "ps=rob2" \
-d "clientId=001" \
-d "nonce=$(date +%s)"
Response:
{
"ok": 1,
"token": "eyJhbGciOiJIUzI1NiIs...",
"user_name": "robster",
"expiry": 1766257742
}
Token validity: 7 days
Deployments
Create Deployment (set_deployment) ✅ РАБОТАЕТ
Создаёт deployment и пользователя-бенефициара в Legacy системе.
TOKEN="your-jwt-token"
TIMESTAMP=$(date +%s)
curl -s -X POST https://eluxnetworks.net/function/well-api/api \
-d "function=set_deployment" \
-d "user_name=robster" \
-d "token=$TOKEN" \
-d "deployment=NEW" \
-d "beneficiary_name=Test User" \
-d "beneficiary_email=test${TIMESTAMP}@example.com" \
-d "beneficiary_user_name=testuser${TIMESTAMP}" \
-d "beneficiary_password=securepass123" \
-d "beneficiary_address=123 Main St" \
-d "beneficiary_photo=/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAn/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCwAB//2Q==" \
-d "firstName=Test" \
-d "lastName=User" \
-d "first_name=Test" \
-d "last_name=User" \
-d "new_user_name=testuser${TIMESTAMP}" \
-d "phone_number=+10000000000" \
-d "key=securepass123" \
-d "signature=Test" \
-d "gps_age=0" \
-d "wifis=[]" \
-d "devices=[]"
Response:
{
"ok": 1,
"deployment_id": 120,
"beneficiary_user_id": 273,
"status": "200 OK"
}
Важные параметры:
| Параметр | Обязательный | Описание |
|---|---|---|
beneficiary_photo |
✅ Да | Base64 JPEG (даже минимальный 1x1 pixel) |
beneficiary_user_name |
✅ Да | Уникальный username |
beneficiary_email |
✅ Да | Уникальный email |
key |
✅ Да | Пароль бенефициара |
signature |
✅ Да | Подпись (любое значение) |
Devices
Room Location Codes
| Room | Code |
|---|---|
| Bedroom | 102 |
| Living Room | 103 |
| Kitchen | 104 |
| Bathroom | 105 |
| Hallway | 106 |
| Office | 107 |
| Garage | 108 |
| Dining Room | 109 |
| Basement | 110 |
| Other | 200 |
Attach Device to Deployment (device_form)
TOKEN="your-jwt-token"
curl -s -X POST https://eluxnetworks.net/function/well-api/api \
-d "function=device_form" \
-d "user_name=robster" \
-d "token=$TOKEN" \
-d "well_id=523" \
-d "mac=142B2F81AAD4" \
-d "location=102" \
-d "description=Bedroom" \
-d "group_id=120"
Response:
{"ok": 1}
Set Device Well ID (device_set_well_id)
Привязка устройства к деплойменту:
TOKEN="your-jwt-token"
curl -s -X POST https://eluxnetworks.net/function/well-api/api \
-d "function=device_set_well_id" \
-d "user_name=robster" \
-d "token=$TOKEN" \
-d "well_id=523" \
-d "new_group_id=120"
Get Deployment Devices (request_devices)
TOKEN="your-jwt-token"
curl -s -X POST https://eluxnetworks.net/function/well-api/api \
-d "function=request_devices" \
-d "user_name=robster" \
-d "token=$TOKEN" \
-d "deployment_id=120"
Примечание: Может требовать внутреннюю инициализацию. Если не работает — используйте SQL.
WellNuo Database Access
Для работы с WellNuo данными (связи beneficiary ↔ deployment) используйте PostgreSQL напрямую.
Connection
PGCONNECT_TIMEOUT=15 PGPASSWORD='W31153Rg31' psql \
-h eluxnetworks.net -p 5432 -U sergei -d wellnuo_app
Link Beneficiary to Legacy Deployment
-- Привязать WellNuo beneficiary к Legacy deployment
INSERT INTO beneficiary_deployments (beneficiary_id, legacy_deployment_id)
VALUES (71, 120)
ON CONFLICT (beneficiary_id)
DO UPDATE SET legacy_deployment_id = 120;
Get Devices for Deployment
SELECT
id AS well_id,
mac,
description AS room_name,
location AS room_code,
group_id AS deployment_id,
online,
last_data_at
FROM devices
WHERE group_id = 120
ORDER BY id;
Check Device Online Status
SELECT
id AS well_id,
description AS room,
online,
last_data_at,
CASE
WHEN online = true AND last_data_at > NOW() - INTERVAL '5 minutes' THEN 'Online'
WHEN last_data_at > NOW() - INTERVAL '1 hour' THEN 'Recent'
ELSE 'Offline'
END AS status
FROM devices
WHERE group_id = 120;
Change Room Assignment
UPDATE devices
SET
location = 103, -- Living Room
description = 'Living Room'
WHERE id = 523;
Complete Flow: Create Beneficiary with Device
1. Get Legacy Token
TOKEN=$(curl -s -X POST https://eluxnetworks.net/function/well-api/api \
-d "function=credentials&user_name=robster&ps=rob2&clientId=001&nonce=$(date +%s)" \
| jq -r '.token')
2. Create Legacy Deployment
TIMESTAMP=$(date +%s)
RESPONSE=$(curl -s -X POST https://eluxnetworks.net/function/well-api/api \
-d "function=set_deployment" \
-d "user_name=robster" \
-d "token=$TOKEN" \
-d "deployment=NEW" \
-d "beneficiary_name=John Doe" \
-d "beneficiary_email=john${TIMESTAMP}@example.com" \
-d "beneficiary_user_name=johndoe${TIMESTAMP}" \
-d "beneficiary_password=pass123" \
-d "beneficiary_address=123 Main St" \
-d "beneficiary_photo=/9j/4AAQSkZJRgABAQEASABIAAD..." \
-d "firstName=John" \
-d "lastName=Doe" \
-d "first_name=John" \
-d "last_name=Doe" \
-d "new_user_name=johndoe${TIMESTAMP}" \
-d "phone_number=+15551234567" \
-d "key=pass123" \
-d "signature=wellnuo" \
-d "gps_age=0" \
-d "wifis=[]" \
-d "devices=[]")
DEPLOYMENT_ID=$(echo $RESPONSE | jq -r '.deployment_id')
echo "Created deployment: $DEPLOYMENT_ID"
3. Attach Device to Deployment
curl -s -X POST https://eluxnetworks.net/function/well-api/api \
-d "function=device_form" \
-d "user_name=robster" \
-d "token=$TOKEN" \
-d "well_id=523" \
-d "mac=142B2F81AAD4" \
-d "location=102" \
-d "description=Bedroom" \
-d "group_id=$DEPLOYMENT_ID"
4. Link to WellNuo Beneficiary
PGPASSWORD='W31153Rg31' psql -h eluxnetworks.net -p 5432 -U sergei -d wellnuo_app -c "
INSERT INTO beneficiary_deployments (beneficiary_id, legacy_deployment_id)
VALUES (71, $DEPLOYMENT_ID)
ON CONFLICT (beneficiary_id) DO UPDATE SET legacy_deployment_id = $DEPLOYMENT_ID;
"
WellNuo Backend Integration
Код в /var/www/wellnuo-api/src/legacyAPI.js:
// Room location mapping
const ROOM_LOCATIONS = {
'Bedroom': 102,
'Living Room': 103,
'Kitchen': 104,
'Bathroom': 105,
'Hallway': 106,
'Office': 107,
'Garage': 108,
'Dining Room': 109,
'Basement': 110,
'Other': 200
};
// Create deployment via Legacy API
async function createLegacyDeployment(params) {
const formData = new URLSearchParams({
function: 'set_deployment',
user_name: params.username,
token: params.token,
deployment: 'NEW',
beneficiary_name: params.beneficiaryName,
beneficiary_email: params.beneficiaryEmail,
beneficiary_user_name: params.beneficiaryUsername,
beneficiary_password: params.beneficiaryPassword,
beneficiary_photo: params.beneficiaryPhoto || MINIMAL_JPEG,
// ... other params
});
const response = await fetch(LEGACY_API_URL, {
method: 'POST',
body: formData
});
const data = await response.json();
return data.deployment_id; // Returns actual deployment ID (e.g., 120)
}
Quick Reference
| Task | Method | Endpoint/Query |
|---|---|---|
| Login | API | function=credentials |
| Create deployment | API | function=set_deployment |
| Attach device | API | function=device_form |
| Change device group | API | function=device_set_well_id |
| Get devices | SQL | SELECT * FROM devices WHERE group_id = ? |
| Change room | SQL | UPDATE devices SET location = ? |
| Check online status | SQL | SELECT online, last_data_at FROM devices |
| Link WellNuo beneficiary | SQL | INSERT INTO beneficiary_deployments... |
Database Tables
devices (Legacy DB, accessible via SQL)
id (well_id), mac, description (room), location (room_code),
group_id (deployment_id), online, last_data_at, firmware
beneficiary_deployments (WellNuo DB)
beneficiary_id, legacy_deployment_id
Troubleshooting
deployment_id: 0 в ответе
- Убедитесь что передаёте
beneficiary_photoс валидным base64 JPEG - Все обязательные поля должны быть заполнены
request_devices возвращает ошибку
- Используйте SQL запрос к таблице
devicesкак альтернативу
Device не обновляется через API
- Используйте SQL UPDATE для существующих устройств