Ankündigung

Einklappen
Keine Ankündigung bisher.

Plugin Input Status in Byte / Output in Bit

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [WireGate-Plugin] Plugin Input Status in Byte / Output in Bit

    Tag,

    durch erfolgreiches zusammenkopieren..habe ich dieses kleine Plugin erstellt..

    Hintergrund: Meine Dali-GW`s können den Status einer Gruppe entweder in Byte oder nur in Bit liefern.
    Für die Visu zur korrekten Anzeige der Slider benötige ich die Rückmeldung in Byte, für einen Switch in der Visu, oder für die Rückmeldung in einem normalen Taster z.B. zur LED-Anzeige (MDT-Glastaster) brauche ich das 1/0 Bit.

    Falls es wer brauchen kann der noch weniger Programmierahnung hat als ich..

    Falls man das Besser machen kann - Infos gerne hier posten.
    Dankeschön!

    PHP-Code:
    #Plugin zur Ausgabe einer 1/0 auf die GA-Bit bei Eingang eines Bytes gößer-gleich 1.
    #Dadurch lassen sich Wert-Rückmeldungen für Eingangsobjekte von Tastern oder eine Visu als 1Bit-Größen nutzen.

    #Name: frei wählbar zur eigenen Identifizierung der GA`s
    #GA_Byte: GA des Statusobjektes eines Aktors    
    #GA_Bit: GA des Eingangsobjektes von Tastern oder für eine Visu.

    my @ByteGA;

    #Hier Anpassunen vornehmen:
    push @ByteGA,    { Name     => "Garage_Durchgang",             GA_Byte => "1/4/3" GA_Bit => "1/4/4",}; 
    push @ByteGA,   { Name => "Garage_Unterschlag_vorne",         GA_Byte => "1/4/14"GA_Bit => "1/4/15",};
    #push @ByteGA,   { Name => "Garage_Unterschlag_vorne",         GA_Byte => "1/4/14", GA_Bit => "1/4/15",};
    #push @ByteGA,   { Name => "Garage_Unterschlag_vorne",         GA_Byte => "1/4/14", GA_Bit => "1/4/15",};
    #push @ByteGA,   { Name => "Garage_Unterschlag_vorne",         GA_Byte => "1/4/14", GA_Bit => "1/4/15",};


    #Ab hier nix ändern sonst...

    ## Plugin nur bei Telegramm aufrufen
    $plugin_info{$plugname.'_cycle'} = 0# Plugin nur bei Telegramm aufrufen, daher =0

    ##Ausführen des Codes je definierter ByteGA
    foreach my $element (@ByteGA)
    {
    $plugin_subscribe{$element->{GA_Byte}}{$plugname} = 1;  #Anmeldung an Gruppenadresse der Byte-GA`s
         
           
      #Bei einem Eintreffen eines Telegrammes auf die angemeldete GA_Byte werden die Bedingungsprüfungen abgearbeitet:
        
      
    if  ($msg{'apci'eq "A_GroupValue_Write" and ($msg{'dst'eq $element->{GA_Byte}))  #wenn ein Befehl daher kommt und dieser was auf die GA_Byte schreibt, dann
      
       
    {
        
    my $Bytestatus knx_read($element->{GA_Byte}, 300
    5.001);   #Zuweisung des Wertes der "GA_Byte" der Hilfs-Variablen "$Bytestatus"
            
         
    if ($Bytestatus >= 1)      {knx_write($element->{GA_Bit},1,1); #Bedingung, wenn der Wert in der Variablen $Bytestatus" größer oder gleich 1 ist, dann Schreibe "eins" auf die GA_Bit.
         
    return "Bit_on_gesetzt"  }; 
         
         if (
    $Bytestatus == 0)     {knx_write($element->{GA_Bit},0,1);
         return 
    "Bit_off_gesetzt" };
       
      }
    }     
     

    return 
    "Warte_auf_Byteänderungen"#Rückgabewert falls noch kein Telegramm eingetroffen ist 

    #2
    Hab den Code nur mal kurz überflogen. Aufgefallen ist mir folgende Zeile:
    Code:
    [COLOR=#000000][COLOR=#0000BB]my $Bytestatus [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]knx_read[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]$element[/COLOR][COLOR=#007700]->{[/COLOR][COLOR=#0000BB]GA_Byte[/COLOR][COLOR=#007700]}, [/COLOR][COLOR=#0000BB]300[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]);[/COLOR][/COLOR]
    Das passt so nicht (dpt ist sicherlich nicht 1). Da Du sowieso nur auf Schreibtelegramme reagierst, würde ich direkt $msg{'value'} verwenden! Also z.B.:
    Code:
    [COLOR=#000000][COLOR=#0000BB]my $Bytestatus [/COLOR][COLOR=#007700]= $msg{'value'};[/COLOR][/COLOR]
    Dein Code berücksichtigt aktuell keine Leseanfragen. Was ist, wenn die Visu o.ä. den GA_Bit Status abfragen will? Oder wolltest Du diesen Fall ausschließen?

    Kommentar


      #3
      Zitat von XueSheng Beitrag anzeigen
      Hab den Code nur mal kurz überflogen. Aufgefallen ist mir folgende Zeile:
      Code:
      [COLOR=#000000][COLOR=#0000BB]my $Bytestatus [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]knx_read[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]$element[/COLOR][COLOR=#007700]->{[/COLOR][COLOR=#0000BB]GA_Byte[/COLOR][COLOR=#007700]}, [/COLOR][COLOR=#0000BB]300[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]);[/COLOR][/COLOR]
      Das passt so nicht (dpt ist sicherlich nicht 1). Da Du sowieso nur auf Schreibtelegramme reagierst, würde ich direkt $msg{'value'} verwenden! Also z.B.:
      Code:
      [COLOR=#000000][COLOR=#0000BB]my $Bytestatus [/COLOR][COLOR=#007700]= $msg{'value'};[/COLOR][/COLOR]
      Dein Code berücksichtigt aktuell keine Leseanfragen. Was ist, wenn die Visu o.ä. den GA_Bit Status abfragen will? Oder wolltest Du diesen Fall ausschließen?

      Danke fürs Feedback und die Verbesserungen..
      Grundsätzlich hats bislang funktioniert, bisschen.. - das verwunderliche für mich war aber, dass wenn von der GA Byte Werte bis ca. 55% kamen die Bit-GA aus 1 gesetzt wurde, alle Werte darüber haben eine 0 geschrieben

      Das mit der DPT wird die Ursache sein - werds gleich anpassen und ausprobieren.
      Danke!!
      PHP-Code:
      my $Bytestatus $msg{'value'
      So ganz verstanden habe ich das nocht nicht. Woher kommt den der Wert für $msg{'value'} bzw. iwas bedeutet das?
      Es muss doch ein Bezug zu meiner Byte-GA hergestellt werden - oder?

      Kommentar


        #4
        Zitat von Ziegelstein Beitrag anzeigen
        So ganz verstanden habe ich das nocht nicht. Woher kommt den der Wert für $msg{'value'} bzw. iwas bedeutet das?
        Es muss doch ein Bezug zu meiner Byte-GA hergestellt werden - oder?
        Schau mal in die Plugin Hilfe Deines Wiregates. Da ist die ein oder andere Hilfestellung enthalten!

        Der Hash %msg wird dem Plugin übergeben, wenn dieses durch ein Telegramm aufgerufen wird (Stichwort plugin_subscribe). In Deinem Code hast Du ja auch bereits $msg{'apci'} und $msg{'dst'} in Verwendung.
        $msg{'value'} enthält den Integer Wert des Telegramms.

        Kommentar

        Lädt...
        X