Fuso orario di Raspberry: come settarlo con C#

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:

Caricando...