Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - BUG oder Anwenderfehler: KNXWRITE auf DPT 5.005

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

    [wiregate] - √ - BUG oder Anwenderfehler: KNXWRITE auf DPT 5.005

    Ich versuchte zunächst mit dem Logikprozessor von Fry (herzlichen Dank für das mächtige und tolle Plugin) eine Treppenlichtfunktion umzusetzen. Ziel war es, auf eine GA vom Datenpunkttyp 5.005 den Wert 0 zu schreiben. Die GA war entsprechend definiert in eibga.conf.
    Dies führte dazu, dass zwar in der Pluginlog-Datei ein entsprechender Eintrag zu finden war, im KNX (resp. im Busmonitor) nie ein entsprechender Wert ankam, resp. zu sehen war.

    Daraufhin habe ich selbst ein Plugin zusammengeschustert, welche die Treppenlichtfunktion umsetzt. Auch hier war KNXWrite (GA, 0, 5.005") im Busmonitor nicht zu sehen.

    Nachdem ich in meinem Plugin beim KNXWrite den DPT auf "1" geändert habe, arbeitete alles korrekt. Daraufhin änderte ich auch den Eintrag in eibga.conf, woraufhin auch Frys Logikprozessor zum gewünschten Resultat führte.

    Habe ich irgend etwas falsch gemacht?
    Beste Grüsse
    Diego

    #2
    Hi,

    soviel ich weiß, gibt es den 5.005 beim knxwrite gar nicht! Du schreibst dpt5 (also nur 5 als Argument). Dann klappt auch alles.

    Gruß, Waldemar
    OpenKNX www.openknx.de

    Kommentar


      #3
      Richtig, 5.005 gibt es da so nicht, geht aber mit "5", ich hab das mal auf die Liste der Grausamkeiten geschrieben

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

      Kommentar


        #4
        Besten Dank für Eure Rückmeldungen.

        Mit DPT "5" arbeitet der KNX-Writebefehl.

        Bleibt noch das Problem mit Frys Logikprozessor, der sich den Datentyp aus der eibga.conf holt.

        Herzliche Grüsse
        Diego

        Kommentar


          #5
          Hat mir jetzt doch keine Ruhe gelassen: '5.005' als String übergeben funktioniert sowohl beim en- als auch beim decode;
          Was nicht geht ist 5.005 als Zahl (ohne Gänsefüsschen)

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

          Kommentar


            #6
            Hallo Makki

            Es tut mir leid, wenn ich Dir keine Ruhe lasse. Der Vollständigkeit halber hier mein Plugin:

            Code:
            # Treppenlichtlogik:  
            # V1.0 2012-08-13
            #
            ##############################
            ### Initialisierung 
            #
            use POSIX;
            #-----------------------------------------------------------------------------
            # konfigurierbare Werte, eigentliche Definition erfolgt in der conf-Datei
            #-----------------------------------------------------------------------------
            my @Aufgaben = ();
            
            ### Ende Initialisierung 
            ##############################    
            #
            ##############################
            ###Subroutinen
            #
            #-----------------------------------------------------------------------------
            # Numerischen string als Zahl zurückgeben
            # - blanks entfernen
            # - führende Nullen entfernen
            #-----------------------------------------------------------------------------
            sub toNumber
            {
                my $value = shift;
                (!defined $value) and return 0;
            
                $value =~ s/\s+//g; # whitespace entfernen
                $value =~ s/^0+(.)$/$1/g; # fuehrende Nullen entfernen
                return $value;
            } # toNumber
            
            #-----------------------------------------------------------------------------
            # Auswertung von Bereichs und Listenvergleichen
            # Prueft, ob ein Wert zu einer Liste oder in einen Bereich passt
            #-----------------------------------------------------------------------------
            sub matches
            {
                my ($value, $def) = @_;  # Zu pruefender Wert, Bereichsdefinition
                (!defined $def)  and return 1;
                $value = &toNumber($value);
            
                foreach (split(/,/, $def))
                {
                    $_ = &toNumber($_);
                # Vergleich auf Alpha-Basis (vermeidet Laufzeit-Fehler)
                    (/^$value$/) and return 1;
                    (/^([\d]+)-(\d+)/) and return ($value >= $1 && $value <= $2);
                }
                return 0;
            } # matches
            
            
            sub readConf
            {
                my $confFile = '/etc/wiregate/plugin/generic/conf.d/'.basename($plugname,'.pl').'.conf';
                if (! -f $confFile)
                {
                    plugin_log($plugname, " no conf file [$confFile] found."); 
                }
                else
                {
            #        plugin_log($plugname, " reading conf file [$confFile]."); 
                    open(CONF, $confFile);
                    my @lines = <CONF>;
                    close($confFile);
                    my $result = eval("@lines");
            #        ($result) and plugin_log($plugname, "conf file [$confFile] returned result[$result]");
                    if ($@) 
                    {
                        plugin_log($plugname, "conf file [$confFile] returned:");
                        my @parts = split(/\n/, $@);
                        plugin_log($plugname, "--> $_") foreach (@parts);
                    }
                }
            } # readConf
            #
            ### Ende Subroutinen
            ##############################
            #
            ###Main
            ###############################
            my $Aufruf_ga ="";    
            my $timeAusloeser =0;    
            &readConf();
            # Eigenen Aufruf-Zyklus auf 1s setzen
            $plugin_info{$plugname.'_cycle'} = 1; 
            #Anmelden aller betroffenen Gruppenadressen
            foreach my $element (@Aufgaben) {
                $plugin_subscribe{$element->{GA_Ausloeser}}{$plugname} = 1;    
            }
            # Abarbeiten eines Aufrufs
                #nur ausführen wenn das Telegram ein Write Telegram ist und kein Read oder Response Telegram.
                if ($msg{'apci'} eq "A_GroupValue_Write") {  
                    my $Aufruf_ga = $msg{'dst'};
            #plugin_log($plugname, $Aufruf_ga); 
                    foreach my $element (@Aufgaben) {
                        if ($Aufruf_ga eq ($element->{GA_Ausloeser})) {
                            (defined $element->{Aktiv} && !$element->{Aktiv})                    and next;
                            (defined $element->{Log}   && $element->{Log} eq '1') and 
                                plugin_log($plugname, "[$element->{GA_Ausloeser}]: Preparing Value[$element->{Wert}] to GA[$element->{GA_Aktion}], $element->{Name}"); 
                            if (!$plugin_info{$plugname."_".$element->{Name}}){
                                #Startzeit erfassen:
                                $plugin_info{$plugname."_".$element->{Name}} = time();
                            }
                        }
                        # wenn Bedingung nicht zutrifft, dann das nächste Element abarbeiten
                        else {
                             next;
                        }
                    }
                }
                else {foreach my $element (@Aufgaben) {
                            (defined $element->{Aktiv} && !$element->{Aktiv})                    and next;
                            $timeAusloeser = $plugin_info{$plugname."_".$element->{Name}};
                            if (($timeAusloeser > "") && (time() - $timeAusloeser > $element->{Delay})) {
                                delete($plugin_info{$plugname."_".$element->{Name}});
                                knx_write($element->{GA_Aktion},$element->{Wert}, $element->{DPT});   
                                (defined $element->{Log}   && $element->{Log} eq '1') and 
                                    plugin_log($plugname, "[$element->{GA_Ausloeser}]: Sending Value[$element->{Wert}] to GA[$element->{GA_Aktion}], $element->{Name}"); 
                            }
                                # wenn Bedingung nicht zutrifft, dann das nächste Element abarbeiten
                        else {
                             next;
                        }
                    }
            
                }
            return;
            Code:
            ##############################
            ### Definitionen 
            #
            @Aufgaben = 
                ( 
                  {Name=>'PraxisStosslueften', Aktiv=>'1', GA_Ausloeser=>'7/2/225', GA_Aktion=>'7/2/205', Delay=>600, Wert=>"0", DPT=>'5', Log=>'1'  },
                  {Name=>'KanzleiStosslueften', Aktiv=>'1', GA_Ausloeser=>'7/3/225', GA_Aktion=>'7/3/205', Delay=>600, Wert=>"0", DPT=>'5', Log=>'1'  },
                  {Name=>'WohnungStosslueften', Aktiv=>'1', GA_Ausloeser=>'7/4/225', GA_Aktion=>'7/4/205', Delay=>600, Wert=>"0", DPT=>'5', Log=>'1'  }
                );    
            #
            ### Ende Definitionen 
            ##############################
            Dies nur zwecks Dokumentation.
            Beste Grüsse
            Diego

            Kommentar


              #7
              Kein Problem dafür sind wir ja da

              "" (also doppelte Gänsefüsschen) um $element->{DPT} täte es vermutlich, sonst wirds als Zahl übergeben; 5 geht beides, 5.005 nicht, Perl-Magic

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

              Kommentar


                #8
                Zitat von makki Beitrag anzeigen
                sonst wirds als Zahl übergeben; 5 geht beides, 5.005 nicht, Perl-Magic
                Hoi

                Das Komma und der Punkt, das sind halt so Sachen die dann eventuell unkorrekt als Dezimalzahl interpretiert werden...
                Grüsse Bodo
                Fragen gehören ins Forum, und nicht in mein Postfach;
                EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

                Kommentar

                Lädt...
                X