Fuso Orario Di Raspberry: Come Impostare La Timezone Di Un Raspberry Pi Da PC Windows Usando C#.
In questo articolo abbiamo visto come impostare via rete la data e l’ora di un Raspberry Pi utilizzando un programma implementato in C-Sharp: vediamo ora come modificare, sempre da un programma scritto in C#, la timezone — fuso orario — di raspberry.
Per prima cosa è necessario procurarsi la libreria SshNet che consente la comunicazione tra PC e Raspberry Pi attraverso il protocollo Secure shell mediante sessione remota cifrata attraverso la rete (il file Renci.Sshnet.dll con la libreria SSH è scaricabile da Codeplex).
Quindi aprite Visual Studio e create un nuovo progetto C# (ad es. una Windows Form Application).
Nel riquadro Esplora Soluzioni, aggiungere il riferimento alla libreria SSH sfogliando le cartelle per selezionare quella in cui avete scaricato il file dll, e quindi cliccate col tasto destro del mouse sull’icona del file form (es: Form1.cs ) scegliendo Visualizza codice per aprire il file sorgente.
Create una funzione (es: SetTZ ) in cui inserirete il codice C#:
private void SetTZ()
{
// do something hot!
}
Create un client SSH utilizzando i seguenti parametri connessione:
- host: di solito il nome del dispositivo (es: raspberry ) oppure l’ip locale (es: 192.168.1.11 )
- username: nome-utente valido per accedere al Raspberry (es: pi )
- password: la password del nome-utente
Renci.SshNet.ConnectionInfo info = new Renci.SshNet.PasswordConnectionInfo(host, username, password);
Renci.SshNet.SshClient client = new Renci.SshNet.SshClient(info);
e quindi avviate la connessione:
client.Connect();
Preparate la stringa con il fuso orario di Raspberry: attenzione che i valori consentiti sono quelli conformi alle specifiche IANA (ad esempio, per l’Italia il valore corretto è “Europe/Rome”):
string timezone = “Europe/Rome”;
Costruite poi l’istruzione da inviare via SSH per impostare il fuso orario:
string command = string.Format(“sudo echo \”{0}\” | sudo tee /etc/timezone > /dev/null”, timezone);
command += “; sudo dpkg-reconfigure -f noninteractive tzdata”;
Ora lanciate il comando via SSH:
Renci.SshNet.SshCommand cmd = client.RunCommand(command);
Non dimenticate di chiudere la connessione:
client.Disconnect();
Se tutto è andato per il meglio, il valore della proprietà ExitStatus dell’oggetto cmd sarà uguale a zero, altrimenti in cmd.Error troverete un messaggio di errore.
Ricompattiamo il codice C# che serve a impostare il fuso orario di Raspberry:
private void SetTZ(string host, string username, string password, string timezone)
{
try
{
Renci.SshNet.ConnectionInfo info = new Renci.SshNet.PasswordConnectionInfo(host, username, password);
Renci.SshNet.SshClient client = new Renci.SshNet.SshClient(info);
client.Connect();
string command = string.Format(“sudo echo \”{0}\” | sudo tee /etc/timezone > /dev/null”, timezone);
command += “; sudo dpkg-reconfigure -f noninteractive tzdata”;
Renci.SshNet.SshCommand cmd = client.RunCommand(command);
client.Disconnect();
if (cmd.ExitStatus == 0)
{
System.Windows.Forms.MessageBox.Show(“OK!”);
}
else
{
System.Windows.Forms.MessageBox.Show(cmd.Error, “Oops…”, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation);
}
}
catch (System.Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message, “Doh!”, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
}
}
Note
In caso di successo della procedura potete effettuare un controllo della timezone di Raspberry utilizando il codice C-Sharp presente in questo articolo precedente.
Attenzione anche a:
- Errori di autorizzazione: se non vi connettete usando le credenziali di un utente del gruppo amministratori del Raspberry, assicuratevi che possieda i permessi necessari ad eseguire i comandi richiesti dalla procedura.
- Errori di connessione: sostituendo il nome dispositivo con l’indirizzo ip si può ovviare al problema, ma in questo bisogna fare attenzione che l’ip del Raspberry può cambiare nel tempo se non è impostato staticamente.
Link utili:
- SSH.NET Library
- Protocollo SSH
- Database IANA
- Comandi Linux tee e dpkg-reconfigure