GoogleHome에서 REST를 두드려 실행 결과를 말한다 [2]

GoogleHome에서 REST를 두드려 실행 결과를 말하는 그 [0~1]
계속.

기사 목록


  • [0] Raspberrypi 설정
  • [1] IFTTT에서 GoogleAssistant⇒GoogleSpreadSheet에서 작업 이름을 씁니다.
  • [2] 로컬 네트워크에 연결된 Raspberrypi에서 [1] 수신
  • [3] Raspberrypi에서 그대로 [2]를 두드리는
  • [4] Raspberrypi에서 [3]의 결과를 받습니다.
  • [5] Raspberrypi에서 [4]의 결과를 Google Home에 알립니다.

  • [2] 로컬 네트워크에 연결된 Raspberrypi에서 [1] 수신



    RaspBerrypi에서 gspread를 사용하여 GoogleSpreadSheet에서 값을 가져오고 씁니다.

    참고 : Using OAuth2 for Authorization — gspread 3.0.0 documentation

    Google 측 API 설정





    Google Developers Console로 이동하여 프로젝트를 만듭니다.



    왼쪽 상단 메뉴에서 API 및 서비스 > 라이브러리



    'Google Sheet API'와 'Google Drive API'를 선택하여 사용 설정합니다.

    방금 전과 같은 왼쪽 상단 메뉴에서 "라이브러리"아래에 맞는 "인증 정보"를 누르십시오.
    자격 증명 만들기 > 서비스 계정 키 만들기



    계정명을 적당히 붙여, 역할은 우선 Project > 편집자.
    키 타입은 JSON을 선택.



    작성된 json 파일 안에는 여러 가지 엉망이 쓰여져 있지만
    여기서 필요한 것은 우선 "client_email". 주소를 복사.



    [1] IFTTT에서 GoogleAssistant⇒GoogleSpreadSheet에서 작업 이름을 씁니다. 에서 만든 SpreadSheet 화면의 오른쪽 상단에서 "공유".

    주소를 붙여넣고 "보내기"로 공유 완료.

    ↑의 json 파일은 나중에 사용하므로 어딘가에 저장해 둔다.

    Raspberry 측에서 GoogleSpreadSheet를 만지작 준비


     $ sudo apt install python3-pip
    

    pip3 설치
     $ sudo pip3 install gspread
     $ sudo pip3 install oauth2client
     $ sudo pip3 install PyOpenSSL
    

    gspread 및 oauth2client 설치
    PyOpenSSL도 환경에 따라서는 필요하다고 한다. 일단 설치.
     $ mkdir google_test
    

    적당하게 폴더를 작성. 방금 만든 서비스 계정 키의 json을 이 안에 넣는다.

    google_test/test.py
    # -*- coding: utf-8 -*-
    import gspread
    from oauth2client.service_account import ServiceAccountCredentials
    
    scope = ['https://spreadsheets.google.com/feeds',
             'https://www.googleapis.com/auth/drive']
    
    credentials = ServiceAccountCredentials.from_json_keyfile_name('保存したjsonファイルの名前.json', scope)
    gc = gspread.authorize(credentials)
    wks = gc.open('cue').sheet1
    
    print(wks.acell('B1'))
    

    파이썬 파일을 만들어 이것도 폴더 안에 넣어 버린다.



    테스트 실행.
    SpreadSheet의 B1셀에서 「RobotName」을 취득할 수 있었다.
    협력에 성공.
    서비스 계정 키를 만들고 즉시 실행하면 오류가 반환되어 10 분 정도 기다려 보면 좋을지도 모른다.

    실행되지 않은 작업을 SpreadSheet 추가 순서로 받기



    google_test/test.py
    # -*- coding: utf-8 -*-
    
    import gspread
    import datetime
    from oauth2client.service_account import ServiceAccountCredentials
    
    .
    .
    .
    
    gc = gspread.authorize(credentials)
    wks = gc.open('cue').sheet1
    
    i = 1
    for i in wks.col_values(1):
        if wks.cell(i,3).value != '': #C列(RobotDirectory)がブランクでなければ
            if wks.cell(i,5).value == '': #E列(start)がブランクなら
                wks.update_cell(i,5,datetime.datetime.today().strftime("%Y/%m/%d %H:%M:%S")) #E列に実行開始日時を入力
                robotdir = wks.cell(i,3).value #C列(RobotDirectory)を取得
                print(robotdir)
    

    방금 테스트한 파이썬의 11행째 이후를 재작성. 일시를 기입하므로 datetime도 임포트한다.

    [1] IFTTT에서 GoogleAssistant⇒GoogleSpreadSheet에서 작업 이름을 씁니다. 에서 준비한 GAS와 함수에 의해 3열째에는 2열째로부터 자동으로 변환된 값이 들어가게 되어 있으므로, 그것을 받는다.

    첫 번째 행에서 마지막 행까지 반복하여 C 열에 입력이 있고 E 열에 입력이없는 행에서 C 열의 값을 가져옵니다.
    즉, 「명령이 끝났지만 미실행의 행」이라고 하는 것.

    취득하면 E열에는 일시를 넣어 실행 완료의 플래그로 한다.



    실행.
    C2, C3의 값을 받을 수 있었다.



    SpreadSheet를 보면, E열에 실행 완료를 나타내는 일시가 들어 있다.

    다시 한번 같은 명령을 입력해도 미실행의 행은 없기 때문에 아무것도 취득할 수 없다.
    여기까지 확인으로 테스트 완료.

    계속

    좋은 웹페이지 즐겨찾기