diff --git a/database.py b/database.py index d088354..62fbb2b 100644 --- a/database.py +++ b/database.py @@ -73,11 +73,16 @@ def save_to_supabase(data_list): kst = timezone(timedelta(hours=9)) kst_now = datetime.now(kst).isoformat() + status = item.get('status', '') + is_error = '์˜ค๋ฅ˜' in status # '๐Ÿ”ด ์˜ค๋ฅ˜' ์ƒํƒœ ๊ฐ์ง€ + + # [๋ณดํ˜ธ] ์˜ค๋ฅ˜ ์ƒํƒœ ๋ฐ์ดํ„ฐ๋Š” solar_logs์—๋Š” ๊ธฐ๋กํ•˜๋˜ daily_stats๋Š” ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์Œ + # ๋‹จ, solar_logs ๊ธฐ๋ก ์ž์ฒด๋Š” ์ด์ƒ ์ด๋ ฅ ์ถ”์ ์„ ์œ„ํ•ด ์œ ์ง€ record = { 'plant_id': plant_id, 'current_kw': float(item.get('kw', 0)), 'today_kwh': float(item.get('today', 0)), - 'status': item.get('status', ''), + 'status': status, 'created_at': kst_now # ํ•œ๊ตญ ์‹œ๊ฐ„์œผ๋กœ ์ €์žฅ } records.append(record) @@ -86,28 +91,34 @@ def save_to_supabase(data_list): print("[DB] ์ €์žฅํ•  ์œ ํšจํ•œ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.") return False - # Supabase์— ์ผ๊ด„ ์‚ฝ์ž… (solar_logs) + # Supabase์— ์ผ๊ด„ ์‚ฝ์ž… (solar_logs) - ์˜ค๋ฅ˜ ์ƒํƒœ ํฌํ•จ ์ „์ฒด ๊ธฐ๋ก result = client.table("solar_logs").insert(records).execute() print(f"โœ… [DB] Supabase ์ €์žฅ ์™„๋ฃŒ: {len(records)}๊ฑด (solar_logs)") # daily_stats ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ (Upsert) - # ์˜ค๋Š˜ ๋‚ ์งœ(KST) ๊ธฐ์ค€, ํ˜„์žฌ ์ˆ˜์ง‘๋œ today_kwh๊ฐ€ ๊ธฐ์กด ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ์—…๋ฐ์ดํŠธ - # ํ•˜์ง€๋งŒ ๋ณดํ†ต today_kwh๋Š” ๋ˆ„์ ๊ฐ’์ด๋ฏ€๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ upsert ์ฒ˜๋ฆฌ + # [๋ณดํ˜ธ ๋กœ์ง] + # 1. ์˜ค๋ฅ˜ ์ƒํƒœ(ํฌ๋กค๋ง ์‹คํŒจ)์ธ ๊ฒฝ์šฐ daily_stats ๊ฐฑ์‹  ๊ธˆ์ง€ + # 2. today_kwh == 0์ธ ๊ฒฝ์šฐ daily_stats ๊ฐฑ์‹  ๊ธˆ์ง€ (์ƒˆ๋ฒฝ 0 ๊ฐ’์œผ๋กœ ํ•˜๋ฃจ์น˜ ๋ฎ์–ด์“ฐ๊ธฐ ๋ฐฉ์ง€) daily_records = [] kst_date_str = datetime.now(timezone(timedelta(hours=9))).strftime("%Y-%m-%d") for item in data_list: plant_id = item.get('id', '') - if not plant_id: continue + if not plant_id: + continue + status = item.get('status', '') + is_error = '์˜ค๋ฅ˜' in status today_val = float(item.get('today', 0)) - - # 0์ธ ๊ฒฝ์šฐ๋Š” ์ €์žฅํ•˜์ง€ ์•Š๊ฑฐ๋‚˜(์ƒˆ๋ฒฝ), ๊ธฐ์กด ๊ฐ’์„ ๋ฎ์–ด์“ฐ์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•จ - # ํ•˜์ง€๋งŒ ๋ฐœ์ „์†Œ ๋ฐ์ดํ„ฐ ๋ณด์ •์„ ์œ„ํ•ด 0์ด์–ด๋„ ์ผ๋‹จ ๊ธฐ๋กํ•˜๊ฑฐ๋‚˜, - # ์•„๋‹ˆ๋ฉด max ๊ฐ’์„ ์œ ์ง€ํ•˜๋Š” ๋กœ์ง์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Œ. - # ์—ฌ๊ธฐ์„œ๋Š” Upsert๋กœ ๋ฎ์–ด์“ฐ๋˜, DB ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ์—†๋‹ค๋ฉด ๋งˆ์ง€๋ง‰ ๊ฐ’์ด ์ €์žฅ๋จ. - # ๋ณดํ†ต ํฌ๋กค๋ง์€ ๋ˆ„์ ๊ฐ’์ด๋ฏ€๋กœ ๋งˆ์ง€๋ง‰ ๊ฐ’์ด ๊ทธ๋‚ ์˜ ์ตœ์ข…๊ฐ’์— ๊ฐ€๊นŒ์›€. + + # ์˜ค๋ฅ˜ ์ƒํƒœ์ด๊ฑฐ๋‚˜ today_kwh๊ฐ€ 0์ด๋ฉด daily_stats ๊ฐฑ์‹  ๊ฑด๋„ˆ๋œ€ + if is_error: + print(f" โš ๏ธ [{plant_id}] ์˜ค๋ฅ˜ ์ƒํƒœ โ†’ daily_stats ๊ฐฑ์‹  ๊ฑด๋„ˆ๋œ€") + continue + if today_val == 0: + print(f" โš ๏ธ [{plant_id}] today_kwh=0 โ†’ daily_stats ๊ฐฑ์‹  ๊ฑด๋„ˆ๋œ€ (์ƒˆ๋ฒฝ/์•ผ๊ฐ„ ์ถ”์ •)") + continue daily_records.append({ "plant_id": plant_id, @@ -118,10 +129,7 @@ def save_to_supabase(data_list): }) if daily_records: - # upsert: plant_id, date๊ฐ€ unique constraint์—ฌ์•ผ ํ•จ try: - # ignore_duplicates=False -> ์—…๋ฐ์ดํŠธ - # on_conflict="plant_id, date" (Supabase/PG ์„ค์ •์— ๋”ฐ๋ผ ๋‹ค๋ฆ„, ๋ณดํ†ต PK๋‚˜ UK ๊ธฐ์ค€) stats_result = client.table("daily_stats").upsert(daily_records, on_conflict="plant_id, date").execute() print(f"โœ… [DB] daily_stats ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ: {len(daily_records)}๊ฑด") except Exception as e: