OpenHAB 초보자 가이드 파트 2: ZWave, MQTT, 규칙 및 차트

OpenHAB 초보자 가이드 파트 2: ZWave, MQTT, 규칙 및 차트

무료가 항상 '유료만큼 좋은 것'을 의미하는 것은 아니며 OpenHAB도 예외는 아닙니다. 오픈 소스 홈 오토메이션 소프트웨어는 시장에 나와 있는 다른 홈 오토메이션 시스템의 기능을 훨씬 능가하지만 설정하기가 쉽지 않습니다. 사실, 그것은 완전히 실망스러울 수 있습니다.





가이드 1부에서 안내해 드렸습니다. 라즈베리파이에 OpenHAB 설치 , OpenHAB의 핵심 개념을 소개하고 시스템에 첫 번째 항목을 추가하는 방법을 보여주었습니다. 오늘 우리는 더 나아갈 것입니다 :





  • ZWave 장치 추가
  • Harmony Ultimate 컨트롤러 추가
  • 규칙 소개
  • MQTT 소개 및 Arduino의 센서를 사용하여 Pi에 MQTT 브로커 설치
  • 데이터를 기록하고 그래프로 나타내기

Z-Wave 소개

Z-Wave는 수년 동안 지배적인 홈 자동화 프로토콜이었습니다. 신뢰할 수 있고 광범위하게 개발되었으며 다른 어떤 스마트 홈 제품보다 훨씬 더 긴 범위에서 작동합니다. 다양한 작업을 수행하는 수백 개의 Z-Wave 센서를 사용할 수 있습니다. 오픈HAB ~ 할 수있다 Z-Wave와 함께 작동하지만 설정이 번거롭고 안정성이 보장되지 않습니다.

OpenHAB와 함께 사용하기 위해 특별히 Z-Wave 센서로 가득 찬 집을 구입하는 것을 고려하고 있다면 재고할 것을 촉구합니다. 그것은 당신에게 큰 도움이 될 수도 있고, 작지만 지속적인 문제에 시달릴 수도 있습니다. 적어도 센서를 몇 개 사용해 볼 기회가 있을 때까지는 센서로 가득 찬 집을 사지 마십시오. Z-Wave를 선택하는 유일한 이유는 OpenHAB에 100% 만족하지 않고 향후 옵션을 열어두고 싶은 경우입니다. 예를 들어 Z-Wave는 Samsung SmartThings 허브 및 Z-Wave 전용 허브와 함께 작동합니다. Homeseer와 같은 다양한 기타 소프트웨어 옵션 도모티즈 .

OpenHAB에는 Z-Wave 바인딩이 포함되어 있지만 여전히 먼저 Z-Wave 네트워크 구성 , OpenHAB이 데이터 쿼리를 시작하기 전에. Rasberry 컨트롤러 보드가 있는 경우 네트워크 구성을 위해 제공된 소프트웨어가 있으므로 여기에서 다루지 않습니다. Aeotec USB Z-Stick 컨트롤러 또는 이와 유사한 제품을 구입했다면 소프트웨어가 포함되어 있지 않을 수 있으므로 계속 읽으십시오.

Aeotec Z-Stick Gen5 Z-Wave Hub Z-Wave Plus USB로 게이트웨이 생성(일반 흰색) 지금 아마존에서 구매하세요

이미 Z-Wave 네트워크 설정이 있는 경우 , 컨트롤러를 Pi에 연결하고 바인딩 및 항목 구성을 시작할 수 있습니다. Z-Wave를 처음 사용하는 경우에는 조금 더 복잡합니다.

첫째, 하드웨어 측면에서: 각 컨트롤러에는 장치와 페어링하는 고유한 방법이 있습니다(기술적으로 노드 ID가 할당되는 '포함 모드'로 알려짐). Aotec Z-Stick의 경우 USB 포트에서 플러그를 뽑고 버튼을 한 번 눌러 포함 모드로 전환하는 것을 의미합니다. 그런 다음 페어링하려는 장치에 가까이 가져가서 포함 버튼을 누릅니다. (이것도 다를 수 있습니다. 내 Everspring 소켓은 버튼을 빠르게 3번 연속해서 눌러야 하므로 여기서 교훈은 장치의 설명서를 읽는 것입니다) .

Z-Stick이 짧게 깜박이면 성공을 나타냅니다. 새 포트가 할당될 때 Pi에 다시 연결할 때 문제가 발생합니다. 다른 포트가 동적으로 재할당된 경우 Pi를 다시 시작하여 표준 포트로 다시 재설정하십시오. 더 나은 방법은 모든 하드웨어 페어링을 먼저 완료할 때까지 Pi에 연결하지 마십시오.

HABmin 및 Z-Wave 바인딩 설치

OpenHAB는 실제로 Z-Wave용 구성 유틸리티가 아니므로 HABmin이라는 다른 웹 관리 도구를 설치합니다. 로 가세요. HABmin Github 저장소 현재 릴리스를 다운로드합니다. 압축을 풀면 2개가 나옵니다. .항아리 addons 디렉토리의 파일 – OpenHAB Home 공유의 해당 addons 디렉토리에 있어야 합니다. (Aotec gen5 Z-Stick도 사용하는 경우 Z-Wave 바인딩 버전이 1.8 이상인지 확인하십시오) .

다음으로 webapps 디렉토리에 새 폴더를 만들고 이름을 'habmin'으로 지정합니다(소문자 중요). 다운로드한 나머지 파일을 거기에 복사합니다.

참고: 또한 HABmin 2 활발히 개발 중입니다. 설치는 거의 동일하지만 하나의 추가 .jar 애드온이 있습니다. 당신이 선호하는 것을보기 위해 둘 다 시도해 볼 가치가 있습니다.

아직 연결하지 않았다면 컨트롤러를 Pi에 연결하십시오. 올바른 포트를 찾으려면 다음을 입력하십시오.

ls /dev/tty*

이름에 USB가 있는 것을 찾고 있거나 제 경우에는 Z-스틱이 다음과 같이 표시되었습니다. / 개발 / ttyACM0 (모뎀). 명령을 연결하기 전에 한 번, 연결한 후에 한 번 수행하는 것이 더 쉬울 수 있으므로 확실하지 않은 경우 변경 사항을 확인할 수 있습니다.

OpenHAB 구성 파일을 열고 Z-Wave의 섹션을 수정하여 두 줄의 주석을 제거하고 실제 장치 주소를 입력합니다. 마지막 단계는 OpenHAB 사용자가 모뎀에 액세스할 수 있도록 허용하는 것이었습니다.

sudo usermod -a -G 다이얼아웃 openhab

이제 모든 것을 실행하려면 OpenHAB를 다시 시작하세요.

sudo 서비스 오픈합 재시작

디버그 로그를 확인하는 경우 다음과 같은 내용을 볼 수 있기를 바랍니다. 축하합니다. 지금 Z-Wave를 말하고 계십니다. 다양한 Z-Wave 노드의 메시지로 가득 찬 디버그 로그를 찾을 수도 있습니다. HABMIN이 무엇을 찾았는지 확인하는 것으로 시작하겠습니다. http://openhab.local:8080/habmin/index.html(openhab.local을 Raspberry Pi 호스트 이름 또는 IP 주소로 대체).

HABMIN에는 볼 것이 많지만 실제로는 구성 -> 바인딩 -> Z-Wave -> 장치 아래에서 볼 수 있듯이 탭. 쉽게 참조할 수 있도록 노드를 확장하여 위치와 이름 레이블을 편집합니다.

Z-Wave 항목 구성

각 Z-Wave 장치에는 OpenHAB에 대한 특정 구성이 있습니다. 고맙게도 대부분의 장치는 이미 탐색되었으며 이미 예제가 있을 것입니다. 인식되지 않는 사용자 지정 장치를 구성하는 것은 이 가이드의 범위를 훨씬 벗어나지만 지금은 지원된다고 가정하겠습니다.

먼저, Node 3에 기본적인 Everspring AN158 전원 스위치와 미터가 있습니다. 빠른 인터넷 검색을 통해 Wetwa.re의 샘플 항목 구성이 포함된 블로그 게시물로 이동했습니다. 나는 이것을 다음과 같이 조정했다.

Switch Dehumidifier_Switch '제습기' {zwave='3:command=switch_binary'}

Number Dehumidifier_Watts '제습기 소비전력 [%.1f W]' { zwave='3:command=meter' }

완벽한.

다음은 Aeotec Gen5 다중 센서입니다.

Aeon Labs Aeotec Z-Wave Gen5 다중 센서(Z-Wave Plus) 지금 아마존에서 구매하세요

이를 위해 샘플 구성을 찾았습니다. iwasdot.com , 내 다중 센서는 노드 2에 있습니다.

번호 Hallway_Temperature '복도 온도 [%.1f °C]' (복도, 온도) {zwave='2:0:command=sensor_multilevel,sensor_type=1,sensor_scale=0'}

Number Hallway_Humidity '복도 습도 [%.0f %%]' (복도, 습도) {zwave='2:0:command=sensor_multilevel,sensor_type=5'}

Number Hallway_Luminance 'Hallway Luminance [%.0f Lux]' (Hallway) {zwave='2:0:command=sensor_multilevel,sensor_type=3'}

문의 Hallway_Motion '복도 모션 [%s]' (복도, 모션) {zwave='2:0:command=sensor_binary,respond_to_basic=true'}

번호 sensor_1_battery '배터리 [%s %%]' (모션) {zwave='2:0:command=battery'}

이 형식이 이상하게 보이면 처음으로 돌아가십시오. 초보자 가이드 , 특히 Hue 바인딩 섹션에서 항목이 추가되는 방법을 설명합니다. 아마도 이와 같은 붙여넣기 예제만 복사하면 되지만 새 장치가 있는 경우 바인딩 문서에 모든 내용이 자세히 설명되어 있습니다. 명령 .

로지텍 하모니 바인딩

규칙을 시작하기 전에 Harmony 바인딩 작업에 대한 간단한 메모를 추가하고 싶었습니다. 저는 홈 미디어 센터 경험을 단순화하기 위한 궁극의 리모콘 Harmony 시리즈의 열렬한 팬이지만 종종 스마트 홈 내에서 별도의 시스템으로 서 있습니다. OpenHAB를 사용하면 Logitech Harmony 활동 및 전체 장치 제어가 이제 중앙 집중식 시스템의 일부가 될 수 있으며 자동화 규칙에 포함될 수도 있습니다.

apt-cache를 사용하여 'harmony'를 검색하여 찾은 세 개의 바인딩 파일을 설치하는 것으로 시작합니다.

잊지 마세요 차우 완료되면 바인딩 디렉토리를 다시

sudo apt-get openhab-addon-action-harmonyhub 설치

sudo apt-get install openhab-addon-binding-harmonyhub

sudo apt-get install openhab-addon-io-harmonyhub

sudo chown -hR openhab:openhab /usr/share/openhab

바인딩을 구성하려면 openhab.cfg 파일을 열고 다음과 같이 새 섹션을 추가하십시오.

########## 조화 원격 제어 ##########

조화 허브:호스트=192.168.1.181 또는 귀하의 IP

조화 허브:사용자 이름= 당신의 조화 이메일 로그인

조화 허브:비밀번호= 너의 비밀번호

IP 주소는 Harmony 허브의 IP 주소입니다. 네트워크 스캐너를 사용하여 알아내십시오. 표준 Harmony 구성 유틸리티를 시작할 때 입력한 로그인 세부 정보도 입력해야 합니다. 그게 다야 Hue를 다시 시작하면 디버그 로그에 바인딩의 출력이 갑자기 폭발해야 합니다.

이것은 보낼 수 있는 모든 활동, 장치 및 명령의 JSON 형식 목록입니다. 나중에 참조할 수 있도록 복사해 두는 것이 좋습니다. 온라인 JSON 포맷터에 붙여넣어 접을 수 있는 노드로 읽기를 훨씬 쉽게 만들 수 있습니다. 이와 같은 .

기본값인 표준 PowerOff 활동뿐만 아니라 여기에 이름별로 나열된 자신만의 정의된 활동을 찾을 수 있습니다. 이제 활동을 시작하는 간단한 원 버튼 컨트롤을 만들어 보겠습니다. 먼저 항목 파일에 다음 줄을 추가합니다. 원하는 경우 그룹과 아이콘을 변경합니다.

/* 하모니 허브 */

문자열 Harmony_Activity '하모니 [%s]'(거실_방) {harmonyhub='*[currentActivity]' }

이것은 양방향 문자열 바인딩 , 현재 활동을 가져오고 현재 활동에 다른 것을 명령할 수 있습니다. 이제 사이트맵 파일에 버튼을 만들 수 있습니다.

Switch item=Harmony_Activity mappings=[PowerOff='Off',Exercise='운동',13858434='TV',Karaoke='노래방']

아이폰에 유튜브 동영상 다운로드하는 방법

대괄호 안에 레이블과 함께 각 활동이 표시됩니다. 일반적으로 리모컨에서 이름을 지정한 대로 활동을 직접 참조할 수 있지만 내가 찾은 예외는 'TV 시청'과 같이 활동 이름에 공백이 있는 모든 것이었습니다. 이 경우 활동 ID를 사용해야 합니다. 다시 JSON 디버그 출력에서 ​​ID를 찾을 수 있습니다. 인터페이스를 저장하고 새로고침하면 다음과 유사한 내용이 표시됩니다.

다음에 살펴보겠지만 규칙에서 활동을 참조할 수도 있습니다. 에 대한 자세한 내용은 위키 페이지를 참조하십시오. 하모니 바인딩 .

규칙에 대한 일반 소개

대부분의 스마트 홈 허브에는 일종의 규칙 생성 기능이 포함되어 있어 가정의 센서 데이터 및 이벤트에 자동으로 대응할 수 있습니다. 사실, 진정한 스마트 홈은 모바일 앱과 상호 작용하는 데 시간을 할애해야 하는 것이 아니라 최종 사용자에게 보이지 않고 완전히 자동화된 것입니다. 이를 위해 OpenHAB에는 프로그래밍할 수 있는 강력한 규칙 스크립팅 언어도 포함되어 있어 대부분의 스마트 홈 허브 또는 IFTTT 레시피의 복잡성을 훨씬 능가합니다.

프로그래밍 규칙은 그것보다 더 나쁘게 들립니다. 존재 센서에 따라 조명을 켜거나 끄는 한 쌍의 규칙으로 간단하게 시작해 보겠습니다.

규칙 '제임스가 참석할 때 사무실 조명 켜기'

언제

항목 JamesInOffice가 OFF에서 ON으로 변경됨

그 다음에

sendCommand(Office_Hue,ON)

'제임스가 떠날 때 사무실 불 끄기' 규칙

언제

항목 JamesInOffice가 ON에서 OFF로 변경됨

그 다음에

sendCommand(Office_Hue,OFF)

먼저 규칙에 이름을 지정합니다. 즉, 어떤 이벤트가 실행되고 있는지 알 수 있도록 설명이 포함되어야 합니다. 다음으로 다음과 같이 간단한 규칙을 정의합니다. x가 참이면 y를 수행 . 종료는 해당 특정 규칙의 종료를 의미합니다. 규칙에 사용할 수 있는 많은 특수 단어가 있지만 지금은 두 가지 간단한 구문을 다루고 있습니다. 안건 , 이를 통해 무언가의 상태를 쿼리할 수 있습니다. 그리고 명령을 보내다 , 그것은 당신이 생각하는 것을 정확히 수행합니다. 나는 이것이 쉽다고 말했다.

한 쌍의 규칙을 사용하는 것은 아마도 불필요할 것입니다. 그러나 내 논리가 더 복잡해짐에 따라 내가 그 지역에 들어갈지 떠나는지에 대해 규칙을 분리하는 것이 유리할 것입니다. 그리고 어딘가에 광 센서를 추가하는 것이 좋습니다. 불필요하게 조명을 켜지 않도록 방정식에 넣습니다.

예약된 규칙을 만드는 다른 예를 살펴보겠습니다.

규칙 '매일 아침 운동'

언제

시간 cron '0 0 8 1/1 * ? *'

그 다음에

harmonyStartActivity('운동')

다시, 우리는 규칙, 실행되어야 하는 상태 조건 및 취해야 할 조치의 이름을 지정합니다. 그러나 이 경우에는 시간 패턴을 정의하고 있습니다. 인용부호에서 볼 수 있는 재미있는 코드는 Quartz Scheduler의 CRON 표현식입니다(형식은 일반 CRONtab과 약간 다름). 나는 사용했다 cronmaker.com 표현을 만드는 데 도움이 되지만 자세한 설명과 더 많은 예를 보려면 형식 가이드 [더 이상 사용할 수 없음]을 참조하세요.

올바른 형식의 Cron 표현식을 생성하는 데 사용되는 CronMaker.com

내 규칙은 단순히 '매일 아침 8시, 내 Harmony Ultimate 시스템에 운동 활동을 시작하라고 알려주세요'라고 되어 있습니다. 그러면 TV, Xbox, 앰프가 활성화되고 1분 후에 A 버튼을 눌러 시작합니다. 드라이브의 디스크.

슬프게도 OpenHAB은 아직 저를 위한 운동을 할 수 없습니다.

제가 보여드리고 싶은 또 하나의 규칙은 집의 습도를 관리하는 데 사용하는 규칙입니다. 나는 필요할 때마다 이동해야 하는 단일 제습기가 있으므로 모든 습도 센서를 살펴보고 어느 것이 가장 높은지 찾아 변수에 저장하기로 결정했습니다. 현재 1분마다 트리거되지만 쉽게 낮출 수 있습니다. 먼저 살펴보세요:

org.openhab.core.library.types.* 가져오기

import org.openhab.model.script.actions.*

java.lang.String 가져오기

'습도 모니터' 규칙

시간 cron '0 * * * * ?'

그 다음에

var prevHigh = 0

var highHum = ''

습도?.members.forEach[흠|

logDebug('습도.규칙', hum.name);

if(DecimalType으로 hum.state > prevHigh){

prevHigh = hum.state

highHum = hum.name + ': ' + hum.state + '%'

}

내 맥북 에어가 몇 살이야

]

logDebug('습도.규칙', highHum);

postUpdate(Dehumidifier_Needed, highHum);

규칙의 핵심은 습도?.members.foreach 선. 습도는 습도 센서의 그룹 이름입니다. .멤버 해당 그룹의 모든 항목을 가져옵니다. 각각 (아마도 익숙하지 않은 호기심 많은 대괄호 형식으로) 반복합니다. 규칙의 구문은 Xtend의 ​​파생물이므로 다음을 읽을 수 있습니다. Xtend 문서 적응할 예를 찾을 수 없는 경우.

하지만 필요하지 않을 수도 있습니다. 수백 개의 예제 규칙이 있습니다.

OpenHAB 및 사물 인터넷용 MQTT

MQTT는 기계 간 통신을 위한 경량 메시징 시스템입니다. Arduino 또는 Raspberry Pi가 서로 대화할 수 있도록 하는 일종의 Twitter입니다(물론 그 이상에서도 작동함). 센서 데이터를 허브로 다시 전송하거나 원격 명령을 수신하는 안정적인 방법이 필요한 일반적으로 리소스가 적은 마이크로 컨트롤러인 사물 인터넷 장치로 빠르게 인기를 얻고 있습니다. 그것이 바로 우리가 할 일입니다.

하지만 바퀴를 재발명하는 이유는 무엇입니까?

MQ Telemetry Transport는 느린 위성 연결을 통해 송유관을 연결하기 위해 1999년에 발명되었습니다. 특히 배터리 사용량과 대역폭을 최소화하면서 안정적인 데이터 전달을 제공하도록 설계되었습니다. 수년에 걸쳐 설계 원칙은 동일하게 유지되었지만 사용 사례는 특수 임베디드 시스템에서 일반 사물 인터넷 장치로 이동했습니다. 2010년에 이 프로토콜은 로열티 없이 공개되었으며 누구나 사용하고 구현할 수 있습니다. 우리는 무료를 좋아합니다.

우리가 또 다른 프로토콜을 사용하는 이유가 궁금할 것입니다. 우리는 이미 HTTP를 보유하고 있습니다. 이 프로토콜은 모든 방식의 웹 연결 시스템(OpenHAB 및 IFTTT, 특히 새로운 메이커 채널과 같은) 간에 빠른 메시지를 보내는 데 사용할 수 있습니다. ). 그리고 당신이 옳았을 것입니다. 그러나 HTTP 서버의 처리 오버헤드는 상당히 커서 Arduino와 같은 임베디드 마이크로컨트롤러에서 쉽게 실행할 수 없습니다. ). 반면 MQTT는 가벼우므로 네트워크를 통해 메시지를 보내도 파이프가 막히지 않고 작은 Arduino 메모리 공간에 쉽게 들어갈 수 있습니다.

MQTT는 어떻게 작동합니까?

MQTT에는 서버('브로커'라고 함)와 하나 이상의 클라이언트가 모두 필요합니다. 서버는 중개자 역할을 하여 메시지를 수신하고 관심 있는 클라이언트에게 메시지를 재방송합니다.

계속하자 기계용 트위터 그래도 비유. Twitter 사용자가 자신의 의미 없는 140자를 트윗할 수 있고 사용자가 다른 사용자를 '팔로우'하여 선별된 게시물 스트림을 볼 수 있는 것처럼 MQTT 클라이언트는 특정 채널을 구독하여 거기에서 모든 메시지를 수신하고 자신의 메시지를 게시할 수 있습니다. 그 채널로. 이 게시 및 구독 패턴은 펍/서브 , 전통과 달리 클라이언트 서버 HTTP의 모델.

HTTP를 사용하려면 통신 중인 시스템에 손을 내밀어 Hello라고 말한 다음 데이터를 가져오거나 입력하는 동안 지속적으로 서로를 확인해야 합니다. pub/sub를 사용하면 게시를 수행하는 클라이언트가 구독 중인 클라이언트를 알 필요가 없습니다. 메시지를 펌핑하기만 하면 브로커가 구독된 클라이언트에 메시지를 다시 배포합니다. 모든 클라이언트는 Twitter 사용자처럼 주제를 게시하고 구독할 수 있습니다.

하지만 Twitter와 달리 MQTT는 140자로 제한되지 않습니다. 데이터에 구애받지 않기 때문에 작은 숫자나 큰 텍스트 블록, JSON 형식의 데이터그램, 심지어 이미지와 바이너리 파일까지 보낼 수 있습니다.

MQTT가 모든 면에서 HTTP보다 낫다는 것은 아닙니다. ~이다 집 전체에 많은 센서가 있고 지속적으로 보고하는 경우에 더 적합합니다.

OpenHAB가 MQTT 브로커 역할을 하지 않는다는 사실을 아는 것도 중요합니다. 이 문제는 나중에 다루겠습니다. 그러나 OpenHAB는 클라이언트 역할을 합니다. OpenHAB 활동 로그를 게시하고 특정 채널을 장치에 바인딩할 수 있으므로 예를 들어 특정 채널에서 MQTT 메시지로 제어되는 스위치를 가질 수 있습니다. 이것은 센서로 가득 찬 집을 만드는 데 이상적입니다.

Pi에 Mosquitto 설치

OpenHAB에는 MQTT 클라이언트가 포함되어 있으므로 주제를 구독하고 메시지를 게시할 수도 있지만 서버 역할을 하지는 않습니다. 이를 위해서는 웹 기반 MQTT 브로커(유료 또는 무료)를 사용하거나 Pi에 무료 소프트웨어를 설치해야 합니다. 모든 것을 사내에 보관하고 싶기 때문에 Pi에 Mosquitto를 설치했습니다.

불행히도 일반적인 apt-get을 통해 사용할 수 있는 버전은 완전히 구식입니다. 대신 최신 소스를 추가해 보겠습니다.

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key

sudo apt-key mosquitto-repo.gpg.key 추가

cd /etc/apt/sources.list.d/

sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list

sudo apt-get 설치 모기

이것이 MQTT 서버를 가동하고 로컬 네트워크에서 실행하기 위해 필요한 전부입니다. 브로커는 기본적으로 포트 1883에서 실행됩니다.

크로스 플랫폼인 무료 MQTT.fx를 사용하여 MQTT 서버가 작동하는지 확인하십시오. 설정 아이콘을 클릭하여 새 프로필을 만들고 Raspberry Pi의 IP 주소 또는 이름을 입력합니다. 저장하고 연결을 누르십시오. 오른쪽 상단의 작은 신호등이 녹색으로 바뀌면 잘 가신 것입니다.

빠른 테스트를 위해 '구독' 탭을 클릭하고 다음을 입력합니다. 인토픽 / 텍스트 상자에 입력한 다음 구독하다 단추. 이제 0개의 메시지가 표시되지만 inTopic이라는 주제에 대한 메시지를 수신하도록 구독했습니다. 게시 탭으로 돌아가서 작은 상자에 inTopic을 입력하고 아래의 큰 텍스트 상자에 짧은 메시지를 입력합니다. 때리다 게시 몇 번이고 구독 탭을 다시 살펴보세요. 해당 주제에 나타난 몇 가지 메시지가 표시되어야 합니다.

네트워크에 실제 센서를 추가하기 전에 MQTT 네트워크를 구성하고 필터링할 수 있는 주제 수준에 대해 알아야 합니다. 주제 이름은 대소문자를 구분하며 $로 시작하거나 공백을 포함하거나 ASCII가 아닌 문자를 포함해서는 안 됩니다. 실제로 변수 이름에 대한 표준 프로그래밍 방식입니다.

/ 구분 기호는 계층적 토픽 레벨을 나타냅니다. 예를 들어 다음은 모두 유효한 토픽 레벨입니다.

inTopic / smallSubdivision / evenSmallerSubdivision

myHome/거실/온도

myHome/거실/습도

myHome/주방/온도

myHome/주방/습도

이미 이 트리 구조가 센서와 장치로 가득 찬 스마트 홈에 얼마나 완벽한지 알 수 있을 것입니다. 한 방에서 여러 센서와 함께 사용하는 가장 좋은 방법은 동일한 채널에 여러 유형의 센서를 게시하려고 하는 것보다 각 센서 변수를 고유한 주제 수준으로 게시하는 것입니다. .

그런 다음 클라이언트는 원하는 수의 개별 주제 수준을 게시하거나 구독하거나 일부 특수 와일드카드 문자를 사용하여 트리의 상위에서 필터링할 수 있습니다.

+ 와일드카드는 한 주제 수준을 대체합니다. 예를 들어:

myHome/+/온도

클라이언트를 둘 다 구독할 것입니다.

myHome/거실/온도

myHome/주방/온도

... 그러나 습도 수준은 아닙니다.

#은 다중 레벨 와일드카드이므로 다음을 사용하여 livingRoom 센서 배열에서 무엇이든 가져올 수 있습니다.

마이홈/거실/#

기술적으로 루트 레벨 #을 구독할 수도 있습니다. 이 루트 레벨 #은 브로커를 통해 모든 것이 절대적으로 전달되지만 이는 소방 호스를 얼굴에 대고 있는 것과 같을 수 있습니다. 약간 압도적입니다. HiveMQ에서 공개 MQTT 브로커에 연결하고 #을 구독하십시오. 클라이언트가 충돌하기 전에 몇 초 동안 약 300개의 메시지를 받았습니다.

MQTT 초보자 팁: ' /내 집/' '와는 다른 주제다. 내 집/' – 시작 부분에 슬래시를 포함하면 기술적으로 유효하지만 혼동될 수 있으므로 권장되지 않는 빈 주제 수준이 생성됩니다.

이론을 알았으니 이제 Arduino, 이더넷 실드 및 DHT11 온도 및 습도 센서를 사용해 보겠습니다. 스타터 키트에 하나가 있을 수 있지만 그렇지 않은 경우 환경 센서를 모션으로 교체하십시오. 센서(또는 버튼).

이더넷 연결을 사용하여 Arduino에서 MQTT 게시

Wi-Fi 또는 이더넷이 내장된 하이브리드 Arduino 호환 장치가 있는 경우에도 작동합니다. 결국 우리는 모든 방에서 네트워크 연결을 사용해야 하는 더 나은/저렴한 방법을 원하게 되지만 이것은 기본을 배우는 데 도움이 됩니다.

다운로드 시작 Github의 pubsubclient 라이브러리 . 'ZIP으로 다운로드' 버튼을 사용했다면 구조가 약간 틀립니다. 압축을 풀고 폴더 이름을 그냥 pubsub 클라이언트 , 다음 두 파일을 src 폴더를 다운로드하고 다운로드한 폴더의 루트로 한 수준 위로 이동합니다. 그런 다음 전체 폴더를 아두이노/라이브러리 예배 규칙서.

적응할 수 있는 샘플 코드는 다음과 같습니다. : DHT11 신호 출력은 핀 7에 있습니다. 다음 줄에서 Pi의 서버 IP를 변경하십시오.

client.setServer('192.168.1.99', 1883);

불행히도 우리는 친숙한 이름을 사용할 수 없습니다 (내 경우에는 OpenHAB.local) Arduino의 TCP/IP 스택은 매우 단순하고 Bonjour 이름 지정을 위한 코드를 추가하는 것은 낭비하고 싶지 않은 많은 메모리가 되기 때문입니다. 센서 데이터가 방송되는 주제를 변경하려면 다음 행까지 아래로 스크롤하십시오.

문자 버퍼[10];

dtostrf(t,0,0, 버퍼);

client.publish('openhab/himitsu/온도', 버퍼);

dtostrf(h,0,0, 버퍼);

client.publish('openhab/himitsu/humidity', 버퍼);

코드에는 명령 채널에 대한 구독도 포함됩니다. 다음 줄을 찾아 조정합니다.

client.subscribe('openhab/himitsu/command');

주변의 코드를 살펴보면 특정 채널에 명령을 보내는 등의 방법으로 LED 또는 릴레이를 쉽게 제어할 수 있음을 알 수 있습니다. 예제 코드에서는 단순히 명령 수신을 확인하는 메시지를 다시 보냅니다.

코드를 업로드하고 Arduino를 네트워크에 연결한 다음 MQTT.fx를 사용하여 다음 중 하나를 구독하십시오. # 또는 openhab / himitsu / # (또는 방 이름을 변경했지만 끝에 #을 포함하는 것을 잊지 마십시오). 곧 메시지가 들어오는 것을 볼 수 있을 것입니다. 명령 주제에 ON 또는 OFF를 보내면 확인 메시지도 다시 표시됩니다.

OpenHAB용 MQTT 바인딩

방정식의 마지막 단계는 이것을 OpenHAB에 연결하는 것입니다. 이를 위해서는 물론 바인딩이 필요합니다.

sudo apt-get install openhab-addon-binding-mqtt

sudo chown -hR openhab:openhab /usr/share/openhab

그리고 구성 파일을 편집하여 바인딩을 활성화합니다.

mqtt:broker.url=tcp://localhost:1883

mqtt:broker.clientId=openhab

OpenHAB 다시 시작

sudo 서비스 오픈합 재시작

그런 다음 항목을 한두 개 추가해 보겠습니다.

/* MQTT 센서 */

숫자 Himitsu_Temp '히미츠 온도 [%.1f °C]' (히미츠,온도) {mqtt='<[broker:openhab/himitsu/temperature:state:default]'}

Number Himitsu_Humidity 'Himitsu Humidity [% .1f %%]'(Himitsu, Humidity) {mqtt = '<[broker:openhab/himitsu/humidity:state:default]'}

이제 형식을 이해해야 합니다. 그것은 점점 번호 항목 지정된 주제에 대한 MQTT 바인딩에서. 이것은 간단한 예입니다. 위키 페이지를 참조할 수 있습니다. 훨씬 더 복잡해질 수 있습니다 .

축하합니다. 이제 저렴한 Arduino 기반 센서 어레이의 기초가 생겼습니다. 우리는 나중에 이것을 다시 방문하여 Arduino를 완전히 별도의 RF 네트워크에 배치할 것입니다. 동일한 버전도 만들었습니다. Wizwiki 7500 보드용 당신이 그 중 하나를 가지고 있다면.

지속성 및 그래프 데이터

지금쯤이면 Z-Wave 또는 MQTT를 실행하는 맞춤형 Arduino에서 많은 센서가 설정되었을 것입니다. 따라서 언제든지 해당 센서의 현재 상태를 볼 수 있고 규칙에서 해당 값에 반응해야 합니다. 그러나 센서 값에 대한 흥미로운 점은 일반적으로 시간이 지남에 따라 변한다는 것입니다. 바로 여기에 지속성과 그래프가 필요합니다. 고집 OpenHAB에서 시간이 지남에 따라 데이터를 저장하는 것을 의미합니다. 계속해서 RRD4J(Java용 라운드 로빈 데이터베이스)를 설정해 보겠습니다. 데이터가 라운드 로빈 방식으로 저장되기 때문입니다. 오래된 데이터는 데이터베이스 크기를 압축하기 위해 삭제됩니다.

다음 명령을 사용하여 rrd4j 패키지를 설치합니다.

sudo apt-get install openhab-addon-persistence-rrd4j
sudo chown -hR openhab:openhab /usr/share/openhab

그런 다음 이라는 새 파일을 만듭니다. rrd4j.persist 에서 구성/지속성 폴더. 다음을 붙여넣습니다.

전략 {

매분 : '0 * * * * ?'

모든 시간 : '0 0 * * * ?'

매일 : '0 0 0 * * ?'

기본값 = 모든 변경

}

항목 {

// 값이 업데이트될 때 기본값으로 모든 것을 유지하고 시작 시 데이터베이스에서 복원합니다.

* : 전략 = everyChange, restoreOnStartup

// 다음으로 Temperature 그룹의 모든 항목에 대해 everyHour의 특정 전략을 정의하고 Humidity에 대한 매분을 정의합니다.

휴대 전화가 과열되는 것을 막는 방법

온도* : 전략 = everyHour

습도* : 전략 = everyMinute

// 또는 여기에 다음과 같은 특정 항목을 추가할 수 있습니다.

//침실_습도,JamesInOffice : 전략 = everyMinute

}

이 파일의 첫 번째 부분에서 우리는 전략을 정의하고 있습니다. 이는 CRON 표현식에 이름을 부여하는 것을 의미합니다. 이것은 이미 My.OpenHAB에서 했던 것과 동일하지만 이번에는 everyDay, everyHour 및 everyMinute에서 사용할 수 있는 몇 가지 새로운 전략을 만듭니다. 아직 모두 사용하지는 않았지만 앞으로 사용하게 될 것입니다.

파일의 후반부에서 rr4dj에게 저장할 데이터 값을 알려줍니다. 기본적으로 업데이트할 때마다 모든 것을 저장하지만 특정 센서에 대한 몇 가지 시간 기반 전략도 지정했습니다. 온도는 별로 신경쓰지 않는 편이라 매시간만 저장하도록 설정했는데 습도는 저에게 큰 관심사여서 매분 어떻게 변하는지 보고 싶습니다. 특정 시간에 저장하고 싶은 다른 데이터가 있는 경우 지금 여기에 추가하거나 필요에 따라 조정합니다.

참고: 데이터도 그래프로 표시하려면 1분에 한 번 이상 데이터를 저장해야 합니다. 센서 데이터가 이렇게 빨리 업데이트되더라도 문제가 되지 않습니다. rr4dj에게 1분에 한 번씩 데이터를 저장하도록 지시하기만 하면 됩니다.

이를 정의하면 값이 저장되고 있음을 알려주는 일부 디버그 출력이 표시되기 시작해야 합니다.

다음으로, 이 모든 데이터의 예쁜 그래프를 만들어 봅시다. 정말 쉽습니다. 개별 센서의 그래프를 만들려면 사이트 맵에 다음을 추가하세요.

차트 항목=침실_습도 기간=h

그것이 말 그대로 당신이 필요로하는 전부입니다. 기간의 유효한 값은 다음과 같습니다. 시간, 4시간, 8시간, 12시간, D, 3D, W, 2W, M, 2M, 4M, Y ; 이것이 무엇을 의미하는지 분명해야 합니다. 지정하지 않은 경우 하루 종일 데이터에 대해 기본적으로 D입니다.

여러 항목이 있는 그래프를 만들려면 대신 그룹 이름을 그래프로 나타내면 됩니다.

차트 항목=습도 기간=h

이 그래프를 다른 곳에서도 사용할 수 있다는 사실에 관심이 있을 수도 있습니다. 다음 URL을 사용하여 이미지를 생성합니다. http://YOUROPENHABURL:8080/chart?groups=Humidity&period=h

어때요 당신의 OpenHAB 시스템이 온다?

이번 가이드에서는 여기까지입니다. 하지만 이것이 OpenHAB에 대한 마지막 소식이 될 것이라고 기대하지 마십시오. 이 안내서와 초보자 안내서가 완전한 OpenHAB 시스템을 개발할 수 있는 견고한 토대를 제공했길 바랍니다. 그러나 이것은 결코 완전히 완료되지 않은 프로세스입니다.

고맙게도 OpenHAB는 단순한 규칙 복잡성에서 최고의 홈 자동화에 이르기까지 몇 대의 장치에서 수백 대의 장치로 확장할 수 있습니다. 그렇다면 시스템은 어떻습니까? 어떤 기기를 선택하셨나요? 당신이 처리할 다음 큰 프로젝트는 무엇입니까?

댓글로 이야기해 보겠습니다. 이 가이드가 유용하다고 생각되면 공유 버튼을 클릭하여 친구에게도 OpenHAB 시스템을 설정할 수 있는 방법을 알려주세요.

우리가 추천하고 토론하는 항목이 마음에 드셨으면 좋겠습니다! MUO는 제휴 및 후원 파트너십을 가지고 있으므로 귀하의 구매 중 일부에서 수익의 일부를 받습니다. 이는 귀하가 지불하는 가격에 영향을 미치지 않으며 최고의 제품 추천을 제공하는 데 도움이 됩니다.

공유하다 공유하다 트위터 이메일 음성 애니메이션에 대한 초보자 가이드

연설에 애니메이션을 적용하는 것은 어려울 수 있습니다. 프로젝트에 대화를 추가할 준비가 되었으면 프로세스를 분석해 드리겠습니다.

다음 읽기
관련 항목
  • DIY
  • 똑똑한 집
  • 아두이노
  • 홈 오토메이션
  • 장형
  • 롱폼 가이드
저자 소개 제임스 브루스(707건의 기사 게재)

James는 인공 지능 학사 학위를 보유하고 있으며 CompTIA A+ 및 Network+ 인증을 받았습니다. 하드웨어 리뷰 편집자로 바쁘지 않을 때는 LEGO, VR 및 보드 게임을 즐깁니다. MakeUseOf에 합류하기 전에 그는 조명 기술자, 영어 교사 및 데이터 센터 엔지니어였습니다.

제임스 브루스가 참여한 작품 더보기

뉴스레터 구독

뉴스레터에 가입하여 기술 팁, 리뷰, 무료 전자책 및 독점 거래를 확인하십시오!

구독하려면 여기를 클릭하세요.