Kategorieauswahl

Translator

Google +1

Bitte teilen Sie Google mit, wenn Ihnen diese Seite gefällt.

Remote

Tesla Model S und X per PowerShell fernsteuern, mithilfe der Restful WebAPI von TESLA

Ich liebe meinen Tesla Model S und ich liebe PowerShell. Na dann bringe ich doch mal beides zusammen. 😀

Für die Anmeldung beim Tesla Restful Webservice müssen Sie dieselben Anmeldeinformationen (Benutzername und Kennwort), wie auf mytesla (https://my.teslamotors.com/de_DE/user/login) angeben. Also zunächst mal zur Authentifizierung:

# Fenster für Anmeldeinfos anzeigen
$Credential=Get-Credential
# Kennwort für die SSL-gesicherte Übergabe „vorbereiten“
$ptr=[Runtime.InteropServices.Marshal]::SecureStringToBSTR($Credential.Password)
$pwd=[Runtime.InteropServices.Marshal]::PtrToStringAuto($Ptr)

# Notwendige Anmeldeinformationen zusammensetzen
$LoginInfo=@{
‚grant_type‘ = ‚password‘
‚client_id‘ = „e4a9949fcfa04068f59abb5a658f2bac0a3428e4652315490b659d5ab3f35a9e“
‚client_secret‘ = „c75f14bbadc8bee3a7594412c31416f8300256d7668ea7e6e7f06727bfb9d220“
‚email‘ = $Credential.UserName
‚password‘ = $pwd
}

Dann können Sie die Verbindung unter Angabe der Anmeldeinfos herstellen:

$Connect = Invoke-RestMethod -Uri „https://owner-api.teslamotors.com/oauth/token“ -Method Post -Body $LoginInfo

Als Rückgabewert erhalten Sie dann einen Zugriffsschlüssel (Token) mit dem alle weiteren Aktionen durchgeführt werden können:

$Token=$Connect.access_token

Hier noch ein paar allgemeine, notwendige http Header Informationen zusammen schrauben:

$Header=@{
„Authorization“=“Bearer $Token
„Accept-Encoding“=“gzip,deflate“
}

Gehen wir mal davon aus, Sie haben nur einen Tesla, dann finden Sie mit dem nachfolgenden Kommando in $car allgemeine Informationen zu Ihrem Fahrzeug wie Farbe, Name u.v.a.m.

$car = (Invoke-RestMethod -Uri „https://owner-api.teslamotors.com/api/1/vehicles“ -Method Get -Headers $Header).response

Falls Ihr Dornröschen noch schläft, müssen Sie es erst mal wach küssen:

if ($car.state -ne „online“) {Invoke-RestMethod -Uri „https://owner-api.teslamotors.com/api/1/vehicles/$($car.id)/wake_up“ -Method Post -Headers $Header}

Jetzt können Sie Ihren Liebling mal etwas genauer untersuchen, wie z.B. die eingestellten Einheiten (gui_settings) abfragen:

(Invoke-RestMethod -Uri „https://owner-api.teslamotors.com/api/1/vehicles/$($car.id)/data_request/gui_settings“ -Method Get -Headers $Header).response

Den Teil gui_settings können Sie gegen die folgenden Begriffe austauschen:

charge_state = Zeigt den Akkustatus an

climate_state = Klima Anlage

drive_state = GPS Infos

vehicle_state = Zustandsinformationen: km-Stand, Schiebedach auf? etc…

Sie dürfen natürlich auch gerne Einstellungen vornehmen (z.B. hupen):

Invoke-RestMethod -Uri „https://owner-api.teslamotors.com/api/1/vehicles/$($car.id)/command/honk_horn“ -Method Post -Headers $Header

Auch hier gibt’s wieder einen ganzen Sack voll weiterer Begriffe, die Sie gegen honk_horn austauschen können:

flash_lights = Lichthupe

charge_port_door_open = Ladeanschluß öffnen

charge_standard = Ladelimit auf Standard setzen

charge_max_range = Ladelimit auf max. Reichweite (100%) setzen

set_charge_limit?percent=75 = Ladelimit beliebig einstellen

charge_start und charge_stop = Ladevorgang starten bzw. beenden

door_lock und door_unlock = Türen auf bzw. zu

set_temps?driver_temp=23.7&passenger_temp=18.1 = wie warm soll’s darf’s denn sein?

auto_conditioning_start und auto_conditioning_stop = Klima an bzw. aus

sun_roof_control?state=open&percent=50 = Schiebedach steuern

remote_start_drive?password=StrengGeheim = Kennwort für den Start ohne Schlüssel im Fahrzeug festlegen. Verfällt nach 2 Minuten, wenn das Fahrzeug nicht bis dahin gestartet wird.

 

In PowerShell Remote-Session auf UNC Netzwerkpfade zugreifen

Hat man Windows Remoting konfiguriert und Enter-PSSession als auch Invoke-Command klappen problemlos, fängt man an diese tollen Möglichkeiten rege zu nutzen. Ab und an will man dann aber vielleicht auch einmal aus so einer Remote-Session heraus auf einen Netzwerkpfad in Form von \\Servername\Freigabename zugreifen und man bekommt immer so nette Fehlermeldungen wie:

Get-ChildItem : Cannot find path ‚\\Servername\Freigabename‘ because it does not exist.
+ CategoryInfo          : ObjectNotFound: (\\Servername\Freigabename:String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

Doch der Server ist online und wenn Sie am entfernten Computer lokal angemeldet versuchen darauf zuzugreifen ist alles fein. Was läuft hier schief? Das ist wieder einmal so ein „Sicherheitsfeature“.

Der Quick and Dirty Way ist einfach mit:

net use n: \\Servername\Freigabename

eine Netzlaufwerksverbindung herzustellen (tolle Sicherheit). New-PSDrive und andere Experimente können Sie sich sparen…habe ich alles schon ausprobiert. N: können Sie dann ganz normal ansprechen. Nun der offizielle Weg:

Mittels Gruppenrichtlinien müssen Sie unter Computer Configuration\Policies\Administrative Templates\Windows Components\Windows Remote Management (WINRM) bei den Unterpunkten WINRM Client als auch WINRM Service „Allow CredSSP authentication“ aktivieren. Des Weiteren müssen Sie unter Computer Configuration\Policies\Administrative Templates\System\Credentials Delegation die beiden Einträge Allow Delegating Fresh Credentials und noch einmal der Eintrag mit Allow Delegating Fresh Credentials with NTLM-only Server Authentication mit so einem Eintrag schmücken:

wsman/NameDesRechnersAufDenSieSichRemoteDraufSchaltenMöchten

Diese Policy muss an eine OU gehängt werden welche die Computer enthalten von denen aus Sie Enter-PSSession bzw. Invoke-Command ausführen möchten.

Haben Sie keine GPOs (z.B. weil kein AD) dann geht es auch in der PowerShell auf den einzelnen Systemen (aber nicht remote 😉 ) mit:

Enable-WSManCredSSP –Role Server

und

Enable-WSManCredSSP –Role Client -DelegateComputer NameDesServers

Um sich dann mit dem Server zu verbinden, müssen Sie die zusätzlichen Schalter -cred und -auth mit angeben. Zuvor sollten Sie sich allerdings die Anmeldeinformationen in einer Variablen hinterlegen, z.B. so:

$cred=get-credential

Dann können Sie Ihr eigentliches Enter-PSSession in dieser Form ausführen:

Enter-PSSession Remoteserver -cred $cred -auth credssp

Verrückte Welt! Ich nehme net use 😉

mRemote – Plattformunabhängiger Open Source Client für Remotezugriff

mRemote ist eine OpenSource Client für Plattform unabhängigen Remotezugriff. Er unterstützt folgende Protokolle und hat viele Konfigurationsmöglichkeiten:

  • RDP (Remote Desktop)
  • VNC (Virtual Network Computing)
  • ICA (Independent Computing Architecture)
  • SSH (Secure Shell)
  • Telnet (TELecommunication NETwork)
  • HTTP/S (Hypertext Transfer Protocol)
  • Rlogin (Rlogin)
  • RAW

Teamviewer

Teamviewer ermöglicht das Fernsteuern von PCs auch plattformunabhängig über NAT-Grenzen hinweg.