web-dev-qa-db-fra.com

Comment définir l'heure système dans Windows 10 IoT?

Existe-t-il un moyen de définir l'heure système de mon application s'exécutant sur un Raspberry Pi 2 dans Windows 10 IoT Core Insider Preview? 

Cela ne fonctionne pas faute de kernel32.dll

    [DllImport("kernel32.dll", EntryPoint = "SetSystemTime", SetLastError = true)]
    extern static bool Win32SetSystemTime(ref SystemTime sysTime);
13
raven-ai

D'abord, connectez-vous à votre Pi 2 à l'aide de PowerShell .

Utilisez la commande set-date pour régler l'heure. Par exemple, si vous souhaitez définir la date au samedi 3 octobre 2015 à 14h00, vous devrez saisir set-date 10/3/2015 2:00PM.

La commande tzutil définit le fuseau horaire. Tapez tzutil /? pour utilisation

11
kiran

Vous pouvez appeler n’importe quelle routine PowerShell à partir de C # sur les systèmes UWP/IoT-Core. En tant que telles, les commandes PowerShell sont toujours disponibles dans/pour votre application.

Pour un exemple, voir l'exemple ProcessLauncher sur GitHub .

ALTERNATIVE, planifiez un script de démarrage PS comme suit:

Exécutez PowerShell en tant qu'administrateur sur le tableau (appuyez sur le bouton Windows et commencez à saisir PowerShell, cliquez avec le bouton droit de la souris sur l'icône et sélectionnez «Exécuter en tant qu'administrateur»).

Set-ExecutionPolicy RemoteSigned

Mastic à RPi en tant qu'administrateur et:

setx PATH "% PATH%; C:\Windows\System32"

schtasks/create/tn "StartupPowerShell"/tr c:\Startup.bat/sc onstart/ru SYSTÈME

Startup.bat

powershell -command "C:\IotCoreStartup.ps1"

IotCoreStartup.ps

$logFile = 'C:\StartupLog.txt'

get-date > $logFile

tzutil /s "UTC" >> $logFile

# set alternate time servers
"Setting additional time servers" >> $logFile
w32tm /config /syncfromflags:manual /manualpeerlist:"0.windows.time.com 1.pool.ntp.org" >> $logFile

Suppression d'une tâche planifiée si nécessaire:

schtasks/Delete/TN "StartupPowerShell"

Exécuter une tâche planifiée si pour tester:

schtasks/Run/tn "StartupPowerShell"

4
GGleGrand

Apparemment, il semble qu'il n'y ait aucun moyen de modifier l'heure du système, mais voici un moyen de contourner le problème pour obtenir au moins l'heure exacte dans votre application. J'ai créé une classe TimeManager, les parties importantes sont les suivantes.

Obtenez l'heure correcte à tout moment (par exemple, NTP, une autre heure réseau, une entrée utilisateur, etc.) et entrez-la dans la méthode UpdateOffset.

Dans le reste de l'application, utilisez TimeManager.Now au lieu de DateTime.Now

    static TimeSpan _offset = new TimeSpan(0,0,0);
    public static TimeSpan CurrentOffset //Doesn't have to be public, it is for me because I'm presenting it on the UI for my information
    {
        get { return _offset; }
        private set { _offset = value; }
    }

    public static DateTime Now
    {
        get
        {
            return DateTime.Now - CurrentOffset;
        }
    }

    static void UpdateOffset(DateTime currentCorrectTime) //May need to be public if you're getting the correct time outside of this class
    {
        CurrentOffset = DateTime.UtcNow - currentCorrectTime;
        //Note that I'm getting network time which is in UTC, if you're getting local time use DateTime.Now instead of DateTime.UtcNow. 
    }

Je suggère également d’ajouter des éléments tels que le suivi de la dernière heure de mise à jour et un indicateur pour indiquer si l’heure a déjà été mise à jour, mais ne veut tout simplement pas encombrer l’échantillon de code.

3
raven-ai

J'ai utilisé un RTC pour régler l'heure sur mon Raspberry Pi. Bien que Windows-iot ne prenne pas en charge de manière native l'initialisation de l'horloge logicielle du Raspberry Pi à partir d'une horloge temps réel, après plusieurs heures de réflexion sur les options, j'ai trouvé quelque chose qui fonctionne pour moi. 

J'ai créé un programme de console capable de sauvegarder l'heure système sur le RTC ou de lire l'heure dans le RTC et de l'imprimer sous forme de chaîne. J'ai créé un script Power Shell qui exécutera ce programme au démarrage du système pour obtenir l'heure de l'horloge en temps réel et transmettre la chaîne à la commande set-date. 

Les détails sont ici: http://www.codeproject.com/Articles/1113626/Adding-the-Missing-Real-Time-Clock-twindows-IoT

3
Joel

1-Nouveau projet universel
2-Ajouter une référence> Extensions> Windows IOT Extensions for UWP
3- Placez un bouton, un sélecteur de date et un contrôle de chronomètre sur votre MainPage.xaml
et

private void buttonSetSystemDatetime_Click(object sender, RoutedEventArgs e)
        {
            DateTimeOffset dto = datePicker1.Date+ timePicker1.Time;
            Windows.System.DateTimeSettings.SetSystemDateTime(dto);
        }

4- dans les paramètres de projet> définissez votre version cible et la version minimale 10.0; construire 16299
5- double-cliquez sur appxmanifest> Fonctionnalités> cochez ON "Gestion du système"

6- Lancez l'application dans IOT et appuyez sur le bouton. que de revenir à l'application par défaut. le tour est joué! date/heure système modifiée. 

note: plutôt pour le régler à chaque fois. Je vous propose d'acheter un module RTC (horloge temps réel) bon marché. (nécessite également un codage supplémentaire)

2
Kursat Turkay

Utilisez Renci SSH Shell pour vous reconnecter au périphérique en tant qu'administrateur, puis utilisez la commande powershell pour définir la date et l'heure.

public static int SshCommand(string command, out string dataOut, out string error)
    {

        dataOut = "";
        error = "";

        try
        {

            using (var client = new SshClient("127.0.0.1", USER_NAME, PASSWORD))
            {
                client.Connect();
                //command = "powershell -Command " + "\u0022" + "set-date -date '8/10/2017 8:30:00 AM'" + "\u0022";
                //command = "netsh interface ip show config";
                var cmd = client.RunCommand(command);
                var output = cmd.Result;
                client.Disconnect();
            }

            return 1;
        }
        catch (Exception ex)
        {
            error = ex.Message;
            return 0;
        }

    }


public static int SSHSetDateTime(DateTime dateTime)
    {

        // Variables
        int returnValue = 0;
        string command;
        string error;
        string dataOut;

        // Build date
        command = String.Format("powershell -Command \u0022set-date -date '{0:M/d/yyyy H:mm:ss tt}'\u0022", dateTime);

        //Build date
        if (SystemEx.SshCommand(command, out dataOut, out error) == 1)
        {
            // Ok
            returnValue = 1;
        }

        // Return
        return returnValue;

    }
2
Nathan Price

reportez-vous à la documentation de l'API Microsoft et dans l'espace de noms Windows.System, vous pouvez définir la date et l'heure du système avec la méthode SetSystemDateTime.

mais vous devez savoir qu'il est disponible dans 

  • Windows SDK Extension SDK (v10.0.16225.0)} et versions ultérieures

vous pouvez utiliser la classe statique DateTimeSettings 

public static class DateTimeSettings

ensuite, appelez la méthode statique SetSystemDateTime et envoyez votre objet de type DateTimeOffset pour définir la date et l'heure sur Windows Iot.

public static void SetSystemDateTime(DateTimeOffset utcDateTime)

https://docs.Microsoft.com/en-us/uwp/api/windows.system.datetimesettings

1
Parsa Karami

Je me rends compte que vous demandez comment procéder par programme. Cependant, les informations suivantes devraient fournir suffisamment d’informations pour créer un script PS à exécuter au démarrage. 

Accès distant Raspberry Pi via Powershell

1.) Exécutez l’utilitaire Windows 10 IoT Core Watcher (C:\Program Files (x86)\Microsoft IoT\WindowsIoTCoreWatcher.exe) sur votre PC de développement et copiez votre adresse IP Raspberry Pi en cliquant avec le bouton droit de la souris sur le périphérique détecté et en sélectionnant Copier. Adresse IP.

Cliquez sur le bouton "Démarrer" de Windows.

Type "WindowsIoTCoreWatcher" pour le rechercher dans les résultats de la recherche

◦Vous voudrez peut-être cliquer avec le bouton droit sur le nom du programme et sélectionner "Épingler au début" pour l'épingler à votre écran de démarrage pour un accès facile

Appuyez sur Entrée pour l'exécuter

Votre appareil devrait apparaître dans la liste dans un délai de 5 secondes environ. Si ce n'est pas le cas, fermez Windows 10 IoT Core Watcher et relancez-le.

 Windows IoT Core Watcher

2.) Lancez une console administrateur PowerShell sur votre PC local. Pour ce faire, la méthode la plus simple consiste à taper "powershell" dans les zones de recherche Rechercher sur le Web et Windows près du menu Démarrer de Windows. Windows trouvera PowerShell sur votre ordinateur. Cliquez avec le bouton droit sur l'entrée Windows PowerShell et sélectionnez Exécuter en tant qu'administrateur. La console PS va montrer.

 Running Powershell as Administrator

3.) Vous devrez peut-être démarrer le service WinRM sur votre bureau pour activer les connexions à distance. À partir de la console PS, tapez la commande suivante:

 net start WinRM 

4.) Sur la console PS, tapez la commande suivante en remplaçant "" par la valeur IP copiée dans prev:

 Set-Item WSMan:\localhost\Client\TrustedHosts -Value <machine-name or IP Address>

5. Tapez Y et appuyez sur Entrée pour confirmer le changement.

6.Vous pouvez maintenant démarrer une session avec votre périphérique Windows IoT Core. Sur votre console PS d’administrateur, tapez:

Enter-PSSession -ComputerName <IP Address> -Credential localhost\Administrator

7.Dans la boîte de dialogue d'informations d'identification, entrez le mot de passe par défaut suivant: 

p @ ssw0rd

Remarque: le processus de connexion n’est pas immédiat et peut durer jusqu’à 30 secondes.

Si vous vous êtes connecté avec succès au périphérique, vous devriez voir l’adresse IP de votre périphérique avant l’invite.

 Connected to the Raspberry using PS

Renommer votre appareil et régler la date et l'heure

1.Pour modifier le nom de l'ordinateur, utilisez l'utilitaire setcomputername. Dans PowerShell, tapez la commande suivante.

setcomputername 

2.La date et l'heure sur le Pi doivent être correctes pour que les jetons de sécurité utilisés pour publier dans Azure plus tard dans le laboratoire soient valides. Pour vérifier le réglage actuel du fuseau horaire sur le Pi, tapez:

tzutil/g

3.Si le fuseau horaire indiqué n’est pas correct, vous pouvez trouver une liste des fuseaux horaires valides en utilisant (vous devrez peut-être augmenter la taille de la mémoire tampon dans votre fenêtre Powershell):

tzutil/l

4.Pour définir le fuseau horaire, localisez l'ID du fuseau horaire souhaité à partir de l'étape ci-dessus, puis utilisez:

tzutil/s "Nom de votre fuseau horaire"

Par exemple, pour "Heure normale du Pacifique"

tzutil/s "heure normale du Pacifique"

5.Pour vérifier la date sur le Raspberry Pi, tapez

Avoir un rendez-vous

6.Si la date ou l'heure sont incorrectes, utilisez l'utilitaire Set-Date

Set-Date "mm/jj/aa hh: mm: SS AM/PM"

Par exemple, s'il était 12h15 le 3 janvier 2016:

Set-Date "01/03/16 12:15"

7. Redémarrez l'appareil pour que la modification soit prise en compte. Vous pouvez utiliser la commande shutdown comme suit:

arrêt/r/t 0

1
Paul DeCarlo