Azure IoT Hub und “The specified SAS token is expired”

Nachdem der Pi über die Feiertage ebenfalls eine Auszeit bekam, standen die Tage wieder ein paar Tests mit dem Azure IoT Hub an. Pi mit dem Lebenselixier Strom versorgt, Visual Studio gestartet, Test-Anwendung von vor Weihnachten geladen, auf den Pi deployed und auf Nachrichten am IoT Hub gewartet. Aber es kam nichts. Was ist da los? Vor Weihnachten ging’s noch.

Mit dem Debugger durch die Anwendung und siehe da, beim Senden der Nachricht an die Cloud kommt die vielsagende Meldung “The specified SAS token is expired.”

Konsolen-Anwendung ausgepackt und IoT-Gerät simuliert. Funktioniert. Nachrichten kommen an. WTF? Simulierte Messwerte auf dem Pi, siehe oben. WTF?

Nach kurzer Suche in den Tiefen des Internet die Lösung: die Uhr auf dem Pi ging grob 4 Stunden vor!!! Damit akzeptierte der IoT Hub die Nachrichten nicht.

Also Uhr auf dem Pi umstellen. Da dies schlauerweise nicht direkt über die Einstellungen auf dem Pi machbar ist, muss man sich hier mit der PowerShell behelfen. Dazu PowerShell als Administrator starten und folgende Kommandos nacheinander abarbeiten.

net start WinRM
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "<IP or HOSTNAME>"
Enter-PSSession -ComputerName <IP or HOSTNAME> -Credential localhost\Administrator
set-date "8/1/2016 12:11:30 PM"

Der letzte Aufruf hat bei mir etwas gedauert, bis die aktuelle Zeit angezeigt wurde. Danach wieder die Test-Anwendung von oben deployed und siehe da, die Nachrichten kamen wieder durch.