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. Tester
  4. Art-Net

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.3k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.6k

Art-Net

Geplant Angeheftet Gesperrt Verschoben Tester
144 Beiträge 14 Kommentatoren 29.0k Aufrufe 3 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.
  • B Offline
    B Offline
    blumfisch
    schrieb am zuletzt editiert von
    #141

    Habe jetzt die JavaScript-Methode ausprobiert!

    Vorher mit 14 Einzelobjekten ging es zwar, aber die Lampe hat bei jeder Wertänderung wild rumgezuckt und Farbwechsel veranstaltet.

    Mit dem Artnet-JavaScript funktioniert es!

    Damit habe ich dann auch meine Slider :D Juchuu! Vielen Dank dafür!

    Allerdings geschehen die Änderungen damit sehr langsam. Als ob sie gefadet würden.

    Kann ich nicht einfach direkt den Wert senden?

    Meine Lampe lässt sich zum Beispiel so einstellen, dass sie selbst auf Kanal x angegeben bekommt, wie schnell sie sich bewegen soll. Ich brauche keine Fader in iobroker.

    1 Antwort Letzte Antwort
    0
    • B Offline
      B Offline
      blumfisch
      schrieb am zuletzt editiert von
      #142

      Mit dem Javascript-Artnet habe ich immer noch das Problem mit dem Faden, wie bei den DImmern.

      Kann das Skript die Werte nicht einfach direkt setzen? Beim Update von 0 auf 10? Statt 0 > 2 > 4 > 6 > 8 > 10?

      Wenn ich updateValueSkip = 255 setze, geht nach einer Weile nichts mehr und nur Artnet-Adapter-Neustart hilft.

      Bei Werten > 100 gibt es Probleme mit der Maximalstellung, bzw. den Werten direkt darunter.

      Und bei kleineren Werten <100 dauert es immer noch zu lange, bis ein Licht eingeschaltet ist, bzw, es gibt unschöne Stufen.

      Bin leider nicht so gut im Programmieren, dass ich das selbst machen könnte.

      Habs versucht, aber ich durchschaue den Code leider nicht.

      Vielleicht weiß ja jemand.

      1 Antwort Letzte Antwort
      0
      • A alexw85

        ICH HABE FERTIG, ES FUNKTIONIERT !!! :)

        Vergesst alle vorherigen Beiträge, hier nochmal zusammenfassend Anleitung und funktionierender Code der auch das Artnet Modul gescheit beendet :) Würde zwar gerne ein Bewisvideo hochladen, hab extra in VGA aufgenommen, ist aber immer noch zu groß :P Bitte ausgiebig testen und über evtl. Fehler berichten!

        Ich nenne die Art des Fadens jetzt "asynchrones Fading", ein synchrones werde ich bei Gelegenheit mal mit einbauen im Adapter. Wobei mir das jetzt hier ehrlich gesagt momentan viel besser gefällt… Gerne würde ich auch noch ein paar Cues mit einbauen, bin da nur sehr unkreativ was das angeht. Alle Farben durchlaufen ist natürlich was (und einfach), ein Kaminfeuereffekt hab ich schon mehrfach gelesen, wobei ich jetzt nicht weiß was man sich darunter vorstellt (unkreativ!) :)

        Vorarbeit:

        1. In ioBroker den Javascript Adapter installieren, falls noch nicht geschehen

        2. In den Einstellungen des Javascript Adapters bei zusätzliche NPM-Module artnet reinschreiben (Danke Rainer für den wesentlich einfacheren Weg :) )

        3. Ein neues Script anlegen (Javascript, nicht Blockly) und das hier angehängte Script hineinkopieren.

        4. Eure IP Adresse, das Universe (Standard ist 0) anpassen und starten.

        5. Beim Start werden die States angelegt. (Unter Objekte->Javascript.0->Artnet->UniverseX)

        6. Szene anlegen mit dem Szenenadapter für Rot, Grün, Blau usw. (Wichtig kein Delay, und als virtuelle Gruppe anlegen)

        7. In VIS ein RGB Colorpicker anlegen und bei Rot ID, Grün ID, Blau ID die jeweilige Szene eintragen. Ich empfehle da jetzt erstmal den einfachen Colorpicker RGB spectrum Der "farbtastic" zuckt bei mir nur wild hin und her und die Lampe dann hinterher, momentan keine Ahnung was er für Schmerzen hat?!

        8. Kucken was passiert! :)

        Hier der Code:

        `//################## Hier IP Adresse des Artnet Gateways eintragen #################//
        var options = {
            host : '192.168.178.67',   // Hier die IP Adresse eintragen
            sendAll : true
        };
        var artnet;
        //################ Hier Artnet Universe und Updatefrequenz anpassen ################//
        
        var universe = 1;           // Default Universe ist 0!
        var updatesPerSecond = 25;  // Je nachdem sind hier Werte ab 15 halbwegs flimmerfrei!
        var updateValueSkip = 2;    // Hier können Werte übersprungen werden, default ist 0!
        
        // Standartmäßig wird mit jedem Update ein DMX Wert hoch/runter gezählt, mit updateValueSkip
        // kann ein Wert hinzuaddiert werden: Beispiel: updateValueSkip = 1 -> Es wird mit jedem Update
        // ein Wert + 1 (also 2 *g*) hoch/runter gezählt, somit wird schneller, aber ruppiger gefadet!
        
        //######################## Ab hier ist alles Programmcode! #########################//
        
        var dmx = [];
        var dmxNew = [];
        var dmxOldMinMax = [];
        var dmxNewMinMax = [];
        var processing;
        var timestamp;
        var channel = 1;
        var roundValue;
        
        for (i = 0; i < '513'; i++) { 
            dmx[i] = 'null';
        }
        for (i = 0; i < '513'; i++) { 
            dmxNew[i] = 'null';
        }
        
        var main = function() {
            timestamp = Date.now();
            for (i = 0; i < '513'; i++) {
                try {
                    if (getIdByName("DMX_Channel_" + i) !== undefined && i > 0) {
                        //setState("artnet.universe" + universe + "." + "DMX_Channel_" + i, '0', true);
                    } else if (i > 0) {
                        createState("artnet.universe" + universe + "." + "DMX_Channel_" + i , {
                            name: 'DMX_Channel_' + i,
                            type: 'int',
                            role: 'value',
                            def: 0,
                            });
                        }
                    }   catch(e){}
                }
                return updateValues();
        };
        
        var updateValues = function() {
            on({id: /^javascript\.\d\.artnet.universe/, change: "ne"}, function (obj) {
                var DMXAddress = obj.name.match(/\d+/);
                var DMXValue = parseInt(obj.state.val);
                var DMXOldValue = parseInt(obj.oldState.val);
                lastChanged = getState(obj.id).lc;
                if (typeof DMXOldValue !== "undefined" && lastChanged > (timestamp + 3000)) {
                console.log("DMX" + DMXAddress + " hat sich von " + DMXOldValue + " auf " + DMXValue + " geändert!");
                dmxOldMinMax[DMXAddress] = DMXOldValue;
                dmxNewMinMax[DMXAddress] = DMXValue;
                dmxNew[DMXAddress] = DMXValue;
                dmx[DMXAddress] = DMXOldValue;
                clearTimeout(processing);
                waitForSending();
                }
            });
        };
        
        var waitForSending = function() {
            processing = setTimeout(function(){ return executeArtnet() }, 500);
        };
        
        var executeArtnet = function() {
            artnet = require('artnet')(options);
            dmxNewMinValue = dmxNewMinMax.reduce(function(a, b) {
                return Math.min(a, b);
            });
            dmxNewMaxValue = dmxNewMinMax.reduce(function(a, b) {
                return Math.max(a, b);
            });
            dmxOldMinValue = dmxOldMinMax.reduce(function(a, b) {
                return Math.min(a, b);
            });
            dmxOldMaxValue = dmxOldMinMax.reduce(function(a, b) {
                return Math.max(a, b);
            });
            dmxMaxValue = Math.max(dmxNewMaxValue, dmxOldMaxValue);
            dmxMinValue = Math.min(dmxNewMinValue, dmxOldMinValue);
            //console.log("dmxMaxValue: " + dmxMaxValue + " dmxMinValue: " + dmxMinValue);
        
            roundsCalc = Math.round((dmxMaxValue - dmxMinValue)/(updateValueSkip + 1));
            roundValue = 1 + updateValueSkip;
            rounds = Math.abs(roundsCalc);
            var r = 0;
            runArtnet();
            function runArtnet () {
                setTimeout(function () {
                    artnetStep();
                    r++;
                    if (r < rounds) {
                        runArtnet();
                    } else {
                        console.log("artnetEnde: " + dmxNew.slice(1));
                        console.log("round: " + r);
                        artnet.set(universe, channel , dmxNew.slice(1));
                        return closingArtnet();
                    }         
                }, (1000/updatesPerSecond));
            }
        };
        
        var artnetStep = function() {
            for (i = 0; i < '513'; i++) {
                if (i > 0) {
                    if (dmx[i] < dmxNew[i]) {
                        if (dmx[i] + roundValue > 255) {
                            dmx[i] = 255;
                        } else if (dmx[i] == dmxNew[i] ) {
                            dmx[i] = dmxNew[i];
                        } else {
                            dmx[i] = dmx[i] + roundValue;
                        }
                    }
                    if (dmx[i] > dmxNew[i]) {
                        if (dmx[i] - roundValue <= 0) {
                            dmx[i] = 0;
                        } else if (dmx[i] == dmxNew[i] ) {
                            dmx[i] = dmxNew[i];
                        } else {
                            dmx[i] = dmx[i] - roundValue;
                        }
                    }
                }
            }
            console.log("artnetStep: " + dmx.slice(1));
        return artnet.set(universe, channel , dmx.slice(1));
        };
        
        var closingArtnet = function() {
            var dmxOldMinMax = [];
            var dmxNewMinMax = [];
            setTimeout(function(){ return artnet.close() }, 500);
        };
        
        main();`[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
        
        Q Offline
        Q Offline
        Qlink
        schrieb am zuletzt editiert von
        #143

        @alexw85 said in Art-Net:

        Vorarbeit:

        1. In ioBroker den Javascript Adapter installieren, falls noch nicht geschehen

        2. In den Einstellungen des Javascript Adapters bei zusätzliche NPM-Module artnet reinschreiben (Danke Rainer für den wesentlich einfacheren Weg :) )

        3. Ein neues Script anlegen (Javascript, nicht Blockly) und das hier angehängte Script hineinkopieren.

        4. Eure IP Adresse, das Universe (Standard ist 0) anpassen und starten.

        5. Beim Start werden die States angelegt. (Unter Objekte->Javascript.0->Artnet->UniverseX)

        6. Szene anlegen mit dem Szenenadapter für Rot, Grün, Blau usw. (Wichtig kein Delay, und als virtuelle Gruppe anlegen)

        7. In VIS ein RGB Colorpicker anlegen und bei Rot ID, Grün ID, Blau ID die jeweilige Szene eintragen. Ich empfehle da jetzt erstmal den einfachen Colorpicker RGB spectrum Der "farbtastic" zuckt bei mir nur wild hin und her und die Lampe dann hinterher, momentan keine Ahnung was er für Schmerzen hat?!

        8. Kucken was passiert! :)

        Hi Leute,

        ich versuche gerade das Script von Alex bei mir in Betrieb zu nehmen.
        Die Schritte 1 - 5 sind mir soweit klar.

        Was mir aufgefallen ist. Bei mir werden wie im Schritt 5 erwähnt nach Start des Scripts keine States unter javascript.0 -> artnet -> universe angelegt ?!? Muss ich hier noch etwas zusätzlich machen außer das Script starten ?

        Schritt 6 mit dem Szenenadapter ist mir ebenfalls nicht klar.

        Ich lege z.B. eine Szene "Rot" an. Was muss ich hier dann noch eintragen bei z.B. Sollwert bei Wahr, oder bei Status oder bei Bedingung ?
        Muss ich pro RGBW Controller eine Szene Rot anlegen ? Wenn ja, wo kann ich die entsprechende DMX Adresse eingeben ? Wo kann ich eine Raumzuordnung machen ?
        Ich habe noch keinerlei Erfahrung mit dem Szenenadapter ...

        Danke für eure Hilfe.

        Beste Grüße

        1 Antwort Letzte Antwort
        0
        • Q Offline
          Q Offline
          Qlink
          schrieb am zuletzt editiert von
          #144

          Hat niemand das Script von Alex vom Einsatz, der mir ein bisschen unter die Arme greifen könnte ?

          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

          756

          Online

          32.5k

          Benutzer

          81.7k

          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