본문 바로가기

IT/스마트폰 자동화(TASKER)

Google Pixel(구글픽셀) 구글포토 즉시/강제 동기화

반응형

 

개요

 

당 포스팅에서는 folder sync와  안드로이드 자동화앱  tasker + autoinput + join 을 사용하여 즉시/강제 자동화를 구현한 사례를 소개하고자 한다. 

 

항목

내가 사용한 방식

일반적인 방식

연동서버

시놀로지 NAS

MS OneDrive, Google Drive

연동앱 (메인to연동서버)

folder sync

folder sync

연동앱 (연동서버to픽셀)

folder sync

folder sync

후속작업

TASKER(유료)

Macrodroid

AUTOINPUT(유료)

JOIN(유료)

 

작성배경

atempest.tistory.com/entry/Google-Pixel%EA%B5%AC%EA%B8%80-%ED%94%BD%EC%85%80-%ED%99%9C%EC%9A%A9%ED%95%98%EC%97%AC-%EA%B5%AC%EA%B8%80-%ED%8F%AC%ED%86%A0-%EB%AC%B4%EC%A0%9C%ED%95%9C-%EC%82%AC%EC%9A%A9-2-%EC%83%81%EC%84%B8%EA%B5%AC%ED%98%84

 

Google Pixel(구글 픽셀) 활용하여 구글 포토 무제한 사용 (2) 상세구현

이전 포스팅에서 대략적인 컨셉을 소개하였고 당 포스팅에서 상세 구현 방법에 대해 다룬다. < 이전포스팅 > atempest.tistory.com/entry/Google-Pixel%EA%B5%AC%EA%B8%80-%ED%94%BD%EC%85%80-%ED%99%9C%EC%9A%A9%..

atempest.tistory.com

이전 포스팅에서 자동화를 나름 구현했지만 해결하지 못한 몇가지 이슈가 몇가지 있다. 

  • 메인폰에서 시놀로지로의 동기화 종종 멍때림
  • 시놀로지에서 픽셀로의 동기화도 종종 멍때림
  • 픽셀로 파일 동기화후 구글포토가 업로드 멍때림

    (결론 : 멍때림)

이럴때는 각 앱을 직접 켜줘야 동기화가 되는데 이걸 해결해보고자 다른분들께서 추천해준 폴더씽크를 살펴보기 시작했고  INSTANT SYNC 라는 기능이 있음을 발견했다.

 

INSTANT SYNC는 로컬==>원격 동기화 및 인터널 스토리지에 한해 작동한다고 한다.

 

그러나 이 기능역시 완벽하진 않았으며 (DS류 보다 더 자주 멍때리는 것 같기도 했다) 시놀로지에서 픽셀 방향은  instant sync 미지원으로 예약동기화를 사용할 수 밖에 없었다. 

원격->로컬은 instant sync 안된다

예약동기화로 동기화 목적은 달성하겠지만 동기화 할것도 없는데 주기적으로 동기화를 시도하며 쓸데없이 낭비되는 배터리가 마음에 걸렸고 Ondemand하게 그때그때 동기화가 됐으면 좋겠다고 생각해서 앞으로 설명하는 방식으로 구현하게 되었다. 

사실 굳이 이렇게 까지 하지않아도 사용자의 개입이 어느정도 있다면 충분히 동기화가 가능할것으로 보기는 하지만,

향후 비슷한 방식으로 구현하고자 하는분들께 조금이라도 도움이 되지 않을까 하는 생각에 포스팅으로 남긴다.

 

 

본론

 

즉시동기화 전체흐름도

설명의 편의를 위해 작업은 크게 4 부분으로 나눈다. (A~D)

 

[ 작업 A -1 ]
목적 : 메인폰에서 시놀로지로 강제/즉시 동기화

작업순번

발동조건

작업위치

A-1

카메라 저장폴더(DCIM) 새파일 인지

메인폰

메인폰 카메라 폴더(DCIM) 에서 File Modified EVENT를 통해 새로운 파일이 생기는 지를 인지하여 즉시 동기화 실행해줌 → 결과적으로 실패

 

실패사유 : 당 방법은 갤럭시 기본 카메라앱 동영상 메뉴 전환시 영상 미촬영시에도  file modify event가 지속적으로 발생함 (당연하게도 실제로 파일이 생기지 않음)

이번엔 성공한 방법.

 

작업순번

발동조건

작업위치

A-1

카메라 앱의 종료 + 카메라 저장폴더의 새파일 인지

메인폰

카메라 앱 종료를 exit task로 잡고 DCIM 폴더에서 List Files 로 새 파일이 생성됐는지 체크 → (성공)

 

카메라앱 종료후 DCIM 폴더를 뒤져 새파일이 감지되면 즉시 동기화 실행하는 컨셉. 

새 파일이 없으면(카메라앱을 단순히 켰다 그냥 껏다던가..) 동작하지 않는다.
( 단, 이 조건을 사용하려면 폴더씽크 동기화 옵션중 대상폴더로이동을 사용해야함..
즉 평소에  DCIM 폴더는 항상 빈폴더여야 한다는 뜻이다. 기본적인 동작방식은 그렇고 나는 즉시 동기화 되지 않았을때를 대비해 별도폴더로 파일을 옮기는 과정을 추가했다. 작업 D 참고)

 

 

[ 작업 A-1 : Profile ]

 

[ 작업 A-1 : Task ]

즉시동기화판단.tsk.xml
0.00MB

 

다른건 굳이 설명이 필요없고 6번 항목은 folder sync 설치하면 플러그인에서 확인이 가능하다. (아래 사진 참고)

[ 즉시동기화판단 task ] 가 발동되면 폴더씽크의 ToSynol 작업을 강제로 수행해준다.

(메인폰에서 시놀로지로 동기화 수행)

 

[ 작업 A -2 ]
목적 : 시놀로지로의 동기화 완료 확인해 B-1 수행

 

[ 작업 B-1 : 별도 태스크 아니고 아래 내용에 한꺼번에 나옴 ]
목적 : 픽셀에게 동기화 강제

작업순번

발동조건

작업위치

A-2, B-1

폴더씽크 알림 인지

메인폰

시놀로지까지 이동한 사진/영상파일의 존재는 픽셀의 폴더씽크는 알지 못한다.

픽셀쪽 동기화를 강제화 하기 위해 동기화 완료후 발생하는 알림을 활용하기로 한다. 

메인폰 폴더씽크의 알림 설정을 위와 같이 해두면 동기화 결과를 아래와 같이 알려준다.

이 알림을 분석하여 픽셀에서 동기화를 시작하도록 압박하는 컨셉이다. 



[ 작업 A-2, B-1: Profile ]

 

프로필 내용은 

  • 대상앱 : 폴더씽크 
  • 제목 : ToSynol
  • Text : *성공* 

으로 알림이 발생하면 이를 감지하여 [ 픽셀동기화압박 task ]를 수행함. 



[ 작업 A-2, B-1 : TASK ]

픽셀동기화압박.tsk.xml
0.01MB

동기화 완료가 0건 이상이면 진행하고 아니면 스킵한다. 

0건 이상임은 알림메세지를 분석하여 판단하는데 과정은 아래 1~5번에 해당한다. 

 

[ 픽셀동기화압박 task 분석 ]

1. 알림내용은 %evtprm3에 저장되며 건수분석을 위해 콤마(,)를 기준으로 split 한다.  split 결과는 아래와 같을 것이다.

%evtprm31

성공

%evtprm32

파일 동기화 : n

%evtprm33

파일이 삭제되었습니다: n

2. 건수는 콤마기준 2번째 배열에 저장되므로 %evtprm32 라는 변수로 접근하여 콜론(:)기준으로 다시 split 한다.  결과는 아래와 같다. 건수는 %evtprm322에 저장될 것이다.

%evtprm321

파일 동기화

%evtprm322

n

3. 픽셀압박횟수 저장용변수 셋팅

4. 픽셀압박상태 저장용변수 셋팅

5. %evtprm322 변수에 저장된 동기화 성공건수 판별

6. 동기화 건수 1건 이상이면 픽셀 깨움 (Join action 활용)

7. 3초 대기 (픽셀 깨어날 최소한의 시간동안 대기)

8. 시놀로지에서 픽셀로 강제/즉시 동기화 (B-1)

8-1. 픽셀에서 동기화를 강제하기 위해 join app의 action 기능과 folder sync의 딥링크를 사용한다.
8-2. 픽셀 folder sync 앱 동기화 설정중 Automation 을 활성화 하면 아래와 같이 딥링크를 제공하며 해당 url을 호출시 동기화 수행 (단, 픽셀에서 호출해야 동작함)

8-3. 픽셀에서 해당 링크를 호출하게 하려면 join app의 action 기능을 활용한다.

        join app은 메인폰과 픽셀에 각각 설치되있는 상태이며 메인폰에서 action을 

        아래와 같이 생성해준다. 

command name

임의로 지정(SyncToPixel)

DEVICES

픽셀로 선택(PIXEL)

ACTION

OPEN URL

URL

픽셀 Automation쪽 동기화딥링크 url

 

8-4. join action 생성후 tasker에서 해당 action을 수행하도록 task에 지정해준다. 

 

9. 6초 대기

10. 픽셀동기화압박건수 변수 +1

11. 픽셀동기화 완료여부 판단 

12. 동기화 상태변수가 여전히 ‘ask’ 이거나 압박건수가 5 미만이면 9로 돌아감.

 

[ 작업 B -3 ]  
목적 : 픽셀의 동기화 완료를 감지하여 12. GOTO 반복문 탈출

작업순번

발동조건

작업위치

B-3

픽셀에서의 알림인지

메인폰

동기화상태판단을 위해 별도 Profile을 생성하였다. 

이 프로필은 픽셀에서 NOTIFICATION을 보내줘야 동작한다. 

 

[ 작업 B-3 : Profile ]

 

[ 작업 B-3 : TASK ]

픽셀쪽에서 동기화가 완료되면 아래와 같은 알림을 보내도록 설정하였고(이건 픽셀에서 작업해줘야 함) 해당 알림을 감지하면 픽셀동기화상태 변수를 complete로 변경하여 GOTO문 탈출

(다시 task로 돌아와서)

 

13. if 문 끝

14. 픽셀 동기화 완료 판단

15. DCIM 폴더내 파일을 별도폴더로 이동시킴 (D)

 

15-1. 이 작업은 선택사항이며 A-1작업설정에서 파일을 대상폴더로 이동으로 처리할 경우 촬영후 수초내 파일이 메인폰에서 사라지기 때문에 발생하는 문제 (바로 타인에서 공유해야 한다거나)를 해결하기 위해서 이렇게 처리할뿐이다.

 

16. 축하메세지 전송

17. if 문 끝

18. if문 끝



[ 작업 C ] 
목적 : 픽셀에서 구글포토 깨우기

 

작업순번

발동조건

작업위치

C

폴더씽크 알림 인지

픽셀

B-2가 완료되더라도 구글포토가 알아서 업로드를 하지 않을때가 있기에 앱을 강제로 깨우도록 한다. 

역시 B-2작업이 끝나면 아래와 같이 알림이 오도록 설정해두고 이 알림을 인지하여 진행함.

 

[ 작업 C : Profile ]

 

[ 작업 C : Task ]

 

별건 없고 앞서 설명한 [ 작업 B-3 ] 에서 인지하는 알림을 보내주는 부분이 4 이다. 

4의 상세내용은 아래와 같다. 

작업내용 설명은 여기까지이고, 

메인폰 화면녹화 기능으로 사진 촬영부터 픽셀 동기화, 구글포토 업로드까지의 한 사이클을 녹화해 보았으니 확인해보시길 바란다. 

 

youtu.be/5nsH1qzWIlU

 

더 좋은 컨셉과 방법이 있으시면 댓글 환영.  질문도 환영.

 

반응형