Ankündigung

Einklappen
Keine Ankündigung bisher.

Perl-Unterstützung zu erstem "eigenen" Plugin

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

    [WireGate-Plugin] Perl-Unterstützung zu erstem "eigenen" Plugin

    Hallo Gemeinde,

    hab mir auf basis des exestierenden Plugins "
    RolladenLueftungsPos.pl"

    was zusammen kopiert und angepasst.

    Das Resultat möchte ich hier gerne vorstellen und anderen blutigen Anfängern wie mich zur Verfügung stellen. Ich habe mein Verständnis zur Funktion aller Zeilen so gut es mir möglich war dokumentiert. Das soll helfen, die Programmiersprache und KNX-spezifischen Zeilen besser zu verstehen.
    Verbesserungspunkte, Korrekturvorschläge gerne hier posten, damit das weiter verbessert werden kann.
    Ich schreibe paarallel alle möglichen Code - Erklärungen zusammen und würde das gerne der breiten Masse im Sinne einer " wie bau ich mir ein eigenes Plugin" zur Verfügung stellen. Ich halte ein upload dieses Sammelsurums im Bereich hier für sinnvoll:
    OpenAutomation

    PHP-Code:
    ## Dieses Plugin steuert die Rolläden unter Berücksichtigung des Fensteröffnungsstatuses und der Außenhelligkeit.
    # https://knx-user-forum.de/editpost.php?do=updatepost&postid=372788
    # Wenn Rollo unter + Fenster geschwenkt-->Rollo kmpl. hoch;
    # wenn Rollo unter + Fenster geschwenkt -->Rollo in Lueftungspos., 
    # Wenn Fenster zu und Rollo oben und Helligkeitsschwelle erreicht--> Rollo kmpl. runter
    ## 
    ## Globale Definitionen ##


    my $GA_Gesamt_SperreAuto     '3/0/4';       # Gruppenadresse, die die Lüftungsautomatik sperrt
    my $Fenster_zu             00;         # Wert Fensterstatus geschlossen
    my $Fenster_gekippt         02;            # Wert Fensterstatus gekippt
    my $Fenster_geschwenkt         01;            # Wert Fenstergeschwenkt, also offen
    my $Helligkeitwert_Schaltschwelle 50;         # Helligkeitswert unter der das Rollo runter gefahren werden soll, wenn Fenster=zu

    #Definition aller Rolläden über ein Array von Hashes, wobei jeder Hash ein Rollladen/Fenster ist.
    my @AlleRolllaeden;

    # Name                   = Name des Rolladen
    # GA_Fensterstatus       = Gruppenadresse für Überwachung Art der Fensteröffnung ( verschlossen, gekippt, geschwenkt )
    # GA_Rollo_auf_Wert     = Gruppenadresse zum Anfahren einer definierten Position
    # GA_RolloAufAb          = Gruppenadresse zu Auf/Abfahren des Rollos 
    # GA_Rollo_Status        = Gruppenadresse auf der die Rückmeldung der Position erfolgt 
    # PosRollo_Lueftung      = Position des Rolladen im % für Lüftungsposition
    # PosRollo_geschlossen  = Position des Rolladen im % für Lüftungsposition

    push @AlleRolllaeden, { Name                 => "Wohnen_RH",
                
    GA_Fensterstatus         => "6/1/3",
                
    GA_Rollo_auf_Wert        => "2/1/17",
                        
    GA_RolloAufAb             => "2/1/15"
                
    GA_Rollo_Status             => "2/3/4",
                
    PosRollo_Lueftung         => 80
                
    PosRollo_geschlossen         => 100 ,
                
    GA_Helligkeitswert        => "5/4/0"}
                
            
    #    { Name                 => "XXX",
            #    GA_Fensterstatus         => "X/X/X",
            #    GA_Rollo_auf_Wert        => "X/X/X",
                    #    GA_RolloAufAb             => "X/X/X", 
            #    GA_Rollo_Status             => "X/X/X",
            #    PosRollo_Lueftung         => XX, 
            #    PosRollo_geschlossen         => XXX ,
            #    GA_Helligkeitswert        => "X/X/X"}
                
                        
                
    ;


    ## Plugin nur bei Telegramm aufrufen
    $plugin_info{$plugname.'_cycle'} = 0# Plugin nur bei Telegramm aufrufen, daher =0
     
    ## Rolladensperre beachten
    $plugin_subscribe{$GA_Gesamt_SperreAuto}{$plugname} = 1#Anmeldung an Gruppenadresse für Rolladensperre

    #Sperrkennzeichen setzen, wenn Telegramm eintrifft
    if ($msg{'apci'eq "A_GroupValue_Write" and $msg{'dst'eq $GA_Gesamt_SperreAuto)
     {
    $plugin_info{$plugname.'_sperre'} = knx_read($GA_Gesamt_SperreAuto,0,1);}
    #Wenn Sperrkennzeichen gesetzt ist, dann soll der Code beendet werden
    if ($plugin_info{$plugname.'_sperre'} == 1)
     {return 
    "Sperre";}
     
    ##Ausführen des Codes je definiereten Rolladen
    foreach my $element (@AlleRolllaeden)
    {

    $plugin_subscribe{$element->{GA_Fensterstatus}}{$plugname} = 1;  #Anmeldung an Gruppenadresse für Fensterstatus
     
          
     
      #Wenn Telegramm für Fensterstatus eintrifft, sollen weitere Prüfungen durchgeführt werden
        
      
    if  ($msg{'apci'eq "A_GroupValue_Write" and ($msg{'dst'eq $element->{GA_Fensterstatus})) #wenn ein Befehl und dieser, was auf die GA_Fensterstatus schreibt, dann..
      
    {

        
    my $Fensterstatus knx_read($element->{GA_Fensterstatus}, 3001);   #Zuweisung des Wertes der "GA_Fensterstatus" der Hilfs-Variablen "$Fensterstatus$
        
    my $Rollo_Status knx_read($element->{GA_Rollo_Status}, 3005.001); #Zuweisung des Wertes der "GA_Fensterstatus" der Hilfs-Variablen "$Rollo_Status"
        
    my $Helligkeitswert knx_read($element->{GA_Helligkeitswert}, 3009.004); #Zuweisung des Wertes der "GA_Helligkeitswert" der Hilfs-Variablen "$Helligkeitswert"
           
         #Wenn Fenster=zu und das Rollo in der Position für Rollo_geschlossen und der Helligkeitswert außen <= des Helligkeitswert_Schaltschwelle, dann Rollo runter fahren
         
    if (($Fensterstatus==$Fenster_zu ) && ($Rollo_Status <= $element->{PosRollo_geschlossen}) && ($Helligkeitswert <= $Helligkeitwert_Schaltschwelle ))
            {
    knx_write($element->{GA_Rollo_auf_Wert} , $element->{PosRollo_geschlossen}, 5.001); #Schreibbefehlt auf die "GA_Rollo_auf_Wert mit dem Wert aus dem Element des oberen Arrays mit Namen "PosRollo_geschlossen"
            
    return "PosRollo geschlossen weil dunkel"#nach Abarbeitung der Bedingung ausgabe in der PluginLogdatei "PosRollo geschlossen weil dunkel"
            
    }
     
          
    #Wenn Fenster=geschwenkt und Rolladen in Position größer gleich 10% --> Schreibbefehl für Rollo hoch
          
    if (($Fensterstatus==$Fenster_geschwenkt) && ($Rollo_Status >= 10  ))
            {
    knx_write($element->{GA_RolloAufAb}, 01); #Schreibbefehl auf die dem Element mit der Bezeichnung "GA_RolloAufAb" zugewiesenen GA. Es wird ein 0 für Rollo ab gesendet.
            
    return "Rollo hoch weil Fenster geschwenkt"#nach Abarbeitung der Bedingung ausgabe in der PluginLogdatei "Rollo hoch weil Fenster geschwenkt"
            
    }
            
         
    #Wenn Fenster=gekippt und Rolladen in Position größer gleich PosRollo_Lueftung--> Schreibbefehl für Rollo auf PosRollo_Lueftung
         
    if (($Fensterstatus==$Fenster_gekippt) && ($Rollo_Status >= $element->{PosRollo_Lueftung}))
           {
    knx_write($element->{GA_Rollo_auf_Wert}, $element->{PosRollo_Lueftung}, 5.001); #Schreibbefehl auf die dem Element mit der Bezeichnung "GA_Rollo_auf_Wert" zugewiesenen GA. Es wird der, dem Element mit der Bezeichnung "PosRollo_Lueftung" zugewiesenen Wert geschrieben
           
    }
      }
    }     
     

    return 
    "Warte"#Rückgabewert falls noch kein Telegramm eingetroffen ist 

    #2
    push @AlleRolllaeden, { Name => "Wohnen_RH",
    GA_Fensterstatus => "6/1/3",
    GA_Rollo_auf_Wert => "2/1/17",
    GA_RolloAufAb => "2/1/15",
    GA_Rollo_Status => "2/3/4",
    PosRollo_Lueftung => 70,
    PosRollo_geschlossen => 100 ,
    GA_Helligkeitswert => "5/4/0"}, <--------------

    Bitte mal das letzte Komma durch ein Semikolon ersetzen!
    Viele Grüße Jens

    Kommentar


      #3
      Hallo

      Das Problem ist, dass deine Definitionszeile am ende nicht mit einem komma sondern einem Semikolon ( ; ) enden muss (Zeile 32)

      EDIT: Huch... Jens war schneller
      Gruss Patrik alias swiss

      Kommentar


        #4
        Jo Männer,

        Danke - das mit dem Semikolo hat geholfen.
        Dann kamen zwar noch diverse andere Problemchen hoch aber hey -es Funktioniert.

        Was bisschen unsmart ist:
        Wenn "Fenster gekippt" - dann steht der Fensterhebel ja nach oben. Beim Verschließen hat es ja kurz die Stellung von "Fenster geschwenkt".
        Dadurch fährt das Rollo erst nach oben und dann nach unten auf geschlossen. Nicht immer, aber manchmal.

        Freu mich aber trotzdem. Mach mir jetzt ein Bier auf.
        Beachte bitte meine Modifkationen im 1. Post.

        Schönen Abend, Prost!

        Kommentar

        Lädt...
        X