Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - DMX-Gateway-Plugin (NanoDMX USB)

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] - √ - DMX-Gateway-Plugin (NanoDMX USB)

    Plugin:
    Edit: Achtung: Aktualisiert 2011-05-28 mit der (IMHO absolut sinnigen!) "DALI-Dimmwertkurve" von JNK (0.2->0.3)

    Code:
    # Plugin DMX-Gateway
    # Version: 0.3 2011-05-28
    # Benötigt DMX USB-Interface
    
    ##################
    ### DEFINITION ###
    ##################
    
    my $socknum = 6;                # Eindeutige Nummer des Sockets +1
    
    # Eigenen Aufruf-Zyklus setzen (Initialisierung/zyklisches prüfen)
    $plugin_info{$plugname.'_cycle'} = 300;
    # Gruppenadressen DMX - leer um Versand zu unterbinden
    # 8Bit/1Byte Dimmwerte werden 1:1 auf DMX-Adressen übersetzt
    my $knx_startGA = "11/1/0"; #DMX-Kanal 1, DMX-Kanal 256=1/1/255, DMX-Kanal 257..512=1/2/0..255
    my $dmx_channels = 512;     # Anzahl der DMX-Kanäle
    # oder for XXX in array
    
    my $dmx_send_ip = "localhost"; # Sendeport (UDP, sie in Socket-Einstellungen)
    my $dmx_send_port = "50012"; # Sendeport (UDP, sie in Socket-Einstellungen)
    my $dmx_recv_ip = "localhost"; # Empfangsport (UDP, sie in Socket-Einstellungen)
    my $dmx_recv_port = "50011"; # Empfangsport (UDP, sie in Socket-Einstellungen)
    
    #######################
    ### ENDE DEFINITION ###
    #######################
    
    my @dimcurve = (  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   1,   1,   1,   1,   1,
                      1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
                      1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
                      1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
                      2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,
                      3,   3,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   5,   5,   5,   5,
                      5,   5,   5,   6,   6,   6,   6,   6,   6,   7,   7,   7,   7,   7,   8,   8,
                      8,   8,   8,   9,   9,   9,   9,  10,  10,  10,  10,  11,  11,  11,  12,  12,
                     12,  13,  13,  13,  14,  14,  14,  15,  15,  16,  16,  17,  17,  18,  18,  19,
                     19,  20,  20,  21,  21,  22,  22,  23,  24,  24,  25,  26,  26,  27,  28,  29,
                     29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,
                     46,  47,  48,  50,  51,  52,  54,  55,  57,  58,  60,  62,  63,  65,  67,  69,
                     71,  73,  75,  77,  79,  81,  83,  86,  88,  90,  93,  95,  98, 101, 104, 106,
                    109, 112, 115, 119, 122, 125, 129, 132, 136, 140, 144, 148, 152, 156, 160, 165,
                    169, 174, 179, 184, 189, 194, 199, 205, 211, 216, 222, 228, 235, 241, 248, 255);
    
    # Hauptverarbeitung
    if (!$socket[$socknum]) { # socket erstellen
        if (defined $socket[$socknum]) { #debug
            if ($socket[$socknum]->opened) { $socket[$socknum]->close(); }
            undef $socket[$socknum];
        }  #debug      my $dgram = sprintf("C%03dL%03d\r\n",$dmxchan,hex($msg{'data'}));
    
        $socksel->remove($socket[$socknum]);
        $socket[$socknum] = IO::Socket::INET->new(LocalPort => $dmx_recv_port,
                                  Proto => "udp",
                                  LocalAddr => $dmx_recv_ip,
                                  PeerPort  => $dmx_send_port,
                                  PeerAddr  => $dmx_send_ip,
                                  ReuseAddr => 1
                                   )
    	     or return ("open of $dmx_recv_ip : $dmx_recv_port failed: $!");
        $socksel->add($socket[$socknum]); # add socket to select
        $plugin_socket_subscribe{$socket[$socknum]} = $plugname; # subscribe plugin
        for (my $i=0; $i<$dmx_channels;$i++) {
        	$plugin_subscribe{$knx_startGA}{$plugname} = 1;
        	$knx_startGA = addr2str(str2addr($knx_startGA)+1,1);
        }
        return "opened UDP-Socket $socknum";
    } 
    if (%msg) { # telegramm vom KNX
    	my $destN = str2addr($msg{'dst'});
    	my $startN = str2addr($knx_startGA);
    	my $dmxchan = $destN - $startN;
      if ($msg{'apci'} eq "A_GroupValue_Write" and $destN >= $startN and $destN <= $startN+$dmx_channels) {
        	# send $dmxchan -> UDP as CaaaLvvv
            my $dgram = sprintf("C%03dL%03d\r\n",$dmxchan,$dimcurve[hex($msg{'data'})]);
        	$socket[$socknum]->send($dgram) or return "send failed: $!";
          # debug chop($dgram);chop($dgram); # debug
          # debug return "sent $msg{'dst'} $msg{'value'} $dgram to DMX $dmxchan"; # debug
          return;
     	}
    } elsif ($fh) {
        my $buf;
        recv($fh,$buf,255,0);
        my $bufhex = $buf;
        $bufhex =~ s/(.)/sprintf("0x%x ",ord($1))/eg;
        #debug return "recv $buf $bufhex";
        return;
    }
    
    return;
    Dazu gehört
    - ein DMX4ALL - NanoDMX USB Interface

    - und ein socat-Eintrag (siehe Anhang, End-of-line zum paketweisen Versand hier 71 dezimal="G")

    Makki
    Angehängte Dateien
    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
    -> Bitte KEINE PNs!

    #2
    Die DALI Dimmkurve folgt (in etwa) dem Helligkeitsempfinden des Auges. Helligkeitswert und Output-Power der Leuchte sind dabei verknüpft durch

    P(n) = 10^((n-1)/(253/3)-1)

    wobei n=0...255 ein 8-bit Dimmwert ist.

    Will man nun Helligkeitswerte auf DMX-Dimmwerte abbilden, so muss das ganze noch so skaliert werden, dass sich eine Zuordnung 0->0, 255->255 und dazwischen entsprechend der Dimmkurve ergibt.

    Da Nachgucken in der Regel schneller geht als Ausrechnen:

    Code:
    my @dimcurve = (  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   1,   1,   1,   1,   1,
                      1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
                      1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
                      1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
                      2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,
                      3,   3,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   5,   5,   5,   5,
                      5,   5,   5,   6,   6,   6,   6,   6,   6,   7,   7,   7,   7,   7,   8,   8,
                      8,   8,   8,   9,   9,   9,   9,  10,  10,  10,  10,  11,  11,  11,  12,  12,
                     12,  13,  13,  13,  14,  14,  14,  15,  15,  16,  16,  17,  17,  18,  18,  19,
                     19,  20,  20,  21,  21,  22,  22,  23,  24,  24,  25,  26,  26,  27,  28,  29,
                     29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,
                     46,  47,  48,  50,  51,  52,  54,  55,  57,  58,  60,  62,  63,  65,  67,  69,
                     71,  73,  75,  77,  79,  81,  83,  86,  88,  90,  93,  95,  98, 101, 104, 106,
                    109, 112, 115, 119, 122, 125, 129, 132, 136, 140, 144, 148, 152, 156, 160, 165,
                    169, 174, 179, 184, 189, 194, 199, 205, 211, 216, 222, 228, 235, 241, 248, 255);
    oben einfügen und noch schnell

    Code:
          my $dgram = sprintf("C%03dL%03d\r\n",$dmxchan,hex($msg{'data'}));
    durch
    Code:
      
         my $dgram = sprintf("C%03dL%03d\r\n",$dmxchan,$dimcurve[hex($msg{'data'})]);
    ersetzen. Fertig.
    KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

    Kommentar


      #3
      Danke, ist oben eingefügt, ich habs zwar ehrlichgesagt nicht getestet aber sieht syntaktisch gut aus und macht Sinn..

      Frage (ist OT, ich splitte das dann falls mehr eine AW): Sollte man sowas (Plugins/Code-Schnipsel) nicht lieber in ein SVN pflanzen? Ich wäre dafür, Versions-Historie ist was tolles
      Und ich sehe oft so viele Plugins die keiner kennt (und sein es auch noch so banal, Ideen sind immer was Wert..)

      Makki
      EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
      -> Bitte KEINE PNs!

      Kommentar


        #4
        Ich habe ein USB DMX Interface von Digital Enlightenment (Selbstbau USB-DMX Interface)

        Wäre das auf dem WG einbindbar?

        Grüße

        Kommentar


          #5
          Soweit ich das nach schnellem Blick sehe kann man das ebenfalls locker ansprechen. Solange dokumentiert ist, welche bytes gesendet werden sollen,,
          Mit den VB-DLL's (trotz: ich fürchte VB kann ich besser als Perl+C zusammen, ich will es nur nicht) kann ich zwar grad nix anfangen, irgendwie fehlt da ein Stückchen Sourcecode dazu oder ich bin blind, aber das kann man ggfs auch aus dem anderen Code ableiten..

          Tipp am Rande, würde ich es jetzt machen wollen/sollen, mache ich mir für sowas immer erst einen kleinen Standalone-Prototypen in Perl, um zu "lernen wie es genau geht" und dann erst das eigentliche Plugin..

          Makki
          EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
          -> Bitte KEINE PNs!

          Kommentar


            #6
            Zitat von xachsewag Beitrag anzeigen
            Ich habe ein USB DMX Interface von Digital Enlightenment (Selbstbau USB-DMX Interface)

            Wäre das auf dem WG einbindbar?

            Grüße
            Hallo,

            schau dir mal ArtGate an. Dies ist eine Artnet Implementierung für das DE Interface. Darin enthalten ist auch eine usbdmx Library die per USB HID mit dem Interface kommuniziert. Diese könntest du benutzen bzw. scheint es auch einen Python wrapper für die Lib zu geben.

            Entstanden ist das im Dmxcontrol Forum: DE Linux Treiber - USB-DMX Interface - Forum

            Prinzipiell scheint es zu funktionieren. Ich hatte es mit dem o.g. Interface mal unter Linux angetestet.

            Dirk

            Kommentar


              #7
              Müsste mir das WG jetzt etwas anzeigen wenn ich das Interface anstecken? Im moment steht unter Seriell/LAN/Socketverbindungen nichts.

              Kommentar


                #8
                Du musst die socketverbindung schon selber einrichten...


                Sent from my iPhone using Tapatalk

                Kommentar


                  #9
                  Nee, angezeigt wird nur was bekannt ist..
                  Ich hab mir jetzt mal den Source angelesen:
                  Das ist leider ne komplett andere Baustelle: das meldet sich als HID am USB (Sinn=??), gehen tuts sicherlich aber da wird man sich mit gcc anfreunden müssen. Würde ich es anbinden wollen, wäre mein Quickhack das Beispiel-prog umzuarbeiten, das es per Kommandozeile Werte setzt..

                  Makki

                  P.S.: Manchmal frägt man sich, warum so manches Projekt eine eigentlich einfache Sache so kompliziert machen muss
                  EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                  -> Bitte KEINE PNs!

                  Kommentar


                    #10
                    Macht ja nichts, hätte ja sein können das es ähnlich wie das DMX4All arbeitet. Aber wenn man es noch zu Hause rumliegen hat

                    Danke fürs ansehen auf jeden Fall!

                    Kommentar


                      #11
                      DMX über DALI synchron

                      Vorweg ein dickes Lob an das WireGate und dieses tolle Plugin. Habe es heute in Betrieb genommen und hat auf Anhieb funktioniert.

                      In meinem Bad habe ich neben RGB Lichtquellen, die über DALI angesteuert werden eine Whirlwanne mit Farblicht und einem WIBRE Controler mit DMX Schnittstelle. Dies war nach langer Recherche, die einzige Möglichkeit die Wanne kontrolliert mit einzubinden.

                      Wie das mit der Tabelle wirklich funktioniert habe ich noch nicht ganz verstanden. Das subjektive Erlebnis, ist allerdings noch nicht zufriedenstellend (ich muß den WAF verbessern). Auf dem Bild erkennt man rechts im Boden eine LED RGB Lampe, welche über DALI die Decke anstrahlt. Die Leuchten in der Wanne werden über das Plugin über DMX angesteuert. Da beide Leuchten nebeinander sind kann man gut verfolgen wie sie steuern. Ich erkenne 2 Effekte:

                      1. DMX eilt den DALI Werten hinterher
                      2. DMX Werte springen, während DALI sich so langsam ändern, das man Änderungen nicht wahrnimmt.

                      Mit dem Punk1 könnte man leben, Punkt 2 ist sehr störend.

                      Frage an die Experten. Kann man das verbessern?

                      Gruß

                      Bruno
                      Angehängte Dateien
                      HS2.0,Wetterstation,Microvis,DALI-GW,Funk-GW,FM446,Mobotix, Squeezebox3,Irtrans,Nevo,Fritz!Box 6360,Dreambox 8k,DOM Butler,Somfy ILT,Qnap TS-509 Pro,Musicpal,AirPort,Neu: 1-wire incl Luftfeuchte,DMX,autom. Wanneneinlauf incl. Ablaufventils, WC Belegung, Anbindung RainBrain, ipad-inWall, Fritzphone

                      Kommentar


                        #12
                        1) Laufen noch andere Plugins, die evtl. länger blockieren? ansonsten sollte das schon ratz-fatz gehen; kann man ja mal mit der ETS explizite Telegramme senden.
                        Es kann auch gut sein, das die Wanne "intern" auch bereits eine Dimmkurve hat, dann wäre das natürlich doppelt gemoppelt; sollte man durch das subjektive Helligkeitsempfinden herausfinden können, ob das im oberen Bereich "linear" erscheint.

                        2) Das ist natürlich so ne Sache, das setzt momentan "hart" die Werte.
                        Technisch lösbar ist das sicher, aber vermutlich eher nicht mit einem Pl-Plugin sondern einem dedizierten "DMX-Controller/Sequenzer" der dasselbe wie ein DALI-GW möglich macht: sanfte, einstellbare übergänge/dimmzeiten.
                        Meine eigenen DMX-LED's laufen aber immernoch in der Demo-Schleife des Controllers, weiter als bis auf den Schreibtisch hats das eigene nicht geschafft
                        Quickfix: die Sollwerte öfters und in kleineren Schritten senden.

                        Makki
                        EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                        -> Bitte KEINE PNs!

                        Kommentar


                          #13
                          Zitat von makki Beitrag anzeigen
                          2) Das ist natürlich so ne Sache, das setzt momentan "hart" die Werte.
                          Technisch lösbar ist das sicher, aber vermutlich eher nicht mit einem Pl-Plugin sondern einem dedizierten "DMX-Controller/Sequenzer" der dasselbe wie ein DALI-GW möglich macht: sanfte, einstellbare übergänge/dimmzeiten.
                          Ja so ein DMX-Sequenzer wäre schon was tolles

                          Kommentar


                            #14
                            Zitat von makki Beitrag anzeigen
                            1) Laufen noch andere Plugins, die evtl. länger blockieren? ansonsten sollte das schon ratz-fatz gehen; kann man ja mal mit der ETS explizite Telegramme senden.
                            Es kann auch gut sein, das die Wanne "intern" auch bereits eine Dimmkurve hat, dann wäre das natürlich doppelt gemoppelt; sollte man durch das subjektive Helligkeitsempfinden herausfinden können, ob das im oberen Bereich "linear" erscheint.Makki
                            Es laufen keine weiteren Plugins. Habe heute bei Wibre nachgefragt, die Dimmwerte werden nicht interpretiert. Also 1:1

                            Zitat von makki Beitrag anzeigen
                            2) Quickfix: die Sollwerte öfters und in kleineren Schritten senden. Makki
                            Ich nutze hier den einfachen aber bewährten Sequenzer von Matthias auf dem HS. Die Sequenz läuft 6 min. Was soll ich da ändern?

                            Gruß Bruno
                            HS2.0,Wetterstation,Microvis,DALI-GW,Funk-GW,FM446,Mobotix, Squeezebox3,Irtrans,Nevo,Fritz!Box 6360,Dreambox 8k,DOM Butler,Somfy ILT,Qnap TS-509 Pro,Musicpal,AirPort,Neu: 1-wire incl Luftfeuchte,DMX,autom. Wanneneinlauf incl. Ablaufventils, WC Belegung, Anbindung RainBrain, ipad-inWall, Fritzphone

                            Kommentar


                              #15
                              Zitat von SirTom Beitrag anzeigen
                              Ja so ein DMX-Sequenzer wäre schon was tolles
                              Stimmt, wer schreibt ihn?
                              Bin für Feedback, welches vorhandene Datenformat einer freien SW man verwenden kann offen. (?!)

                              Zitat von SmartEIB Beitrag anzeigen
                              Ich nutze hier den einfachen aber bewährten Sequenzer von Matthias auf dem HS. Die Sequenz läuft 6 min. Was soll ich da ändern?
                              .. ich ja auch Es gibt zwei Lösungsmöglichkeiten:
                              a) den BS ändern und der KNx schneller zumüllen
                              b) einen intelligenten DMX-Sequenzer-daemon

                              -> b) wäre IMHO schlauer Keine Zauberei, muss man nur machen.. (ca. Projekt #419 hier)

                              Makki
                              EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                              -> Bitte KEINE PNs!

                              Kommentar

                              Lädt...
                              X