Skip to main content

eldercare-sos

Hệ thống SOS khẩn cấp cho bà nội. Nhận trigger từ: nút vật lý Zigbee (qua Home Assistant), AI detection (từ eldercare-monitor), hoặc gia đình gõ "SOS" trong Zalo/Telegram. Escalation chain tự động: Level 1 (Zalo) → Level 2 (Phone) → Level 3 (gọi tất cả). Gửi kèm camera snapshot. Có cancel mechanism.

소스 정보

저장소
nclamvn/bom-cham
최근 소스 활동
2026년 2월 19일 18:39
감지된 SKILL.md 언어
베트남어
스타
26
포크
19

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
eldercare-sos
description
Hệ thống SOS khẩn cấp cho bà nội. Nhận trigger từ: nút vật lý Zigbee (qua Home Assistant), AI detection (từ eldercare-monitor), hoặc gia đình gõ "SOS" trong Zalo/Telegram. Escalation chain tự động: Level 1 (Zalo) → Level 2 (Phone) → Level 3 (gọi tất cả). Gửi kèm camera snapshot. Có cancel mechanism.
metadata
{"openclaw":{"emoji":"🆘","requires":{"config":"[Truncated]"}}}
# Eldercare SOS — Hệ thống khẩn cấp Skill này xử lý tình huống khẩn cấp cho bà nội. Khi được trigger, nó thực hiện escalation chain tự động: Zalo → Phone → gọi tất cả gia đình. ## Khi nào skill này được trigger ### 1. Nút SOS vật lý (qua Home Assistant) Bà hoặc ông bấm nút Zigbee. Kiểm tra entity `sensor.sos_button_action`: | Hành động | Giá trị sensor | Xử lý | |-----------|---------------|-------| | Bấm 1 lần | `single` | Bắt đầu từ **Level 1** (Zalo trước) | | Bấm 2 lần | `double` | Skip Level 1, vào thẳng **Level 2** (gọi điện) | | Giữ 3 giây | `long` | Skip Level 1+2, vào thẳng **Level 3** (gọi TẤT CẢ) | ### 2. AI auto-detect (từ eldercare-monitor) Khi skill eldercare-monitor phân loại mức KHẨN CẤP → trigger SOS bắt đầu từ **Level 2** (vì AI đã xác nhận nghiêm trọng). ### 2b. Fall Detection (từ eldercare-fall-detect) Khi skill eldercare-fall-detect phát hiện ngã VÀ bà không phản hồi TTS xác nhận (2 lần, tổng 45 giây) → trigger SOS bắt đầu từ **Level 2**. Source = `"fall_detect"`. Kèm theo 2 ảnh camera snapshot (trước và sau TTS). ### 3. Manual (gia đình gõ chat) Khi ai đó gõ "SOS", "cứu", "khẩn cấp" trong Zalo hoặc Telegram → trigger từ **Level 1**. ## QUAN TRỌNG: Kiểm tra duplicate **Trước khi bắt đầu SOS mới**, kiểm tra memory `eldercare_sos_active`: - Nếu đã có SOS active (`resolved` = false) → KHÔNG tạo SOS mới - Log: "SOS đã active từ {triggered_at}. Không tạo duplicate." - Nếu SOS cũ đã resolve → tiếp tục tạo mới ## Hành động tức thì (T+0, MỌI level) Ngay khi SOS trigger, thực hiện ĐỒNG THỜI: ### 1. Bật đèn phòng bà sáng tối đa Dùng tool `home_assistant`: ``` action: call_service domain: light service: turn_on target_entity_id: light.grandma_room service_data: { "brightness": 255 } ``` ### 2. TTS thông báo cho bà qua loa (VOLUME CAO) Dùng tool `home_assistant`: ``` action: call_service domain: tts service: speak target_entity_id: media_player.grandma_room service_data: { "message": "Bà ơi, đã gửi tín hiệu cho người nhà rồi ạ. Người nhà sẽ liên lạc ngay!", "language": "vi" } ``` Nếu TTS service không available, dùng `media_player.volume_set` với volume 1.0 trước, rồi phát audio. ### 3. Chụp camera snapshot Dùng tool `camsnap` hoặc `home_assistant`: ``` action: call_service domain: camera service: snapshot target_entity_id: camera.grandma_room service_data: { "filename": "/config/www/sos_snapshot.jpg" } ``` Lưu path ảnh để gửi kèm message. ### 4. Lưu trạng thái SOS vào memory ``` eldercare_sos_active: { "triggered_at": "{ISO timestamp}", "source": "button_single | button_double | button_long | ai_detect | manual", "start_level": 1 | 2 | 3, "current_level": 1, "resolved": false } ``` ## Level 1: Zalo Alert (T+3 giây) Gửi tin nhắn Zalo cho contact ưu tiên #1 (đọc từ memory `eldercare_contacts`): ``` 🆘 SOS — BÀ NỘI CẦN HỖ TRỢ! 📍 Thời gian: {giờ:phút ngày/tháng} 📸 [Ảnh camera phòng bà] 🔊 Nguồn: {nút bấm / AI phát hiện / manual} Reply "OK" hoặc "đã xử lý" để xác nhận. ⏰ Nếu không phản hồi trong 3 phút → hệ thống sẽ tự gọi điện. ``` Đồng thời gửi Zalo group gia đình cùng nội dung. **Chờ 3 phút (180 giây).** Trong thời gian chờ, kiểm tra reply: - Nếu ai đó reply "OK", "đã xử lý", "ổn rồi", "cancel" → Chuyển đến phần **Cancel SOS** bên dưới - Nếu không ai reply → Tiếp tục **Level 2** ## Level 2: Phone Call (T+180 giây) Nếu Level 1 không có phản hồi, hoặc SOS bắt đầu từ Level 2: 1. Gửi Zalo: `⚠️ Không ai phản hồi Zalo. Đang gọi điện cho {contact #1}...` 2. Dùng tool `voice_call` (skill voice-call): ``` action: initiate_call to: "{phone contact #1}" message: "Khẩn cấp! Bà nội cần hỗ trợ. Vui lòng kiểm tra ngay. Bấm phím bất kỳ để xác nhận." ``` 3. Nếu contact #1 không nghe (30 giây timeout) → gọi contact #2 4. **Chờ 3 phút (180 giây)** 5. Nếu không ai phản hồi → Tiếp tục **Level 3** ## Level 3: ALL (T+360 giây) Nếu Level 2 không có phản hồi, hoặc SOS bắt đầu từ Level 3 (nút giữ 3s): 1. Gọi điện ĐỒNG THỜI tất cả contacts trong danh sách 2. Chụp thêm 1 camera snapshot mới 3. Gửi Zalo + Telegram cho TẤT CẢ: ``` 🚨 KHẨN CẤP: CHƯA AI PHẢN HỒI SAU 6 PHÚT! 📸 [Ảnh camera mới nhất] 📞 Đang gọi tất cả người thân. Vui lòng liên hệ ngay! ``` 4. Log: `eldercare_sos_level3: {timestamp} — no response after 6 minutes, calling all contacts` ## Cancel SOS Khi ai đó phản hồi (Zalo/Telegram) với các từ: **"OK"**, **"đã xử lý"**, **"ổn rồi"**, **"cancel"**, **"hủy"**: 1. **Cancel ngay** mọi timer/escalation đang chờ 2. **Gửi cho TẤT CẢ contacts:** ``` ✅ SOS đã được xử lý bởi {tên người reply}. 🕐 Lúc: {giờ:phút} ⏱️ Thời gian phản hồi: {số phút} phút 📊 Mức escalation cao nhất: Level {X} ``` 3. **HA: Đèn về bình thường** ``` action: call_service domain: light service: turn_on target_entity_id: light.grandma_room service_data: { "brightness": 100 } ``` 4. **Cập nhật memory:** ``` eldercare_sos_active: { ...previous, "resolved": true, "resolved_by": "{tên}", "resolved_at": "{timestamp}", "max_level_reached": {1|2|3}, "response_time_seconds": {số giây từ trigger đến resolve} } ``` ## Nút SOS mapping tóm tắt ``` Bấm 1 lần (single): T+0s → Đèn + TTS + Snapshot T+3s → Zalo Level 1 T+183s → Phone Level 2 (nếu chưa OK) T+363s → ALL Level 3 (nếu chưa OK) Bấm 2 lần (double): T+0s → Đèn + TTS + Snapshot T+3s → Zalo + Phone Level 2 ngay T+183s → ALL Level 3 (nếu chưa OK) Giữ 3 giây (long): T+0s → Đèn + TTS + Snapshot T+3s → Gọi TẤT CẢ + Zalo + Telegram Level 3 ngay ``` ## Quy tắc an toàn - **KHÔNG** tự động gọi 115 (cấp cứu) — chỉ gia đình tự quyết định - **KHÔNG** tạo SOS mới khi đã có SOS active - **PHẢI** có cancel mechanism - **PHẢI** log đầy đủ cho daily report - **PHẢI** gửi camera snapshot kèm mọi message cảnh báo - TTS cho bà phải **CHẬM, RÕ RÀNG, VOLUME CAO** ## Contacts Đọc từ memory `eldercare_contacts`. Sắp xếp theo `priority` (1 = cao nhất). Nếu chưa có contacts, gửi message cảnh báo vào channel hiện tại: "⚠️ SOS triggered nhưng chưa có contacts! Cần config eldercare_contacts trong memory." ## Config Override (đọc từ memory) Trước khi dùng giá trị mặc định, **PHẢI** kiểm tra memory: 1. Dùng memory search query `eldercare_sos_config` 2. Nếu tìm thấy → parse JSON, dùng config từ memory 3. Nếu KHÔNG tìm thấy → dùng defaults trong SKILL.md này Các field có thể override: - `escalation.level1_wait_seconds` (mặc định: 180) - `escalation.level2_wait_seconds` (mặc định: 180) - `tts.message` (custom message TTS cho bà) - `tts.volume` (mặc định: 1.0) ## Offline Queue Integration Khi gửi alert thất bại (Zalo hoặc Telegram error): 1. Lưu message vào memory với key: `eldercare_queue_{timestamp}` 2. Format: ```json { "id": "queue_{timestamp}_{random}", "created_at": "ISO timestamp", "source_skill": "eldercare-sos", "priority": "EMERGENCY", "channels": ["zalo", "telegram"], "message": "Nội dung SOS alert gốc", "target": "all", "retry_count": 0, "max_retries": 10, "last_retry_at": null, "status": "pending", "metadata": { "sos_level": 1, "source": "button_single | ai_detect | manual" } } ``` 3. Skill eldercare-offline-queue sẽ retry mỗi phút 4. EMERGENCY messages retry không backoff 3 lần đầu 5. Nếu Zalo fail → tự động thử Telegram 6. Nếu mất mạng > 30 phút → TTS local + đèn flash qua HA LAN **QUAN TRỌNG:** Mỗi level escalation (Level 1, 2, 3) nếu gửi thất bại đều tạo queue entry riêng. Ví dụ Level 1 fail → queue entry priority EMERGENCY. Level 2 fail → thêm 1 queue entry nữa. ## Multi-Elder Support Skill này hỗ trợ nhiều người thân: 1. Đọc `eldercare_profiles` từ memory 2. Nếu không tồn tại → auto-migrate default profile "ba_noi" (xem skill eldercare-profiles) 3. Loop qua tất cả active elders 4. Với mỗi elder: - Dùng `elder.ha_entities.*` thay vì hardcoded entity names - Dùng `eldercare_{elder.id}_*` làm memory key prefix - Dùng `elder.name` trong messages/TTS - Dùng `elder.contacts` cho alert recipients (fallback global contacts) - Dùng `elder.tts.*` cho TTS settings ### Thay đổi cụ thể - `sensor.sos_button_action` → `elder.ha_entities.sos_button` - `light.grandma_room` → `elder.ha_entities.light` - `media_player.grandma_room` → `elder.ha_entities.media_player` - `camera.grandma_room` → `elder.ha_entities.camera` - Memory: `eldercare_sos_active` → `eldercare_{elder.id}_sos_active` - Memory: `eldercare_sos_config` → `eldercare_{elder.id}_sos_config` - Contacts: `eldercare_contacts` → `elder.contacts` - TTS: Dùng `elder.tts.volume`, `elder.tts.rate` cho TTS service
GitHub에서 보기