나의 찾기 데이터 조회 프로필 분리

This commit is contained in:
seo
2026-07-16 18:59:36 +09:00
parent 921a3a3925
commit dfeb9f1592
2 changed files with 3 additions and 4 deletions
+1 -1
View File
@@ -58,7 +58,7 @@ PWA standalone으로 진입한 경우에는 설치형 앱 사용성을 우선해
실시간 화면은 현재 위치와 상태를 조회하고, 기본 기간 입력값에 해당하는 최근 하루 이동 기록도 지도에 함께 표시합니다. 라이브 모드의 기본 기간은 현재 시각 기준 24시간 전 정각부터 다음 정각까지이며, 정시가 지나면 입력 구간도 한 시간씩 같이 이동해 새 시간대 기록이 경로선에 계속 포함됩니다. 자동 위치 이동이 켜져 있어도 새 위치를 받을 때마다 경로선과 기록 요약을 같은 히스토리 기준으로 다시 그립니다. 기간 입력을 변경하면 해당 범위의 이동 기록을 `history=1` 옵션으로 다시 요청합니다. 서버는 Home Assistant 히스토리 API를 실행한 뒤 시간과 좌표가 같은 중복 지점만 제거하고, 설정 시간 안의 병합 지점을 전부 응답합니다. 실시간 화면은 현재 위치와 상태를 조회하고, 기본 기간 입력값에 해당하는 최근 하루 이동 기록도 지도에 함께 표시합니다. 라이브 모드의 기본 기간은 현재 시각 기준 24시간 전 정각부터 다음 정각까지이며, 정시가 지나면 입력 구간도 한 시간씩 같이 이동해 새 시간대 기록이 경로선에 계속 포함됩니다. 자동 위치 이동이 켜져 있어도 새 위치를 받을 때마다 경로선과 기록 요약을 같은 히스토리 기준으로 다시 그립니다. 기간 입력을 변경하면 해당 범위의 이동 기록을 `history=1` 옵션으로 다시 요청합니다. 서버는 Home Assistant 히스토리 API를 실행한 뒤 시간과 좌표가 같은 중복 지점만 제거하고, 설정 시간 안의 병합 지점을 전부 응답합니다.
상태 조회는 `seoul`, `main` Home Assistant `/states`를 모두 읽어 entity별로 병합합니다. 한쪽에만 의미 있는 값이 있으면 해당 값을 사용하고, 양쪽 모두 값이 있으면 더 최신 `last_updated` 또는 `last_changed` 값을 사용합니다. 선택된 상태의 attributes에 빈 값이 있으면 다른 쪽 attributes로 채워 빈칸을 줄입니다. 상태 조회는 `/custom/common/config.php``findmydevice_data_profiles`에 적힌 `seoul`, `main` Home Assistant `/states`를 모두 읽어 entity별로 병합합니다. 한쪽에만 의미 있는 값이 있으면 해당 값을 사용하고, 양쪽 모두 값이 있으면 더 최신 `last_updated` 또는 `last_changed` 값을 사용합니다. 선택된 상태의 attributes에 빈 값이 있으면 다른 쪽 attributes로 채워 빈칸을 줄입니다. 위치 갱신 명령은 서울 HA로만 보내지만, 데이터 조회는 서울과 목포/백업 HA를 계속 함께 사용합니다.
히스토리 조회도 `seoul`, `main` Home Assistant history를 모두 읽습니다. 서버는 시간과 좌표를 기준으로 중복 지점을 제거하고 시간순으로 병합합니다. 응답에는 병합 전 출처별 지점 수인 `historySourceCounts`도 포함합니다. 히스토리 조회도 `seoul`, `main` Home Assistant history를 모두 읽습니다. 서버는 시간과 좌표를 기준으로 중복 지점을 제거하고 시간순으로 병합합니다. 응답에는 병합 전 출처별 지점 수인 `historySourceCounts`도 포함합니다.
+2 -3
View File
@@ -90,8 +90,7 @@ function findmydevice_mobile_command(string $message, array $data = []): bool
function findmydevice_ha_profiles(): array function findmydevice_ha_profiles(): array
{ {
$config = custom_config(); $config = custom_config();
$refresh = $config['findmydevice_location_refresh'] ?? []; return array_values(array_unique(array_filter(array_map('strval', (array)($config['findmydevice_data_profiles'] ?? ['seoul', 'main'])))));
return array_values(array_unique(array_filter(array_map('strval', (array)($refresh['profiles'] ?? [$refresh['profile'] ?? 'seoul'])))));
} }
function findmydevice_state_timestamp(?array $state): int function findmydevice_state_timestamp(?array $state): int
@@ -353,7 +352,7 @@ if (isset($_GET['action']) && $_GET['action'] === 'webhook') {
$config = custom_config(); $config = custom_config();
$entities = $config['entities']; $entities = $config['entities'];
$findmydeviceHaProfiles = ['seoul', 'main']; $findmydeviceHaProfiles = findmydevice_ha_profiles();
$findmydeviceHomeConfig = is_array($config['findmydevice_home'] ?? null) ? $config['findmydevice_home'] : []; $findmydeviceHomeConfig = is_array($config['findmydevice_home'] ?? null) ? $config['findmydevice_home'] : [];
$findmydeviceHome = [ $findmydeviceHome = [
'latitude' => isset($findmydeviceHomeConfig['latitude']) ? (float)$findmydeviceHomeConfig['latitude'] : null, 'latitude' => isset($findmydeviceHomeConfig['latitude']) ? (float)$findmydeviceHomeConfig['latitude'] : null,