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. Off Topic
  4. Lokal Notizen verwalten

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.6k

Lokal Notizen verwalten

Geplant Angeheftet Gesperrt Verschoben Off Topic
43 Beiträge 5 Kommentatoren 406 Aufrufe 7 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.
  • P peterfido

    OK, wenn ich es über die alte Version drüber installiere, läuft es.

    Leider wurden die alten Notizen nicht importiert und können auch nicht aus dem Backup importiert werden.

    a637f38d-8f2f-4f66-aec8-72e8ba98e6aa-image.png

    Ein älteres Backup zum manuellen Extrahieren der Texte lässt sich leider nicht bequem herunterladen.

    David G.D Online
    David G.D Online
    David G.
    schrieb zuletzt editiert von
    #41

    @peterfido

    Komisch, bei mir hat er beim Setup der SQL Version alles sauber importiert aus der json.

    Die neue Version lässt auch nur einen restore einer DB zu, da eigentlich die json importiert sein sollte.

    Hast du setup_sql oder setup_sql2 installiert?
    Ersteres hat bei mir den Import gemacht. Auf die 2 bin ich in einem Schritt mit sehr vielen Änderungen gegangen. Evtl ist das da verloren gegangen.

    P. S.
    Gemini meint zu 2 Versionen gleichzeitig:

    Kurz und knapp: Damit sich zwei Instanzen auf demselben Server nicht gegenseitig überschreiben, musst du im Setup-Skript an ein paar Stellen die Namen und Pfade "klonen" (z. B. eine "2" dranhängen).
    
    Hier sind die 5 Dinge, die du im Code anpassen musst:
    
    ### 1. Die Haupt-Variablen (ca. Zeile 28)
    
    Ändere das Installationsverzeichnis und den Namen des Systemdienstes:
    
    * `INSTALL_DIR="/opt/notiz-tool-2"`
    * `SERVICE_NAME="notizen2.service"`
    
    ### 2. Die hardcodierten Pfade in den Hintergrund-Skripten
    
    In der `cleanup.py` (ca. Zeile 606) und in der `backup.sh` (ca. Zeile 641) stehen aktuell noch feste Pfade. Ändere diese auf dein neues Verzeichnis:
    
    * In `cleanup.py`:
    `DB = '/opt/notiz-tool-2/data.db'` und `UPL = '/opt/notiz-tool-2/uploads'`
    * In `backup.sh`:
    `cd /opt/notiz-tool-2`
    
    ### 3. Der Linux-Systembenutzer (ca. ab Zeile 899)
    
    Ersetze im unteren Teil des Skripts (bei den Rechten, im Systemd-Service und beim Cronjob) den Benutzer `notizen` durch z.B. `notizen2`.
    Beispiel: `if ! id -u notizen2 > /dev/null 2>&1; then useradd -r -s /bin/false notizen2` und `chown -R notizen2:notizen2 $INSTALL_DIR`.
    
    ### 4. Der Dateiname für den Cronjob (ca. Zeile 925)
    
    Damit der Cronjob der ersten Instanz nicht gelöscht wird, ändere den Namen der Datei, die in `/etc/cron.d/` abgelegt wird:
    
    * `rm -f /etc/cron.d/notizen-tool-2`
    * Und entsprechend bei den `echo`-Befehlen danach auch `>> /etc/cron.d/notizen-tool-2` schreiben.
    
    ### 5. Der Port
    
    Das passiert nicht im Code, sondern ist selbsterklärend: Wenn das Skript dich am Anfang fragt, gibst du einfach einen anderen Port an (z. B. `8081`).
    
    ---
    
    Wenn du diese Anpassungen machst, laufen beide Tools komplett isoliert voneinander.
    
    Bist du bereit, dir als Nächstes die Swipe-Geste für die Sidebar auf dem Smartphone anzuschauen?
    

    Zeigt eure Lovelace-Visualisierung klick
    (Auch ideal um sich Anregungen zu holen)

    Meine Tabellen für eure Visualisierung klick

    1 Antwort Letzte Antwort
    0
    • P peterfido

      OK, wenn ich es über die alte Version drüber installiere, läuft es.

      Leider wurden die alten Notizen nicht importiert und können auch nicht aus dem Backup importiert werden.

      a637f38d-8f2f-4f66-aec8-72e8ba98e6aa-image.png

      Ein älteres Backup zum manuellen Extrahieren der Texte lässt sich leider nicht bequem herunterladen.

      David G.D Online
      David G.D Online
      David G.
      schrieb zuletzt editiert von David G.
      #42

      @peterfido

      Ist in meiner v2 wirklich ausgeflogen.

      Hiermit kannst du es importieren. Achtung, überschreibt die DB falls schon was drinnen ist. Json muss im Ordner liegen.

      #!/bin/bash
      
      # Installationsverzeichnis (passe dies an, falls deine 2. Instanz z.B. /opt/notiz-tool-2 heißt)
      INSTALL_DIR="/opt/notiz-tool"
      JSON_FILE="$INSTALL_DIR/data.json"
      DB_FILE="$INSTALL_DIR/data.db"
      TEMP_SCRIPT="$INSTALL_DIR/run_import.py"
      
      echo "--- JSON zu SQLite Import-Tool ---"
      
      # 1. Root-Rechte prüfen
      if [ "$EUID" -ne 0 ]; then
          echo "FEHLER: Bitte führe dieses Skript als Root (z.B. sudo) aus!"
          exit 1
      fi
      
      # 2. Prüfen, ob die JSON-Datei existiert
      if [ ! -f "$JSON_FILE" ]; then
          echo "FEHLER: Die Datei $JSON_FILE wurde nicht gefunden."
          echo "Bitte lade deine alte data.json zuerst in den Ordner $INSTALL_DIR hoch."
          exit 1
      fi
      
      # 3. Existierende Datenbank radikal löschen
      echo "Lösche existierende Datenbank..."
      rm -f "$DB_FILE"
      rm -f "$DB_FILE-wal"
      rm -f "$DB_FILE-shm"
      
      echo "Erstelle temporäres Python-Import-Skript..."
      
      # 4. Python-Skript generieren
      cat << 'EOF' > $TEMP_SCRIPT
      import json
      import sqlite3
      import sys
      import os
      
      json_file = sys.argv[1]
      db_file = sys.argv[2]
      
      try:
          with open(json_file, 'r', encoding='utf-8') as f:
              data = json.load(f)
      except Exception as e:
          print(f"Fehler beim Lesen der JSON-Datei: {e}")
          sys.exit(1)
      
      conn = sqlite3.connect(db_file)
      # Aktiviere Write-Ahead-Logging wie im Hauptprogramm
      conn.execute('PRAGMA journal_mode=WAL')
      cursor = conn.cursor()
      
      # Tabellenstruktur neu anlegen, da die DB frisch ist
      cursor.execute('''
          CREATE TABLE IF NOT EXISTS settings (
              key TEXT PRIMARY KEY, 
              value TEXT
          )
      ''')
      cursor.execute('''
          CREATE TABLE IF NOT EXISTS notes (
              id TEXT PRIMARY KEY,
              parent_id TEXT,
              sort_order INTEGER,
              title TEXT,
              text TEXT,
              reminder TEXT,
              locked_by TEXT,
              locked_at REAL
          )
      ''')
      cursor.execute('''
          CREATE TABLE IF NOT EXISTS note_history (
              id INTEGER PRIMARY KEY AUTOINCREMENT,
              note_id TEXT,
              title TEXT,
              text TEXT,
              saved_at REAL
          )
      ''')
      
      # Standard-Einstellungen schreiben
      cursor.execute("INSERT INTO settings (key, value) VALUES ('theme', 'dark')")
      cursor.execute("INSERT INTO settings (key, value) VALUES ('accent', '#27ae60')")
      cursor.execute("INSERT INTO settings (key, value) VALUES ('password_enabled', 'false')")
      cursor.execute("INSERT INTO settings (key, value) VALUES ('history_enabled', 'true')")
      cursor.execute("INSERT INTO settings (key, value) VALUES ('history_days', '30')")
      cursor.execute("INSERT INTO settings (key, value) VALUES ('tree_last_modified', '0')")
      
      # Rekursive Funktion für den sauberen Baum-Aufbau
      def insert_node(node, parent_id=None, sort_order=0):
          cursor.execute('''
              INSERT INTO notes (id, parent_id, sort_order, title, text, reminder)
              VALUES (?, ?, ?, ?, ?, ?)
          ''', (
              node.get('id'),
              parent_id,
              sort_order,
              node.get('title', 'Neu'),
              node.get('text', ''),
              node.get('reminder', None)
          ))
          
          # Kinder-Elemente (Unterordner/Notizen) verarbeiten
          children = node.get('children', [])
          for index, child in enumerate(children):
              insert_node(child, node.get('id'), index)
      
      try:
          if isinstance(data, dict) and 'content' in data:
              nodes = data['content']
          elif isinstance(data, list):
              nodes = data
          else:
              print("Fehler: Unbekanntes JSON-Format. Weder Liste noch 'content'-Objekt gefunden.")
              sys.exit(1)
              
          print(f"Gefundene Hauptknoten: {len(nodes)}. Starte Import...")
          
          for index, node in enumerate(nodes):
              insert_node(node, None, index)
              
          conn.commit()
          print("Erfolg! Alle Notizen wurden sauber in die neue SQLite-Datenbank übertragen.")
          
      except Exception as e:
          print(f"Datenbank-Fehler während des Imports: {e}")
      finally:
          conn.close()
      EOF
      
      # 5. Import ausführen
      echo "Starte Datenmigration..."
      python3 $TEMP_SCRIPT "$JSON_FILE" "$DB_FILE"
      
      # 6. Rechte für den Systemdienst korrigieren
      echo "Korrigiere Dateirechte..."
      chown notizen:notizen "$DB_FILE"
      if [ -f "$DB_FILE-wal" ]; then chown notizen:notizen "$DB_FILE-wal"; fi
      if [ -f "$DB_FILE-shm" ]; then chown notizen:notizen "$DB_FILE-shm"; fi
      
      # 7. Aufräumen
      echo "Räume auf..."
      rm -f $TEMP_SCRIPT
      
      # Service neustarten
      systemctl restart notizen.service
      
      echo "--- Import komplett abgeschlossen! ---"
      

      Edit
      https://github.com/ipod86/Notizen/blob/main/json2sql.sh

      Edit 2
      Jab auf git die Versionen jetzt entsprechend umbenannt und die zwischenversion gelöscht.

      EDIT 3
      Hab grad alle Dienste, Ordner etc gelöscht und das Script lief problemlos durch. Auch mein DB Backup lies sich problemlos wiederherstellen.

      Zeigt eure Lovelace-Visualisierung klick
      (Auch ideal um sich Anregungen zu holen)

      Meine Tabellen für eure Visualisierung klick

      1 Antwort Letzte Antwort
      0
      • P Offline
        P Offline
        peterfido
        schrieb zuletzt editiert von
        #43

        Danke für die Infos.

        Ich bin heute nicht mehr zu gekommen. Aktuell ändere ich die Kommunikation der Eaton Easy E4 von Node-Red-Nodes zu Modbus. Das hat erstmal Priorität, da ab zu vielen Datenpunkten Probleme kommen, die den WAF gefährden. ;)

        Gruß

        Peterfido


        Proxmox auf Intel NUC12WSHi5
        ioBroker: Debian (VM)
        CCU: Debmatic (VM)
        Influx: Debian (VM)
        Grafana: Debian (VM)
        eBus: Debian (VM)
        Zigbee: Debian (VM) mit zigbee2mqtt

        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

        253

        Online

        32.7k

        Benutzer

        82.4k

        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