diff --git a/README.md b/README.md index 5d8fc10..1d020b5 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,9 @@ Home Assistant에 기록된 Galaxy Z Fold7의 위치, 배터리, 활동 상태, ```html - + +
+ ``` @@ -27,7 +29,7 @@ Home Assistant에 기록된 Galaxy Z Fold7의 위치, 배터리, 활동 상태, ## 구조 - `php/api.php`: Home Assistant 상태/히스토리 조회 API -- `js/main.js`: 지도 렌더링, 상태 갱신, 히스토리 표시 +- `js/main.js`: 화면 뼈대 자동 생성, 지도 렌더링, 상태 갱신, 히스토리 표시 - `css/style.css`: 기존 삽입 코드 호환용 공용 CSS import - `img/`: 지도 마커 및 언어 아이콘 @@ -39,6 +41,8 @@ Home Assistant에 기록된 Galaxy Z Fold7의 위치, 배터리, 활동 상태, 표시할 모바일 앱 센서 목록은 `/custom/common/config.php`의 `findmydevice_sensor_sections`에서 섹션 단위로 관리합니다. 화면 CSS 원본은 `/custom/common/css/findmydevice.css`를 사용합니다. 기존 운영 HTML이 `/custom/findmydevice/css/style.css`를 참조해도 호환 파일이 공용 CSS를 import합니다. +페이지 본문에는 `
`만 두면 됩니다. `main.js`는 `#mySettingContainer`가 없을 때 지도, 헤더, 설정/기록/위치/업데이트/배터리/활동 섹션과 iOS PWA 안내 영역을 자동으로 생성합니다. 기존처럼 전체 HTML을 직접 넣어둔 페이지에서는 이미 존재하는 `#mySettingContainer`를 그대로 사용합니다. + 위치 갱신 명령은 `/custom/common/config.php`의 `findmydevice_location_refresh` 설정을 사용합니다. `seoul`, `main` Home Assistant 프로필의 `notify.mobile_app_seocaegeonyi_z_fold7` 서비스로 Companion App notification command를 보냅니다. 자동 업데이트가 켜지면 Android high accuracy mode를 5초 간격으로 설정하고 `force_on`을 보낸 뒤 `request_location_update`와 `command_update_sensors`를 함께 호출합니다. 자동 업데이트 중에는 10초마다 위치 요청과 센서 업데이트 요청을 반복하고, 자동 업데이트를 끄거나 페이지를 벗어나면 `force_off`를 보냅니다. 집 판정 중심은 `/custom/common/config.php`의 `findmydevice_home` 설정을 사용합니다. 현재 집 좌표는 `37.558181, 127.204440`, 반경은 `50m`입니다. API 응답의 `home` 값을 브라우저가 사용하므로 설정 변경 시 집 원, 체류/외출 판정, GPS 튐 흡수 기준이 같은 좌표로 적용됩니다. diff --git a/js/main.js b/js/main.js index 478c91e..e0eabbb 100644 --- a/js/main.js +++ b/js/main.js @@ -445,8 +445,8 @@ const deviceLang = (navigator.language || navigator.userLanguage || "en").starts initialInfoOpened: false, historyBoundsFitted: false, }; -let langCode = localStorage.getItem("currentLang") || deviceLang, - lastAutoSwitchChecked, +let langCode = localStorage.getItem("currentLang") || deviceLang, + lastAutoSwitchChecked, lastUpdateSwitchChecked, lastHash, lastLat, @@ -455,13 +455,83 @@ let langCode = localStorage.getItem("currentLang") || deviceLang, map, marker, circle, - radiusInterval, - _overrideRange, - wakeLock = null; - -applyLanguage(langCode); - -document.querySelectorAll('.locateRow').forEach(row => { + radiusInterval, + _overrideRange, + wakeLock = null; + +function ensureFindMyDeviceShell() { + if (document.getElementById('mySettingContainer')) return; + + let mount = document.getElementById('findmydevice'); + if (!mount) { + mount = document.createElement('div'); + mount.id = 'findmydevice'; + document.body.prepend(mount); + } + + mount.innerHTML = ` +
+
+ +
Language Toggle
+
+
+
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + +
+ `; +} + +ensureFindMyDeviceShell(); +applyLanguage(langCode); + +document.querySelectorAll('.locateRow').forEach(row => { row.addEventListener('pointerdown', () => { row.style.background = '#d3d3d3'; });