Ankündigung

Einklappen
Keine Ankündigung bisher.

Entwicklung / OLA + knxdmxd

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

    Leider ist das Startscript noch immer nicht da, trotz remove und install. Die /usr/bin/knxdmxd ist vom 15.3.2013, das wurde ja schon 100 Mal geändert seti damals, oder?
    Ich hab dann noch ein update und upgrade gemacht, weil ich dachte, ich hab evtl. einen alten Stand, danach noch einmal remove und install ... hat alles nichts geholfen. Das Startscript fehlt und die config im /etc-Verzeichnis ist auch nicht da. Nur eine knxdmxd.conf.dpkg-dist vom 14.11.2012 ist jetzt vorhanden.

    Ein /etc/init.d/knxdmxd start funktioniert jetzt natürlich nicht, weil die Datei nicht vorhanden ist.

    Kommentar


      der letze commit im Repo ist vom 26.08.2014 ... ich weiß ja nicht wie du das installiert hast (ich vermute mal mit Binarys die du dem apt Manager genannt hast..) Edit: im WG Repo passt das (http://repo.wiregate.de/wiregate/poo...te-1.0/main/k/)
      das einfachste wäre jetzt, wenn du einmal ein anderes startskript dir anschaust oder postest (da ich mangels Wiregate keine Referenz habe ) und das dann auf knxdmxd anpasst ^^
      Zuletzt geändert von MiniMaxV2; 22.08.2016, 11:27.
      Hans Martin

      Problem? "Verstehe das Problem!"

      Kommentar


        Hab mir meine Installation angesehen.

        Läuft mit der letzten Version a5e482a vom 13.11.2015 (? ) binary vom testing Ordner > seit dem klappt alles wunderbar auch 4 bit dimmen.
        j-n-k.github.io/knxdmxd/

        Dateien:

        bin > /usr/bin/knxdmxd
        config > /etc/knxdmxd.config
        Startscript > /etc/init.d/knxdmxd
        Startparameter > /etc/default/knxdmxd

        Anbei meine aktuelle bin, Startscript und Startparameter (Backup.7zip Endung txt löschen)
        Backup.7z.txt

        Ich habe es nicht übers Repo installiert sondern manuell die Dateien in die entsprechenden Ordner kopiert und Rechte angepasst.

        Danach im Webmin System Start Stop aktiviert. http://wiregatexxx:10000/init/

        Schöne Grüße
        Gernot

        Kommentar


          Zitat von StefanW Beitrag anzeigen
          Hallo Marcus,

          vermutlich haben eine Menge Foristen eine Idee, allerdings flacht sich weltweit die schreibende Forentätigkeit ab, was sehr schade ist.

          Ich drücke mal die Daumen, dass sich noch jemand für Dich meldet.

          lg

          Stefan
          Hallo Stefan,

          vielleicht hat sich auch am Forum etwas geändert.
          Im alten Forum habe ich eine Mail zu jedem beantworteten Beitrag bekommen.
          Das ist anscheinend nicht mit in das neue Forum mit gewandert.

          Nadann habe ich ihn jetzt neu aboniert. Bin ja auch sehr wenig aktiv. (Phasenweise)

          Vielleicht könnte man die aktuelle Version ins Repo Pflegen?

          http://j-n-k.github.io/knxdmxd/

          Schöne Grüße
          Gernot

          Kommentar


            Dann probier ich mal direkt rein kopieren ... mach ich dann heute Abend.

            Kommentar


              Nicht vergessen die Startparameter > /etc/default/knxdmxd für dich anzupassen!

              Viel Erfolg.

              Kommentar


                So, jetzt siehts gut aus ... aber was für eine Funktion hat der Parameter -r <ip-adresse>? Ist der Einzige, der in der Defaults-Datei nicht beschrieben ist.

                Kommentar


                  Mit -r IP der E1.31 Bridge läuft knxdmxd mit Unicast. Weglassen dann läuft er im Multicast-Modus (ist Standard)

                  Gruß Gernot
                  Zuletzt geändert von murelli146; 22.08.2016, 21:00.

                  Kommentar


                    Hallo Jan,

                    hätte mal eine Frage bzw. einen Featurewunsch.

                    Könnte man die Statusadressen lesbar machen?
                    Dann wäre der knxdmxd wie ein eigenes knx-Gerät.

                    Hab immer noch die letzte Testversion in Betrieb (mit 4bit Dimmen) läuft äußerst stabil.

                    Zur Info: Ich betreibe den knxdmxd unicast. Wenn die Netzwerkverbindung unterbrochen wird,
                    muss ich den knxdmxd neu starten damit die Verbindung zur E1.31 Bridge wider aufgebaut wird.

                    Schönen Gruß
                    Gernot

                    Kommentar


                      Zitat von mfd Beitrag anzeigen
                      Update für alle mit Interesse an e1.31 kompatibler Hardware:

                      Laut Aussage von U. Radig sollte sowohl die von ihm angebotene Octo ArtNet Node als auch die ArtNet Box e1.31/sACN beherrschen!

                      Edit: Für die Octo ArtNet Node gibt es jetzt definitiv die passende Firmware für e1.31.
                      Wenn die Bausätze mit 4 bzw. einem Universum diese Funktion auch erhalten wäre für jede Größenordnung etwas zu haben...
                      Hat jemand schon Erfahrung mit dem Octo Node und E1.31?

                      Würde mir gerne so ein teil als Backup zulegen.

                      Schöne Grüße
                      Gernot

                      Kommentar


                        Zum Featurewunsch: ich glaube das wird eher nichts. Prinzipiell ist das vermutlich nicht besonders kompliziert, der grundlegende Code zum verarbeiten von Packets ist ja vorhanden, und die Channel-Werte sind auch relativ einfach verfügbar. Das Problem ist eher, dass mein Elan da weiterzuentwickeln sehr, sehr klein ist. Es wird - so ich StefanW richtig verstanden habe - in Zukunft weder die Möglichkeit geben, eigene Software auf einem WG zu installieren noch einen eibd.
                        Ich habe mich inzwischen wieder etwas mit OpenHAB 2/ESH angefreundet und alle Logiken dorthin portiert. Mit dem neuen E1.31 (Sub-)Binding ist auch der knxdmxd für mich überflüssig geworden, da OpenHAB im DMX Bereich bereits (fast, Multi-Universe wäre nett) alles kann was ich benötige.

                        Über den OctoNode habe ich auch schon nachgedacht, aber mich noch nicht zu einer Bestellung durchringen können.

                        Gruss,

                        der Jan
                        KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

                        Kommentar


                          Zitat von JNK Beitrag anzeigen
                          Es wird - so ich StefanW richtig verstanden habe - in Zukunft weder die Möglichkeit geben, eigene Software auf einem WG zu installieren noch einen eibd.
                          Im großen Wolf wirds ja den Docker geben samt entsprechender API zur Kommunikation mitm BUS (steht ja im Timberwolf Thread). Es wäre somit möglich und flexibler als bisher (abgeschirmtes System). Allerdings wird der Wiregate eigene DMX Stack vermutlich bequemer sein als knxdmxd ich bin gespannt was da kommt ...
                          Hans Martin

                          Problem? "Verstehe das Problem!"

                          Kommentar


                            Hallo Miteinander,

                            auch wenn länger nichts mehr hier geschrieben wurde, wollte ich das Thema nochmals aufgreifen.
                            Wie hier bereits geschrieben wurde gibt es ein Problem wenn der knxdmxd im Unicast-Modus betrieben wird, wenn die Netzwerkverbindung unterbrochen wird, muss er neu gestartet werden, damit er wieder Daten sendet. Ich wollte dies nun mal fixen, komme aber leider nicht wirklich weiter.

                            Der entsprechende Abschnitt im Code sollte der folgende sein:

                            Code:
                                while (1) {
                            
                                    bzero((char *) &sockaddr, sizeof(sockaddr));
                            
                                    sockaddr.sin_family = AF_INET;
                            
                                    sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
                            
                                    sockaddr.sin_port = htons(E131_MCAST_PORT);
                            
                            
                            
                                    sock = socket(AF_INET, SOCK_DGRAM, 0);
                            
                            
                            
                                    addrlen = sizeof(sockaddr);
                            
                                    if (e131_sender) {
                            
                                        syslog(LOG_DEBUG, "dmx_sender: using %s as source address",
                            
                                               e131_sender);
                            
                                        inet_pton(AF_INET, e131_sender, &(sockaddr.sin_addr.s_addr));
                            
                                        bind(sock, (struct sockaddr *) &sockaddr, addrlen);
                            
                                    }
                            
                                    if (sock < 0) {
                            
                                        syslog(LOG_ERR,
                            
                                               "init_network: cannot open UDP socket for transmission");
                            
                                        sleep(RETRY_TIME);
                            
                                        continue;
                            
                                    }
                            
                            
                            
                                    addrlen = sizeof(sockaddr);
                            
                                    while (!send_error) {
                            
                                        for (i = 1; i < universe_num + 1; i++) {
                            
                                            if (e131_receiver) {
                            
                                                inet_pton(AF_INET, e131_receiver,
                            
                                                          &(sockaddr.sin_addr.s_addr));
                            
                                            } else {
                            
                                                sockaddr.sin_addr.s_addr = E131address(universe_list[i]); // 0 is empty universe, do not send
                            
                                            }
                            
                                            pthread_mutex_lock(&universe_lock[i]);
                            
                                            universes[i].packet.FL.sequence_number++; // increase sequence number, overflow ok
                            
                                            cnt = sendto(sock, &universes[i].packet, sizeof(E131_packet_t),
                            
                                                         0, (struct sockaddr *) &sockaddr, addrlen);
                            
                                            pthread_mutex_unlock(&universe_lock[i]);
                            
                                            if (cnt < 0) {
                            
                                                syslog(LOG_ERR, "Could not send UDP data, closing socket");
                            
                                                c
                            
                                                send_error = true;
                            
                                                break;
                            
                                            }
                            
                                        }
                            
                            
                            
                                        msleep(DMX_INTERVAL);
                            
                                    }
                            Nach einem Netzwerkausfall bekomme ich im Syslog zunächst ein "Could not send UDP data, closing socket" und dann fortwährend "cannot open UDP socket for transmission". Sock muss also -1 angenommen und somit die Socket-Funktion ein Fehler geworfen haben. Auch wenn die Netzwerkverbindung wieder steht ändert sich nichts mehr.

                            Kann es sein, das der Socket noch belegt ist? Und es deswegen nicht funktioniert? Hat irgendjemand eine Ahnung wo hier der Fahler liegt?

                            Kann mir hier jemand weiterhelfen?

                            Vielen Dank und beste Grüße

                            Johannes

                            Kommentar


                              Ohne es probiert zu haben (nutze den knxdmxd nicht mehr):

                              if (sock<0) {
                              ...
                              } else {
                              send_error = false;
                              }
                              KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

                              Kommentar


                                Hallo Jan und der Rest,

                                schon mal vielen Dank für die Hilfe.
                                Ich hätte den Code der ganzen Funktion einfügen sollen.

                                Code:
                                send_error
                                wird gleich am Anfang bereits mit false initialisiert (s.u.). Das "continue" in der while(1) - Schleife sorgt ja dafür dass, sie gleich wieder neu durchlaufen wird.

                                Ich denke es hängt am
                                Code:
                                sock = socket(AF_INET, SOCK_DGRAM, 0);
                                Dieser wirft beim erneuten "erzeugen", einen Fehler. Ich hab irgendwo gelesen, dass der Kernel den socket blockiert und dies nicht zulässt. Ich kennen mich aber zugegebener Maßen nicht wirklich mit der socket Programmierung aus.

                                Oder stehe ich komplett auf dem Schlauch? Anbei nochmal die komplette Funktion:


                                Code:
                                void *dmx_sender() {
                                
                                    int16_t i, addrlen, cnt;
                                
                                    struct sockaddr_in sockaddr;
                                
                                    int sock;
                                
                                    bool send_error = false;
                                
                                
                                
                                    if (e131_receiver) {
                                
                                        syslog(LOG_DEBUG, "dmx_sender: using unicast to %s", e131_receiver);
                                
                                    } else {
                                
                                        syslog(LOG_DEBUG, "dmx_sender: using standard multicast");
                                
                                    }
                                
                                
                                
                                    while (1) {
                                
                                        bzero((char *) &sockaddr, sizeof(sockaddr));
                                
                                        sockaddr.sin_family = AF_INET;
                                
                                        sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
                                
                                        sockaddr.sin_port = htons(E131_MCAST_PORT);
                                
                                
                                
                                        sock = socket(AF_INET, SOCK_DGRAM, 0);
                                
                                
                                
                                        addrlen = sizeof(sockaddr);
                                
                                        if (e131_sender) {
                                
                                            syslog(LOG_DEBUG, "dmx_sender: using %s as source address",
                                
                                                   e131_sender);
                                
                                            inet_pton(AF_INET, e131_sender, &(sockaddr.sin_addr.s_addr));
                                
                                            bind(sock, (struct sockaddr *) &sockaddr, addrlen);
                                
                                        }
                                
                                        if (sock < 0) {
                                
                                            syslog(LOG_ERR,
                                
                                                   "init_network: cannot open UDP socket for transmission");
                                
                                            sleep(RETRY_TIME);
                                
                                            continue;
                                
                                        }
                                
                                        else {
                                
                                            send_error = false;
                                
                                        }
                                
                                
                                
                                        addrlen = sizeof(sockaddr);
                                
                                        while (!send_error) {
                                
                                            for (i = 1; i < universe_num + 1; i++) {
                                
                                                if (e131_receiver) {
                                
                                                    inet_pton(AF_INET, e131_receiver,
                                
                                                              &(sockaddr.sin_addr.s_addr));
                                
                                                } else {
                                
                                                    sockaddr.sin_addr.s_addr = E131address(universe_list[i]); // 0 is empty universe, do not send
                                
                                                }
                                
                                                pthread_mutex_lock(&universe_lock[i]);
                                
                                                universes[i].packet.FL.sequence_number++; // increase sequence number, overflow ok
                                
                                                cnt = sendto(sock, &universes[i].packet, sizeof(E131_packet_t),
                                
                                                             0, (struct sockaddr *) &sockaddr, addrlen);
                                
                                                pthread_mutex_unlock(&universe_lock[i]);
                                
                                                if (cnt < 0) {
                                
                                                    syslog(LOG_ERR, "Could not send UDP data, closing socket");
                                
                                                    close(sock);
                                
                                                    send_error = true;
                                
                                                    break;
                                
                                                }
                                
                                            }
                                
                                
                                
                                            msleep(DMX_INTERVAL);
                                
                                        }
                                
                                    }
                                
                                }

                                Kommentar

                                Lädt...
                                X