반응형

녹칸다의 C#윈폼 예제에서 MQTT를 활용하는 내용에 문제점이 있어서 작성해두는 내용입니다~~!

publish하는 함수의 매개변수가 무엇인지 모르고 대충 써놨었는데 이게 불편함을 야기할 수 있습니다~~!

 

일단 제가 매뉴얼로 안내해드린 코드는 아래와 같습니다!

//지정Topic으로 Publish
client.Publish(Topic, Encoding.UTF8.GetBytes("0"), 0, true);

제일 마지막에 true라고 되어있는 매개변수가 문제가 되었는데요~!

저것을 true로 해두게되면 subscribe하고 있는 단말기가 부팅되었을때 가장 마지막으로 publish했던 메시지가 전송되게 됩니다~!

 

무슨말이냐면 C#윈폼쪽에서 메시지를 전송해야할 시점에 publish한 메시지가 다른쪽 디바이스로 전송이 되어야하는데(물론 이것은 잘 작동합니다) 다른쪽 디바이스가 재부팅되었을때도 전송되는 문제가 생깁니다!

 

예를들어 C#윈폼에서 원격지에 릴레이를 ON하라는 명령을 publish해놓았다고 하면 원격지에 디바이스쪽 릴레이가 작동됩니다만, 디바이스가 초기 부팅되었을때 OFF상태를 가진다고 할때, 부팅되자마자 C#에서 마지막으로 publish한 메시지인 ON명령이 자동으로 전송이되면서 명령을 내린적이 없는데 켜지게 되는 현상이 생길 수 있습니다~!

 

이것은 MQTT에서 서버와 클라이언트의 설정에 관련된 부분인것 같네요~!

아무튼 코드를 아래와 같이 마지막 매개변수를 false로 고쳐서 활용해야 우리가 원하는 목적에 맞게 동작하게 됩니다!

//지정Topic으로 Publish
client.Publish(Topic, Encoding.UTF8.GetBytes("0"), 0, false);

끝입니다~!

반응형
Posted by 덕력킹
,