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. Entwicklung
  4. Adapter Passwort entschlüsseln

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

Adapter Passwort entschlüsseln

Geplant Angeheftet Gesperrt Verschoben Entwicklung
4 Beiträge 3 Kommentatoren 471 Aufrufe 2 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.
  • 6 Offline
    6 Offline
    652145
    schrieb am zuletzt editiert von
    #1

    Hallo Zusammen,

    Ich finde den ioBroker absolut super cool.
    Nun möchte ich gerne mal versuchen, einen eigenen Adapter zu schreiben.
    Ich bin blutiger Anfänger in der Adapterentwicklung.

    Der Adapter soll im Mode "schedule" laufen.

    Die Adapterkonfig beinhaltet unter anderem ein Passwort das ich verschlüsselt speichere, was soweit auch funktioniert.

    Nun muss das Passwort beim Aufruf des Adapters entschlüsselt werden.

    Dies gelingt mir im Moment nicht, deshalb die Frage an euch Experte hier.

    Wie müsste die Anpassung in der main.js sein, damit mir das Entschlüssen gelingt?

    Inhalt der main.js:

    * jshint -W097 */
    /* jshint strict: false */
    /* jslint node: true */
    'use strict';
    
    const utils = require('@iobroker/adapter-core');
    const adapterName = require('./package.json').name.split('.').pop();
    
    class modeshedule extends utils.Adapter {
    
        constructor(options) {
            super({
                ...options,
                name: adapterName,
            });
    
            this.killTimeout = null;
    
            this.on('ready', this.onReady.bind(this));
            this.on('unload', this.onUnload.bind(this));
    
    		
    
    
        }
    
    // Fuktion um das Passwort zu entschlüssen
    
    	function decrypt(key, value) {
        
    		let result = "";
    		for (let i = 0; i < value.length; ++i) {
    		result += String.fromCharCode(key[i % key.length].charCodeAt(0) ^ value.charCodeAt(i));
    		}
    		this.log.debug("password decrypt ready");
    		return result;
    	}
    
        async onReady() {
            
    		this.log.info("onReady wird aufgerufen");
    		
                    this.getForeignObject("system.config", (err, obj) => {
        
    			if (obj && obj.native && obj.native.secret) {
    			//noinspection JSUnresolvedVariable
    			this.config.password = decrypt(obj.native.secret, this.config.password);
    			} else {
    			 //noinspection JSUnresolvedVariable
    			this.config.password = decrypt("Zgfr56gFe87jJOM", this.config.password);
    			
    			}
    
    
    		let pass = this.config.password;
    
    		this.log.info("Passwort lautet : " + pass);
    
    
                    this.killTimeout = setTimeout(this.stop.bind(this), 5000);
    
        }
    
        onUnload(callback) {
            try {
    
                if (this.killTimeout) {
                    this.log.debug('clearing kill timeout');
                    clearTimeout(this.killTimeout);
                }
    
                this.log.debug('cleaned everything up...');
                callback();
            } catch (e) {
                callback();
            }
        }
    }
    
    // @ts-ignore parent is a valid property on module
    if (module.parent) {
        // Export the constructor in compact mode
        /**
         * @param {Partial<ioBroker.AdapterOptions>} [options={}]
         */
        module.exports = (options) => new modeshedule(options);
    } else {
        // otherwise start the instance directly
        new modeshedule();
    }
    
    UncleSamU 1 Antwort Letzte Antwort
    0
    • 6 652145

      Hallo Zusammen,

      Ich finde den ioBroker absolut super cool.
      Nun möchte ich gerne mal versuchen, einen eigenen Adapter zu schreiben.
      Ich bin blutiger Anfänger in der Adapterentwicklung.

      Der Adapter soll im Mode "schedule" laufen.

      Die Adapterkonfig beinhaltet unter anderem ein Passwort das ich verschlüsselt speichere, was soweit auch funktioniert.

      Nun muss das Passwort beim Aufruf des Adapters entschlüsselt werden.

      Dies gelingt mir im Moment nicht, deshalb die Frage an euch Experte hier.

      Wie müsste die Anpassung in der main.js sein, damit mir das Entschlüssen gelingt?

      Inhalt der main.js:

      * jshint -W097 */
      /* jshint strict: false */
      /* jslint node: true */
      'use strict';
      
      const utils = require('@iobroker/adapter-core');
      const adapterName = require('./package.json').name.split('.').pop();
      
      class modeshedule extends utils.Adapter {
      
          constructor(options) {
              super({
                  ...options,
                  name: adapterName,
              });
      
              this.killTimeout = null;
      
              this.on('ready', this.onReady.bind(this));
              this.on('unload', this.onUnload.bind(this));
      
      		
      
      
          }
      
      // Fuktion um das Passwort zu entschlüssen
      
      	function decrypt(key, value) {
          
      		let result = "";
      		for (let i = 0; i < value.length; ++i) {
      		result += String.fromCharCode(key[i % key.length].charCodeAt(0) ^ value.charCodeAt(i));
      		}
      		this.log.debug("password decrypt ready");
      		return result;
      	}
      
          async onReady() {
              
      		this.log.info("onReady wird aufgerufen");
      		
                      this.getForeignObject("system.config", (err, obj) => {
          
      			if (obj && obj.native && obj.native.secret) {
      			//noinspection JSUnresolvedVariable
      			this.config.password = decrypt(obj.native.secret, this.config.password);
      			} else {
      			 //noinspection JSUnresolvedVariable
      			this.config.password = decrypt("Zgfr56gFe87jJOM", this.config.password);
      			
      			}
      
      
      		let pass = this.config.password;
      
      		this.log.info("Passwort lautet : " + pass);
      
      
                      this.killTimeout = setTimeout(this.stop.bind(this), 5000);
      
          }
      
          onUnload(callback) {
              try {
      
                  if (this.killTimeout) {
                      this.log.debug('clearing kill timeout');
                      clearTimeout(this.killTimeout);
                  }
      
                  this.log.debug('cleaned everything up...');
                  callback();
              } catch (e) {
                  callback();
              }
          }
      }
      
      // @ts-ignore parent is a valid property on module
      if (module.parent) {
          // Export the constructor in compact mode
          /**
           * @param {Partial<ioBroker.AdapterOptions>} [options={}]
           */
          module.exports = (options) => new modeshedule(options);
      } else {
          // otherwise start the instance directly
          new modeshedule();
      }
      
      UncleSamU Offline
      UncleSamU Offline
      UncleSam
      Developer
      schrieb am zuletzt editiert von
      #2

      @652145 Du musst nichts selber verschlüsseln oder entschlüsseln.

      Setze in der io-package.json einfach folgende Einträge:

      
          "encryptedNative": ["meinFeldDasVerschlüsseltWerdenSoll"],
          "protectedNative": ["meinFeldDasVerschlüsseltWerdenSoll"],
      

      Ein Beispiel findest du hier.

      Dazu solltest du noch die js-controller dependency auf minimum 3.1 setzen (wenn ich mich nicht irre - das fehlt im obigen Beispiel noch).

      Bitte bei Problemen mit meinen Adaptern, Issue auf GitHub erfassen: Loxone | I2C | Luxtronik2
      ♡-lichen Dank an meine Sponsoren

      6 1 Antwort Letzte Antwort
      0
      • UncleSamU UncleSam

        @652145 Du musst nichts selber verschlüsseln oder entschlüsseln.

        Setze in der io-package.json einfach folgende Einträge:

        
            "encryptedNative": ["meinFeldDasVerschlüsseltWerdenSoll"],
            "protectedNative": ["meinFeldDasVerschlüsseltWerdenSoll"],
        

        Ein Beispiel findest du hier.

        Dazu solltest du noch die js-controller dependency auf minimum 3.1 setzen (wenn ich mich nicht irre - das fehlt im obigen Beispiel noch).

        6 Offline
        6 Offline
        652145
        schrieb am zuletzt editiert von
        #3

        @unclesam Deine Änderungen haben auf Anhieb funktioniert.

        Vielen Dank für die schnelle Hilfe.

        1 Antwort Letzte Antwort
        1
        • MeistertrM Offline
          MeistertrM Offline
          Meistertr
          Developer
          schrieb am zuletzt editiert von
          #4

          @UncleSam ist das richtig, wenn ich das über den js-Controller verschlüsseln lasse, dass beim download der config, dass das pw im klartext da steht? oder hab ich noch irgendwo einen fehler?
          https://github.com/iobroker-community-adapters/ioBroker.wolf-smartset

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


          Support us

          ioBroker
          Community Adapters
          Donate

          677

          Online

          32.6k

          Benutzer

          82.0k

          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