Ankündigung

Einklappen
Keine Ankündigung bisher.

Status für Türen,Tore und sonstiges

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

    [wiregate] Status für Türen,Tore und sonstiges

    Hallo miteinander,

    manu241 hatte mich gebeten ihm nochmal bei einem Plugin zu helfen. Da ich erst neulich join und split verstanden habe und "array of hashes" irgendwie cool finde wollte ich es gleich mal richtig umsetzen

    Das Plugin läuft alle 5 Minuten und sendet den Gesamtstatus der offenen Fenster/Türen auf den Bus. Gleichzeitig wird das Plugin bei einer Statusänderung eines Fensters/Tür aufgerufen und gibt dann im Log die Anzahl und die Namen der offenen Fenster/Türen wieder.

    Der Gesamtstatus sowie die Türen sind erstmal auf 0=offen und 1= geschlossen angelegt.

    Code:
    # Tueroeffnungen kontrollieren
    # 2012-11-04
    # JuMi2006 -> https://knx-user-forum.de
    # Pro Tuer: geschlossen = 1 , offen = 0
    # Gesamtstatus: alles zu = 1   noch mindestens eine Tuer offen = 0
    # $send_ga ist der Gesamtstatus
    # Die GAs sollten sauber in die eibga.conf eingepflegt sein 
    # bzw. aus der ETS importiert werden
    
    $plugin_info{$plugname.'_cycle'} = 300;
    my (@doors,$closed,@opened,$status);	# Variablen initialisieren
    
    ### KONFIGURATION ###
    
    # Jede Zeile eine Tuer
    push @doors, { name => "Tuer 1", 	ga => "1/2/10"};
    push @doors, { name => "Tuer 2", 	ga => "1/2/20"};
    push @doors, { name => "Tuer 3", 	ga => "1/2/40"};
    push @doors, { name => "Tuer 4", 	ga => "1/2/50"};
    push @doors, { name => "Tor 1", 	ga => "1/2/60"};
    push @doors, { name => "Tor 2", 	ga => "1/2/35"};
    
    my $send_ga = '0/0/112'; #An diese GA wird der Gesamtstaus gesendet.
    
    ### KONFIGURATION ENDE ###
    
    my $elements = @doors;
    
    foreach my $door (@doors) {
    $plugin_subscribe{$door->{ga}}{$plugname} = 1;
    $status = knx_read($door->{ga},0,1);
    $closed += $status;
    if ($status == 0)
    	{
    	push @opened, ($door->{name});
    	}
    }
    
    if ($closed == $elements)
    {
        knx_write($send_ga,1,1);
        return "Alle Tueren/Tore geschlossen!";
    }
    else
    {
    my $open = $elements - $closed;
    knx_write($send_ga,0,1);
    my $open_doors = join(" ",@opened);
    return "$open Türen/Tore offen: $open_doors";
    }
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    #2
    Hi,

    funktioniert einwandfrei, danke!

    lg Werner
    KNX, DMX, 1Wire, WireGate, CometVisu

    Kommentar


      #3
      Wie immer: bitte ins SVN.

      Auch wenns dem Autor banal erscheint, mag es ein hilfreicher Einstiegspunkt sein; in tausenden Threads geht das sonst mit der Zeit verloren..

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

      Kommentar


        #4
        Du wolltest doch vorher noch das SVN sortieren
        Umgezogen? Ja! ... Fertig? Nein!
        Baustelle 2.0 !

        Kommentar


          #5
          Ja, weil ich fürchte irgendwann den Überblick zu verlieren..
          Aber soweit ists noch nicht, bis dahin ists wichtiger das es überhaupt im SVN ist, also reinhauen

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

          Kommentar


            #6
            Hi,

            eine Frage, ist es normal, dass das Plugin bis zu 10 mal pro Sekunde auf die $send_ga sendet?

            Das passiert auch wenn alle Fenster/Türen die ich eingetragen habe geschlossen sind. Ich hab den Binäraktor zwar auf zyklisches senden aber alle 15 Minuten.

            lg Werner
            KNX, DMX, 1Wire, WireGate, CometVisu

            Kommentar


              #7
              Hmm kleiner Bug, liegt am subscribe...sehe ich mir nochmal an.
              Wenn alle Fenster gleichzeitig senden wird eben jedes mal ausgeführt. Ansonsten einfach das subscribe auskommentieren, dann wird nur alle 5 Minuten gesendet
              Umgezogen? Ja! ... Fertig? Nein!
              Baustelle 2.0 !

              Kommentar


                #8
                Hallo

                Code:
                # Pro Tuer: geschlossen = 1 , offen = 0
                wo im Plugin kann ich das denn ändern wenn ich es umgekehrt realisieren möchte?

                Kommentar


                  #9
                  @ obiwan

                  einfach im plugin ändern:

                  if ($closed == $elements)
                  { knx_write($send_ga,1,1); return "Alle Tueren/Tore geschlossen!"; } else { my $open = $elements - $closed; knx_write($send_ga,0,1);

                  .. d.h. die rot markierten Werte gegeneinander austauschen.

                  Möge die Macht mit Dir sein

                  Grüße
                  Viele Grüße Jens

                  Kommentar


                    #10
                    ..danke junger Padawan

                    Ich meinte die GA's der Statis für Tür/Fenster.
                    Also eher knx_read.

                    Hab nun kurzer Hand die Binäreingänge umparametriert.

                    Kommentar


                      #11
                      Probier mal das:

                      Code:
                      $status = [COLOR="red"]!([/COLOR]knx_read($door->{ga},0,1)[COLOR="Red"])[/COLOR];
                      Habs aber nicht getestet.
                      Umgezogen? Ja! ... Fertig? Nein!
                      Baustelle 2.0 !

                      Kommentar


                        #12
                        $status = !(knx_read($door->{ga},0,1));
                        ..danke, funktioniert.
                        Aber wie genau funktioniert das jetzt. Ich hätte jetzt vermutet das man aus
                        Code:
                        {ga},0,1)[COLOR=Red])[/COLOR];
                        Code:
                        {ga},1,1)[COLOR=Red])[/COLOR];
                        macht.

                        Kommentar


                          #13
                          Zur Erklärung:

                          knx_read($door->{ga},0,1)

                          macht folgendes:

                          knx_read(Gruppenadresse,Alter_des_Wertes_im_Cache, DPT)
                          Gruppenadresse = $door->{ga}
                          Alter_des_Wertes_im_Cache = 0 = Alter egal
                          DPT = 1 = 1.001

                          Daran muss/darf also erstmal nix geändert werden.

                          Was haben wir also geändert? Mit dem "!" wird ein boolscher Wert (True/False,1/0) in Perl (und anderen Sprachen) invertiert. Da Deine Binäreingänge invertiert senden ist das die einfachste Anpassung (neben der Umparametrierung ). Wenn jetzt das Fenster geöffnet ist dann liest knx_read dort eine "0" und das "!" macht das zur "1" womit der Rest des Plugin-Codes wieder passt.
                          Umgezogen? Ja! ... Fertig? Nein!
                          Baustelle 2.0 !

                          Kommentar


                            #14
                            Ok, vielen Dank für die Erklärung.

                            Wie gesagt es funktioniert so bestens. Umparametrieren war leider keine dauerhafte Lösung, da meine RTR's die "1" als offenes Fenster werten.

                            Jetzt habe ich die Zusammenfassung der Fenster pro Etage realisiert und lass mir das entsprechend in der CV anzeigen. Dazu hab ich für jede Etage ein Plugin angelegt. Da ich das ganze aber noch mit den Türen und enstprechend mit der jeweiligen Schließungen erweitern möchte, stellt sich mir jetzt die Frage, könnte man das Plugin auch so erweitern das alle Abfragen in ein und dem selben Plugin laufen? Also ein Plugin für alles ?

                            Kommentar

                            Lädt...
                            X