Connettersi in telnet a dispositivi Ubiquiti

Per conoscere il livello del segnale, il numero di dispositivi connessi od altre informazioni dai dispositivi Ubiquiti può essere utile connettersi in Telnet. L’interfaccia Telnet mette a disposizione una serie di comandi utili allo scopo.

In questo articolo utilizzando un dispositivo Ubiquiti desideriamo illustrare come grazie al blocco funzione CLIManager sia possibile gestire dai nostri sistemi programmabili una connessione Telnet verso qualsiasi dispositivo. Scarica progetto

L’FB gestisce l’interfaccia a linea di comando di un dispositivo, permette di inviare le stringhe di comando e di ricevere le stringhe di risposta. Passando lo stream di comunicazione è possibile utilizzarlo su qualsiasi media, porta seriale, connessione TCP (Client/Server), connessione UDP (Client/Server). Nel programma WiFiData di esempio viene gestita la connessione in TCP client ad una Picostation. Eseguita l’autenticazione (Username: user, Password: password) si accede alla interfaccia BusyBox, e vengono inviati i comandi:

“wstalist | grep “mac” | wc -l” Ritorna il numero di stazioni connesse (Se access point)
“mca-status | grep signal” Ritorna il livello del segnale (Se station)
“mca-status | grep ccq” Ritorna il CCQ (Se station)

Al primo loop di esecuzione SysFirstLoop attivo viene inizializzato il FB TCPClient con indicazione dell’indirizzo IP della Picostation e la porta 23 a cui connettersi. Viene inizializzato il FB della interfaccia comandi con l’indicazione del buffer e del tempo di attesa della risposta. Sono inizializzati i buffers per le temporizzazioni.

Ciclicamente viene eseguito il FB TCPClient ed il FB CLI di gestione interfaccia comandi. Al FB CLI viene passato lo stream di comunicazione in uscita dal TCPClient e viene abilitato alla avvenuta connessione.

Tutto il programma è gestito in una macchina a stati con l’operatore CASE dove CaseNr indica lo stato attivo. Prima dell’operatore CASE viene gestito il timeout di esecuzione che controlla se CaseNr rimane nello stesso sato con stato diverso da 0 per un tempo superiore al definito generando errore.

Stato 0: Viene temporizzata l’esecuzione della richiesta, passato il tempo di attesa viene attivata la connessione del TCPClient e si passa allo stato succesivo.

Stato 1: Si attende la connessione alla Picostation e la ricezione del messaggio iniziale che contiene la richiesta di login. Se ricevuto la parola “login” si invia il nome utente user e si forza l’attesa della risposta che contiene la richiesta della password.

Stato 2: Ricevuta la parola Password viene inviata la password, password.

Stato 3: Atteso il prompt di attivazione comandi “BusyBox”.

Stato 10: Inviato il comando wstalist | grep \”mac\” | wc -l<CR> di richiesta numero stazioni connesse.

Stato 11: La risposta al comando (Viene ricevuto anche l’echo) è wstalist | grep “mac” | wc -l<CR><LF>1<CR><LF>XM.v5.6.2#. Dove a seguire <CR><LF> vi è il numero di stazioni, nell’esempio 1. Quindi con la funzione SysVarsscanf si và ad acquisire il valore che viene poi trasferito nella variabile WiFiCnn.

Negli stati successivi si eseguono le stesse operazioni con altri comandi. Terminati tutti i comandi si imposta CaseNr a 0 e si riparte dallo stato 0 di attesa temporizzazione.

Was this article helpful?