Ankündigung

Einklappen
Keine Ankündigung bisher.

Hilfe bei Erstellung von einem Plugin

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

    [wiregate] Hilfe bei Erstellung von einem Plugin

    Hallo,

    ich brauche eine Plugin, das folgendes macht:

    Es soll eine GA abfragen, ob ein IButton am Schlüsselbrett hängt. Bzw "fehlt"
    Es soll eine zweite GA abfragen, ob ein zweiter IButton am Schlüsselbrett hängt. Bzw "fehlt"
    Es soll eine dritte GA abgefragt werden, ob die Haustür verschlossen ist.

    Wenn diese drei Funktionen erfüllt ist, soll auf eine 4 GA ein Befehl (1Bit) gesendet werden.

    Was möchte ich damit erreichen:

    Ich möchte damit erreichen, dass ein "Ausbefehl" an meine Aktoren gesendet wird. Und zwar dann, wenn bestimmt Schlüssel am Schlüsselbrett fehlen und dann die Haustür abgeschlossen wird.

    Kann mir da jemand helfen ?

    Gruß Manuel

    #2
    Bedingt dass erst button1 fehlt und danach button 2:
    Code:
    my $button1 = knx_read($ga1,300,1); #1=hängt, 0=weg
    my $button2 = knx_read($ga2,300,1);
    my $door = knx_read($ga3,300,1); #1=offen,0=zu
    
    if ($button1 == 0)
    {
    if ($button2 == 0)
       {
        if ($door == 0)
           {
            knx_write($ga4,DPT_HIER)
            }
        }
    }
    Hier ist egal welcher zuerst weg ist ... sinnvoller
    Code:
    my $button1 = knx_read($ga1,300,1); #1=hängt, 0=weg
    my $button2 = knx_read($ga2,300,1);
    my $door = knx_read($ga3,300,1); #1=offen,0=zu
    
    if ($button1 == 0 && $button2 == 0)
    {
        if ($door == 0)
           {
            knx_write($ga4,DPT_HIER)
            }
    }
    Dazu noch ein subscribe auf die GAs der Buttons.
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      #3
      Besser immer aus dem Cache lesen, also
      Code:
      my $button1 = knx_read($ga1,[B]0[/B],1); #1=hängt, 0=weg
      statt
      Code:
      my $button1 = knx_read($ga1,[B]300[/B],1); #1=hängt, 0=weg
      Wenn nicht im Cache, wird versucht vom Bus zu lesen..

      Ansonsten so wie JuMi schrub, $plugin_subscribe auf die GA's, fertig..
      Fragen? Fragen

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

      Kommentar


        #4
        Hallo,

        ich habe mich einfach mal an einem Plugin entlang gehangelt.
        Und dann deins eingefügt.

        Habe ich das so richtig gemacht ?

        Code:
        ###################################################################################### 
        # 
        # Aus-Schaltung Ibutton
        # V0.1 2012-11-01 
        # by Manu241 - [URL="http://www.knx-user-forum.de"]www.knx-user-forum.de[/URL]
        #
        ###################################################################################### 
        ######################### 
        ### BEGINN DEFINITION ### 
        ######################### 
        # Aufruf-Zyklus auf 300 Sekunden setzen
        $plugin_info{$plugname.'_cycle'} = 300;
        
        #GA´s
        my $button1 = '0/3/2';
        my $button2 = '0/3/3';
        my $door = '0/3/9';
        my $alles_aus = '0/3/1';
        
        #Plugin auf GAs anmelden
        $plugin_subscribe{$button1}{$plugname} = 1;
        $plugin_subscribe{$button2}{$plugname} = 1;
        $plugin_subscribe{$door}{$plugname} = 1;
        
        ######################### 
        ###  ENDE DEFINITION  ### 
        ######################### 
        my $button1 = knx_read($ga1,300,1); #1=hängt, 0=weg
        my $button2 = knx_read($ga2,300,1);
        my $door = knx_read($ga3,300,1); #1=offen,0=zu
        if ($button1 == 0 && $button2 == 0)
        {
            if ($door == 0)
               {
                knx_write($ga4,DPT_HIER)
                }
        }

        Kommentar


          #5
          Ich hab da was für 5 Buttons mit Verzögerung programmiert ... Das ist meine Anwesenheit...den Einwand von Makki verstehe ich, habe ich aber auch noch nicht umgesetzt ... ich glaube deswegen war gestern wieder alles dunkel...wollte mir das mal in Ruhe ansehen ... aber im Buslog gabs read und response ... sonst eher selten.

          Hier meine Abwesenheitsschaltung, da musst Du eigentlich nur einen Button durch die Tür ersetzen. Also Button1=0 und Button2=0 und Tür=0 -> Abwesend. Da hab ich noch die wegfliegenden iButtons mit abgefangen.

          EDIT: Ansonsten sieht Deins glaub ich ganz gut aus, ich würde aber DPT_HIER noch durch einen DPT ersetzen

          Code:
          #Präsenz
          
          my $ga1 = "0/7/1";
          my $ga2 = "0/7/2";
          my $ga3 = "0/7/3";
          my $ga4 = "0/7/4";
          my $ga5 = "0/7/5";
          
          my $praesenz = "0/7/0";
          
          $plugin_info{$plugname.'_cycle'} = 84600;
          
          $plugin_subscribe{$ga1}{$plugname} = 1;	
          $plugin_subscribe{$ga2}{$plugname} = 1;
          $plugin_subscribe{$ga3}{$plugname} = 1;
          $plugin_subscribe{$ga4}{$plugname} = 1;
          $plugin_subscribe{$ga5}{$plugname} = 1;	
          
          my $val1 = knx_read($ga1,300,1);
          my $val2 = knx_read($ga2,300,1);
          my $val3 = knx_read($ga3,300,1);
          my $val4 = knx_read($ga4,300,1);
          my $val5 = knx_read($ga5,300,1);
          
          if 
          (
          ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $ga1) or
          ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $ga2) or
          ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $ga3) or
          ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $ga4) or
          ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $ga5)
          )
          
          { 
          my ($sec,$min,$hour)=localtime(time);
          
          
          if (
          $val1 == 1 or
          $val2 == 1 or
          $val3 == 1 or
          $val4 == 1 or
          $val5 == 1)
          {
          if(($plugin_info{$plugname.'_lastpraesenz'}+180) >= time)
          {return 0;}
          else
          {
          knx_write($praesenz,1,1);
          $plugin_info{$plugname.'_lastpraesenz'} = time;
          } 
          }
          
          if (
          $val1 == 0 and
          $val2 == 0 and
          $val3 == 0 and
          $val4 == 0 and
          $val5 == 0)
          {
          if(($plugin_info{$plugname.'_lastpraesenz'}+300) >= time)
          {return 0;}
          else
          {
          if (($plugin_info{$plugname.'_lastaway'}+180) >= time)
          {return 0;}
          else
          {
          knx_write($praesenz,0,1);
          $plugin_info{$plugname.'_lastaway'} = time;
          }
          }
          }
          }
          return ;
          Umgezogen? Ja! ... Fertig? Nein!
          Baustelle 2.0 !

          Kommentar


            #6
            Es führen immer viele Wege nach Rom aber DPT_HIER war ein Hinweis von Jumi, das wird nen Fehler werfen

            Also wenns um die Haustür als Auslöser geht, würd ich das (ungetestet) leicht umformulieren:

            Code:
            ### BEGINN DEFINITION ### 
            ######################### 
            # Aufruf-Zyklus auf 0 setzen, just init
            $plugin_info{$plugname.'_cycle'} = 0;
            
            #GA´s
            my $button1 = '0/3/2';
            my $button2 = '0/3/3';
            my $door = '0/3/9';
            my $alles_aus = '0/3/1';
            
            ######################### 
            ###  ENDE DEFINITION  ### 
            ######################### 
            my $button1 = knx_read($ga1,0,1); #1=hängt, 0=weg
            my $button2 = knx_read($ga2,0,1);
            my $door = knx_read($ga3,0,1); #1=offen,0=zu
            if (%msg) { # Telegramm vom KNX
              if ($button1 == 0 && $button2 == 0 && $door == 0)
              {
                    knx_write($alles_aus,1,1); # Wert 1 auf die GA, DPT1 (dritter parameter)
              }
            } else {
            #Plugin auf GAs anmelden, wir brauchen nur die Tuer..
            $plugin_subscribe{$door}{$plugname} = 1;
            }
            return; # kein logeintrag, auskommentieren falls doch
            return "ich wurde aufgerufen mit $button1, $button2, $door";
            Makki

            Edit: hat sich mit Jumi's AW überschnitten aber ich glaube auch solch einfaches sollte als Beispiel ins SVN..
            EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
            -> Bitte KEINE PNs!

            Kommentar


              #7
              Naja man wächst halt ein wenig ... heute würde ich den code auch schlanker bekommen dafür sieht jeder was passiert
              Umgezogen? Ja! ... Fertig? Nein!
              Baustelle 2.0 !

              Kommentar


                #8
                Bitte, das war/sollte kein Vorwurf sein, ich versuche selbst es lieber verständlich zu halten als "optimiert".. bei vielem von mir geschriebenen könnte man das auf 1/3 eindampfen .. aber das Ziel ist ja nicht maximale Verwirrung..

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

                Kommentar


                  #9
                  Hab ich auch nicht so verstanden ... eklig wird es immer wenn es irgendwie Zeitabhängig wird ... schade dass "sleep" nicht so harmlos ist wie es klingt
                  Umgezogen? Ja! ... Fertig? Nein!
                  Baustelle 2.0 !

                  Kommentar


                    #10
                    Sleep ist in dem Zusammenhang eher der Tod

                    Aber wir können ja immer noch auf das Pluginsystem 2.0 hoffen
                    Gruss Patrik alias swiss

                    Kommentar


                      #11
                      Schlafen können wir wenn wir tot sind (von wem stammt das Zitat noch gleich..)

                      sleep ist keine gute Idee, jetzt tödlich, morgen bestenfalls hinderlich..

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

                      Kommentar


                        #12
                        Hallo,

                        danke für eure hilfe. Bin nun erst dazu gekommen es zu testen.
                        Jedoch funktioniert es nicht.

                        Hier mein Code:

                        Code:
                        ###################################################################################### 
                        # 
                        # Aus-Schaltung Ibutton
                        # V0.1 2012-11-01 
                        # by Manu241 - [URL="http://www.knx-user-forum.de"]www.knx-user-forum.de[/URL]
                        #
                        ###################################################################################### 
                        ######################### 
                        ### BEGINN DEFINITION ### 
                        ######################### 
                        # Aufruf-Zyklus auf 300 Sekunden setzen
                        $plugin_info{$plugname.'_cycle'} = 300;
                        #GA´s
                        my $button1 = '0/3/2';
                        my $button2 = '0/3/3';
                        my $door = '0/3/4';
                        my $alles_aus = '0/3/5';
                        ######################### 
                        ###  ENDE DEFINITION  ### 
                        ######################### 
                        my $button1 = knx_read($button1,0,1); #1=hängt, 0=weg
                        my $button2 = knx_read($button2,0,1);
                        my $door = knx_read($door,0,1); #1=offen,0=zu
                        if (%msg) { # Telegramm vom KNX
                          if ($button1 == 0 && $button2 == 0 && $door == 0)
                          {
                                knx_write($alles_aus,1,1); # Wert 1 auf die GA, DPT1 (dritter parameter)
                          }
                        } else {
                        #Plugin auf GAs anmelden, wir brauchen nur die Tuer..
                        $plugin_subscribe{$door}{$plugname} = 1;
                        }
                        return; # kein logeintrag, auskommentieren falls doch
                        return "ich wurde aufgerufen mit $button1, $button2, $door";

                        Kommentar


                          #13
                          Was sagt das Log?

                          Ansonsten mal ab Ende Definition:
                          Code:
                          my $button1 = knx_read($button1,0,1); #1=hängt, 0=weg
                          my $button2 = knx_read($button2,0,1);
                          my $door = knx_read($door,0,1); #1=offen,0=zu
                          if (%msg) { # Telegramm vom KNX
                          plugin_log($plugname,"GA hat Plugin ausgelöst"); #später löschen oder auskommentieren
                            if ($button1 == 0 && $button2 == 0 && $door == 0)
                            {
                          plugin_log($plugname,"Alle GAs sagen 0"); #später löschen oder auskommentieren
                                  knx_write($alles_aus,1,1); # Wert 1 auf die GA, DPT1 (dritter parameter)
                          plugin_log($plugname,"Nun sollte das Telegramm gesendet worden sein"); #später löschen oder auskommentieren
                            }
                          } else {
                          plugin_log($plugname,"GAs sind nicht alle 0: Button1->$button1, Button2->$button2 und Tür->$door "); #später löschen oder auskommentieren
                          #Plugin auf GAs anmelden, wir brauchen nur die Tuer..
                          $plugin_subscribe{$door}{$plugname} = 1;
                          }
                          return "ich wurde aufgerufen mit $button1, $button2, $door";
                          Das sind nur ein paar Logeinträge dazugekommen dass man den Fehler findet.
                          Umgezogen? Ja! ... Fertig? Nein!
                          Baustelle 2.0 !

                          Kommentar


                            #14
                            Hallo,

                            es wird zwar etwas ins Log geschrieben, aber ich weiß nicht genau wann und wie es ausgelöst wird. Wenn ich nun meine Testswitche auf der Visu betätige passiert nichts und es wird auch nichts ins log geschrieben.

                            Gruß und danke Manuel

                            Kommentar


                              #15
                              o.k. ... Visu ... klassischer Fehler ...

                              Hast Du die GAs brav mit richtigem DPT in die eibga.conf (Webmin/Buszugriff/Gruppenadressen) eingetragen ?
                              Umgezogen? Ja! ... Fertig? Nein!
                              Baustelle 2.0 !

                              Kommentar

                              Lädt...
                              X