1. Tổng quan
Cổng thông tin gồm 4 thành phần, dùng chung một cơ sở dữ liệu (xnm_soctrang):
| Thành phần | Địa chỉ | Dành cho | Vai trò cần |
|---|---|---|---|
| Bản đồ xâm nhập mặn Xem hiện trạng & dự báo theo xã | http://dubaoxnmst.hcmunre.edu.vn/ | Mọi người | Khách |
| Trang quản trị Nhập liệu, import, người dùng, API, sao lưu | http://dubaoxnmst.hcmunre.edu.vn/admin/ | Cán bộ vận hành | viewer operator admin |
| API mở v1 Cho cơ quan/đối tác tự lấy dữ liệu | http://dubaoxnmst.hcmunre.edu.vn/api/v1/ | Hệ thống bên thứ ba | API key |
| Tác vụ tự động (cron) & mô hình AI | cron/, python/ | Quản trị hệ thống | Máy chủ |
2. Bản đồ xâm nhập mặn
Mở trang chủ http://dubaoxnmst.hcmunre.edu.vn/. Màn hình chia 3 khu: thanh thời điểm (trên cùng), bản đồ (giữa), hai bảng thông tin (trái & phải). Nút / trên đầu để ẩn/hiện từng bảng.
2.1 Chọn thời điểm / dự báo
Thanh “Thời điểm” có nút Hiện tại và +1N … +10N:
- Hiện tại – mức mặn thực đo/nội suy mới nhất của từng xã.
- +1N … +10N – dự báo 1–10 ngày tới, tính theo xu hướng quan trắc 72 giờ gần nhất. Bản đồ đổi sang tông màu cam và ghi rõ ngày dự báo.
2.2 Thao tác trên bản đồ
| Nút | Chức năng |
|---|---|
| Đưa bản đồ về trung tâm tỉnh | |
| Đổi nền bản đồ (đường phố ↔ ảnh vệ tinh) | |
| Ẩn/hiện các điểm xã (chấm tròn) | |
| Ẩn/hiện các trạm đo (hình tam giác tím) |
- Vùng màu là trường nội suy độ mặn (IDW) giữa các xã – tại trung điểm 2 xã, giá trị hội tụ về trung bình của 2 xã đó.
- Bấm vào một xã → hiện hộp thông tin (độ mặn, mức cảnh báo, trạm gần nhất, thời điểm) và vẽ biểu đồ diễn biến ở bảng trái.
- Di chuột lên trạm đo → xem tên, địa danh, mã trạm.
2.3 Bảng trái: Thống kê & Địa điểm
- Tab Thống kê – số xã theo từng cấp độ mặn (Ngọt / Nhẹ / Trung bình / Cao / Nguy hiểm) tại mốc thời gian đang chọn; biểu đồ Thực đo 72h + Dự báo 10 ngày cho xã đang chọn.
- Tab Địa điểm – ô tìm kiếm theo tên xã/huyện; bấm một dòng để bay tới xã đó trên bản đồ.
2.4 Bảng phải: Điểm nóng, Xu hướng, Đề xuất giải pháp
- Điểm nóng đang xem – tối đa 6 xã có mức Cao/Nguy hiểm ở mốc thời gian hiện tại; bấm để xem nhanh.
- Xu hướng theo huyện (10 ngày tới) – so sánh độ mặn trung bình hiện tại → dự báo +10 ngày cho từng huyện, kèm nhãn Nguy cơ tăng cao / Tăng nhẹ / Ổn định / Cải thiện.
- Đề xuất giải pháp thích nghi – danh sách giải pháp ứng phó theo xã/huyện.
- Khách / viewer: chỉ xem.
- operator / admin: gửi đề xuất mới (tiêu đề, nội dung, xã áp dụng, mức ưu tiên) và đổi trạng thái Đề xuất mới → Đang triển khai → Hoàn thành / Không áp dụng.
- Chỉ admin được xoá đề xuất.
2.5 Phân cấp độ mặn (dùng thống nhất toàn hệ thống)
| Cấp | Giá trị (‰) | Màu | Ý nghĩa thực tế |
|---|---|---|---|
Ngọt (fresh) | < 0.5 | Xanh lá | Sử dụng bình thường cho sinh hoạt, tưới tiêu |
Nhẹ (slight) | 0.5 – 1.0 | Xanh nhạt | Bắt đầu ảnh hưởng cây trồng nhạy cảm |
Trung bình (moderate) | 1.0 – 4.0 | Vàng | Hạn chế lấy nước tưới; cân nhắc trữ ngọt |
Cao (high) | 4.0 – 8.0 | Cam | Ngưng lấy nước; vận hành cống ngăn mặn |
Nguy hiểm (critical) | > 8.0 | Đỏ | Cảnh báo khẩn; ảnh hưởng nghiêm trọng |
3. Đăng nhập & phân quyền
Vào http://dubaoxnmst.hcmunre.edu.vn/admin/login.php, đăng nhập bằng tên đăng nhập/email + mật khẩu.
Tài khoản mặc định (đổi mật khẩu ngay sau lần đăng nhập đầu)
| Tài khoản | Mật khẩu | Vai trò | Được làm gì |
|---|---|---|---|
admin | Admin@123 | admin | Toàn quyền: nhập liệu, import, người dùng, API, nhật ký, sao lưu, xoá dữ liệu |
operator | Operator@123 | operator | Nhập & import dữ liệu quan trắc, gửi đề xuất giải pháp |
viewer | Viewer@123 | viewer | Chỉ xem Dashboard & dữ liệu |
4. Trang quản trị
Menu bên trái gồm các mục; mục có nhãn admin chỉ hiển thị với quản trị viên.
4.1 Dashboard viewer+
Tổng quan nhanh: tổng số xã, số xã vượt ngưỡng (>4‰), số xã cập nhật trong 24h, số xã nguy hiểm; biểu đồ phân bố cấp mặn, xu hướng trung bình 7 ngày, bảng xã vượt ngưỡng và hoạt động đăng nhập gần đây.
4.2 Dữ liệu quan trắc mặn operator+
- Lọc theo tên xã/huyện, cấp mặn, nguồn dữ liệu (
station/ai/manual). - Thêm dữ liệu (nút “Thêm dữ liệu”): chọn xã, nhập độ mặn (‰), nguồn, thời điểm đo (để trống = hiện tại).
- Xoá 1 bản ghi – chỉ admin.
- Dọn dữ liệu cũ (nút đỏ) – xoá toàn bộ bản ghi cũ hơn N ngày; chỉ admin. Cân nhắc sao lưu trước.
4.3 Import Excel / CSV operator+
Nhập hàng loạt độ mặn cho 4 trạm chính (Ngã Năm, Sóc Trăng, Thạnh Phú, Đại Ngãi) từ file .xlsx / .csv / .txt (tối đa 30 MB).
Cấu trúc file chuẩn
| Cột | Nội dung |
|---|---|
| A | Date Time – thời điểm đo |
| B | Sal_Ngã Năm |
| C | Sal_Sóc Trăng |
| D | Sal_Thạnh Phú |
| E | Sal_Đại Ngãi |
Định dạng ngày chấp nhận: Excel serial (43831, 43831.0833…), dd/mm/yyyy hh:mm, yyyy-mm-dd hh:mm:ss.
Các bước
- Kéo–thả file vào ô upload (hoặc bấm để chọn). Hệ thống đọc & nhận diện cột.
- Bước 2 – Xác nhận ánh xạ cột: kiểm tra các badge cột đã nhận diện (DateTime, Sal – từng trạm) và xem trước 6 dòng đầu.
- Bước 3 – Nhập vào Database: bấm “Nhập vào Database”. Bản ghi trùng (trạm + thời gian) sẽ được cập nhật, không nhân đôi.
- Bước 4 – Kết quả: số dòng Thêm mới / Cập nhật / Bỏ qua / Lỗi, phân bổ theo trạm, khoảng thời gian dữ liệu. Lịch sử import hiển thị ở cột phải.
4.4 Người dùng admin
- Tạo user: username (≥3 ký tự), email, mật khẩu (≥6 ký tự), họ tên, vai trò.
- Đổi vai trò ngay trên bảng (ô chọn). Không thể tự đổi quyền chính mình.
- Bật/tắt tài khoản; đặt lại mật khẩu (nút chìa khoá); xoá (không thể xoá chính mình).
4.5 API & Kết nối admin
Nơi cấp và quản lý quyền truy cập API mở cho các cơ quan/đối tác.
Tạo client API
- Bấm “Tạo client”. Nhập tên (VD “Sở NN&PTNT Sóc Trăng”), tổ chức, email liên hệ.
- Chọn scope (phạm vi cho phép):
stations,observations,forecast,communes,statistics. Chỉ tick những nhóm dữ liệu đối tác được phép lấy. - Đặt hạn mức request/ngày (mặc định 5000; nhập
0= không giới hạn). - Bấm “Tạo & cấp API key”. Sao chép ngay API key hiển thị – lần tải trang sau key sẽ bị che.
- Gửi API key cho đối tác qua kênh an toàn.
Quản lý
| Thao tác | Ý nghĩa |
|---|---|
| Sửa | Đổi tên/tổ chức/email/ghi chú, scope, hạn mức |
| Tạo lại key | Sinh key mới; key cũ hết hiệu lực ngay (dùng khi lộ key) |
| Nút trạng thái | Tạm dừng / kích hoạt lại client (không xoá dữ liệu) |
| Xoá | Xoá hẳn client |
Giám sát
Phần trên trang hiển thị: Request hôm nay, Lỗi hôm nay (≥400), Thời gian phản hồi trung bình, Tổng request đã ghi, Endpoint gọi nhiều nhất và bảng 20 request gần nhất (thời gian · client · endpoint · status · ms · IP). Cột “Hôm nay / Tổng” trong bảng client chuyển đỏ khi client chạm hạn mức.
demo_public_readonly_key_2026 (500 req/ngày) phục vụ trang tài liệu. Có thể tắt/xoá nếu không cần.4.6 Nhật ký đăng nhập admin
Toàn bộ lượt đăng nhập: user, họ tên, IP, User-Agent, kết quả (thành công/thất bại), thời gian. Kèm 3 chỉ số: đăng nhập thành công, thất bại, và số lượt hôm nay.
4.7 Sao lưu Database admin
- Bấm “Tải xuống file .sql ngay”. File chứa
DROP TABLE + CREATE TABLE + INSERTcủa các bảng lõi. - Khôi phục: mở phpMyAdmin → chọn CSDL
xnm_soctrang→ tab Import → chọn file .sql → Go. Hoặc CLI:mysql -u root xnm_soctrang < xnm_soctrang_backup_*.sql
5. Tích hợp API mở (dành cho cơ quan/đối tác)
Địa chỉ gốc: http://dubaoxnmst.hcmunre.edu.vn/api/v1 · Chỉ GET · Trả JSON (một số endpoint có CSV). Tra cứu tham số chi tiết tại trang tài liệu API.
Bước 1 – Xin cấp API key
Liên hệ quản trị hệ thống để được tạo client và cấp API key (xem mục 4.5). Key gắn với các scope và hạn mức/ngày cụ thể. Gửi key ở header mỗi request:
X-API-Key: <API_KEY>
Hoặc qua query string: ?api_key=<API_KEY>
Bước 2 – Gọi thử (không cần key)
curl "http://dubaoxnmst.hcmunre.edu.vn/api/v1/"
Trả về thông tin dịch vụ và danh sách toàn bộ endpoint kèm scope tương ứng.
Bước 3 – Lấy danh sách trạm
curl -H "X-API-Key: demo_public_readonly_key_2026" "http://dubaoxnmst.hcmunre.edu.vn/api/v1/stations"
Mỗi trạm gồm ma_tram, ten_tram, toạ độ, và số đo mới nhất (muc_nuoc m, luu_luong m³/s, do_man ‰). Dùng ma_tram cho các endpoint sau. Chi tiết 1 trạm: /stations/{ma_tram}.
Bước 4 – Lấy dữ liệu quan trắc
Endpoint /observations – lọc theo trạm, yếu tố môi trường và khoảng thời gian:
curl -H "X-API-Key: demo_public_readonly_key_2026" \ "http://dubaoxnmst.hcmunre.edu.vn/api/v1/observations?station=NGA_NAM,SOC_TRANG¶m=salinity&from=2026-08-01&to=2026-09-01&limit=1000"
| Tham số | Giá trị |
|---|---|
station (bắt buộc) | 1 hoặc nhiều ma_tram, cách nhau bằng dấu phẩy |
param | salinity · water_level · flow_rate · all (mặc định) |
from, to | ISO 8601. Mặc định 7 ngày gần nhất. Tối đa 366 ngày/lần gọi. |
limit / offset | Phân trang (limit ≤ 5000). meta.total = tổng số dòng khớp. |
format=csv | Tải file CSV (có BOM UTF-8, mở đúng tiếng Việt trong Excel) |
# Xuất CSV toàn bộ yếu tố của 1 trạm curl -H "X-API-Key: demo_public_readonly_key_2026" \ "http://dubaoxnmst.hcmunre.edu.vn/api/v1/observations?station=DAI_NGAI¶m=all&from=2026-01-01&format=csv" -o dai_ngai_2026.csv
Bước 5 – Lấy dữ liệu dự báo
curl -H "X-API-Key: demo_public_readonly_key_2026" "http://dubaoxnmst.hcmunre.edu.vn/api/v1/forecast?station=NGA_NAM"
Trả kết quả dự báo độ mặn theo giờ từ mô hình AI. meta.model_generated_at = thời điểm mô hình chạy gần nhất; meta.stations_with_forecast = các trạm có dự báo. Có format=csv.
Bước 6 – Lớp xã cho bản đồ
curl -H "X-API-Key: demo_public_readonly_key_2026" "http://dubaoxnmst.hcmunre.edu.vn/api/v1/communes?day=3"
day=0 hiện tại, day=1..10 dự báo. Mỗi xã có salinity, level, level_label, toạ độ – đủ để tô bản đồ ở hệ thống của bạn. Có format=csv.
Thống kê tổng hợp toàn tỉnh: /statistics.
Bước 7 – Lỗi & hạn mức
| HTTP | Khi nào | Xử lý |
|---|---|---|
| 401 | Thiếu / sai API key | Kiểm tra header X-API-Key |
| 403 | Key bị tắt, hoặc không có scope | Liên hệ quản trị xin bổ sung scope |
| 400 | Tham số sai / khoảng thời gian > 366 ngày | Chia nhỏ khoảng thời gian, dùng phân trang |
| 429 | Vượt hạn mức/ngày | Xem header Retry-After; giảm tần suất gọi hoặc xin nâng hạn mức |
Mỗi phản hồi kèm header X-RateLimit-Limit và X-RateLimit-Remaining để bạn tự điều tiết.
Bước 8 – Ví dụ: script đồng bộ định kỳ (Python)
import requests, csv, datetime as dt
BASE = "http://dubaoxnmst.hcmunre.edu.vn/api/v1"
KEY = "<API_KEY>"
H = {"X-API-Key": KEY}
def fetch_all(station, param, since):
rows, offset = [], 0
while True:
r = requests.get(f"{BASE}/observations", headers=H, timeout=60, params={
"station": station, "param": param,
"from": since, "limit": 5000, "offset": offset,
})
r.raise_for_status()
d = r.json()
rows += d["data"]
if offset + d["meta"]["limit"] >= d["meta"]["total"]:
break
offset += d["meta"]["limit"]
return rows
since = (dt.date.today() - dt.timedelta(days=7)).isoformat()
data = fetch_all("NGA_NAM,SOC_TRANG,THANH_PHU,DAI_NGAI", "salinity", since)
print(f"Đã lấy {len(data)} bản ghi từ {since}")
with open("salinity_7d.csv", "w", newline="", encoding="utf-8-sig") as f:
w = csv.DictWriter(f, fieldnames=data[0].keys())
w.writeheader(); w.writerows(data)
Đặt script vào cron của phía bạn (VD chạy mỗi giờ) để duy trì bản sao dữ liệu luôn cập nhật.
6. Tự động hoá & nguồn dữ liệu
| Thành phần | Tần suất | Vai trò |
|---|---|---|
cron/replay_quantrac.php | 10 phút/lần | Nạp tiếp dữ liệu bảng quantrac (H/Q/độ mặn 4 trạm) tới hiện tại. Dữ liệu mô phỏng, đánh dấu nguon = 'MOC_KB1'. |
cron/update_salinity.php | 60 phút/lần | Nạp tiếp độ mặn mức xã (xnm_salinity). Dữ liệu mô phỏng, đánh dấu source = 'ai'. |
python/train_model.py | Chạy tay / theo lịch | Huấn luyện mô hình Random Forest từ hydro_salinity_data và ghi dự báo vào daily_predictions. |
source phù hợp) và xoá dữ liệu mô phỏng: DELETE FROM quantrac WHERE nguon='MOC_KB1';
Ý nghĩa trường source / nguon trên toàn hệ thống: station = từ trạm tự động, manual = nhập tay, ai = mô hình sinh ra, MOC_KB1 = dữ liệu mô phỏng tạm thời.
7. Xử lý sự cố thường gặp
| Hiện tượng | Nguyên nhân & cách xử lý |
|---|---|
| Trang hiện “DB Error” | MySQL chưa chạy hoặc sai cấu hình. Khởi động MySQL (XAMPP), kiểm tra hằng DB_* trong config.php / admin/config.php. |
| Bản đồ kẹt màn hình “Đang tải…” | Không tải được thư viện bản đồ (vendor/leaflet.js) hoặc lỗi mạng. Tải lại trang (F5); kiểm tra thư mục vendor/. |
| API trả 401 | Thiếu/sai X-API-Key. Kiểm tra key còn hiệu lực trong Quản trị → API & Kết nối. |
| API trả 403 scope_forbidden | Key không có scope cho endpoint đó. Quản trị viên vào “Sửa” client và tick thêm scope. |
| API trả 429 | Vượt hạn mức/ngày. Chờ tới 00:00 hoặc nâng hạn mức trong trang quản trị. |
/forecast trả dữ liệu cũ | Mô hình chưa được chạy lại. Chạy python/train_model.py (hoặc thiết lập lịch) để cập nhật daily_predictions. |
| Import báo “Không thấy cột DateTime” | Sai cấu trúc file. Đối chiếu lại thứ tự & tên cột ở mục 4.3. |
| Quên mật khẩu admin | Một admin khác đặt lại giúp trong Người dùng. Nếu mất toàn bộ admin: xoá sạch bảng xnm_users để hệ thống seed lại tài khoản mặc định. |
Cổng thông tin Xâm nhập mặn tỉnh Sóc Trăng · Tài liệu hướng dẫn sử dụng · Cập nhật 20/10/2026.