NEWS
Art-Net
-
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.
-
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.
-
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]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