Node-RED Dashboard 구성 요소에 이벤트 추가

동기 : 버튼을 누르면 스마트 폰을 진동시키고 싶습니다.



이전 Node-RED Dashboard로 스마트 리모컨을 만들어 보았습니다. 입니다만, 스마트 폰상에서 버튼을 클릭했을 때에 「버튼 누른 느낌」을 갖고 싶다고 왠지 느꼈습니다 1 .

JavaScript에는 Vibration API이라는 하드웨어의 진동에 액세스 할 수있는 API가 있으므로, 이것을 사용해 버튼을 클릭했을 때에 조금 진동시켜 주면 좋을 것 같습니다.

다만, Node-RED Dashboard의 버튼은 클릭 이벤트를 설정하는 프로퍼티등은 없기 때문에, 조금 궁리가 필요했습니다.
조금 시도한 결과, 버튼 이외의 컴퍼넌트에도 범용적으로 이벤트를 설정할 수 있는 것 같은 방법이 있었으므로 메모해 둡니다.

환경


  • Node-RED 1.0.2
  • Node-RED Dashboard 2.19.0
  • 스마트폰: Google Pixel 3 (Chrome)
  • 위의 Vibration API가 현재 Android Chrome과 Firefox Mobile 정도 밖에 대응하지 않기 때문에 iPhone의 경우에는 사용할 수 없을지도 모릅니다


  • 결론


  • ui_template 노드 사용
  • 코드 유형은 <head>セクションへ追加로 설정
  • jQuery에서 document에 대한 선택기 이벤트를 설정합니다 (아래 이미지 참조)



  • ui_template 노드



    이 아이입니다. 대시보드의 사용자 지정 구성 요소를 만들 수 있습니다.

    코드 종류별로
  • グループ内のWidget
  • <head>セクションへ追加

  • 두 가지를 선택할 수 있지만 이번에는 <head>セクションへ追加를 사용합니다.
    이것을 사용하는 것으로 <head> 태그내에 HTML 코드를 추가할 수 있으므로, <script> 태그를 사용해 임의의 JavaScript 코드를 포함할 수가 있습니다.

    jQuery에서 선택기로 이벤트 설정



    Node-RED Dashboard는 AngularJS와 jQuery를 이용하여 만들어집니다.
    따라서 클릭 이벤트를 추가 할 때 jQuery .on('click')에서 쉽게 추가 할 수 있습니다.
    예를 들면 버튼은 <button class="md-raised md-button md-ink-ripple" type="button" ... 와 같이 출력되고 있으므로 2 , button.md-raised.md-button 등으로 지정하면 버튼을 선택할 수 있습니다 (※이 근처는 상당히 잡잡합니다).

    다만, Dashboard의 컴퍼넌트는 동적으로 생성되므로, 이하와 같이 지정해도 움직이지 않습니다.

    제대로 움직이지 않음
    <script>
    $('button.md-raised.md-button').on('click', function() {
      window.navigator.vibrate(10)
    })
    </script>
    

    동적으로 생성된 항목에 대해 클릭 이벤트를 추가하려면 다음과 같이 document에 대해 선택기로 이벤트를 설정합니다.

    제대로 움직이는
    <script>
    $(document).on('click', 'button.md-raised.md-button', function() {
      window.navigator.vibrate(10)
    })
    </script>
    

    이를 적용하면 Dashboard의 구성 요소에 일반 이벤트를 추가하여 확장할 수 있습니다.

    요약


  • Node-RED Dashboard 구성 요소는 조금 부족합니다
  • 구성 요소에 약간의 기능을 추가하고 싶습니다

  • 이 때 ui_template 노드를 활용할 수 있습니다.<head>セクションへ追加를 사용하면 임의의 JavaScript 코드를 <head>에 포함할 수 있으므로 구성 요소에 대해 jQuery에서 다양한 이벤트를 설정할 수 있습니다.
    Dashboard는 디폴트로 컴퍼넌트가 갖추어져 있기 때문에 간단하게 사용할 수 있는 + 확장성도 높다, 라고 하는 구성이 되어 있으므로 좋네요.



    이런 피드백을 주는 기술을 햅틱스이라고 합니다. 

    Dashboard의 구성 요소는 아마도 AngularJS Material를 사용하고 있기 때문에 클래스를 사용할 수 있습니다. 

    좋은 웹페이지 즐겨찾기