공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
간단히 하려고 합니다.
먼저 사용환경입니다.
HardWare : Raspberry Pi 3 Model B + Wi - Fi / 샤오미 게이트웨어 + 온습도 센서 2개
OS : Hassbian ( raspbian + Home-assistant )
목적 : home assistant 페이지가 아닌 별도로 샤오미 온습도 센서의 데이터를 받아서 웹 페이지를 구성하고 싶다.
Home assistant 가이드에는 javaScript 나 Python WebSocket을 이용한 데이터 수신 예제는 있지만 자바를 사용한 예제는 없습니다.
그래서 자바 웹 소켓 라이브러리를 사용해서 만들어보았습니다.
먼저 Python 예제 코드입니다.
import asyncio
import asyncws
import json
@asyncio.coroutine
def echo():
websocket = yield from asyncws.connect('ws://본인 라즈베리파이 ip 주소:8123/api/websocket')
yield from websocket.send(json.dumps(
{'id': '1', 'type': 'subscribe_events', 'event_type': 'state_changed'}))
while True:
message = yield from websocket.recv()
if message is None:
break
print(message)
asyncio.get_event_loop().run_until_complete(echo())
사용하는데 불편한 점은 asyncio는 기존에 있지만,
asyncws 는 따로 설치를 해주어야 한다는 점입니다.
그리고 Django를 몰라서 WAS와 연동하려면 또 공부를 해야하는 단점이 있었습니다.
자바 예제 )
웹 소켓 라이브러리 출처 : https://github.com/TooTallNate/Java-WebSocket
메이븐에 라이브러리 추가해줬습니다.
예제 코드 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | package websocket; import java.net.URI; import java.util.HashMap; import java.util.Map; import org.java_websocket.client.WebSocketClient; import org.java_websocket.handshake.ServerHandshake; public class MyWebsocketClient { public static final String URL = "ws://본인 라즈베리파이 ip 주소:8123/api/websocket"; public static final int TIMEOUT = 0; public static WebSocketClient wsc; public static URI uri; public static Map<String, String> data = new HashMap<>(); public static void main(String[] args) { method(); } public static void method() { try { uri = new URI(URL); wsc = new WebSocketClient(uri) { @Override public void onClose(int arg0, String arg1, boolean arg2) { System.out.println("1:" + arg0); System.out.println("2:" + arg1); System.out.println("3:" + arg2); } @Override public void onError(Exception arg0) { System.out.println("error: " + arg0.getMessage()); } @Override public void onMessage(String arg0) { System.out.println("receive: " + arg0); } @Override public void onOpen(ServerHandshake shs) { System.out.println("open: " + shs.getHttpStatus()); System.out.println(wsc.getReadyState()); wsc.send("{\"id\": \"1\", \"type\": \"subscribe_events\", \"event_type\": \"state_changed\"}"); } }; wsc.connect(); } catch (Exception e) { e.printStackTrace(); } } } | cs |
WebSocketClient 생성자 중 Map<String, String> 파라미터가 있는 생성자가 있어서
낚여서 계속 Map을 가지고 테스트하는데 시간을 많이 써버렸습니다.
저처럼 실수하지마시고, 바로 send() 함수에 위처럼 JSON 형식의 문자열을 보내면 됩니다.
그럼 위처럼 센서에 대한 데이터를 받을 수 있습니다 ㅎㅎ
감사합니다.
'라즈베리파이(Raspberry pi)' 카테고리의 다른 글
라즈베리파이 filezilla 파일질라에서 root 로 접속하기! (0) | 2018.03.06 |
---|---|
라즈베리파이 root 계정 사용방법! 비밀번호 설정 (0) | 2018.03.05 |
라즈베리파이 mysql 설치 및 root 비밀번호 설정하기! (4) | 2018.03.02 |
라즈베리파이 비밀번호 변경하기! raspberry pi change password (0) | 2018.03.02 |
라즈베리파이3 Model B 에 Hassbian 설치하기!!! + wireless network 설정 (1) | 2018.02.22 |