Hướng dẫn sử dụng Cổng thông tin Xâm nhập mặn tỉnh Sóc Trăng

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 choVai 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ườiKhá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ànhviewer 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ứ baAPI key
Tác vụ tự động (cron) & mô hình AIcron/, python/Quản trị hệ thốngMáy chủ
Sơ đồ luồng dữ liệu: Trạm quan trắc / Sở TN&MT / Sở NN&PTNT → (nhập tay · import Excel · API) → CSDL trung tâm → Mô hình AI dự báo → Hiển thị trên bản đồ & chia sẻ qua API mở.

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:

2.2 Thao tác trên bản đồ

NútChứ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)

2.3 Bảng trái: Thống kê & Địa điểm

2.4 Bảng phải: Điểm nóng, Xu hướng, Đề xuất giải pháp

2.5 Phân cấp độ mặn (dùng thống nhất toàn hệ thống)

CấpGiá trị (‰)MàuÝ nghĩa thực tế
Ngọt (fresh)< 0.5Xanh láSử dụng bình thường cho sinh hoạt, tưới tiêu
Nhẹ (slight)0.5 – 1.0Xanh nhạtBắt đầu ảnh hưởng cây trồng nhạy cảm
Trung bình (moderate)1.0 – 4.0VàngHạn chế lấy nước tưới; cân nhắc trữ ngọt
Cao (high)4.0 – 8.0CamNgư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ảnMật khẩuVai tròĐược làm gì
adminAdmin@123adminToàn quyền: nhập liệu, import, người dùng, API, nhật ký, sao lưu, xoá dữ liệu
operatorOperator@123operatorNhập & import dữ liệu quan trắc, gửi đề xuất giải pháp
viewerViewer@123viewerChỉ xem Dashboard & dữ liệu
Sau 4 giây các thông báo tự ẩn. Mọi lần đăng nhập (thành công/thất bại) đều được ghi vào Nhật ký đăng nhập.

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+

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ộtNội dung
ADate Time – thời điểm đo
BSal_Ngã Năm
CSal_Sóc Trăng
DSal_Thạnh Phú
ESal_Đạ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

  1. Kéo–thả file vào ô upload (hoặc bấm để chọn). Hệ thống đọc & nhận diện cột.
  2. 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.
  3. 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.
  4. 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.
Cột mực nước (H) và lưu lượng (Q) trong file sẽ bị bỏ qua ở màn hình này – trang chỉ nạp độ mặn.

4.4 Người dùng admin

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

  1. Bấm “Tạo client”. Nhập tên (VD “Sở NN&PTNT Sóc Trăng”), tổ chức, email liên hệ.
  2. 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.
  3. Đặt hạn mức request/ngày (mặc định 5000; nhập 0 = không giới hạn).
  4. 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.
  5. 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 keySinh key mới; key cũ hết hiệu lực ngay (dùng khi lộ key)
Nút trạng tháiTạ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.

Có sẵn 1 key demo chỉ đọ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

  1. Bấm “Tải xuống file .sql ngay”. File chứa DROP TABLE + CREATE TABLE + INSERT của các bảng lõi.
  2. 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
Nên sao lưu trước mỗi lần “Dọn dữ liệu cũ” hoặc import lớn.

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
paramsalinity · water_level · flow_rate · all (mặc định)
from, toISO 8601. Mặc định 7 ngày gần nhất. Tối đa 366 ngày/lần gọi.
limit / offsetPhân trang (limit ≤ 5000). meta.total = tổng số dòng khớp.
format=csvTả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

HTTPKhi nàoXử lý
401Thiếu / sai API keyKiểm tra header X-API-Key
403Key bị tắt, hoặc không có scopeLiên hệ quản trị xin bổ sung scope
400Tham số sai / khoảng thời gian > 366 ngàyChia nhỏ khoảng thời gian, dùng phân trang
429Vượt hạn mức/ngàyXem 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ầnTần suấtVai trò
cron/replay_quantrac.php10 phút/lầnNạ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.php60 phút/lầnNạp tiếp độ mặn mức xã (xnm_salinity). Dữ liệu mô phỏng, đánh dấu source = 'ai'.
python/train_model.pyChạy tay / theo lịchHuấn luyện mô hình Random Forest từ hydro_salinity_data và ghi dự báo vào daily_predictions.
Khi có số liệu quan trắc THẬT: tắt 2 cronjob mô phỏng, rồi nạp số liệu thật (nhập tay / import / API với 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ượngNguyê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ả 401Thiế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_forbiddenKey không có scope cho endpoint đó. Quản trị viên vào “Sửa” client và tick thêm scope.
API trả 429Vượ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 adminMộ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.