niedziela, 18 października 2020

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

 


Nasz programik umie nawiązać połączenie z brokerem lokalnym. Czas wiec wyświetlać informacje jakie nas interesują. Nasz program ma wyświetlać informacje podstawowe o naszym brokerze. Dosłownie:

  • wersja brokera
  • czas pracy 
  • znacznik czasowy 
I właśnie tym się teraz zajmiemy kończąc nasz bazowy program....





Nasz fragment programu w chwili obecnej prezentuje się następująco :


Teraz musimy nieco zmodyfikować kod i dodać kilka elementów oraz funkcji.  Na początek zajmijmy się dodaniem nowego panelu który rozciągamy na całym elemencie niebieskim ukrywając pod nim naszą widoczną formę. Nazwiemy sobie ten panel  PnlStatus . Następnie dodamy na nim 6 labeli i 2 pictureboxy... 



O uzyskamy taki efekt.  W 3ch labelach wpisujemy nazwy wyświetlanych danych, natomiast 3m pozostałym zmieniamy nazwy na:

  • LblVers
  • LblUTime
  • LblTStamp
Nie musimy zmieniać textu przypisanego do labelki dlatego w/w we wszystkich 3ch wpis label. Nie ma to znaczenia gdyż będziemy tą wartość modyfikować programowo.  Dwa widoczne niżej pictureboxy używane są jako przyciski. Ten z logo otwiera strony forum i bloga , zaś X zwyczajnie zamyka program.  No dobrze mamy ustawiony wygląd trzeba go oprogramować ... 

W tym celu w naszym kodzie na początku pod  InitializeComponent() dopisujemy :

PnlStatus.Visible = false;

Dzięki czemu nasz nowy panel będzie ukryty po uruchomieniu programu. W kodzie wygląda to tak:



Teraz przechodzimy do kodu naszego przycisku Połącz ... Właśnie w nim będą się odbywać główne czary.  Na tą chwile klikniecie powoduje połączenie i wyświetlenie mesageboxa z informacja o prawidłowym połączeniu z brokerem, dodatkowo ustawione są subskrybowane tematy. Teraz zmienimy nieco kod dodając kilka linii pod client.Subscribe(........... :

label1.Text = "MQTT Status";  // zmieniamy napis na belce 
PnlStatus.Visible = true;  //  pokazujemy nasz nowy panel 

Teraz po kliknięciu połącz w naszym programie Zmieni się Napis na belce z MQTT Connect na MQTT Status  oraz pokaże się nasz nowy panel  możecie sprawdzić ....  działa wiec trzeba tchnąć nieco w niego życia .  Musimy stworzyć sobie dwie funkcje. jedna będzie dekodować odebrane wiadomości do UTF , zaś druga po odebraniu właściwej z właściwego Topica będzie umieszczać info we właściwym miejscu .

Action<string, string> ReceiveAction;

        void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
        {
            ReceiveAction = Receive;
            try
            {
                this.BeginInvoke(ReceiveAction, Encoding.UTF8.GetString(e.Message), e.Topic);
            }
            catch { };
        }

oraz ...

void Receive(string message, string topic)
        {
            if (topic == "$SYS/broker/version")
            {
               
                LblVers.Text = message;
                return;
            }
            if (topic == "$SYS/broker/uptime")
            {
                LblUtime.Text = message;
                
            }
            if (topic == "$SYS/broker/timestamp")
            {
                LblTStamp.Text = message;
                
            }
        }

Tym sposobem jak widzicie mamy wszystko uporządkowane i możemy skompilować nasz program:



Wpisujemy prawidłowe hasło i klikamy połącz  w odpowiedzi  otrzymamy (jeśli wszystko jest ok):



Klikamy OK  gdyż się połączyliśmy .... i tym samym  dostajemy to co nas interesuje :





Jak widać wszystko działa prawidłowo więc zakończyliśmy tym samym pisanie naszego programu.
Oczywiście możecie teraz w dowolny sposób modyfikować i zmieniać zakres informacji dostępnych w naszym programie wedle własnego uznania .

Cały kod dostępny na githubie.

Github






1 komentarz: