Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Off Topic
    4. Microcontroller
    5. Schaltproblem mit Sonoff TX Ultimate

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Schaltproblem mit Sonoff TX Ultimate

    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      Dieter_P @Stefan341 last edited by

      @stefan341

      Mmh, Tasmota und Regeln ist nicht meins. Vielleicht kommt da noch ein Hinweis.

      Worum es ja aktuell geht ist die Schalter den Relais zuzuweisen. Dafür gilt es in der Regel Schalter 1,2,3 zu unterscheiden. Wenn ich es richtig sehe aus deinen Logs ist das dann aber nicht Channel 1,2,3 sondern Channel 1,5,10.

      Mein Beispielversuch oben war als Trigger für Channel 1 und funktioniert dennoch nicht. Also stimmt wohl was mit der Schreibweise nicht.

      Hoffe jemand kann dir helfen.

      Wenn es gar nicht klappt, bleibt die Lösung über IOBroker. Dort solltest du per Mqtt die Änderung des Schalters bekommen. Daraus kann man ja wieder als Blockly das Relay auslösen lassen. Finde ich nicht ideal sowas quer durchs Netzwerk zu jagen, das macht es nur langsam und verringert die Verfügbarkeit aber besser als keine Lösung.

      1 Reply Last reply Reply Quote 0
      • D
        Dieter_P @Stefan341 last edited by

        @stefan341 said in Schaltproblem mit Sonoff TX Ultimate:

        Aber: beim 2Ch hatte ich auch die Regel von der Anleitung des 1Ch genommen. Da funktioniert es.

        Ah, guter Hinweis und hier steht wie es geht: https://templates.blakadder.com/sonoff_T5-2C-86.html

        rule2 On TXultimate#Action$!Touch do break
          rule2 + On TXUltimate#Channel=1 do power1 toggle endon
          rule2 + On TXUltimate#Channel=5 do power2 toggle endon
          rule2 + On TXUltimate#Channel=10 do power3 toggle endon
        
        rule2 1
        
        S 1 Reply Last reply Reply Quote 0
        • S
          Stefan341 @Dieter_P last edited by

          @dieter_p said in Schaltproblem mit Sonoff TX Ultimate:

          rule2 On TXultimate#Action$!Touch do break
            rule2 + On TXUltimate#Channel=1 do power1 toggle endon
            rule2 + On TXUltimate#Channel=5 do power2 toggle endon
            rule2 + On TXUltimate#Channel=10 do power3 toggle endon
          
          rule2 1
          

          Super. das funktioniert...

          Bei den Backlights Effects steht

            rule3 On Power1#state do Backlog Fade 0; Speed 1; scheme3 13; Delay 60; Color 040300 endon
            rule3 + On Power2#state do Backlog Fade 0; Speed 1; scheme3 10; Delay 60; Color 040300 endon
          
          

          Das müsste ich jetzt noch für Power3 haben. Das einzige was sich ändert ist ja die Angabe bei scheme3. Aber was müsste da bei dem dritten Schalter angegeben werden?

          D 1 Reply Last reply Reply Quote 0
          • D
            Dieter_P @Stefan341 last edited by

            @stefan341 said in Schaltproblem mit Sonoff TX Ultimate:

            Das müsste ich jetzt noch für Power3 haben. Das einzige was sich ändert ist ja die Angabe bei scheme3. Aber was müsste da bei dem dritten Schalter angegeben werden?

            Gute Frage. Ich sehe noch nirgendwo wie scheme3 definiert ist und was scheme3 13 oder scheme3 10 überhaupt macht.

            Wenn relay 1 geschaltet wird geht licht an und wenn relay2 dazu kommt geht licht aus?

            S 1 Reply Last reply Reply Quote 0
            • S
              Stefan341 @Dieter_P last edited by Stefan341

              @dieter_p said in Schaltproblem mit Sonoff TX Ultimate:

              Gute Frage. Ich sehe noch nirgendwo wie scheme3 definiert ist und was scheme3 13 oder scheme3 10 überhaupt macht.

              Wenn ich einen Schaltet betätige, läuft für ein paar Sekunden ein Lauflicht um den Schalter. Beim linken Schalter in rot, beim rechten in blau. Könnte es sein, dass mit scheme die Farbe des Lichtes festgelegt wird, also zb für „Farbschema“ steht?

              Wenn relay 1 geschaltet wird geht licht an und wenn relay2 dazu kommt geht licht aus?

              Gute Frage, wenn Schalter 1 Relais 1 schaltet und Schalter 2, Relais 2, dann nicht.
              Beide werden unabhängig voneinander mit dem jeweiligen Touch geschaltet.

              Ralla66 1 Reply Last reply Reply Quote 0
              • Ralla66
                Ralla66 Most Active @Stefan341 last edited by Ralla66

                @stefan341

                Light

                @Dieter_P

                der zweite Wert ist beim ESP32 eigentlich der GPIO
                Scheme3 13 ist dann Scheme3 und GPIO 13.
                3 = cycle down through colors using Speed option
                Nach Template ist GPIO 13 -> WS2812 1
                und 10 ist GPIO 10 -> None

                • Fade 0 = do not use fade (default)
                • Speed 1..40 = set fade speed from fast 1 to very slow 40
                  The Speed value represents the time in 0.5s to fade from 0 to 100%
                • Channel<x> 0..100 = set PWM channel dimmer value from 0 to 100%
                • Scheme Light effects
                  3 = cycle down through colors using Speed option
                • Color<x>
                  <value>
                  #RRGGBB = set hex color value for RGB lights

                Color 040300 dürfte Black sein

                D 1 Reply Last reply Reply Quote 0
                • D
                  Dieter_P @Ralla66 last edited by

                  @ralla66 said in Schaltproblem mit Sonoff TX Ultimate:

                  @stefan341

                  Light

                  @Dieter_P

                  der zweite Wert ist beim ESP32 eigentlich der GPIO
                  Scheme3 13 ist dann Scheme3 und GPIO 13.
                  3 = cycle down through colors using Speed option
                  Nach Template ist GPIO 13 -> WS2812 1
                  und 10 ist GPIO 10 -> None

                  Danke. Bei allen XT Ultimate (1,2,3-Gang) ist nur eine adressierbare W2812 am GPIO 13 angeschlossen. Was macht dann die 2te Zeile GPIO 10für einen Sinn aus der Beschreibung? Ich verstehe diese Vorlage der Regel nicht.

                  Ralla66 1 Reply Last reply Reply Quote 0
                  • Ralla66
                    Ralla66 Most Active @Dieter_P last edited by Ralla66

                    @dieter_p

                    keine Ahnung, teilweise schaltet man in Tasmota virtuell, um Werte zu übergeben.
                    eventuell schalte Power 1 mit den Parametern, Power 2 mache nix.

                    S 1 Reply Last reply Reply Quote 1
                    • S
                      Stefan341 @Ralla66 last edited by

                      Folgendes Problem habe ich noch:
                      Ich steuere das Backlight über folgendes Skript, nämlich so, dass das Backlight nur an ist, wenn es dunkel ist.

                      Bildschirmfoto 2024-03-08 um 21.58.45.png
                      (nicht wundern, ich habe momentan zwei von den Schaltern, darum zwei Datenpunkte)

                      Seitdem ich jetzt diese "Lauflichtbestätigung" habe wenn ein Schalter betätigt wird, wird nach dem Lauflicht das Backlight wieder angeschaltet (obwohl es durch das vorherige Skript eigentlich aus ist, es ist also Tag und hell draußen)

                      Ich habe mir gedacht, ok, dann schreibe ich eben noch ein Skript, was das Backlight eben wieder ausschaltet wenn das Lauflicht fertig ist. Herausgekommen ist folgendes:
                      Bildschirmfoto 2024-03-08 um 22.00.54.png
                      (der Timeout ist die Dauer des Lauflichts nach Betätigung der Schalter. Die Trigger sind die Schalter, da es ein 2Ch ist, also zwei Trigger. Unten der DP Set ist der DP für das Backlight).

                      Das kuriose ist, habe ich die beiden Skripte aktiv und drücke einen Schalter, lasse das Licht schalten, warte aber nicht ab bis das Lauflicht fertig ist und drücke während das Lauflicht noch läuft den zweiten Schalter, bekomme ich eine Dauerschleife.

                      Ist das letzte Skript nicht aktiv, und ich mache das Szenario nochmal, schalten beide Schalter normal, das erste Lauflicht läuft ganz normal zu Ende und das zweite folgt. So wie es sein sollte.

                      Lange Rede kurzer Sinn, wenn der Schalter nach den Lauflichtern nicht grundsätzlich das Backlight an machen würde, wäre das Problem gelöst und ich hätte ein Skript gespart... oder habe ich einen Fehler in den Skripten?

                      S 1 Reply Last reply Reply Quote 0
                      • S
                        Stefan341 @Stefan341 last edited by Stefan341

                        Nochmal zusammengefasst:

                        zuerst setzt man das Template.
                        Für einen 1Ch

                        {"NAME":"TX Ultimate 1","GPIO":[0,0,7808,0,7840,3872,0,0,0,1376,0,7776,0,0,224,3232,0,480,3200,0,0,0,3840,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1,"CMND":"Backlog Pixels 28"}
                        

                        2Ch

                        {"NAME":"TX Ultimate 2","GPIO":[0,0,7808,0,7840,3872,0,0,0,1376,0,7776,0,225,224,3232,0,480,3200,0,0,0,3840,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1,"CMND":"Backlog Pixels 28"}
                        

                        3Ch

                        {"NAME":"TX Ultimate 3","GPIO":[0,0,7808,0,7840,3872,0,0,0,1376,0,7776,0,225,224,3232,0,480,3200,0,0,0,3840,226,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1,"CMND":"Backlog Pixels 28"}
                        

                        4Ch

                        {"NAME":"TX Ultimate 4","GPIO":[0,0,7808,0,7840,3872,0,0,0,1376,0,7776,0,225,224,3232,0,480,3200,227,0,0,3840,226,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1,"CMND":"Backlog Pixels 28"}
                        

                        Danach erstelle ich unter Werkzeuge -> Dateisystem verwalten eine Datei mit dem Namen txultimate.be mit folgendem Inhalt:

                        class TXUltimate : Driver
                          static header = bytes('AA55') 
                        
                          var ser  # create serial port object
                               
                          # intialize the serial port, if unspecified Tx/Rx are GPIO 16/17
                          def init(tx, rx)
                            if !tx   tx = 19 end
                            if !rx   rx = 22 end
                            self.ser = serial(rx, tx, 115200, serial.SERIAL_8N1)
                            tasmota.add_driver(self)
                          end
                        
                          def split_55(b)
                            var ret = []
                            var s = size(b)   
                            var i = s-2   # start from last-1
                            while i > 0
                              if b[i] == 0xAA && b[i+1] == 0x55           
                                ret.push(b[i..s-1]) # push last msg to list
                                b = b[(0..i-1)]   # write the rest back to b
                              end
                              i -= 1
                            end
                            ret.push(b)
                            return ret
                          end
                        
                          def crc16(data, poly)
                            if !poly  poly = 0x1021 end
                            # CRC-16/CCITT-FALSE HASHING ALGORITHM
                            var crc = 0xFFFF
                            for i:0..size(data)-1
                              crc = crc ^ data[i] << 8
                              for j:0..7
                                if crc & 0x8000
                                  crc = (crc << 1) ^ poly
                                else
                                  crc = crc << 1
                                end
                              end
                            end
                            return crc & 0xFFFF
                          end
                        
                          def encode(payload)
                            var msg_crc = self.crc16(bytes(payload)) # calc crc
                            var b = bytes('AA55') # add header
                            b += bytes(payload) # add payload
                            b.add(msg_crc, -2)   # add calculated crc 2 bytes, big endian
                            return b
                          end
                        
                          
                          # send a string payload (needs to be a valid json string)
                          def send(payload)
                            print("TXU: Sent =", payload)
                            var payload_bin = self.encode(payload)
                            self.ser.write(payload_bin)
                            log("TXU: Sent = " + str(payload_bin), 2)
                          end
                        
                          # read serial port
                          def every_50ms()
                            if self.ser.available() > 0
                            var msg = self.ser.read()   # read bytes from serial as bytes
                            import string
                              if size(msg) > 0
                                # print("TXU: Raw =", msg)
                                if msg[0..1] == self.header
                                  var lst = self.split_55(msg)
                                  for i:0..size(lst)-1
                                    msg = lst[i]
                                    print(msg)
                                    var event = ""
                                    var params = ""
                                    if msg[3] == 0x02 # 02 signifies a touch event
                                        # print('Touch event')
                                        if msg[4] == 0x01 # data lenght 1 is a press
                                            if   msg[5] < 0x0B 
                                              event = "Short"
                                              params = ',"Channel":' + str(msg[5])
                                              print('Short press zone:', msg[5])
                                            elif msg[5] == 0x0B 
                                              event = "Multi"
                                              print('Multi press')
                                            elif msg[5] > 0x0B 
                                              event = "Long"
                                              params = ',"Channel":' + str(msg[5]-16)
                                              print('Long press zone:', msg[5])         
                                            end
                                        elif msg[4] == 0x02 # data length 3 is a release
                                            event = "Touch"
                                            params = ',"Channel":' + str(msg[6])
                                            print('Touch event:', msg[5], 'pos:', msg[6])
                                            if msg[5] != 0x00
                                              event = "Dash"
                                              params = ',"From":' + str(msg[6]) + ',"To":' + str(msg[5])
                                              print('Mini swipe channel', msg[5], '->', msg[6])
                                            end
                                            elif msg[4] == 0x03 # data lenght 1 is a swipe
                                            if msg[5] == 0x0C                     
                                                event = "Swipe right"
                                                params = ',"From":' + str(msg[6]) + ',"To":' + str(msg[7])
                                                print('Swipe left-right', msg[6], '->', msg[7])
                                            elif msg[5] == 0x0D 
                                                event = "Swipe left"
                                                params = ',"From":' + str(msg[6]) + ',"To":' + str(msg[7])
                                                print('Swipe right-left', msg[6], '->', msg[7])
                                            end
                                      end
                                    var jm = string.format("{\"TXUltimate\":{\"Action\":\"%s\"%s}}",event,params)
                                    tasmota.publish_result(jm, "RESULT") 
                                    end
                                  end
                                end
                              end      
                            end
                          end
                        end
                        
                        txu=TXUltimate()
                        

                        und damit diese Datei auch beim Start geladen wird, noch eine weitere Datei mit dem Namen autoexec.be mit dem Inhalt

                        load("txultimate.be")
                        

                        Dann geht es weiter mit den Rules. Ich lasse ganz bewusst Rule1 von dieser Seite weg, da sie bei mir ziemliches Chaos verursacht. Bei Mehrchannelschaltern werden z.b. die Channel wild durcheinander geschaltet. Außerdem habe ich bei mir das Backlight per Script geschaltet. Es schaltet sich abends an und morgens aus. Das funktioniert mit der Rule auch nicht, da es sich dann bei jedem Tastendruck an- bzw ausschaltet.

                        Damit der Touch die Relais schaltet, benutze ich folgende Rule von @Dieter_P

                        rule2 On TXultimate#Action$!Touch do break
                          rule2 + On TXUltimate#Channel=1 do power1 toggle endon
                          rule2 + On TXUltimate#Channel=<xxx> do power1 toggle endon
                          rule2 + On TXUltimate#Channel=5 do power2 toggle endon
                          rule2 + On TXUltimate#Channel=<xxx> do power2 toggle endon
                          rule2 + On TXUltimate#Channel=10 do power3 toggle endon
                          rule2 + On TXUltimate#Channel=<xxx> do power3 toggle endon
                        

                        Hier im Beispiel für einen 3Ch-Schalter. Wobei ich aber nicht einfach die Channel übernehme, sondern sie selber austeste. Da man sowieso in der Konsole ist, muss man hier nur auf das Touch an der gewünschten Stelle drücken und die Konsole gibt den Channel aus. Den übernehme ich dann in die Rule, hier gekennzeichnet mit dem <xxx>.

                        Das wars eigentlich auch schon. Der Schalter sollte nun funktionieren.

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        856
                        Online

                        32.0k
                        Users

                        80.5k
                        Topics

                        1.3m
                        Posts

                        4
                        37
                        1896
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo