sobota, 10 października 2020

MQTT Diagnostic w C# ---- cześć 1

 



Mamy już server MQTT , który gdzieś tam sobie zalega dobrze schowany , jakieś urządzenia wysyłają doń dane i takowe odbierają.  Jednak wypadałoby jakoś mieć podgląd na to co tam słychać jak pracuje. Owszem możemy sobie podejrzeć MQTT Explorerem , ale nie potrzebujemy aż takiego kombajna w tej chwili dlatego też napiszemy sobie prosty programik w C#  który  będzie  prezentował kilka informacji.


Do szczęścia nie wiele nam będzie potrzebne programik ma być niewielki,  i prezentować dane 
o stanie i działaniu naszego małego serwera MQTT czyli takie np:

  • czas działania 
  • wersja servera
  • i ewentualnie coś innego ...

Aplikacje napiszemy jako tradycyjną/klasyczną opartą o formularze windows w darmowym środowisku jakim jest Visual Studio 2019 Community ... 


Jak rozpocząć projekt każdy wie. Nasza aplikacja poza informacjami powinna posiadać możliwość ustalenia z jakim serwerem się łączymy , choć w zasadzie wiemy gdzie nasz jest i pod jakim adresem itp, bowiem pracuje w sieci lokalnej (na razie), a co za tym idzie możemy ustalić parametry na stałe połączenia. Niemniej zrobimy sobie możliwość wprowadzania tych informacji.

Oczywiście skorzystamy z gotowej biblioteki obsługującej mqtt dla C#  którą musimy sobie zaimportować do odwołań :
Dostępny jest też jako pakiet NuGET więc doinstalowanie to tylko klik...




Idąc tym tropem zrobimy tak ze nasz program będzie zawierał 2 okna :
  • okno logowania
  • okno informacji 

Zatem do dzieła ....  

......:: Okno Logowania 

Nasze okienko będzie potrzebować 4 labeli  , 4 textboxów i jednego buttona ,  Ustawiamy sobie je jak nam pasuje na formularzu . Moje wygląda tak: 



Więc już widzicie jak to opisać  u mnie dodatkowo  zmieściło się obok przycisku logo forum.
Tak na pewno jest to formularz windows  :) ale możecie też sobie zrobić w WPF ....
Gdy już ustawiliśmy nasz layout czas przejść do pisania kodu ....

Teraz musimy dodać do naszego kodu bibliotekę M2Mqtt poprzez dopisanie :

using uPLibrary.Networking.M2Mqtt;
using uPLibrary.Networking.M2Mqtt.Messages;


Wpisujemy:

static MqttClient client;

by nie pisać MqttClient :) , a dalej poleci jak z płatka w przycisku Connect wpisujemy kod:


private void BtnConnect_Click(object sender, EventArgs e)
{
    try
        {
                client = new MqttClient(BrokerTxtB.Text, int.Parse(PortTxtB.Text), false, MqttSslProtocols.None, null, null);
                client.ProtocolVersion = MqttProtocolVersion.Version_3_1;
                byte code = client.Connect(Guid.NewGuid().ToString(), UserTxB.Text, PasswordTxtB.Text);
                if (code == 0)
                {
                  
                StatusCHK.Visible = true;               

                MetroMessageBox.Show(this, "Successfully Connect to Broker", "Message", MessageBoxButtons.OK, MessageBoxIcon.Question);
                    client.Subscribe(new string[] { "$SYS/broker/version", "$SYS/broker/uptime", "$SYS/broker/timestamp" }, new byte[] { 0, 0, 0 });
                }

                else MetroMessageBox.Show(this, "ERROR !! Connection Fail", "Message", MessageBoxButtons.OK, MessageBoxIcon.Question);
            }

            catch (Exception)
            {
                MetroMessageBox.Show(this, "Wrong Messages Format", "Message", MessageBoxButtons.OK, MessageBoxIcon.Question);
            }
        }


Jak widzicie ja sobie używam METRO.Frameworka ..  jest ładniejszy :)  i też dostępny w pakietach NuGET.... Na tą chwilę sprawdzimy czy możemy się zalogować do serwera. < Choć już są zdefiniowane toppicki, które będziemy subskrybować z naszego brokera. >W tym celu dodajemy checkkBoxa na naszej formie ...  u mnie to picturebox o nazwie StatusCHK i ustawiamy jego widoczność na true jak widać wyżej.  Zaś pod InitializeComponent() umieszczamy ...


            InitializeComponent();
            BrokerTxtB.Text = "192.168.0.178";    //ip lub url  brokera 
            PortTxtB.Text = "1883";                       // port 
            UserTxB.Text = "khadas";                   // nazwa użytkownika brokera
            PasswordTxtB.Text = "password";      //  hasło użytkownika brokera
            StatusCHK.Visible = false;                   //  wizualizacja połączenia  


Efekt działania u mnie jest następujący:



Jeśli teraz klikniemy na connect (u mnie ta zielona ikonka w prawym dolnym rogu)  otrzymamy :



bowiem parametry połączenia nie są prawidłowe , lub serwer nie odpowiedział ... tu akurat złe jest hasło do servera . Jeśli wprowadzimy prawidłowe hasło :


Jak widać połączenie jest prawidłowe i na tego znak pojawiła się ikonka WIFI ...
W tej części to na tyle ... 

W następnej zajmiemy się drugim formularzem gdzie będziemy wyświetlać informacje. Projekt 
w całości dostępny na githubie wraz z kodem źródłowym ....












Brak komentarzy:

Prześlij komentarz