Beebotte 데이터를 프록시 넘기기

소개



IFTTT의 Action을 로컬의 IEEE1888 스토리지에 보존하고 싶기 때문에, Beebotte 경유로 MQTT로 사용했지만, Proxy를 사용한 Firewall 때문에, MQTT를 통하지 않고 굳이 격침했다.
따라서, 다음과 같은 구조를 검토했다.

Beebotte 설정은 채널을 "ifttt", 리소스를 "action"으로 설정합니다.
Beebotte와 웹 페이지 사이에는 MQTT over Websockt라고 생각하지만 문서에는 명시되어 있지 않다.

IEEE1888 스토리지 설치



이번에는 VM에 설치했다.

우분투 설치



Ubuntu 12.04 LTS (Desktop)를 설치했습니다.
설치 후 화면이 표시되지 않는 문제가 있었지만 ctrl+shift+F1로 다른 터미널을 열
#sudo apt-get update
#sudo apt-get upgrade

로 최신 상태로 하고 재기동하면 무사히 화면 표시했다.

IEEE1888 스토리지 설치



ぇぇぇぇぉぉぉぉぉp. tp. i c. 네. 우우. 아 c. jp/ぢst/
FIAPStorage 단위 다운로드
 >FIAPStorage2: Axis2 1.6계, Tomcat7, JRE7, Ubuntu 12.04 LTS용
 >FIAPStorage2-20131011
설치합니다.
도중에 psql 행이 오류가 발생했기 때문에,
#psql -d fiapstorage2 -f fiapstorage2.sql

했다.
또한 Web은 데이터가 pointId가 2개 이상이 되지 않으면 표시되지 않는 것 같다. (없을 때는 없다고 표시하지만)

Beebotte의 WebSocket 확인



Beebotte 설정은 ぃ tp // 코 m / 마 y 후이 r / ms / 761c788 A9d8787bc610
참조

IFTTT



MakerChannel은 다음과 같은 느낌

URL이 Publish여야 합니다. Write라면 웹까지 가지 않습니다.

웹 페이지



다음 소스를 실행하여 IFTTT의 내용이 반영되는지 확인합니다. IFTTT의 시간 지연은 최대 15분이지만 대부분 30초 정도입니다.
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
<script src="http://beebotte.com/bbt.js" ></script>
</head>
<body>
<p>メッセージが届くと下に表示します。</p>
<div id="MsgBox" style="background:pink"></div>
<script type="text/javascript">
var bbt = new BBT('API_KEY');
bbt.subscribe( {channel: 'ifttt', resource: 'action'}, function(message){
   console.log(message.data);
   ocument.getElementById("MsgBox").textContent=message.data;
});
</script>
</body>
</html>

FIAPStorage에 Write 추가


<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
<script src="http://beebotte.com/bbt.js" ></script>
<script type="text/javascript">
var pointid="http://test.jp/ifttt_btn";
var fiapStorage="http://192.168.203.130/axis2/services/FIAPStorage";
var bbt = new BBT('API_KEY');
</script>
</head>
<body>
<p>メッセージが届くと下に表示します。</p>
<div id="MsgBox" style="background:pink"></div>

<hr />  
<p>FIAPStorageへの送信XMLを下に表示します。</p>
<div id="sndFiap" style="background:lime"></div>

<hr />  
<p>FIAPStorageからの返信を下に表示します。</p>
<div id="retFiap" style="background:aqua"></div>

<script type="text/javascript">
function content (id,msg){
var date = new Date();
var str="<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + 
        "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
        "<soapenv:Body>" +
        "<ns2:dataRQ xmlns:ns2=\"http://soap.fiap.org/\">" +
        "<transport xmlns=\"http://gutp.jp/fiap/2009/11/\">" +
        "<body>" +
        "<point id=\"" + id + "\">" +
        "<value time=\"" + date.getFullYear() + "-" + 
        ('0' + (date.getMonth() + 1)).slice(-2) + "-" + 
        ('0' + date.getDate()).slice(-2) + "T" + 
        ('0' + date.getHours()).slice(-2) + ":" + 
        ('0' + date.getMinutes()).slice(-2) + ":" + 
        ('0' + date.getSeconds()).slice(-2) + "+09:00\">" +
        msg + "</value>" +
        "</point>" +
        "</body>" +
        "</transport>" +
        "</ns2:dataRQ>" +
        "</soapenv:Body>" +
        "</soapenv:Envelope>";
return str;
}

bbt.subscribe( {channel: 'ifttt', resource: 'action'}, function(message){
   console.log(message.data);
   document.getElementById("MsgBox").textContent = message.data;
   document.getElementById("sndFiap").textContent = content(pointid,message.data);

   var request = new XMLHttpRequest();
   request.onreadystatechange = function()
   {
       if(request.readyState == 4)
       {
           if(request.status == 200)
           {
               var head = request.getAllResponseHeaders();
               var contentType = head.match(/Content-Type:([^\n]*)/)[1].trim();
               var text;
               switch(contentType){
                   case 'text/xml':
                       text = request.responseXML;
                       break;
                   default:
                       text = request.responseText;
               }
               document.getElementById("retFiap").textContent = text;
           }
           else if(request.status == 404)
           {
               document.getElementById("retFiap").textContent ='404 file not found';
           }
           else if(request.status == 0)
           {
               document.getElementById("retFiap").textContent ='ローカルファイルまたは別ドメインにアクセスしている可能性があります。';
           }
       }
   }
   request.open('POST',fiapStorage);
   request.setRequestHeader("SOAPAction", "\"http://soap.fiap.org/data\"");
   request.send(content(pointid,message.data));
   console.log("送信終了");
});
</script>
</body>
</html>

htp://jmqys. 하테나 bぉg. 코m/엔트리/2015/07/13/092033 을(를) 참고로 했습니다.

좋은 웹페이지 즐겨찾기