본문 바로가기

스마트홈 IoT

ST 다중 가상스위치를 사용하여 구글홈 앱 스마트하게 사용하기 2탄

728x90

 

본 자동화는 이전 글에 이어서

더 완벽한 자동화를 구축하고 싶은 사람들을 위한 자동화 설정이다.

 

이전글의 난이도가 중급 이라면

 

본글에서 소개하는 자동화는

3중 가상스위치를 활용하여 좀 더 복잡해지고

HA를 활용 해야하므로 난이도를 고급으로 봐야 할지도 모르겠다.

 

사실 HA만 추가된것이므로 중급 난이도로 봐도 무난한것 같다.

 

요약하자면 ST에서 3중 가상스위치를 활용하는것인데

나는 ST 자동화를 100% 신뢰할수 없으므로 홈어시스턴트를 보조로 사용하여 자동화를 구축하는 방법이다.

 

홈어시스턴트 자동화를 캡쳐해서 보여주자니 캡처가 너무 길어져서 yaml 코드로 보여주겠다

어차피 HA를 쓰려면 yaml을 알아야 하니 익숙해져야 한다.

 

 

 

 

 

alias: 아기 침대 카메라 모션 감지하면 가상 스위치 켜기 (베이비캠)
description: ""
triggers:
  - type: motion
    device_id: c6dfb6f1b3c3547d90c511d6521f2e11
    entity_id: 8c86b7e89d6dab36bd3dcd6dad5c8211
    domain: binary_sensor
    trigger: device
    id: 카메라 모션 감지 됬을때
  - type: occupied
    device_id: b812ad1c63c646e682f5fe25285b2e11
    entity_id: 4dbdc63c244f04f661c68ded5d85bf11
    domain: binary_sensor
    trigger: device
    for:
      hours: 0
      minutes: 0
      seconds: 20
    id: 안방 멀티 센터 모션 감지 되면
conditions: []
actions:
  - if:
      - condition: trigger
        id:
          - 카메라 모션 감지 됬을때
          - 안방 멀티 센터 모션 감지 되면
    then:
      - if:
          - condition: state
            entity_id: number.anbang_sihaseu_jaesil_kaunteo_senseo_ha_people
            state: "0"
        then:
          - if:
              - condition: device
                type: is_off
                device_id: 70f61c6116d54b1819c9f2fa22d3f811
                entity_id: 1f8e54a7433d99a177e9abb763104111
                domain: switch
            then:
              - if:
                  - condition: device
                    type: is_off
                    device_id: 66d88df0917028719bfb32b1a8f52c11
                    entity_id: ed109091702fed687d5b53fa818e5811
                    domain: switch
                then:
                  - type: turn_on
                    device_id: 66d88df0917028719bfb32b1a8f52c6
                    entity_id: ed109091702fed687d5b53fa818e587
                    domain: switch
mode: single

 

위와 같이 나는 2개의 트리거를 사용한다

1. 카메라에서 모션이 감지 됬을때

2. 멀티센서에서 모션을 20초간 감지하면   (카메라모션이 감지가 안됫을때 보조 트리거)

 

(안방 카운터가 0일때만)

아기 침대 움직임 알림 가상 스위치가 꺼져있으면

아기 침대 움직임 알림 이중체크 가상 스위치가 꺼져있으면

아기 침대 움직임 알림 이중체크 가상 스위치를 켠다

 

그럼 스싱에서 이중체크 가상스위치가 켜지면 움직임 알림 가상 스위치가 켜진다

(스싱 자동화 내역은 홈어시스턴트 내용이 끝난후 소개할게요)

 

 

그럼 이제 가상 스위치가 꺼지면 미디어플레이어 장치인 네스트 허브 맥스를 종료해야한다.

 

alias: 아기 침대 가상스위치 꺼지면 구글네스트허브 끄기 (베이비캠)
description: ""
triggers:
  - type: turned_off
    device_id: 70f61c6116d54b1819c9f2fa22d3f811
    entity_id: 1f8e54a7433d99a177e9abb763104111
    domain: switch
    trigger: device
    id: 움직임 알림 가상 스위치 꺼졌을때
conditions: []
actions:
  - if:
      - condition: trigger
        id:
          - 움직임 알림 가상 스위치 꺼졌을때
    then:
      - action: media_player.play_media
        target:
          entity_id: media_player.geosil_gugeulneseuteuheobeu
        data:
          media_content_id: media-source://camera/camera.doorbell_repeater_97af
          media_content_type: image/jpeg
        metadata:
          title: Doorbell Repeater-97AF
          thumbnail: /api/camera_proxy/camera.doorbell_repeater_97af
          media_class: video
          children_media_class: null
          navigateIds:
            - {}
            - media_content_type: app
              media_content_id: media-source://camera
      - delay:
          hours: 0
          minutes: 0
          seconds: 0
          milliseconds: 10
      - action: media_player.play_media
        target:
          entity_id: media_player.anbang_gugeulneseuteuheobeu
        data:
          media_content_id: media-source://camera/camera.doorbell_repeater_97af
          media_content_type: image/jpeg
        metadata:
          title: Doorbell Repeater-97AF
          thumbnail: /api/camera_proxy/camera.doorbell_repeater_97af
          media_class: video
          children_media_class: null
          navigateIds:
            - {}
            - media_content_type: app
              media_content_id: media-source://camera
      - delay:
          hours: 0
          minutes: 0
          seconds: 0
          milliseconds: 10
      - action: media_player.turn_off
        metadata: {}
        data: {}
        target:
          entity_id:
            - media_player.geosil_gugeulneseuteuheobeu
      - delay:
          hours: 0
          minutes: 0
          seconds: 0
          milliseconds: 10
      - action: media_player.turn_off
        metadata: {}
        data: {}
        target:
          entity_id:
            - media_player.anbang_gugeulneseuteuheobeu
mode: single

 

 

그리고 ST에서 혹시나 가상스위치가 꺼지지 않았을 경우에 대비해서 HA 에서 보조 자동화를 걸어둔다

 

alias: 아기 침대 가상 스위치 켜지면 가상스위치 자동 끄기 (보조)
description: ""
triggers:
  - type: turned_on
    device_id: 70f61c6116d54b1819c9f2fa22d3f811
    entity_id: 1f8e54a7433d99a177e9abb763104111
    domain: switch
    trigger: device
    id: 움직임 알림 가상 스위치 켜졌을때
    enabled: true
  - type: turned_on
    device_id: b11a328dcb04347070bf1a67ee6f8911
    entity_id: 152979aa0eb3810fa42e9006b40a3711
    domain: switch
    trigger: device
    id: 울음 알림 가상 스위치 켜졌을때
    enabled: true
  - type: turned_on
    device_id: 66d88df0917028719bfb32b1a8f52c11
    entity_id: ed109091702fed687d5b53fa818e5811
    domain: switch
    trigger: device
    id: 이중 체크 가상 스위치 켜졌을때
  - type: turned_on
    device_id: 2f6137d1224405fff2893fe94a805211
    entity_id: 07510c92ab07c86e906e1eb9723ebb11
    domain: switch
    trigger: device
    id: 아기 침대 수동 버튼 가상 스위치 켜졌을때
conditions: []
actions:
  - if:
      - condition: trigger
        id:
          - 움직임 알림 가상 스위치 켜졌을때
    then:
      - repeat:
          sequence:
            - delay:
                hours: 0
                minutes: 5
                seconds: 2
                milliseconds: 0
            - if:
                - condition: device
                  type: is_on
                  device_id: 70f61c6116d54b1819c9f2fa22d3f811
                  entity_id: 1f8e54a7433d99a177e9abb763104111
                  domain: switch
              then:
                - type: turn_off
                  device_id: 70f61c6116d54b1819c9f2fa22d3f811
                  entity_id: 1f8e54a7433d99a177e9abb763104111
                  domain: switch
          while:
            - condition: device
              type: is_on
              device_id: 70f61c6116d54b1819c9f2fa22d3f811
              entity_id: 1f8e54a7433d99a177e9abb763104111
              domain: switch
              for:
                hours: 0
                minutes: 0
                seconds: 10
  - if:
      - condition: trigger
        id:
          - 울음 알림 가상 스위치 켜졌을때
    then:
      - repeat:
          sequence:
            - delay:
                hours: 0
                minutes: 1
                seconds: 2
                milliseconds: 0
            - if:
                - condition: device
                  type: is_on
                  device_id: b11a328dcb04347070bf1a67ee6f8911
                  entity_id: 152979aa0eb3810fa42e9006b40a3711
                  domain: switch
              then:
                - type: turn_off
                  device_id: b11a328dcb04347070bf1a67ee6f8911
                  entity_id: 152979aa0eb3810fa42e9006b40a3711
                  domain: switch
          while:
            - condition: device
              type: is_on
              device_id: b11a328dcb04347070bf1a67ee6f8911
              entity_id: 152979aa0eb3810fa42e9006b40a3711
              domain: switch
              for:
                hours: 0
                minutes: 0
                seconds: 10
  - if:
      - condition: trigger
        id:
          - 이중 체크 가상 스위치 켜졌을때
    then:
      - repeat:
          sequence:
            - delay:
                hours: 0
                minutes: 1
                seconds: 2
                milliseconds: 0
            - if:
                - condition: device
                  type: is_on
                  device_id: 66d88df0917028719bfb32b1a8f52c11
                  entity_id: ed109091702fed687d5b53fa818e5811
                  domain: switch
              then:
                - type: turn_off
                  device_id: 66d88df0917028719bfb32b1a8f52c11
                  entity_id: ed109091702fed687d5b53fa818e5811
                  domain: switch
          while:
            - condition: device
              type: is_on
              device_id: 66d88df0917028719bfb32b1a8f52c11
              entity_id: ed109091702fed687d5b53fa818e5811
              domain: switch
              for:
                hours: 0
                minutes: 0
                seconds: 10
  - if:
      - condition: trigger
        id:
          - 아기 침대 수동 버튼 가상 스위치 켜졌을때
    then:
      - repeat:
          sequence:
            - delay:
                hours: 0
                minutes: 5
                seconds: 2
                milliseconds: 0
            - if:
                - condition: device
                  type: is_on
                  device_id: 2f6137d1224405fff2893fe94a805211
                  entity_id: 07510c92ab07c86e906e1eb9723ebb11
                  domain: switch
              then:
                - type: turn_off
                  device_id: 2f6137d1224405fff2893fe94a805211
                  entity_id: 07510c92ab07c86e906e1eb9723ebb11
                  domain: switch
          while:
            - condition: device
              type: is_on
              device_id: 2f6137d1224405fff2893fe94a805211
              entity_id: 07510c92ab07c86e906e1eb9723ebb11
              domain: switch
              for:
                hours: 0
                minutes: 0
                seconds: 10
mode: restart

 

여기까지가 HA 쪽 자동화 이다.

 

HA 자동화는 이렇게 코드로 깔끔하게 보여줄수 있는 반면에

 

ST쪽 자동화는 깔끔하지 못하다

 

물론 IDE 에서 JSON 코드로 볼수가 있지만

코드로 보기는 좀 어렵게 느껴진다

[
  {
    "if": {
      "and": [
        {
          "between": {
            "value": {
              "time": {
                "reference": "Now"
              },
              "type": "time"
            },
            "start": {
              "time": {
                "daysOfWeek": [
                  "Sun",
                  "Mon",
                  "Tue",
                  "Wed",
                  "Thu",
                  "Fri",
                  "Sat"
                ],
                "reference": "Midnight",
                "offset": {
                  "value": {
                    "integer": 420,
                    "type": "integer"
                  },
                  "unit": "Minute"
                }
              },
              "type": "time"
            },
            "end": {
              "time": {
                "daysOfWeek": [
                  "Sun",
                  "Mon",
                  "Tue",
                  "Wed",
                  "Thu",
                  "Fri",
                  "Sat"
                ],
                "reference": "Noon",
                "offset": {
                  "value": {
                    "integer": 660,
                    "type": "integer"
                  },
                  "unit": "Minute"
                }
              },
              "type": "time"
            },
            "changesOnly": false
          },
          "type": "between"
        },
        {
          "equals": {
            "left": {
              "device": {
                "devices": [
                  "9bf4bc30-afeb-4f7d-bb7e-2974747df811"
                ],
                "component": "main",
                "capability": "switch",
                "attribute": "switch",
                "trigger": "Always"
              },
              "type": "device"
            },
            "right": {
              "string": "on",
              "type": "string"
            },
            "changesOnly": false
          },
          "type": "equals"
        },
        {
          "equals": {
            "left": {
              "device": {
                "devices": [
                  "c162db48-dccf-410e-94b7-9fb063b1ed11"
                ],
                "component": "main",
                "capability": "switch",
                "attribute": "switch",
                "trigger": "Never"
              },
              "type": "device"
            },
            "right": {
              "string": "off",
              "type": "string"
            },
            "changesOnly": false
          },
          "type": "equals"
        }
      ],
      "type": "and",
      "then": [
        {
          "notification": {
            "push": {
              "title": "(이중체크 꺼짐일때) 아기 침대 울음 알림(낮에만)",
              "message": "베이비캠에서 아기 울음을 감지 하였습니다",
              "target": {
                "locationId": "f0f7c2e7-24cd-4b56-97cc-de63f4530411",
                "userUuids": [
                  "a280961a-209d-761c-f9a8-8cbb161d0811"
                ]
              }
            },
            "type": "push"
          },
          "type": "notification"
        },
        {
          "notification": {
            "audio": {
              "message": "베이비캠에서 아기 울음을 감지 하였습니다",
              "devices": [
                "b8de2cbe-848c-65be-ddb9-a09fa1866a11"
              ],
              "ttsProvider": {
                "provider": "Bixby",
                "locale": "ko-KR",
                "profile": "F05",
                "output": {
                  "format": "PCM"
                }
              }
            },
            "type": "audio"
          },
          "type": "notification"
        }
      ],
      "sequence": {
        "then": "Parallel",
        "else": "Parallel"
      }
    },
    "type": "if"
  }
]

 

이렇게 이미지로 보여줄수도 있지만

 

 

 

아무래도 모바일이 익숙한 ST 사용자들에게는 익숙하지 못할것이다.

자동화를 하나하나 캡쳐하자니 오히려 너무 캡쳐가 많아져서 보기가 어려울거 같아서

텍스트로 설명 하겠다

 

전체적으로 요약하자면

가상 스위치가 켜지면 구글 홈앱에서 베이비캠을 재생한다.

구글홈앱에서는 tapo 카메라 앱과 구글어시스턴트 연동,

오케이구글 기기동기화 해줘

의 사전 작업을 해둬야한다  

나는 수동 스위치도 하나더 추가해서 사용중이다

그러면 3중이아닌 4중이므로 다중 스위치? 라고 정정해야겟다.

 

 

 

여기서부터 ST 자동화를 텍스트 코딩으로 설명하겠다.

 

1. 이중 체크 가상 스위치쪽 연관 자동화

 

1-1 자동화명: 아기 침대 움직임 알림 이중체크 가상 스위치 1분뒤 끄기

(선행조건) 없음

(조건) 아기 침대 움직임 알림 이중체크 가상 스위치 켜지면

(동작) 아기 침대 움직임 알림 이중체크 가상 스위치 끄기: 1분후

 

1-2 자동화명: (이중체크 꺼짐일때) 울음 켜지면 이중체크 켜짐

(선행조건) 아기 침대 움직임 알림 이중체크 가상스위치 꺼짐 상태에서

(조건) 아기 침대 울음 알림 가상 스위치 켜지면

(동작) 아기 침대 움직임 알림 이중체크 가상 스위치=  켜기 59초 후 끄기

 

1-3 자동화명: 아기 침대 움직임 알림 가상 스위치 켜지면 스피커 알림(낮에만)

(선행조건)

매일 아침 7시에서 23시 사이

아기 침대 움직임 알림 이중체크 가상스위치 꺼짐

(조건) 아기 침대 움직임 알림 가상 스위치 켜지면

(동작) 스피커에서 메세지 재생 -> 거실 갤럭시홈미니: 베이비캠에서 움직임이 발견되었습니다.

 

1-4 자동화명: (이중체크 꺼짐일때) 아기 침대 울음 알림 (낮에만)

(선행조건)

매일 아침 7시에서 23시 사이

아기침대 움직임 알림 이중체크 가상스위치 꺼져있으면

(조건) 아기 침대 울음 알림 가상 스위치가 켜지면

(동작)

멤버에게 알림 보내기 -> 스마트폰 푸쉬 알림

스피커에서 메세지 재생 -> 거실 갤럭시홈미니: 베이비캠에서 아기 울음을 감지 하였습니다.

 

1-5 자동화명: 알림 스위치 꺼짐 상태에서 이중체크 스위치 켜지면 알림 스위치 켜짐

(선행조건)

아기 침대 움직임 알림 가상 스위치 꺼짐

아기 침대 움직임 알림 수동 스위치 꺼짐   

아기 침대 울음 알림 가상 스위치 꺼짐

(조건) 아기 침대 움직임 알림 이중체크 가상 스위치가 켜지면

(동작) 아기 침대 움직임 알림 가상 스위치 켜기 : 4분 59초 후 끄기

 

 

2. 움직임 알림 가상 스위치쪽 연관 자동화

 

1-1. 자동화명:아기 침대 움직임 알림 가상 스위치 5분 후 자동 끄기

(조건) 아기 침대 움직임 알림 가상 스위치 켜지면

(동작) 아기 침대 움직임 알림 가상 스위치 끄기 5분 후

 

 

3. 울음 알림 가상 스위치쪽 연관 자동화

 

1-1. 자동화명: 아기침대 움을 알림 가상 스위치 5분 후 자동 끄기

(조건) 아기 침대 울음 알림 가상 스위치 켜지면

(동작) 아기 침대 울음 알림 가상 스위치 끄기 5분 후

 

4. 아기 침대 수동 가상 스위치 연관 자동화

 

1-1. 자동화명: 아기 침대 수동 가상 스위치 5분 후 자동 끄기

(조건) 아기 침대 수동 가상 스위치 켜지면

(동작) 아기 침대 수동 가상 스위치 끄기 5분 후

 

 

----------------------------------------------------------------------

그리고 나서 구글홈앱 자동화를 셋팅하면되는데

 

일단 사전에 ST 와 구글홈이 연동되어 있는 상태여야 한다

 

또한  

구글홈 앱에서 tapo 카메라 기기를 연동하고 + 네스트허브도 연동 되어 있어야 한다

 

OK 구글  베이비캠 보여 줘 라고 말하면 네스트 허브에서 카메라를 실시간 스트리밍이 정상적으로 된다면

 

이제 구글홈 앱에서 자동화를 셋팅한다

 

1. 자동화명: 아기 침대 움직임 알림 가상 스위치 켜지면 네스트 허브에서 카메라 재생

(시작조건) 아기 침대 움직임 알림 가상스위치 켜짐

(작업) 구글어시스턴트맞춤명령어: 베이비캠 보여 줘

(구성) 재생할 기기:  거실 네스트

 

 

2. 자동화명: 아기침대 울음 알림 가상 스위치 켜지면 네스트 허브에서 카메라 재생

(시작조건) 아기 침대  울음 알림 가상 스위치 켜짐

(작업) 구글어시스턴트맞춤명령어: 베이비캠 보여 줘

(구성) 재생할 기기: 거실 네스트

 

3. 자동화명: 아기침대 수동 가상 스위치 켜지면 네스트 허브에서 카메라 재생

(시작조건) 아기침대 수동 가상 스위치 켜짐

(작업) 구글어시스턴트맞춤명령어: 베이비캠 보여 줘

(구성) 재생할 기기: 거실 네스트

 

4. 가상스위치 꺼지면 미디어 종료 자동화 추가

(생략)

-------------------------------------------------------------------------------------------------

 

여기까지가 ST 가상 스위치를 활용한 구글홈앱 스마트하게 쓰기 자동화 이다

해당 자동화의 특징은 이중체크 가상스위치를 통해서 중복으로 카메라가 실행되는것을 방지하고

무선 물리 버튼 스위치로 직접 카메라를 스트리밍 할수도 있다

 

해당 자동화는 육아에서 매우 편리한 자동화 이나

단점은 이유는 알수 없으나 가상스위치가 꼬여버릴때가 발생한다.

가상스위치가 꺼지지 않은 켜짐 상태로 유지 될수도 있고

ST에서 자동화의 갯수가 200개가 넘어가는순간부터 버벅이기 시작한다

 

이에 대한 단점을 해결하려면 HA에서 자동화를 구축해야한다

 

HA에서는 처음 자동화를 시작할땐 어렵지만

알고보면 더 깔끔하고 편한 자동화를 구축할수 있다

 

다음편은 해당 자동화를 더 완벽하게 할수 있는 HA 버전의 자동화를 소개하겠다.

 

 

 

 

 

 

 

 

728x90
오리온 비쵸비 비스켓 5p, 125g, 1개 코메드 서랍장 CMD-602 (6칸), 1개 아이클리어 루테인지아잔틴, 30정, 3박스 세인 멀티테스터기 UK 831LN, 1개 피크미터 비접촉식 검전기 고급형, 1개 지엠지 웜그립 터치 방수 방한 안전장갑 L2005WS, 1개 알파오 무탈피 순간접속 커넥터 IT-44(전선규격 2.0-2.5sqmm) 10개 구글 네스트 허브 맥스, 차콜 삼정 국산 AC 8자 백색 코드 화이트 전원케이블, 3m, 1개 접착식 다용도 스티커 홀더, 투명, 10개 벡셀 아이프라임 알카라인 AAA건전지, 20개입, 1개 엘가토 스트림덱 네오 8Key 매크로 커스터마이징 StreamDeck-Neo