cheetah846
Goto Top

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?


# 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ß

Content-ID: 670367

Url: https://administrator.de/forum/powershell-skript-smart-home-werte-670367.html

Ausgedruckt am: 26.12.2024 um 20:12 Uhr

gastric
gastric 26.12.2024 um 08:03:05 Uhr
Goto Top
tech-flare
tech-flare 26.12.2024 aktualisiert um 09:25:51 Uhr
Goto Top
Hallo,

der erste Beitrag und dann keine Begrüßung.

Davon abgesehen… wo kommst du denn nicht weiter?

Gruß
cheetah846
cheetah846 26.12.2024 um 12:10:31 Uhr
Goto Top
Leider eine Fehlermeldung in der Logdatei?

2024-12-26 12:07:59 - Skript gestartet.
2024-12-26 12:07:59 - Fordere Challenge an...
2024-12-26 12:08:00 - Challenge erfolgreich abgerufen: 965457e6
2024-12-26 12:08:00 - Berechne MD5-Hash für den Response-String: 965457e6-Knoten0055?66
2024-12-26 12:08:00 - Response-Hash erstellt: 965457e6-45c48cce2e2d7fbdea1afc51c7c6ad26 1679091c5a880faf6fb5e6087eb1b2dc e4da3b7fbbce2345d7772b0674a318d5 a87ff679a2f3e71d9181a67b7542122c e4da3b7fbbce2345d7772b0674a318d5 8f14e45fceea167a5a36dedd4bea2543 e1671797c52e15f763380b45e841ec32 1679091c5a880faf6fb5e6087eb1b2dc 336d5ebc5436534e61d16e63ddfca327 a5f3c6a11b03839d46af9fb43c97c188 7b8b965ad4bca0e41ab51de7b31363a1 d95679752134a2d9eb61dbd7b91c4bcc e358efa489f58062f10dd7316b65649e e1671797c52e15f763380b45e841ec32 7b8b965ad4bca0e41ab51de7b31363a1 cfcd208495d565ef66e7dff9f98764da cfcd208495d565ef66e7dff9f98764da e4da3b7fbbce2345d7772b0674a318d5 e4da3b7fbbce2345d7772b0674a318d5 d1457b72c3fb323a2671125aef3eab5d 1679091c5a880faf6fb5e6087eb1b2dc 1679091c5a880faf6fb5e6087eb1b2dc
2024-12-26 12:08:00 - Fordere Session-ID an...
2024-12-26 12:08:01 - Session-ID abgerufen: 0000000000000000
2024-12-26 12:08:01 - Session-ID erfolgreich: 0000000000000000
2024-12-26 12:08:01 - Fordere aktuelle Temperatur an...
2024-12-26 12:08:02 - Fehler: Der Remoteserver hat einen Fehler zurückgegeben: (403) Unzulässig.
2024-12-26 12:08:02 - Skript beendet.
gastric
gastric 26.12.2024 aktualisiert um 12:18:32 Uhr
Goto Top
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 ...
cheetah846
cheetah846 26.12.2024 um 15:27:27 Uhr
Goto Top
Ja und funktioniert so? Die bitte wahr folgende: PowerShell Skript Smart-Home Werte auslesen

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 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? 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.

Vorab besten Dank
Gruß
gastric
gastric 26.12.2024 aktualisiert um 15:33:55 Uhr
Goto Top
Wurde doch oben schon verlinkt. Da gibt es die Funktion dafür die dir das offensichtlich ausliest => Get-FBSmarthomeDeviceInfo
tech-flare
tech-flare 26.12.2024 aktualisiert um 15:58:36 Uhr
Goto Top
Zitat von @cheetah846:

Ja und funktioniert so? Ist das jetzt eine Frage, oder eine Aussage?

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.