diff --git a/.gitignore b/.gitignore index 8a4b422..fe66773 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,10 @@ Thumbs.db HACS_SUBMISSION.md REDDIT_POST.md PROMO_DRAFTS.md + +# Throwaway scripts / experimental files (local only) +pharmacy_READY +pharmacy_poll.py +test_pharmacy_key.py +test_*.py +*_poll.py diff --git a/README.md b/README.md index ca89345..98b53e7 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ # ๐Ÿ‡ฐ๐Ÿ‡ท KR Component Kit -> ๋Œ€ํ•œ๋ฏผ๊ตญ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Home Assistant ํ†ตํ•ฉ ๊ตฌ์„ฑ์š”์†Œ -> Home Assistant integration for Korea-only services โ€” utilities, weather/disaster alerts, transit, school meals, and more. +> **ํ•œ๊ตญ ๊ฑฐ์ฃผ์ž๋ฅผ ์œ„ํ•œ Home Assistant ํ†ตํ•ฉ** โ€” ์ „๊ธฐยท์ˆ˜๋„ยท๊ฐ€์Šคยท๋‚ ์”จยท์žฌ๋‚œยท์•ฝ๊ตญยทํ•™๊ต ๊ธ‰์‹ยท์‹ค์‹œ๊ฐ„ ๋Œ€์ค‘๊ตํ†ต๊นŒ์ง€, ํ•œ๊ตญ์—์„œ๋งŒ ์“ธ ์ˆ˜ ์žˆ๋Š” 13๊ฐ€์ง€ ๊ณต๊ณต ์„œ๋น„์Šค๋ฅผ ํ•œ ํŒจํ‚ค์ง€๋กœ. [![hacs][hacsbadge]][hacs] [![GitHub Release][releases-shield]][releases] @@ -11,492 +10,218 @@ [![Open your Home Assistant instance and open a repository inside the HACS.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=redchupa&repository=kr_component_kit&category=integration) -ํ•œ๊ตญ์ „๋ ฅ, ์•„๋ฆฌ์ˆ˜, ๊ฐ€์Šค์•ฑ๋ถ€ํ„ฐ ๊ธฐ์ƒ์ฒญ ๋™๋„ค์˜ˆ๋ณดยท์žฌ๋‚œ๋ฌธ์žยท์ง€์ง„ยท์•ฝ๊ตญยทํ•™๊ต ๊ธ‰์‹ยท์‹ค์‹œ๊ฐ„ ๋Œ€์ค‘๊ตํ†ต๊นŒ์ง€ โ€” ๋Œ€ํ•œ๋ฏผ๊ตญ์—์„œ๋งŒ ์“ธ ์ˆ˜ ์žˆ๋Š” 13๊ฐ€์ง€ ์„œ๋น„์Šค๋ฅผ Home Assistant ํ•œ ๊ณณ์—์„œ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ†ตํ•ฉ ๊ตฌ์„ฑ์š”์†Œ์ž…๋‹ˆ๋‹ค. - ---- - -## ๐Ÿ‘‹ ์ฒ˜์Œ์ด์„ธ์š”? ์ด๋ ‡๊ฒŒ ๋”ฐ๋ผ์˜ค์„ธ์š” - -**์ด ์ปดํฌ๋„ŒํŠธ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์„ ํ•œ๋งˆ๋””๋กœ** โ€” ํ•œ๊ตญ ๊ณต๊ณต ์„œ๋น„์Šค(์ „๊ธฐยท์ˆ˜๋„ยท๊ฐ€์Šคยท๋‚ ์”จยท์žฌ๋‚œยท์•ฝ๊ตญยทํ•™๊ต ๊ธ‰์‹ ๋“ฑ)์˜ ๋ฐ์ดํ„ฐ๋ฅผ Home Assistant์˜ **์„ผ์„œ(sensor)ยท์ด๋ฒคํŠธ(event)ยท๋‚ ์”จ(weather) ์—”ํ‹ฐํ‹ฐ**๋กœ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค. ๋งŒ๋“ค์–ด์ง„ ์—”ํ‹ฐํ‹ฐ๋Š” ๋Œ€์‹œ๋ณด๋“œ์— ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜, ์ž๋™ํ™”์˜ ํŠธ๋ฆฌ๊ฑฐ๋กœ ์“ฐ๊ฑฐ๋‚˜, ์Œ์„ฑ๋น„์„œ(Assist)๋กœ ๋ฌผ์–ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -### ๐Ÿงญ ์ถ”์ฒœ ์ฝ๊ธฐ ์ˆœ์„œ - -| ์ƒํ™ฉ | ์ถ”์ฒœ ์„น์…˜ | -|---|---| -| Home Assistant ์ž์ฒด๊ฐ€ ์ฒ˜์Œ์ด๋ผ๋ฉด | [๊ณต์‹ ํ•œ๊ตญ์–ด ์‹œ์ž‘ ๊ฐ€์ด๋“œ](https://www.home-assistant.io/installation/) ๋จผ์ € ๋ณธ ๋’ค ๋Œ์•„์˜ค์„ธ์š” | -| HACS๊ฐ€ ๋ญ”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด | [HACS๋ž€?](#-hacs๊ฐ€-์ฒ˜์Œ์ด๋ผ๋ฉด) โ†’ [์„ค์น˜ ๋ฐฉ๋ฒ•](#-์„ค์น˜-๋ฐฉ๋ฒ•) | -| **API ํ‚ค๋ถ€ํ„ฐ ๋ฐ›์•„์•ผ ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด** | [๐Ÿš€ 5๋ถ„ ๋งŒ์— ์‹œ์ž‘ํ•˜๊ธฐ](#-5๋ถ„-๋งŒ์—-์‹œ์ž‘ํ•˜๊ธฐ-api-ํ‚ค-ํ•„์š”-์—†์Œ) (API ํ‚ค ์—†์ด ์‹œ์ž‘) | -| ์•ฝ๊ตญยท์žฌ๋‚œ๋ฌธ์žยท๊ธฐ์ƒ์ฒญ ๋“ฑ ํ‚ค๊ฐ€ ํ•„์š”ํ•œ ์„œ๋น„์Šค | [๐Ÿ”‘ API ํ‚ค ๋ฐœ๊ธ‰ ๊ฐ€์ด๋“œ](#-api-ํ‚ค-๋ฐœ๊ธ‰-๊ฐ€์ด๋“œ) | -| ๋งŒ๋“ค์–ด์ง„ ์—”ํ‹ฐํ‹ฐ๋กœ ์˜ˆ์œ ์นด๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด | [๐ŸŽจ ๋Œ€์‹œ๋ณด๋“œ ์˜ˆ์ œ](#-๋Œ€์‹œ๋ณด๋“œ-์˜ˆ์ œ) | -| ์•ˆ ๋˜๋Š” ๊ฒŒ ์žˆ์œผ๋ฉด | [โ“ ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ](#-์ž์ฃผ-๋ฌป๋Š”-์งˆ๋ฌธ-faq) โ†’ [๐Ÿ› ๋ฌธ์ œ ํ•ด๊ฒฐ](#-๋ฌธ์ œ-ํ•ด๊ฒฐ) | - -> ๐Ÿ’ก **๋ชจ๋“  ์„œ๋น„์Šค๋Š” ๋ฌด๋ฃŒ**์ž…๋‹ˆ๋‹ค. ์ •๋ถ€ยท๊ณต๊ณต๊ธฐ๊ด€์ด ์ œ๊ณตํ•˜๋Š” ๋ฌด๋ฃŒ OpenAPI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ณธ ์ปดํฌ๋„ŒํŠธ๋Š” ๊ฒฐ์ œยท๊ณผ๊ธˆ์ด ์ผ์ ˆ ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์„œ๋น„์Šค(KEPCO/์•„๋ฆฌ์ˆ˜/๊ฐ€์Šค์•ฑ)๋Š” ๋ณธ์ธ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•ด์•ผ ์ž์‹ ์˜ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ---- - -## ๐Ÿ’ก ์™œ ๋งŒ๋“ค์—ˆ๋‚˜? - -๊ทธ๋™์•ˆ ํ•œ๊ตญ ์‚ฌ์šฉ์ž๊ฐ€ Home Assistant์— ์—ฐ๋™ํ•˜๊ณ  ์‹ถ์€ ํ•œ๊ตญ ์„œ๋น„์Šค๋“ค์€ **์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์˜ ๊ฐœ๋ณ„ custom_component๋กœ ํฉ์–ด์ ธ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค** โ€” ํ•œ์ „ ๋”ฐ๋กœ, ์•„๋ฆฌ์ˆ˜ ๋”ฐ๋กœ, ์•ˆ์ „์•Œ๋ฆผ ๋”ฐ๋กœ, ์•ฝ๊ตญ ๋”ฐ๋กœ, ํ•™๊ต ๊ธ‰์‹ ๋”ฐ๋กœ. ๊ฐ๊ฐ ์„ค์น˜ ๋ฐฉ์‹, ์„ค์ • ํ˜•์‹, ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ, ์ธ์ฆ ์ฒ˜๋ฆฌ๊ฐ€ ์ œ๊ฐ๊ฐ์ด๋ผ ๊ด€๋ฆฌ๊ฐ€ ๋ฒˆ๊ฑฐ๋กญ๊ณ , ์ผ๋ถ€๋Š” ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๋ฉˆ์ถ˜ ์ฑ„ ๊นจ์ง€๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. - -๋ณธ ํ”„๋กœ์ ํŠธ๋Š” **์ด ํฉ์–ด์ง„ ํ•œ๊ตญ ํ†ตํ•ฉ๋“ค์„ ํ•˜๋‚˜์˜ ํŒจํ‚ค์ง€๋กœ ๋ฌถ์—ˆ์Šต๋‹ˆ๋‹ค** โ€” ๋‹จ์ผ HACS ๋“ฑ๋ก, ๋‹จ์ผ config flow UI, ๋‹จ์ผ ์ฝ”๋“œ๋ฒ ์ด์Šค. ์ƒˆ ํ•œ๊ตญ ์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ•ด์ง€๋ฉด ์—ฌ๊ธฐ์— ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. -
-๐Ÿ‡ฌ๐Ÿ‡ง English summary (click to expand) +๐Ÿ‡ฌ๐Ÿ‡ง English summary -A Home Assistant custom integration exposing 13 Korea-only public services as native entities (sensors, binary sensors, events, calendars, weather). +A Home Assistant custom integration for Korean residents and expats. Exposes 13 Korea-only public services (KEPCO electricity, Seoul water, city gas, KMA weather, disaster alerts, NMC pharmacy, NEIS school meals, Seoul subway + KakaoMap bus, AirKorea air quality, Opinet fuel prices, earthquake warnings) as native HA entities โ€” sensors, weather entities, events, calendars. -**Supported services** +All Korean public APIs are free; service keys are obtained from `data.go.kr`, `safetydata.go.kr`, `opinet.co.kr`, `open.neis.go.kr`, and `data.seoul.go.kr` โ€” guides below link directly to each portal's search page. -| Category | Service | What it does | -|---|---|---| -| Utility | โšก **KEPCO** (ํ•œ๊ตญ์ „๋ ฅ) | Current usage, last/predicted monthly bill (login required) | -| Utility | ๐Ÿ’ง **Arisu** (์„œ์šธ์‹œ ์ƒ์ˆ˜๋„) | Seoul tap-water bill and usage | -| Utility | ๐Ÿ  **GasApp** (๊ฐ€์Šค์•ฑ) | Monthly city-gas usage and bill (mobile-app token extraction required) | -| Safety | ๐Ÿšจ **Disaster Alert** (์žฌ๋‚œ๋ฌธ์ž) | Government emergency alerts, filtered by ์‹œ๋„ (required) + ์‹œ๊ตฐ๊ตฌ (optional) | -| Safety | ๐Ÿ“ข **Safety Alert** (์•ˆ์ „์•Œ๋ฆผ์„œ๋น„์Šค) | Region-based safety bulletins | -| Safety | ๐ŸŒช๏ธ **Weather Warning** (๊ธฐ์ƒํŠน๋ณด) | KMA advisories/warnings as event entities | -| Safety | ๐ŸŒ **Earthquake** (์ง€์ง„) | Earthquake alerts with radius / minimum-magnitude filters | -| Weather/Env | โ›… **KMA Weather** (๊ธฐ์ƒ์ฒญ ๋™๋„ค์˜ˆ๋ณด) | Short-term + mid-term forecast as a native `weather` entity | -| Weather/Env | ๐ŸŒซ๏ธ **AirKorea** (์—์–ด์ฝ”๋ฆฌ์•„) | PM10/PM2.5/Oโ‚ƒ/NOโ‚‚/SOโ‚‚/CO + UV/heat/cold living indices | -| Living | ๐Ÿ’Š **Pharmacy** (์•ฝ๊ตญ) | Pharmacies near you with hours and "open now" flag | -| Living | โ›ฝ **Fuel** (์œ ๊ฐ€) | Opinet province-level average prices and lowest-price stations | -| Living | ๐Ÿซ **School** (ํ•™๊ต) | NEIS school meals, academic calendar, class schedule | -| Living | ๐ŸšŒ **Transit** (๋Œ€์ค‘๊ตํ†ต) | Real-time subway and bus arrivals (Seoul + KakaoMap) | - -**Optional LLM integration** โ€” every service ships with an LLM tool so you can query it from a voice assistant or chat-style frontend in natural Korean (e.g. "์ง€๊ธˆ ๋ฏธ์„ธ๋จผ์ง€ ์–ด๋•Œ?", "๊ฐ€๊นŒ์šด ์˜์—…์ค‘ ์•ฝ๊ตญ ์•Œ๋ ค์ค˜"). - -Aimed at Korean residents (and Korean expats) who want all of the above inside Home Assistant. Most providers do not publish official APIs, so several services use authenticated web scraping โ€” see the Disclaimer section. - -Installation and configuration details are in the Korean sections below. +Optional LLM integration lets you ask in natural Korean ("์ง€๊ธˆ ๋ฏธ์„ธ๋จผ์ง€ ์–ด๋•Œ?", "์˜ค๋Š˜ ๊ธ‰์‹ ๋ญ์•ผ?") via HA's Assist conversation agent.
--- -## ๐Ÿ“‹ ์ง€์› ์„œ๋น„์Šค - -์ด **13๊ฐ€์ง€ ์„œ๋น„์Šค** ยท ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์ •๋ฆฌ. -๊ฐ ์„œ๋น„์Šค ๋ฐ•์Šค์˜ **๐ŸŽ ๋“ฑ๋กํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ๊ฒƒ** ํ•ญ๋ชฉ์€ "์ด ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ–ˆ์„ ๋•Œ ์‹ค์ œ๋กœ ์–ด๋–ค entity๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š”์ง€"๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. *(์—”ํ‹ฐํ‹ฐ๋ช…์€ ๋“ฑ๋กํ•œ ์ง€์—ญยท๊ณ„์ •์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋ฉฐ ์•„๋ž˜ ์˜ˆ์‹œ์™€ ๋น„์Šทํ•œ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.)* - -### ๐Ÿ  ์ƒํ™œ ์œ ํ‹ธ๋ฆฌํ‹ฐ - -#### โšก ํ•œ๊ตญ์ „๋ ฅ๊ณต์‚ฌ (KEPCO) -- **์ „๋ ฅ ์‚ฌ์šฉ๋Ÿ‰** ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง + **์š”๊ธˆ ์ •๋ณด** -- ํ•œ์ „ ํ™ˆํŽ˜์ด์ง€ ID/๋น„๋ฐ€๋ฒˆํ˜ธ ์ธ์ฆ (API ํ‚ค โŒ, ๋ณธ์ธ ๊ณ„์ • ํ•„์š”) -- **๐ŸŽ ๋“ฑ๋กํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ๊ฒƒ:** ๊ธฐ๊ธฐ `ํ•œ์ „ (์‚ฌ์šฉ์žID)` ์•„๋ž˜์— ๋‹ค์Œ 5๊ฐœ sensor โ€” - - `๊ณ ๊ฐ๋ฒˆํ˜ธ`, `์ „๋ ฅ๊ตฌ๋ถ„`, `์ง€๋‚œ๋‹ฌ ์š”๊ธˆ` (์›), `์˜ˆ์ƒ ์š”๊ธˆ` (์›), `ํ˜„์žฌ ์‚ฌ์šฉ๋Ÿ‰` (kWh) -- **์ด๋Ÿฐ ๋ถ„๊ป˜ ์ถ”์ฒœ:** ์˜ˆ์ƒ ์š”๊ธˆ์ด ์ผ์ • ๊ธˆ์•ก์„ ๋„˜์œผ๋ฉด ์•Œ๋ฆผ์„ ๋ฐ›๊ณ  ์‹ถ์€ ๋ถ„, ์›” ์‚ฌ์šฉ๋Ÿ‰ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฌ๊ณ  ์‹ถ์€ ๋ถ„ -- โš ๏ธ **์•Œ๋ ค์ง„ ํ•œ๊ณ„** โ€” ํ•œ์ „ ํ™ˆํŽ˜์ด์ง€ ํŽ˜์ด์ง€๋ช… ๋ณ€๊ฒฝ ์‹œ ๋กœ๊ทธ์ธ ๊ฐ์ง€ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Œ(2์ฐจ ์ธ์ฆ ๋ฏธ์ง€์›). ๋น„์ •์ƒ ์‹œ HA ๋กœ๊ทธ์— "KEPCO login: unknown redirect" ๋ฉ”์‹œ์ง€๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. - -#### ๐Ÿ’ง ์•„๋ฆฌ์ˆ˜ (์„œ์šธ์‹œ ์ƒ์ˆ˜๋„) -- **์ˆ˜๋„์š”๊ธˆ** ๋ฐ ์‚ฌ์šฉ๋Ÿ‰ ์กฐํšŒ -- **์ˆ˜์šฉ๊ฐ€๋ฒˆํ˜ธ + ๊ณ ๊ฐ๋ช…** ๊ธฐ๋ฐ˜ ์ธ์ฆ (API ํ‚ค โŒ, ์„œ์šธ์‹œ ๊ฑฐ์ฃผ์ž๋งŒ) - - ์ˆ˜์šฉ๊ฐ€๋ฒˆํ˜ธ๋Š” ์ข…์ด ๊ณ ์ง€์„œ ๋˜๋Š” [์•„๋ฆฌ์ˆ˜ ์‚ฌ์ด๋ฒ„ ๊ณ ๊ฐ์„ผํ„ฐ](https://i-arisu.seoul.go.kr) ๋กœ๊ทธ์ธ ํ›„ `์š”๊ธˆ์กฐํšŒ/๋‚ฉ๋ถ€ โ†’ ์ˆ˜๋„์š”๊ธˆ ์กฐํšŒ` ํ™”๋ฉด ์ขŒ์ธก์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- **๐ŸŽ ๋“ฑ๋กํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ๊ฒƒ:** ๊ธฐ๊ธฐ `์•„๋ฆฌ์ˆ˜ (์ˆ˜์šฉ๊ฐ€๋ฒˆํ˜ธ)` ์•„๋ž˜์— sensor 3๊ฐœ โ€” - - `์ˆ˜๋„ ์š”๊ธˆ` (์›), `์‚ฌ์šฉ๋Ÿ‰` (ใŽฅ), `์ฒญ๊ตฌ์›”` -- **์ด๋Ÿฐ ๋ถ„๊ป˜ ์ถ”์ฒœ:** ๊ฐ€์กฑ ์‚ฌ์šฉ๋Ÿ‰์„ ๋งค์›” ์ถ”์ ํ•˜๊ณ  ์‹ถ์€ ์„œ์šธ ๊ฑฐ์ฃผ์ž -- โš ๏ธ **์•Œ๋ ค์ง„ ํ•œ๊ณ„** โ€” ์„œ์šธ์‹œ์ฒญ ํŽ˜์ด์ง€(`i121.seoul.go.kr`) HTML ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์‹œ ํŒŒ์‹ฑ ์‹คํŒจ ๊ฐ€๋Šฅ. 9์ž๋ฆฌ ์ˆ˜์šฉ๊ฐ€๋ฒˆํ˜ธ ๊ฐ€์ •. - -#### ๐Ÿ  ๊ฐ€์Šค์•ฑ (๋„์‹œ๊ฐ€์Šค) -- **๊ฐ€์Šค ์‚ฌ์šฉ๋Ÿ‰** ๋ฐ ์š”๊ธˆ ์กฐํšŒ -- **ํ† ํฐ + ํšŒ์› ID + ์‚ฌ์šฉ๊ณ„์•ฝ๋ฒˆํ˜ธ** ์ธ์ฆ (API ํ‚ค โŒ, ๊ฐ€์Šค์•ฑ ๋ชจ๋ฐ”์ผ ์•ฑ ์‚ฌ์šฉ์ž) -- **โš ๏ธ ์ž…๋ ฅ๊ฐ’ ์ถ”์ถœ์ด ๊นŒ๋‹ค๋กญ์Šต๋‹ˆ๋‹ค** โ€” ๊ฐ€์Šค์•ฑ์€ ๊ณต์‹ OpenAPI๊ฐ€ ์•„๋‹Œ ๋ชจ๋ฐ”์ผ ์•ฑ ๋‚ด๋ถ€ API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, **์‚ฌ์šฉ๊ณ„์•ฝ๋ฒˆํ˜ธ** ์™ธ์—๋Š” ํŒจํ‚ท ์บก์ฒ˜๋กœ ํ† ํฐ์„ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํŒจํ‚ท ์บก์ฒ˜๊ฐ€ ๋ถ€๋‹ด์Šค๋Ÿฌ์šฐ๋ฉด ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. - - **์‚ฌ์šฉ๊ณ„์•ฝ๋ฒˆํ˜ธ** โ€” ๊ฐ€์Šค์•ฑ ๋ชจ๋ฐ”์ผ ์•ฑ โ†’ "๋‚ด ์ •๋ณด" โ†’ ๋“ฑ๋ก๋œ ๊ณ„์•ฝ๋ฒˆํ˜ธ (๋˜๋Š” ๊ฐ€์Šค ๊ณ ์ง€์„œ์— ์ธ์‡„) - - **ํ† ํฐ / ํšŒ์› ID** โ€” ๊ฐ€์Šค์•ฑ ๋ชจ๋ฐ”์ผ ์•ฑ์˜ HTTPS ์š”์ฒญ ํ—ค๋” `X-Token`, `X-Member` ๊ฐ’. mitmproxy/Charles ๊ฐ™์€ ๋„๊ตฌ๋กœ ์ถ”์ถœ -- **๐ŸŽ ๋“ฑ๋กํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ๊ฒƒ:** ๊ธฐ๊ธฐ `๊ฐ€์Šค์•ฑ (์‚ฌ์šฉ๊ณ„์•ฝ๋ฒˆํ˜ธ)` ์•„๋ž˜์— sensor 2๊ฐœ โ€” - - `์ฒญ๊ตฌ ์ œ๋ชฉ`, `์ด ์š”๊ธˆ` (์›) -- **์ด๋Ÿฐ ๋ถ„๊ป˜ ์ถ”์ฒœ:** ๋™์ ˆ๊ธฐ ๊ฐ€์Šค๋น„ ํญ์ฆ์„ ๋ฏธ๋ฆฌ ์žก๊ณ  ์‹ถ์€ ๋ถ„ (๋‹จ, ์ถ”์ถœ ์ž‘์—… ๊ฐ€๋Šฅ์ž) - -### ๐Ÿšจ ์•ˆ์ „ ยท ์žฌ๋‚œ - -#### ๐Ÿ“ข ์žฌ๋‚œ๋ฌธ์ž (ํ–‰์ •์•ˆ์ „๋ถ€ ์•ˆ์ „๋ฐ์ดํ„ฐํฌํ„ธ) -- **์žฌ๋‚œ๋ฌธ์ž** ์‹ค์‹œ๊ฐ„ ์ˆ˜์‹  -- **๊ด‘์—ญ ์‹œ๋„ (ํ•„์ˆ˜) + ์‹œ๊ตฐ๊ตฌ (์„ ํƒ)** ๋‹จ์œ„ ํ•„ํ„ฐ๋ง โ€” config flow๊ฐ€ 17๊ฐœ ๊ด‘์—ญ dropdown + ์ „๊ตญ ์‹œ๊ตฐ๊ตฌ ํ‰๋ฉด dropdown ๋‘ ๋‹จ๊ณ„๋กœ ์ œ๊ณต -- **์•ˆ์ „๋ฐ์ดํ„ฐํฌํ„ธ (`safetydata.go.kr`)** ์ธ์ฆํ‚ค ํ•„์š” โ€” *๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ๊ณผ ๋‹ค๋ฅธ ๋ณ„๋„ ํฌํ„ธ์ž…๋‹ˆ๋‹ค* -- **๐ŸŽ ๋“ฑ๋กํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ๊ฒƒ:** ๊ธฐ๊ธฐ `์žฌ๋‚œ๋ฌธ์ž - <์ง€์—ญ>` ์•„๋ž˜์— โ€” - - sensor `์ตœ์‹  ์žฌ๋‚œ๋ฌธ์ž` (state = ๊ฐ€์žฅ ์ตœ๊ทผ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ, attrs = `level`/`area`/`disaster_type`) - - sensor `์žฌ๋‚œ๋ฌธ์ž ์ˆ˜` - - event `์žฌ๋‚œ๋ฌธ์ž ์ด๋ฒคํŠธ` (์ƒˆ ๋ฉ”์‹œ์ง€ ๋„์ฐฉ ์‹œ ์ž๋™ํ™” ํŠธ๋ฆฌ๊ฑฐ) -- **์ด๋Ÿฐ ๋ถ„๊ป˜ ์ถ”์ฒœ:** ํ•ธ๋“œํฐ ์•Œ๋ฆผ๊ณผ ๋ณ„๊ฐœ๋กœ ๊ฑฐ์‹ค ํƒœ๋ธ”๋ฆฟ/ํ—ˆ๋ธŒ์— ๋„์šฐ๊ณ  ์‹ถ์€ ๋ถ„, ํŠน์ • ์ง€์—ญ(๋ถ€๋ชจ๋‹˜ ๋Œ ๋“ฑ)์„ ๋”ฐ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์‹ถ์€ ๋ถ„ - -#### ๐Ÿšจ ์•ˆ์ „์•Œ๋ฆผ์„œ๋น„์Šค (ํ–‰์ •์•ˆ์ „๋ถ€) -- ์ง€์—ญ ๊ธฐ๋ฐ˜ **์•ˆ์ „ ์•Œ๋ฆผ bulletin** (`safekorea.go.kr` ํŽ˜์ด์ง€ ์ง์ ‘ ์Šคํฌ๋ž˜ํ•‘) -- **๋ณ„๋„ API ํ‚ค / ๋ณ„๋„ ํšŒ์›๊ฐ€์ž… ์—†์ด** ์ง€์—ญ๋งŒ ์„ ํƒํ•˜๋ฉด ์ž‘๋™ โœ… *(API ํ‚ค ์‹ ์ฒญ์ด ๋ถ€๋‹ด์Šค๋Ÿฝ๋‹ค๋ฉด ์—ฌ๊ธฐ์„œ ์‹œ์ž‘ํ•˜์„ธ์š”)* -- **๐ŸŽ ๋“ฑ๋กํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ๊ฒƒ:** ๊ธฐ๊ธฐ `์•ˆ์ „์•Œ๋ฆผ (<์ง€์—ญ๋ช…>)` ์•„๋ž˜์— โ€” - - sensor `์ตœ์‹  ์•ˆ์ „์•Œ๋ฆผ` (state = ์ตœ๊ทผ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ, attrs = `latest`/`alerts[]`/`count`) - - sensor `์•ˆ์ „์•Œ๋ฆผ ์ˆ˜` - - binary_sensor `์˜ค๋Š˜ ์•ˆ์ „์•Œ๋ฆผ ์—ฌ๋ถ€` - - event `์•ˆ์ „์•Œ๋ฆผ ์ด๋ฒคํŠธ` -- **์ด๋Ÿฐ ๋ถ„๊ป˜ ์ถ”์ฒœ:** ์ฒ˜์Œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฒดํ—˜ํ•ด๋ณด๊ณ  ์‹ถ์€ ๋ถ„ -- โš ๏ธ **์•Œ๋ ค์ง„ ํ•œ๊ณ„** โ€” `safekorea.go.kr` HTML ๊ตฌ์กฐ ๋ณ€๊ฒฝ ๋˜๋Š” TLS profile ๋ณ€๊ฒฝ ์‹œ ์ผ์‹œ ๋ฏธ์ž‘๋™ ๊ฐ€๋Šฅ. ์ปดํฌ๋„ŒํŠธ ์ด์ „ ๋ฒ„์ „์—์„œ ๋งŒ๋“  sensor 17๊ฐœ ์นœํ™” ์ด๋ฆ„ ํŒจํ„ด (`์ตœ์‹  ์•Œ๋ฆผ ์œ ํ˜•/๋‚ด์šฉ/๋Œ€์ƒ์ง€/์ผ์ž`, `์ง€๋‚œ/์ง€์ง€๋‚œ ์•Œ๋ฆผ...`)์ด ์žˆ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ schema๊ฐ€ ๋‹ฌ๋ผ์ง„ orphan ๊ฐ€๋Šฅ์„ฑ โ€” entry ์‚ญ์ œ ํ›„ ์žฌ๋“ฑ๋ก ๊ถŒ์žฅ. - -#### ๐ŸŒช๏ธ ๊ธฐ์ƒํŠน๋ณด (๊ธฐ์ƒ์ฒญ) -- **ํ˜ธ์šฐ / ๊ฐ•ํ’ / ํ•œํŒŒ / ํญ์—ผ** ๋“ฑ 12์ข… ํŠน๋ณด๋ฅผ `event` ์—”ํ‹ฐํ‹ฐ๋กœ ๋…ธ์ถœ -- ํŠน๋ณด ๋ฐœํšจ / ํ•ด์ œ / ์‚ฌ์ „ ์˜ˆ๊ณ  ๋‹จ๊ณ„๊นŒ์ง€ ์ถ”์  -- ๊ธฐ์ƒ์ฒญ **๊ธฐ์ƒํŠน๋ณด** ๋ฐ์ดํ„ฐ์…‹ ํ™œ์šฉ์‹ ์ฒญ ํ•„์š” (`data.go.kr`, ์šด์˜๊ธฐ๊ด€ ์ฝ”๋“œ `1360000`, endpoint `WthrWrnInfoService`) -- **๐ŸŽ ๋“ฑ๋กํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ๊ฒƒ:** ๊ธฐ๊ธฐ `๊ธฐ์ƒํŠน๋ณด - <์ง€์—ญ>` ์•„๋ž˜์— ํŠน๋ณด ์ข…๋ฅ˜๋ณ„ event ์—”ํ‹ฐํ‹ฐ 12๊ฐœ โ€” - - `ํ˜ธ์šฐ ํŠน๋ณด`, `๊ฐ•ํ’ ํŠน๋ณด`, `ํ•œํŒŒ ํŠน๋ณด`, `ํญ์—ผ ํŠน๋ณด`, `๋Œ€์„ค ํŠน๋ณด`, `ํ™ฉ์‚ฌ ํŠน๋ณด`, `๊ฑด์กฐ ํŠน๋ณด`, `ํ’๋ž‘ ํŠน๋ณด`, `ํญํ’ํ•ด์ผ ํŠน๋ณด`, `์“ฐ๋‚˜๋ฏธ ํŠน๋ณด` ๋“ฑ - - ๊ฐ event์˜ state๋Š” `advisory`/`warning`/`pre_advisory`/`pre_warning`/`cancelled`/`none` ์ค‘ ํ•˜๋‚˜ -- **์ด๋Ÿฐ ๋ถ„๊ป˜ ์ถ”์ฒœ:** ํญ์—ผ ๊ฒฝ๋ณด๊ฐ€ ๋œจ๋ฉด ์—์–ด์ปจ ์ž๋™ ๊ฐ€๋™ ๊ฐ™์€ ์ž๋™ํ™”๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๋ถ„ - -#### ๐ŸŒ ์ง€์ง„ (๊ธฐ์ƒ์ฒญ) -- **๋ฐ˜๊ฒฝ(km) + ์ตœ์†Œ ๊ทœ๋ชจ(M)** ํ•„ํ„ฐ๋กœ ์•Œ๋ฆผ -- ์œ„/๊ฒฝ๋„ ๊ธฐ์ค€์œผ๋กœ ๊ฑฐ๋ฆฌ ์ž๋™ ๊ณ„์‚ฐ -- ๊ธฐ์ƒ์ฒญ **์ง€์ง„์ •๋ณด** ๋ฐ์ดํ„ฐ์…‹ ํ™œ์šฉ์‹ ์ฒญ ํ•„์š” (`data.go.kr`, ์šด์˜๊ธฐ๊ด€ ์ฝ”๋“œ `1360000`, endpoint `EqkInfoService`) -- โš ๏ธ **๊ธฐ๋ณธ ์ขŒํ‘œ๋Š” ์„œ์šธ์‹œ์ฒญ (`37.5665`, `126.978`)** ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ์ง‘ ์ขŒํ‘œ๋กœ ๊ผญ ๋ฐ”๊ฟ”์ฃผ์„ธ์š”. ๊ธฐ๋ณธ ๋ฐ˜๊ฒฝ์€ 200km, ๊ธฐ๋ณธ ์ตœ์†Œ ๊ทœ๋ชจ๋Š” 3.0 โ€” ์•Œ๋ฆผ์„ ๋” ์ž˜ ๋ฐ›๊ณ  ์‹ถ์œผ๋ฉด ๋ฐ˜๊ฒฝโ†‘/๊ทœ๋ชจโ†“๋กœ ์กฐ์ • -- **๐ŸŽ ๋“ฑ๋กํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ๊ฒƒ:** ๊ธฐ๊ธฐ `์ง€์ง„ ์ •๋ณด` ์•„๋ž˜์— โ€” - - event `์ง€์ง„ ๊ฒฝ๋ณด` (state = ๊ฐ€์žฅ ์ตœ๊ทผ ์ง€์ง„ ์‹œ๊ฐ, ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ `magnitude`/`location`/`distance_km`/`datetime` ์ „๋‹ฌ) - - ์ถ”๊ฐ€๋กœ ์ง€์ง„๋ณ„ geolocation ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์ง€๋„ ์นด๋“œ์— ํ•€์œผ๋กœ ํ‘œ์‹œ๋จ -- **์ด๋Ÿฐ ๋ถ„๊ป˜ ์ถ”์ฒœ:** ์šฐ๋ฆฌ ์ง‘์—์„œ 100km ์ด๋‚ด ๊ทœ๋ชจ 3.0 ์ด์ƒ๋งŒ ์•Œ๋ฆผ ๋ฐ›๊ณ  ์‹ถ์€ ๋ถ„ - -### โ›… ํ™˜๊ฒฝ ยท ๋‚ ์”จ - -#### โ›… ๊ธฐ์ƒ์ฒญ ๋™๋„ค์˜ˆ๋ณด (KMA) -- **๋‹จ๊ธฐ + ์ค‘๊ธฐ ์˜ˆ๋ณด**๋ฅผ native `weather` ์—”ํ‹ฐํ‹ฐ๋กœ ๋…ธ์ถœ -- ์‹œ๋„ โ†’ ์‹œ๊ตฐ๊ตฌ ๋‹ค๋‹จ๊ณ„ ์„ ํƒ, ๋‹ค์ค‘ ์ง€์—ญ ๋™์‹œ ๋“ฑ๋ก ๊ฐ€๋Šฅ -- ์˜ต์…˜: Oโ‚ƒ / UV๋Š” ์ธ๊ทผ ์—์–ด์ฝ”๋ฆฌ์•„ ์ธก์ •์†Œ ์ž๋™ ๋งค์นญ -- ๊ธฐ์ƒ์ฒญ **๋‹จ๊ธฐ์˜ˆ๋ณด** ๋ฐ์ดํ„ฐ์…‹ ํ™œ์šฉ์‹ ์ฒญ ํ•„์š” (`data.go.kr`, ์šด์˜๊ธฐ๊ด€ ์ฝ”๋“œ `1360000`, endpoint `VilageFcstInfoService_2.0`) -- **๐ŸŽ ๋“ฑ๋กํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ๊ฒƒ:** ๊ธฐ๊ธฐ `๊ธฐ์ƒ์ฒญ ๋‚ ์”จ์˜ˆ๋ณด - <์ง€์—ญ>` ์•„๋ž˜์— `weather` ์—”ํ‹ฐํ‹ฐ 1๊ฐœ (HA ๊ธฐ๋ณธ Weather ์นด๋“œ์— ๋ฐ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ, hourly/daily forecast ์„œ๋น„์Šค ์ง€์›) -- **์ด๋Ÿฐ ๋ถ„๊ป˜ ์ถ”์ฒœ:** HA ๊ธฐ๋ณธ ๋‚ ์”จ ์นด๋“œ๋ฅผ ํ•œ๊ตญ ๊ธฐ์ƒ์ฒญ ๋ฐ์ดํ„ฐ๋กœ ์ฑ„์šฐ๊ณ  ์‹ถ์€ ๋ถ„ - -#### ๐ŸŒซ๏ธ ์—์–ด์ฝ”๋ฆฌ์•„ (AirKorea) -- **PM10 / PM2.5 / Oโ‚ƒ / NOโ‚‚ / SOโ‚‚ / CO + ํ†ตํ•ฉ๋Œ€๊ธฐ์งˆ์ง€์ˆ˜(KHAI)** ์‹œ๊ณ„์—ด -- **์ž์™ธ์„ ์ง€์ˆ˜ / ๋Œ€๊ธฐ์ •์ฒด์ง€์ˆ˜** ๋“ฑ ์ƒํ™œ๊ธฐ์ƒ์ง€์ˆ˜ ์ถ”๊ฐ€ ๋“ฑ๋ก ๊ฐ€๋Šฅ -- ์ธก์ •์†Œ ๋‹จ์œ„ ๋‹ค์ค‘ ๋“ฑ๋ก -- ํ•œ๊ตญํ™˜๊ฒฝ๊ณต๋‹จ **๋Œ€๊ธฐ์˜ค์—ผ์ •๋ณด** + **์ธก์ •์†Œ์ •๋ณด** ๋‘ ๋ฐ์ดํ„ฐ์…‹ ํ™œ์šฉ์‹ ์ฒญ ํ•„์š” (`data.go.kr`, ์šด์˜๊ธฐ๊ด€ ์ฝ”๋“œ `B552584`, endpoint `ArpltnInforInqireSvc` + `MsrstnInfoInqireSvc`) -- (์˜ต์…˜) UV / ๋Œ€๊ธฐ์ •์ฒด sensor ์ถ”๊ฐ€ ์‹œ ๊ธฐ์ƒ์ฒญ **์ƒํ™œ๊ธฐ์ƒ์ง€์ˆ˜** ํ™œ์šฉ์‹ ์ฒญ ํ•„์š” โ€” โš ๏ธ V4/V5 ํ˜ธํ™˜์„ฑ ์ฃผ์˜, ์ž์„ธํ•œ ์•ˆ๋‚ด๋Š” [์—์–ด์ฝ”๋ฆฌ์•„ API ๊ฐ€์ด๋“œ ์„น์…˜](#-์—์–ด์ฝ”๋ฆฌ์•„--ํ•„์ˆ˜-2๊ฑด--์˜ต์…˜-1๊ฑด) ์ฐธ๊ณ  -- **๐ŸŽ ๋“ฑ๋กํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ๊ฒƒ:** ์ธก์ •์†Œ๋งˆ๋‹ค ๊ธฐ๊ธฐ `์—์–ด์ฝ”๋ฆฌ์•„ - <์ธก์ •์†Œ>` ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ณ , ๊ทธ ์•„๋ž˜์— โ€” - - sensor `PM10 ๋ฏธ์„ธ๋จผ์ง€` ยท `PM2.5 ์ดˆ๋ฏธ์„ธ๋จผ์ง€` ยท `SOโ‚‚ ์•„ํ™ฉ์‚ฐ๊ฐ€์Šค` ยท `CO ์ผ์‚ฐํ™”ํƒ„์†Œ` ยท `Oโ‚ƒ ์˜ค์กด` ยท `NOโ‚‚ ์ด์‚ฐํ™”์งˆ์†Œ` ยท `ํ†ตํ•ฉ๋Œ€๊ธฐ์งˆ์ง€์ˆ˜` - - binary_sensor `๋Œ€๊ธฐ์งˆ ๊ฒฝ๋ณด`, event `๋Œ€๊ธฐ์งˆ ๊ฒฝ๋ณด ์ด๋ฒคํŠธ`, calendar `๋Œ€๊ธฐ์งˆ ์˜ˆ๋ณด` - - (์ƒํ™œ์ง€์ˆ˜ ํ‚ค ์ž…๋ ฅ ์‹œ) sensor `์ž์™ธ์„ ์ง€์ˆ˜`, `๋Œ€๊ธฐ์ •์ฒด์ง€์ˆ˜` -- **์ด๋Ÿฐ ๋ถ„๊ป˜ ์ถ”์ฒœ:** ๋ฏธ์„ธ๋จผ์ง€ ์ˆ˜์น˜์— ๋”ฐ๋ผ ํ™˜๊ธฐ/๊ณต๊ธฐ์ฒญ์ •๊ธฐ ์ž๋™ํ™”๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๋ถ„ - -### ๐Ÿ’Š ์ƒํ™œ ์ •๋ณด - -#### ๐Ÿ’Š ์•ฝ๊ตญ (์ „๊ตญ ์•ฝ๊ตญ ์ •๋ณด โ€” data.go.kr) โœ… *์ž‘๋™ ๊ฒ€์ฆ ์™„๋ฃŒ* -- **์‹œ๋„/์‹œ๊ตฐ๊ตฌ๋ณ„** ์•ฝ๊ตญ ๋ชฉ๋ก๊ณผ ์˜์—…์‹œ๊ฐ„ -- `open_now` ๋™์  ๊ณ„์‚ฐ (์š”์ผยท์‹œ๊ฐ ๊ธฐ๋ฐ˜) โ€” ์ง€๊ธˆ ์˜์—…์ค‘์ธ์ง€ ์ž๋™ ํŒ๋‹จ -- ๊ฐ€๊นŒ์šด ์ˆœ ์ •๋ ฌ์— ์“ธ ์ˆ˜ ์žˆ๋Š” ์ขŒํ‘œ attribute ํฌํ•จ -- **๊ตญ๋ฆฝ์ค‘์•™์˜๋ฃŒ์›_์ „๊ตญ ์•ฝ๊ตญ ์ •๋ณด ์กฐํšŒ ์„œ๋น„์Šค** ํ‚ค ํ•„์š” (`data.go.kr`, ์šด์˜๊ธฐ๊ด€ ์ฝ”๋“œ B552657) -- **๐ŸŽ ๋“ฑ๋กํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ๊ฒƒ:** ๊ธฐ๊ธฐ `์•ฝ๊ตญ - <์‹œ๊ตฐ๊ตฌ or ์‹œ๋„>` ์•„๋ž˜์— sensor `์šด์˜ ์•ฝ๊ตญ ์ˆ˜` 1๊ฐœ. attribute์— ๋‹ค์Œ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ์–ด ๋Œ€์‹œ๋ณด๋“œ์šฉ์œผ๋กœ ํ’๋ถ€ โ€” - - `pharmacies[]` (์ตœ๋Œ€ 50๊ฐœ; ๊ฐ ํ•ญ๋ชฉ: `name`, `address`, `phone`, `today_hours`, `open_now`, `duty_time`, `lat`, `lon`) - - `total` ยท `shown` ยท `open_now_count` -- **์ด๋Ÿฐ ๋ถ„๊ป˜ ์ถ”์ฒœ:** ์ผ์š”์ผยท๊ณตํœด์ผ์— ๊ฐ€๊นŒ์šด ์˜์—… ์•ฝ๊ตญ์„ ํ•œ๋ˆˆ์— ๋ณด๊ณ  ์‹ถ์€ ๋ถ„, ์นด์นด์˜ค๋งต ๊ธธ์ฐพ๊ธฐ ์นด๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๋ถ„ - -#### โ›ฝ ์œ ๊ฐ€ (Opinet) -- **์‹œ๋„ + ์œ ์ข…**(ํœ˜๋ฐœ์œ /๊ฒฝ์œ /LPG/๊ณ ๊ธ‰ํœ˜๋ฐœ์œ /๋“ฑ์œ )๋ณ„ ํ‰๊ท ๊ฐ€ยท์ตœ์ €๊ฐ€ -- ์‹œ๋„ ๋‚ด **์ตœ์ €๊ฐ€ ์ฃผ์œ ์†Œ Top 5 ๋žญํ‚น** attribute -- Opinet API ํ‚ค ํ•„์š” (`opinet.co.kr`) -- **๐ŸŽ ๋“ฑ๋กํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ๊ฒƒ:** ๋“ฑ๋กํ•œ (์‹œ๋„ ร— ์œ ์ข…) ์กฐํ•ฉ๋งˆ๋‹ค ๊ธฐ๊ธฐ `์œ ๊ฐ€์ •๋ณด - <์ง€์—ญ> <์œ ์ข…>` ์•„๋ž˜์— sensor 2๊ฐœ โ€” - - `์ „๊ตญ ํ‰๊ท ๊ฐ€` (์›/L) - - `์ตœ์ €๊ฐ€` (์›/L) โ€” attrs: `station_name`, `address`, `ranking[]` (์ƒ์œ„ 5๊ฐœ ์ฃผ์œ ์†Œ ์ด๋ฆ„ยท๊ฐ€๊ฒฉยท์ฃผ์†Œ) -- **์ด๋Ÿฐ ๋ถ„๊ป˜ ์ถ”์ฒœ:** ์ถœํ‡ด๊ทผ ๋™์„  ์œ„์˜ ์ตœ์ €๊ฐ€ ์ฃผ์œ ์†Œ๋ฅผ ์ž๋™์œผ๋กœ ์ถ”์ฒœ๋ฐ›๊ณ  ์‹ถ์€ ๋ถ„ - -#### ๐Ÿซ ํ•™๊ต (NEIS โ€” ๋‚˜์ด์Šค ๊ต์œก์ •๋ณด ๊ฐœ๋ฐฉ ํฌํ„ธ) -- **ํ•™๊ต ์ •๋ณด + ๊ธ‰์‹ + ํ•™์‚ฌ์ผ์ • + ์‹œ๊ฐ„ํ‘œ** ์ข…ํ•ฉ -- **NEIS ๊ต์œก์ •๋ณด ๊ฐœ๋ฐฉ ํฌํ„ธ** API ํ‚ค ํ•„์š” (`open.neis.go.kr`) -- **์„ค์ • ํ๋ฆ„** *(์ „๋ถ€ GUI ๋‹จ๊ณ„๋ณ„ ์•ˆ๋‚ด)*: - 1. API ํ‚ค + ํ•™๊ต ๊ธ‰(์ดˆ/์ค‘/๊ณ /ํŠน์ˆ˜) ์„ ํƒ - 2. ํ•™๊ต๋ช… ์ž…๋ ฅ (์˜ˆ: "ํ•œ์†”์ดˆ") โ†’ ์ž๋™์œผ๋กœ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ dropdown ํ‘œ์‹œ (์ตœ๋Œ€ 10๊ฐœ) โ†’ ์„ ํƒ - 3. ํ•™๋…„-๋ฐ˜ ๋ฉ€ํ‹ฐ ์„ ํƒ (์˜ˆ: `2ํ•™๋…„ 3๋ฐ˜`, `2ํ•™๋…„ 4๋ฐ˜` ๋™์‹œ ๋“ฑ๋ก ๊ฐ€๋Šฅ) - 4. 1~7๊ต์‹œ + ์ ์‹ฌ ์‹œ๊ฐ„ ์ž…๋ ฅ - - ์ž๋…€๊ฐ€ ๋‘˜ ์ด์ƒ์ด๋ฉด ๊ฐ™์€ ํ๋ฆ„์„ ํ•™๊ต๋งˆ๋‹ค ๋ฐ˜๋ณต ๋“ฑ๋ก ๊ฐ€๋Šฅ -- **๐ŸŽ ๋“ฑ๋กํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ๊ฒƒ:** ๊ธฐ๊ธฐ `<ํ•™๊ต๋ช…>` ์•„๋ž˜์— โ€” - - sensor `๊ธ‰์‹` (state = ์˜ค๋Š˜ ๊ธ‰์‹ ๋ฉ”๋‰ด ์‰ผํ‘œ ๊ตฌ๋ถ„, attrs: `menu`, `calorie`, `allergy_codes`) - - sensor `ํ•™๊ต ์ •๋ณด` (state = ํ•™๊ต๋ช…, attrs: ํ•™๋…„ยท๋ฐ˜ยท์ฃผ์†Œยท์ „ํ™”) - - ์ถ”๊ฐ€๋กœ ํ•™์‚ฌ์ผ์ •/์‹œ๊ฐ„ํ‘œ calendar ์—”ํ‹ฐํ‹ฐ -- **์ด๋Ÿฐ ๋ถ„๊ป˜ ์ถ”์ฒœ:** ์•„์นจ์— ์ž๋…€์—๊ฒŒ "์˜ค๋Š˜ ๊ธ‰์‹ ๋ญ์•ผ?" ์Œ์„ฑ ์‘๋‹ต์„ ์‹œํ‚ค๊ณ  ์‹ถ์€ ๋ถ„ -- โš ๏ธ **์•Œ๋ ค์ง„ ํ•œ๊ณ„** โ€” NEIS๋Š” ๋ฐ์ดํ„ฐ ์—†๋Š” ๋‚ ์งœ์— `INFO-200` ์‘๋‹ต์„ ๋ณด๋‚ด๋Š”๋ฐ ํ˜„์žฌ ์ฝ”๋“œ๋Š” ์ด๊ฒƒ๋„ ์—๋Ÿฌ๋กœ ์ฒ˜๋ฆฌ. ๋ฐฉํ•™ยทํœด์ผ ๋“ฑ ๋นˆ ๋‚ ์งœ์— ์ผ์‹œ ์—๋Ÿฌ ๋กœ๊ทธ๊ฐ€ ๋‚จ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -#### ๐ŸšŒ ๋Œ€์ค‘๊ตํ†ต (Transit) -- **์ง€ํ•˜์ฒ  ์‹ค์‹œ๊ฐ„ ๋„์ฐฉ์ •๋ณด** (์„œ์šธ ์—ด๋ฆฐ๋ฐ์ดํ„ฐ๊ด‘์žฅ) -- **๋ฒ„์Šค ์‹ค์‹œ๊ฐ„ ๋„์ฐฉ์ •๋ณด** (์นด์นด์˜ค๋งต ๋น„๊ณต์‹ endpoint) โ€” ํ‚ค ๋ถˆํ•„์š” -- (์˜ต์…˜) **ํ™˜์Šน๊ฒฝ๋กœ ๊ฒ€์ƒ‰** (์„œ์šธ์‹œ ํ™˜์Šน๊ฒฝ๋กœ API) โ€” ๋ณ„๋„ ํ‚ค ํ•„์š” -- TIMESTAMP ๊ธฐ๋ฐ˜ ๋„์ฐฉ sensor โ€” ๋“ฑ๋กํ•œ ์—ญ/์ •๋ฅ˜์žฅ๋งˆ๋‹ค ๋‹ค์Œ 2๋Œ€๊นŒ์ง€ ํ‘œ์‹œ -- **ํ•„์š”ํ•œ ํ‚ค โ€” ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„๋กœ ๋‹ค๋ฆ„:** - - ์ง€ํ•˜์ฒ  ๋„์ฐฉ์ •๋ณด๋งŒ โ†’ ์„œ์šธ ์—ด๋ฆฐ๋ฐ์ดํ„ฐ๊ด‘์žฅ ํ‚ค 1๊ฐœ - - ๋ฒ„์Šค ๋„์ฐฉ์ •๋ณด๋งŒ โ†’ **ํ‚ค ๋ถˆํ•„์š”** (์นด์นด์˜ค๋งต ์ •๋ฅ˜์žฅ ID๋งŒ ์ž…๋ ฅ) - - ํ™˜์Šน๊ฒฝ๋กœ ๊ฒ€์ƒ‰๊นŒ์ง€ โ†’ ์„œ์šธ์‹œ ํ™˜์Šน๊ฒฝ๋กœ API ํ‚ค ์ถ”๊ฐ€ (config_flow์—์„œ `bus_api_key` Optional ์ž…๋ ฅ) -- **์„ค์ • ํ๋ฆ„**: - 1. ๋‘ API ํ‚ค ์ž…๋ ฅ - 2. ๋ฉ”๋‰ด์—์„œ "์ง€ํ•˜์ฒ  ์—ญ ์ถ”๊ฐ€" ๋˜๋Š” "๋ฒ„์Šค ๋…ธ์„  ์ถ”๊ฐ€" ์„ ํƒ - 3. **์ง€ํ•˜์ฒ ** โ€” ์—ญ ์ด๋ฆ„ + ๋ฐฉํ–ฅ(์ƒํ–‰/ํ•˜ํ–‰) + ํ˜ธ์„  ํ•„ํ„ฐ - 4. **๋ฒ„์Šค** โ€” ์นด์นด์˜ค๋งต ์ •๋ฅ˜์žฅ ID ์ž…๋ ฅ โ†’ ํ•ด๋‹น ์ •๋ฅ˜์žฅ์— ์ •์ฐจํ•˜๋Š” ๋…ธ์„ ๋“ค์ด ์ž๋™์œผ๋กœ ํ‘œ์‹œ โ†’ ์ถ”์ ํ•  ๋…ธ์„  ๋ฉ€ํ‹ฐ ์„ ํƒ -- ๐Ÿ“ **์นด์นด์˜ค๋งต ์ •๋ฅ˜์žฅ ID ์ฐพ๋Š” ๋ฒ•** โ€” PC์—์„œ [์นด์นด์˜ค๋งต](https://map.kakao.com) ์ ‘์† โ†’ ์ •๋ฅ˜์žฅ ์ด๋ฆ„ ๊ฒ€์ƒ‰ โ†’ ์ •๋ฅ˜์žฅ์„ ํด๋ฆญํ•˜๋ฉด URL์ด `https://map.kakao.com/?busstopid=03171&...` ํ˜•ํƒœ๋กœ ๋ฐ”๋€Œ๋Š”๋ฐ, **`busstopid=` ๋’ค์˜ ๊ฐ’**(์˜ˆ: `03171`, `BS09013700`, `223000122` ๋“ฑ)์„ ๋ณต์‚ฌํ•ด์„œ ์ž…๋ ฅ -- **๐ŸŽ ๋“ฑ๋กํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ๊ฒƒ:** ์ง€ํ•˜์ฒ ์€ ์—ญยท๋ฐฉํ–ฅ๋ณ„ ๊ธฐ๊ธฐ ์•„๋ž˜์— ๋„์ฐฉ sensor 2๊ฐœ(์ฒซ ์ฐจ/๋‹ค์Œ ์ฐจ), ๋ฒ„์Šค ์ •๋ฅ˜์žฅ์€ ๋…ธ์„ ๋ณ„๋กœ ๋„์ฐฉ sensor 2๊ฐœ. state๋Š” ๋„์ฐฉ ์‹œ๊ฐ timestamp (HA๊ฐ€ ์ž๋™์œผ๋กœ "N๋ถ„ ํ›„"๋กœ ํ‘œ์‹œ) -- **์ด๋Ÿฐ ๋ถ„๊ป˜ ์ถ”์ฒœ:** "๋‹ค์Œ ๋ฒ„์Šค 5๋ถ„ ํ›„ ๋„์ฐฉํ•˜๋ฉด ์šฐ์‚ฐ ์•Œ๋ฆผ" ๊ฐ™์€ ์ž๋™ํ™”๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๋ถ„ - -> ๐Ÿ“Œ **entity_id ํ‘œ๊ธฐ ์•ˆ๋‚ด** โ€” ์œ„ ๋ฐ•์Šค์˜ "sensor `์ด๋ฆ„`" ํ˜•ํƒœ๋Š” HA์—์„œ ํ‘œ์‹œ๋˜๋Š” **์นœํ™” ์ด๋ฆ„(friendly name)** ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ entity_id๋Š” HA๊ฐ€ ๋””๋ฐ”์ด์Šค๋ช…ยท์—”ํ‹ฐํ‹ฐ๋ช…์„ ํ•œ๊ธ€โ†’๋กœ๋งˆ์ž ์Šฌ๋Ÿฌ๊ทธํ™”ํ•ด์„œ ์ž๋™ ์ƒ์„ฑํ•˜๋ฏ€๋กœ(์˜ˆ: `sensor.yaggug_gangnamgu_unyeong_yaggug_su`), ์ •ํ™•ํ•œ ID๋Š” **๊ฐœ๋ฐœ์ž ๋„๊ตฌ โ†’ ์ƒํƒœ**์—์„œ ์นœํ™” ์ด๋ฆ„์œผ๋กœ ๊ฒ€์ƒ‰ํ•ด ํ™•์ธํ•˜์„ธ์š”. UI์—์„œ ์ž์œ ๋กญ๊ฒŒ entity_id๋ฅผ ๋” ์ง๊ด€์ ์ธ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. +## ๐Ÿš€ 5๋ถ„ ๋งŒ์— ์‹œ์ž‘ํ•˜๊ธฐ ---- - -## ๐Ÿš€ 5๋ถ„ ๋งŒ์— ์‹œ์ž‘ํ•˜๊ธฐ (API ํ‚ค ํ•„์š” ์—†์Œ) - -์ฒ˜์Œ์ด๋ผ **๋ญ๊ฐ€ ๋˜๋Š”์ง€ ์ผ๋‹จ ํ™•์ธํ•ด๋ณด๊ณ  ์‹ถ์œผ์‹œ๋ฉด** ์•„๋ž˜ ์ˆœ์„œ๋Œ€๋กœ ๋”ฐ๋ผ์˜ค์„ธ์š”. API ํ‚ค ์‹ ์ฒญ ์—†์ด 5๋ถ„์ด๋ฉด ์ฒซ sensor๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. - -### Step 1. ์ปดํฌ๋„ŒํŠธ ์„ค์น˜ (2๋ถ„) +### โ‘  ์ปดํฌ๋„ŒํŠธ ์„ค์น˜ (2๋ถ„) -์œ„์ชฝ์˜ **`MY` HACS ์›ํด๋ฆญ ๋ฒ„ํŠผ**์„ ๋ˆ„๋ฅด์„ธ์š”. ์•ˆ ๋ณด์ด๋ฉด [HACS ์„ค์น˜ ๋ฐฉ๋ฒ•](#-์„ค์น˜-๋ฐฉ๋ฒ•) ์ฐธ๊ณ . +์œ„ **`MY` HACS ๋ฑƒ์ง€**๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ž๋™์œผ๋กœ HA๊ฐ€ ์—ด๋ฆฝ๋‹ˆ๋‹ค โ†’ **DOWNLOAD** โ†’ **์žฌ์‹œ์ž‘**. +*HACS๊ฐ€ ์—†์œผ์‹œ๋‹ค๋ฉด โ†’ [HACS ๊ณต์‹ ์„ค์น˜ ๊ฐ€์ด๋“œ](https://www.hacs.xyz/docs/setup/download/) ๋จผ์ €.* -### Step 2. ์•ˆ์ „์•Œ๋ฆผ ๋“ฑ๋ก (1๋ถ„) โ€” **API ํ‚ค ๋ถˆํ•„์š”** +### โ‘ก ์ฒซ ์„œ๋น„์Šค ๋“ฑ๋ก (1๋ถ„) โ€” API ํ‚ค โŒ **๋ถˆํ•„์š”** -1. **์„ค์ • โ†’ ๊ธฐ๊ธฐ ๋ฐ ์„œ๋น„์Šค โ†’ ํ†ตํ•ฉ ๊ตฌ์„ฑ์š”์†Œ ์ถ”๊ฐ€** -2. ๊ฒ€์ƒ‰์ฐฝ์— **`ํ•œ๊ตญ ์ปดํฌ๋„ŒํŠธ ํ‚คํŠธ`** ์ž…๋ ฅ *(์˜๋ฌธ ๋„๋ฉ”์ธ๋ช… `kr_component_kit` ์œผ๋กœ๋„ ๊ฒ€์ƒ‰๋ฉ๋‹ˆ๋‹ค)* -3. 13๊ฐœ ์„œ๋น„์Šค ๋ฉ”๋‰ด ์ค‘ **๐Ÿšจ ์•ˆ์ „์•Œ๋ฆผ** ์„ ํƒ -4. ์‹œ๋„/์‹œ๊ตฐ๊ตฌ dropdown์—์„œ ํ•œ ๊ณณ ์ด์ƒ ์„ ํƒ โ†’ **์ œ์ถœ** +**์„ค์ • โ†’ ๊ธฐ๊ธฐ ๋ฐ ์„œ๋น„์Šค โ†’ + ํ†ตํ•ฉ ๊ตฌ์„ฑ์š”์†Œ ์ถ”๊ฐ€** +โ†’ ๊ฒ€์ƒ‰์ฐฝ์— `ํ•œ๊ตญ ์ปดํฌ๋„ŒํŠธ ํ‚คํŠธ` *(์˜๋ฌธ ๋„๋ฉ”์ธ `kr_component_kit` ๋„ ๊ฐ€๋Šฅ)* +โ†’ **๐Ÿšจ ์•ˆ์ „์•Œ๋ฆผ** ์„ ํƒ โ†’ ์‹œ๋„/์‹œ๊ตฐ๊ตฌ/์๋ฉด๋™ ์„ ํƒ โ†’ ์ œ์ถœ -### Step 3. ๊ฒฐ๊ณผ ํ™•์ธ (30์ดˆ) +### โ‘ข ๊ฒฐ๊ณผ ํ™•์ธ (30์ดˆ) -**๊ฐœ๋ฐœ์ž ๋„๊ตฌ โ†’ ์ƒํƒœ** ์ฐฝ์„ ์—ด๊ณ  ์นœํ™” ์ด๋ฆ„์œผ๋กœ `์ตœ์‹  ์•ˆ์ „์•Œ๋ฆผ` ์„ ๊ฒ€์ƒ‰ํ•˜์„ธ์š” โ€” ๋“ฑ๋กํ•œ ์ง€์—ญ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์žกํž™๋‹ˆ๋‹ค. ํด๋ฆญํ•˜๋ฉด ์ž๋™ ์ƒ์„ฑ๋œ entity_id(์˜ˆ: `sensor.anjeon_allim_seoul_teugbyeolsi_choesin_anjeon_allim`)์™€ state(๊ฐ€์žฅ ์ตœ๊ทผ ํ–‰์•ˆ๋ถ€ ์•ˆ์ „ ๋ฉ”์‹œ์ง€) ๊ฐ€ ๋ณด์ž…๋‹ˆ๋‹ค. ๋Œ€์‹œ๋ณด๋“œ์—๋Š” ๋‹ค์Œ ํ•œ ์ค„๋กœ ํ‘œ์‹œ โ€” - -> ๐Ÿ” **"๊ฐœ๋ฐœ์ž ๋„๊ตฌ" ์œ„์น˜** โ€” HA ์‚ฌ์ด๋“œ๋ฐ” ํ•˜๋‹จ์˜ ๐Ÿ› ๏ธ ๋ง์น˜ ์•„์ด์ฝ˜. ์‚ฌ์ด๋“œ๋ฐ”๊ฐ€ ์ ‘ํ˜€์žˆ๋‹ค๋ฉด ์ขŒ์ธก ์œ„ โ˜ฐ ๋ฉ”๋‰ด โ†’ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ. (๊ด€๋ฆฌ์ž ๊ณ„์ •์—์„œ๋งŒ ๋ณด์ž…๋‹ˆ๋‹ค.) - -```yaml -type: entity -entity: sensor. -``` +**๊ฐœ๋ฐœ์ž ๋„๊ตฌ โ†’ ์ƒํƒœ** ์—์„œ ์นœํ™” ์ด๋ฆ„ `์ตœ์‹  ์•ˆ์ „์•Œ๋ฆผ` ๊ฒ€์ƒ‰ โ†’ state์— ๊ฐ€์žฅ ์ตœ๊ทผ ํ–‰์•ˆ๋ถ€ ์•ˆ์ „ ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ. -> ๐Ÿ’ก entity_id๊ฐ€ ๊ธธ๊ณ  ํ—ท๊ฐˆ๋ฆฌ๋ฉด **์„ค์ • โ†’ ๊ธฐ๊ธฐ ๋ฐ ์„œ๋น„์Šค โ†’ "ํ•œ๊ตญ ์ปดํฌ๋„ŒํŠธ ํ‚คํŠธ" โ†’ ํ•ด๋‹น ์•ˆ์ „์•Œ๋ฆผ ์นด๋“œ โ†’ ์—”ํ‹ฐํ‹ฐ ํด๋ฆญ โ†’ ์„ค์ •(โš™๏ธ)** ์—์„œ ๋” ์งง์€ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์˜ˆ: `sensor.safety_alert_gangnam`). +### โ‘ฃ ๋” ๋งŽ์€ ์„œ๋น„์Šค ์ถ”๊ฐ€ -### Step 4. ๋งˆ์Œ์— ๋“ค๋ฉด ์ถ”๊ฐ€ ๋“ฑ๋ก - -๊ฐ™์€ ํ†ตํ•ฉ ๊ตฌ์„ฑ์š”์†Œ์—์„œ **"ํ•ญ๋ชฉ ์ถ”๊ฐ€"** ๋ฅผ ๋ˆŒ๋Ÿฌ ์•ฝ๊ตญยท๊ธฐ์ƒ์ฒญยท์žฌ๋‚œ๋ฌธ์žยทํ•™๊ต ๋“ฑ์„ ํ•˜๋‚˜์”ฉ ๋” ๋“ฑ๋กํ•˜์„ธ์š”. ์ด๋•Œ ๋น„๋กœ์†Œ API ํ‚ค๊ฐ€ ํ•„์š”ํ•ด์ง‘๋‹ˆ๋‹ค โ†’ [๐Ÿ”‘ API ํ‚ค ๋ฐœ๊ธ‰ ๊ฐ€์ด๋“œ](#-api-ํ‚ค-๋ฐœ๊ธ‰-๊ฐ€์ด๋“œ)๋กœ ์ด๋™. +์ค€๋น„๋˜์‹œ๋ฉด [๐Ÿ”‘ API ํ‚ค ๋ฐœ๊ธ‰ ๊ฐ€์ด๋“œ](#-api-ํ‚ค-๋ฐœ๊ธ‰-๊ฐ€์ด๋“œ)๋Œ€๋กœ ๋‹ค๋ฅธ 12๊ฐœ๋ฅผ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. --- -## ๐Ÿค– LLM API ์—ฐ๋™ (์˜ต์…˜) - -๊ฐ ์„œ๋น„์Šค๋Š” ๋™์ผํ•œ ์ด๋ฆ„์˜ **LLM ๋„๊ตฌ**๋ฅผ ํ•จ๊ป˜ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. Home Assistant์˜ **Assist + LLM ํ†ตํ•ฉ**(OpenAI / Google / Ollama ๋“ฑ)์— ๋ณธ ํ†ตํ•ฉ์„ ๋…ธ์ถœํ•˜๋ฉด ์ž์—ฐ์–ด๋กœ ์ง์ ‘ ์งˆ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -| ์„œ๋น„์Šค | ์ž์—ฐ์–ด ์˜ˆ์‹œ | -|---|---| -| ์•ฝ๊ตญ | "์ง€๊ธˆ ์˜์—…์ค‘์ธ ๊ฐ€๊นŒ์šด ์•ฝ๊ตญ ์•Œ๋ ค์ค˜" | -| ์—์–ด์ฝ”๋ฆฌ์•„ | "์˜ค๋Š˜ ๋ฏธ์„ธ๋จผ์ง€ ์–ด๋•Œ?" | -| ๊ธฐ์ƒ์ฒญ | "๋‚ด์ผ ๋น„ ์™€?" | -| ์žฌ๋‚œ๋ฌธ์ž | "์ตœ๊ทผ ์žฌ๋‚œ๋ฌธ์ž ๋ญ ์žˆ์–ด?" | -| ์ง€์ง„ | "์ตœ๊ทผ ์ง€์ง„ ์žˆ์—ˆ์–ด?" | -| ํ•™๊ต | "์˜ค๋Š˜ ๊ธ‰์‹ ๋ญ์•ผ?" | -| ์œ ๊ฐ€ | "์šฐ๋ฆฌ ๋™๋„ค ํœ˜๋ฐœ์œ  ์ตœ์ €๊ฐ€ ์–ด๋””์•ผ?" | -| ๋Œ€์ค‘๊ตํ†ต | "๋‹ค์Œ ๋งˆ์„๋ฒ„์Šค ์–ธ์ œ ์™€?" | +## ๐Ÿ“‹ 13๊ฐ€์ง€ ์„œ๋น„์Šค ํ•œ๋ˆˆ์— -LLM์—์„œ ๋ณธ ํ†ตํ•ฉ์„ ๋…ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ๊ทธ๋ƒฅ ์ผ๋ฐ˜ sensor/event/weather ์—”ํ‹ฐํ‹ฐ๋กœ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์„ค์ • ๋ถˆํ•„์š”. +| ์„œ๋น„์Šค | ์นดํ…Œ๊ณ ๋ฆฌ | API ํ‚ค | ๋น„๊ณ  | +|---|---|---|---| +| ๐Ÿ’Š **์•ฝ๊ตญ** | ์ƒํ™œ | โœ… data.go.kr | ์‹œ๋„/์‹œ๊ตฐ๊ตฌ๋ณ„ ์•ฝ๊ตญ + ์‹ค์‹œ๊ฐ„ ์˜์—…์ค‘ | +| ๐Ÿšจ **์•ˆ์ „์•Œ๋ฆผ** | ์•ˆ์ „ | โŒ ๋ถˆํ•„์š” | ํ–‰์•ˆ๋ถ€ ์•ˆ์ „์•Œ๋ฆผ (์Šคํฌ๋ž˜ํ•‘) | +| ๐Ÿ“ข **์žฌ๋‚œ๋ฌธ์ž** | ์•ˆ์ „ | โœ… safetydata.go.kr | ์žฌ๋‚œ๋ฌธ์ž ์‹ค์‹œ๊ฐ„ | +| ๐ŸŒช๏ธ **๊ธฐ์ƒํŠน๋ณด** | ์•ˆ์ „ | โœ… data.go.kr | ํ˜ธ์šฐ/๊ฐ•ํ’/ํ•œํŒŒ/ํญ์—ผ 12์ข… | +| ๐ŸŒ **์ง€์ง„** | ์•ˆ์ „ | โœ… data.go.kr | ๋ฐ˜๊ฒฝ+๊ทœ๋ชจ ํ•„ํ„ฐ | +| โ›… **๊ธฐ์ƒ์ฒญ ๋™๋„ค์˜ˆ๋ณด** | ๋‚ ์”จ | โœ… data.go.kr | HA Weather ์นด๋“œ ํ˜ธํ™˜ | +| ๐ŸŒซ๏ธ **์—์–ด์ฝ”๋ฆฌ์•„** | ๋‚ ์”จ | โœ… data.go.kr (2๊ฑด) | PM10/PM2.5 + ํ†ตํ•ฉ๋Œ€๊ธฐ์งˆ์ง€์ˆ˜ | +| โšก **ํ•œ๊ตญ์ „๋ ฅ (KEPCO)** | ์œ ํ‹ธ | โŒ (๋ณธ์ธ ๊ณ„์ •) | ์‚ฌ์šฉ๋Ÿ‰ + ์š”๊ธˆ | +| ๐Ÿ’ง **์•„๋ฆฌ์ˆ˜ (์„œ์šธ ์ƒ์ˆ˜๋„)** | ์œ ํ‹ธ | โŒ (์ˆ˜์šฉ๊ฐ€๋ฒˆํ˜ธ) | ์„œ์šธ๋งŒ | +| ๐Ÿ  **๊ฐ€์Šค์•ฑ (๋„์‹œ๊ฐ€์Šค)** | ์œ ํ‹ธ | โŒ (๋ชจ๋ฐ”์ผ ์•ฑ ํ† ํฐ) | ํŒจํ‚ท ์บก์ฒ˜ ํ•„์š” | +| โ›ฝ **์œ ๊ฐ€ (Opinet)** | ์ƒํ™œ | โœ… opinet.co.kr | ์‹œ๋„๋ณ„ ํ‰๊ท /์ตœ์ €๊ฐ€ | +| ๐Ÿซ **ํ•™๊ต (NEIS)** | ์ƒํ™œ | โœ… open.neis.go.kr | ๊ธ‰์‹ยท์‹œ๊ฐ„ํ‘œยทํ•™์‚ฌ์ผ์ • | +| ๐ŸšŒ **๋Œ€์ค‘๊ตํ†ต** | ์ƒํ™œ | ๋ถ€๋ถ„ | ์ง€ํ•˜์ฒ : ์„œ์šธ ํ‚ค / ๋ฒ„์Šค: ํ‚ค ๋ถˆํ•„์š” (์นด์นด์˜ค๋งต) | + +> ๐Ÿ’ก **ํ•ต์‹ฌ**: ๋ชจ๋“  ์„œ๋น„์Šค๋Š” **๋ฌด๋ฃŒ** ์ •๋ถ€ยท๊ณต๊ณต๊ธฐ๊ด€ OpenAPI๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ์ œยท๊ณผ๊ธˆ ์ผ์ ˆ ์—†์Œ. --- -## ๐Ÿš€ ์„ค์น˜ ๋ฐฉ๋ฒ• - -### ๐ŸŽฏ HACS๊ฐ€ ์ฒ˜์Œ์ด๋ผ๋ฉด - -**HACS(Home Assistant Community Store)** ๋Š” ๊ณต์‹ ํ†ตํ•ฉ์—๋Š” ์—†๋Š” ์‚ฌ์šฉ์ž ์ œ์ž‘ ์ปดํฌ๋„ŒํŠธ๋ฅผ GUI๋กœ ์„ค์น˜ยท์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ถ€๊ฐ€ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ํ•œ๊ตญ ์„œ๋น„์Šค์ฒ˜๋Ÿผ ๊ณต์‹์— ์—†๋Š” ํ†ตํ•ฉ์„ ์“ฐ๋ ค๋ฉด ๊ฑฐ์˜ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. - -- HACS ์ž์ฒด ์„ค์น˜๊ฐ€ ์•ˆ ๋˜์–ด ์žˆ๋‹ค๋ฉด โ†’ [HACS ๊ณต์‹ ์„ค์น˜ ๊ฐ€์ด๋“œ](https://www.hacs.xyz/docs/setup/download/) ๋จผ์ € ์ง„ํ–‰ (5~10๋ถ„) -- ์ด๋ฏธ HACS๊ฐ€ ์žˆ๋‹ค๋ฉด โ†’ ์•„๋ž˜ ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ณ ๋ฅด์„ธ์š” - -> โ„น๏ธ ๋ณธ ์ปดํฌ๋„ŒํŠธ๋Š” ํ˜„์žฌ **HACS ์‚ฌ์šฉ์ž ์ง€์ • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ(Custom Repository)** ๋กœ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. HACS Default ๋“ฑ๋ก์€ ์ง„ํ–‰ ์ค‘์ด๋ฉฐ, ๋“ฑ๋ก์ด ์™„๋ฃŒ๋˜๋ฉด ๋ณ„๋„์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ถ”๊ฐ€ ์—†์ด HACS ๊ฒ€์ƒ‰๋งŒ์œผ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. - -### ๋ฐฉ๋ฒ• A. **์›ํด๋ฆญ ์„ค์น˜** (๊ฐ€์žฅ ๋น ๋ฆ„) - -ํŽ˜์ด์ง€ ์ƒ๋‹จ์˜ **`MY` ๋ฑƒ์ง€**๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ž์‹ ์˜ Home Assistant๊ฐ€ ์ž๋™์œผ๋กœ ์—ด๋ฆฌ๋ฉฐ HACS ๋“ฑ๋ก ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. **DOWNLOAD** ํด๋ฆญ โ†’ **Home Assistant ์žฌ์‹œ์ž‘** ๋งŒ ํ•˜๋ฉด ๋. - -> ๐Ÿ”— [์›ํด๋ฆญ ์„ค์น˜ ๋งํฌ](https://my.home-assistant.io/redirect/hacs_repository/?owner=redchupa&repository=kr_component_kit&category=integration) - -### ๋ฐฉ๋ฒ• B. HACS ์•ˆ์—์„œ ์ˆ˜๋™ ๋“ฑ๋ก +## ๐Ÿ”‘ API ํ‚ค ๋ฐœ๊ธ‰ ๊ฐ€์ด๋“œ -1. Home Assistant ์‚ฌ์ด๋“œ๋ฐ” โ†’ **HACS** -2. ์šฐ์ธก ์ƒ๋‹จ **โ‹ฎ** (์  3๊ฐœ) ๋ฉ”๋‰ด โ†’ **์‚ฌ์šฉ์ž ์ง€์ • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ (Custom repositories)** -3. ๋‹ค์Œ ์ •๋ณด ์ž…๋ ฅ: - - **๋ฆฌํฌ์ง€ํ† ๋ฆฌ:** `redchupa/kr_component_kit` - - **์นดํ…Œ๊ณ ๋ฆฌ(ํƒ€์ž…):** `Integration` -4. **์ถ”๊ฐ€** ํด๋ฆญ โ†’ HACS ๊ฒ€์ƒ‰์—์„œ **KR Component Kit** ๊ฒ€์ƒ‰ โ†’ **DOWNLOAD** -5. **์„ค์ • โ†’ ์‹œ์Šคํ…œ โ†’ ๋‹ค์‹œ ์‹œ์ž‘** ์œผ๋กœ Home Assistant ์žฌ์‹œ์ž‘ +> โš ๏ธ **์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์‹ค์ˆ˜ 3๊ฐ€์ง€** +> - ์žฌ๋‚œ๋ฌธ์ž๋Š” `safetydata.go.kr` (์•ˆ์ „๋ฐ์ดํ„ฐํฌํ„ธ) โ€” `data.go.kr` (๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ) ๊ณผ **๋‹ค๋ฅธ ํฌํ„ธ**. ๊ณ„์ •ยทํ‚ค ๋ถ„๋ฆฌ. +> - ๊ฐ™์€ `data.go.kr` ์•ˆ์—์„œ๋„ **๋ฐ์ดํ„ฐ์…‹๋งˆ๋‹ค ํ™œ์šฉ์‹ ์ฒญ์„ ๋”ฐ๋กœ** โ€” ์•ฝ๊ตญ ์‹ ์ฒญ ํ‚ค๋กœ ๊ธฐ์ƒํŠน๋ณด ํ˜ธ์ถœํ•˜๋ฉด 403. +> - ์‹ ์ฒญ ์งํ›„ ํ™œ์„ฑํ™”๊นŒ์ง€ **1~2์‹œ๊ฐ„** ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Œ (ํŠนํžˆ ์šด์˜๊ธฐ๊ด€ ํ‚ค). -### ๋ฐฉ๋ฒ• C. HACS ์—†์ด ์ˆ˜๋™ ์„ค์น˜ (๋น„์ถ”์ฒœ) +๊ฐ ์„œ๋น„์Šค์˜ *๋ฐ”๋กœ ๊ฒ€์ƒ‰ ๋งํฌ*๋Š” ํด๋ฆญ ํ•œ ๋ฒˆ์— ํ•ด๋‹น ํฌํ„ธ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค (๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•œ๊ตญ์–ด ์ž๋™ ์ธ์ฝ”๋”ฉ). -HACS๋ฅผ ๋ชป ์“ฐ๋Š” ํ™˜๊ฒฝ์—์„œ๋งŒ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด ๋ฐฉ๋ฒ•์€ **์ž๋™ ์—…๋ฐ์ดํŠธ๊ฐ€ ์•ˆ ๋ฉ๋‹ˆ๋‹ค.** +### ๐Ÿ’Š ์•ฝ๊ตญ (์ „๊ตญ ์•ฝ๊ตญ ์ •๋ณด) -1. ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ZIP์œผ๋กœ ๋‹ค์šด๋กœ๋“œ โ†’ ์••์ถ• ํ•ด์ œ -2. `custom_components/kr_component_kit` ํด๋” ์ „์ฒด๋ฅผ Home Assistant `config/custom_components/` ์•ˆ์— ๋ณต์‚ฌ -3. Home Assistant ์žฌ์‹œ์ž‘ +| ํ•ญ๋ชฉ | ๊ฐ’ | +|---|---| +| ๐ŸŒ ํฌํ„ธ | [๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ (data.go.kr)](https://www.data.go.kr) | +| ๐Ÿ”Ž ๋ฐ”๋กœ ๊ฒ€์ƒ‰ | [๐Ÿ‘‰ ์ „๊ตญ ์•ฝ๊ตญ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋กœ ์ด๋™](https://www.data.go.kr/tcs/dss/selectDataSetList.do?searchKeyword=์ „๊ตญ%20์•ฝ๊ตญ) | +| ๊ฒ€์ƒ‰์–ด | `์ „๊ตญ ์•ฝ๊ตญ` ๋˜๋Š” `์•ฝ๊ตญ ์ •๋ณด` | +| ์šด์˜๊ธฐ๊ด€ | ๊ตญ๋ฆฝ์ค‘์•™์˜๋ฃŒ์› (์ฝ”๋“œ `B552657`) | +| ์ •ํ™•ํ•œ ๋ฐ์ดํ„ฐ์…‹๋ช… | **๊ตญ๋ฆฝ์ค‘์•™์˜๋ฃŒ์›_์ „๊ตญ ์•ฝ๊ตญ ์ •๋ณด ์กฐํšŒ ์„œ๋น„์Šค** | +| ์ฝ”๋“œ ํ˜ธ์ถœ endpoint | `apis.data.go.kr/B552657/ErmctInsttInfoInqireService/getParmacyListInfoInqire` | -> โœ… ์„ค์น˜ ํ™•์ธ: ์žฌ์‹œ์ž‘ ํ›„ **์„ค์ • โ†’ ๊ธฐ๊ธฐ ๋ฐ ์„œ๋น„์Šค โ†’ ํ†ตํ•ฉ ๊ตฌ์„ฑ์š”์†Œ ์ถ”๊ฐ€** ์—์„œ `ํ•œ๊ตญ ์ปดํฌ๋„ŒํŠธ ํ‚คํŠธ` ๊ฐ€ ๊ฒ€์ƒ‰๋˜๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค. *(HA ๊ฒ€์ƒ‰์€ ํ•œ๊ธ€ ์ž…๋ ฅ ๊ฐ€๋Šฅ โ€” ์•ˆ ๋˜๋ฉด ์˜๋ฌธ ๋„๋ฉ”์ธ `kr_component_kit` ์œผ๋กœ๋„ ๊ฒ€์ƒ‰๋ฉ๋‹ˆ๋‹ค.)* +**์‹ ์ฒญ ๋‹จ๊ณ„:** ํšŒ์›๊ฐ€์ž… โ†’ ์œ„ ๊ฒ€์ƒ‰ ๋งํฌ ํด๋ฆญ โ†’ ๋ฐ์ดํ„ฐ์…‹ ์„ ํƒ โ†’ **ํ™œ์šฉ์‹ ์ฒญ** โ†’ ๋งˆ์ดํŽ˜์ด์ง€ โ†’ ์˜คํ”ˆAPI โ†’ ์ธ์ฆํ‚ค ๋ฐœ๊ธ‰ํ˜„ํ™ฉ โ†’ **์ผ๋ฐ˜ ์ธ์ฆํ‚ค(Decoding)** ๋ณต์‚ฌ โ†’ HA ์•ฝ๊ตญ ํ•ญ๋ชฉ์— ๊ทธ๋Œ€๋กœ ๋ถ™์—ฌ๋„ฃ๊ธฐ. --- -## โš™๏ธ ์„ค์ • ๋ฐฉ๋ฒ• +### ๐Ÿ“ข ์žฌ๋‚œ๋ฌธ์ž -### ๊ธฐ๋ณธ ํ๋ฆ„ - -1. **์„ค์ • โ†’ ๊ธฐ๊ธฐ ๋ฐ ์„œ๋น„์Šค** -2. ์šฐ์ธก ํ•˜๋‹จ **+ ํ†ตํ•ฉ ๊ตฌ์„ฑ์š”์†Œ ์ถ”๊ฐ€** ํด๋ฆญ -3. ๊ฒ€์ƒ‰์ฐฝ์— **`ํ•œ๊ตญ ์ปดํฌ๋„ŒํŠธ ํ‚คํŠธ`** ์ž…๋ ฅ โ†’ ์„ ํƒ *(ํ•œ๊ธ€ ํ‚ค๋ณด๋“œ๊ฐ€ ์•„๋‹ˆ๋ฉด ์˜๋ฌธ ๋„๋ฉ”์ธ๋ช… `kr_component_kit` ์œผ๋กœ๋„ ๊ฒ€์ƒ‰๋ฉ๋‹ˆ๋‹ค)* -4. **13๊ฐ€์ง€ ์„œ๋น„์Šค ์ค‘ ํ•˜๋‚˜** ๋ฅผ ๊ณ ๋ฅธ ๋’ค โ†’ ์•ˆ๋‚ด ํ™”๋ฉด์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ์ •๋ณด ์ž…๋ ฅ โ†’ ์™„๋ฃŒ -5. ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, **์ด๋ฏธ ๋“ฑ๋ก๋œ "ํ•œ๊ตญ ์ปดํฌ๋„ŒํŠธ ํ‚คํŠธ" ์นด๋“œ ์œ„์˜ "+ ํ•ญ๋ชฉ ์ถ”๊ฐ€" ๋ฒ„ํŠผ** ์„ ๋ˆ„๋ฅด์„ธ์š” (๋˜๋Š” ์นด๋“œ์˜ โ‹ฎ โ†’ ํ•ญ๋ชฉ ์ถ”๊ฐ€) -6. ๋“ฑ๋ก ํ›„์— **API ํ‚ค๋งŒ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๊ฑฐ๋‚˜ ์ง€์—ญ์„ ์ถ”๊ฐ€**ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” ํ•ด๋‹น ํ•ญ๋ชฉ์˜ **"๊ตฌ์„ฑ"** ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ž…๋ ฅ๊ฐ’์„ ๋‹ค์‹œ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์žฌ๋“ฑ๋ก ๋ถˆํ•„์š”) - -> ๐Ÿ’ก ํ•œ ํ†ตํ•ฉ์œผ๋กœ 13๊ฐ€์ง€ ์„œ๋น„์Šค๋ฅผ ๋ชจ๋‘ ๋‹ค๋ฃจ๋ฏ€๋กœ **์„œ๋น„์Šค๋งˆ๋‹ค ๋ณ„๋„๋กœ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€**ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ์„œ๋น„์Šค๋ฅผ ์—ฌ๋Ÿฌ ์ง€์—ญ/๊ณ„์ •์œผ๋กœ **์ค‘๋ณต ๋“ฑ๋ก**(์˜ˆ: ๋ณธ๊ฐ€ + ์ฒ˜๊ฐ€ ์•ฝ๊ตญ ๋‘˜ ๋‹ค)ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. - -> ๐Ÿ“Œ **์ˆœ์„œ ํŒ** โ€” API ํ‚ค๊ฐ€ ํ•„์š”ํ•œ ์„œ๋น„์Šค๋Š”, ๋จผ์ € [๐Ÿ”‘ API ํ‚ค ๋ฐœ๊ธ‰ ๊ฐ€์ด๋“œ](#-api-ํ‚ค-๋ฐœ๊ธ‰-๊ฐ€์ด๋“œ)์—์„œ ํ‚ค๋ฅผ ๋ฐ›์•„ ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌํ•ด๋‘” ๋’ค ๋“ฑ๋กํ•˜๋ฉด ๊ฐ€์žฅ ๋น ๋ฆ…๋‹ˆ๋‹ค. - -### ๐Ÿ  ์ƒํ™œ ์œ ํ‹ธ๋ฆฌํ‹ฐ - -| ์„œ๋น„์Šค | ํ•„์š”ํ•œ ์ •๋ณด | +| ํ•ญ๋ชฉ | ๊ฐ’ | |---|---| -| โšก **KEPCO** | ํ•œ์ „ ํ™ˆํŽ˜์ด์ง€ ์‚ฌ์šฉ์ž ID / ๋น„๋ฐ€๋ฒˆํ˜ธ | -| ๐Ÿ’ง **์•„๋ฆฌ์ˆ˜** | ์ˆ˜์šฉ๊ฐ€๋ฒˆํ˜ธ / ๊ณ ๊ฐ๋ช… | -| ๐Ÿ  **๊ฐ€์Šค์•ฑ** | ํ† ํฐ / ํšŒ์› ID / ์‚ฌ์šฉ๊ณ„์•ฝ๋ฒˆํ˜ธ (๋ชจ๋ฐ”์ผ ์•ฑ์—์„œ ์ถ”์ถœ) | - -### ๐Ÿšจ ์•ˆ์ „ ยท ์žฌ๋‚œ +| ๐ŸŒ ํฌํ„ธ | [ํ–‰์ •์•ˆ์ „๋ถ€ ์•ˆ์ „๋ฐ์ดํ„ฐํฌํ„ธ (safetydata.go.kr)](https://www.safetydata.go.kr) | +| ๐Ÿ”Ž ๋ฐ”๋กœ ๊ฒ€์ƒ‰ | ์œ„ ํฌํ„ธ ์ƒ๋‹จ ๊ฒ€์ƒ‰์ฐฝ์— `์žฌ๋‚œ๋ฌธ์ž` ์ž…๋ ฅ | +| ๊ฒ€์ƒ‰์–ด | `์žฌ๋‚œ๋ฌธ์ž` | +| ์šด์˜๊ธฐ๊ด€ | ํ–‰์ •์•ˆ์ „๋ถ€ | +| ์ฝ”๋“œ ํ˜ธ์ถœ endpoint | `safetydata.go.kr/V2/api/DSSP-IF-00247` | -| ์„œ๋น„์Šค | ํ•„์š”ํ•œ ์ •๋ณด | -|---|---| -| ๐Ÿ“ข **์žฌ๋‚œ๋ฌธ์ž** | `safetydata.go.kr` ์ธ์ฆํ‚ค / ๊ด‘์—ญ์‹œ๋„(ํ•„์ˆ˜) / ์‹œ๊ตฐ๊ตฌ(์„ ํƒ) | -| ๐Ÿšจ **์•ˆ์ „์•Œ๋ฆผ** | ๊ด‘์—ญ์‹œ๋„ + ์‹œ๊ตฐ๊ตฌ ๋‹ค์ค‘ ์„ ํƒ (์„œ์šธ์€ ์ž์น˜๊ตฌ ๋‹จ์œ„) | -| ๐ŸŒช๏ธ **๊ธฐ์ƒํŠน๋ณด** | `data.go.kr` ์„œ๋น„์Šค ํ‚ค / ๊ด‘์—ญ์‹œ๋„ ์ฝ”๋“œ ๋‹ค์ค‘ ์„ ํƒ | -| ๐ŸŒ **์ง€์ง„** | `data.go.kr` ์„œ๋น„์Šค ํ‚ค / ์œ„๋„ยท๊ฒฝ๋„ / ๋ฐ˜๊ฒฝ(km, ๊ธฐ๋ณธ 200) / ์ตœ์†Œ ๊ทœ๋ชจ(๊ธฐ๋ณธ 3.0) | +> โš ๏ธ ์•ˆ์ „๋ฐ์ดํ„ฐํฌํ„ธ์€ ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ๊ณผ **๋‹ค๋ฅธ ์‚ฌ์ดํŠธ**์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ `data.go.kr` ๊ณ„์ •์ด ์žˆ์–ด๋„ ๋ณ„๋„ ๊ฐ€์ž…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. -### โ›… ํ™˜๊ฒฝ ยท ๋‚ ์”จ +--- -| ์„œ๋น„์Šค | ํ•„์š”ํ•œ ์ •๋ณด | -|---|---| -| โ›… **๊ธฐ์ƒ์ฒญ ๋™๋„ค์˜ˆ๋ณด** | `data.go.kr` ์„œ๋น„์Šค ํ‚ค / ์‹œ๋„ โ†’ ์‹œ๊ตฐ๊ตฌ (์˜ต์…˜: ์ธ๊ทผ ์—์–ด์ฝ”๋ฆฌ์•„ ์ธก์ •์†Œ) | -| ๐ŸŒซ๏ธ **์—์–ด์ฝ”๋ฆฌ์•„** | `data.go.kr` ์„œ๋น„์Šค ํ‚ค / ์‹œ๋„ โ†’ ์ธก์ •์†Œ ๋‹ค์ค‘ ์„ ํƒ (์˜ต์…˜: ์ƒํ™œ์ง€์ˆ˜ ํ‚ค) | +### ๐ŸŒช๏ธ ๊ธฐ์ƒํŠน๋ณด + ๐ŸŒ ์ง€์ง„ + โ›… ๋™๋„ค์˜ˆ๋ณด (๊ธฐ์ƒ์ฒญ 3์ข… โ€” ๊ฐ™์€ ์ธ์ฆํ‚ค) -### ๐Ÿ’Š ์ƒํ™œ ์ •๋ณด +์„ธ ๋ฐ์ดํ„ฐ์…‹ ๋ชจ๋‘ `data.go.kr` ์šด์˜๊ธฐ๊ด€ **๊ธฐ์ƒ์ฒญ** (`1360000`). ์ธ์ฆํ‚ค๋Š” *๋‚ด ๊ณ„์ •์˜ ํ•˜๋‚˜์˜ ํ‚ค*๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€๋งŒ, **ํ™œ์šฉ์‹ ์ฒญ์€ ๊ฐ๊ฐ ๋”ฐ๋กœ** ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. -| ์„œ๋น„์Šค | ํ•„์š”ํ•œ ์ •๋ณด | -|---|---| -| ๐Ÿ’Š **์•ฝ๊ตญ** | `data.go.kr` ์„œ๋น„์Šค ํ‚ค / ์‹œ๋„ โ†’ ์‹œ๊ตฐ๊ตฌ | -| โ›ฝ **์œ ๊ฐ€** | Opinet API ํ‚ค / ์‹œ๋„ ๋‹ค์ค‘ + ์œ ์ข… ๋‹ค์ค‘ | -| ๐Ÿซ **ํ•™๊ต** | NEIS API ํ‚ค / ํ•™๊ต๊ธ‰ โ†’ ํ•™๊ต ๊ฒ€์ƒ‰ โ†’ ํ•™๋…„ยท๋ฐ˜ โ†’ ๊ต์‹œ ์‹œ๊ฐ„ | -| ๐ŸšŒ **๋Œ€์ค‘๊ตํ†ต** | ์„œ์šธ API ํ‚ค + ๊ตญํ† ๋ถ€ ๋ฒ„์Šค API ํ‚ค โ†’ ์ง€ํ•˜์ฒ ์—ญ / ์นด์นด์˜ค๋งต ์ •๋ฅ˜์žฅ ID ์ถ”๊ฐ€ | +| ์„œ๋น„์Šค | ๋ฐ”๋กœ ๊ฒ€์ƒ‰ | ๊ฒ€์ƒ‰์–ด | endpoint | +|---|---|---|---| +| ๐ŸŒช๏ธ ๊ธฐ์ƒํŠน๋ณด | [๐Ÿ‘‰ ๊ธฐ์ƒํŠน๋ณด ๊ฒ€์ƒ‰](https://www.data.go.kr/tcs/dss/selectDataSetList.do?searchKeyword=๊ธฐ์ƒํŠน๋ณด) | `๊ธฐ์ƒํŠน๋ณด` | `1360000/WthrWrnInfoService` | +| ๐ŸŒ ์ง€์ง„์ •๋ณด | [๐Ÿ‘‰ ์ง€์ง„์ •๋ณด ๊ฒ€์ƒ‰](https://www.data.go.kr/tcs/dss/selectDataSetList.do?searchKeyword=์ง€์ง„์ •๋ณด) | `์ง€์ง„์ •๋ณด` | `1360000/EqkInfoService` | +| โ›… ๋‹จ๊ธฐ์˜ˆ๋ณด | [๐Ÿ‘‰ ๋‹จ๊ธฐ์˜ˆ๋ณด ๊ฒ€์ƒ‰](https://www.data.go.kr/tcs/dss/selectDataSetList.do?searchKeyword=๋‹จ๊ธฐ์˜ˆ๋ณด) | `๋‹จ๊ธฐ์˜ˆ๋ณด` | `1360000/VilageFcstInfoService_2.0` | --- -## ๐Ÿ”‘ API ํ‚ค ๋ฐœ๊ธ‰ ๊ฐ€์ด๋“œ +### ๐ŸŒซ๏ธ ์—์–ด์ฝ”๋ฆฌ์•„ (๋Œ€๊ธฐ์งˆ) โ€” **2๊ฑด ํ•„์ˆ˜** -๋Œ€๋ถ€๋ถ„์˜ ํ•œ๊ตญ ๊ณต๊ณต ์„œ๋น„์Šค๋Š” **๋ฌด๋ฃŒ** ์ธ์ฆํ‚ค๋งŒ ์žˆ์œผ๋ฉด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, **ํฌํ„ธ๊ณผ ๋ฐ์ดํ„ฐ์…‹์ด ์„œ๋น„์Šค๋งˆ๋‹ค ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—** ํ•œ ๋ฒˆ์— ํ—ท๊ฐˆ๋ฆฌ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ํ‘œ โ†’ ์ƒ์„ธ ์•ˆ๋‚ด ์ˆœ์„œ๋กœ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. +`data.go.kr` ์šด์˜๊ธฐ๊ด€ **ํ•œ๊ตญํ™˜๊ฒฝ๊ณต๋‹จ** (`B552584`) ์˜ ๋ฐ์ดํ„ฐ์…‹ 2๊ฑด์„ ๊ฐ๊ฐ ํ™œ์šฉ์‹ ์ฒญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. -### ํ•œ๋ˆˆ์— ๋ณด๊ธฐ โ€” ์–ด๋””์„œ ๋ญ˜ ๋ฐ›์•„์•ผ ํ•˜๋Š”๊ฐ€? +| ๋ฐ์ดํ„ฐ์…‹ | ๋ฐ”๋กœ ๊ฒ€์ƒ‰ | ๊ฒ€์ƒ‰์–ด | endpoint | +|---|---|---|---| +| ์ธก์ •์†Œ์ •๋ณด | [๐Ÿ‘‰ ์ธก์ •์†Œ์ •๋ณด](https://www.data.go.kr/tcs/dss/selectDataSetList.do?searchKeyword=์—์–ด์ฝ”๋ฆฌ์•„%20์ธก์ •์†Œ) | `์—์–ด์ฝ”๋ฆฌ์•„ ์ธก์ •์†Œ` | `B552584/MsrstnInfoInqireSvc` | +| ๋Œ€๊ธฐ์˜ค์—ผ์ •๋ณด | [๐Ÿ‘‰ ๋Œ€๊ธฐ์˜ค์—ผ์ •๋ณด](https://www.data.go.kr/tcs/dss/selectDataSetList.do?searchKeyword=์—์–ด์ฝ”๋ฆฌ์•„%20๋Œ€๊ธฐ์˜ค์—ผ) | `์—์–ด์ฝ”๋ฆฌ์•„ ๋Œ€๊ธฐ์˜ค์—ผ` | `B552584/ArpltnInforInqireSvc` | -> โ„น๏ธ ํ‘œ ์•ˆ์˜ ์ •๋ณด๋Š” ๋‘ ๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค: -> - **โœ… ๊ฒ€์ฆ๋จ** โ€” ๋ณธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” endpoint URL๊ณผ ์šด์˜๊ธฐ๊ด€ ์ฝ”๋“œ๋Š” [์†Œ์Šค ์ฝ”๋“œ](custom_components/kr_component_kit/)์—์„œ ์ง์ ‘ ํ™•์ธํ•œ ์‚ฌ์‹ค -> - **๐Ÿ”Ž ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ / ๋“ฑ๋ก๋ช…** โ€” data.go.kr ํฌํ„ธ ์ธก์—์„œ ๋ฐ์ดํ„ฐ์…‹ ์ด๋ฆ„์€ ๊ฐ€๋” ๋ฐ”๋€Œ๋ฏ€๋กœ, ๋“ฑ๋ก๋ช… ์ผ์น˜๊ฐ€ ์•„๋‹Œ **๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ + ์šด์˜๊ธฐ๊ด€ + endpoint URL** 3์ค‘ ๊ธฐ์ค€์œผ๋กœ ์ฐพ์œผ์„ธ์š” -> -> ํ™œ์šฉ์‹ ์ฒญ์€ *๋ฐ์ดํ„ฐ์…‹ ๋‹จ์œ„* ๋กœ ๋”ฐ๋กœ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ์ธ์ฆํ‚ค๋ผ๋„ ์‹ ์ฒญ ์•ˆ ํ•œ ๋ฐ์ดํ„ฐ์…‹์€ ํ˜ธ์ถœ ์‹œ `403` ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. +> ๐Ÿ’ก ์ธก์ •์†Œ์ •๋ณด ๋น ์ง€๋ฉด HA ์„ค์ • ํ™”๋ฉด์˜ ์ธก์ •์†Œ dropdown์ด ๋น„์–ด ๋ณด์ž…๋‹ˆ๋‹ค. -| ์‚ฌ์šฉํ•  ์„œ๋น„์Šค | ๋ฐœ๊ธ‰ ํฌํ„ธ | ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ | ์šด์˜๊ธฐ๊ด€ / Endpoint URL (๊ฒ€์ฆ๋จ) | -|---|---|---|---| -| ๐Ÿ’Š **์•ฝ๊ตญ** | [๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ](https://www.data.go.kr) | `์ „๊ตญ ์•ฝ๊ตญ` ยท `์•ฝ๊ตญ ์ •๋ณด` | ๊ตญ๋ฆฝ์ค‘์•™์˜๋ฃŒ์› (`B552657`) ยท `B552657/ErmctInsttInfoInqireService` | -| ๐Ÿ“ข **์žฌ๋‚œ๋ฌธ์ž** | [ํ–‰์ •์•ˆ์ „๋ถ€ ์•ˆ์ „๋ฐ์ดํ„ฐํฌํ„ธ](https://www.safetydata.go.kr) | `์žฌ๋‚œ๋ฌธ์ž` | ํ–‰์ •์•ˆ์ „๋ถ€ ยท `safetydata.go.kr/V2/api/DSSP-IF-00247` | -| ๐ŸŒช๏ธ **๊ธฐ์ƒํŠน๋ณด** | [๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ](https://www.data.go.kr) | `๊ธฐ์ƒํŠน๋ณด` | ๊ธฐ์ƒ์ฒญ (`1360000`) ยท `1360000/WthrWrnInfoService` | -| ๐ŸŒ **์ง€์ง„** | [๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ](https://www.data.go.kr) | `์ง€์ง„์ •๋ณด` | ๊ธฐ์ƒ์ฒญ (`1360000`) ยท `1360000/EqkInfoService` | -| โ›… **๋™๋„ค์˜ˆ๋ณด** | [๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ](https://www.data.go.kr) | `๋‹จ๊ธฐ์˜ˆ๋ณด` ยท `๋™๋„ค์˜ˆ๋ณด` | ๊ธฐ์ƒ์ฒญ (`1360000`) ยท `1360000/VilageFcstInfoService_2.0` | -| ๐ŸŒซ๏ธ **์—์–ด์ฝ”๋ฆฌ์•„ (2๊ฑด ํ•„์ˆ˜)** | [๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ](https://www.data.go.kr) | `๋Œ€๊ธฐ์˜ค์—ผ์ •๋ณด` + `์ธก์ •์†Œ์ •๋ณด` | ํ•œ๊ตญํ™˜๊ฒฝ๊ณต๋‹จ (`B552584`) ยท `B552584/ArpltnInforInqireSvc` + `B552584/MsrstnInfoInqireSvc` *(๋‘ ๋ฐ์ดํ„ฐ์…‹ ๊ฐ๊ฐ ํ™œ์šฉ์‹ ์ฒญ ํ•„์š”)* | -| ๐ŸŒซ๏ธ **์—์–ด์ฝ”๋ฆฌ์•„ (์˜ต์…˜ โ€” UV/๋Œ€๊ธฐ์ •์ฒด)** | [๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ](https://www.data.go.kr) | `์ƒํ™œ๊ธฐ์ƒ์ง€์ˆ˜` | ๊ธฐ์ƒ์ฒญ (`1360000`) ยท `1360000/LivingWthrIdxServiceV4` โš ๏ธ *(V5๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ์ง„ํ–‰ ์ค‘์ผ ์ˆ˜ ์žˆ์Œ โ€” [๊ด€๋ จ ์ด์Šˆ](#-์—์–ด์ฝ”๋ฆฌ์•„-์ƒํ™œ๊ธฐ์ƒ์ง€์ˆ˜-v4v5-์ฃผ์˜) ์ฐธ๊ณ )* | -| โ›ฝ **์œ ๊ฐ€** | [Opinet ์˜คํ”ผ๋„ท](https://www.opinet.co.kr/user/api/empApiInfo.do) | ๋ฌด๋ฃŒ ํšŒ์›๊ฐ€์ž… โ†’ API ์‹ ์ฒญ (๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ๊ณผ ๋ณ„๊ฐœ) | Opinet ยท `www.opinet.co.kr/api` | -| ๐Ÿซ **ํ•™๊ต** | [NEIS ๊ต์œก์ •๋ณด ๊ฐœ๋ฐฉ ํฌํ„ธ](https://open.neis.go.kr) | ํšŒ์›๊ฐ€์ž… โ†’ ์ธ์ฆํ‚ค ๋ฐœ๊ธ‰ (๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ๊ณผ ๋ณ„๊ฐœ) | NEIS ยท `open.neis.go.kr/hub` | -| ๐ŸšŒ **๋Œ€์ค‘๊ตํ†ต(์ง€ํ•˜์ฒ )** | [์„œ์šธ ์—ด๋ฆฐ๋ฐ์ดํ„ฐ๊ด‘์žฅ](https://data.seoul.go.kr) | `์ง€ํ•˜์ฒ  ์‹ค์‹œ๊ฐ„ ๋„์ฐฉ์ •๋ณด` | ์„œ์šธํŠน๋ณ„์‹œ ยท `swopenAPI.seoul.go.kr` | -| ๐ŸšŒ **๋Œ€์ค‘๊ตํ†ต(๋ฒ„์Šค)** | [๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ](https://www.data.go.kr) | `๋ฒ„์Šค๋„์ฐฉ์ •๋ณด` ๋˜๋Š” `TAGO` | ๊ตญํ† ๊ตํ†ต๋ถ€ ยท `apis.data.go.kr/...๋ฒ„์Šค๋„์ฐฉ์ •๋ณด` ๊ณ„์—ด | - -> โš ๏ธ **๊ฐ€์žฅ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์‹ค์ˆ˜** -> - **์žฌ๋‚œ๋ฌธ์ž ํ‚ค โ‰  ์•ฝ๊ตญ ํ‚ค.** ๋‘ ํฌํ„ธ(`safetydata.go.kr` vs `data.go.kr`)์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. -> - ๊ฐ™์€ `data.go.kr` ์•ˆ์—์„œ๋„ **๋ฐ์ดํ„ฐ์…‹๋งˆ๋‹ค ํ™œ์šฉ์‹ ์ฒญ์„ ๋”ฐ๋กœ** ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•ฝ๊ตญ ์‹ ์ฒญํ•œ ํ‚ค๋กœ ๊ธฐ์ƒํŠน๋ณด๊ฐ€ ์•ˆ ๋ฉ๋‹ˆ๋‹ค. -> - ์‹ ์ฒญ ์งํ›„์—๋Š” ํ‚ค๊ฐ€ ํ™œ์„ฑํ™”๋˜๊ธฐ๊นŒ์ง€ **1~2์‹œ๊ฐ„** ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํŠนํžˆ data.go.kr ์šด์˜๊ธฐ๊ด€ ํ‚ค). +> โš ๏ธ **์˜ต์…˜ โ€” ์ƒํ™œ๊ธฐ์ƒ์ง€์ˆ˜ (UVยท๋Œ€๊ธฐ์ •์ฒด)**: ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ถ”๊ฐ€๋กœ `์ƒํ™œ๊ธฐ์ƒ์ง€์ˆ˜` ๊ฒ€์ƒ‰ โ†’ ๊ธฐ์ƒ์ฒญ ๋ฐ์ดํ„ฐ์…‹ ํ™œ์šฉ์‹ ์ฒญ. ๋‹จ ์ฝ”๋“œ๋Š” V4 endpoint ํ˜ธ์ถœ์ด์ง€๋งŒ ํฌํ„ธ์€ V5๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋œ ์ƒํƒœ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค โ€” ์‹ค์ œ ๋™์ž‘ ๋ฏธ๊ฒ€์ฆ. ๋“ฑ๋ก ํ›„ HA ๋กœ๊ทธ(`LivingWthrIdx` ๊ฒ€์ƒ‰)๋กœ ํ™•์ธํ•˜์„ธ์š”. ๋ฏธ์ž‘๋™ ์‹œ issue ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. --- -### ๐Ÿ’Š ์•ฝ๊ตญ โ€” ๊ฐ€์žฅ ์ž์ฃผ ๋ฌป๋Š” ํ•ญ๋ชฉ - -์•ฝ๊ตญ ๋ฐ์ดํ„ฐ๋Š” **๊ตญ๋ฆฝ์ค‘์•™์˜๋ฃŒ์›(NMC)** ์ด ์ œ๊ณตํ•˜๋ฉฐ **๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ(data.go.kr)** ์—์„œ ๋ฐ›์Šต๋‹ˆ๋‹ค. +### โ›ฝ ์œ ๊ฐ€ (Opinet) -**๋‹จ๊ณ„๋ณ„ ์•ˆ๋‚ด:** +| ํ•ญ๋ชฉ | ๊ฐ’ | +|---|---| +| ๐ŸŒ ํฌํ„ธ | [๐Ÿ‘‰ Opinet ์˜คํ”ผ๋„ท API ์‹ ์ฒญ ํŽ˜์ด์ง€](https://www.opinet.co.kr/user/api/empApiInfo.do) | +| ๋ฐœ๊ธ‰ ์ ˆ์ฐจ | ๋ฌด๋ฃŒ ํšŒ์›๊ฐ€์ž… โ†’ API ์‹ ์ฒญ โ†’ ์ฆ‰์‹œ ๋ฐœ๊ธ‰ | +| ์ฝ”๋“œ ํ˜ธ์ถœ endpoint | `opinet.co.kr/api/avgAllPrice.do`, `lowTop10.do` | -1. **๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ ๊ฐ€์ž…** โ€” โ†’ ์šฐ์ธก ์ƒ๋‹จ ํšŒ์›๊ฐ€์ž… (์ด๋ฉ”์ผ/์นด์นด์˜ค/๋„ค์ด๋ฒ„ OAuth ๊ฐ€๋Šฅ) -2. **๋ฐ์ดํ„ฐ์…‹ ๊ฒ€์ƒ‰** โ€” ์ƒ๋‹จ ๊ฒ€์ƒ‰์ฐฝ์— `์ „๊ตญ ์•ฝ๊ตญ` ๋˜๋Š” `์•ฝ๊ตญ ์ •๋ณด` ์ž…๋ ฅ -3. **๊ฒฐ๊ณผ ์ค‘ ์„ ํƒ** โ€” ์šด์˜๊ธฐ๊ด€ **๊ตญ๋ฆฝ์ค‘์•™์˜๋ฃŒ์›**, ๋“ฑ๋ก๋ช… **"๊ตญ๋ฆฝ์ค‘์•™์˜๋ฃŒ์›_์ „๊ตญ ์•ฝ๊ตญ ์ •๋ณด ์กฐํšŒ ์„œ๋น„์Šค"** ํ•ญ๋ชฉ ์„ ํƒ *(์šด์˜๊ธฐ๊ด€ ์ฝ”๋“œ `B552657`)* -4. **ํ™œ์šฉ ์‹ ์ฒญ** ๋ฒ„ํŠผ ํด๋ฆญ โ†’ ํ™œ์šฉ ๋ชฉ์ ๋ž€์— ์งง๊ฒŒ ์ž…๋ ฅ (์˜ˆ: "Home Assistant ๊ฐ€์ •์šฉ ๋ชจ๋‹ˆํ„ฐ๋ง") -5. **๋งˆ์ดํŽ˜์ด์ง€ โ†’ ์˜คํ”ˆAPI โ†’ ์ธ์ฆํ‚ค ๋ฐœ๊ธ‰ํ˜„ํ™ฉ** ์—์„œ **์ผ๋ฐ˜ ์ธ์ฆํ‚ค(Decoding)** ๋ณต์‚ฌ -6. Home Assistant ์„ค์ • ํ™”๋ฉด์˜ ์•ฝ๊ตญ ํ•ญ๋ชฉ์— ๊ทธ๋Œ€๋กœ ๋ถ™์—ฌ๋„ฃ๊ธฐ +> ๐Ÿ’ก Opinet์€ ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ๊ณผ **๋ณ„๊ฐœ ํฌํ„ธ**์ž…๋‹ˆ๋‹ค. -> ๐Ÿ’ก **์ฝ”๋“œ ํ˜ธ์ถœ endpoint** *(์ฐธ๊ณ ์šฉ)*: `apis.data.go.kr/B552657/ErmctInsttInfoInqireService/getParmacyListInfoInqire`. ๋ฐ์ดํ„ฐ์…‹ ๋“ฑ๋ก๋ช…์€ ํฌํ„ธ ์ •์ฑ…์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ, ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด **์šด์˜๊ธฐ๊ด€ ์ฝ”๋“œ `B552657`** ๋กœ๋„ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. +--- -**์•ฝ๊ตญ API ๊ด€๋ จ ์ฃผ์˜์‚ฌํ•ญ:** +### ๐Ÿซ ํ•™๊ต (NEIS) -| ์ฆ์ƒ | ์›์ธ / ํ•ด๊ฒฐ | +| ํ•ญ๋ชฉ | ๊ฐ’ | |---|---| -| `401 Unauthorized` | ์„œ๋น„์Šคํ‚ค ์ž์ฒด๊ฐ€ ์ž˜๋ชป๋จ (์˜คํƒ€ยท๊ณต๋ฐฑ). ๋งˆ์ดํŽ˜์ด์ง€์—์„œ ๋‹ค์‹œ ๋ณต์‚ฌ | -| `403 Forbidden` ๋˜๋Š” `SERVICE_KEY_IS_NOT_REGISTERED_ERROR` | ํ‚ค๋Š” ๋งž์ง€๋งŒ **ํ•ด๋‹น ๋ฐ์ดํ„ฐ์…‹์— ํ™œ์šฉ ์‹ ์ฒญ์„ ์•ˆ ํ–ˆ์Œ.** "๋งˆ์ดํŽ˜์ด์ง€ โ†’ ํ™œ์šฉ์‹ ์ฒญ ํ˜„ํ™ฉ"์—์„œ *์Šน์ธ* ์ƒํƒœ์ธ์ง€ ํ™•์ธ | -| ์‹ ์ฒญ ์งํ›„ ์•ˆ ๋จ | ๋ฐ์ดํ„ฐ์…‹์ด ์šด์˜๊ธฐ๊ด€ ํ‚ค๋ผ **ํ™œ์„ฑํ™”์— 1~2์‹œ๊ฐ„** ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Œ | -| Encoding/Decoding ํ‚ค ๋‘˜ ๋‹ค ์ค˜์„œ ํ—ท๊ฐˆ๋ฆผ | ๋ณธ ํ†ตํ•ฉ์€ **๋‘˜ ๋‹ค ํ˜ธํ™˜** โ€” ์•„๋ฌด๊ฑฐ๋‚˜ ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค (URL ์ธ์ฝ”๋”ฉ์€ ์ž๋™ ์ฒ˜๋ฆฌ) | +| ๐ŸŒ ํฌํ„ธ | [๐Ÿ‘‰ NEIS ๊ต์œก์ •๋ณด ๊ฐœ๋ฐฉ ํฌํ„ธ](https://open.neis.go.kr) | +| ๋ฐœ๊ธ‰ ์ ˆ์ฐจ | ํšŒ์›๊ฐ€์ž… โ†’ ์ธ์ฆํ‚ค ์‹ ์ฒญ โ†’ ๋งˆ์ดํŽ˜์ด์ง€ "์‹ ์ฒญํ˜„ํ™ฉ" ์—์„œ ํ™•์ธ | +| ์ฝ”๋“œ ํ˜ธ์ถœ endpoint | `open.neis.go.kr/hub/...` | + +> ๐Ÿ’ก NEIS๋„ ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ๊ณผ **๋ณ„๊ฐœ ํฌํ„ธ**์ž…๋‹ˆ๋‹ค. ํ•™๊ต๋ช…์€ HA ์„ค์ •์—์„œ ์ž๋™ ๊ฒ€์ƒ‰๋ฉ๋‹ˆ๋‹ค (ํ•™๊ต๋ช…๋งŒ ์ž…๋ ฅํ•˜๋ฉด dropdown ํ‘œ์‹œ). --- -### ๐Ÿ“ข ์žฌ๋‚œ๋ฌธ์ž โ€” ๋ณ„๋„ ํฌํ„ธ (๊ฐ€์žฅ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ถ€๋ถ„) +### ๐ŸšŒ ๋Œ€์ค‘๊ตํ†ต โ€” ์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„ ํ‚ค -์žฌ๋‚œ๋ฌธ์ž๋งŒ์€ ์ผ๋ฐ˜ ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ์ด ์•„๋‹Œ **ํ–‰์ •์•ˆ์ „๋ถ€ ์•ˆ์ „๋ฐ์ดํ„ฐํฌํ„ธ**์—์„œ ๋ฐ›์Šต๋‹ˆ๋‹ค. +๋ณธ์ธ์ด ์“ธ ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ํ‚ค๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. -1. ์ ‘์† โ†’ ํšŒ์›๊ฐ€์ž… -2. ์ƒ๋‹จ ๊ฒ€์ƒ‰์—์„œ `์žฌ๋‚œ๋ฌธ์ž` ๊ฒ€์ƒ‰ โ†’ ๋ณธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” endpoint๋Š” **`safetydata.go.kr/V2/api/DSSP-IF-00247`** ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ ํ•ญ๋ชฉ ์ค‘ ์‹๋ณ„๋ฒˆํ˜ธ `DSSP-IF-00247` ๋˜๋Š” ๋™์ผ URL์ด ๋ช…์‹œ๋œ ๋ฐ์ดํ„ฐ์…‹์„ ์„ ํƒํ•˜์„ธ์š”. -3. **ํ™œ์šฉ์‹ ์ฒญ โ†’ ์ธ์ฆํ‚ค ๋ฐœ๊ธ‰** -4. ๋ฐœ๊ธ‰๋œ ํ‚ค๋ฅผ Home Assistant ์žฌ๋‚œ๋ฌธ์ž ํ•ญ๋ชฉ์— ์ž…๋ ฅ +| ์‹œ๋‚˜๋ฆฌ์˜ค | ํ•„์š”ํ•œ ํ‚ค | ๋ฐœ๊ธ‰์ฒ˜ | +|---|---|---| +| ์ง€ํ•˜์ฒ  ๋„์ฐฉ์ •๋ณด | ์„œ์šธ ์—ด๋ฆฐ๋ฐ์ดํ„ฐ๊ด‘์žฅ ํ‚ค | [๐Ÿ‘‰ data.seoul.go.kr](https://data.seoul.go.kr) โ†’ `์ง€ํ•˜์ฒ  ์‹ค์‹œ๊ฐ„ ๋„์ฐฉ์ •๋ณด` ์‹ ์ฒญ | +| ๋ฒ„์Šค ๋„์ฐฉ์ •๋ณด | **โŒ ๋ถˆํ•„์š”** | ์นด์นด์˜ค๋งต ๋น„๊ณต์‹ endpoint ์‚ฌ์šฉ. ์ •๋ฅ˜์žฅ ID๋งŒ ์ž…๋ ฅ | +| ํ™˜์Šน๊ฒฝ๋กœ ๊ฒ€์ƒ‰ (์˜ต์…˜) | ์„œ์šธ์‹œ ํ™˜์Šน๊ฒฝ๋กœ API ํ‚ค | [๐Ÿ‘‰ data.go.kr](https://www.data.go.kr/tcs/dss/selectDataSetList.do?searchKeyword=๋Œ€์ค‘๊ตํ†ตํ™˜์Šน๊ฒฝ๋กœ) โ†’ `๋Œ€์ค‘๊ตํ†ตํ™˜์Šน๊ฒฝ๋กœ` | -> ๐Ÿ’ก ์•ˆ์ „๋ฐ์ดํ„ฐํฌํ„ธ์€ ๊ฐ™์€ ์ •๋ถ€ ์‹œ์Šคํ…œ์ด์ง€๋งŒ **๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ๊ณผ ๊ณ„์ •ยทํ‚ค๊ฐ€ ๋ถ„๋ฆฌ**๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ `data.go.kr` ๊ณ„์ •์ด ์žˆ์–ด๋„ ๋ณ„๋„ ๊ฐ€์ž…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. +**์นด์นด์˜ค๋งต ์ •๋ฅ˜์žฅ ID ์ฐพ๋Š” ๋ฒ•** *(๋ฒ„์Šค ๋“ฑ๋ก ์‹œ)*: +[์นด์นด์˜ค๋งต](https://map.kakao.com) โ†’ ์ •๋ฅ˜์žฅ ๊ฒ€์ƒ‰ โ†’ ์ •๋ฅ˜์žฅ ํด๋ฆญ โ†’ URL `?busstopid=03171&...` โ†’ **`busstopid=` ๋’ค์˜ ๊ฐ’** ๋ณต์‚ฌ (์˜ˆ: `03171`, `BS09013700`). --- -### ๐ŸŒช๏ธ๐ŸŒโ›… ๊ธฐ์ƒ์ฒญ (ํŠน๋ณด/์ง€์ง„/๋‹จ๊ธฐ์˜ˆ๋ณด) โ€” ํ•œ ํ‚ค๋กœ OK - -๊ธฐ์ƒ์ฒญ API 3์ข…์€ **๋ชจ๋‘ ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ์—์„œ ๋ฐ›์ง€๋งŒ ๋ฐ์ดํ„ฐ์…‹์ด ๊ฐ๊ฐ ๋‹ค๋ฅด๋ฏ€๋กœ ํ™œ์šฉ์‹ ์ฒญ์„ 3๋ฒˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.** ์ธ์ฆํ‚ค ์ž์ฒด๋Š” *๋‚ด ๊ณ„์ • ํ•˜๋‚˜์— ๋ฐœ๊ธ‰๋œ ๊ฐ™์€ ํ‚ค*๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. - -| ์ฝ”๋“œ ํ˜ธ์ถœ endpoint (๊ฒ€์ฆ๋จ) | ๊ถŒ์žฅ ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ | -|---|---| -| `1360000/WthrWrnInfoService` (๊ธฐ์ƒํŠน๋ณด) | `๊ธฐ์ƒํŠน๋ณด` | -| `1360000/EqkInfoService` (์ง€์ง„์ •๋ณด) | `์ง€์ง„์ •๋ณด` | -| `1360000/VilageFcstInfoService_2.0` (๋‹จ๊ธฐ์˜ˆ๋ณด) | `๋‹จ๊ธฐ์˜ˆ๋ณด` | +## โš™๏ธ ๋“ฑ๋กยท์žฌ์„ค์ • ํ๋ฆ„ -- ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ์…‹ ํŽ˜์ด์ง€์—์„œ **ํ™œ์šฉ์‹ ์ฒญ** โ†’ ๋งˆ์ดํŽ˜์ด์ง€์—์„œ *์Šน์ธ* ํ™•์ธ -- Home Assistant ๊ฐ ํ•ญ๋ชฉ์— ๊ฐ™์€ ์ธ์ฆํ‚ค๋ฅผ ์ž…๋ ฅ -- ์šด์˜๊ธฐ๊ด€ ์ฝ”๋“œ `1360000` (๊ธฐ์ƒ์ฒญ) ์œผ๋กœ๋„ ์šด์˜๊ธฐ๊ด€ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. +### ์ƒˆ ํ•ญ๋ชฉ ๋“ฑ๋ก +์„ค์ • โ†’ ๊ธฐ๊ธฐ ๋ฐ ์„œ๋น„์Šค โ†’ **+ ํ†ตํ•ฉ ๊ตฌ์„ฑ์š”์†Œ ์ถ”๊ฐ€** โ†’ `ํ•œ๊ตญ ์ปดํฌ๋„ŒํŠธ ํ‚คํŠธ` ๊ฒ€์ƒ‰ โ†’ ์›ํ•˜๋Š” ์„œ๋น„์Šค ์„ ํƒ. ---- +> ํ•œ ํ†ตํ•ฉ์— 13๊ฐœ ์„œ๋น„์Šค๊ฐ€ ๋ฉ”๋‰ด๋กœ ๋“ค์–ด์žˆ์–ด, ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ์„œ๋น„์Šค๋งˆ๋‹ค ํ•œ ๋ฒˆ์”ฉ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. **๊ฐ™์€ ์„œ๋น„์Šค๋ฅผ ์—ฌ๋Ÿฌ ์ง€์—ญ์œผ๋กœ ์ค‘๋ณต ๋“ฑ๋ก**๋„ ๊ฐ€๋Šฅ (์˜ˆ: ์•ฝ๊ตญ์„ ์‹œํฅ์‹œยท์•ˆ์–‘์‹œยท๋ถ€๋ชจ๋‹˜ ๋Œ ์‹œ๊ตฐ๊ตฌ 3๋ฒˆ ๋“ฑ๋ก). -### ๐ŸŒซ๏ธ ์—์–ด์ฝ”๋ฆฌ์•„ โ€” ํ•„์ˆ˜ 2๊ฑด + ์˜ต์…˜ 1๊ฑด +### ๋“ฑ๋ก ํ›„ ๋ณ€๊ฒฝ (API ํ‚ค ๊ฐฑ์‹  / ์ง€์—ญ ์ถ”๊ฐ€ ๋“ฑ) +ํ•ด๋‹น ํ•ญ๋ชฉ ์˜† **"๊ตฌ์„ฑ"** ๋ฒ„ํŠผ โ†’ ์ž…๋ ฅ๊ฐ’ ํŽธ์ง‘. *(์‚ญ์ œยท์žฌ๋“ฑ๋ก ์—†์ด ๊ฐ€๋Šฅ. entity์™€ ์ž๋™ํ™” ์—ฐ๊ฒฐ ์œ ์ง€๋จ.)* -**ํ•„์ˆ˜ (๋‘˜ ๋‹ค ํ™œ์šฉ์‹ ์ฒญํ•ด์•ผ ๋™์ž‘):** -- ๊ฒ€์ƒ‰ `๋Œ€๊ธฐ์˜ค์—ผ์ •๋ณด` โ†’ **ํ•œ๊ตญํ™˜๊ฒฝ๊ณต๋‹จ_์—์–ด์ฝ”๋ฆฌ์•„_๋Œ€๊ธฐ์˜ค์—ผ์ •๋ณด** *(๋ฏธ์„ธ๋จผ์ง€ยทOโ‚ƒยทNOโ‚‚ ๋“ฑ ์‹ค์‹œ๊ฐ„ ์ˆ˜์น˜ + ์˜ˆ๋ณด)* -- ๊ฒ€์ƒ‰ `์ธก์ •์†Œ์ •๋ณด` โ†’ **ํ•œ๊ตญํ™˜๊ฒฝ๊ณต๋‹จ_์—์–ด์ฝ”๋ฆฌ์•„_์ธก์ •์†Œ์ •๋ณด** *(์‹œ๋„๋ณ„ ์ธก์ •์†Œ ๋ชฉ๋ก)* -- ๋‘ ๋ฐ์ดํ„ฐ์…‹์€ ์šด์˜๊ธฐ๊ด€(B552584)์ด ๊ฐ™์ง€๋งŒ ํ™œ์šฉ์‹ ์ฒญ์€ **๊ฐ๊ฐ** ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ธก์ •์†Œ์ •๋ณด ์‹ ์ฒญ์ด ๋น ์ง€๋ฉด config flow์—์„œ ์ธก์ •์†Œ ์„ ํƒ dropdown์ด ๋น„์–ด ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +### ์ž…๋ ฅ๊ฐ’ ์–ด๋””์„œ ๋ฐ›๋Š”๊ฐ€? -**์˜ต์…˜ (์ž์™ธ์„ ์ง€์ˆ˜ยท๋Œ€๊ธฐ์ •์ฒด์ง€์ˆ˜ sensor๋ฅผ ์“ฐ๊ณ  ์‹ถ์„ ๋•Œ๋งŒ):** -- ๊ฒ€์ƒ‰ `์ƒํ™œ๊ธฐ์ƒ์ง€์ˆ˜` โ†’ ์šด์˜๊ธฐ๊ด€ **๊ธฐ์ƒ์ฒญ** ๋ฐ์ดํ„ฐ์…‹ ํ™œ์šฉ์‹ ์ฒญ -- โš ๏ธ **V4/V5 ์ฃผ์˜** โ€” ๋ณธ ์ปดํฌ๋„ŒํŠธ ์ฝ”๋“œ๋Š” endpoint `LivingWthrIdxServiceV4` ๋ฅผ ํ˜ธ์ถœํ•˜์ง€๋งŒ, 2026๋…„ 5์›” ๊ธฐ์ค€ ํฌํ„ธ์— ๋ณด์ด๋Š” ๋ฐ์ดํ„ฐ์…‹์€ ํ‘œ์‹œ๋ช… "(3.0)" ์ธ๋ฐ ์‹ค์ œ endpoint๋Š” V5 (`LivingWthrIdxServiceV5/getUVIdxV5`)๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋œ ์ƒํƒœ๋กœ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ ์ฝ”๋“œ๊ฐ€ V4๋ฅผ ๋ถ€๋ฅด๋ฉด ์ •์ƒ ์‘๋‹ต์„ ๋ฐ›์ง€ ๋ชปํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋‹ˆ, ์‹ค์ œ ์ž‘๋™ ์—ฌ๋ถ€๋Š” HA ๋กœ๊ทธ(`์„ค์ • โ†’ ์‹œ์Šคํ…œ โ†’ ๋กœ๊ทธ` ์—์„œ `LivingWthrIdx` ๊ฒ€์ƒ‰)๋กœ ํ™•์ธํ•˜์„ธ์š”. ์ด ๊ธฐ๋Šฅ์„ ์•ˆ ์“ฐ๋ฉด ์‹ ์ฒญ ์ž์ฒด๊ฐ€ ๋ถˆํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. +| ์„œ๋น„์Šค | ์–ด๋””์„œ ๋ฐ›๋Š”๊ฐ€ | +|---|---| +| โšก **KEPCO** | ํ•œ์ „ ํ™ˆํŽ˜์ด์ง€ ID/๋น„๋ฐ€๋ฒˆํ˜ธ (๋ณธ์ธ ๊ณ„์ •, 2์ฐจ ์ธ์ฆ ๋ฏธ์ง€์›) | +| ๐Ÿ’ง **์•„๋ฆฌ์ˆ˜** | ์ข…์ด ๊ณ ์ง€์„œ ๋˜๋Š” [์•„๋ฆฌ์ˆ˜ ์‚ฌ์ด๋ฒ„ ๊ณ ๊ฐ์„ผํ„ฐ](https://i-arisu.seoul.go.kr) โ†’ ์š”๊ธˆ์กฐํšŒ ์ขŒ์ธก ์ˆ˜์šฉ๊ฐ€๋ฒˆํ˜ธ + ๊ณ ๊ฐ๋ช… | +| ๐Ÿ  **๊ฐ€์Šค์•ฑ** | ์‚ฌ์šฉ๊ณ„์•ฝ๋ฒˆํ˜ธ๋Š” ๊ฐ€์Šค์•ฑ ๋ชจ๋ฐ”์ผ ์•ฑ โ†’ ๋‚ด ์ •๋ณด. ํ† ํฐยทํšŒ์›ID๋Š” mitmproxy ๋“ฑ์œผ๋กœ ๋ชจ๋ฐ”์ผ ์•ฑ HTTPS ์š”์ฒญ์˜ `X-Token`/`X-Member` ํ—ค๋” ์ถ”์ถœ (โš ๏ธ ๊ณ ๊ธ‰ ์‚ฌ์šฉ์ž์šฉ) | +| ๐ŸŒ **์ง€์ง„ ์ขŒํ‘œ** | ๊ธฐ๋ณธ๊ฐ’์€ ์„œ์šธ์‹œ์ฒญ (`37.5665, 126.978`). **๋ณธ์ธ ์ง‘ ์ขŒํ‘œ๋กœ ๊ผญ ๋ณ€๊ฒฝ.** ๊ธฐ๋ณธ ๋ฐ˜๊ฒฝ 200km / ์ตœ์†Œ ๊ทœ๋ชจ 3.0 | --- -### โ›ฝ ์œ ๊ฐ€ (Opinet) ยท ๐Ÿซ ํ•™๊ต (NEIS) ยท ๐ŸšŒ ๋Œ€์ค‘๊ตํ†ต +## ๐ŸŽ ๋“ฑ๋กํ•˜๋ฉด ๋งŒ๋“ค์–ด์ง€๋Š” entity -์ด ์…‹์€ ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ์ด ์•„๋‹Œ **๊ฐ ์šด์˜๊ธฐ๊ด€ ์ž์ฒด ํฌํ„ธ**์—์„œ ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ž… โ†’ ์‹ ์ฒญ โ†’ ์ฆ‰์‹œ ๋ฐœ๊ธ‰(๋ณดํ†ต) ํ๋ฆ„์ด๋ฉฐ, ๊ฐ€์ž… ์™ธ ๋ณ„๋‹ค๋ฅธ ์ ˆ์ฐจ ์—†์ด ๋ฌด๋ฃŒ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +> entity_id๋Š” ํ•œ๊ตญ์–ด โ†’ ๋กœ๋งˆ์ž ์Šฌ๋Ÿฌ๊ทธ ์ž๋™ ๋ณ€ํ™˜ (์˜ˆ: `์•ฝ๊ตญ - ์‹œํฅ์‹œ` + `์šด์˜ ์•ฝ๊ตญ ์ˆ˜` โ†’ `sensor.yaggug_siheungsi_unyeong_yaggug_su`). ์ •ํ™•ํ•œ ID๋Š” **๊ฐœ๋ฐœ์ž ๋„๊ตฌ โ†’ ์ƒํƒœ** ์—์„œ ์นœํ™” ์ด๋ฆ„์œผ๋กœ ๊ฒ€์ƒ‰ํ•ด ํ™•์ธ. -- **Opinet** โ€” -- **NEIS** โ€” (ํšŒ์›๊ฐ€์ž… ํ›„ "์‹ ์ฒญํ˜„ํ™ฉ โ†’ ์ธ์ฆํ‚ค ๋ฐœ๊ธ‰") -- **์„œ์šธ ์ง€ํ•˜์ฒ ** โ€” ("์‹ค์‹œ๊ฐ„ ์ง€ํ•˜์ฒ  ๋„์ฐฉ์ •๋ณด" ์‹ ์ฒญ) -- **๊ตญํ† ๋ถ€ ๋ฒ„์Šค** โ€” ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ์—์„œ `TAGO ๋ฒ„์Šค๋„์ฐฉ์ •๋ณด` ํ™œ์šฉ์‹ ์ฒญ -- **์นด์นด์˜ค๋งต ์ •๋ฅ˜์žฅ ID** *(๋ฒ„์Šค ๋“ฑ๋ก ์‹œ)* โ€” [์นด์นด์˜ค๋งต](https://map.kakao.com) ์—์„œ ์ •๋ฅ˜์žฅ์„ ๊ฒ€์ƒ‰ยทํด๋ฆญํ•˜๋ฉด URL์ด `https://map.kakao.com/?busstopid=03171&...` ํ˜•ํƒœ๋กœ ๋ฐ”๋€๋‹ˆ๋‹ค. **`busstopid=` ๋’ค์˜ ๊ฐ’** ์„ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด ์ž…๋ ฅํ•˜์„ธ์š” (์˜ˆ: `03171`, `BS09013700`, `223000122`). +| ์„œ๋น„์Šค | ์นœํ™” ์ด๋ฆ„ (sensor ๋“ฑ) | ์ฃผ์š” attribute | +|---|---|---| +| ๐Ÿ’Š ์•ฝ๊ตญ | `์šด์˜ ์•ฝ๊ตญ ์ˆ˜` | `pharmacies[]` (์ตœ๋Œ€ 50: nameยทaddressยทphoneยทlatยทlonยทtoday_hoursยท`open_now`ยทduty_time), `total`, `shown`, `open_now_count` | +| ๐Ÿšจ ์•ˆ์ „์•Œ๋ฆผ | `์ตœ์‹  ์•ˆ์ „์•Œ๋ฆผ`, `์•ˆ์ „์•Œ๋ฆผ ์ˆ˜`, `์˜ค๋Š˜ ์•ˆ์ „์•Œ๋ฆผ ์—ฌ๋ถ€` (binary), `์•ˆ์ „์•Œ๋ฆผ ์ด๋ฒคํŠธ` (event) | `latest`, `alerts[]`, `count` | +| ๐Ÿ“ข ์žฌ๋‚œ๋ฌธ์ž | `์ตœ์‹  ์žฌ๋‚œ๋ฌธ์ž`, `์žฌ๋‚œ๋ฌธ์ž ์ˆ˜`, `์žฌ๋‚œ๋ฌธ์ž ์ด๋ฒคํŠธ` (event) | `level`, `area`, `disaster_type` | +| ๐ŸŒช๏ธ ๊ธฐ์ƒํŠน๋ณด | `ํ˜ธ์šฐ ํŠน๋ณด`/`๊ฐ•ํ’ ํŠน๋ณด`/`ํ•œํŒŒ ํŠน๋ณด`/... (event 12์ข…) | state: `advisory`/`warning`/`pre_*`/`cancelled`/`none`, `start_time`, `end_time` | +| ๐ŸŒ ์ง€์ง„ | `์ง€์ง„ ๊ฒฝ๋ณด` (event) | `magnitude`, `location`, `distance_km`, `datetime` | +| โ›… ๋™๋„ค์˜ˆ๋ณด | (weather ์—”ํ‹ฐํ‹ฐ 1๊ฐœ โ€” HA ๊ธฐ๋ณธ Weather ์นด๋“œ ํ˜ธํ™˜) | hourly/daily forecast ์„œ๋น„์Šค ์ง€์› | +| ๐ŸŒซ๏ธ ์—์–ด์ฝ”๋ฆฌ์•„ | `PM10 ๋ฏธ์„ธ๋จผ์ง€`, `PM2.5 ์ดˆ๋ฏธ์„ธ๋จผ์ง€`, `Oโ‚ƒ ์˜ค์กด`, `NOโ‚‚ ์ด์‚ฐํ™”์งˆ์†Œ`, `SOโ‚‚ ์•„ํ™ฉ์‚ฐ๊ฐ€์Šค`, `CO ์ผ์‚ฐํ™”ํƒ„์†Œ`, `ํ†ตํ•ฉ๋Œ€๊ธฐ์งˆ์ง€์ˆ˜` + binary `๋Œ€๊ธฐ์งˆ ๊ฒฝ๋ณด` + event + calendar `๋Œ€๊ธฐ์งˆ ์˜ˆ๋ณด` | ๋“ฑ๊ธ‰(Grade) ๋™๋ฐ˜ | +| โšก KEPCO | `ํ˜„์žฌ ์‚ฌ์šฉ๋Ÿ‰` (kWh), `์ง€๋‚œ๋‹ฌ ์š”๊ธˆ` (์›), `์˜ˆ์ƒ ์š”๊ธˆ` (์›), `๊ณ ๊ฐ๋ฒˆํ˜ธ`, `์ „๋ ฅ๊ตฌ๋ถ„` | โ€” | +| ๐Ÿ’ง ์•„๋ฆฌ์ˆ˜ | `์ˆ˜๋„ ์š”๊ธˆ` (์›), `์‚ฌ์šฉ๋Ÿ‰` (ใŽฅ), `์ฒญ๊ตฌ์›”` | `billing_month`, `customer_info`, `arrears_info` | +| ๐Ÿ  ๊ฐ€์Šค์•ฑ | `์ฒญ๊ตฌ ์ œ๋ชฉ`, `์ด ์š”๊ธˆ` (์›) | โ€” | +| โ›ฝ ์œ ๊ฐ€ | `์ „๊ตญ ํ‰๊ท ๊ฐ€`, `์ตœ์ €๊ฐ€` (๋“ฑ๋กํ•œ ์‹œ๋„ร—์œ ์ข… ์กฐํ•ฉ๋งˆ๋‹ค) | `ranking[]` (Top 5 ์ฃผ์œ ์†Œ ์ด๋ฆ„ยท๊ฐ€๊ฒฉยท์ฃผ์†Œ) | +| ๐Ÿซ ํ•™๊ต | `๊ธ‰์‹`, `ํ•™๊ต ์ •๋ณด` + calendar ํ•™์‚ฌ์ผ์ •/์‹œ๊ฐ„ํ‘œ | ๊ธ‰์‹: `menu`, `calorie`, `allergy_codes` | +| ๐ŸšŒ ๋Œ€์ค‘๊ตํ†ต | `<์—ญ/์ •๋ฅ˜์žฅ> ... ๋„์ฐฉ` (TIMESTAMP โ€” HA๊ฐ€ "N๋ถ„ ํ›„"๋กœ ์ž๋™ ํ‘œ์‹œ) | โ€” | --- -## ๐ŸŽจ ๋Œ€์‹œ๋ณด๋“œ ์˜ˆ์ œ - -๊ฐ sensor๊ฐ€ ๋…ธ์ถœํ•˜๋Š” attribute๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๊น”๋”ํ•œ ์นด๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ๋Š” ๋ชจ๋‘ **์ถ”๊ฐ€ HACS ์นด๋“œ ์—†์ด** Home Assistant ๊ธฐ๋ณธ ์นด๋“œ(`tile`, `markdown`, `entities`)๋งŒ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. +## ๐ŸŽจ ๋Œ€์‹œ๋ณด๋“œ ์˜ˆ์ œ โ€” ์•ฝ๊ตญ ๊ฐ€๊นŒ์šด ์ˆœ + ์˜์—…์ค‘ ํ•„ํ„ฐ + ์นด์นด์˜ค๋งต ๊ธธ์ฐพ๊ธฐ -### ๐Ÿ’Š ์•ฝ๊ตญ โ€” ๊ฐ€๊นŒ์šด ์ˆœ + ์˜์—…์ค‘ ํ•„ํ„ฐ + ์นด์นด์˜ค๋งต ๊ธธ์ฐพ๊ธฐ +๊ฒ€์ƒ‰ยทํ•„ํ„ฐ ํ—ฌํผ ๋‘ ๊ฐœ ๋จผ์ €: +- **์„ค์ • โ†’ ํ—ฌํผ โ†’ ํ…์ŠคํŠธ**: `input_text.yaggug_geomsaeg` ("์•ฝ๊ตญ ๊ฒ€์ƒ‰") +- **์„ค์ • โ†’ ํ—ฌํผ โ†’ ํ† ๊ธ€**: `input_boolean.yaggug_yeongeobjungman` ("์•ฝ๊ตญ ์˜์—…์ค‘๋งŒ") -์•ฝ๊ตญ ์นœํ™” ์ด๋ฆ„ **"์šด์˜ ์•ฝ๊ตญ ์ˆ˜"** sensor์˜ `pharmacies` attribute๋ฅผ ํ™œ์šฉํ•œ ์นด๋“œ์ž…๋‹ˆ๋‹ค. (`entity_id`๋Š” HA๊ฐ€ ์ž๋™ ์ƒ์„ฑํ•œ ์Šฌ๋Ÿฌ๊ทธ โ€” ์˜ˆ: ์‹œํฅ์‹œ๋ฉด `sensor.yaggug_siheungsi_unyeong_yaggug_su`. ๋ณธ์ธ ์ง€์—ญ entity_id๋Š” **๊ฐœ๋ฐœ์ž ๋„๊ตฌ โ†’ ์ƒํƒœ** ์—์„œ `์šด์˜ ์•ฝ๊ตญ ์ˆ˜` ๊ฒ€์ƒ‰ ํ›„ ํ™•์ธํ•˜์„ธ์š”.) ๊ฒ€์ƒ‰ยทํ•„ํ„ฐ๋ฅผ ์œ„ํ•ด ํ—ฌํผ ๋‘ ๊ฐœ๋ฅผ ๋จผ์ € ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”: - -- **์„ค์ • โ†’ ํ—ฌํผ โ†’ ํ…์ŠคํŠธ** : `input_text.yaggug_geomsaeg` (์ด๋ฆ„: "์•ฝ๊ตญ ๊ฒ€์ƒ‰") -- **์„ค์ • โ†’ ํ—ฌํผ โ†’ ํ† ๊ธ€** : `input_boolean.yaggug_yeongeobjungman` (์ด๋ฆ„: "์•ฝ๊ตญ ์˜์—…์ค‘๋งŒ") - -๋Œ€์‹œ๋ณด๋“œ YAML(์„น์…˜ ๋˜๋Š” vertical-stack์— ํ†ต์งธ๋กœ ๋ถ™์—ฌ๋„ฃ๊ธฐ): +๋Œ€์‹œ๋ณด๋“œ YAML *(์„น์…˜/vertical-stack์— ํ†ต์งธ๋กœ ๋ถ™์—ฌ๋„ฃ๊ธฐ. ๋ณธ์ธ ์•ฝ๊ตญ entity_id๋กœ ๋ณ€๊ฒฝ)*: ```yaml type: vertical-stack @@ -509,7 +234,7 @@ cards: - type: horizontal-stack cards: - type: tile - entity: sensor.yaggug_siheungsi_unyeong_yaggug_su # ๋ณธ์ธ entity_id ๋กœ ๋ณ€๊ฒฝ + entity: sensor.yaggug_siheungsi_unyeong_yaggug_su # ๋ณธ์ธ entity_id name: ์ „์ฒด ์•ฝ๊ตญ icon: mdi:pharmacy-marker color: green @@ -532,13 +257,11 @@ cards: - type: markdown title: ์•ฝ๊ตญ ๋ชฉ๋ก (๊ฐ€๊นŒ์šด ์ˆœ) content: | - {# ์œ„์น˜ ๊ธฐ์ค€ entity โ€” zone.home / person.xxx / device_tracker.xxx ๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ #} {% set tracker = 'zone.home' %} {% set sensor_id = 'sensor.yaggug_siheungsi_unyeong_yaggug_su' %} {% set my_lat = state_attr(tracker, 'latitude') | float(0) %} {% set my_lon = state_attr(tracker, 'longitude') | float(0) %} {% set ph = state_attr(sensor_id, 'pharmacies') or [] %} - {# input_text ์˜ ๋นˆ ์ƒํƒœ๊ฐ€ 'unknown' ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด ์ •๊ทœํ™” #} {% set raw_query = states('input_text.yaggug_geomsaeg') | default('', true) %} {% set query = '' if raw_query in ['unknown', 'unavailable', 'none', None] else raw_query | lower | trim %} {% set open_only = is_state('input_boolean.yaggug_yeongeobjungman', 'on') %} @@ -565,136 +288,78 @@ cards: {% endfor %} ``` -**ํŒ:** -- ์œ„์น˜ ๊ธฐ์ค€์„ ํฐ ๋”ฐ๋ผ๊ฐ€๊ฒŒ ํ•˜๋ ค๋ฉด `tracker = 'zone.home'`์„ `tracker = 'person.<๋ณธ์ธ>'` ๋˜๋Š” `tracker = 'device_tracker.<ํฐ>'`๋กœ ๋ณ€๊ฒฝ. -- ์นด์นด์˜ค๋งต ๋”ฅ๋งํฌ๋Š” PC/๋ชจ๋ฐ”์ผ ๋ชจ๋‘ ์ž‘๋™, API ํ‚ค ๋ถˆํ•„์š”. -- `open_now`๋Š” sensor ๊ฐฑ์‹ ๊ณผ ๋ณ„๊ฐœ๋กœ markdown์ด ๋ Œ๋”๋  ๋•Œ๋งˆ๋‹ค ์žฌ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค (๋ถ„ ๋‹จ์œ„๋Š” ์•„๋‹ˆ์ง€๋งŒ ์‹œ๊ฐ„ ๋‹จ์œ„๋กœ๋Š” ์ถฉ๋ถ„). - -### ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ sensor attribute ์š”์•ฝ - -๊ฐ sensor์˜ **friendly name** ๊ธฐ์ค€์œผ๋กœ ์ •๋ฆฌํ•œ ํ‘œ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ `entity_id`๋Š” ํ•œ๊ธ€์ด ๋กœ๋งˆ์ž๋กœ ์Šฌ๋Ÿฌ๊ทธํ™”๋œ ํ˜•ํƒœ์ด๋ฏ€๋กœ **๊ฐœ๋ฐœ์ž ๋„๊ตฌ โ†’ ์ƒํƒœ** ์—์„œ ์นœํ™” ์ด๋ฆ„์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋ฉด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -| ํ†ตํ•ฉ | ์นœํ™” ์ด๋ฆ„ | ์ฃผ์š” attribute | -|---|---|---| -| ์•ฝ๊ตญ | `์šด์˜ ์•ฝ๊ตญ ์ˆ˜` | `pharmacies[]` (`name`/`address`/`phone`/`lat`/`lon`/`duty_time`/`today_hours`/`open_now`), `total`, `shown`, `open_now_count` | -| ๊ธฐ์ƒํŠน๋ณด | `<ํ˜ธ์šฐ/๊ฐ•ํ’/ํ•œํŒŒ/ํญ์—ผ/...> ํŠน๋ณด` (event) | `warning_type`, `area`, `start_time`, `end_time` (state = `advisory`/`warning`/`pre_*`/`cancelled`/`none`) | -| ์—์–ด์ฝ”๋ฆฌ์•„ | `PM10 ๋ฏธ์„ธ๋จผ์ง€`, `PM2.5 ์ดˆ๋ฏธ์„ธ๋จผ์ง€`, `Oโ‚ƒ ์˜ค์กด`, `NOโ‚‚ ์ด์‚ฐํ™”์งˆ์†Œ`, `SOโ‚‚ ์•„ํ™ฉ์‚ฐ๊ฐ€์Šค`, `CO ์ผ์‚ฐํ™”ํƒ„์†Œ`, `ํ†ตํ•ฉ๋Œ€๊ธฐ์งˆ์ง€์ˆ˜` | ๋“ฑ๊ธ‰(`Grade`) attribute ๋™๋ฐ˜. ์˜ต์…˜ ํ‚ค ์ž…๋ ฅ ์‹œ `์ž์™ธ์„ ์ง€์ˆ˜`, `๋Œ€๊ธฐ์ •์ฒด์ง€์ˆ˜` ์ถ”๊ฐ€ | -| ๊ธฐ์ƒ์ฒญ | (weather ์—”ํ‹ฐํ‹ฐ) | hourly/daily forecast ์„œ๋น„์Šค, ์ฒด๊ฐ์˜จ๋„ยท์ด์Šฌ์ ยท์Šต๋„ | -| ์œ ๊ฐ€ | `์ „๊ตญ ํ‰๊ท ๊ฐ€`, `์ตœ์ €๊ฐ€` | ์ตœ์ €๊ฐ€: `station_name`, `address`, `ranking[]` (Top 5) | -| ํ•™๊ต | `๊ธ‰์‹`, `ํ•™๊ต ์ •๋ณด` + `calendar.*` | ๊ธ‰์‹: `menu`, `calorie`, `allergy_codes`. ํ•™๊ต ์ •๋ณด: ํ•™๋…„ยท๋ฐ˜ยท์ฃผ์†Œยท์ „ํ™” | -| ์žฌ๋‚œ๋ฌธ์ž | `์ตœ์‹  ์žฌ๋‚œ๋ฌธ์ž`, `์žฌ๋‚œ๋ฌธ์ž ์ˆ˜`, event `์žฌ๋‚œ๋ฌธ์ž ์ด๋ฒคํŠธ` | `level`, `area`, `disaster_type` | -| ์•ˆ์ „์•Œ๋ฆผ | `์ตœ์‹  ์•ˆ์ „์•Œ๋ฆผ`, `์•ˆ์ „์•Œ๋ฆผ ์ˆ˜` + binary + event | `latest`, `alerts[]`, `count` | -| ์ง€์ง„ | event `์ง€์ง„ ๊ฒฝ๋ณด` | event ๋ฐœ์ƒ ์‹œ `magnitude`, `location`, `distance_km`, `datetime` | -| ๋Œ€์ค‘๊ตํ†ต | `<์—ญ/์ •๋ฅ˜์žฅ> <ํ˜ธ์„ /๋…ธ์„ > ... ๋„์ฐฉ` | TIMESTAMP โ€” HA๊ฐ€ ์ž๋™์œผ๋กœ "N๋ถ„ ํ›„"๋กœ ํ‘œ์‹œ | -| KEPCO | `ํ˜„์žฌ ์‚ฌ์šฉ๋Ÿ‰`, `์ง€๋‚œ๋‹ฌ ์š”๊ธˆ`, `์˜ˆ์ƒ ์š”๊ธˆ`, `๊ณ ๊ฐ๋ฒˆํ˜ธ`, `์ „๋ ฅ๊ตฌ๋ถ„` | โ€” | -| ์•„๋ฆฌ์ˆ˜ | `์ˆ˜๋„ ์š”๊ธˆ`, `์‚ฌ์šฉ๋Ÿ‰`, `์ฒญ๊ตฌ์›”` | ์ˆ˜๋„ ์š”๊ธˆ: `billing_month`, `customer_info`, `arrears_info` | -| ๊ฐ€์Šค์•ฑ | `์ฒญ๊ตฌ ์ œ๋ชฉ`, `์ด ์š”๊ธˆ` | โ€” | +> ๐Ÿ’ก ์œ„์น˜ ๊ธฐ์ค€์„ ํฐ ๋”ฐ๋ผ๊ฐ€๊ฒŒ ํ•˜๋ ค๋ฉด `tracker = 'zone.home'`์„ `person.<๋ณธ์ธ>` ๋˜๋Š” `device_tracker.<ํฐ>` ์œผ๋กœ ๋ณ€๊ฒฝ. --- -## ๐Ÿ”„ ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ +## ๐Ÿค– ์ž์—ฐ์–ด๋กœ ๋ฌป๊ธฐ (LLM ์˜ต์…˜) -| ์นดํ…Œ๊ณ ๋ฆฌ | ์„œ๋น„์Šค | ์ฃผ๊ธฐ | ๋น„๊ณ  | -|---|---|---|---| -| ์œ ํ‹ธ๋ฆฌํ‹ฐ | ํ•œ์ „ (KEPCO) | 5๋ถ„ | ๋กœ๊ทธ์ธ ์„ธ์…˜ ๊ด€๋ฆฌ | -| ์œ ํ‹ธ๋ฆฌํ‹ฐ | ์•„๋ฆฌ์ˆ˜ | 1์‹œ๊ฐ„ | ์š”๊ธˆยท์‚ฌ์šฉ๋Ÿ‰ | -| ์œ ํ‹ธ๋ฆฌํ‹ฐ | ๊ฐ€์Šค์•ฑ | 20๋ถ„ | ํ† ํฐ ๊ฐฑ์‹  | -| ์•ˆ์ „ยท์žฌ๋‚œ | ์žฌ๋‚œ๋ฌธ์ž | 5๋ถ„ | ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ | -| ์•ˆ์ „ยท์žฌ๋‚œ | ์•ˆ์ „์•Œ๋ฆผ | 5๋ถ„ | ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ | -| ์•ˆ์ „ยท์žฌ๋‚œ | ๊ธฐ์ƒํŠน๋ณด | 15๋ถ„ | event ์—”ํ‹ฐํ‹ฐ | -| ์•ˆ์ „ยท์žฌ๋‚œ | ์ง€์ง„ | 10๋ถ„ | event ์—”ํ‹ฐํ‹ฐ | -| ํ™˜๊ฒฝยท๋‚ ์”จ | ๊ธฐ์ƒ์ฒญ ๋™๋„ค์˜ˆ๋ณด | 30๋ถ„ | weather ์—”ํ‹ฐํ‹ฐ | -| ํ™˜๊ฒฝยท๋‚ ์”จ | ์—์–ด์ฝ”๋ฆฌ์•„ | 30๋ถ„ | ์‹œ๊ณ„์—ด | -| ์ƒํ™œ | ์•ฝ๊ตญ | 1์‹œ๊ฐ„ | open_now๋Š” ๋งค ๋ Œ๋” ์‹œ ์žฌ๊ณ„์‚ฐ | -| ์ƒํ™œ | ์œ ๊ฐ€ | 1์‹œ๊ฐ„ | Opinet | -| ์ƒํ™œ | ํ•™๊ต | 6์‹œ๊ฐ„ | ์ผ์ž๋ณ„ ๋ณ€ํ™” ๊ฑฐ์˜ ์—†์Œ | -| ์ƒํ™œ | ๋Œ€์ค‘๊ตํ†ต โ€” ์ง€ํ•˜์ฒ  | 2๋ถ„ | ์‹ค์‹œ๊ฐ„ ๋„์ฐฉ | -| ์ƒํ™œ | ๋Œ€์ค‘๊ตํ†ต โ€” ๋ฒ„์Šค | 1๋ถ„ | ์‹ค์‹œ๊ฐ„ ๋„์ฐฉ | +HA์˜ **Assist + LLM ํ†ตํ•ฉ** (OpenAI / Google / Ollama ๋“ฑ)์— ๋ณธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋…ธ์ถœํ•˜๋ฉด ํ•œ๊ตญ์–ด๋กœ ์ง์ ‘ ๋ฌผ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ---- - -## ๐Ÿ“‹ ์š”๊ตฌ์‚ฌํ•ญ +| ์งˆ๋ฌธ | ๋งค์นญ ์„œ๋น„์Šค | +|---|---| +| "์ง€๊ธˆ ์˜์—…์ค‘์ธ ๊ฐ€๊นŒ์šด ์•ฝ๊ตญ ์•Œ๋ ค์ค˜" | ๐Ÿ’Š ์•ฝ๊ตญ | +| "์˜ค๋Š˜ ๋ฏธ์„ธ๋จผ์ง€ ์–ด๋•Œ?" | ๐ŸŒซ๏ธ ์—์–ด์ฝ”๋ฆฌ์•„ | +| "๋‚ด์ผ ๋น„ ์™€?" | โ›… ๊ธฐ์ƒ์ฒญ | +| "์ตœ๊ทผ ์žฌ๋‚œ๋ฌธ์ž ๋ญ ์žˆ์–ด?" | ๐Ÿ“ข ์žฌ๋‚œ๋ฌธ์ž | +| "์˜ค๋Š˜ ๊ธ‰์‹ ๋ญ์•ผ?" | ๐Ÿซ ํ•™๊ต | +| "๋‹ค์Œ ๋ฒ„์Šค ์–ธ์ œ ์™€?" | ๐ŸšŒ ๋Œ€์ค‘๊ตํ†ต | -- **Home Assistant** 2023.1.0 ์ด์ƒ (hacs.json ๋ช…์‹œ) -- **Python** 3.11 ์ด์ƒ (HA ์ž์ฒด ์š”๊ตฌ์‚ฌํ•ญ) -- **์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ** (๊ฐ ์„œ๋น„์Šค API ์ ‘๊ทผ) -- ์ž๋™ ์„ค์น˜๋˜๋Š” Python ํŒจํ‚ค์ง€: `curl_cffi>=0.7.0`, `beautifulsoup4>=4.12.0` (manifest.json ์ •์˜) +LLM์— ๋…ธ์ถœ ์•ˆ ํ•ด๋„ ์ผ๋ฐ˜ sensor/event/weather ์—”ํ‹ฐํ‹ฐ๋กœ ์ •์ƒ ๋™์ž‘. ์ถ”๊ฐ€ ์„ค์ • ๋ถˆํ•„์š”. --- -## โ“ ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ (FAQ) +## โ“ FAQ
-Q. 13๊ฐ€์ง€ ์„œ๋น„์Šค๋ฅผ ์ „๋ถ€ ๋“ฑ๋กํ•ด์•ผ ํ•˜๋‚˜์š”? - -์•„๋‹ˆ์š”. **์›ํ•˜๋Š” ๊ฒƒ๋งŒ ๋“ฑ๋ก**ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํ†ตํ•ฉ ์ถ”๊ฐ€ ํ™”๋ฉด์—์„œ ๋งค๋ฒˆ 1๊ฐœ ์„œ๋น„์Šค๋ฅผ ๊ณ ๋ฅด๋Š” ๋ฐฉ์‹์ด๋ฏ€๋กœ, ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ๋Š˜๋ ค๊ฐ€์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ „ํ˜€ ๋“ฑ๋ก ์•ˆ ํ•œ ์„œ๋น„์Šค๋Š” ์–ด๋–ค entity๋„ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๋ฆฌ์†Œ์Šค๋„ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. +13๊ฐ€์ง€๋ฅผ ์ „๋ถ€ ๋“ฑ๋กํ•ด์•ผ ํ•˜๋‚˜์š”? +์•„๋‹ˆ์š”. ์›ํ•˜๋Š” ๊ฒƒ๋งŒ ๋“ฑ๋กํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋“ฑ๋ก ์•ˆ ํ•œ ์„œ๋น„์Šค๋Š” entityยท๋ฆฌ์†Œ์Šค๋ฅผ ์ „ํ˜€ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
-Q. ์‚ฌ์šฉ๋ฃŒ๊ฐ€ ๋“œ๋‚˜์š”? ์œ ๋ฃŒ API๊ฐ€ ์žˆ๋‚˜์š”? - -**์ „๋ถ€ ๋ฌด๋ฃŒ**์ž…๋‹ˆ๋‹ค. ์ •๋ถ€ยท๊ณต๊ณต๊ธฐ๊ด€(๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ, ๊ธฐ์ƒ์ฒญ, NEIS ๋“ฑ)์ด ์ œ๊ณตํ•˜๋Š” OpenAPI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ณธ ์ปดํฌ๋„ŒํŠธ์™€ ๋ชจ๋“  API๋Š” ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค. ๋‹จ, ๊ฐ API๋Š” **์ผ์ผ ํ˜ธ์ถœ ํ•œ๋„**(๋ณดํ†ต 1๋งŒ ~ 100๋งŒ ํšŒ/์ผ)๊ฐ€ ์žˆ์ง€๋งŒ ๊ฐ€์ •์šฉ 1์ธ ์‚ฌ์šฉ์œผ๋กœ ํ•œ๋„๋ฅผ ๋„˜๊ธฐ๋Š” ์ผ์€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. +์‚ฌ์šฉ๋ฃŒ๊ฐ€ ๋“œ๋‚˜์š”? +**์ „๋ถ€ ๋ฌด๋ฃŒ**. ์ •๋ถ€ยท๊ณต๊ณต๊ธฐ๊ด€ OpenAPI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๋ณธ ์ปดํฌ๋„ŒํŠธ๋„ ๊ฒฐ์ œยท๊ณผ๊ธˆ ์—†์Œ. ๊ฐ API๋Š” ์ผ์ผ ํ˜ธ์ถœ ํ•œ๋„(๋ณดํ†ต 1๋งŒ~100๋งŒํšŒ/์ผ)๊ฐ€ ์žˆ์ง€๋งŒ ๊ฐ€์ •์šฉ 1์ธ ์‚ฌ์šฉ์œผ๋กœ ๋„˜๊ธฐ๋Š” ์ผ์€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.
-Q. API ํ‚ค ์‹ ์ฒญ์ด ๋ฌด์„œ์›Œ์š”. ์•ˆ ๋ฐ›๊ณ  ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ฒŒ ์žˆ๋‚˜์š”? - -๋„ค, **API ํ‚ค ์—†์ด ๋ฐ”๋กœ ๋˜๋Š” ์„œ๋น„์Šค**๊ฐ€ 4๊ฐ€์ง€ ์žˆ์Šต๋‹ˆ๋‹ค: -- ๐Ÿšจ **์•ˆ์ „์•Œ๋ฆผ** โ€” ํ–‰์•ˆ๋ถ€ ์•ˆ์ „์•Œ๋ฆผ (์ง€์—ญ๋งŒ ์„ ํƒ) -- โšก **ํ•œ๊ตญ์ „๋ ฅ / ๐Ÿ’ง ์•„๋ฆฌ์ˆ˜ / ๐Ÿ  ๊ฐ€์Šค์•ฑ** โ€” ๋ณธ์ธ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ (API ํ‚ค ์•„๋‹˜) - -์ด 4๊ฐœ๋กœ ๋จผ์ € ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฒดํ—˜ํ•ด ๋ณด์‹œ๊ณ , ๋งˆ์Œ์— ๋“ค๋ฉด [๐Ÿ”‘ API ํ‚ค ๋ฐœ๊ธ‰ ๊ฐ€์ด๋“œ](#-api-ํ‚ค-๋ฐœ๊ธ‰-๊ฐ€์ด๋“œ)๋Œ€๋กœ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. +API ํ‚ค ์‹ ์ฒญ์ด ๋ถ€๋‹ด์Šค๋Ÿฌ์›Œ์š” +**ํ‚ค ์—†์ด ๋ฐ”๋กœ ๋˜๋Š” ์„œ๋น„์Šค 4๊ฐ€์ง€**๋ถ€ํ„ฐ ์ฒดํ—˜ํ•˜์„ธ์š”: +- ๐Ÿšจ **์•ˆ์ „์•Œ๋ฆผ** โ€” ์ง€์—ญ๋งŒ ์„ ํƒ (ํ–‰์•ˆ๋ถ€ ํŽ˜์ด์ง€ ์Šคํฌ๋ž˜ํ•‘) +- โšก **ํ•œ๊ตญ์ „๋ ฅ / ๐Ÿ’ง ์•„๋ฆฌ์ˆ˜ / ๐Ÿ  ๊ฐ€์Šค์•ฑ** โ€” ๋ณธ์ธ ๊ณ„์ •/๋ฒˆํ˜ธ๋กœ ๋กœ๊ทธ์ธ (API ํ‚ค ์•„๋‹˜)
-Q. ์„œ์šธ์— ์•ˆ ์‚ฌ๋Š”๋ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ๊ฐ€์š”? - -**๋Œ€๋ถ€๋ถ„ ์ „๊ตญ ๊ฐ€๋Šฅ**ํ•ฉ๋‹ˆ๋‹ค. -- ์ „๊ตญ: ์•ฝ๊ตญ, ์žฌ๋‚œ๋ฌธ์ž, ์•ˆ์ „์•Œ๋ฆผ, ๊ธฐ์ƒ์ฒญ ๋™๋„ค์˜ˆ๋ณด, ๊ธฐ์ƒํŠน๋ณด, ์ง€์ง„, ์—์–ด์ฝ”๋ฆฌ์•„, ํ•™๊ต, ์œ ๊ฐ€ -- **์„œ์šธ๋งŒ:** ์•„๋ฆฌ์ˆ˜(์ƒ์ˆ˜๋„), ์„œ์šธ ์ง€ํ•˜์ฒ  ์‹ค์‹œ๊ฐ„ ๋„์ฐฉ์ •๋ณด -- ๋„์‹œ๊ฐ€์Šค ํšŒ์‚ฌ๊ฐ€ ๊ฐ€์Šค์•ฑ๊ณผ ์—ฐ๋™๋˜์–ด ์žˆ์œผ๋ฉด ์ „๊ตญ ๊ฐ€๋Šฅ +์„œ์šธ ์™ธ ๊ฑฐ์ฃผ์ž๋„ ๊ฐ€๋Šฅํ•œ๊ฐ€์š”? +๋Œ€๋ถ€๋ถ„ ์ „๊ตญ ๊ฐ€๋Šฅ. **์„œ์šธ ์ „์šฉ**: ์•„๋ฆฌ์ˆ˜(์ƒ์ˆ˜๋„), ์„œ์šธ ์ง€ํ•˜์ฒ  ์‹ค์‹œ๊ฐ„ ๋„์ฐฉ์ •๋ณด. ๋‚˜๋จธ์ง€๋Š” ์ „๊ตญ OK.
-Q. ํ•œ ๊ฐ€์กฑ ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ํ•™๊ต / ์—ฌ๋Ÿฌ ์•ฝ๊ตญ ์ง€์—ญ์„ ๋™์‹œ์— ๋ณด๊ณ  ์‹ถ์–ด์š”. - -๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. **๊ฐ™์€ ์„œ๋น„์Šค๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋“ฑ๋ก**ํ•˜๋ฉด ๊ฐ๊ฐ ๋…๋ฆฝ์ ์ธ ๊ธฐ๊ธฐยทentity๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. -- ์˜ˆ: "์•ฝ๊ตญ" ์„œ๋น„์Šค๋ฅผ ์‹œํฅ์‹œ / ์•ˆ์–‘์‹œ / ๋ถ€๋ชจ๋‹˜ ๋Œ ์‹œ๊ตฐ๊ตฌ 3๋ฒˆ ๋“ฑ๋ก โ†’ ๊ธฐ๊ธฐ 3๊ฐœ (`์•ฝ๊ตญ - ์‹œํฅ์‹œ`, `์•ฝ๊ตญ - ์•ˆ์–‘์‹œ`, `์•ฝ๊ตญ - ๋ถ€๋ชจ๋‹˜ ๋™๋„ค`) ์™€ ๊ฐ ๊ธฐ๊ธฐ ์•„๋ž˜ ๋ณ„๋„ `์šด์˜ ์•ฝ๊ตญ ์ˆ˜` sensor ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. (entity_id๋Š” ์ž๋™์œผ๋กœ ๋กœ๋งˆ์ž ์Šฌ๋Ÿฌ๊ทธํ™”๋˜์–ด `sensor.yaggug_siheungsi_*` ํ˜•ํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.) +๋“ฑ๋กํ•œ API ํ‚คยท์ง€์—ญ์„ ๋ฐ”๊พธ๋ ค๋ฉด? +์„ค์ • โ†’ ๊ธฐ๊ธฐ ๋ฐ ์„œ๋น„์Šค โ†’ **"ํ•œ๊ตญ ์ปดํฌ๋„ŒํŠธ ํ‚คํŠธ"** ์นด๋“œ โ†’ ํ•ด๋‹น ํ•ญ๋ชฉ์˜ **"๊ตฌ์„ฑ"** ๋ฒ„ํŠผ. ์‚ญ์ œยท์žฌ๋“ฑ๋ก ์—†์ด entity์™€ ์ž๋™ํ™” ์—ฐ๊ฒฐ ์œ ์ง€๋จ.
-Q. ๋ฐ์ดํ„ฐ๋Š” ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ๊ฐฑ์‹ ๋˜๋‚˜์š”? ์‹ค์‹œ๊ฐ„์ธ๊ฐ€์š”? - -์„œ๋น„์Šค ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. [์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ ํ‘œ](#-์—…๋ฐ์ดํŠธ-์ฃผ๊ธฐ) ์ฐธ๊ณ . ๋น ๋ฅธ ๊ฒƒ๋ถ€ํ„ฐ ์ •๋ฆฌํ•˜๋ฉด: -- **1๋ถ„ ~ 2๋ถ„:** ๋ฒ„์Šค/์ง€ํ•˜์ฒ  (์‹ค์‹œ๊ฐ„ ๋„์ฐฉ) -- **5๋ถ„:** ์žฌ๋‚œ๋ฌธ์ž, ์•ˆ์ „์•Œ๋ฆผ, KEPCO -- **10๋ถ„ ~ 15๋ถ„:** ์ง€์ง„, ๊ธฐ์ƒํŠน๋ณด -- **20๋ถ„ ~ 30๋ถ„:** ๊ฐ€์Šค์•ฑ, ๊ธฐ์ƒ์ฒญ ์˜ˆ๋ณด, ์—์–ด์ฝ”๋ฆฌ์•„ -- **1์‹œ๊ฐ„:** ์•„๋ฆฌ์ˆ˜, ์•ฝ๊ตญ, ์œ ๊ฐ€ -- **6์‹œ๊ฐ„:** ํ•™๊ต (๊ธ‰์‹ยท์‹œ๊ฐ„ํ‘œ๋Š” ์ผ์ž๋ณ„ ๋ณ€ํ™”๊ฐ€ ์ ์Œ) - -> ๐Ÿ’ก ์•ฝ๊ตญ์˜ `open_now`(์ง€๊ธˆ ์˜์—…์ค‘์ธ๊ฐ€)๋Š” ๋ฐ์ดํ„ฐ ๊ฐฑ์‹ ๊ณผ ๋ณ„๊ฐœ๋กœ **๋Œ€์‹œ๋ณด๋“œ์— ํ‘œ์‹œ๋  ๋•Œ๋งˆ๋‹ค ์‹œ๊ฐยท์š”์ผ ๊ธฐ์ค€์œผ๋กœ ์žฌ๊ณ„์‚ฐ**๋ฉ๋‹ˆ๋‹ค. +๊ฐ™์€ ์„œ๋น„์Šค๋ฅผ ์—ฌ๋Ÿฌ ์ง€์—ญ์œผ๋กœ ๋“ฑ๋ก ๊ฐ€๋Šฅ? +๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์•ฝ๊ตญ ์„œ๋น„์Šค๋ฅผ ์‹œํฅ์‹œยท์•ˆ์–‘์‹œยท๋ถ€๋ชจ๋‹˜ ๋Œ 3๋ฒˆ ๋“ฑ๋กํ•˜๋ฉด ๋…๋ฆฝ์ ์ธ ๊ธฐ๊ธฐยทentity 3์„ธํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.
-Q. ํ•ธ๋“œํฐ ์•Œ๋ฆผ๊ณผ ํ•จ๊ป˜ ์“ฐ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”? +ํ•ธ๋“œํฐ ์•Œ๋ฆผ๊ณผ ํ•จ๊ป˜ ์“ฐ๋ ค๋ฉด? -Home Assistant์˜ **์ž๋™ํ™”(Automation)** ์™€ **Companion ์•ฑ ํ‘ธ์‹œ**๋ฅผ ์กฐํ•ฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์ž๋™ํ™” YAML ์˜ˆ์‹œ ๋‘ ๊ฐœ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ์‚ฌ์šฉ ์‹œ `<...>` ๋ถ€๋ถ„๋งŒ ๋ณธ์ธ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ๋ฐ”๊พธ์„ธ์š”. +HA Automation + Companion ์•ฑ ํ‘ธ์‹œ ์กฐํ•ฉ. ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์˜ˆ์‹œ: ```yaml -# 1) ์žฌ๋‚œ๋ฌธ์ž๊ฐ€ ์ƒˆ๋กœ ๋„์ฐฉํ•˜๋ฉด ํ•ธ๋“œํฐ์— ํ‘ธ์‹œ -# "์ตœ์‹  ์žฌ๋‚œ๋ฌธ์ž" sensor์˜ state๊ฐ€ ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ๋ฐœ์‚ฌ automation: - - alias: "์žฌ๋‚œ๋ฌธ์ž ํ‘ธ์‹œ" + - alias: "์žฌ๋‚œ๋ฌธ์ž โ†’ ํ•ธ๋“œํฐ ํ‘ธ์‹œ" trigger: - platform: state - entity_id: sensor.<์žฌ๋‚œ๋ฌธ์ž_์ตœ์‹ _์—”ํ‹ฐํ‹ฐ_id> # ๊ฐœ๋ฐœ์ž ๋„๊ตฌ โ†’ ์ƒํƒœ์—์„œ "์ตœ์‹  ์žฌ๋‚œ๋ฌธ์ž" ๊ฒ€์ƒ‰ํ•ด ๋ณต์‚ฌ + entity_id: sensor.<์žฌ๋‚œ๋ฌธ์ž_์ตœ์‹ _์—”ํ‹ฐํ‹ฐ_id> # ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ ํ™•์ธ condition: - condition: template value_template: "{{ trigger.to_state.state not in ['์—†์Œ', 'unknown', 'unavailable'] }}" @@ -703,126 +368,124 @@ automation: data: title: "๐Ÿšจ ์žฌ๋‚œ๋ฌธ์ž" message: "{{ trigger.to_state.state }}" - -# 2) PM2.5 > 35 ใŽ/ใŽฅ ์ด๋ฉด ๊ฑฐ์‹ค TTS + ํ‘ธ์‹œ - - alias: "๋ฏธ์„ธ๋จผ์ง€ ๋‚˜์จ ์•Œ๋ฆผ" - trigger: - - platform: numeric_state - entity_id: sensor.<์ธก์ •์†Œ_pm25_์—”ํ‹ฐํ‹ฐ_id> # "PM2.5 ์ดˆ๋ฏธ์„ธ๋จผ์ง€" ๊ฒ€์ƒ‰ํ•ด ๋ณต์‚ฌ - above: 35 - action: - - service: tts.cloud_say - data: - entity_id: media_player.<์Šคํ”ผ์ปค_์—”ํ‹ฐํ‹ฐ_id> - message: "ํ˜„์žฌ ๋ฏธ์„ธ๋จผ์ง€ ์ˆ˜์น˜๊ฐ€ ๋‚˜์จ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ํ™˜๊ธฐ๋ฅผ ์ž์ œํ•˜์„ธ์š”." - - service: notify.mobile_app_<ํฐ_์ด๋ฆ„> - data: - message: "PM2.5 {{ states(trigger.entity_id) }} ใŽ/ใŽฅ" ``` - -> ๐Ÿ’ก **์นœํ™” ์ด๋ฆ„ โ†’ entity_id ๋ณ€ํ™˜๋ฒ•**: HA ์‚ฌ์ด๋“œ๋ฐ”์˜ ๐Ÿ› ๏ธ **๊ฐœ๋ฐœ์ž ๋„๊ตฌ โ†’ ์ƒํƒœ** ํƒญ์—์„œ ๊ฒ€์ƒ‰์ฐฝ์— ์นœํ™” ์ด๋ฆ„(`์ตœ์‹  ์žฌ๋‚œ๋ฌธ์ž`, `PM2.5 ์ดˆ๋ฏธ์„ธ๋จผ์ง€` ๋“ฑ)์„ ์ž…๋ ฅํ•˜๋ฉด ์ขŒ์ธก์— entity_id๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ID๋ฅผ ์œ„ YAML์˜ `<...>` ์ž๋ฆฌ์— ๋ถ™์—ฌ๋„ฃ์œผ์„ธ์š”. HA์˜ ์ž๋™ํ™” ํŽธ์ง‘ UI(์‹œ๊ฐ์ )์—์„œ๋Š” ์นœํ™” ์ด๋ฆ„์œผ๋กœ ๋ฐ”๋กœ ์„ ํƒํ•  ์ˆ˜๋„ ์žˆ์–ด ๋” ํŽธํ•ฉ๋‹ˆ๋‹ค. - -์ž๋™ํ™” ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• ์ „๋ฐ˜์€ [HA ์ž๋™ํ™” ๊ฐ€์ด๋“œ](https://www.home-assistant.io/docs/automation/) ์ฐธ๊ณ . -
-Q. ๋“ฑ๋ก ํ›„์— API ํ‚ค๋ฅผ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ์ง€์—ญ์„ ์ถ”๊ฐ€/์‚ญ์ œํ•˜๋ ค๋ฉด ๋‹ค์‹œ ๋“ฑ๋กํ•ด์•ผ ํ•˜๋‚˜์š”? - -์•„๋‹™๋‹ˆ๋‹ค. **์„ค์ • โ†’ ๊ธฐ๊ธฐ ๋ฐ ์„œ๋น„์Šค โ†’ "ํ•œ๊ตญ ์ปดํฌ๋„ŒํŠธ ํ‚คํŠธ"** ์นด๋“œ์—์„œ ํ•ด๋‹น ํ•ญ๋ชฉ ์˜† **"๊ตฌ์„ฑ"** ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์›๋ž˜ ์ž…๋ ฅํ–ˆ๋˜ ๊ฐ’(API ํ‚คยท์ง€์—ญยท์œ ์ข…ยท์ขŒํ‘œ ๋“ฑ)์„ ๊ทธ๋Œ€๋กœ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (Options Flow ์ง€์›). ๊ธฐ์กด entity์™€ ์ž๋™ํ™” ์—ฐ๊ฒฐ์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. +์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธยทํ‚ค๋Š” ์–ด๋”” ์ €์žฅ๋˜๋‚˜์š”? +Home Assistant ๋‚ด๋ถ€ ์ €์žฅ์†Œ (`.storage/`) ์—๋งŒ ์ €์žฅ๋˜๋ฉฐ ์™ธ๋ถ€๋กœ ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” API ํ˜ธ์ถœ ์‹œ ํ•ด๋‹น ์„œ๋น„์Šค(ํ•œ์ „ยท์•„๋ฆฌ์ˆ˜ ๋“ฑ)์˜ ๊ณต์‹ ํŽ˜์ด์ง€์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
-Q. "์ง€๊ธˆ ๋ฏธ์„ธ๋จผ์ง€ ์–ด๋•Œ?" ๊ฐ™์€ ์Œ์„ฑ ์งˆ๋ฌธ๋„ ๊ฐ€๋Šฅํ•œ๊ฐ€์š”? - -๋„ค, Home Assistant์˜ **Assist + LLM ํ†ตํ•ฉ** (OpenAI / Google / Ollama ๋“ฑ)์— ๋ณธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋…ธ์ถœํ•˜๋ฉด ์ž์—ฐ์–ด ์งˆ๋ฌธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์˜ˆ์‹œ๋Š” [๐Ÿค– LLM API ์—ฐ๋™](#-llm-api-์—ฐ๋™-์˜ต์…˜) ์„น์…˜ ์ฐธ๊ณ . +์—…๋ฐ์ดํŠธ๋Š” ์–ด๋–ป๊ฒŒ ๋ฐ›๋‚˜์š”? +HACS๋กœ ์„ค์น˜ํ•˜์…จ๋‹ค๋ฉด ์ƒˆ ๋ฆด๋ฆฌ์ฆˆ ์‹œ **HACS โ†’ ํ†ตํ•ฉ โ†’ KR Component Kit** ์— ๋นจ๊ฐ„ ์  ํ‘œ์‹œ โ†’ UPDATE โ†’ HA ์žฌ์‹œ์ž‘. ๊ธฐ์กด ์„ค์ •ยทentity ์œ ์ง€๋จ.
-Q. ๋“ฑ๋กํ•œ ์ •๋ณด(ID/๋น„๋ฐ€๋ฒˆํ˜ธ/API ํ‚ค)๋Š” ์–ด๋””์— ์ €์žฅ๋˜๋‚˜์š”? ์•ˆ์ „ํ•œ๊ฐ€์š”? - -**Home Assistant ๋‚ด๋ถ€ ์ €์žฅ์†Œ(config ํด๋” ์•ˆ `.storage/`)** ์—๋งŒ ์ €์žฅ๋˜๋ฉฐ ์™ธ๋ถ€๋กœ ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” API ํ˜ธ์ถœ ์‹œ ํ•ด๋‹น ์„œ๋น„์Šค(ํ•œ์ „ยท์•„๋ฆฌ์ˆ˜ ๋“ฑ)์˜ ๊ณต์‹ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์ฑ…์ž„ ํ•œ๊ณ„๋Š” ์•„๋ž˜ ๋ฉด์ฑ…์กฐํ•ญ ์„น์…˜ ์ฐธ๊ณ . +์‹ ์ถ• ์•„ํŒŒํŠธ์ธ๋ฐ ์‹œ๊ตฐ๊ตฌ ๋ชฉ๋ก์— ๋‚ด ๋™์ด ์—†์–ด์š” +ํ–‰์ •๊ตฌ์—ญ ์ฝ”๋“œ๊ฐ€ ์‹ ์ถ• ๋™๊นŒ์ง€ ์ฆ‰์‹œ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ธ์ ‘ ๋™/๊ตฌ๋ฅผ ์„ ํƒํ•ด ์ฃผ์„ธ์š”. ๊ธฐ์ƒ์ฒญ ๋™๋„ค์˜ˆ๋ณด๋Š” 5kmร—5km ๊ฒฉ์ž๋ผ ์ธ์ ‘ ์ฝ”๋“œ ์„ ํƒํ•ด๋„ ์‹ค์ œ ๋‚ ์”จ ๊ฑฐ์˜ ๋™์ผ.
-
-Q. ํ•œ ๋ฒˆ ๋“ฑ๋กํ•œ ์„œ๋น„์Šค๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ๋‹ค์‹œ ์„ค์ •ํ•˜๊ณ  ์‹ถ์–ด์š”. +--- -**์„ค์ • โ†’ ๊ธฐ๊ธฐ ๋ฐ ์„œ๋น„์Šค โ†’ "ํ•œ๊ตญ ์ปดํฌ๋„ŒํŠธ ํ‚คํŠธ"** ์นด๋“œ์— ๋“ฑ๋ก๋œ ํ•ญ๋ชฉ ์˜† **โ‹ฎ โ†’ ์‚ญ์ œ** ๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ํ•ญ๋ชฉ๊ณผ ๊ทธ ์„œ๋น„์Šค์˜ ๋ชจ๋“  entity๊ฐ€ ๊น”๋”ํ•˜๊ฒŒ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋“ฑ๋กํ•˜๋ ค๋ฉด ํ†ตํ•ฉ ์ถ”๊ฐ€๋ฅผ ๋ฐ˜๋ณตํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. +## ๐Ÿ”„ ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ -> ๐Ÿ’ก ์ž…๋ ฅ๊ฐ’๋งŒ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด **์‚ญ์ œ ๋Œ€์‹  "๊ตฌ์„ฑ"** ๋ฒ„ํŠผ์ด ๋” ํŽธํ•ฉ๋‹ˆ๋‹ค (entity ์œ ์ง€๋จ). +| ์นดํ…Œ๊ณ ๋ฆฌ | ์„œ๋น„์Šค | ์ฃผ๊ธฐ | +|---|---|---| +| ์‹ค์‹œ๊ฐ„ | ๋ฒ„์Šค/์ง€ํ•˜์ฒ  | 1~2๋ถ„ | +| ์•ˆ์ „ยท์žฌ๋‚œ | ์žฌ๋‚œ๋ฌธ์ž, ์•ˆ์ „์•Œ๋ฆผ, KEPCO | 5๋ถ„ | +| ์•ˆ์ „ยท์žฌ๋‚œ | ์ง€์ง„, ๊ธฐ์ƒํŠน๋ณด | 10~15๋ถ„ | +| ํ™˜๊ฒฝ/์œ ํ‹ธ | ๊ฐ€์Šค์•ฑ, ๊ธฐ์ƒ์ฒญ ์˜ˆ๋ณด, ์—์–ด์ฝ”๋ฆฌ์•„ | 20~30๋ถ„ | +| ์ƒํ™œ | ์•„๋ฆฌ์ˆ˜, ์•ฝ๊ตญ, ์œ ๊ฐ€ | 1์‹œ๊ฐ„ | +| ์ƒํ™œ | ํ•™๊ต (๊ธ‰์‹ยท์‹œ๊ฐ„ํ‘œ) | 6์‹œ๊ฐ„ | -
+> ๐Ÿ’ก ์•ฝ๊ตญ `open_now`(์ง€๊ธˆ ์˜์—…์ค‘) ๋Š” ๋ฐ์ดํ„ฐ ๊ฐฑ์‹ ๊ณผ ๋ณ„๊ฐœ๋กœ **๋Œ€์‹œ๋ณด๋“œ ๋ Œ๋” ์‹œ๋งˆ๋‹ค ์‹ค์‹œ๊ฐ„ ์žฌ๊ณ„์‚ฐ**. -
-Q. ์‹ ์ถ• ์•„ํŒŒํŠธ์ธ๋ฐ ์‹œ๊ตฐ๊ตฌ ๋ชฉ๋ก์— ๋‚ด ๋™์ด ์—†์–ด์š”. +--- -ํ–‰์ •๊ตฌ์—ญ ์ฝ”๋“œ๊ฐ€ ์‹ ๋„์‹œ ์‹ ์ถ• ๋™๊นŒ์ง€ ์ฆ‰์‹œ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. **๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ธ์ ‘ ๋™/๊ตฌ ์ฝ”๋“œ**๋ฅผ ์„ ํƒํ•ด ์ฃผ์„ธ์š”. ๊ธฐ์ƒ์ฒญ ๋™๋„ค์˜ˆ๋ณด๋Š” ๊ฒฉ์ž ๋‹จ์œ„(5km ร— 5km)์ด๋ฏ€๋กœ ์ธ์ ‘ ์ฝ”๋“œ๋ฅผ ๊ณจ๋ผ๋„ ์‹ค์ œ ๋‚ ์”จ๋Š” ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. +## โš ๏ธ ์•Œ๋ ค์ง„ ํ•œ๊ณ„ (์ •์งํ•œ ๊ณต๊ฐœ) -
+๋ณธ ์ปดํฌ๋„ŒํŠธ๋Š” ์ผ๋ถ€ ์„œ๋น„์Šค์—์„œ ๋น„๊ณต์‹ ๊ฒฝ๋กœ(์Šคํฌ๋ž˜ํ•‘ยท๋ชจ๋ฐ”์ผ ์•ฑ API)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ์‚ฌ์ดํŠธ ๋ณ€๊ฒฝ ์‹œ ์ผ์‹œ์ ์œผ๋กœ ๊นจ์งˆ ์ˆ˜ ์žˆ๋Š” ์•ฝ์ ์„ ๋ชจ๋‘ ๊ณต๊ฐœํ•ฉ๋‹ˆ๋‹ค. -
-Q. ์—…๋ฐ์ดํŠธ๋Š” ์–ด๋–ป๊ฒŒ ๋ฐ›๋‚˜์š”? +| ์„œ๋น„์Šค | ํ•œ๊ณ„ | +|---|---| +| ๐Ÿšจ **์•ˆ์ „์•Œ๋ฆผ / ๐Ÿ“ข ์žฌ๋‚œ๋ฌธ์ž** | `safekorea.go.kr` HTML ์Šคํฌ๋ž˜ํ•‘ / `safetydata.go.kr` API. ์ •๋ถ€ ์‚ฌ์ดํŠธ ์ ๊ฒ€ ์‹œ ์ผ์‹œ ๋ฏธ์ž‘๋™ ๊ฐ€๋Šฅ. ์žฌ๋‚œ๋ฌธ์ž๋Š” chrome 5์ข… impersonation rotation ์ง€์›, ์•ˆ์ „์•Œ๋ฆผ์€ chrome120 ๋‹จ์ผ | +| โšก **KEPCO** | ํ•œ์ „ ํŽ˜์ด์ง€๋ช… ๋ณ€๊ฒฝ ์‹œ ๋กœ๊ทธ์ธ ๊ฐ์ง€ ์‹คํŒจ ๊ฐ€๋Šฅ (2FA ๋ฏธ์ง€์›). HA ๋กœ๊ทธ `KEPCO login: unknown redirect` ๋กœ ๋””๋ฒ„๊น… | +| ๐Ÿ’ง **์•„๋ฆฌ์ˆ˜** | ์„œ์šธ์‹œ์ฒญ ํŽ˜์ด์ง€(`i121.seoul.go.kr`) HTML ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์‹œ ํŒŒ์‹ฑ ์‹คํŒจ ๊ฐ€๋Šฅ. 9์ž๋ฆฌ ์ˆ˜์šฉ๊ฐ€๋ฒˆํ˜ธ ๊ฐ€์ • | +| ๐Ÿ  **๊ฐ€์Šค์•ฑ** | ๋ชจ๋ฐ”์ผ ์•ฑ ๋‚ด๋ถ€ API. ํŒจํ‚ท ์บก์ฒ˜(mitmproxy/Charles)๋กœ ํ† ํฐ ์ถ”์ถœ ํ•„์š” โ€” ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€๋‹ด ํผ | +| ๐ŸŒซ๏ธ **์—์–ด์ฝ”๋ฆฌ์•„ ์ƒํ™œ์ง€์ˆ˜ (UVยท๋Œ€๊ธฐ์ •์ฒด)** | ์ฝ”๋“œ๋Š” V4 endpoint ํ˜ธ์ถœ, ํฌํ„ธ์€ V5๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋œ ๋“ฏ โ€” ์‹ค์ œ ๋™์ž‘ ๋ฏธ๊ฒ€์ฆ. ๋ฏธ์„ธ๋จผ์ง€(ํ•„์ˆ˜ 2๊ฑด)๋Š” ์˜ํ–ฅ ์—†์Œ | +| ๐Ÿซ **NEIS** | ๋ฐ์ดํ„ฐ ์—†๋Š” ๋‚ (๋ฐฉํ•™ยทํœด์ผ)์— `INFO-200` ์‘๋‹ต์„ ์—๋Ÿฌ๋กœ ์ฒ˜๋ฆฌ โ†’ ์ผ์‹œ ์—๋Ÿฌ ๋กœ๊ทธ ๊ฐ€๋Šฅ (์‹ค์ œ ๋™์ž‘์—๋Š” ์˜ํ–ฅ ์ ์Œ) | -HACS๋กœ ์„ค์น˜ํ•œ ๊ฒฝ์šฐ, ์ƒˆ ๋ฆด๋ฆฌ์ฆˆ๊ฐ€ ๋‚˜์˜ค๋ฉด **HACS โ†’ ํ†ตํ•ฉ โ†’ KR Component Kit** ์— ๋นจ๊ฐ„ ์ ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ํด๋ฆญ โ†’ UPDATE โ†’ HA ์žฌ์‹œ์ž‘์ด๋ฉด ๋์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ์„ค์ •๊ณผ entity๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. +> โœ… **๊ฒ€์ฆ ์™„๋ฃŒ**: ์•ฝ๊ตญ (์‹œํฅ์‹œ โ€” ์‹ค์ œ sensor state=20, 20๊ฐœ ์•ฝ๊ตญ attribute ์ •์ƒ). ์•ˆ์ „์•Œ๋ฆผ (์‹œํฅ์‹œ ์€ํ–‰๋™ cascading ๋“ฑ๋ก ์„ฑ๊ณต). -
+> ๐Ÿ› **์‚ฌ์ดํŠธ ๋ณ€๊ฒฝ์œผ๋กœ ๊นจ์กŒ๋‹ค๋ฉด** [GitHub Issues](https://github.com/redchupa/kr_component_kit/issues)์— ์•Œ๋ ค์ฃผ์„ธ์š”. ๋น ๋ฅด๊ฒŒ ์ˆ˜์ • PR ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. --- ## ๐Ÿ› ๋ฌธ์ œ ํ•ด๊ฒฐ +### API ํ‚ค ์ธ์ฆ ์‹คํŒจ +- ์‹ ์ฒญ ํ›„ ํ™œ์„ฑํ™”๊นŒ์ง€ **1~2์‹œ๊ฐ„** ๋Œ€๊ธฐ (ํŠนํžˆ ์šด์˜๊ธฐ๊ด€ ํ‚ค) +- `data.go.kr` ์•ˆ์—์„œ๋„ **๋ฐ์ดํ„ฐ์…‹๋ณ„ ํ™œ์šฉ์‹ ์ฒญ ๋ณ„๋„** โ€” ์•ฝ๊ตญ ํ‚ค๋กœ ๊ธฐ์ƒํŠน๋ณด ํ˜ธ์ถœํ•˜๋ฉด 403 +- ์žฌ๋‚œ๋ฌธ์ž๋Š” `safetydata.go.kr` ๋ณ„๋„ ํฌํ„ธ โ€” `data.go.kr` ํ‚ค๋กœ๋Š” ์•ˆ ๋จ +- `401` = ํ‚ค ์ž์ฒด๊ฐ€ ์ž˜๋ชป, `403` = ํ‚ค๋Š” ๋งž์ง€๋งŒ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์…‹ ํ™œ์šฉ์‹ ์ฒญ ์•ˆ ๋จ +- ์ผ์ผ ํŠธ๋ž˜ํ”ฝ ํ•œ๋„ ์ดˆ๊ณผ๋„ ๋™์ผ ์ฆ์ƒ (๋งˆ์ดํŽ˜์ด์ง€์—์„œ ํ™•์ธ) + ### ๋กœ๊ทธ์ธ ์‹คํŒจ (KEPCO / ์•„๋ฆฌ์ˆ˜ / ๊ฐ€์Šค์•ฑ) -- ์›น์‚ฌ์ดํŠธ์—์„œ ์ง์ ‘ ๋กœ๊ทธ์ธ์ด ๋˜๋Š”์ง€ ํ™•์ธ -- 2์ฐจ ์ธ์ฆ(OTP) ์„ค์ •๋œ ๊ณ„์ •์€ ์ง€์›ํ•˜์ง€ ์•Š์Œ -- ๊ฐ€์Šค์•ฑ์€ ํ† ํฐ์ด ์ž์ฃผ ๋งŒ๋ฃŒ๋  ์ˆ˜ ์žˆ์Œ โ€” ์•ฑ์—์„œ ๋‹ค์‹œ ๋ฐœ๊ธ‰ +- ์›น์‚ฌ์ดํŠธ์—์„œ ์ง์ ‘ ๋กœ๊ทธ์ธ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ +- 2์ฐจ ์ธ์ฆ(OTP) ์„ค์ •๋œ ๊ณ„์ •์€ ๋ฏธ์ง€์› +- ๊ฐ€์Šค์•ฑ์€ ํ† ํฐ์ด ์ž์ฃผ ๋งŒ๋ฃŒ โ€” ์•ฑ์—์„œ ๋‹ค์‹œ ๋ฐœ๊ธ‰ -### API ํ‚ค ์ธ์ฆ ์‹คํŒจ -- ์‹ ์ฒญ ์งํ›„ 1~2์‹œ๊ฐ„ ํ™œ์„ฑํ™” ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์žˆ์„ ์ˆ˜ ์žˆ์Œ (ํŠนํžˆ `data.go.kr` ์šด์˜๊ธฐ๊ด€ ํ‚ค) -- `data.go.kr` ์•ˆ์—์„œ๋Š” **๋ฐ์ดํ„ฐ์…‹๋ณ„๋กœ ํ™œ์šฉ์‹ ์ฒญ์ด ๋ณ„๋„** โ€” ์•ฝ๊ตญ ํ‚ค์™€ ๊ธฐ์ƒํŠน๋ณด ํ‚ค๋Š” ๊ฐ™์€ ์ธ์ฆํ‚ค์—ฌ๋„ *๊ฐ ๋ฐ์ดํ„ฐ์…‹์— ์‹ ์ฒญ ์Šน์ธ*์ด ๋”ฐ๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค -- **์žฌ๋‚œ๋ฌธ์ž๋งŒ์€ `safetydata.go.kr` ๋ณ„๋„ ํฌํ„ธ** โ€” ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ ํ‚ค๋กœ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค -- `401`์€ ํ‚ค ์ž์ฒด๊ฐ€ ์ž˜๋ชป๋œ ๊ฒฝ์šฐ, `403`์€ ํ‚ค๋Š” ๋งž์ง€๋งŒ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์…‹ ํ™œ์šฉ ์‹ ์ฒญ์ด ์•ˆ ๋œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค -- ์ผ์ผ ์š”์ฒญ ํ•œ๋„(ํŠธ๋ž˜ํ”ฝ) ์ดˆ๊ณผ๋„ ๋™์ผ ์ฆ์ƒ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋‹ˆ ๋งˆ์ดํŽ˜์ด์ง€ ํ†ต๊ณ„ ํ™•์ธ +### ๋ฐ์ดํ„ฐ๊ฐ€ ๋น„์–ด์žˆ์„ ๋•Œ (์•ˆ์ „์•Œ๋ฆผ / ์žฌ๋‚œ๋ฌธ์ž) +- ๋“ฑ๋กํ•œ ์ง€์—ญ์— ์ตœ๊ทผ ๋ฉ”์‹œ์ง€๊ฐ€ ์—†์œผ๋ฉด sensor state๊ฐ€ `์—†์Œ` โ€” ์ •์ƒ ๋™์ž‘ +- ์ •๋ถ€ ์‚ฌ์ดํŠธ ์ ๊ฒ€ ์ค‘์ด๋ฉด ์ž ์‹œ ํ›„ ์ž๋™ ๋ณต๊ตฌ -### ์•ˆ์ „์•Œ๋ฆผ / ์žฌ๋‚œ๋ฌธ์ž ๋ฐ์ดํ„ฐ๊ฐ€ ๋น„์–ด์žˆ์„ ๋•Œ -- ์•ˆ์ „์•Œ๋ฆผ์€ `safekorea.go.kr` ํŽ˜์ด์ง€๋ฅผ ์Šคํฌ๋ž˜ํ•‘ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์‚ฌ์ดํŠธ ์ ๊ฒ€ ์ค‘์ด๋ฉด ์ผ์‹œ์ ์œผ๋กœ ๋นˆ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Œ โ†’ ์ž ์‹œ ํ›„ ์ž๋™ ๋ณต๊ตฌ -- ์žฌ๋‚œ๋ฌธ์ž๋Š” `safetydata.go.kr` API๊ฐ€ ์ •๊ธฐ ์ ๊ฒ€ ์ค‘์ผ ์ˆ˜ ์žˆ์Œ โ†’ [์ ๊ฒ€ ๊ณต์ง€](https://www.safetydata.go.kr)์—์„œ ํ™•์ธ -- ๋“ฑ๋กํ•œ ์ง€์—ญ์— ์ตœ๊ทผ ๋ฐœ์†ก๋œ ๋ฉ”์‹œ์ง€๊ฐ€ ์—†์œผ๋ฉด sensor state๊ฐ€ `์—†์Œ` ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค (์ •์ƒ ๋™์ž‘) +### ๊ทธ๋ž˜๋„ ์•ˆ ํ’€๋ฆฌ๋ฉด -### ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ์•ˆ๋จ -- Home Assistant ๋กœ๊ทธ(**์„ค์ • โ†’ ์‹œ์Šคํ…œ โ†’ ๋กœ๊ทธ**)์—์„œ `kr_component_kit` ๊ฒ€์ƒ‰ -- ๊ฐ ์„œ๋น„์Šค API ์žฅ์•  ์—ฌ๋ถ€ ํ™•์ธ (`data.go.kr`, KMA ๋“ฑ์€ ์ •๊ธฐ ์ ๊ฒ€์ด ์žฆ์Œ) +1. **๋กœ๊ทธ ํ™•์ธ** โ€” ์„ค์ • โ†’ ์‹œ์Šคํ…œ โ†’ ๋กœ๊ทธ ์—์„œ `kr_component_kit` ๊ฒ€์ƒ‰ +2. **์ด์Šˆ ๋“ฑ๋ก** โ€” [GitHub Issues](https://github.com/redchupa/kr_component_kit/issues) โ€” ๋‹ค์Œ ์ •๋ณด ํฌํ•จ: + - ์–ด๋–ค ์„œ๋น„์Šค (์˜ˆ: "์•ฝ๊ตญ โ€” ์„œ์šธ ๊ฐ•๋‚จ๊ตฌ") + - HA ๋ฒ„์ „ + ๋ณธ ์ปดํฌ๋„ŒํŠธ ๋ฒ„์ „ + - ๋กœ๊ทธ ์—๋Ÿฌ (๊ฐœ์ธ์ •๋ณดยทํ‚ค๋Š” ๊ฐ€๋ฆฐ ํ›„) + - ์‹œ๋„ํ•œ ๋‹จ๊ณ„ -### ๊ธฐ์ƒ์ฒญ / ์•ฝ๊ตญ ์ขŒํ‘œ๊ฐ€ ์•ˆ ๋งž์„ ๋•Œ -- ์‹œ๋„ โ†’ ์‹œ๊ตฐ๊ตฌ ์„ ํƒ ์‹œ **๊ณต์‹ ํ–‰์ •๊ตฌ์—ญ ์ฝ”๋“œ**๋ฅผ ๋”ฐ๋ฅด๋ฏ€๋กœ, ๊ฑฐ์ฃผ์ง€ ์ฝ”๋“œ์™€ ํ–‰์ •๊ตฌ์—ญ ์ฝ”๋“œ๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ(์˜ˆ: ์‹ ๋„์‹œ ์‹ ์ถ• ๋™) ์ธ์ ‘ ์ฝ”๋“œ๋ฅผ ์„ ํƒํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค +> ๐Ÿ’ฌ ํ•œ๊ตญ์–ด ๊ทธ๋Œ€๋กœ ์ž‘์„ฑํ•ด์ฃผ์…”๋„ ๋ฉ๋‹ˆ๋‹ค. ๋‹ต๋ณ€๋„ ํ•œ๊ตญ์–ด๋กœ. -### ๊ทธ๋ž˜๋„ ์•ˆ ํ’€๋ฆฐ๋‹ค๋ฉด โ€” ์–ด๋””์— ๋ฌผ์–ด๋ณด๋‚˜์š”? +--- -1. **๋กœ๊ทธ ์ฒจ๋ถ€๊ฐ€ ์šฐ์„ ** โ€” **์„ค์ • โ†’ ์‹œ์Šคํ…œ โ†’ ๋กœ๊ทธ** ์—์„œ `kr_component_kit` ์œผ๋กœ ๊ฒ€์ƒ‰ํ•ด ๋นจ๊ฐ„ ์ค„(์—๋Ÿฌ)์„ ๋ณต์‚ฌ -2. [GitHub Issues](https://github.com/redchupa/kr_component_kit/issues) ์— ์ƒˆ ์ด์Šˆ ์ƒ์„ฑ โ€” ๋‹ค์Œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ์ ์–ด์ฃผ์‹œ๋ฉด ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค: - - ์–ด๋–ค ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋กํ•˜๋ ค ํ–ˆ๋Š”์ง€ (์˜ˆ: "์•ฝ๊ตญ โ€” ์„œ์šธํŠน๋ณ„์‹œ ๊ฐ•๋‚จ๊ตฌ") - - HA ๋ฒ„์ „ / ์ด ์ปดํฌ๋„ŒํŠธ ๋ฒ„์ „ - - ๋กœ๊ทธ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ (๊ฐœ์ธ์ •๋ณดยทAPI ํ‚ค๋Š” ๊ฐ€๋ฆฐ ํ›„) - - ์‹œ๋„ํ•ด๋ณธ ๋‹จ๊ณ„ +## ๐Ÿ“‹ ์š”๊ตฌ์‚ฌํ•ญ -> ๐Ÿ’ฌ ํ•œ๊ตญ์–ด ๊ทธ๋Œ€๋กœ ์ž‘์„ฑํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค. ๋‹ต๋ณ€๋„ ํ•œ๊ตญ์–ด๋กœ ๋“œ๋ฆฝ๋‹ˆ๋‹ค. +- **Home Assistant** 2023.1.0 ์ด์ƒ +- **Python** 3.11 ์ด์ƒ (HA ์ž์ฒด ์š”๊ตฌ์‚ฌํ•ญ) +- **์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ** (๊ฐ ์„œ๋น„์Šค API ์ ‘๊ทผ) +- ์ž๋™ ์„ค์น˜ ํŒจํ‚ค์ง€: `curl_cffi>=0.7.0`, `beautifulsoup4>=4.12.0` (manifest.json ์ •์˜) --- ## โš ๏ธ ๋ฉด์ฑ…์กฐํ•ญ -- ์ด ํ”„๋กœ์ ํŠธ๋Š” ์ผ๋ถ€ ์„œ๋น„์Šค์—์„œ ๊ณต์‹ API๊ฐ€ ์•„๋‹Œ **์ธ์ฆ๋œ ์›น ์Šคํฌ๋ž˜ํ•‘** ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค (KEPCO, ์•„๋ฆฌ์ˆ˜, ๊ฐ€์Šค์•ฑ) +- ๋ณธ ์ปดํฌ๋„ŒํŠธ๋Š” ์ผ๋ถ€ ์„œ๋น„์Šค์—์„œ ๊ณต์‹ API๊ฐ€ ์•„๋‹Œ **์ธ์ฆ๋œ ์›น ์Šคํฌ๋ž˜ํ•‘ / ๋ชจ๋ฐ”์ผ ์•ฑ ๋‚ด๋ถ€ API** ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค (KEPCO, ์•„๋ฆฌ์ˆ˜, ๊ฐ€์Šค์•ฑ, ์•ˆ์ „์•Œ๋ฆผ) - ๊ฐ ์„œ๋น„์Šค ์ œ๊ณต์—…์ฒด์˜ ์ •์ฑ… ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค -- ๊ฐœ์ธ์ •๋ณด(ID/๋น„๋ฐ€๋ฒˆํ˜ธ/ํ† ํฐ)๋Š” Home Assistant ๋‚ด๋ถ€ ์ €์žฅ์†Œ์—๋งŒ ๋ณด๊ด€๋˜๋ฉฐ ์™ธ๋ถ€๋กœ ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค -- ์‚ฌ์šฉ์ž์˜ ์ฑ…์ž„ ํ•˜์— ์ด์šฉํ•ด์ฃผ์„ธ์š” +- ์ •๋ถ€ ์‚ฌ์ดํŠธ ์ผ๋ถ€๋Š” TLS ๊ฒ€์ฆ ์šฐํšŒ (`verify=False`) โ€” ์ •๋ถ€ ์‚ฌ์ดํŠธ์˜ TLS ์„ค์ • ํ˜ธํ™˜์„ฑ ์ด์Šˆ ํšŒํ”ผ์šฉ. ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•˜์‹œ๋ฉด ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ํ™•์ธํ•ด ์ฃผ์„ธ์š” +- ๊ฐœ์ธ์ •๋ณด(ID/๋น„๋ฐ€๋ฒˆํ˜ธ/ํ† ํฐ/API ํ‚ค)๋Š” Home Assistant ๋‚ด๋ถ€ ์ €์žฅ์†Œ์—๋งŒ ๋ณด๊ด€๋˜๋ฉฐ ์™ธ๋ถ€ ์ „์†ก ์—†์Œ +- ๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ์ •๋ถ€ยท๊ณต๊ณต๊ธฐ๊ด€๊ณผ ๋ฌด๊ด€ํ•œ **๋น„๊ณต์‹ ์„œ๋“œํŒŒํ‹ฐ ํ†ตํ•ฉ**. ์‚ฌ์šฉ์ž์˜ ์ฑ…์ž„ ํ•˜์— ์ด์šฉํ•ด ์ฃผ์„ธ์š”. + +--- + +## ๐Ÿค ๊ธฐ์—ฌ / ๋ผ์ด์„ ์Šค + +- ๋ผ์ด์„ ์Šค: [MIT](LICENSE) โ€” ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉยท์ˆ˜์ •ยท์žฌ๋ฐฐํฌ ๊ฐ€๋Šฅ +- ์ด์ŠˆยทPR ํ™˜์˜: +- ์ƒˆ ํ•œ๊ตญ ์„œ๋น„์Šค ์ถ”๊ฐ€ ์ œ์•ˆ๋„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค --- ## โญ ๋„์›€์ด ๋˜์…จ๋‹ค๋ฉด -์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ **Star โญ** ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”. ๋ณ„์ด ๋ชจ์ด๋ฉด HACS Default Repository ๋“ฑ๋ก ๊ฐ€๋Šฅ์„ฑ์ด ์˜ฌ๋ผ๊ฐ€๊ณ , ๋” ๋งŽ์€ ํ•œ๊ตญ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. +์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ **Star โญ** ํ•œ ๋ฒˆ์ด๋ฉด ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋ณ„์ด ๋ชจ์ด๋ฉด HACS Default Repository ๋“ฑ๋ก ๊ฐ€๋Šฅ์„ฑ์ด ์˜ฌ๋ผ๊ฐ€๊ณ , ๋” ๋งŽ์€ ํ•œ๊ตญ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [![Star History Chart](https://api.star-history.com/svg?repos=redchupa/kr_component_kit&type=Date)](https://star-history.com/#redchupa/kr_component_kit&Date) @@ -830,7 +493,7 @@ HACS๋กœ ์„ค์น˜ํ•œ ๊ฒฝ์šฐ, ์ƒˆ ๋ฆด๋ฆฌ์ฆˆ๊ฐ€ ๋‚˜์˜ค๋ฉด **HACS โ†’ ํ†ตํ•ฉ โ†’ KR Co ## โ˜• ํ›„์› -์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋„์›€์ด ๋˜์…จ๋‹ค๋ฉด ์ปคํ”ผ ํ•œ ์ž”์œผ๋กœ ์‘์›ํ•ด์ฃผ์„ธ์š”! ๐Ÿ™ +์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋„์›€์ด ๋˜์…จ๋‹ค๋ฉด ์ปคํ”ผ ํ•œ ์ž”์œผ๋กœ ์‘์›ํ•ด ์ฃผ์„ธ์š” ๐Ÿ™