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. [neuer Adapter] Dali

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

[neuer Adapter] Dali

Geplant Angeheftet Gesperrt Verschoben Entwicklung
dalimodbusadapter
7 Beiträge 2 Kommentatoren 808 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.
  • M Offline
    M Offline
    Malaus
    schrieb am zuletzt editiert von
    #1

    Hallo Ihr,

    ich bin in den letzten Tagen beschäftigt einen Dali Modbus-fähigen Controller (Dali4Net) mit ioBroker zu verbinden. Das klappt auch alles sehr gut. Da inzwischen das Skript riesig geworden ist, kam mir die Idee, daraus meinen ersten Adapter zu basteln.
    Ich hab es inzwischen auf mehrere Skripte aufgeteilt. Und wenn ich das bei anderen Adapter richtig gedeutet hab, kann man z.B. mit

    const common = require(__dirname + '/common.js');
    

    Die Skripte miteinander verbinden. Sehe ich das richtig?

    Nächste Frage:
    Ich möchte gerne beim Start des Adapters prüfen, welche der max 64 Lampen da sind.
    [kleine Info: bei Dali gibts vordefinierte Adressen für die Lampen]

    var DaliAdressLight = ["A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","A11","A12","A13","A14","A15","A16","A17","A18","A19","A20","A21","A22","A23","A24","A25","A26","A27","A28","A29","A30","A31","A32","A33","A34","A35","A36","A37","A38","A39","A40","A41","A42","A43","A44","A45","A46","A47","A48","A49","A50","A51","A52","A53","A54","A55","A56","A57","A58","A59","A60","A61","A62","A63"]
    var HexAdressLight = ["01","03","05","07","09","0B","0D","0F","11","13","15","17","19","1B","1D","1F","21","23","25","27","29","2B","2D","2F","31","33","35","37","39","3B","3D","3F","41","43","45","47","49","4B","4D","4F","51","53","55","57","59","5B","5D","5F","61","63","65","67","69","6B","6D","6F","71","73","75","77","79","7B","7D","7F"]
    
    firstRun()
    function firstRun(i){
        i = 0;
        checkLamp(i);
        //Hier fehlt noch if mit existiert die Lampe schon!!!
    }
    
    function checkLamp(i){
        
        setTimeout (function(){
        if (i < HexAdressLight.length){
        var hexlight = "0x" + HexAdressLight[i];
        log("ID " + hexlight)
        light = DaliAdressLight[i];
        getLampState(hexlight); 
        }
        else {log("Durchlauf beendet")}
    },500);
    }
     
    function getLampState(hexlight){
    
        // Erstelle Transaction ID
        var transid = Transaction_Identifier();
        
          //Hex Nachricht erstellen
          var hex_data = ["0x00",transid, "0x00","0x00","0x00","0x17",BusNr,"0x17","0x00","0x65","0x00","0x05","0x00","0x64","0x00","0x06","0x0c","0x12",transid,"0x00","0x03","0x00","0x00",hexlight,Query,"0x00","0x00","0x00","0x00" ]
          var data = Buffer.from(hex_data);
         
          sendMessage(ip, port, data);
    }
    
    function sendMessage(host, port, data) {
      var client = net.connect({host:host, port: port}, function () {
        log('connected to server!');
        log("Message " + JSON.stringify(data))
        client.write(data);
      });
      client.on('data', function (data) {
        log("Response " + data.toJSON().data)
        log("Resp " + JSON.stringify(data));
        checkLamp(i++)
            
        response(data);
        client.end();
      });
      client.on('end', function () {
        log('disconnected from server');
      });
      client.on('error', function (error) {
        console.error('error: ' + error);
        client.end();
      });
    }
    
     function Transaction_Identifier (){
        const min = 0;
        const max = 253;
        const x = Math.floor(Math.random() * (max - min)) + min;
        return "0x" + x.toString(16);
    }
    
    function response (data){
    var obj = []    
    obj = data.toJSON().data
    if (obj[10]==130){
        log("Lampe existiert: " + light)
        createState(light,{
        name: "Lampe " + light,
        role: "state",
        type: "number",
        read: true,
        write: true,
        min: 0,
        max: 100,
        def: 0,
        unit: "%"
    });
        
    }
    else{log("Lampe nicht vorhanden")}
    }
    

    Dabei wird ein Datenpunkt erstellt.
    Jetzt möchte ich aber später diese Funktion nutzen:

    on({id: light , change: "any"},function (obj) {
      var value = obj.state.val;
      var name = obj.common.name;
      CreateLampHex(value, name);
    });
    

    Kann ich das auch so erstellen lassen und vielleicht sogar noch in ein spezielles Skript kopieren?
    Oder ist es sinnvoller sowas von vorne rein als Vorlage zu erstellen?

    1 Antwort Letzte Antwort
    0
    • M Offline
      M Offline
      Malaus
      schrieb am zuletzt editiert von
      #2

      Das mit dem require hab ich inzwischen hinbekommen. Kann nun in main.js eine andere Datei (firstStep.js) aufrufen. Und bekomme ein Ergebnis zurück.

      //main.js
      const test = require('./lib/firstStep');
      
      const bla = test;
      
      this.log.info('Test bla: ' + bla);
      
      //firstStep.js
      let test = 'hallo';
      
      console.log('config Bus0: ' + test);
      
      module.exports = test;
      

      Wie kann ich nun Variablen übergeben? Noch besser, wo wird die Konfiguration, die man in einem Adapter eingibt abgespeichert? Dann kann ich diese doch bestimmt direkt in der zweiten Datei abrufen.

      1 Antwort Letzte Antwort
      0
      • J.A.R.V.I.S.J Offline
        J.A.R.V.I.S.J Offline
        J.A.R.V.I.S.
        Developer
        schrieb am zuletzt editiert von J.A.R.V.I.S.
        #3

        @Malaus hast du zum erstellen den Adapter Creator verwendet? Gibt es schon ein Repo wo man etwas nachschauen kann?

        @Malaus sagte in [neuer Adapter] Dali:

        Wie kann ich nun Variablen übergeben?

        Möchtest du Variablen an dein "firstStep" übergeben? Da musst du entweder Funktionen definieren oder eine Klasse erstellen, die du dann exportierst und dann mit Parametern aufrufst.

        @Malaus sagte in [neuer Adapter] Dali:

        Jetzt möchte ich aber später diese Funktion nutzen:

        Du möchtest also beim ändern eines States eine Lampe erstellen, verstehe ich da richtig? Dazu gibt es Events die du im Adapter nutzen kannst.

        M 1 Antwort Letzte Antwort
        0
        • J.A.R.V.I.S.J J.A.R.V.I.S.

          @Malaus hast du zum erstellen den Adapter Creator verwendet? Gibt es schon ein Repo wo man etwas nachschauen kann?

          @Malaus sagte in [neuer Adapter] Dali:

          Wie kann ich nun Variablen übergeben?

          Möchtest du Variablen an dein "firstStep" übergeben? Da musst du entweder Funktionen definieren oder eine Klasse erstellen, die du dann exportierst und dann mit Parametern aufrufst.

          @Malaus sagte in [neuer Adapter] Dali:

          Jetzt möchte ich aber später diese Funktion nutzen:

          Du möchtest also beim ändern eines States eine Lampe erstellen, verstehe ich da richtig? Dazu gibt es Events die du im Adapter nutzen kannst.

          M Offline
          M Offline
          Malaus
          schrieb am zuletzt editiert von
          #4

          @J-A-R-V-I-S
          ich hab inzwischen zwei Adapter mit dem Adapter Creator gemacht.
          Einmal mit create-adapter v1.23.0 und create-adapter v1.17.0.

          Bei v1.23.0 (Konsole) ging der Adapter sofort auf Grün aber es hat mir "setObjectNotExist" nicht anerkannt. Daher hab ich nun nochmal von vorne angefangen und mit v1.17.0. (Html Seite) einen neuen erstellt. Den bekomm ich nun aber nicht auf Grün. :D

          Zu Variablen übergeben:
          Also funktioniert das ganz normal, wie bei JavaScript? Nur das es in diesem Fall global ist?

          test(varibale1, variable2);
          
          function test (variable1, variable2){
          ....
          }
          

          Ich möchte das es später einen Button im Adapter gibt, wo man neue Lampen suchen kann. Das, dann bei FirstStep alles abgewickelt (Neuer Datenpunkt setzen usw...) wird.

          Dann gibts es eine weitere Datei, die regelmäßig alle Lampen abfragt (TCP Befehl), ob sich deren State geändert hat und falls ja, dies in den Datenpunkt einträgt.

          Also grundsätzlich gleiches Prinzip, wie z.B. der Zigbee Adapter. Hab auch schon so gut wie alles mit dem JavaScript Adapter geschrieben. Muss es also nur noch etwas übersetzen und anpassen.

          Hoffe das war verständlich erklärt. Falls nicht, gerne fragen. :)

          Was immoment meine Herausforderung ist, ist den Adapter auf grün zu bekommen, damit ich mal anfangen kann zu testen, ob ich nun den Befehl "setObjectNotExist" ausführen kann oder nicht.
          Hat wahrscheinlich einen Vorteil, wenn ich es schon mal auf Github lade, damit z.B. du schon mal ein Auge drauf werfen kannst oder?

          J.A.R.V.I.S.J 1 Antwort Letzte Antwort
          0
          • M Malaus

            @J-A-R-V-I-S
            ich hab inzwischen zwei Adapter mit dem Adapter Creator gemacht.
            Einmal mit create-adapter v1.23.0 und create-adapter v1.17.0.

            Bei v1.23.0 (Konsole) ging der Adapter sofort auf Grün aber es hat mir "setObjectNotExist" nicht anerkannt. Daher hab ich nun nochmal von vorne angefangen und mit v1.17.0. (Html Seite) einen neuen erstellt. Den bekomm ich nun aber nicht auf Grün. :D

            Zu Variablen übergeben:
            Also funktioniert das ganz normal, wie bei JavaScript? Nur das es in diesem Fall global ist?

            test(varibale1, variable2);
            
            function test (variable1, variable2){
            ....
            }
            

            Ich möchte das es später einen Button im Adapter gibt, wo man neue Lampen suchen kann. Das, dann bei FirstStep alles abgewickelt (Neuer Datenpunkt setzen usw...) wird.

            Dann gibts es eine weitere Datei, die regelmäßig alle Lampen abfragt (TCP Befehl), ob sich deren State geändert hat und falls ja, dies in den Datenpunkt einträgt.

            Also grundsätzlich gleiches Prinzip, wie z.B. der Zigbee Adapter. Hab auch schon so gut wie alles mit dem JavaScript Adapter geschrieben. Muss es also nur noch etwas übersetzen und anpassen.

            Hoffe das war verständlich erklärt. Falls nicht, gerne fragen. :)

            Was immoment meine Herausforderung ist, ist den Adapter auf grün zu bekommen, damit ich mal anfangen kann zu testen, ob ich nun den Befehl "setObjectNotExist" ausführen kann oder nicht.
            Hat wahrscheinlich einen Vorteil, wenn ich es schon mal auf Github lade, damit z.B. du schon mal ein Auge drauf werfen kannst oder?

            J.A.R.V.I.S.J Offline
            J.A.R.V.I.S.J Offline
            J.A.R.V.I.S.
            Developer
            schrieb am zuletzt editiert von
            #5

            @Malaus soweit habe ich eserstmal verstanden. Nur ohne Code ist es ein bisschen schwierig dir zu helfen.

            Push deine Repos am besten mal auf Github, dann kann man mal über den Code schauen.

            @Malaus sagte in [neuer Adapter] Dali:

            Bei v1.23.0 (Konsole) ging der Adapter sofort auf Grün aber es hat mir "setObjectNotExist" nicht anerkannt. Daher hab ich nun nochmal von vorne angefangen und mit v1.17.0. (Html Seite) einen neuen erstellt. Den bekomm ich nun aber nicht auf Grün.

            Am besten sollte aber immer die neuste Version verwendet werden, da dort Fehler bzw Verbesserungen mit drin sind, um Adapter leichter zu erstellen. Wenn es dann noch nicht funktioniert, dann kann man besser nochmal drüberschauen. Lade die aber erstmal hoch.

            M 1 Antwort Letzte Antwort
            0
            • J.A.R.V.I.S.J J.A.R.V.I.S.

              @Malaus soweit habe ich eserstmal verstanden. Nur ohne Code ist es ein bisschen schwierig dir zu helfen.

              Push deine Repos am besten mal auf Github, dann kann man mal über den Code schauen.

              @Malaus sagte in [neuer Adapter] Dali:

              Bei v1.23.0 (Konsole) ging der Adapter sofort auf Grün aber es hat mir "setObjectNotExist" nicht anerkannt. Daher hab ich nun nochmal von vorne angefangen und mit v1.17.0. (Html Seite) einen neuen erstellt. Den bekomm ich nun aber nicht auf Grün.

              Am besten sollte aber immer die neuste Version verwendet werden, da dort Fehler bzw Verbesserungen mit drin sind, um Adapter leichter zu erstellen. Wenn es dann noch nicht funktioniert, dann kann man besser nochmal drüberschauen. Lade die aber erstmal hoch.

              M Offline
              M Offline
              Malaus
              schrieb am zuletzt editiert von
              #6

              @J-A-R-V-I-S
              hier ist der Link:
              https://github.com/Malaus-io/ioBroker.dali

              J.A.R.V.I.S.J 1 Antwort Letzte Antwort
              0
              • M Malaus

                @J-A-R-V-I-S
                hier ist der Link:
                https://github.com/Malaus-io/ioBroker.dali

                J.A.R.V.I.S.J Offline
                J.A.R.V.I.S.J Offline
                J.A.R.V.I.S.
                Developer
                schrieb am zuletzt editiert von J.A.R.V.I.S.
                #7

                @Malaus hast du heute Zeit um mal in den TS zu kommen? Kannst mir sonst auch eine PN schicken.

                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

                461

                Online

                32.7k

                Benutzer

                82.3k

                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