Ankündigung

Einklappen
Keine Ankündigung bisher.

OpenKNX KnxFileTransferClient

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #31
    Es stimmt… jetzt hab ich wieder --pkg 55… so ein Dreck!

    Kommentar


      #32
      Aber nur für die Geräte auf der anderen Linie. Ja, das mit der APDU ist vielen nicht klar, weil die ETS das auch intern behandelt. Aber ein Paket darf maximal so lang sein wie das Minimum der APDUs aller an der Kommunikation beteiligten Geräte. Beispiel:
      • IP-Schnittstelle: APDU 220
      • LK1: APDU 23
      • LK2: APDU 230
      • Zielgerät: APDU 250
      Die Kommunikation läuft über 23 Byte .

      Gruß, Waldemar
      OpenKNX www.openknx.de

      Kommentar


        #33
        Zitat von jhaeberle Beitrag anzeigen
        Wie aktualisiert man eine Konfig? Ich würde gerne die Option --connect Tunneling in eine existierende Konfig aufnehmen, hab aber keine Idee wie und finde auch keine Anleitung dazu.
        Du musst einfach nur einmal den KnxFiletransfer mit der option aufrufen und dazu die config angeben, in welche sie gespeichert werden soll.

        Wenn --config angegeben ist, wird nach der Datei gesucht und die Parameter als default geladen.
        Danach werden die im Aufruf angegeben Parameter ausgewertet.
        Zum Schluss wir der aktuelle stand dann wieder in der config gespeichert.
        OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

        Kommentar


          #34
          vielleicht sollte wir die pkg size immer abfragen, so dass man einfach linienabhängig überschreiben kann. vorbelegt mit der autoerkennung
          OpenKNX www.openknx.de | OpenKNX-Wiki (Beta)

          Kommentar


            #35
            Hm das verwirrt doch nur die meisten.
            Evtl könnten wir ein Testpaket schicken und so prüfen, ob die pkg korrekt ist?

            Es gibt ein paar Werte, die werden nicht in der config gespeichert. Ich glaube die pkg gehört dazu.
            OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

            Kommentar


              #36
              Zitat von thewhobox Beitrag anzeigen
              Du musst einfach nur einmal den KnxFiletransfer mit der option aufrufen und dazu die config angeben, in welche sie gespeichert werden soll.

              Wenn --config angegeben ist, wird nach der Datei gesucht und die Parameter als default geladen.
              Danach werden die im Aufruf angegeben Parameter ausgewertet.
              Zum Schluss wir der aktuelle stand dann wieder in der config gespeichert.
              Das hatte ich gehofft, aber das mit dem Speichern der neuen Werte hat so nicht stattgefunden.

              Kommentar


                #37
                Ich hab da mal einen PowerShell-Script gemacht. Mit Hilfe von Gemmini 3... Damit kann man relativ einfach mehrere OpenKNX-Geräte updaten UND dabei unterschiedliche Pkg-Konfigurationen pro Linie verwalten. Für mich funktioniert's, vielleicht hilft es ja noch jemandem:

                Beispiele:
                Code:
                  .\KnxFirmwareUpdate.ps1 -type PM -pa 1.2.1
                  .\KnxFirmwareUpdate.ps1 -type RoundT -pa 1.4.5 -fw C:\firmware\custom.uf2 -force
                  .\KnxFirmwareUpdate.ps1 -type PM -pa 1.2.1 -DryRun

                Speichern als ~/bin/KnxFirmwareUpdate.ps1

                Code:
                <#
                .SYNOPSIS
                  Führt ein Firmware-Update für OpenKNX Geräte via KnxFileTransferClient aus.
                
                .DESCRIPTION
                  Automatisiert die Auswahl der richtigen Firmware-Datei, Parameter und Paketgröße abhängig vom Gerätetyp und der angesprochenen Linie.
                  Die Default-Werte für  das Gateway und den Port können im param( Bereich angepasst werden, oder als Parameter übergeben werden.
                  Es ist möglich, für die Hauptlinie eine andere Paketgröße zu verwenden als für Sublinien, falls der/die verwendete/n Linienkoppler eine andere
                  paketgröße unterstützt als das Gateway. Diese Einstellungen finden sich bei # Paketgröße (packageSize) bestimmen
                
                  Um die OpenKNX-Geräte anzupassen oder zu erweitern, sind zwei Schritte nötig:
                  - Im param-Bereich, im ValidateSet die gewünschten Optionen als Werte für den "type"-Parameter
                  - Für jeden type-Wert im $deviceConfig-Hash den absoluten Pfad zur korrekten FirmwareDatei eintragen
                
                .PARAMETER type
                  Gerätetyp: PM oder RoundT
                
                .PARAMETER pa
                  Physikalische Adresse (z.B. 1.2.1)
                
                .PARAMETER fw
                  Absoluter Pfad zur Firmware-Datei (optional, Standard je nach Gerätetyp)
                
                .PARAMETER gw
                  KNX Gateway IP (optional, Standard: 192.168.178.89)
                
                .PARAMETER port
                  Gateway-Port (optional, Standard: 3671)
                
                .PARAMETER delay
                  Zeitverzögerung in ms (optional, Standard: 300)
                
                .PARAMETER force
                  Update ohne Rückfrage ausführen
                
                .PARAMETER DryRun
                  Zeigt nur die Kommandozeile, führt nichts aus!
                
                .EXAMPLE
                  .\KnxFirmwareUpdate.ps1 -type PM -pa 1.2.1
                  .\KnxFirmwareUpdate.ps1 -type RoundT -pa 1.4.5 -fw C:\firmware\custom.uf2 -force
                  .\KnxFirmwareUpdate.ps1 -type PM -pa 1.2.1 -DryRun
                #>
                
                
                [CmdletBinding()]
                param(
                    [Parameter(Mandatory=$true, HelpMessage="Gerätetyp: PM oder RoundT")]
                    [ValidateSet("PM", "RoundT")] # Hier alle zu unterstützenden Geräte als Kürzel eintragen, dann weiter unten die $deviceConfig anpassen!
                    [string]$type,
                
                    [Parameter(Mandatory=$true, HelpMessage="Physikalische Adresse, z.B. 1.2.1")]
                    [ValidatePattern("^\d+\.\d+\.\d+$")]
                    [string]$pa,
                
                    [Parameter(HelpMessage="Absoluter Pfad zur Firmware-Datei (optional)")]
                    [string]$fw,
                
                    [Parameter(HelpMessage="Gateway-IP (optional)")]
                    [string]$gw = "192.168.178.89",
                
                    [Parameter(HelpMessage="Gateway-Port (optional)")]
                    [int]$port = 3671,
                
                    [Parameter(HelpMessage="Verzögerung in ms (optional)")]
                    [int]$delay = 300,
                
                    [Parameter(HelpMessage="Ohne Rückfrage ausführen")]
                    [switch]$force,
                
                    [Parameter(HelpMessage="Hilfe anzeigen")]
                    [Alias("?")]
                    [switch]$help,
                
                    [Parameter(HelpMessage="Nur Kommando anzeigen, nichts ausführen")]
                    [switch]$DryRun
                )
                
                if ($help) {
                    Get-Help -Detailed $MyInvocation.MyCommand.Path
                    exit
                }
                
                # Gerätekonfiguration. Hier für jeden "type" von oben den absoluten Pfad zur Firmware hinterlegen.
                $deviceConfig = @{
                    "PM" = @{
                        DefaultFirmware = "C:\Users\joche\OneDrive\Documents\openKNX\Storage\RaumController-Release-5.1.5\Firmware\AB-SmartHouse-PresenceMultiSensor\firmware-AB-SmartHouse-PresenceMultiSensor.uf2"
                        Description     = "Presence Multi Sensor"
                    }
                    "RoundT" = @{
                        DefaultFirmware = "C:\Users\joche\OneDrive\Documents\openKNX\Storage\TouchRound-Release-1.2.2\Firmware\TouchRound-RP2350\firmware-TouchRound-RP2350.uf2"
                        Description     = "RoundTouch"
                    }
                }
                
                # Paketgröße (packageSize) bestimmen
                if ($pa -like "1.2.*" -or $pa -like "1.3.*") {
                    $packageSize = 52
                    Write-Host "Paketgröße: 55 (1.2.x/1.3.x Adresse erkannt)" -ForegroundColor Cyan
                } else {
                    $packageSize = 128
                    Write-Host "Paketgröße: 128 (andere Adresse)" -ForegroundColor Cyan
                }
                
                
                
                # Firmware-Datei bestimmen
                if ($fw) {
                    $firmwareFile = $fw
                } else {
                    $firmwareFile = $deviceConfig[$type].DefaultFirmware
                }
                
                # Prüfung ob Firmware-Datei existiert
                if (-not (Test-Path $firmwareFile)) {
                    Write-Error "Firmware-Datei '$firmwareFile' wurde nicht gefunden!"
                    exit 1
                }
                
                # Kommando zusammenbauen
                $command = "$HOME/bin/KnxFileTransferClient fwupdate --port $port --gw $gw --delay $delay --pkg $packageSize --connect Tunneling --pa $pa `"$firmwareFile`""
                
                Write-Host "`n=== KNX Firmware Update ===" -ForegroundColor Magenta
                Write-Host "Gerät: $type ($($deviceConfig[$type].Description))"
                Write-Host "Phys. Adresse: $pa"
                Write-Host "Firmware: $firmwareFile"
                Write-Host "Gateway: $gw`:$port"
                Write-Host "`nBefehl:" -ForegroundColor Green
                Write-Host $command -ForegroundColor Yellow
                
                if ($DryRun) {
                    Write-Host "`n[DryRun] Es wird NICHTS am System ausgeführt!" -ForegroundColor Red
                    exit
                }
                
                # Befehl ausführen
                if ($force) {
                    Write-Host "`nFühre Befehl aus (force-Modus)..." -ForegroundColor Red
                    Invoke-Expression $command
                } else {
                    $confirmation = Read-Host "`nBefehl ausführen? (j/N)"
                    if ($confirmation -eq "j" -or $confirmation -eq "J") {
                        try {
                            Write-Host "`nFirmware-Update gestartet!" -ForegroundColor Green
                            Invoke-Expression $command
                        } catch {
                            Write-Error "Fehler beim Ausführen: $($_.Exception.Message)"
                        }
                    } else {
                        Write-Host "Befehl abgebrochen." -ForegroundColor Red
                    }
                }​

                Gruß,
                Jochen

                Kommentar


                  #38
                  Das ist halt auch nur für ne feste FW Version.

                  Da ich mit Powershell gut kann, geht es auch ohne ganz schnell.
                  Befehle eingeben, alles drin bis auf die PA.
                  Nach dem erfolgreichen durchlaufen einfach mit der Pfeiltaste nach oben den letzten Befehl holen und dir andere PA eingeben.
                  OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

                  Kommentar


                    #39
                    Könnt ihr mir weiterhelfen?
                    Ich habe versucht mittels Rechtsklick auf "KNX-Upload-Firmware.ps1" und "mittels Powershell ausführen" ein Firmwareupdate auszuführen.
                    Ich verwende den KnxFileTransfer V0.2.8 .
                    Es gibt keine Linienkoppler oder ähnliches.
                    ---
                    Code:
                    Open ■
                    ┬────┴ KnxFileTransferClient
                    ■ KNX
                    
                    Version Client: 0.2.8
                    Version Client.Lib: 0.1.7
                    Werte in Klammern sind default
                    Bei leerer Eingabe wird default übernommen
                    PA des Geräts: (1.12.27):
                    1 Tunneling v1 -> 192.168.28.32:3671 (2.1.16 ) [KNX IP Interface 730]
                    Es wurden 1 Gateways gefunden
                    Gateway Auswählen (Index): 1
                    Die Verbindung funktioniert möglicherweise nicht, da die Linien unterschiedlich sind.
                    
                    IP-Adresse: 192.168.28.32
                    IP-Port: 3671
                    PA: 1.12.27
                    
                    Info: Verbindung zum Bus hergestellt
                    Info: PA der Schnittstelle ist 2.1.112
                    Info: Verbindung zum KNX-Gerät 1.12.27 hergestellt
                    Info: Gerät MaxAPDU: 254
                    Info: Verwende MaxAPDU: 254
                    Info: Verwende Package: 128
                    Version Remote: 0.1.4
                    Info: Die Firmware wird komprimiert übertragen!
                    Version UF2: 0xA012 5.1.13
                    Version Device: 0xA012 5.1.5
                    File: Passe Firmware für Übertragung an...
                    Size: 638464 Bytes (623 kB) original
                    Size: 422490 Bytes (412 kB) komprimiert
                    
                    
                    Info: Datei ist leer
                    Info: Dateigröße: 422490 bytes
                    Error (01) [22.01.2026 15:53:36]: TunnelingConfirmation timed out #XX:10
                    Info: Warte 3s...
                    Error (02) [22.01.2026 15:53:42]: TunnelingConfirmation timed out #XX:11
                    Info: Warte 3s...
                    Error (03) [22.01.2026 15:53:48]: TunnelingConfirmation timed out #XX:12
                    Info: Warte 3s...
                    Error (04) [22.01.2026 15:53:54]: TunnelingConfirmation timed out #XX:13
                    Error [22.01.2026 15:53:54]: To many errors
                    Upload fehlgeschlagen. Breche Update ab
                    ProcessExit - Verbindung wird geschlossen...

                    Kommentar


                      #40
                      Zitat von habreli Beitrag anzeigen
                      Könnt ihr mir weiterhelfen?
                      Ich habe versucht mittels Rechtsklick auf "KNX-Upload-Firmware.ps1" und "mittels Powershell ausführen" ein Firmwareupdate auszuführen.
                      Ich verwende den KnxFileTransfer V0.2.8 .
                      Es gibt keine Linienkoppler oder ähnliches.
                      Was mich irritiert, ist die Meldung "Info: Datei ist leer". Allerdings wird die FW ja erfolgreich komprimiert.

                      Ansonsten würde ich inzwischen mit der Package-Size experimentieren, das war's bei mir bisher immer…😅

                      Dazu musst du allerdings entweder das PS1-Skript anpassen oder das Kommando über die Powershell aufrufen, da die Package-Size interaktiv nicht abgefragt wird.

                      Kommentar


                        #41
                        Zitat von thewhobox Beitrag anzeigen
                        Das ist halt auch nur für ne feste FW Version.

                        Da ich mit Powershell gut kann, geht es auch ohne ganz schnell.
                        Befehle eingeben, alles drin bis auf die PA.
                        Nach dem erfolgreichen durchlaufen einfach mit der Pfeiltaste nach oben den letzten Befehl holen und dir andere PA eingeben.
                        Also man kann eine FW als Parameter übergeben, aber das wäre nicht mein Ansinnen. Wenn an eine Reihe unterschiedlicher Geräte updaten will, vlt so Raum für Raum, dann finde ich das hilfreich.

                        Aber klar, jedem das seine 😅.

                        Kommentar


                          #42
                          jhaeberle die Info, dass die Datei leer ist, betrifft die Datei auf dem remote Gerät.
                          Der Befehl zum Starten des upload geht durch, alle weiteren Telegramme nicht.
                          Somit wird die Datei nicht gefüllt.

                          Damit ist klar, dass dein Interface die package Größe nicht abkann
                          ​​​​Also mit - - pkg verschiedene Werte testen. Oft klappt 52.
                          Du hast zufällig ein Weinzierl Interface?

                          OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

                          Kommentar


                            #43
                            Danke für die Tipps,
                            Ich habs inzwischen schon mit --pkg 55 zum Laufen gebracht.
                            Verwendet wird das Interface N000401 von Eibmarkt.
                            Zuerst einmal mit CRC Fehler, beim zweiten Versuch hats dann geklappt.
                            Ein zweites Device ist dann ohne Probleme durchgelaufen.

                            Kommentar


                              #44
                              Zitat von habreli Beitrag anzeigen
                              CRC Fehler
                              CRC Missmatch oder erst am Ende den Fehler?
                              OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

                              Kommentar


                                #45
                                Zitat von thewhobox Beitrag anzeigen
                                CRC Missmatch oder erst am Ende den Fehler?
                                Der CRC Fehler wurde am Ende ausgegeben. Da werden local und remote Datei verglichen.

                                Kommentar

                                Lädt...
                                X