Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Alle Blockly + Javascripte aus einer script.json extrahieren

NEWS

  • wichtiges UPDATE für controller 7.2.2 im stable
    HomoranH
    Homoran
    10
    1
    2.8k

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    16
    1
    4.9k

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    4.1k

Alle Blockly + Javascripte aus einer script.json extrahieren

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
1 Beiträge 1 Kommentatoren 584 Aufrufe 3 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • Michael SchmittM Online
    Michael SchmittM Online
    Michael Schmitt
    schrieb am zuletzt editiert von Michael Schmitt
    #1

    Hallo,
    da ich im Moment meine Scripte aufräume und auch ein paar geändert habe, ist mir im Eifer des Gefechts leider ein Fehler passiert und ich habe ein Script (Blockly)was ich noch brauchte überschrieben und gespeichert.
    Ist ja kein Problem ich mach ja mit Backitup immer schön Backups, auch von Javascript (dachte ich). Leider mußte ich feststellen das in der Backupdatei nur eine große Datei ist und zwar die script.json. Mit der konnte ich erstmal garnichts anfangen.
    Na dann frag ich mal ChatGPT und mit desen Hilfe haben wir folgendes gebaut.

    Das muss man tun. Ich werde hier die Pfade,Ordner und Dateinamen nennen so wie ich sie nutze. Sollte ihr andere nutzen dann müßt ihr das in den Dateien

    1-Export-ioBroker.ps1
    2-Extract-Blockly.ps1

    ändern. Steht jeweils ganz oben darin.

    Auf Laufwerk C habe ich einen Ordner erstellt = iobroker_Script_recover
    Dann geht ihr in diesen Ordner und ertellt eine Textdatei und da fügt ihr folgendes ein.

    $jsonFile = "C:\iobroker_Script_recover\script.json"
    $root = "C:\iobroker_Script_recover\Export"
    
    New-Item -ItemType Directory -Force -Path $root | Out-Null
    
    $report = @()
    
    [int]$countJS = 0
    [int]$countBlockly = 0
    [int]$countDisabled = 0
    
    $json = Get-Content $jsonFile -Raw | ConvertFrom-Json
    
    foreach ($property in $json.PSObject.Properties) {
    
        $id = $property.Name
        $obj = $property.Value
    
        if (-not $obj.common) { continue }
        if (-not $obj.common.source) { continue }
    
        $enabled = $obj.common.enabled
        $engineType = $obj.common.engineType
    
        $relative = $id -replace '^script\.js\.common\.', ''
        $parts = $relative.Split('.')
    
        $scriptName = $parts[-1]
    
        if ($parts.Count -gt 1) {
            $folder = Join-Path $root ($parts[0..($parts.Count-2)] -join '\')
        }
        else {
            $folder = $root
        }
    
        if (-not $enabled) {
            $folder = Join-Path $folder "_DEAKTIVIERT"
            $countDisabled++
        }
    
        New-Item -ItemType Directory -Force -Path $folder | Out-Null
    
        $source = $obj.common.source
    
        $xmlMatch = [regex]::Match(
            $source,
            '<xml[\s\S]*?</xml>'
        )
    
        if ($xmlMatch.Success) {
    
            $xmlFile = Join-Path $folder ($scriptName + ".xml")
    
            $xmlMatch.Value |
                Set-Content $xmlFile -Encoding UTF8
    
            $source =
                $source.Replace(
                    $xmlMatch.Value,
                    ""
                ).Trim()
    
            $countBlockly++
        }
        else {
            $countJS++
        }
    
        $jsFile = Join-Path $folder ($scriptName + ".js")
    
        $source |
            Set-Content $jsFile -Encoding UTF8
    
        $report += [PSCustomObject]@{
            Name       = $scriptName
            Aktiv      = $enabled
            EngineType = $engineType
            Datei      = $jsFile
        }
    
        Write-Host "Exportiert: $scriptName"
    }
    
    $csvFile = Join-Path $root "Scriptliste.csv"
    
    $report |
        Export-Csv `
            -Path $csvFile `
            -NoTypeInformation `
            -Encoding UTF8
    
    $statFile = Join-Path $root "Statistik.txt"
    
    @"
    Gesamt exportiert : $($report.Count)
    JavaScript        : $countJS
    Blockly           : $countBlockly
    Deaktiviert       : $countDisabled
    "@ | Set-Content $statFile -Encoding UTF8
    
    Write-Host ""
    Write-Host "Export abgeschlossen."
    Write-Host "Ordner: $root"
    

    Das nennt ihr = 1-Export-ioBroker.ps1
    Das ganze dann so speichern unter, in den selben Ordner.
    einstellungen.jpg

    Jetzt die zweite Datei. Wieder ein Textdokument erstellen und dort das einfügen.

    Add-Type -AssemblyName System.Web
    
    $root = "C:\iobroker_Script_recover\Export"
    
    $count = 0
    
    Get-ChildItem $root -Recurse -Filter *.js | ForEach-Object {
    
        $file = $_.FullName
        $content = Get-Content $file -Raw
    
        if ($content -match '//([A-Za-z0-9+/=%]+)\s*$') {
    
            try {
    
                $encoded = $Matches[1]
    
                $bytes = [Convert]::FromBase64String($encoded)
    
                $urlText = [Text.Encoding]::UTF8.GetString($bytes)
    
                $xml = [System.Web.HttpUtility]::UrlDecode($urlText)
    
                if ($xml.StartsWith("<xml")) {
    
                    $xmlFile =
                        [System.IO.Path]::ChangeExtension(
                            $file,
                            ".xml"
                        )
    
                    $xml |
                        Set-Content $xmlFile -Encoding UTF8
    
                    Write-Host "Blockly:" $xmlFile
    
                    $count++
                }
            }
            catch {
            }
        }
    }
    
    Write-Host ""
    Write-Host "Blockly-Dateien gefunden:" $count
    

    Das nennt ihr = 2-Extract-Blockly.ps1
    Das ganze dann so speichern unter, in den selben Ordner.
    einstellungen2.jpg

    Zum testen könnt ihr nun mal aus einer Javascript Backupdatei ( sieht ungefair so aus javascripts_2026_06_29-03_37_23_backupiobroker.tar.gz) die script.json entpacken.

    Die script.json kommt jetzt auch in den auf C erstellten Ordner "iobroker_Script_recover"

    Nun Powershell öffnen und dort die Befehle nacheinander eingeben und mit Enter bestättigen.

    cd C:\iobroker_Script_recover
    .\1-Export-ioBroker.ps1
    .\2-Extract-Blockly.ps1

    Jetzt sollte in dem Ordner ein weiterer Odner "Export" erstellt worden sein.
    1.jpg

    In Export
    2.jpg

    auch xml für Blocklys
    xml.jpg

    In diesem Ordner sind alle Javascripte + Blocklys in der korrekte Ordnerstruktur vorhanden. Sollten Scripte deaktiviert sein, sind diese in einem extra Ordner Names "DEAKTIVIERT"

    Bei mir hat das funtioniert und ich konnte mein Blockly einfach wieder exportieren und es läuft.

    Gruß Michael

    1 Antwort Letzte Antwort
    1

    Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

    Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

    Mit deinem Input könnte dieser Beitrag noch besser werden 💗

    Registrieren Anmelden
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen


    Support us

    ioBroker
    Community Adapters
    Donate

    454

    Online

    33.0k

    Benutzer

    83.4k

    Themen

    1.3m

    Beiträge
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
    ioBroker Community 2014-2026
    logo
    • Anmelden

    • Du hast noch kein Konto? Registrieren

    • Anmelden oder registrieren, um zu suchen
    • Erster Beitrag
      Letzter Beitrag
    0
    • Home
    • Aktuell
    • Tags
    • Ungelesen 0
    • Kategorien
    • Unreplied
    • Beliebt
    • GitHub
    • Docu
    • Hilfe