Kiểm tra Python:
python --version
Hoặc:
py --version
Nếu chưa có → cài Python 3.9+ trên Store
Chạy lệnh:
pip install uptime-kuma-api ping3
Kiểm tra:
pip show uptime-kuma-api
3.1. Quét IP → Auto Add
Tạo file: scan_add_ip.py
from uptime_kuma_api import UptimeKumaApi
from ping3 import ping
# KUMA_URL = "http://x.x.x.x:3001"
KUMA_URL = "https://youdomain.com"
USERNAME = "admin"
PASSWORD = "yourpassword"
IP_PREFIX = "x.x.x."
START = 2
END = 10
api = UptimeKumaApi(KUMA_URL)
api.login(USERNAME, PASSWORD)
monitors = api.get_monitors()
existing_ips = [m["hostname"] for m in monitors if m.get("hostname")]
for i in range(START, END + 1):
ip = IP_PREFIX + str(i)
print(f"🔍 Ping {ip}")
if ping(ip, timeout=2) is None:
print(f"❌ {ip} offline")
continue
if ip in existing_ips:
print(f"⚠️ {ip} đã tồn tại")
continue
suffix = ".".join(ip.split(".")[-2:])
api.add_monitor(
type="ping",
name=f"Cam-{suffix}",
hostname=ip,
interval=60,
retryInterval=60,
maxretries=3,
description=f"Auto scan IP {suffix}"
)
print(f"✅ Đã thêm {ip}")
api.disconnect()
print("🎉 Hoàn tất quét & thêm monitor")
3.2. Thêm từ file csv:
Tạo file import_csv_to_kuma.py
csv file: name, ip, location, tag, group
On Kuma: Name, IP, Description, Tag, Group
For Device: Camera Name, IP Address, Detail Location, NVRx, Group on Kuma
import csv
from uptime_kuma_api import UptimeKumaApi
# KUMA_URL = "http://x.x.x.x:3001"
KUMA_URL = "https://youdomain.com"
USERNAME = "admin"
PASSWORD = "yourpassword"
CSV_FILE = "CameraList.csv"
TAG_COLOR = "#4CAF50"
# ======================
print("🔐 Đăng nhập Uptime Kuma...")
api = UptimeKumaApi(KUMA_URL)
api.login(USERNAME, PASSWORD)
# ===== LẤY MONITOR HIỆN CÓ =====
print("📡 Lấy danh sách monitor...")
monitors = api.get_monitors()
existing_ips = set()
group_cache = {} # group_name -> group_id
for m in monitors:
if m.get("hostname"):
existing_ips.add(m["hostname"])
if m.get("type") == "group":
group_cache[m["name"]] = m["id"]
print(f"➡️ Đã có {len(existing_ips)} monitor")
print(f"➡️ Đã có {len(group_cache)} group")
# ===== TAG CACHE =====
print("🏷️ Lấy tag...")
tags = api.get_tags()
tag_cache = {t["name"]: t["id"] for t in tags}
# ===== HÀM TẠO GROUP =====
def get_or_create_group(group_name):
if group_name in group_cache:
return group_cache[group_name]
print(f"📂 Tạo group: {group_name}")
group = api.add_monitor(
type="group",
name=group_name
)
group_id = group["monitorID"]
group_cache[group_name] = group_id
return group_id
# ===== ĐỌC CSV =====
with open(CSV_FILE, newline="", encoding="utf-8-sig") as f:
reader = csv.DictReader(f)
reader.fieldnames = [h.strip().lower() for h in reader.fieldnames]
for row in reader:
name = row.get("name", "").strip()
ip = row.get("ip", "").strip()
location = row.get("location", "").strip()
tag_name = row.get("tag", "").strip()
group_name = row.get("group", "").strip()
if not ip:
continue
print(f"➡️ Xử lý {name} ({ip})")
if ip in existing_ips:
print("⚠️ Skip – IP đã tồn tại")
continue
# ===== GROUP =====
parent_id = None
if group_name:
parent_id = get_or_create_group(group_name)
# ===== ADD MONITOR =====
monitor = api.add_monitor(
type="ping",
name=name or ip,
hostname=ip,
description=location,
parent=parent_id
)
monitor_id = monitor["monitorID"]
print(f"✅ Thêm monitor ID {monitor_id}")
# ===== TAG =====
if tag_name:
if tag_name not in tag_cache:
print(f"➕ Tạo tag: {tag_name}")
api.add_tag(
name=tag_name,
color=TAG_COLOR
)
tags = api.get_tags()
tag_cache = {t["name"]: t["id"] for t in tags}
api.add_monitor_tag(
monitor_id=monitor_id,
tag_id=tag_cache[tag_name]
)
print(f"🏷️ Gán tag: {tag_name}")
print("🎉 IMPORT CSV HOÀN TẤT (TAG + GROUP)")
Chạy lệnh:
python scan_add_ip.py
Hoặc:
python import_csv_to_kuma.py