SwitchBot 온습도계를 enebular-agent에 연결 (1)
7502 단어 SwitchBotenebular-agentenebular
블루투스에 연결된 센서를 에너버럴에이전트가 설치된 랩버리피에 연결해 센서의 값을 웹에 업로드하는 장치를 만들고 싶다.
블루투스에 연결된 센서는 다양한 종류가 있는데 이번에는 아주 저렴한 SwitchBot 온도계를 사용한다.아마존에서는 2천엔 정도의 가격으로 살 수 있다.
쓸 물건
여기.도 참조
SwitchBot 온도계
왜 이 센서를 선택했는지 말하자면 값싼 것도 있지만 블루투스(BLE)의 통신 방법이 공식적으로 공개됐다.
따라서 통신 방법을 조사할 필요가 없다.
따로 조사하는 방법도 있지만 번거롭기 때문에 스위치봇의 모바일 앱을 연결해 BLE의 고유 주소를 사전에 조사한다.
사전 준비
센서와 블루투스가 통신하는 부분은 파이썬의 블루피를 사용했다.그거 미리 설치할게요.
통신의 편의를 위해 매번 스캔을 해야 한다.블루피에서 Scan을 사용하려면 루트 권한이 필요하므로 루트에 블루피를 설치합니다.> sudo pip3 install bluepy
python 프로그램은 매개 변수를 통해 BLE의 고유 주소를 지정하고 표준 출력은 JSON형의 온도와 습도를 출력합니다.exec 노드에서 이 프로그램을 호출하여 결과를 얻습니다.
sensor.pyimport sys
import binascii
from bluepy.btle import Scanner, DefaultDelegate
macaddr = ''
class ScanDelegate( DefaultDelegate ):
def __init__( self ):
DefaultDelegate.__init__( self )
def handleDiscovery( self, dev, isNewDev, isNewData ):
if dev.addr == macaddr:
data = dev.getScanData()
for item in data:
if(item[0] == 22):
bytedata = binascii.unhexlify( item[2] )
flag = bytedata[6] & 0x80
temperature = ( bytedata[6] & 0x7F ) + ( bytedata[5] & 0x0F ) / 10
if not flag:
temperature = -temperature
humidity = bytedata[7] & 0x7F
print( '{ "temperature": ' + str( temperature ) + ', "humidity": ' + str( humidity ) + ' }' )
exit()
macaddr = sys.argv[1]
scanner = Scanner().withDelegate( ScanDelegate() )
scanner.scan( 0 )
프로세스 준비
간단하게 inject 노드에서 정기적으로 호출하고 debug 노드에서 센서의 값을 확인합니다.Enebular-agent는 Enebular editor에서 원격 모드로 연결됩니다.
exec 노드의 설정은 다음과 같습니다.
동작 확인
간단하게 json형으로 온도와 습도를 얻었다.
다음번
다음은 센서의 값을 웹에 올려 도표화하는 것이 흔한 일이기 때문에 올려서 어떻게든 연결해 보려고 합니다.
Reference
이 문제에 관하여(SwitchBot 온습도계를 enebular-agent에 연결 (1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/jksoft/items/5175d6c0b49928c2b214
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
센서와 블루투스가 통신하는 부분은 파이썬의 블루피를 사용했다.그거 미리 설치할게요.
통신의 편의를 위해 매번 스캔을 해야 한다.블루피에서 Scan을 사용하려면 루트 권한이 필요하므로 루트에 블루피를 설치합니다.
> sudo pip3 install bluepy
python 프로그램은 매개 변수를 통해 BLE의 고유 주소를 지정하고 표준 출력은 JSON형의 온도와 습도를 출력합니다.exec 노드에서 이 프로그램을 호출하여 결과를 얻습니다.sensor.py
import sys
import binascii
from bluepy.btle import Scanner, DefaultDelegate
macaddr = ''
class ScanDelegate( DefaultDelegate ):
def __init__( self ):
DefaultDelegate.__init__( self )
def handleDiscovery( self, dev, isNewDev, isNewData ):
if dev.addr == macaddr:
data = dev.getScanData()
for item in data:
if(item[0] == 22):
bytedata = binascii.unhexlify( item[2] )
flag = bytedata[6] & 0x80
temperature = ( bytedata[6] & 0x7F ) + ( bytedata[5] & 0x0F ) / 10
if not flag:
temperature = -temperature
humidity = bytedata[7] & 0x7F
print( '{ "temperature": ' + str( temperature ) + ', "humidity": ' + str( humidity ) + ' }' )
exit()
macaddr = sys.argv[1]
scanner = Scanner().withDelegate( ScanDelegate() )
scanner.scan( 0 )
프로세스 준비
간단하게 inject 노드에서 정기적으로 호출하고 debug 노드에서 센서의 값을 확인합니다.Enebular-agent는 Enebular editor에서 원격 모드로 연결됩니다.
exec 노드의 설정은 다음과 같습니다.
동작 확인
간단하게 json형으로 온도와 습도를 얻었다.
다음번
다음은 센서의 값을 웹에 올려 도표화하는 것이 흔한 일이기 때문에 올려서 어떻게든 연결해 보려고 합니다.
Reference
이 문제에 관하여(SwitchBot 온습도계를 enebular-agent에 연결 (1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/jksoft/items/5175d6c0b49928c2b214
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
간단하게 json형으로 온도와 습도를 얻었다.
다음번
다음은 센서의 값을 웹에 올려 도표화하는 것이 흔한 일이기 때문에 올려서 어떻게든 연결해 보려고 합니다.
Reference
이 문제에 관하여(SwitchBot 온습도계를 enebular-agent에 연결 (1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/jksoft/items/5175d6c0b49928c2b214
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(SwitchBot 온습도계를 enebular-agent에 연결 (1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/jksoft/items/5175d6c0b49928c2b214텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)