Ankündigung

Einklappen
Keine Ankündigung bisher.

Schwellwertschalter

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

    [WireGate-Plugin] Schwellwertschalter

    Beispiel Schwellwertschalter

    Code:
    # Demo-Plugin Schwellwertschalter
    # V1.0 2010-03-19
    
    ### Definitionen
    # Eigenen Aufruf-Zyklus auf 300 Sekunden setzen
    $plugin_info{$plugname.'_cycle'} = 300;
    my $wert_ga = "5/2/79";  # Gruppenadresse mit dem Wert
    my $schwellwert = 35;     # Schwellwert
    my $ziel_ga = "14/6/10";  # Adresse an die Wert bei Unter/überschreitung gesendet wird
    ### Ende Definitionen
    
    
    my $luftfeuchte;
    # Plugin an Gruppenadresse "anmelden"
    $plugin_subscribe{$wert_ga}{$plugname} = 1;
    
    # Nun kommt es darauf an, ob das Plugin aufgrund eines eintreffenden Telegramms
    # oder zyklisch aufgerufen wird! Wir wollen beides..
    # Bei eintreffenden Telegrammen reagieren wir gezielt auf "Write" (gibt ja auch Read/Response)
    # und die spezifische Gruppenadresse, das Plugin könnte ja bei mehreren "angemeldet" sein.
    if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $wert_ga) {
       $luftfeuchte = $msg{'value'};
       #oder nur falls nicht importiert: $msg{'data'} ist dann leer/undef!
       #$luftfeuchte = decode_dpt9($msg{'data'});
    
    } else { # zyklischer Aufruf
       # "9" (DPT) kann entfallen falls richtig importiert!
       $luftfeuchte = knx_read($wert_ga,300,9);
    }
    
    if ($luftfeuchte >= $schwellwert and $plugin_info{$plugname.'_merker_schwellwert1'} ne 1) {
       # Sende an ZielGA den Wert "1" als 1bit-Wert (DPT1)
       # "1" (DPT) kann entfallen falls richtig importiert!
       knx_write($ziel_ga,1,1);
       # und merken
       $plugin_info{$plugname.'_merker_schwellwert1'} = 1;
    } elsif ($luftfeuchte < $schwellwert and $plugin_info{$plugname.'_merker_schwellwert1'} eq 1) { 
       # unter Schwellwert,vorher aktiv -> sende 0
       knx_write($ziel_ga,0,1);
       # und merken
       $plugin_info{$plugname.'_merker_schwellwert1'} = 0;
    }
    
    return;
    # verfügbare Daten in %msg:
    # $msg{'repeated'} 0/1
    # $msg{'sequence'} 0-xxx
    # $msg{'buf'} Rohdaten LPDU 
    # $msg{'src'} Quelladresse 
    # $msg{'tpdu_type'} T_DATA_XXX_REQ
    # $msg{'data'} rohe Telegrammdaten
    # $msg{'rcount'} Routing-Zähler
    # $msg{'apci'} A_GroupValue_Write,A_GroupValue_Read,A_GroupValue_Response (u.v.m)
    # $msg{'class'} low/alarm/high/system
    # $msg{'dst'} Zieladresse x/y/z
    # $msg{'datalen'} Datenlänge
    # $msg{'value'} Dekodierter Klartext-Wert (nur falls ESF importiert!)
    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
    -> Bitte KEINE PNs!

    #2
    2 Schwellwerte mit Hysterese

    Hallo,

    ich habe die ersten beiden 1-wire-Temperatursensoren und das Wiregate. Für beide Temperatursensoren brauche ich jeweils 2 Schwellwerte mit dazwischenliegender Hysterese. Wenn ich das vorliegende Plugin richtig verstehe, wird hier nur ein einziger Schwellwert realisiert, eine Hysterese lässt sich so nicht abbilden. Kann man das vorliegende Plugin auf die oben genannten Anforderungen trimmen?
    Leider kann ich nicht in Perl programmieren.

    Einen schönen österlichen Gruß

    Harald

    Kommentar


      #3
      Zitat von Patholog Beitrag anzeigen
      Für beide Temperatursensoren brauche ich jeweils 2 Schwellwerte mit dazwischenliegender Hysterese. Wenn ich das vorliegende Plugin richtig verstehe, wird hier nur ein einziger Schwellwert realisiert, eine Hysterese lässt sich so nicht abbilden. Kann man das vorliegende Plugin auf die oben genannten Anforderungen trimmen?
      Leider kann ich nicht in Perl programmieren.
      Klar geht das - und wirklich Perl-Programmieren muss man dafür auch nicht können. Sobald man weiß, was eine Hysterese macht, sollte man den Code schon selbst abändern können...

      Ungetestet würde ich da mal vorschlagen:
      Code:
      # Demo-Plugin Schwellwertschalter mit Hysterese
      # V1.0 2011-04-24
      
      ### Definitionen
      # Eigenen Aufruf-Zyklus auf 300 Sekunden setzen
      $plugin_info{$plugname.'_cycle'} = 300;
      my $wert_ga = "5/2/79";  # Gruppenadresse mit dem Wert
      my $schwellwert_an  = 40;     # oberer Schwellwert
      my $schwellwert_aus = 35;     # unterer Schwellwert
      my $ziel_ga = "14/6/10";  # Adresse an die Wert bei Unter/überschreitung gesendet wird
      ### Ende Definitionen
      
      
      my $luftfeuchte;
      # Plugin an Gruppenadresse "anmelden"
      $plugin_subscribe{$wert_ga}{$plugname} = 1;
      
      # Nun kommt es darauf an, ob das Plugin aufgrund eines eintreffenden Telegramms
      # oder zyklisch aufgerufen wird! Wir wollen beides..
      # Bei eintreffenden Telegrammen reagieren wir gezielt auf "Write" (gibt ja auch Read/Response)
      # und die spezifische Gruppenadresse, das Plugin könnte ja bei mehreren "angemeldet" sein.
      if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $wert_ga) {
         $luftfeuchte = $msg{'value'};
         #oder nur falls nicht importiert: $msg{'data'} ist dann leer/undef!
         #$luftfeuchte = decode_dpt9($msg{'data'});
      
      } else { # zyklischer Aufruf
         # "9" (DPT) kann entfallen falls richtig importiert!
         $luftfeuchte = knx_read($wert_ga,300,9);
      }
      
      if ($luftfeuchte >= $schwellwert_an and $plugin_info{$plugname.'_merker_schwellwert1'} ne 1) {
         # Sende an ZielGA den Wert "1" als 1bit-Wert (DPT1)
         # "1" (DPT) kann entfallen falls richtig importiert!
         knx_write($ziel_ga,1,1);
         # und merken
         $plugin_info{$plugname.'_merker_schwellwert1'} = 1;
      } elsif ($luftfeuchte < $schwellwert_aus and $plugin_info{$plugname.'_merker_schwellwert1'} eq 1) { 
         # unter Schwellwert,vorher aktiv -> sende 0
         knx_write($ziel_ga,0,1);
         # und merken
         $plugin_info{$plugname.'_merker_schwellwert1'} = 0;
      }
      
      return;
      # verfügbare Daten in %msg:
      # $msg{'repeated'} 0/1
      # $msg{'sequence'} 0-xxx
      # $msg{'buf'} Rohdaten LPDU 
      # $msg{'src'} Quelladresse 
      # $msg{'tpdu_type'} T_DATA_XXX_REQ
      # $msg{'data'} rohe Telegrammdaten
      # $msg{'rcount'} Routing-Zähler
      # $msg{'apci'} A_GroupValue_Write,A_GroupValue_Read,A_GroupValue_Response (u.v.m)
      # $msg{'class'} low/alarm/high/system
      # $msg{'dst'} Zieladresse x/y/z
      # $msg{'datalen'} Datenlänge
      # $msg{'value'} Dekodierter Klartext-Wert (nur falls ESF importiert!)
      TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

      Kommentar


        #4
        Unabhängig von den (soeben erkannten) eigenen Fehlern
        @Chris
        Es sollte trotzdem so funzen

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

        Kommentar


          #5
          Herzlichen Dank schon mal!
          Wegen der Osterferien und Feiertage konnte ich nicht gleich reagieren. Ich werde das Plugin ausprobieren. Weil es mein erstes ist, brauch ich dafür wahrscheinlich ein wenig Zeit.

          Gruß

          Harald

          Kommentar


            #6
            Guten Morgen,

            ich würde gerne eine Temperaturüberwachung für mehrere Sensoren durchführen.
            Ist es möglich bzw. Sinnvoll in einem Plugin mehrer Sensoren abzufragen und auszuwerten und bei Über/Unterschreitung zu reagieren.

            Es haben die unterschiedlichen Sensoren aber nicht immer die gleichen Schwellwerte.

            Gruß

            Kommentar


              #7
              Dann mach doch für jeden Sensor ein eigenes Plugin. Einfach unter einem anderen Namen anlegen, und ggf die Schwellwerte anpassen.

              Kommentar


                #8
                War eher für die Übersichtlichkeit gedacht. Wenn ich überlege das ja auch irgendwann die Heizungs Plug ins kommen dann wirds doch eine ganze Menge.

                Grundsätzlich wäre es aber möglich oder?

                Kommentar


                  #9
                  Klar, grundsätzlich kann man da in so nem Plugin alles machen, sogar auch nachträglich Windows oder FreeBSD installieren
                  Müsste man halt entsprechend anpassen, ich versuche nur Beispiele für gängiges zu liefern, für normal=(mehrfach)kopieren, wers anders will soll und kann tun was er eben will. Das ist Sinn&Zweck der Sache..

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

                  Kommentar


                    #10
                    Wie bringe ich eigentlich zwei Sensorwerte in so einem Schwellwert-Plugin unter? Konkret: Die Pumpe eines Kaminofens soll den Puffer ab einer Kamin-Kesseltemperatur von 75°C befüllen und bei kleiner 60°C abschalten. Soweit bekomme ich das mit dem Plugin und zwei Schwellwert-Variablen hin.
                    Doch zudem soll die Pumpe nur laufen, wenn ein Temperatursensor am Pufferspeicher einen Wert niedriger als die Kesseltemperatur liefert. Der Puffer soll ja nicht über den Kaminofen entladen werden.

                    Wenn ich nun den Puffersensorwert an eine GA sende, dann steht der Wert ja nur kurz auf dem Bus. Wenn dann der Schwellwertvergleich startet, steht mir ja die Puffertemperatur nicht mehr zur Verfügung, oder wird der Pufferwert irgendwo zwischengespeichert, um ihn bei der Abfrage miteinbeziehen zu können?
                    Gruß
                    Karsten

                    Kommentar


                      #11
                      Einfach knx_read("1/2/3",0,<dpt>) und das Ergebniss vergleichen

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

                      Kommentar


                        #12
                        Zitat von makki Beitrag anzeigen
                        Einfach knx_read("1/2/3",0,<dpt>) und das Ergebniss vergleichen
                        Danke. Meine Butze muss unbedingt fertig werden, damit ich das alles mal ausprobieren und mich mit KNX mehr auseinandersetzen kann. Auf so eine einfache Idee, wie das Abfragen von Objekten, die an einer GA lauschen, bin ich gar nicht gekommen.

                        Wenn ich den Ablauf des Plugins richtig versteh, triggert nach Anmeldung des Plugins auf einer GA ein Telegram an genau diese GA den Aufruf - oder alle 300 sek. Es wird der Schwellwert mit dem GA-Wert verglichen und um BUS-Verkehr zu sparen, frage ich erst bei Wahr die Puffertemperatur zum Vergleich ab. Richtig?
                        Gruß
                        Karsten

                        Kommentar

                        Lädt...
                        X