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);
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
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 .
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
powershell -command "C:\IotCoreStartup.ps1"
$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
schtasks/Delete/TN "StartupPowerShell"
schtasks/Run/tn "StartupPowerShell"
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.
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
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)
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;
}
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
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
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.
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.
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.
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