{"id":50136238,"url":"https://github.com/redchupa/kr_component_kit","last_synced_at":"2026-05-23T22:02:32.450Z","repository":{"id":351990968,"uuid":"1213361482","full_name":"redchupa/kr_component_kit","owner":"redchupa","description":"🇰🇷 Home Assistant integration for Korea-only services: KEPCO, Arisu water, safety alerts, GasApp, Kakao Map, GoodsFlow, and more public services.","archived":false,"fork":false,"pushed_at":"2026-05-17T22:41:35.000Z","size":1246,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-17T22:44:51.372Z","etag":null,"topics":["custom-component","custom-components","hacs","hacs-integration","home-assistant","home-automation","homeassistant","kepco","korea","korean","smart-home"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/redchupa.png","metadata":{"files":{"readme":"README.en.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"redchupa","custom":["https://www.paypal.com/redchupa"]}},"created_at":"2026-04-17T09:50:15.000Z","updated_at":"2026-05-17T22:41:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/redchupa/kr_component_kit","commit_stats":null,"previous_names":["redchupa/kr_component_kit"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/redchupa/kr_component_kit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redchupa%2Fkr_component_kit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redchupa%2Fkr_component_kit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redchupa%2Fkr_component_kit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redchupa%2Fkr_component_kit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/redchupa","download_url":"https://codeload.github.com/redchupa/kr_component_kit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redchupa%2Fkr_component_kit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33413623,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T18:09:33.147Z","status":"ssl_error","status_checked_at":"2026-05-23T18:09:31.380Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["custom-component","custom-components","hacs","hacs-integration","home-assistant","home-automation","homeassistant","kepco","korea","korean","smart-home"],"created_at":"2026-05-23T22:02:28.794Z","updated_at":"2026-05-23T22:02:32.442Z","avatar_url":"https://github.com/redchupa.png","language":"Python","funding_links":["https://github.com/sponsors/redchupa","https://www.paypal.com/redchupa"],"categories":[],"sub_categories":[],"readme":"# 🇰🇷 KR Component Kit\n\n\u003e **A Home Assistant integration for Korean residents** — KEPCO electricity, Seoul water, city gas, KMA weather, government disaster alerts, pharmacy info, school meals, real-time public transit + dedicated Seoul Bus + nationwide bus, air quality, fuel prices, and earthquake warnings — 15 Korea-only public services bundled in one package.\n\n🇰🇷 [한국어 README](README.md) · 🇬🇧 **English (this page)**\n\n[![hacs][hacsbadge]][hacs]\n[![GitHub Release][releases-shield]][releases]\n[![GitHub Activity][commits-shield]][commits]\n[![License][license-shield]](LICENSE)\n[![Stargazers][stars-shield]][stars]\n\n[![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\u0026repository=kr_component_kit\u0026category=integration)\n\n---\n\n## Why this exists\n\nKorean public services don't have a standard OpenAPI surface like utilities elsewhere. Each agency runs its own portal (`data.go.kr`, `safetydata.go.kr`, `opinet.co.kr`, `open.neis.go.kr`, `data.seoul.go.kr`), with its own signup, its own dataset-by-dataset 활용신청 (use application), and its own quirks.\n\nThis integration wraps the 15 most useful Korea-only services into one Home Assistant integration, with a unified config flow, native HA entities (sensors, weather, event, calendar, button), and an optional LLM tool surface for natural-Korean voice queries.\n\n**Who this is for:**\n- Korean residents (citizens, expats, or international residents) running Home Assistant\n- Korean expats abroad monitoring family-home utilities or disaster alerts back home\n- Anyone integrating Korean weather/air-quality data into a global HA setup\n\n---\n\n## 🚀 5-minute quickstart\n\n### Step 1. Install (2 min)\n\nClick the **`MY` HACS badge** at the top — your Home Assistant opens automatically, lands on the HACS download screen → **DOWNLOAD** → **restart Home Assistant**.\n\n*No HACS yet? → [HACS official setup guide](https://www.hacs.xyz/docs/setup/download/) first.*\n\n### Step 2. Register your first service (1 min) — **no API key needed**\n\n**Settings → Devices \u0026 Services → + Add Integration**\n→ Search `한국 컴포넌트 키트` *(the Korean name; English domain `kr_component_kit` also works)*\n→ Select **🚨 안전알림 (Safety Alert)** → pick 시도 (province) / 시군구 (city/district) / 읍면동 (town) → Submit.\n\n### Step 3. Verify (30 sec)\n\n**Developer Tools → States** → search for the friendly name `최신 안전알림` (\"Latest Safety Alert\") → state shows the most recent Korean government safety bulletin for your area.\n\n### Step 4. Add more services\n\nWhen ready, follow the [🔑 API Key Guide](#-api-key-guide) below to add the other 14 services one by one.\n\n---\n\n## 📋 The 15 services at a glance\n\n| Service | Category | API key | Notes |\n|---|---|---|---|\n| 💊 **Pharmacy** (약국) | Living | ✅ data.go.kr | Pharmacies near you with \"open now\" flag |\n| 🚨 **Safety Alert** (안전알림) | Safety | ❌ none | Government safety alerts (scraping) |\n| 📢 **Disaster Alert** (재난문자) | Safety | ✅ safetydata.go.kr | Emergency text broadcasts in real time |\n| 🌪️ **Weather Warning** (기상특보) | Safety | ✅ data.go.kr | 12 advisory types (rain, wind, cold, heat…) |\n| 🌍 **Earthquake** (지진) | Safety | ✅ data.go.kr | Radius + magnitude filters |\n| ⛅ **KMA Forecast** (동네예보) | Weather | ✅ data.go.kr | Native HA Weather card |\n| 🌫️ **AirKorea** (에어코리아) | Weather | ✅ data.go.kr (×2) | PM10/PM2.5 + KHAI air-quality index |\n| ⚡ **KEPCO** (한국전력) | Utility | ❌ (own login) | Electricity usage + bill |\n| 💧 **Arisu** (서울 상수도) | Utility | ❌ (account number) | Seoul tap water only |\n| 🏠 **GasApp** (가스앱) | Utility | ❌ (mobile-app token) | Packet capture required (advanced) |\n| ⛽ **Fuel** (유가) | Living | ✅ opinet.co.kr | Province-level avg / lowest-price stations |\n| 🏫 **School** (학교) | Living | ✅ open.neis.go.kr | Lunch menu, schedule, calendar |\n| 🚌 **Transit** (대중교통) | Living | Partial | Subway (Seoul) + bus by KakaoMap stop-ID. Single integration entry for both |\n| 🚌 **Seoul Bus** (서울버스) | Living | ✅ data.go.kr | Official Seoul Bus API (ARS-ID). Per-route arrival sensors + **low-floor + full-bus binary_sensors** + per-stop refresh button + activation switch. Add/remove stops from options menu |\n| 🚍 **Korea Bus** (한국 버스) | Living | ❌ none | KakaoMap nationwide, **search by stop name**, configurable poll interval |\n\n\u003e 💡 **All services are free.** Korean public APIs are gratis; this integration adds no payment of its own.\n\n---\n\n## 🔑 API Key Guide\n\n\u003e ⚠️ **Three common pitfalls**\n\u003e - Disaster alerts use `safetydata.go.kr` (Safety Data Portal) — **a different site** from `data.go.kr` (Public Data Portal). Separate signup.\n\u003e - Even within `data.go.kr`, each dataset needs **its own 활용신청 (use application)** — a key approved for pharmacies returns 403 when called against weather warnings.\n\u003e - After applying, expect **1–2 hours of activation lag** (especially agency-issued keys).\n\nEach \"👉 Direct search\" link below lands on the portal's search-results page with the Korean keyword pre-filled.\n\n### 💊 Pharmacy (전국 약국 정보)\n\n| Field | Value |\n|---|---|\n| 🌐 Portal | [Public Data Portal (data.go.kr)](https://www.data.go.kr) |\n| 🔎 Direct search | [👉 Open pharmacy search](https://www.data.go.kr/tcs/dss/selectDataSetList.do?searchKeyword=전국%20약국) |\n| Search keyword | `전국 약국` or `약국 정보` |\n| Operating agency | National Medical Center (NMC) — code `B552657` |\n| Exact dataset name | **국립중앙의료원_전국 약국 정보 조회 서비스** |\n| Endpoint called by code | `apis.data.go.kr/B552657/ErmctInsttInfoInqireService/getParmacyListInfoInqire` |\n\n**Steps:** Sign up at the portal (Korean OAuth via Naver/Kakao works) → click the direct-search link → pick the dataset → **활용신청** (Use Application) → My Page → Open API → Auth Key list → copy the **Decoding** form → paste into HA pharmacy field.\n\n---\n\n### 📢 Disaster Alert (재난문자) *(✅ Verified working — 2026-05-14)*\n\n| Field | Value |\n|---|---|\n| 🌐 Portal | [Safety Data Sharing Platform (safetydata.go.kr)](https://www.safetydata.go.kr) |\n| Operating agency | Ministry of the Interior and Safety |\n| Exact dataset name | **행정안전부_긴급재난문자** (MOIS Emergency Disaster Alerts) |\n| Endpoint | `/V2/api/DSSP-IF-00247` |\n| Provisioning | **Manual operator review** — not auto-issued (1–3 business days) |\n| Daily call quota | Default 1,000/day. Integration polls every 5 min → 288 calls/day. Plenty of headroom. |\n| Key validity | **1 year** *(renew on My Page before expiration — check the 만료일자 field on the key screen)* |\n| Key form | **Single form only** *(unlike data.go.kr, there is no Decoding/Encoding split)* |\n| IP required | ⚠️ **Application form requires registering the calling IP** (see Step 3) |\n\n\u003e ⚠️ Safety Data Sharing Platform and Public Data Portal are **separate sites** even though both are government-run. Sign up separately even if you already have a `data.go.kr` account.\n\n#### 1️⃣ Sign up\nRegister at [safetydata.go.kr](https://www.safetydata.go.kr). Your `data.go.kr` credentials do **not** work here.\n\n#### 2️⃣ Pick the correct dataset *(⚠️ two cards look similar)*\nTop search box → type `재난문자` → you'll see **two** result cards:\n\n| Card | Use? |\n|---|---|\n| **행정안전부_긴급재난문자** *(50k+ views / 28M downloads / `#재난문자` tag)* | ✅ **This one** |\n| 재난문자(속보) *(~900 views / tag `#-1`)* | ❌ Different endpoint code, incompatible with this integration |\n\nClick the correct card → confirm the endpoint code on the detail page is `DSSP-IF-00247`.\n\n#### 3️⃣ Fill out the application form\n\nOn the detail page → **오픈API 활용신청** (Open API Use Application) button → form fields:\n\n**① 활용목적 (Purpose)** *(required)*\n- Category: **`앱개발 (모바일, 솔루션 등)`** (App development) recommended\n- Description example: *\"Use in a Home Assistant integration to deliver real-time emergency disaster alerts to family members.\"*\n\n**② 하루 최대 호출 횟수 (Daily call quota)** *(required)*\n- Enter **`1000`**. Integration uses 288/day at the default 5-minute polling — well under the limit.\n\n**③ 아이피 (IP address)** *(required)* — most important field\nYou must register the **public outbound IP** of the machine running Home Assistant. If the registered IP doesn't match the actual request IP, the API returns **403 Forbidden** even with a valid key.\n\n| Option | Example | Recommendation |\n|---|---|---|\n| Single IP | `121.123.45.67` | Strictest. But **Korean residential ISPs use dynamic IPs** — it'll change within days/months, requiring re-application |\n| CIDR-like wildcard | `121.123.*.*` | Safer if your ISP rotates within the same range |\n| Allow all | `*.*.*.*` | ⭐ **Recommended for personal use** — no need to track IP changes. The key itself is the secret; broad IP scope is fine for low-risk personal use |\n\n🔎 **How to find your HA server's public IP:**\nHA add-on → **Terminal \u0026 SSH** (or SSH in) → run:\n```bash\ncurl -s https://api.ipify.org\n```\nUse whatever IP this prints in the application form.\n\n**④ License agreement checkbox** → click **이용신청** (Submit).\n\n#### 4️⃣ Wait for approval\nMy Page → \"데이터 활용신청 내역\" (Application history) — check status:\n- *\"승인 대기 중입니다\"* (Pending review) → an operator must approve it. **Not auto-issued — expect 1–3 business days.**\n- *\"발급됨\"* (Issued) → service key value becomes visible.\n\n#### 5️⃣ Copy the key → enter into HA\nMy Page → click the **값 복사하기 (Copy value)** button next to the issued key → in HA, add integration → pick **재난문자** → paste into the auth-key field as-is.\n\n\u003e 💡 safetydata.go.kr provides the key in **a single form** (no Decoding/Encoding split like data.go.kr). Whatever the **값 복사하기** button copies, paste it as-is. The integration handles URL encoding internally.\n\n#### 🔁 After issuance\n\n- **Quota monitoring**: My Page shows `일일호출량 / 호출량` — the first number is the limit (1000), the second is **cumulative usage today** (`0` means \"not used yet today\", not \"max\"). Resets at midnight KST.\n- **Updating the registered IP**: If your dynamic IP changes, go to My Page → key → **목록 변경신청** (Edit application) → update the IP field. ⚠️ Edits also go through operator review. If your IP rotates often, save yourself the loop and switch to `*.*.*.*` from the start.\n- **Key expiration (1 year)**: Renew via 변경신청 before the 만료일자 date. Expired keys return 401.\n\n#### 🆘 Troubleshooting\n\n| Symptom | Likely cause | Fix |\n|---|---|---|\n| `401 / SERVICE KEY ERROR` | Key not yet activated / expired / whitespace in pasted value | Wait 30–60 min after issuance. Check the 만료일자 (expiration date). Trim any leading/trailing whitespace and re-paste |\n| `403 / ACCESS_DENIED` | **IP mismatch (most common cause)** | Compare `curl -s https://api.ipify.org` output against the IP registered in My Page. If they differ, update the registered IP via **목록 변경신청**. If it changes often, re-register with `*.*.*.*` |\n| Empty response / `body []` | Normal — no recent disaster alerts in that time window | Quiet hours legitimately return empty. The feed fills up during major incidents or severe weather |\n\n---\n\n### 🌪️ Weather Warning + 🌍 Earthquake + ⛅ Short-term Forecast (3 KMA datasets, same key)\n\nAll three live under `data.go.kr`, operating agency **Korea Meteorological Administration (KMA)**, agency code `1360000`. **One auth key per account** — but each dataset still needs its own 활용신청.\n\n| Service | Direct search | Keyword | Endpoint |\n|---|---|---|---|\n| 🌪️ Weather warning | [👉 Search](https://www.data.go.kr/tcs/dss/selectDataSetList.do?searchKeyword=기상특보) | `기상특보` | `1360000/WthrWrnInfoService` |\n| 🌍 Earthquake | [👉 Search](https://www.data.go.kr/tcs/dss/selectDataSetList.do?searchKeyword=지진정보) | `지진정보` | `1360000/EqkInfoService` |\n| ⛅ Short-term forecast | [👉 Search](https://www.data.go.kr/tcs/dss/selectDataSetList.do?searchKeyword=단기예보) | `단기예보` | `1360000/VilageFcstInfoService_2.0` |\n\n---\n\n### 🌫️ AirKorea (Air Quality) — **two datasets required**\n\n`data.go.kr`, operating agency **Korea Environment Corporation**, agency code `B552584`. Both datasets must be applied for separately.\n\n| Dataset | Direct search | Keyword | Endpoint |\n|---|---|---|---|\n| Station info | [👉 Search](https://www.data.go.kr/tcs/dss/selectDataSetList.do?searchKeyword=에어코리아%20측정소) | `에어코리아 측정소` | `B552584/MsrstnInfoInqireSvc` |\n| Pollution data | [👉 Search](https://www.data.go.kr/tcs/dss/selectDataSetList.do?searchKeyword=에어코리아%20대기오염) | `에어코리아 대기오염` | `B552584/ArpltnInforInqireSvc` |\n\n\u003e 💡 If station-info is missing, the station dropdown in HA setup will be empty.\n\n\u003e ⚠️ **Optional — Living Weather Index (UV / air stagnation)**: code calls the `V4` endpoint, but the portal seems to have moved to `V5`. Live operation unverified. If you want these sensors, search `생활기상지수` and apply; check HA logs (`Settings → System → Logs`, search `LivingWthrIdx`) for actual behavior. PM10/PM2.5 (the required two) are unaffected.\n\n---\n\n### ⛽ Fuel (Opinet)\n\n| Field | Value |\n|---|---|\n| 🌐 Portal | [👉 Opinet API signup page](https://www.opinet.co.kr/user/api/empApiInfo.do) |\n| Process | Free signup → API application → immediate issuance |\n| Endpoint | `opinet.co.kr/api/avgAllPrice.do`, `lowTop10.do` |\n\n\u003e 💡 Opinet is a **separate portal** from the Public Data Portal.\n\n---\n\n### 🏫 School (NEIS)\n\n| Field | Value |\n|---|---|\n| 🌐 Portal | [👉 NEIS Education Open Portal](https://open.neis.go.kr) |\n| Process | Sign up → request auth key → check My Page \"Application Status\" |\n| Endpoint | `open.neis.go.kr/hub/...` |\n\n\u003e 💡 NEIS is also a **separate portal**. The HA config flow auto-searches schools by name — just type your school's Korean name into the dropdown.\n\n---\n\n### 🚌 Transit — keys depend on scenario\n\n\u003e ✅ **Live-verified** (2026-05-18): Korea Bus tested end-to-end on a real HA instance with two stops registered simultaneously — Seoul Sindorim.Guro Station (ARS 17003) and Gyeonggi Siheung Eungye-Umirin (ARS 25842).  Per-route arrival sensors + refresh button + activation switch all working; every documented attribute (vehicle_number, current_stop, message, direction, bus_type, first_time / last_time / intervals, next_stop, status) confirmed against live KakaoMap responses.\n\n| Use case | Key needed | Where |\n|---|---|---|\n| Subway arrivals | Seoul Open Data Plaza key | [👉 data.seoul.go.kr](https://data.seoul.go.kr) → apply for `지하철 실시간 도착정보` |\n| Bus arrivals | **None needed** | KakaoMap's unofficial endpoint; just enter the stop ID |\n| Transfer path search (optional) | Seoul transfer-route API key | [👉 data.go.kr](https://www.data.go.kr/tcs/dss/selectDataSetList.do?searchKeyword=대중교통환승경로) → `대중교통환승경로` |\n\n**Finding a KakaoMap bus stop ID** *(for bus registration)*:\n[KakaoMap](https://map.kakao.com) → search for the stop → click it → URL becomes `?busstopid=03171\u0026...` → **copy the value after `busstopid=`** (e.g., `03171`, `BS09013700`).\n\n**Finding a Seoul Bus ARS-ID** *(\"Seoul Bus\" menu)*:\n[bus.go.kr](https://bus.go.kr) or the 5-digit number printed on the bus-stop sign itself (e.g., `23288` for 사당역).\n\n---\n\n### 🚌 Seoul Bus — API key guide (5 min)\n\n| Field | Value |\n|---|---|\n| 🌐 Portal | [Public Data Portal (data.go.kr)](https://www.data.go.kr) |\n| 🔎 Direct link | [👉 서울특별시_정류소정보조회 서비스](https://www.data.go.kr/data/15000303/openapi.do) |\n| Provider | Seoul Metropolitan Government |\n| Exact dataset name | **서울특별시_정류소정보조회 서비스** |\n| Endpoint called by code | `ws.bus.go.kr/api/rest/stationinfo/getStationByUid` |\n| Daily call limit | 1,000 (plenty — activation switch keeps polling targeted) |\n\n**Steps**:\n1. Sign up at data.go.kr, click the link above\n2. On the dataset page → **활용신청** (Use Application) → fill the form (auto-approved dataset; no IP registration needed)\n3. My Page → Open API → Auth keys → copy the **일반 인증키** (regular auth key) value\n\n\u003e ⚠️ **Important — keys take ~24 hours to activate.**\n\u003e\n\u003e Even after the portal shows \"처리상태: 승인\" (status: approved) and \"활용기간: 오늘부터\" (effective today), the actual API gateway's auth module needs **~24 more hours** to register the key.  If you see \"API key is not valid\" right after applying, that's expected — **come back the next day and retry**.\n\u003e\n\u003e If still failing after 24 h:\n\u003e - Verify the dataset name is exactly **서울특별시_정류소정보조회 서비스** (similarly-named datasets exist)\n\u003e - Call data.go.kr support at **1566-0025**\n\u003e - Or unregister + re-apply on My Page (gets a fresh key)\n\n---\n\n### 🔌 Activation switch — shared between Seoul Bus / Korea Bus\n\nBoth flows create a `switch.\u003cflow\u003e_\u003cid\u003e_update_active` entity per stop. The coordinator only polls the API **while this switch is ON**. When OFF it keeps the last fetched data on the entities and skips the API call entirely.\n\n**Why useful**:\n- Saves daily-quota calls (especially Seoul Bus 1,000/day limit)\n- No reason to poll at 4 AM or while you're away\n- HA automations can flip it on/off precisely when needed\n\n**Defaults**:\n- Fresh install → **starts ON** (data shows up immediately)\n- After restart → RestoreEntity restores the user's last ON/OFF choice\n\n**Automation example — poll only during commute windows + proximity**:\n\n```yaml\nalias: Toggle bus polling by time + distance\nmode: restart\ntriggers:\n  - at: \"06:30:00\"          # morning commute window opens\n    id: morning_on_time\n    trigger: time\n  - entity_id: sensor.\u003cdistance-to-stop\u003e\n    above: 1000\n    id: morning_off_dist\n    trigger: numeric_state\n  - at: \"17:30:00\"\n    id: evening_on_time\n    trigger: time\n  - entity_id: sensor.\u003cdistance-to-stop\u003e\n    below: 200\n    id: evening_off_dist\n    trigger: numeric_state\nactions:\n  - choose:\n      - conditions:                                # morning + workday + near home\n          - condition: trigger\n            id: morning_on_time\n          - condition: state\n            entity_id: binary_sensor.workday_sensor\n            state: \"on\"\n          - condition: numeric_state\n            entity_id: sensor.\u003cdistance-to-stop\u003e\n            below: 200\n        sequence:\n          - service: switch.turn_on\n            target:\n              entity_id: switch.seoul_bus_*****_update_active\n      - conditions:                                # moved away from stop → OFF\n          - condition: trigger\n            id: morning_off_dist\n        sequence:\n          - service: switch.turn_off\n            target:\n              entity_id: switch.seoul_bus_*****_update_active\n      - conditions:                                # evening commute opens\n          - condition: trigger\n            id: evening_on_time\n        sequence:\n          - service: switch.turn_on\n            target:\n              entity_id: switch.seoul_bus_*****_update_active\n      - conditions:                                # arrived home → OFF\n          - condition: trigger\n            id: evening_off_dist\n        sequence:\n          - service: switch.turn_off\n            target:\n              entity_id: switch.seoul_bus_*****_update_active\n```\n\n→ Zero API calls outside commute windows.\n\n**Conditional dashboard card** (with HACS `state-switch`):\n```yaml\ntype: custom:state-switch\nentity: switch.seoul_bus_*****_update_active\nstates:\n  on:\n    type: entities\n    entities:\n      - sensor.seoul_bus_*****_*****_now\n      - sensor.seoul_bus_*****_*****_next\n      - button.seoul_bus_*****_refresh\n  off:\n    type: custom:button-card\n    color_type: blank-card     # card disappears when switch is OFF\n```\n\n---\n\n### ⚙️ Stop management (Seoul Bus / Korea Bus)\n\nYou don't need to delete-and-re-register to add stops or change routes:\n\n**Settings → Devices \u0026 Services → \"한국 컴포넌트 키트\" card → \"Configure\"** → menu:\n\n| Menu item | Action |\n|---|---|\n| 🚏 Add stop | New stop (Seoul: enter ARS-ID / Korea Bus: search by name) |\n| 🗑 Remove stop(s) | Multi-select |\n| 🚌 Edit routes for a stop | Change which routes get tracked for an existing stop |\n| 🔑 Change API key (Seoul only) | Live-validates the new key before saving |\n| ⏱ Change poll interval (Korea Bus only) | 30 s ~ 1 h |\n| ✅ Save \u0026 Finish | Commit all changes + auto-reload |\n\nClosing with the X discards pending edits (transactional pattern).\n\n---\n\n### 🎁 8 ready-made automation blueprints\n\n#### Seoul Bus ↔ Korea Bus compatibility\n\n| Blueprint | 🚌 Seoul Bus | 🚍 Korea Bus |\n|---|:---:|:---:|\n| Departure alert | ✅ | ✅ |\n| Get-off alert | ✅ | ✅ |\n| Last-bus alert | ✅ | ✅ |\n| Full / crowded alert | ✅ | ❌ (KakaoMap response lacks full-bus field) |\n| Proximity polling toggle (location-aware) | ✅ | ✅ |\n| Leaving-home alert (location-aware) | ✅ | ✅ |\n| Destination-arrival get-off alert (location-aware) | ✅ | ✅ |\n| Commute auto mode (location-aware) | ✅ | ✅ |\n\n→ **7 of 8 work on either flow**. Korea Bus users get the full automation toolbox bar one Seoul-only feature.\n\n#### Notify input — action selector\n\nEvery blueprint's notify input is an **HA action selector**.  On import:\n- pick your notify service (e.g. `notify.mobile_app_my_phone`) from the UI dropdown\n- the default `title` / `message` use `{{ alert_title }}` / `{{ alert_message }}` — internal variables fill these for you\n- feel free to swap in `notify.telegram`, `media_player.tts.google_say`, or any other action you prefer\n\nPatterns from Korea's public-data bus-app catalog, shipped as HA blueprints.\n\n| Blueprint | Trigger | Use case |\n|---|---|---|\n| 🚌 **Departure alert** | `native_value (TIMESTAMP)` enters N-minute window | \"Bus arrives in N min. Leave home now.\" push |\n| 🔔 **Get-off alert** | `current_stop` attribute changes | While on the bus, alert N stops before destination |\n| 🌙 **Last-bus alert** | `last_vehicle` / `is_last` attribute flips | \"This is the last bus tonight\" push |\n| 🚨 **Full / crowded alert** | full binary_sensor goes ON + `congestion` changes | Seoul Bus only — pings the next-bus ETA |\n\n**Import** (one-click via UI):\n\n1. HA → Settings → Automations → Blueprints → **Import Blueprint**\n2. Paste one of these URLs → **Preview** → **Import**\n\n```\nDeparture:  https://github.com/redchupa/kr_component_kit/blob/main/blueprints/automation/kr_component_kit/bus_departure_alert.yaml\nGet-off:    https://github.com/redchupa/kr_component_kit/blob/main/blueprints/automation/kr_component_kit/bus_alight_alert.yaml\nLast bus:   https://github.com/redchupa/kr_component_kit/blob/main/blueprints/automation/kr_component_kit/bus_lastride_alert.yaml\nFull/crowd: https://github.com/redchupa/kr_component_kit/blob/main/blueprints/automation/kr_component_kit/bus_crowded_alert.yaml\n```\n\n3. **Create Automation** → pick the blueprint → fill in sensor + notify target + minutes → Save\n\n\u003e 💡 Push notifications use **HA Companion App** (iOS / Android) — the service name is `notify.mobile_app_\u003cphone_name\u003e` where `\u003cphone_name\u003e` is whatever you set during Companion App registration.\n\n---\n\n### 📱 4 location-aware blueprints — leverages HA Companion App device tracking\n\nUse the **device_tracker** from your phone (auto-tracked by Companion App) to build automations a regular bus app can't.\n\n| Blueprint | What it does |\n|---|---|\n| 🚏 **Proximity-based polling toggle** | Phone enters bus-stop zone → activation switch ON; leaves → OFF after N min |\n| 🏠 **Leaving-home alert** | Phone leaves `zone.home` → push the next bus ETA |\n| 📍 **Destination-arrival get-off alert** | Phone enters destination zone → push (\"get ready to get off\") — **catches you even if you fell asleep on the bus** |\n| 🌍 **Auto commute mode** | Time + location → switch auto ON/OFF (mirrors the upstream Murianwind/seoul_bus automation pattern) |\n\n**Prerequisite — make the zones**:\n1. HA → Settings → **Areas \u0026 Zones** → Add Zone\n2. Enter the lat/lon of the bus stop (or office/school) — find on [KakaoMap](https://map.kakao.com)\n3. Radius: 100–200 m for stops, 200–300 m for workplaces\n\n**Import URLs**:\n```\nProximity toggle:    https://github.com/redchupa/kr_component_kit/blob/main/blueprints/automation/kr_component_kit/stop_proximity_toggle.yaml\nLeaving-home alert:  https://github.com/redchupa/kr_component_kit/blob/main/blueprints/automation/kr_component_kit/leaving_home_alert.yaml\nArrival alight alert:https://github.com/redchupa/kr_component_kit/blob/main/blueprints/automation/kr_component_kit/arrival_alight_alert.yaml\nCommute auto mode:   https://github.com/redchupa/kr_component_kit/blob/main/blueprints/automation/kr_component_kit/commute_auto_mode.yaml\n```\n\nCompose them:\n- Proximity toggle + leaving-home alert → polling starts automatically when you head out, plus the next bus ETA push\n- Arrival alight alert → no more missed stops if you doze off on the bus\n- Commute auto mode → polls only when you're realistically using the bus (saves daily-quota calls)\n\n---\n\n## ⚙️ Registration \u0026 reconfiguration\n\n### Adding a new entry\nSettings → Devices \u0026 Services → **+ Add Integration** → `한국 컴포넌트 키트` → pick service.\n\n\u003e One integration menus 13 services — add them one at a time. **Same service can be registered multiple times for different regions** (e.g., pharmacy for your district + your in-laws' district = 3 separate entries).\n\n### Changing API keys / regions after setup\nThe relevant entry's **\"Configure\"** button → edit. *(No need to delete-and-reregister; entities and automations preserved.)*\n\n### Where to get each non-API-key input\n\n| Service | Where |\n|---|---|\n| ⚡ **KEPCO** | Your KEPCO website ID / password (2FA not supported) |\n| 💧 **Arisu** | Paper bill or [Arisu Cyber Customer Center](https://i-arisu.seoul.go.kr) → 요금조회 (Bill Inquiry) → left sidebar shows 수용가번호 (customer number) + 고객명 (customer name) |\n| 🏠 **GasApp** | Contract number from the GasApp mobile app → My Info. Token + member ID via packet capture (mitmproxy / Charles) of the mobile-app HTTPS request headers `X-Token` / `X-Member` (⚠️ advanced) |\n| 🌍 **Earthquake coordinates** | Defaults to Seoul City Hall (`37.5665, 126.978`). **Set your home coordinates.** Default radius 200 km / minimum magnitude 3.0 |\n\n---\n\n## 🎁 Entities you'll get\n\n\u003e Entity IDs are auto-romanized from Korean (e.g., device `약국 - 시흥시` + entity `운영 약국 수` → `sensor.yaggug_siheungsi_unyeong_yaggug_su`). To find the exact ID, search by **friendly name** in Developer Tools → States.\n\n| Service | Friendly names | Key attributes |\n|---|---|---|\n| 💊 Pharmacy | `운영 약국 수` (\"Operating Pharmacy Count\") | `pharmacies[]` (up to 50: name/address/phone/lat/lon/today_hours/`open_now`/duty_time), `total`, `shown`, `open_now_count` |\n| 🚨 Safety Alert | `최신 안전알림`, `안전알림 수`, `오늘 안전알림 여부` (binary), `안전알림 이벤트` (event) | `latest`, `alerts[]`, `count` |\n| 📢 Disaster Alert | `최신 재난문자`, `재난문자 수`, `재난문자 이벤트` (event) | `level`, `area`, `disaster_type` |\n| 🌪️ Weather Warning | `호우 특보`/`강풍 특보`/`한파 특보`/... (12 event entities) | state: `advisory`/`warning`/`pre_*`/`cancelled`/`none`, `start_time`, `end_time` |\n| 🌍 Earthquake | `지진 경보` (event) | `magnitude`, `location`, `distance_km`, `datetime` |\n| ⛅ Forecast | Single weather entity — compatible with HA's standard Weather card | hourly/daily forecast service |\n| 🌫️ AirKorea | `PM10 미세먼지`, `PM2.5 초미세먼지`, `O₃ 오존`, `NO₂`, `SO₂`, `CO`, `통합대기질지수` + binary `대기질 경보` + event + calendar `대기질 예보` | Grade attribute attached |\n| ⚡ KEPCO | `현재 사용량` (kWh), `지난달 요금` (KRW), `예상 요금`, `고객번호`, `전력구분` | — |\n| 💧 Arisu | `수도 요금` (KRW), `사용량` (㎥), `청구월` | `billing_month`, `customer_info`, `arrears_info` |\n| 🏠 GasApp | `청구 제목`, `총 요금` (KRW) | — |\n| ⛽ Fuel | `전국 평균가`, `최저가` (per sido × fuel-type combo) | `ranking[]` (top 5 stations) |\n| 🏫 School | `급식` (\"Lunch\"), `학교 정보` + calendar entities for academic schedule and timetable | Lunch: `menu`, `calorie`, `allergy_codes` |\n| 🚌 Transit | `\u003cstation/stop\u003e ... 도착` (TIMESTAMP — HA auto-shows \"N min later\") | — |\n\n---\n\n## 🤖 Natural-language queries (LLM, optional)\n\nIf you expose this integration to HA's **Assist + LLM** (OpenAI / Google / Ollama / etc.), you can ask in natural Korean:\n\n| Query | Service |\n|---|---|\n| \"지금 영업중인 가까운 약국 알려줘\" (\"Find nearby pharmacies open now\") | 💊 Pharmacy |\n| \"오늘 미세먼지 어때?\" (\"How's the air quality today?\") | 🌫️ AirKorea |\n| \"내일 비 와?\" (\"Will it rain tomorrow?\") | ⛅ KMA |\n| \"오늘 급식 뭐야?\" (\"What's for school lunch today?\") | 🏫 School |\n| \"다음 버스 언제 와?\" (\"When's the next bus?\") | 🚌 Transit |\n\nWithout LLM exposure, regular sensor/event/weather entities work as normal — no extra setup required.\n\n---\n\n## ❓ FAQ\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eDo I have to register all 13 services?\u003c/b\u003e\u003c/summary\u003e\n\nNo. Register only what you want. Services you don't register create zero entities and consume no resources.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eAre any of these paid?\u003c/b\u003e\u003c/summary\u003e\n\n**All free.** Korean government / public-corporation OpenAPIs; this integration adds no cost of its own. Each API has daily call quotas (typically 10,000 – 1,000,000/day) — never an issue for single-household use.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eI'm intimidated by API key signups. What can I try first?\u003c/b\u003e\u003c/summary\u003e\n\n**Four services work without any API key**:\n- 🚨 **Safety Alert** — pick a region (scraping-based)\n- ⚡ **KEPCO / 💧 Arisu / 🏠 GasApp** — your own account (not an API key)\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eI live outside Seoul. Does this work?\u003c/b\u003e\u003c/summary\u003e\n\nMost services work nationwide. **Seoul-only**: Arisu (water), Seoul subway real-time arrivals. Everything else is countrywide.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eHow do I change my API key or region after setup?\u003c/b\u003e\u003c/summary\u003e\n\nSettings → Devices \u0026 Services → **한국 컴포넌트 키트** card → that entry's **Configure** button → edit. No delete-and-reregister needed; entities + automations preserved.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eCan I register the same service multiple times for different regions?\u003c/b\u003e\u003c/summary\u003e\n\nYes. Register the pharmacy service for your district + your in-laws' district + your parents' district — three independent device/entity sets.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eHow do I send phone notifications when an alert comes in?\u003c/b\u003e\u003c/summary\u003e\n\nCombine HA Automation with the Companion app's `notify.mobile_app_*` service. Minimal example:\n\n```yaml\nautomation:\n  - alias: \"Disaster alert → phone push\"\n    trigger:\n      - platform: state\n        entity_id: sensor.\u003cyour_disaster_message_entity\u003e\n    condition:\n      - condition: template\n        value_template: \"{{ trigger.to_state.state not in ['없음', 'unknown', 'unavailable'] }}\"\n    action:\n      - service: notify.mobile_app_\u003cyour_phone\u003e\n        data:\n          title: \"🚨 Disaster Alert\"\n          message: \"{{ trigger.to_state.state }}\"\n```\n\nLook up entity IDs by friendly name in Developer Tools → States.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eWhere are my credentials stored?\u003c/b\u003e\u003c/summary\u003e\n\nIn Home Assistant's internal storage (`.storage/`) only. Passwords are sent only to the respective service's official login page (e.g., KEPCO / Arisu). See [Disclaimer](#️-disclaimer).\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eHow do I update?\u003c/b\u003e\u003c/summary\u003e\n\nHACS shows a red dot on **HACS → Integrations → KR Component Kit** when a new release is available. Click → UPDATE → restart HA. Existing config + entities preserved.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eMy new-build apartment isn't in the district dropdown.\u003c/b\u003e\u003c/summary\u003e\n\nGovernment administrative codes occasionally lag for newly-built areas. Pick the nearest adjacent district. KMA forecasts are 5 km × 5 km grids anyway, so the actual weather data is nearly identical.\n\u003c/details\u003e\n\n---\n\n## 🔄 Update intervals\n\n| Category | Service | Interval |\n|---|---|---|\n| Real-time | Bus / Subway | 1–2 min |\n| Safety | Disaster, Safety Alert, KEPCO | 5 min |\n| Safety | Earthquake, Weather Warning | 10–15 min |\n| Environment/Utility | GasApp, KMA Forecast, AirKorea | 20–30 min |\n| Living | Arisu, Pharmacy, Fuel | 1 hour |\n| Living | School (meals/timetable) | 6 hours |\n\n\u003e 💡 Pharmacy `open_now` (currently open) is **recomputed live each dashboard render** independently of data refresh.\n\n---\n\n## ⚠️ Known limitations (honest disclosure)\n\nSome services use non-official paths (HTML scraping, mobile-app APIs). External-site changes can temporarily break them. All known weak spots:\n\n| Service | Limit |\n|---|---|\n| 🚨 **Safety Alert / 📢 Disaster Alert** | `safekorea.go.kr` HTML scraping / `safetydata.go.kr` API. May break during government-site maintenance. Disaster Alert uses 5-profile Chrome impersonation rotation; Safety Alert uses single `chrome120` profile |\n| ⚡ **KEPCO** | Login-success URL markers are hardcoded — if KEPCO renames its post-login page, detection fails. 2FA not supported. Look for `KEPCO login: unknown redirect` in HA logs to debug |\n| 💧 **Arisu** | HTML scraping of `i121.seoul.go.kr` — Seoul city website structure changes can break parsing. Assumes 9-digit customer number |\n| 🏠 **GasApp** | Uses the mobile-app internal API. Token extraction requires packet-capture tooling (mitmproxy / Charles) — high barrier for non-technical users |\n| 🌫️ **AirKorea Living Index (UV / air stagnation)** | Code calls `V4` endpoint, but the portal seems upgraded to `V5` — live operation unverified. Required pollution datasets are unaffected |\n| 🏫 **NEIS** | `INFO-200` (no-data, normal) is currently treated as an error — log noise possible on school holidays / vacation periods (no functional impact) |\n\n\u003e ✅ **Verified working** as of release `v4.2.18`: Pharmacy (live HA query showed sensor state=20 with full attribute payload). Safety Alert (cascading district registration successful). Disaster Alert (safetydata.go.kr key issued → entities live, 2026-05-14).\n\n\u003e 🐛 **Something broke after a site change?** Open a [GitHub issue](https://github.com/redchupa/kr_component_kit/issues) and a fix PR is usually quick.\n\n---\n\n## 🐛 Troubleshooting\n\n### API key auth failures\n- After applying, expect **1–2 hours** of activation lag (especially agency-issued keys)\n- Within `data.go.kr`, **each dataset needs its own 활용신청** — a pharmacy-approved key returns 403 against weather warnings\n- Disaster Alert needs `safetydata.go.kr` specifically — `data.go.kr` keys do not work\n- `401` = wrong key, `403` = right key but no application approval for that dataset\n- Hit daily quota? Check My Page traffic stats\n\n### Login failures (KEPCO / Arisu / GasApp)\n- Confirm the website itself lets you log in normally\n- Accounts with 2FA enabled are not supported\n- GasApp tokens expire frequently — re-extract from the app\n\n### Empty data (Safety Alert / Disaster Alert)\n- If no recent messages in your area, state shows `없음` (\"none\") — normal\n- Government site maintenance? Wait and it auto-recovers\n\n### Still stuck\n\n1. **Check logs** — Settings → System → Logs → search `kr_component_kit`\n2. **Open an issue** — [GitHub Issues](https://github.com/redchupa/kr_component_kit/issues) — include:\n   - Which service (e.g., \"Pharmacy — Seoul Gangnam-gu\")\n   - HA version + this integration version\n   - Error log (mask any personal info / keys)\n   - Steps you've tried\n\n\u003e 💬 Both English and Korean issues welcome — responses in your language.\n\n---\n\n## 📋 Requirements\n\n- **Home Assistant** 2023.1.0 or later\n- **Python** 3.11+ (HA's own requirement)\n- Internet connection (each service hits its respective API)\n- Auto-installed Python packages: `curl_cffi\u003e=0.7.0`, `beautifulsoup4\u003e=4.12.0` (declared in manifest.json)\n\n---\n\n## ⚠️ Disclaimer\n\n- This integration uses **authenticated web scraping or mobile-app internal APIs** rather than official OpenAPIs for KEPCO, Arisu, GasApp, and Safety Alert\n- Provider policy changes may break these services without warning\n- A few government-site clients use `verify=False` (TLS-verification bypass) to work around the sites' TLS configuration quirks — review the source if this concerns you\n- All credentials (IDs, passwords, tokens, API keys) are stored only in Home Assistant's local storage. Nothing is sent externally\n- This is an **unofficial third-party integration** — not affiliated with the Korean government or any of the listed agencies. Use at your own risk.\n\n---\n\n## 🙏 Credits \u0026 Acknowledgments\n\nThe two bus modules in this integration are built on top of work by these open-source projects.  Deep thanks to the original authors.\n\n| Module | Author | Source |\n|---|---|---|\n| 🚍 Korea Bus (`korea_bus/`) | **luiseok** | \u003chttps://github.com/luiseok/ha-korea-bus-arrival\u003e |\n| 🚌 Seoul Bus (`seoul_bus/`) — origin | **miumida** | \u003chttps://github.com/miumida/seoul_bus\u003e |\n| 🚌 Seoul Bus (`seoul_bus/`) — patterns | **Murianwind** | \u003chttps://github.com/Murianwind/seoul_bus\u003e |\n\n### What this integration adds on top\n\nThe base flows came from the works above.  As we absorbed them into the `kr_component_kit` integration pattern, we layered the following on:\n\n- **Single integration for both flows** — KakaoMap (Korea Bus) + Seoul official API (Seoul Bus) under one menu\n- **Migration safety net** — `async_migrate_entry` handles the `kakao_bus` → `korea_bus` domain rename and the `_api_active` → `_update_active` suffix swap so existing users' automations don't break\n- **TIMESTAMP-based sensors** — HA renders \"N min from now\" automatically, native to Weather/Calendar UX\n- **Stale-data preservation** — last successful response stays on the entity during transient API errors\n- **Activation switch** (continuing the Murianwind pattern) + **refresh button**\n- **Low-floor / Full-bus binary_sensors** (uses Seoul `busType` / `isFullFlag` / `congestion` fields the original wrapper didn't expose)\n- **Multi-stop entries + options menu** for add / remove / edit routes without re-registering\n- **8 automation blueprints** (departure / alight / lastride / crowded / proximity-toggle / leaving-home / arrival-alight / commute-auto-mode)\n- **i18n in 4 languages** (strings + en + ko + ja)\n\nWithout the upstream work, this integration wouldn't exist. 🙏\n\n---\n\n## 🤝 Contributing \u0026 License\n\n- **License**: [MIT](LICENSE) — free to use, modify, and redistribute\n- Issues and PRs welcome: \u003chttps://github.com/redchupa/kr_component_kit/issues\u003e\n- Suggestions for new Korean services to add are very welcome\n\n---\n\n## ⭐ Star if useful\n\nA single Star ⭐ at the top right goes a long way. More stars → higher chance of HACS Default Repository acceptance → more Korean users can discover this.\n\n[![Star History Chart](https://api.star-history.com/svg?repos=redchupa/kr_component_kit\u0026type=Date)](https://star-history.com/#redchupa/kr_component_kit\u0026Date)\n\n---\n\n## ☕ Donations\n\nIf this saved you time, a coffee would be appreciated 🙏\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003cb\u003eToss (Korean)\u003c/b\u003e\u003cbr/\u003e\n      \u003cimg src=\"https://raw.githubusercontent.com/redchupa/kr_component_kit/main/images/toss-donation.png\" alt=\"Toss donation QR\" width=\"200\"/\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003cb\u003ePayPal\u003c/b\u003e\u003cbr/\u003e\n      \u003cimg src=\"https://raw.githubusercontent.com/redchupa/kr_component_kit/main/images/paypal-donation.png\" alt=\"PayPal donation QR\" width=\"200\"/\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n**Made with ❤️ for Korean Home Assistant users**\n\n[hacs]: https://github.com/hacs/integration\n[hacsbadge]: https://img.shields.io/badge/HACS-Custom-orange.svg?style=for-the-badge\n[releases-shield]: https://img.shields.io/github/release/redchupa/kr_component_kit.svg?style=for-the-badge\n[releases]: https://github.com/redchupa/kr_component_kit/releases\n[commits-shield]: https://img.shields.io/github/commit-activity/y/redchupa/kr_component_kit.svg?style=for-the-badge\n[commits]: https://github.com/redchupa/kr_component_kit/commits/main\n[license-shield]: https://img.shields.io/github/license/redchupa/kr_component_kit.svg?style=for-the-badge\n[stars-shield]: https://img.shields.io/github/stars/redchupa/kr_component_kit.svg?style=for-the-badge\n[stars]: https://github.com/redchupa/kr_component_kit/stargazers\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredchupa%2Fkr_component_kit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fredchupa%2Fkr_component_kit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredchupa%2Fkr_component_kit/lists"}