PowerShell Skript Smart-Home Werte
Kann mir jemand bitte eine PowerShell Skript schreiben in dem ich in der Fritzbox 7590 in der Version 8.00 die Smart-Home Werte alle auslesen und das zuverlässig?
Ich habe mich schon selber versucht komme aber nicht weiter?
Vorab besten Dank
Gruß
Ich habe mich schon selber versucht komme aber nicht weiter?
# Variablen setzen
$FritzBoxIP = "http://192.168.178.1" # IP-Adresse der FRITZ!Box
$Username = "xyz" # Benutzername für die FRITZ!Box
$Password = "Geheim" # Passwort für die FRITZ!Box
$AIN = "116300139343" # AIN des FRITZ!Smart Energy 200
$LogFile = "C:\ffflogdatei00.txt" # Pfad zur Logdatei (anpassen)
# Funktion, um Ausgaben in die Datei zu schreiben
function Write-Log {
param([string]$message)
$timestamp = (Get-Date).ToString("yyyy-MM-dd HH:mm:ss")
$logMessage = "$timestamp - $message"
Write-Output $logMessage
$logMessage | Out-File -Append -FilePath $LogFile
}
# Log starten
Write-Log "Skript gestartet."
try {
# Schritt 1: Challenge abrufen
Write-Log "Fordere Challenge an..."
$challengeResponse = Invoke-WebRequest -Uri "$FritzBoxIP/login_sid.lua" -Method Get
$challenge = $challengeResponse.Content | Select-String -Pattern "<Challenge>(.*?)</Challenge>" | ForEach-Object { $_.Matches[0].Groups[1].Value }
if (-not $challenge) {
throw "Fehler beim Abrufen der Challenge."
}
Write-Log "Challenge erfolgreich abgerufen: $challenge"
# Schritt 2: Response-Hash erstellen
$cpStr = "$challenge-$Password"
Write-Log "Berechne MD5-Hash für den Response-String: $cpStr"
$md5Hash = [System.Text.Encoding]::UTF8.GetBytes($cpStr) |
ForEach-Object { [BitConverter]::ToString((New-Object System.Security.Cryptography.MD5CryptoServiceProvider).ComputeHash($_)).Replace("-", "").ToLower() }
$response = "$challenge-$md5Hash"
Write-Log "Response-Hash erstellt: $response"
# Schritt 3: Session-ID abrufen
Write-Log "Fordere Session-ID an..."
$loginParams = "username=$Username&response=$response"
$sessionResponse = Invoke-WebRequest -Uri "$FritzBoxIP/login_sid.lua?$loginParams" -Method Get
if ($sessionResponse.StatusCode -eq 200) {
$sid = $sessionResponse.Content | Select-String -Pattern "<SID>(.*?)</SID>" | ForEach-Object { $_.Matches[0].Groups[1].Value }
Write-Log "Session-ID abgerufen: $sid"
if ($sid -eq "0000000000000000.") {
Write-Log "Authentifizierung fehlgeschlagen! Die SID ist 0000000000000000."
exit
}
Write-Log "Session-ID erfolgreich: $sid"
# Aktuelle Temperatur abfragen
Write-Log "Fordere aktuelle Temperatur an..."
$currentTempResponse = Invoke-WebRequest -Uri "$FritzBoxIP/webservices/homeautoswitch.lua?ain=$AIN&switchcmd=gethkrtemp&sid=$sid" -Method Get
# Fehlerüberprüfung für aktuelle Temperatur
if ($currentTempResponse.StatusCode -eq 200) {
$currentTempJson = $currentTempResponse.Content | ConvertFrom-Json
if ($currentTempJson.value) {
$currentTemp = $currentTempJson.value
Write-Log "Aktuelle Temperatur: $currentTemp °C"
} else {
Write-Log "Keine aktuelle Temperatur verfügbar."
}
} else {
Write-Log "Fehler beim Abrufen der aktuellen Temperatur: $($currentTempResponse.StatusCode)"
}
# Soll-Temperatur abfragen
Write-Log "Fordere Soll-Temperatur an..."
$targetTempResponse = Invoke-WebRequest -Uri "$FritzBoxIP/webservices/homeautoswitch.lua?ain=$AIN&switchcmd=gethkrtsoll&sid=$sid" -Method Get
# Fehlerüberprüfung für Soll-Temperatur
if ($targetTempResponse.StatusCode -eq 200) {
$targetTempJson = $targetTempResponse.Content | ConvertFrom-Json
if ($targetTempJson.value) {
$targetTemp = $targetTempJson.value
Write-Log "Soll-Temperatur: $targetTemp °C"
} else {
Write-Log "Keine Soll-Temperatur verfügbar."
}
} else {
Write-Log "Fehler beim Abrufen der Soll-Temperatur: $($targetTempResponse.StatusCode)"
}
} else {
Write-Log "Fehler beim Abrufen der Session-ID: $($sessionResponse.StatusCode)"
}
} catch {
Write-Log "Fehler: $_"
}
# Log beenden
Write-Log "Skript beendet."
# Pause am Ende, um die Ausgaben zu sehen
Pause
Vorab besten Dank
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 670367
Url: https://administrator.de/forum/powershell-skript-smart-home-werte-670367.html
Ausgedruckt am: 26.12.2024 um 20:12 Uhr
7 Kommentare
Neuester Kommentar
und das zuverlässig?
Willst du es zuverlässig, dann niemals über das Webinterface auslesen wie du es hier tust, denn das änderst sich so gut wie bei fast jedem Firmware-Update und dann musst du wieder anpassen! Die Fritte hat das standardisierte TR-064 Protokoll über das man die Daten dauerhaft zuverlässig abfragen kann.https://avm.de/service/schnittstellen/
https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_hom ...
Wurde doch oben schon verlinkt. Da gibt es die Funktion dafür die dir das offensichtlich ausliest =>
Get-FBSmarthomeDeviceInfo
Die bitte wahr folgende: PowerShell Skript Smart-Home Werte auslesen
das haben wir schon verstanden....Kann mir jemand bitte eine PowerShell Skript schreiben in dem ich in der Fritzbox 7590 in der Version 8.00 die Smart-Home Werte alle auslesen und das zuverlässig?
Warum soll jemand für dich die komplette Arbeit übernehmen?Es wurde dir ein "fertiges" Powershell-Modul verlinkt Powershell: FritzBox über TR-064 im Netzwerk konfigurieren und auslesen
Ich benutze die Steckdose "FRITZ!Smart Energy 200" und den Heizkörperregler "FRITZ!Smart Thermo 302". Ich will eigentlich nur die Stromwerte und die Temperatur Werte auslesen. Und die in eine Excel Datei reinschreibt? Ist das jetzt wieder eine Frage oder Aussage?
Da ich das nur ein mal am Tag abfragen will ist mir die Home Assistant zu umfangreich. Wenn das besser sich in eine andre Programmiersprache umsetzen lässt habe ich damit kein Problem.
Fast jede "Programmierung" ist dafür aufwändiger, als ein fertiges HomeAssistant o.ä. über eine Klicki-Bunti Installation zu starten.Serie: Die Discounter
PowerShell Skript Smart-Home Werte7