2017-11-02 19 views
0

나는 모기를 설치 한 raspberry pi이 있습니다. 나는 pub와 sub를 사용하여 pi와 나의 우분투 기계 사이에서 메시지를주고 받는다. 나는 iot.conf 파일을 만들어 /etc/mosquitto/conf.d/iot.conf에 넣었다. 파일의 내용은 다음과 같은 :모스키토 중개자에서 오프라인 메시지를 저장하는 방법

connection CONIOT log_type all address 192.168.1.154:8883 remote_clientid sensor1 bridge_cafile /etc/ssl/certs/ca-certificates.crt try_private false cleansession true start_type automatic bridge_insecure false bridge_protocol_version mqttv311 bridge_tls_version tlsv1 notifications false

topiC# out 0 sensor/sensor1 sensor/sensor1 topiC# in 0 sensor/sensor1 sensor/sensor1

IP 주소는 내 라즈베리 파이의 IP 주소입니다. 나무 딸기 파이에 나는 센서 1 데이터를 게시하는 작은 파이썬 스크립트를 만들었습니다. 내 우분투 컴퓨터에서 나는 아래의 명령을 사용하여 데이터를 수신 할 수 있습니다

mosquitto_sub -t sensor/sensor1 -h 192.168.1.154 

를 내가 주제와 호스트의 IP 주소를 준 위의 명령에서. 그래서이 방법으로 나는 pi로부터 모든 메시지를받을 수 있습니다. 그러나 pi가 오프라인 상태가되는지 (wifi/lan이 없는지) 테스트하고 싶다면 메시지가 pi에 로컬로 저장되고 온라인 상태가되면 모든 메시지를받을 수 있습니까?

위의 구성으로 테스트했지만 오프라인 메시지를 수신하지 못했습니다. 내역 here에 따라 cleansession을 true로 설정했습니다.

누구든지 내가 실수하고있는 부분을 지적 할 수 있습니까? pi가 wifi/lan에 연결되어 있지 않을 때 mosquitto가 오프라인 메시지를 저장하려고합니다. 어떻게 테스트 할 수 있습니까? 여기

는 /etc/mosquitto/mosquitto.conf 파일의 내용이다 : 그것은 어떤 메시지를 대기 폐기하는 브로커를 지시하기 때문에 당신이 어떤 큐에 메시지를받지 않습니다

# Place your local configuration in /etc/mosquitto/conf.d/ 
# 
# A full description of the configuration file is at 
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example 

pid_file /var/run/mosquitto.pid 

persistence true 
persistence_location /var/lib/mosquitto/ 

log_dest file /var/log/mosquitto/mosquitto.log 

include_dir /etc/mosquitto/conf.d 

답변

1

true로 설정 cleansession으로.

을 false로 설정하고 우분투 시스템의 브로커가 pi에 대한 메시지를 대기열에 넣으려면 pi 브로커와 mosquitto_sub 클라이언트 모두에 고정 된 클라이언트 ID를 사용해야합니다. 클라이언트.

+0

안녕. 정보 주셔서 감사합니다. 나는 고정 된 clientid를 사용하여 언급 한 부분을 얻지 못했습니다. 다시 설명해 주시겠습니까? 우분투 쪽에서는 일반적으로 주제와 호스트 이름에 대해'mosquitto_sub' 명령에 -t와 -h를 사용하고 있습니다. 'mosquitto_sub' 명령으로 클라이언트를 추가 할 필요가 있습니다. 또한 당신이 참조하고있는 클라이언트는 iot.conf 파일에'remote_clientid sensor1'을 언급 한 것처럼 sensor1입니다. 감사합니다 –

+0

당신의 질문에 어떤 데이터가 흐르는 지 분명하지 않습니다. 그러나 메시지는 특정 클라이언트에 의해 누락 된 메시지를 복구하려는 경우 각 클라이언트에 대해 클라이언트 ID를 수정해야합니다 (브리징 할 때 브로커는 클라이언트입니다). – hardillb

+0

데이터가 파이에서 우분투로 흘러갑니다. 나는 pi로 센서를 연결했습니다. 나는'paho-mqtt' 파이썬 라이브러리를 사용하여 메시지를 게시하고 있습니다. 우분투 컴퓨터에서 나는 mosquitto_sub를 사용하여 그것을 받고 있습니다.질문에 설명 된대로 구성을 완료하고 모스 킷토에서 사용하기 위해 /etc/mosquitto/conf.d/에 저장했습니다. 이것은 내 설정입니다 –

0

나는 hardilb의 도움으로 문제를 해결했습니다. 거짓

  • 고정 클라이언트 ID
  • 사용 QOS 1.
  • 덕분에

    1. 설정 cleansession : 이것은 내가 오프라인 메시지를 얻기 위해 한 일이다.