Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • 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. [Vorlage] Automatisches Git-Backup für Skripte/Blockly

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    435

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    5.0k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.4k

[Vorlage] Automatisches Git-Backup für Skripte/Blockly

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascriptblockly
4 Beiträge 3 Kommentatoren 40 Aufrufe 6 Watching
  • Ä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.
  • M Offline
    M Offline
    mrMuppet
    schrieb zuletzt editiert von mrMuppet
    #1

    Ein verlässliches Backup der eigenen ioBroker-Skripte ist Gold wert. Wer schon einmal versehentlich einen funktionierenden Codeblock gelöscht oder überschrieben hat, weiß eine saubere Versionierung extrem zu schätzen.

    Ich habe nach einer Lösung gesucht, mit der ich meine Skripte vollautomatisch, unsichtbar und kostenlos versionieren kann. Das Ziel: Ein privates Git-Repository, das bei jeder Änderung einen Snapshot macht, damit ich im Browser jederzeit ein "Vorher-Nachher" (Diff) sehen und alte Versionen zurückholen kann. Ganz ohne nerviges SSH-Schlüssel-Geraffel.

    Hier ist meine Lösung, die die hauseigene Spiegel-Funktion des JS-Adapters nutzt und auf einem Host völlig ressourcenschonend im Minutentakt im Hintergrund läuft.


    Schritt 1: Skripte automatisch auf die Festplatte spiegeln

    Damit Git unsere Skripte sichern kann, müssen sie als echte Dateien (.js oder .ts) auf der Festplatte des ioBrokers liegen. Das erledigt der JavaScript-Adapter von allein.

    1. Geht im ioBroker auf Instanzen und klickt beim JavaScript-Adapter (javascript.0) auf das Zahnrad (Einstellungen).
    2. Sucht die Option "Spiegeln von Skripten in den Dateipfad" (meist unter Zusätzliche Einstellungen).
    3. Tragt dort euren gewünschten Pfad ein, z.B.: /opt/iobroker/scripts
    4. Speichern und schließen.
    5. Wichtig: Öffnet nun kurz ein beliebiges Skript im ioBroker und klickt einmal auf "Speichern". Erst durch diesen Speicher-Vorgang legt der Adapter den neuen Ordner auf der Festplatte tatsächlich an!

    Schritt 2: GitHub vorbereiten (Personal Access Token)

    Wir nutzen HTTPS mit einem Token, damit wir uns nicht mit Zertifikaten oder Schlüsseln herumschlagen müssen.

    1. Erstellt auf GitHub ein neues Repository (z. B. iobroker-scripts). Wählt unbedingt "Private" aus, damit niemand eure Haussteuerung sieht!
    2. Geht bei GitHub oben rechts auf euer Profilbild -> Settings -> ganz unten links auf Developer settings -> Personal access tokens -> Tokens (classic).
    3. Klickt auf Generate new token (classic).
    4. Gebt ihm einen Namen (z. B. "ioBroker Backup"), setzt die Ablaufzeit (Expiration) z. B. auf "No expiration" und setzt einen Haken bei repo (Full control of private repositories).
    5. Klickt auf Generieren und kopiert euch den Token (er fängt meist mit ghp_ an).

    Schritt 3: Ordner für Git initialisieren

    Loggt euch per SSH (z. B. PuTTY) auf eurem ioBroker-Host ein und führt folgende Befehle nacheinander aus.

    (Hinweis: Ersetzt die Platzhalter DEIN_TOKEN, DEIN_GITHUB_NAME, DEIN_REPO und eure E-Mail-Adresse!)

    # 1. In den Skript-Ordner wechseln
    cd /opt/iobroker/scripts
    
    # 2. Den Ordner für Git als "sicher" markieren (löst Rechte-Probleme mit dem ioBroker-User)
    git config --global --add safe.directory /opt/iobroker/scripts
    
    # 3. Git initialisieren
    git init
    
    # 4. Git Benutzerdaten setzen (für die Historie auf GitHub)
    git config user.name "ioBroker Auto-Backup"
    git config user.email "deine.email@beispiel.de"
    
    # 5. Das GitHub-Repo verknüpfen (Hier Token & Namen einsetzen!)
    git remote add origin https://DEIN_TOKEN@github.com/DEIN_GITHUB_NAME/DEIN_REPO.git
    
    # 6. Den ersten, manuellen Upload anstoßen
    git add .
    git commit -m "Initial Backup"
    git branch -M main
    git push -u origin main
    
    

    Wenn der letzte Befehl fehlerfrei durchläuft, liegen eure Skripte jetzt sicher in eurem privaten GitHub-Repo.


    Schritt 4: exec im ioBroker erlauben

    Damit unser Automatik-Skript gleich den Git-Befehl ausführen darf, muss das im Adapter erlaubt werden:

    1. Geht im ioBroker auf Instanzen.
    2. Klickt beim JavaScript-Adapter (javascript.0) auf das Zahnrad.
    3. Setzt (falls noch nicht geschehen) einen Haken bei Erlaube das Kommando "exec".

    Schritt 5: Das Automatik-Skript (Silent Mode)

    Erstellt ein neues JavaScript im ioBroker und fügt diesen Code ein.
    Das Skript läuft jede Minute, ist extrem ressourcenschonend (Git prüft rein lokal) und meldet sich im Log nur, wenn es wirklich etwas hochgeladen hat (Silent Mode). So bleibt das Logbuch sauber.

    // =====================================================================
    // ioBroker Git Auto-Backup (SILENT MODE) v.2
    // =====================================================================
    
    const exec = require('child_process').exec;
    
    function runGitBackup() {
        const backupDir = '/opt/iobroker/scripts';
        
        // 1. Prüfen, ob der Ordner schon sicher ist, falls nicht -> hinzufügen (schont SD-Karte & andere Projekte)
        // 2. Ins Verzeichnis wechseln und Änderungen prüfen
        // 3. Nur bei echten Änderungen committen und pushen
        const cmd = `git config --global --get-all safe.directory | grep -q "^${backupDir}$" || git config --global --add safe.directory ${backupDir}; cd ${backupDir} && git add -A && git diff-index --quiet HEAD || (git commit -m "Auto-Backup: $(date +'%d.%m.%Y %H:%M')" && git push origin main)`;
    
        exec(cmd, function (error, stdout, stderr) {
            if (error) {
                log(`[Git Backup] Fehler bei der Ausführung: ${error.message}`, 'error');
                return;
            }
            
            const output = (stdout + " " + stderr).trim();
            
            if (output.includes('main -> main') || output.includes('master -> master')) {
                // Nur loggen, wenn WIRKLICH etwas hochgeladen wurde!
                log(`[Git Backup] ERFOLG! Neue Skript-Versionen wurden zu GitHub hochgeladen.`, 'info');
            } else if (output === "") {
                // SILENT MODE: Hier machen wir absichtlich NICHTS. 
                // So bleibt das ioBroker-Log sauber, wenn sich nichts geändert hat.
            } else {
                // Für unerwartete Git-Meldungen
                log(`[Git Backup] Durchgelaufen mit Info: ${output}`, 'debug');
            }
        });
    }
    
    // ---------------------------------------------------------
    // ZEITPLAN (Alle 5 Minuten)
    // ---------------------------------------------------------
    schedule("*/5 * * * *", function () {
        runGitBackup();
    });
    
    // Beim Start des Skripts einmalig sofort ausführen
    runGitBackup();
    

    Fazit

    Ab sofort müsst ihr euch um nichts mehr kümmern. Speichert ihr ein Skript im ioBroker, landet es durch die Spiegel-Funktion sofort auf der Festplatte. Spätestens 60 Sekunden später schiebt unser Backup-Skript einen neuen, sauberen Commit zu GitHub.

    Pro-Tipp: Wenn ihr in dem Backup-Ordner Dateien habt, die nicht zu GitHub sollen, legt dort einfach eine Textdatei namens .gitignore an und schreibt z.B. *.log oder geheim.js hinein.

    Edit:
    Die Zeile mit dem const cmd = ... gegen diese ausgetauscht:
    const cmd = `git config --global --replace-all safe.directory ${backupDir} && cd ${backupDir} && git add -A && git diff-index --quiet HEAD || (git commit -m "Auto-Backup: $(date +'%d.%m.%Y %H:%M')" && git push origin main)`;

    Edit: v.2
    Git-Config optimiert: Der Pfad wird jetzt per grep geprüft und nur noch geschrieben, wenn er wirklich fehlt. Das verhindert eine endlos wachsende .gitconfig, schont die SD-Karte und zerschießt keine anderen Git-Projekte auf dem System.
    Sofort-Start hinzugefügt: Das Skript führt beim (Neu-)Start jetzt direkt ein Backup aus.
    Zeitplan & Kommentare korrigiert: Der Cron-Ausdruck und die Kommentare stehen nun einheitlich auf "Alle 5 Minuten" (*/5 * * * *).

    ioBroker auf NUC (Celeron mit Ubuntu-Server)

    Homematic, HMIP, Hue, Unifi, Plex, Nest, Roborock, Google Assistant

    Marc BergM 1 Antwort Letzte Antwort
    0
    • M mrMuppet

      Ein verlässliches Backup der eigenen ioBroker-Skripte ist Gold wert. Wer schon einmal versehentlich einen funktionierenden Codeblock gelöscht oder überschrieben hat, weiß eine saubere Versionierung extrem zu schätzen.

      Ich habe nach einer Lösung gesucht, mit der ich meine Skripte vollautomatisch, unsichtbar und kostenlos versionieren kann. Das Ziel: Ein privates Git-Repository, das bei jeder Änderung einen Snapshot macht, damit ich im Browser jederzeit ein "Vorher-Nachher" (Diff) sehen und alte Versionen zurückholen kann. Ganz ohne nerviges SSH-Schlüssel-Geraffel.

      Hier ist meine Lösung, die die hauseigene Spiegel-Funktion des JS-Adapters nutzt und auf einem Host völlig ressourcenschonend im Minutentakt im Hintergrund läuft.


      Schritt 1: Skripte automatisch auf die Festplatte spiegeln

      Damit Git unsere Skripte sichern kann, müssen sie als echte Dateien (.js oder .ts) auf der Festplatte des ioBrokers liegen. Das erledigt der JavaScript-Adapter von allein.

      1. Geht im ioBroker auf Instanzen und klickt beim JavaScript-Adapter (javascript.0) auf das Zahnrad (Einstellungen).
      2. Sucht die Option "Spiegeln von Skripten in den Dateipfad" (meist unter Zusätzliche Einstellungen).
      3. Tragt dort euren gewünschten Pfad ein, z.B.: /opt/iobroker/scripts
      4. Speichern und schließen.
      5. Wichtig: Öffnet nun kurz ein beliebiges Skript im ioBroker und klickt einmal auf "Speichern". Erst durch diesen Speicher-Vorgang legt der Adapter den neuen Ordner auf der Festplatte tatsächlich an!

      Schritt 2: GitHub vorbereiten (Personal Access Token)

      Wir nutzen HTTPS mit einem Token, damit wir uns nicht mit Zertifikaten oder Schlüsseln herumschlagen müssen.

      1. Erstellt auf GitHub ein neues Repository (z. B. iobroker-scripts). Wählt unbedingt "Private" aus, damit niemand eure Haussteuerung sieht!
      2. Geht bei GitHub oben rechts auf euer Profilbild -> Settings -> ganz unten links auf Developer settings -> Personal access tokens -> Tokens (classic).
      3. Klickt auf Generate new token (classic).
      4. Gebt ihm einen Namen (z. B. "ioBroker Backup"), setzt die Ablaufzeit (Expiration) z. B. auf "No expiration" und setzt einen Haken bei repo (Full control of private repositories).
      5. Klickt auf Generieren und kopiert euch den Token (er fängt meist mit ghp_ an).

      Schritt 3: Ordner für Git initialisieren

      Loggt euch per SSH (z. B. PuTTY) auf eurem ioBroker-Host ein und führt folgende Befehle nacheinander aus.

      (Hinweis: Ersetzt die Platzhalter DEIN_TOKEN, DEIN_GITHUB_NAME, DEIN_REPO und eure E-Mail-Adresse!)

      # 1. In den Skript-Ordner wechseln
      cd /opt/iobroker/scripts
      
      # 2. Den Ordner für Git als "sicher" markieren (löst Rechte-Probleme mit dem ioBroker-User)
      git config --global --add safe.directory /opt/iobroker/scripts
      
      # 3. Git initialisieren
      git init
      
      # 4. Git Benutzerdaten setzen (für die Historie auf GitHub)
      git config user.name "ioBroker Auto-Backup"
      git config user.email "deine.email@beispiel.de"
      
      # 5. Das GitHub-Repo verknüpfen (Hier Token & Namen einsetzen!)
      git remote add origin https://DEIN_TOKEN@github.com/DEIN_GITHUB_NAME/DEIN_REPO.git
      
      # 6. Den ersten, manuellen Upload anstoßen
      git add .
      git commit -m "Initial Backup"
      git branch -M main
      git push -u origin main
      
      

      Wenn der letzte Befehl fehlerfrei durchläuft, liegen eure Skripte jetzt sicher in eurem privaten GitHub-Repo.


      Schritt 4: exec im ioBroker erlauben

      Damit unser Automatik-Skript gleich den Git-Befehl ausführen darf, muss das im Adapter erlaubt werden:

      1. Geht im ioBroker auf Instanzen.
      2. Klickt beim JavaScript-Adapter (javascript.0) auf das Zahnrad.
      3. Setzt (falls noch nicht geschehen) einen Haken bei Erlaube das Kommando "exec".

      Schritt 5: Das Automatik-Skript (Silent Mode)

      Erstellt ein neues JavaScript im ioBroker und fügt diesen Code ein.
      Das Skript läuft jede Minute, ist extrem ressourcenschonend (Git prüft rein lokal) und meldet sich im Log nur, wenn es wirklich etwas hochgeladen hat (Silent Mode). So bleibt das Logbuch sauber.

      // =====================================================================
      // ioBroker Git Auto-Backup (SILENT MODE) v.2
      // =====================================================================
      
      const exec = require('child_process').exec;
      
      function runGitBackup() {
          const backupDir = '/opt/iobroker/scripts';
          
          // 1. Prüfen, ob der Ordner schon sicher ist, falls nicht -> hinzufügen (schont SD-Karte & andere Projekte)
          // 2. Ins Verzeichnis wechseln und Änderungen prüfen
          // 3. Nur bei echten Änderungen committen und pushen
          const cmd = `git config --global --get-all safe.directory | grep -q "^${backupDir}$" || git config --global --add safe.directory ${backupDir}; cd ${backupDir} && git add -A && git diff-index --quiet HEAD || (git commit -m "Auto-Backup: $(date +'%d.%m.%Y %H:%M')" && git push origin main)`;
      
          exec(cmd, function (error, stdout, stderr) {
              if (error) {
                  log(`[Git Backup] Fehler bei der Ausführung: ${error.message}`, 'error');
                  return;
              }
              
              const output = (stdout + " " + stderr).trim();
              
              if (output.includes('main -> main') || output.includes('master -> master')) {
                  // Nur loggen, wenn WIRKLICH etwas hochgeladen wurde!
                  log(`[Git Backup] ERFOLG! Neue Skript-Versionen wurden zu GitHub hochgeladen.`, 'info');
              } else if (output === "") {
                  // SILENT MODE: Hier machen wir absichtlich NICHTS. 
                  // So bleibt das ioBroker-Log sauber, wenn sich nichts geändert hat.
              } else {
                  // Für unerwartete Git-Meldungen
                  log(`[Git Backup] Durchgelaufen mit Info: ${output}`, 'debug');
              }
          });
      }
      
      // ---------------------------------------------------------
      // ZEITPLAN (Alle 5 Minuten)
      // ---------------------------------------------------------
      schedule("*/5 * * * *", function () {
          runGitBackup();
      });
      
      // Beim Start des Skripts einmalig sofort ausführen
      runGitBackup();
      

      Fazit

      Ab sofort müsst ihr euch um nichts mehr kümmern. Speichert ihr ein Skript im ioBroker, landet es durch die Spiegel-Funktion sofort auf der Festplatte. Spätestens 60 Sekunden später schiebt unser Backup-Skript einen neuen, sauberen Commit zu GitHub.

      Pro-Tipp: Wenn ihr in dem Backup-Ordner Dateien habt, die nicht zu GitHub sollen, legt dort einfach eine Textdatei namens .gitignore an und schreibt z.B. *.log oder geheim.js hinein.

      Edit:
      Die Zeile mit dem const cmd = ... gegen diese ausgetauscht:
      const cmd = `git config --global --replace-all safe.directory ${backupDir} && cd ${backupDir} && git add -A && git diff-index --quiet HEAD || (git commit -m "Auto-Backup: $(date +'%d.%m.%Y %H:%M')" && git push origin main)`;

      Edit: v.2
      Git-Config optimiert: Der Pfad wird jetzt per grep geprüft und nur noch geschrieben, wenn er wirklich fehlt. Das verhindert eine endlos wachsende .gitconfig, schont die SD-Karte und zerschießt keine anderen Git-Projekte auf dem System.
      Sofort-Start hinzugefügt: Das Skript führt beim (Neu-)Start jetzt direkt ein Backup aus.
      Zeitplan & Kommentare korrigiert: Der Cron-Ausdruck und die Kommentare stehen nun einheitlich auf "Alle 5 Minuten" (*/5 * * * *).

      Marc BergM Offline
      Marc BergM Offline
      Marc Berg
      Most Active
      schrieb zuletzt editiert von
      #2

      @mrMuppet sagte in [Vorlage] Automatisches Git-Backup für Skripte/Blockly:

      const cmd = `git config --global --add safe.directory ${backupDir}

      Dieser Befehl dürfte minütlich das gleiche Verzeichnis in die .gitconfig schreiben (anhängen), oder?

      NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+EMQX+Grafana

      Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

      Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

      1 Antwort Letzte Antwort
      0
      • M Offline
        M Offline
        mrMuppet
        schrieb zuletzt editiert von mrMuppet
        #3

        Stimmt: durch das --add wird die Zeile bei jedem Durchlauf stumpf unten an die .gitconfig des iobroker-Users angehängt.

        Lösung: Tausch im Skript einfach die Zeile mit dem const cmd = ... gegen diese hier aus:

        const cmd = `git config --global --replace-all safe.directory ${backupDir} && cd ${backupDir} && git add -A && git diff-index --quiet HEAD || (git commit -m "Auto-Backup: $(date +'%d.%m.%Y %H:%M')" && git push origin main)`;
        

        Sobald das Skript einmal mit --replace-all durchgelaufen ist, hat es seine eigene .gitconfig wieder aufgeräumt!

        Edit: Ich habe oben noch eine bessere Version unter dem Namen v.2 hochgeladen.

        ioBroker auf NUC (Celeron mit Ubuntu-Server)

        Homematic, HMIP, Hue, Unifi, Plex, Nest, Roborock, Google Assistant

        1 Antwort Letzte Antwort
        0
        • MartinPM Online
          MartinPM Online
          MartinP
          schrieb zuletzt editiert von MartinP
          #4

          git und github (microsoft company) gleichzusetzen finde ich etwas ..... hmmm .... fragwürdig ....

          Ich habe auf meinen PVE eine gitea - instanz angelegt - dorthin spiegele ich händisch. Github-Repositories werde ich nur noch in Ausnahmefällen anlegen - wenn Kooperation mit anderen Contributors nötig ist z. B.

          Bei den Sachen, die man da github anvertraut sollte man vorsichtig sein!

          Wenn in einem Script Credentials für aus dem Web erreichbare "china-Cloud"-Devices vorkommen, kann sie jeder auslesen, der Zugang zum github Repository hat... - deshalb ist der Hinweis des Thread-Erstellers UNBEDINGT zu befolgen

          Mein Wissensstand über private Repositories ist aber seit 7 Jahren veraltet ...

          https://www.heise.de/news/Private-Repositories-auf-GitHub-nun-kostenlos-4267448.html

          Ob mir persönlich es sicher genug wäre, den Haken bei "privat" zu setzen, um andere von meinem Repository auszusperren ...

          Womöglich nutzt Microsoft die privaten Repositories für das Training von KIs und irgendwie flutscht später dann doch ein Credential in die Antwort auf einen Prompt an diese KI....

          Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
          Virtualization : unprivileged lxc container (debian 13) on Proxmox 9.1.5)
          Linux pve 6.17.9-1-pve
          6 GByte RAM für den Container
          Fritzbox 6591 FW 8.20 (Vodafone Leih-Box)
          Remote-Access über Wireguard der Fritzbox

          1 Antwort Letzte Antwort
          1
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          635

          Online

          32.7k

          Benutzer

          82.5k

          Themen

          1.3m

          Beiträge
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
          ioBroker Community 2014-2025
          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