Community

Open allianCE for iot stANDard

&Cube Thyme이 죽는 현상 문의
Manager | 2017-07-05 11:40 | Views 1635

최종적으로 이렇게 변경해 보시기 바랍니다


var _server = null;

exports.ready = function tas_ready () {

    if(_server == null) {

        _server = net.createServer(function (socket) {

        console.log('socket connected');

        socket.id = Math.random() * 1000;

        tas_buffer[socket.id] = '';

        socket.on('data', tas_handler);

        socket.on('end', function() {

            console.log('end');

        });

        socket.on('close', function() {

            console.log('close');

        });

        socket.on('error', function(e) {

            console.log('error ', e);

        });

    }).listen(conf.ae.tasport, function() {

        console.log('TCP Server (' + ip.address() + ') for TAS is listening on port ' + conf.ae.tasport);

    });

  }

};


========================================================

문의하신 내용에 답변을 드립니다.


로그 메시지로 보아 

mqtt 프로토콜을 사용하는 것으로 보입니다.


코드상에서 crtae 상태로 전환되는 부분은 mqtt 브로커와 연결이 끊어지조 재연결이 되면

강제적으로 crtae 상태로 전환되어서

다시 처음 상태부터 시작하는 것 같습니다. 이 때 tcp 소켓을 열려 있는 상태이므로

에러가 발생하겠죠.


이부분은 버그로 인식해서 현재 업데이트 버전에는 수정을 해서 반영을 한 상태입니다. 

(7월 중순에 업데이트 버전을 공개할 예정입니다.)


다음과 같은 방법으로 수정하시면 됩니다.


tas.js에


exports.ready = function tas_ready () {
    net.createServer(function (socket) {

부분이 있습니다. 이 부분을 아래와 같이 수정해 보시기 바랍니다.
var _server = null;
exports.ready = function tas_ready () {
if(_server == null) {
_server = net.createServer(function (socket) {




---------------------------------------------------------

안녕하세요.


&Cube Thyme을 구동하고 한참 있으면(약 20분~1시간) 죽는 현상이 발생하여 문의 드립니다.


AE ID는 'ae-test0'으로 설정된 상태입니다.

Postman으로 Mobius쪽으로 ae-test0/cnt-timer에 대해 query를 날려보면 갱신은 잘 되고 있는 상태입니다.


Thyme이 죽을 때 메시지는 아래와 같습니다.


----------------------------------------------------------------------------

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

thyme cnt-timer {"value":"TAS468"} ---->

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

----> got data for [cnt-timer] from tas ---->

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

thyme cnt-timer {"value":"TAS469"} ---->

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

----> got data for [cnt-timer] from tas ---->

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

subscribe reg_resp_topic as /oneM2M/reg_resp/ae-test0/mobius-yt/#

subscribe resp_topic as /oneM2M/resp/ae-test0/mobius-yt/#

subscribe noti_topic as /oneM2M/req/mobius-yt/ae-test0/#

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

[sh_state] : crtae

/oneM2M/req/ae-test0/mobius-yt/json (json) {"m2m:rqp":{"op":"1","to":"/mobius-yt","fr":"ae-test0","rqi":"BkMDIYgVb","ty":"2","pc":{"m2m:ae":{"rn":"ae-test0","api":"0.2.481.1.1","rr":"true"}}}} ---->

/mobius-yt

x-m2m-rsc : 4105 <----

----> got data for [cnt-timer] from tas ---->

[sh_state] : rtvae

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

/mobius-yt/ae-test0

x-m2m-rsc : 2000 - ae-test0 <----

----> got data for [cnt-timer] from tas ---->

[sh_state] : crtct

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

/mobius-yt/ae-test0

0 - cnt-co2 - x-m2m-rsc : 4105 <----

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

/mobius-yt/ae-test0

1 - cnt-led - x-m2m-rsc : 4105 <----

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

/mobius-yt/ae-test0

2 - cnt-timer - x-m2m-rsc : 4105 <----

----> got data for [cnt-timer] from tas ---->

[sh_state] : delsub

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

/mobius-yt/ae-test0/cnt-led/sub-ctrl

0 - sub-ctrl - x-m2m-rsc : 2002 <----

----> got data for [cnt-timer] from tas ---->

[sh_state] : crtsub

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

/mobius-yt/ae-test0/cnt-led

0 - sub-ctrl - x-m2m-rsc : 2001 <----

events.js:141

      throw er; // Unhandled 'error' event

      ^


Error: listen EADDRINUSE :::3105

    at Object.exports._errnoException (util.js:870:11)

    at exports._exceptionWithHostPort (util.js:893:20)

    at Server._listen2 (net.js:1234:14)

    at listen (net.js:1270:10)

    at Server.listen (net.js:1366:5)

    at Object.ras_ready [as ready] (/usr/share/ncube/thyme/tas.js:58:8)

    at /usr/share/ncube/thyme/mqtt_app.js:281:21

    at Object. (/usr/share/ncube/thyme/mqtt_app.js:209:17)

    at mqtt_callback (/usr/share/ncube/thyme/mqtt_app.js:65:44)

    at MqttClient.mqtt_message_handler (/usr/share/ncube/thyme/mqtt_app.js:102:17)

root@LEDE:/usr/share/ncube/thyme# 

----------------------------------------------------------------------------


통신을 잘 하다가 갑자기 subscribe를 다시 하더니,

조금 있다가 3105번 포트(TAS 연결 포트)를 열려고 하는데, 이미 열려있는 포트라 에러가 나고 죽는 것으로 생각됩니다.

sh_state가 갑자기 crtae로 바뀌어버리는 것 같은데, 원인을 모르겠네요.


x86 머신에서 nodejs 4.4.5로 구동하였을 때 발생하여, 버전간 호환성 문제일까 하였으나,

Raspberry Pi에서 가이드 문서의 https://node-arm.herokuapp.com/node_archive_armhf.deb를 사용하였을 경우에도 동일하게 발생하여 nodejs 버전 문제는 아닌 것으로 생각됩니다.


확인 부탁 드립니다. 감사합니다.


문의하신 내용에 답변을 드립니다.


로그 메시지로 보아 

mqtt 프로토콜을 사용하는 것으로 보입니다.


코드상에서 crtae 상태로 전환되는 부분은 mqtt 브로커와 연결이 끊어지조 재연결이 되면

강제적으로 crtae 상태로 전환되어서

다시 처음 상태부터 시작하는 것 같습니다. 이 때 tcp 소켓을 열려 있는 상태이므로

에러가 발생하겠죠.


이부분은 버그로 인식해서 현재 업데이트 버전에는 수정을 해서 반영을 한 상태입니다. 

(7월 중순에 업데이트 버전을 공개할 예정입니다.)


다음과 같은 방법으로 수정하시면 됩니다.


tas.js에


exports.ready = function tas_ready () {
    net.createServer(function (socket) {

부분이 있습니다. 이 부분을 아래와 같이 수정해 보시기 바랍니다.
var _server = null;
exports.ready = function tas_ready () {
if(_server == null) {
_server = net.createServer(function (socket) {




---------------------------------------------------------

안녕하세요.


&Cube Thyme을 구동하고 한참 있으면(약 20분~1시간) 죽는 현상이 발생하여 문의 드립니다.


AE ID는 'ae-test0'으로 설정된 상태입니다.

Postman으로 Mobius쪽으로 ae-test0/cnt-timer에 대해 query를 날려보면 갱신은 잘 되고 있는 상태입니다.


Thyme이 죽을 때 메시지는 아래와 같습니다.


----------------------------------------------------------------------------

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

thyme cnt-timer {"value":"TAS468"} ---->

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

----> got data for [cnt-timer] from tas ---->

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

thyme cnt-timer {"value":"TAS469"} ---->

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

----> got data for [cnt-timer] from tas ---->

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

subscribe reg_resp_topic as /oneM2M/reg_resp/ae-test0/mobius-yt/#

subscribe resp_topic as /oneM2M/resp/ae-test0/mobius-yt/#

subscribe noti_topic as /oneM2M/req/mobius-yt/ae-test0/#

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

[sh_state] : crtae

/oneM2M/req/ae-test0/mobius-yt/json (json) {"m2m:rqp":{"op":"1","to":"/mobius-yt","fr":"ae-test0","rqi":"BkMDIYgVb","ty":"2","pc":{"m2m:ae":{"rn":"ae-test0","api":"0.2.481.1.1","rr":"true"}}}} ---->

/mobius-yt

x-m2m-rsc : 4105 <----

----> got data for [cnt-timer] from tas ---->

[sh_state] : rtvae

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

/mobius-yt/ae-test0

x-m2m-rsc : 2000 - ae-test0 <----

----> got data for [cnt-timer] from tas ---->

[sh_state] : crtct

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

/mobius-yt/ae-test0

0 - cnt-co2 - x-m2m-rsc : 4105 <----

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

/mobius-yt/ae-test0

1 - cnt-led - x-m2m-rsc : 4105 <----

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

/mobius-yt/ae-test0

2 - cnt-timer - x-m2m-rsc : 4105 <----

----> got data for [cnt-timer] from tas ---->

[sh_state] : delsub

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

/mobius-yt/ae-test0/cnt-led/sub-ctrl

0 - sub-ctrl - x-m2m-rsc : 2002 <----

----> got data for [cnt-timer] from tas ---->

[sh_state] : crtsub

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

/mobius-yt/ae-test0/cnt-led

0 - sub-ctrl - x-m2m-rsc : 2001 <----

events.js:141

      throw er; // Unhandled 'error' event

      ^


Error: listen EADDRINUSE :::3105

    at Object.exports._errnoException (util.js:870:11)

    at exports._exceptionWithHostPort (util.js:893:20)

    at Server._listen2 (net.js:1234:14)

    at listen (net.js:1270:10)

    at Server.listen (net.js:1366:5)

    at Object.ras_ready [as ready] (/usr/share/ncube/thyme/tas.js:58:8)

    at /usr/share/ncube/thyme/mqtt_app.js:281:21

    at Object.<anonymous> (/usr/share/ncube/thyme/mqtt_app.js:209:17)

    at mqtt_callback (/usr/share/ncube/thyme/mqtt_app.js:65:44)

    at MqttClient.mqtt_message_handler (/usr/share/ncube/thyme/mqtt_app.js:102:17)

root@LEDE:/usr/share/ncube/thyme# 

----------------------------------------------------------------------------


통신을 잘 하다가 갑자기 subscribe를 다시 하더니,

조금 있다가 3105번 포트(TAS 연결 포트)를 열려고 하는데, 이미 열려있는 포트라 에러가 나고 죽는 것으로 생각됩니다.

sh_state가 갑자기 crtae로 바뀌어버리는 것 같은데, 원인을 모르겠네요.


x86 머신에서 nodejs 4.4.5로 구동하였을 때 발생하여, 버전간 호환성 문제일까 하였으나,

Raspberry Pi에서 가이드 문서의 https://node-arm.herokuapp.com/node_archive_armhf.deb를 사용하였을 경우에도 동일하게 발생하여 nodejs 버전 문제는 아닌 것으로 생각됩니다.


확인 부탁 드립니다. 감사합니다.

안녕하세요.


&Cube Thyme을 구동하고 한참 있으면(약 20분~1시간) 죽는 현상이 발생하여 문의 드립니다.


AE ID는 'ae-test0'으로 설정된 상태입니다.

Postman으로 Mobius쪽으로 ae-test0/cnt-timer에 대해 query를 날려보면 갱신은 잘 되고 있는 상태입니다.


Thyme이 죽을 때 메시지는 아래와 같습니다.


----------------------------------------------------------------------------

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

thyme cnt-timer {"value":"TAS468"} ---->

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

----> got data for [cnt-timer] from tas ---->

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

thyme cnt-timer {"value":"TAS469"} ---->

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

----> got data for [cnt-timer] from tas ---->

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

subscribe reg_resp_topic as /oneM2M/reg_resp/ae-test0/mobius-yt/#

subscribe resp_topic as /oneM2M/resp/ae-test0/mobius-yt/#

subscribe noti_topic as /oneM2M/req/mobius-yt/ae-test0/#

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

x-m2m-rsc : 2001 <----

/mobius-yt/ae-test0/cnt-timer

<---- x-m2m-rsc : 2001 <----

[sh_state] : crtae

/oneM2M/req/ae-test0/mobius-yt/json (json) {"m2m:rqp":{"op":"1","to":"/mobius-yt","fr":"ae-test0","rqi":"BkMDIYgVb","ty":"2","pc":{"m2m:ae":{"rn":"ae-test0","api":"0.2.481.1.1","rr":"true"}}}} ---->

/mobius-yt

x-m2m-rsc : 4105 <----

----> got data for [cnt-timer] from tas ---->

[sh_state] : rtvae

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

/mobius-yt/ae-test0

x-m2m-rsc : 2000 - ae-test0 <----

----> got data for [cnt-timer] from tas ---->

[sh_state] : crtct

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

/mobius-yt/ae-test0

0 - cnt-co2 - x-m2m-rsc : 4105 <----

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

/mobius-yt/ae-test0

1 - cnt-led - x-m2m-rsc : 4105 <----

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

/mobius-yt/ae-test0

2 - cnt-timer - x-m2m-rsc : 4105 <----

----> got data for [cnt-timer] from tas ---->

[sh_state] : delsub

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

/mobius-yt/ae-test0/cnt-led/sub-ctrl

0 - sub-ctrl - x-m2m-rsc : 2002 <----

----> got data for [cnt-timer] from tas ---->

[sh_state] : crtsub

/oneM2M/req/ae-test0/mobius-yt/json (json) ---->

/mobius-yt/ae-test0/cnt-led

0 - sub-ctrl - x-m2m-rsc : 2001 <----

events.js:141

      throw er; // Unhandled 'error' event

      ^


Error: listen EADDRINUSE :::3105

    at Object.exports._errnoException (util.js:870:11)

    at exports._exceptionWithHostPort (util.js:893:20)

    at Server._listen2 (net.js:1234:14)

    at listen (net.js:1270:10)

    at Server.listen (net.js:1366:5)

    at Object.ras_ready [as ready] (/usr/share/ncube/thyme/tas.js:58:8)

    at /usr/share/ncube/thyme/mqtt_app.js:281:21

    at Object.<anonymous> (/usr/share/ncube/thyme/mqtt_app.js:209:17)

    at mqtt_callback (/usr/share/ncube/thyme/mqtt_app.js:65:44)

    at MqttClient.mqtt_message_handler (/usr/share/ncube/thyme/mqtt_app.js:102:17)

root@LEDE:/usr/share/ncube/thyme# 

----------------------------------------------------------------------------


통신을 잘 하다가 갑자기 subscribe를 다시 하더니,

조금 있다가 3105번 포트(TAS 연결 포트)를 열려고 하는데, 이미 열려있는 포트라 에러가 나고 죽는 것으로 생각됩니다.

sh_state가 갑자기 crtae로 바뀌어버리는 것 같은데, 원인을 모르겠네요.


x86 머신에서 nodejs 4.4.5로 구동하였을 때 발생하여, 버전간 호환성 문제일까 하였으나,

Raspberry Pi에서 가이드 문서의 https://node-arm.herokuapp.com/node_archive_armhf.deb를 사용하였을 경우에도 동일하게 발생하여 nodejs 버전 문제는 아닌 것으로 생각됩니다.


확인 부탁 드립니다. 감사합니다.