Ankündigung

Einklappen
Keine Ankündigung bisher.

Binärauslöser

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

    Binärauslöser

    Hallo zusammen,
    gibt es beim EIBPC etwas ähnliches wie den Binärauslöser beim HS?
    Hintergrund:
    Mit einer 1Bit Adresse soll bei (1) Ausgang (A) schalten.
    Mit der gleichen Adresse soll bei (0) Ausgang (B) schalten
    Ausgang (A) soll eine 1Byte Adresse ausgeben und bei jedem antriggern den Byte Wert um eine frei wählbare Zahl erhöhen.
    Ausgang (B) soll die gleiche 1Byte Adresse ausgeben und bei jedem antriggern den Byte Wert um eine frei wählbare Zahl absenken.

    Hat sowas schon jemand umgesetzt?
    Hab bei den Makros nichts in der Richtung gefunden.

    Gruß Frank

    #2
    Ich denk schon.
    Sollte in etwa so funktionieren:
    Wert=0
    Offset=10
    if event(GA) and GA==1 then write (Ausgang A,Wert+Offset) endif
    if event(GA) and GA==0 then write (Ausgang A,Wert-Offset) endif
    Gruß
    Volker

    Wer will schon Homematic?

    Kommentar


      #3
      Zitat von frankthegreat Beitrag anzeigen
      Mit einer 1Bit Adresse soll bei (1) Ausgang (A) schalten.
      Mit der gleichen Adresse soll bei (0) Ausgang (B) schalten
      Ausgang (A) soll eine 1Byte Adresse ausgeben und bei jedem antriggern den Byte Wert um eine frei wählbare Zahl erhöhen.
      Ausgang (B) soll die gleiche 1Byte Adresse ausgeben und bei jedem antriggern den Byte Wert um eine frei wählbare Zahl absenken.
      Das ist einfach
      Code:
      // "ZählerGA-1/2/3"
      // Beliebige Zahlen
      Aufwaerts = 3
      Abwaerts = 1
      
      if "Trigger-1/2/5" then {
          // Schreibe Wert von Trigger auf den Ausgang A/B
         write("Ausgang-A-2/0/0","Trigger-1/2/5") endif;
         write("ZählerGA-1/2/3","ZählerGA-1/2/3"+Aufwaerts) endif;
      } endif
      if !"Trigger-1/2/5" then {
         write("Ausgang-B-2/0/0",!"Trigger-1/2/5") endif;
         write("ZählerGA-1/2/3","ZählerGA-1/2/3"-Abwaerts) endif;
      endif
      EDIT:Habs nun genauer gelesen...
      EDIT2: Überlauf muss man ggf. noch beachten...
      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
      Enertex Produkte kaufen

      Kommentar


        #4
        enertegus
        Würde Dein Beispiel nicht am Validierungsschema scheitern, wenn z.B. mehrmals hintereinander eine "1" geschickt wird? Auf Verdacht würde ich hier zunächst eher mit event("Trigger-1/2/5") und nachfolgender Auswertung arbeiten.

        Kommentar


          #5
          Das stimmt schon, wenn das jedesmal ausgeführt werden soll. Aber das hat frankthegreat so nicht geschrieben. Ansonsten müsste man halt
          Code:
          if "Trigger-1/2/5" and event("Trigger-1/2/5" then...
          bzw.
          Code:
          if !"Trigger-1/2/5" and event("Trigger-1/2/5" then...
          schreiben
          offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
          Enertex Produkte kaufen

          Kommentar


            #6
            Zitat von SnowMaKeR Beitrag anzeigen
            Ich denk schon.
            Sollte in etwa so funktionieren:
            Wert=0
            Offset=10
            if event(GA) and GA==1 then write (Ausgang A,Wert+Offset) endif
            if event(GA) and GA==0 then write (Ausgang A,Wert-Offset) endif
            Geht leider nicht, da meckert der Compiler. (Datentyp der Parameter nicht gleich)

            Es soll beim schalten einer 1Bit Adresse eine 1Byte Adresse auslösen.
            Das wäre erstmal die Grundsatzlösung.
            Kann das der EIBPC überhaupt?

            Der nächste Schritt wäre:
            Bei jedem Schalten der 1Bit Adresse auf (1) soll die 1Byte Adresse ausgegeben und um einen Wert (zb.10) erhöht werden.
            Bei jedem Schalten der 1Bit Adresse auf (0) soll die 1Byte Adresse ausgegeben und um einen Wert (zb.10) abgesenkt werden.

            Ich hab also nur 2 GA's, die beteiligt sind. Bei dem Ansatz von Michael sind irgendwie 3 Adressen im Spiel.
            Hat noch jemand Vorschläge?

            Gruß Frank

            Kommentar


              #7
              Bei einer 1-bit GA reicht
              Code:
              if event(GA) and GA then....
              if event(GA) and !GA then ...
              
              Dann auch die Verwendung der vordefinierten Variablen EIN und AUS (beides Bitwerte)
              if event(GA) and GA==EIN then....
              if event(GA) and GA==AUS then ...
              Du vergleichst die 1-bit GA mit einem Byte (eine 1 ohne Typangabe entspricht 1u08), da sollte das Meckern herkommen...

              Und ja - auf diese Art kannst Du sicher mit dem EibPC aufgrund einer 1Bit Adresse eine 1Byte Adresse auslösen!
              Zuletzt geändert von klaus_kraemer; 25.11.2017, 10:07.

              Kommentar


                #8
                Also mein Code sieht so aus:

                if event("Sonos Küche - Lautstärke 1Bit-11/0/1") and ("Sonos Küche - Lautstärke 1Bit-11/0/1"==1) then write("Sonos Küche - Lautstärke 1Byte-11/0/5")endif
                if event("Sonos Küche - Lautstärke 1Bit-11/0/1") and !("Sonos Küche - Lautstärke 1Bit-11/0/1"==0) then write("Sonos Küche - Lautstärke 1Byte-11/0/5")endif

                Aber er tut halt nicht

                Kommentar


                  #9
                  Zitat von frankthegreat Beitrag anzeigen
                  Also mein Code sieht so aus:

                  if event("Sonos Küche - Lautstärke 1Bit-11/0/1") and ("Sonos Küche - Lautstärke 1Bit-11/0/1"==1) then write("Sonos Küche - Lautstärke 1Byte-11/0/5")endif
                  if event("Sonos Küche - Lautstärke 1Bit-11/0/1") and !("Sonos Küche - Lautstärke 1Bit-11/0/1"==0) then write("Sonos Küche - Lautstärke 1Byte-11/0/5")endif

                  Aber er tut halt nicht
                  Machs so:
                  Code:
                  if event("Sonos Küche - Lautstärke 1Bit-11/0/1") and ("Sonos Küche - Lautstärke 1Bit-11/0/1") then write("Sonos Küche - Lautstärke 1Byte-11/0/5")endif
                  if event("Sonos Küche - Lautstärke 1Bit-11/0/1") and !("Sonos Küche - Lautstärke 1Bit-11/0/1") then write("Sonos Küche - Lautstärke 1Byte-11/0/5")endif
                  Eine 1-bit GA ist für sich schon ein Wahrheitswert, den brauchst Du nicht extra nochmal zu vergleichen...
                  oder so:
                  Code:
                  if event("Sonos Küche - Lautstärke 1Bit-11/0/1") and ("Sonos Küche - Lautstärke 1Bit-11/0/1"==EIN) then write("Sonos Küche - Lautstärke 1Byte-11/0/5")endif
                  if event("Sonos Küche - Lautstärke 1Bit-11/0/1") and ("Sonos Küche - Lautstärke 1Bit-11/0/1"==AUS) then write("Sonos Küche - Lautstärke 1Byte-11/0/5")endif
                  Dein Code täte es auch nicht, weil Du zwei mal das selbe auswertest
                  "("Sonos Küche - Lautstärke 1Bit-11/0/1"==1)" entspricht logisch "!("Sonos Küche - Lautstärke 1Bit-11/0/1"==0)" allerdings hast Du hier wieder das Problem, einen Bit-Wert (GA) mit einem Byte-Wert vergleichen zu wollen.
                  Zuletzt geändert von klaus_kraemer; 25.11.2017, 10:27.

                  Kommentar


                    #10
                    Geht beides nicht:

                    Syntaxfehler in Zeile:[288]
                    >if event("Sonos Küche - Lautstärke 1Bit-11/0/1") and ("Sonos Küche - Lautstärke 1Bit-11/0/1"=EIN) then write("Sonos Küche - Lautstärke 1Byte-11/0/5")endif< in der Datei "D:/KNX/EIBPC/EibstudioData/tmpApp.txt"
                    Gültig bis Spaltenposition: {0}
                    STOP Parser --> if event("Sonos Küche - Lautstärke 1Bit-11/0/1") and ("Sonos Küche - Lautstärke 1Bit-11/0/1"=EIN) then write("Sonos Küche - Lautstärke 1Byte-11/0/5")endif
                    ID:4
                    EibParser wurde mit Fehler beendet.

                    Kommentar


                      #11
                      Sorry, hab ein "=" vergessen. Korrigier' ich gleich.

                      Code:
                      if event("Sonos Küche - Lautstärke 1Bit-11/0/1") and ("Sonos Küche - Lautstärke 1Bit-11/0/1"==EIN) then write("Sonos Küche - Lautstärke 1Byte-11/0/5")endif
                      if event("Sonos Küche - Lautstärke 1Bit-11/0/1") and ("Sonos Küche - Lautstärke 1Bit-11/0/1"==AUS) then write("Sonos Küche - Lautstärke 1Byte-11/0/5")endif
                      Warum sind eigentlich alle so auf den unnötigen Vergleich mit "==EIN" und "==AUS" versessen?

                      Kommentar


                        #12
                        Geht trotzdem nicht

                        Syntaxfehler in Zeile:[288]
                        >if event("Sonos Küche - Lautstärke 1Bit-11/0/1") and ("Sonos Küche - Lautstärke 1Bit-11/0/1"==EIN) then write("Sonos Küche - Lautstärke 1Byte-11/0/5")endif< in der Datei "D:/KNX/EIBPC/EibstudioData/tmpApp.txt"
                        Falsche Anzahl von Argumente von in >write< in >if_then event("Sonos Küche - Lautstärke 1Bit-11/0/1")and"Sonos Küche - Lautstärke 1Bit-11/0/1"==EIN<
                        ID:10
                        EibParser wurde mit Fehler beendet.

                        Kommentar


                          #13
                          Also mit write musst Du schon noch einen Wert auf die GA schreiben - ich schreib Dir hier doch nicht das ganze Programmteil...

                          write(Gruppenadresse, Wert) - Handbuch hilft auch manchmal...

                          Kommentar


                            #14
                            Hier mal für den Fall, das es noch jemand braucht.

                            Wert=0
                            Offset=10
                            if event("Sonos Küche - Lautstärke 1Bit-11/0/1") and ("Sonos Küche - Lautstärke 1Bit-11/0/1"==EIN) then write("Sonos Küche - Lautstärke 1Byte-11/0/5",Wert+Offset)endif
                            if event("Sonos Küche - Lautstärke 1Bit-11/0/1") and ("Sonos Küche - Lautstärke 1Bit-11/0/1"==AUS) then write("Sonos Küche - Lautstärke 1Byte-11/0/5",Wert-Offset)endif

                            Ok, danke. Damit ist schonmal der 1 Teil gelöst. Nur das dazuaddieren um 10 bzw. das subtrahieren um -10 ist wahrscheinlich nicht lösbar.
                            Das Handbuch hilft tatsächlich manchmal, hatte dazu allerdings nichts gefunden.

                            War auch der Meinung, das man hier im Forum durchaus mal ein Problem posten kann das andere Teilnehmer ev. auch haben.
                            Wenn jeder aufs Handbuch verwiesen wird.....

                            Kommentar


                              #15
                              Sowas in der Art funktioniert nicht?
                              Code:
                              Wert=0s16
                              Offset=10s16
                              
                              if event("Sonos Küche - Lautstärke 1Bit-11/0/1") and ("Sonos Küche - Lautstärke 1Bit-11/0/1"==EIN) then {
                                 Wert = Wert + Offset
                                 Wert = min(Wert,255s16)
                                 Wert = max(Wert, 0s16)
                                 write("Sonos Küche - Lautstärke 1Byte-11/0/5",convert(Wert, 0u08))
                              } endif
                              if event("Sonos Küche - Lautstärke 1Bit-11/0/1") and ("Sonos Küche - Lautstärke 1Bit-11/0/1"==AUS) then {
                                 Wert = Wert - Offset
                                 Wert = min(Wert,255s16)
                                 Wert = max(Wert, 0s16)
                                 write("Sonos Küche - Lautstärke 1Byte-11/0/5",convert(Wert, 0u08))
                              } endif
                              Du behältst den Wert in einem Signed Integer Länge 16 Bit. Sonst bei einem u08 könntest Du einen Überlauf bekommen. Du willst aber den Wert immer im Bereich 0 ... 255 haben denke ich. Um den berechneten Wert zu senden, wird wieder konvertiert in u08.

                              Ich habe es jetzt nicht ausprobiert aber es müßte so passen denke ich.

                              Kommentar

                              Lädt...
                              X