개발 etc

javascript websocket + home assistant 자바스크립트로 홈 어시스턴트 웹소켓 데이터 받기

알통몬_ 2018. 5. 15. 10:48
반응형

 

 


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 

 

 

 


이전에 자바 웹소켓으로 홈 어시스턴트 웹소켓의 데이터를 받는 방법에 대해서


알아보았는데요.


http://altongmon.tistory.com/631


이번 포스팅에서는 자바가 아닌 자바스크립트 코드로 홈 어시스턴트 웹소켓


데이터를 받는 방법에 대해서 알아봅니다.


먼저 저의 홈어시스턴트 웹소켓 주소는


ws://10.20.2.117:8123/api/websocket 입니다.


websocket.html

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
<!DOCTYPE html>
<meta charset="utf-8"/>
<title>테스트</title>
<script language="javascript" type="text/javascript">
 
    var uri = "ws://10.20.2.117:8123/api/websocket";
    var output;
    function init() {
        output = document.getElementById("div1");
        callWebSocket();
    }
    function callWebSocket() {
        webSocket = new WebSocket(uri);
        webSocket.onopen = function(event) {
            onOpen(event);
        }
        webSocket.onmessage = function(event){
            writeToScreen('<span style="color:blue;"> receive3 :' + webSocket.readyState + '</span>');
            writeToScreen('<span style="color:blue;"> receive :' + event.data + '</span>');
            writeToScreen('<span style="color:blue;"> receive4 :' + webSocket.readyState + '</span>');
            console.log(event.data)
        };
        
        writeToScreen('<span style="color:blue;"> receive1 :' + webSocket.readyState + '</span>');
    
    }
    
    function onOpen(event) {
        writeToScreen("연결완료");
        writeToScreen(evt.data);
        writeToScreen('<span style="color:blue;"> receive2 :' + webSocket.readyState + '</span>');
        webSocket.send("{\"id\": \"1\", \"type\": \"subscribe_events\", \"event_type\": \"state_changed\"}")
    }
 
    function onClose(event) {
        writeToScreen("연결해제");
    }
 
    function onError(event) {
        writeToScreen('<span style="color:blue;"> error :' + event.data + '</span>');
    }
    
    function doSend(message) {
        writeToScreen("send :" + message);
        webSocket.send(message);
    }
    
    function writeToScreen(message) {
        var pre = document.createElement("p");
        pre.style.wordWrap = "break-word";
        pre.innerHTML = message;
        output.appendChild(pre);
    }
    
    window.addEventListener("load", init, true);
 
</script>
<body>
    <h2>WebSocket Test</h2>
    <div id ="div1"></div>
</body>
</html>
cs


처음 onOpen() 함수가 호출될 때

32번째 라인의 websocket.send("")을 꼭 해줘야 합니다.

        webSocket.send("{\"id\": \"1\", \"type\": \"subscribe_events\",
 \"event_type\": \"state_changed\"}")

 그리고 성공적으로 open이 되면

onmessage에서 데이터를 받을 때마다 html 페이지에 나오게 됩니다.

event.data 에서 받은 값들이 나옵니다.

실행영상입니다.

 

이상입니다.

감사합니다.


반응형