Skip to content
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Sonoff RF Bridge Tasmota und Portisch 433mhz

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.2k

Sonoff RF Bridge Tasmota und Portisch 433mhz

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascriptscenesmonitoring
44 Beiträge 23 Kommentatoren 9.8k Aufrufe 22 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • sissiwupS sissiwup

    Hallo, ich habe hier ein kleines Skript geschrieben um die Sonoff Bridge komfortabel zu nutzen. Die Einrichtung ist oft beschrieben. Ich habe es mir einfach gemacht und die Bridge mit Tasmota 8.1 und Portisch fertig gekauft (für ca. 12 Euro).

    Nachdem die Bridge in euren Netz ist, installiert den sonoff adapter und verbindet die Bridget mit den Adapter. Das sollte dann so aussehen:

    Bildschirmfoto 2020-11-06 um 23.13.04.png

    Wenn die Punkte RfRaw und RFRaw_Data noch nicht da sind, dann in der Konsole von Tasmota rfraw 177 eingeben und mit einer Fernbedienung eine Taste drücken.

    Im Skript müßt ihr mindestens den Pfad zu RfRaw angeben.
    Wenn der Datenpunkt bei euch also sonoff.123.myBridge.RfRaw heißt, dann
    sonoff.123.myBridge. (mit Punkt)

    //Version 0.9 15.11.2020
    let bridgename="javascript.0.bridge.";  //speicherort der Variablen
    let sonoff="sonoff.0.Tasmota_21.";  // wo ist RfRaw und RfRaw_Data
    
    createState(bridgename+"learn",false,{type: "boolean", role: "button"});
    createState(bridgename+"counter",1000,{type: "number", role: "state"});
    createState(bridgename+"learning","off",{type: "string", role: "state"});
    createState(bridgename+"lastcode","?",{type: "string", role: "state"});
    createState(bridgename+"lastdate","?",{type: "string", role: "state"});
    createState(bridgename+"lastname","?",{type: "string", role: "state"});
    
    var counter=getState(bridgename+"counter").val;
    
    setState(bridgename+'learn',false);
    setState(bridgename+'learning',"off");
    setState(sonoff+'RfRaw',"177");
    
    on(bridgename+'learn',function(obj) {
        if (obj.state.val) {
            if (getState(bridgename+'learning').val=="off") {
                setState(sonoff+'RfRaw',"177");
                setState(bridgename+'learning',"on");
            } else {
                setState(bridgename+'learning',"off");
            }
        }
        setState(bridgename+'learn',false);
    })
    
    on(sonoff+'RfReceived_Data',function(obj){
            console.log(obj.state.val);
            setState(sonoff+'RfRaw',"177");
    
    })
    
    function attachListener() {
        setTimeout(function() { 
            $('state[id='+bridgename+'code.*.send]').on(function (id, i) {
                buttonPress(id);
            });
            $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
                nameChanged(obj);
            });
        ;}, 2000);
        setTimeout(function() { 
            $('state[id='+bridgename+'code.*.send]').on(function (id, i) {
                buttonPress(id);
            });
            $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
                nameChanged(obj);
            });
        ;}, 10000);
    }
    
    function nameChanged(obj) {
        if (obj.state.val==obj.oldState.val) {
            console.log("ALT=NEU");
            return;
        }
        var oldnam=obj.id.substr(0,obj.id.length-4);
        var nam=obj.state.val;
        var newnam=bridgename+"code."+nam+".";
        console.log(newnam);
        console.log(oldnam);
        console.log(getState(oldnam+"org"));
        createStates(newnam,nam,getState(oldnam+"org").val,getState(oldnam+"count").val,getState(oldnam+"transform").val);
        setTimeout(function() {
            deleteState(oldnam+"send");
            deleteState(oldnam+"name");
            deleteState(oldnam+"recieved");
            deleteState(oldnam+"org");
            deleteState(oldnam+"count");
            deleteState(oldnam+"transform");
            attachListener();
        },1000);
    }
    
    $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
        nameChanged(obj);
    });
    
    function buttonPress(obj) {
        if (obj.state.val==true) {
            console.log("Pressed: " + obj.id);
            setState(obj.id,false);
            var nam=obj.id.substr(0,obj.id.length-4);
            var code=getState(nam+"transform").val;
         //   console.log(code);
            setState(sonoff+'RfRaw',"177");
            setState(sonoff+'RfRaw',code);
            setState(sonoff+'RfRaw',"177");
        }
    
    }
    
    var SelectorButtons = $('state[id='+bridgename+'code.*.send]');
    SelectorButtons.each(function (id, i) {
            setState(id,false);
    });
    
    var SelectorRecieved = $('state[id='+bridgename+'code.*.org]');
    SelectorRecieved.each(function (id, i) {
            console.log("Bekannte Codes:" + getState(id).val);
    });
    
    function createStates(prefix,name,org,count,newcode) {
        // console.log("New:" + prefix + "-" +name);
            createState(prefix+"send",false,{type: "boolean", role: "button"});
            createState(prefix+"name",name,{type: "string", role: "info"});
            createState(prefix+"recieved", formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"),{type: "string", role: "state"});
            createState(prefix+"org",org,{type: "string", role: "state"});
            createState(prefix+"count",count,{type: "number", role: "state"});
            createState(prefix+"transform",newcode,{type: "string", role: "state"});
    }
    
    on(sonoff+'RfRaw_Data',function(obj){
        var code=obj.state.val;
        setState(bridgename+"lastcode",code);
        setState(bridgename+"lastdate",formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"))
        if (code=="AAA055") return;
        if (code.length<12) return;
        var elems=code.split(" ");
    
        $('state[id='+bridgename+'code.*.org]').each(function (id, i) {
            var akt=getState(id).val
            if (akt!=null) {
                akt=akt.split(" ");
                if (elems[elems.length-2]==akt[akt.length-2]) {
                    var nam=id.substr(0,id.length-3);
                    setState(nam+"count",getState(nam+"count").val+1);
                    setState(nam+"recieved", formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"));
                    var lastname=nam.substr(0,nam.length-1).split(".");
                    setState(bridgename+"lastname",lastname[lastname.length-1]);
                    //  return false;
                }
            }
        });
    
        if (getState(bridgename+'learning').val=="on") {
    //        console.log("Neu  : " + code);
            $('state[id='+bridgename+'code.*.org]').each(function (id, i) {
                var akt=getState(id).val;
                if (akt!=null) {
                    akt=akt.split(" ");
                    if (elems[elems.length-2]==akt[akt.length-2]) {
                        console.log("Code bekannt:" + id);
                        code="";
                        return false;
                    }
                }
            });
            if (code=="") return;
            console.log("Schreib:" + code);
           // return;
            counter=counter+1;
            setState(bridgename+'counter',counter);
    
            var name=bridgename+"code."+String(counter)+".";
            var laenge=2;
            var newcode="";
            for (let i=3;i<elems.length;i++) {
                newcode=newcode+" "+elems[i];
                laenge=laenge+elems[i].length;
            }
            laenge=laenge/2;
            var newcode=elems[0]+" B0 "+laenge.toString(16)+" "+elems[2]+" 08"+newcode;
            createStates(name,"unbekannt",obj.state.val,1,newcode);
            attachListener();
        } 
        
    
    })
    
    attachListener();
    schedule("*/20 * * * *", function () {
        setState(sonoff+'RfRaw',"177");
    });
    
    
    
    

    Nach dem Start seht ihr folgende Punkte:
    Bildschirmfoto 2020-11-06 um 23.18.28.png
    (code ist bei euch noch leer, also nich sichtbar).

    Wenn ihr auf learn drückt, dann startet ihr den Lernmodus:
    Bildschirmfoto 2020-11-06 um 23.20.49.png

    nochmal auf learn, oder Skipt neu starten, geht wieder in den normalen Modus.

    Bildschirmfoto 2020-11-06 um 23.21.37.png

    Oben seht ihr, dass ich 2 Tasten angelernt habe.

    • count=wie oft wurde die Fernbedienung gedrückt.
    • name=Name der Taste
    • org=Aufgezeichneter Code
    • recieved=wann das letzte mal empfangen
    • send=Code über sonoff Bridge senden
    • transform=für Portisch umgerechnete code (falls das mit euren nicht geht, hier den von der Website umgerechneten eintragen)

    Wenn man sich nicht sicher ist, welche Taste welche war, einfach im "Nicht-Lernmodus" Taste drücken. Dann wird count und recieved upgedatet.

    Um die Codes einfacher in Skripten etc. verwenden zu können, kann man in name die Bezeichnung des codes eingeben (keine Leerzeichen, Sonderzeichen etc).

    Dann benennt er den Zweig entsprechend um:

    Bildschirmfoto 2020-11-06 um 23.29.16.png
    (habe mich doch für deutsch entschieden FB_1_an)
    Bildschirmfoto 2020-11-06 um 23.31.47.png

    Solle bei vielen Anlernvorgängen das umbenennen haken, einfach das Skript neu starten.

    Viel Spaß damit, wie man sicher sieht ist JS nicht meine erste Programmiersprache, aber es läuft...

    M Offline
    M Offline
    Mike Hellracer
    schrieb am zuletzt editiert von Mike Hellracer
    #26

    @sissiwup
    Hi,
    sorry, aber ich habe auf dem Schlauch gestanden. jetzt funktioniert alles wie gewünscht. Ein Frage habe ich noch. Kann ich mit deinem Script so viele Schalter wie ich will anllegen?

    1 Antwort Letzte Antwort
    0
    • sissiwupS sissiwup

      Hallo, ich habe hier ein kleines Skript geschrieben um die Sonoff Bridge komfortabel zu nutzen. Die Einrichtung ist oft beschrieben. Ich habe es mir einfach gemacht und die Bridge mit Tasmota 8.1 und Portisch fertig gekauft (für ca. 12 Euro).

      Nachdem die Bridge in euren Netz ist, installiert den sonoff adapter und verbindet die Bridget mit den Adapter. Das sollte dann so aussehen:

      Bildschirmfoto 2020-11-06 um 23.13.04.png

      Wenn die Punkte RfRaw und RFRaw_Data noch nicht da sind, dann in der Konsole von Tasmota rfraw 177 eingeben und mit einer Fernbedienung eine Taste drücken.

      Im Skript müßt ihr mindestens den Pfad zu RfRaw angeben.
      Wenn der Datenpunkt bei euch also sonoff.123.myBridge.RfRaw heißt, dann
      sonoff.123.myBridge. (mit Punkt)

      //Version 0.9 15.11.2020
      let bridgename="javascript.0.bridge.";  //speicherort der Variablen
      let sonoff="sonoff.0.Tasmota_21.";  // wo ist RfRaw und RfRaw_Data
      
      createState(bridgename+"learn",false,{type: "boolean", role: "button"});
      createState(bridgename+"counter",1000,{type: "number", role: "state"});
      createState(bridgename+"learning","off",{type: "string", role: "state"});
      createState(bridgename+"lastcode","?",{type: "string", role: "state"});
      createState(bridgename+"lastdate","?",{type: "string", role: "state"});
      createState(bridgename+"lastname","?",{type: "string", role: "state"});
      
      var counter=getState(bridgename+"counter").val;
      
      setState(bridgename+'learn',false);
      setState(bridgename+'learning',"off");
      setState(sonoff+'RfRaw',"177");
      
      on(bridgename+'learn',function(obj) {
          if (obj.state.val) {
              if (getState(bridgename+'learning').val=="off") {
                  setState(sonoff+'RfRaw',"177");
                  setState(bridgename+'learning',"on");
              } else {
                  setState(bridgename+'learning',"off");
              }
          }
          setState(bridgename+'learn',false);
      })
      
      on(sonoff+'RfReceived_Data',function(obj){
              console.log(obj.state.val);
              setState(sonoff+'RfRaw',"177");
      
      })
      
      function attachListener() {
          setTimeout(function() { 
              $('state[id='+bridgename+'code.*.send]').on(function (id, i) {
                  buttonPress(id);
              });
              $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
                  nameChanged(obj);
              });
          ;}, 2000);
          setTimeout(function() { 
              $('state[id='+bridgename+'code.*.send]').on(function (id, i) {
                  buttonPress(id);
              });
              $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
                  nameChanged(obj);
              });
          ;}, 10000);
      }
      
      function nameChanged(obj) {
          if (obj.state.val==obj.oldState.val) {
              console.log("ALT=NEU");
              return;
          }
          var oldnam=obj.id.substr(0,obj.id.length-4);
          var nam=obj.state.val;
          var newnam=bridgename+"code."+nam+".";
          console.log(newnam);
          console.log(oldnam);
          console.log(getState(oldnam+"org"));
          createStates(newnam,nam,getState(oldnam+"org").val,getState(oldnam+"count").val,getState(oldnam+"transform").val);
          setTimeout(function() {
              deleteState(oldnam+"send");
              deleteState(oldnam+"name");
              deleteState(oldnam+"recieved");
              deleteState(oldnam+"org");
              deleteState(oldnam+"count");
              deleteState(oldnam+"transform");
              attachListener();
          },1000);
      }
      
      $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
          nameChanged(obj);
      });
      
      function buttonPress(obj) {
          if (obj.state.val==true) {
              console.log("Pressed: " + obj.id);
              setState(obj.id,false);
              var nam=obj.id.substr(0,obj.id.length-4);
              var code=getState(nam+"transform").val;
           //   console.log(code);
              setState(sonoff+'RfRaw',"177");
              setState(sonoff+'RfRaw',code);
              setState(sonoff+'RfRaw',"177");
          }
      
      }
      
      var SelectorButtons = $('state[id='+bridgename+'code.*.send]');
      SelectorButtons.each(function (id, i) {
              setState(id,false);
      });
      
      var SelectorRecieved = $('state[id='+bridgename+'code.*.org]');
      SelectorRecieved.each(function (id, i) {
              console.log("Bekannte Codes:" + getState(id).val);
      });
      
      function createStates(prefix,name,org,count,newcode) {
          // console.log("New:" + prefix + "-" +name);
              createState(prefix+"send",false,{type: "boolean", role: "button"});
              createState(prefix+"name",name,{type: "string", role: "info"});
              createState(prefix+"recieved", formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"),{type: "string", role: "state"});
              createState(prefix+"org",org,{type: "string", role: "state"});
              createState(prefix+"count",count,{type: "number", role: "state"});
              createState(prefix+"transform",newcode,{type: "string", role: "state"});
      }
      
      on(sonoff+'RfRaw_Data',function(obj){
          var code=obj.state.val;
          setState(bridgename+"lastcode",code);
          setState(bridgename+"lastdate",formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"))
          if (code=="AAA055") return;
          if (code.length<12) return;
          var elems=code.split(" ");
      
          $('state[id='+bridgename+'code.*.org]').each(function (id, i) {
              var akt=getState(id).val
              if (akt!=null) {
                  akt=akt.split(" ");
                  if (elems[elems.length-2]==akt[akt.length-2]) {
                      var nam=id.substr(0,id.length-3);
                      setState(nam+"count",getState(nam+"count").val+1);
                      setState(nam+"recieved", formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"));
                      var lastname=nam.substr(0,nam.length-1).split(".");
                      setState(bridgename+"lastname",lastname[lastname.length-1]);
                      //  return false;
                  }
              }
          });
      
          if (getState(bridgename+'learning').val=="on") {
      //        console.log("Neu  : " + code);
              $('state[id='+bridgename+'code.*.org]').each(function (id, i) {
                  var akt=getState(id).val;
                  if (akt!=null) {
                      akt=akt.split(" ");
                      if (elems[elems.length-2]==akt[akt.length-2]) {
                          console.log("Code bekannt:" + id);
                          code="";
                          return false;
                      }
                  }
              });
              if (code=="") return;
              console.log("Schreib:" + code);
             // return;
              counter=counter+1;
              setState(bridgename+'counter',counter);
      
              var name=bridgename+"code."+String(counter)+".";
              var laenge=2;
              var newcode="";
              for (let i=3;i<elems.length;i++) {
                  newcode=newcode+" "+elems[i];
                  laenge=laenge+elems[i].length;
              }
              laenge=laenge/2;
              var newcode=elems[0]+" B0 "+laenge.toString(16)+" "+elems[2]+" 08"+newcode;
              createStates(name,"unbekannt",obj.state.val,1,newcode);
              attachListener();
          } 
          
      
      })
      
      attachListener();
      schedule("*/20 * * * *", function () {
          setState(sonoff+'RfRaw',"177");
      });
      
      
      
      

      Nach dem Start seht ihr folgende Punkte:
      Bildschirmfoto 2020-11-06 um 23.18.28.png
      (code ist bei euch noch leer, also nich sichtbar).

      Wenn ihr auf learn drückt, dann startet ihr den Lernmodus:
      Bildschirmfoto 2020-11-06 um 23.20.49.png

      nochmal auf learn, oder Skipt neu starten, geht wieder in den normalen Modus.

      Bildschirmfoto 2020-11-06 um 23.21.37.png

      Oben seht ihr, dass ich 2 Tasten angelernt habe.

      • count=wie oft wurde die Fernbedienung gedrückt.
      • name=Name der Taste
      • org=Aufgezeichneter Code
      • recieved=wann das letzte mal empfangen
      • send=Code über sonoff Bridge senden
      • transform=für Portisch umgerechnete code (falls das mit euren nicht geht, hier den von der Website umgerechneten eintragen)

      Wenn man sich nicht sicher ist, welche Taste welche war, einfach im "Nicht-Lernmodus" Taste drücken. Dann wird count und recieved upgedatet.

      Um die Codes einfacher in Skripten etc. verwenden zu können, kann man in name die Bezeichnung des codes eingeben (keine Leerzeichen, Sonderzeichen etc).

      Dann benennt er den Zweig entsprechend um:

      Bildschirmfoto 2020-11-06 um 23.29.16.png
      (habe mich doch für deutsch entschieden FB_1_an)
      Bildschirmfoto 2020-11-06 um 23.31.47.png

      Solle bei vielen Anlernvorgängen das umbenennen haken, einfach das Skript neu starten.

      Viel Spaß damit, wie man sicher sieht ist JS nicht meine erste Programmiersprache, aber es läuft...

      K Offline
      K Offline
      kleinfritzchen
      schrieb am zuletzt editiert von
      #27

      @sissiwup Hallo, der Script ist gut aber in der Form für mich nicht so ganz passend. Ich möchte gern Fenster oder Tür Sensoren auslesen. Das funktioniert auch mit rfraw 177 soweit, jjedoch bekomme ich als Ergebnis einen Datenstring der selten gleich ist.
      Bildschirmfoto zu 2021-11-23 11-06-41.png
      Die markierten Teile des Datenstrings sind gleich aber halt nicht der gesamte String. Die gelben Werte sind für das schliesen des Kontaktes und die Werte unmittelbar darunter für das öffnen. Es passiert allepaar mal betätigen das der Code auch mal vollständig gleich ist aber das ist leider nicht immer so. Nur der hier ausgewählte Bereich ist passend und würde für eine Auswertung taugen. Kann mir mal jemand helfen den Script um zu schreiben damit das funktioniert ? Ich hab leider noch keine Ahnung von JScript.
      MfG Fritz

      S 1 Antwort Letzte Antwort
      0
      • sissiwupS sissiwup

        Hallo, ich habe hier ein kleines Skript geschrieben um die Sonoff Bridge komfortabel zu nutzen. Die Einrichtung ist oft beschrieben. Ich habe es mir einfach gemacht und die Bridge mit Tasmota 8.1 und Portisch fertig gekauft (für ca. 12 Euro).

        Nachdem die Bridge in euren Netz ist, installiert den sonoff adapter und verbindet die Bridget mit den Adapter. Das sollte dann so aussehen:

        Bildschirmfoto 2020-11-06 um 23.13.04.png

        Wenn die Punkte RfRaw und RFRaw_Data noch nicht da sind, dann in der Konsole von Tasmota rfraw 177 eingeben und mit einer Fernbedienung eine Taste drücken.

        Im Skript müßt ihr mindestens den Pfad zu RfRaw angeben.
        Wenn der Datenpunkt bei euch also sonoff.123.myBridge.RfRaw heißt, dann
        sonoff.123.myBridge. (mit Punkt)

        //Version 0.9 15.11.2020
        let bridgename="javascript.0.bridge.";  //speicherort der Variablen
        let sonoff="sonoff.0.Tasmota_21.";  // wo ist RfRaw und RfRaw_Data
        
        createState(bridgename+"learn",false,{type: "boolean", role: "button"});
        createState(bridgename+"counter",1000,{type: "number", role: "state"});
        createState(bridgename+"learning","off",{type: "string", role: "state"});
        createState(bridgename+"lastcode","?",{type: "string", role: "state"});
        createState(bridgename+"lastdate","?",{type: "string", role: "state"});
        createState(bridgename+"lastname","?",{type: "string", role: "state"});
        
        var counter=getState(bridgename+"counter").val;
        
        setState(bridgename+'learn',false);
        setState(bridgename+'learning',"off");
        setState(sonoff+'RfRaw',"177");
        
        on(bridgename+'learn',function(obj) {
            if (obj.state.val) {
                if (getState(bridgename+'learning').val=="off") {
                    setState(sonoff+'RfRaw',"177");
                    setState(bridgename+'learning',"on");
                } else {
                    setState(bridgename+'learning',"off");
                }
            }
            setState(bridgename+'learn',false);
        })
        
        on(sonoff+'RfReceived_Data',function(obj){
                console.log(obj.state.val);
                setState(sonoff+'RfRaw',"177");
        
        })
        
        function attachListener() {
            setTimeout(function() { 
                $('state[id='+bridgename+'code.*.send]').on(function (id, i) {
                    buttonPress(id);
                });
                $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
                    nameChanged(obj);
                });
            ;}, 2000);
            setTimeout(function() { 
                $('state[id='+bridgename+'code.*.send]').on(function (id, i) {
                    buttonPress(id);
                });
                $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
                    nameChanged(obj);
                });
            ;}, 10000);
        }
        
        function nameChanged(obj) {
            if (obj.state.val==obj.oldState.val) {
                console.log("ALT=NEU");
                return;
            }
            var oldnam=obj.id.substr(0,obj.id.length-4);
            var nam=obj.state.val;
            var newnam=bridgename+"code."+nam+".";
            console.log(newnam);
            console.log(oldnam);
            console.log(getState(oldnam+"org"));
            createStates(newnam,nam,getState(oldnam+"org").val,getState(oldnam+"count").val,getState(oldnam+"transform").val);
            setTimeout(function() {
                deleteState(oldnam+"send");
                deleteState(oldnam+"name");
                deleteState(oldnam+"recieved");
                deleteState(oldnam+"org");
                deleteState(oldnam+"count");
                deleteState(oldnam+"transform");
                attachListener();
            },1000);
        }
        
        $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
            nameChanged(obj);
        });
        
        function buttonPress(obj) {
            if (obj.state.val==true) {
                console.log("Pressed: " + obj.id);
                setState(obj.id,false);
                var nam=obj.id.substr(0,obj.id.length-4);
                var code=getState(nam+"transform").val;
             //   console.log(code);
                setState(sonoff+'RfRaw',"177");
                setState(sonoff+'RfRaw',code);
                setState(sonoff+'RfRaw',"177");
            }
        
        }
        
        var SelectorButtons = $('state[id='+bridgename+'code.*.send]');
        SelectorButtons.each(function (id, i) {
                setState(id,false);
        });
        
        var SelectorRecieved = $('state[id='+bridgename+'code.*.org]');
        SelectorRecieved.each(function (id, i) {
                console.log("Bekannte Codes:" + getState(id).val);
        });
        
        function createStates(prefix,name,org,count,newcode) {
            // console.log("New:" + prefix + "-" +name);
                createState(prefix+"send",false,{type: "boolean", role: "button"});
                createState(prefix+"name",name,{type: "string", role: "info"});
                createState(prefix+"recieved", formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"),{type: "string", role: "state"});
                createState(prefix+"org",org,{type: "string", role: "state"});
                createState(prefix+"count",count,{type: "number", role: "state"});
                createState(prefix+"transform",newcode,{type: "string", role: "state"});
        }
        
        on(sonoff+'RfRaw_Data',function(obj){
            var code=obj.state.val;
            setState(bridgename+"lastcode",code);
            setState(bridgename+"lastdate",formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"))
            if (code=="AAA055") return;
            if (code.length<12) return;
            var elems=code.split(" ");
        
            $('state[id='+bridgename+'code.*.org]').each(function (id, i) {
                var akt=getState(id).val
                if (akt!=null) {
                    akt=akt.split(" ");
                    if (elems[elems.length-2]==akt[akt.length-2]) {
                        var nam=id.substr(0,id.length-3);
                        setState(nam+"count",getState(nam+"count").val+1);
                        setState(nam+"recieved", formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"));
                        var lastname=nam.substr(0,nam.length-1).split(".");
                        setState(bridgename+"lastname",lastname[lastname.length-1]);
                        //  return false;
                    }
                }
            });
        
            if (getState(bridgename+'learning').val=="on") {
        //        console.log("Neu  : " + code);
                $('state[id='+bridgename+'code.*.org]').each(function (id, i) {
                    var akt=getState(id).val;
                    if (akt!=null) {
                        akt=akt.split(" ");
                        if (elems[elems.length-2]==akt[akt.length-2]) {
                            console.log("Code bekannt:" + id);
                            code="";
                            return false;
                        }
                    }
                });
                if (code=="") return;
                console.log("Schreib:" + code);
               // return;
                counter=counter+1;
                setState(bridgename+'counter',counter);
        
                var name=bridgename+"code."+String(counter)+".";
                var laenge=2;
                var newcode="";
                for (let i=3;i<elems.length;i++) {
                    newcode=newcode+" "+elems[i];
                    laenge=laenge+elems[i].length;
                }
                laenge=laenge/2;
                var newcode=elems[0]+" B0 "+laenge.toString(16)+" "+elems[2]+" 08"+newcode;
                createStates(name,"unbekannt",obj.state.val,1,newcode);
                attachListener();
            } 
            
        
        })
        
        attachListener();
        schedule("*/20 * * * *", function () {
            setState(sonoff+'RfRaw',"177");
        });
        
        
        
        

        Nach dem Start seht ihr folgende Punkte:
        Bildschirmfoto 2020-11-06 um 23.18.28.png
        (code ist bei euch noch leer, also nich sichtbar).

        Wenn ihr auf learn drückt, dann startet ihr den Lernmodus:
        Bildschirmfoto 2020-11-06 um 23.20.49.png

        nochmal auf learn, oder Skipt neu starten, geht wieder in den normalen Modus.

        Bildschirmfoto 2020-11-06 um 23.21.37.png

        Oben seht ihr, dass ich 2 Tasten angelernt habe.

        • count=wie oft wurde die Fernbedienung gedrückt.
        • name=Name der Taste
        • org=Aufgezeichneter Code
        • recieved=wann das letzte mal empfangen
        • send=Code über sonoff Bridge senden
        • transform=für Portisch umgerechnete code (falls das mit euren nicht geht, hier den von der Website umgerechneten eintragen)

        Wenn man sich nicht sicher ist, welche Taste welche war, einfach im "Nicht-Lernmodus" Taste drücken. Dann wird count und recieved upgedatet.

        Um die Codes einfacher in Skripten etc. verwenden zu können, kann man in name die Bezeichnung des codes eingeben (keine Leerzeichen, Sonderzeichen etc).

        Dann benennt er den Zweig entsprechend um:

        Bildschirmfoto 2020-11-06 um 23.29.16.png
        (habe mich doch für deutsch entschieden FB_1_an)
        Bildschirmfoto 2020-11-06 um 23.31.47.png

        Solle bei vielen Anlernvorgängen das umbenennen haken, einfach das Skript neu starten.

        Viel Spaß damit, wie man sicher sieht ist JS nicht meine erste Programmiersprache, aber es läuft...

        M Offline
        M Offline
        Mike Hellracer
        schrieb am zuletzt editiert von Mike Hellracer
        #28

        @sissiwup
        Hi,
        ich habe noch ein kleines Problem...
        Über ein Gruppe versuche ich 6 Intertechno Steckdosen zu schalten.
        Aber es wird jede 3te nicht ausgelöst.
        Wenn ich die Reihenfolge ändere isind es zwar andere, aber es ist wieder jede 3te.
        Einzeln funktioniert das wunderbar.
        Auch wenn ich 3 Gruppen a 2 Stück mache funktioniert es problemlos.
        Ich habe nun den Verdacht, dass das Script beim Senden ein wenig zu schnell ist.
        Könnte man hier ein Delay für das Abarbeiten der Befehle einbauen?
        Oder gibt es dass schon und ich muss es nur ein wenig erhöhen.
        Dann wäre ich froh, wenn mir einer sagen kann welchen Wert ich anpassen muss.

        1 Antwort Letzte Antwort
        0
        • sissiwupS sissiwup

          Hallo, ich habe hier ein kleines Skript geschrieben um die Sonoff Bridge komfortabel zu nutzen. Die Einrichtung ist oft beschrieben. Ich habe es mir einfach gemacht und die Bridge mit Tasmota 8.1 und Portisch fertig gekauft (für ca. 12 Euro).

          Nachdem die Bridge in euren Netz ist, installiert den sonoff adapter und verbindet die Bridget mit den Adapter. Das sollte dann so aussehen:

          Bildschirmfoto 2020-11-06 um 23.13.04.png

          Wenn die Punkte RfRaw und RFRaw_Data noch nicht da sind, dann in der Konsole von Tasmota rfraw 177 eingeben und mit einer Fernbedienung eine Taste drücken.

          Im Skript müßt ihr mindestens den Pfad zu RfRaw angeben.
          Wenn der Datenpunkt bei euch also sonoff.123.myBridge.RfRaw heißt, dann
          sonoff.123.myBridge. (mit Punkt)

          //Version 0.9 15.11.2020
          let bridgename="javascript.0.bridge.";  //speicherort der Variablen
          let sonoff="sonoff.0.Tasmota_21.";  // wo ist RfRaw und RfRaw_Data
          
          createState(bridgename+"learn",false,{type: "boolean", role: "button"});
          createState(bridgename+"counter",1000,{type: "number", role: "state"});
          createState(bridgename+"learning","off",{type: "string", role: "state"});
          createState(bridgename+"lastcode","?",{type: "string", role: "state"});
          createState(bridgename+"lastdate","?",{type: "string", role: "state"});
          createState(bridgename+"lastname","?",{type: "string", role: "state"});
          
          var counter=getState(bridgename+"counter").val;
          
          setState(bridgename+'learn',false);
          setState(bridgename+'learning',"off");
          setState(sonoff+'RfRaw',"177");
          
          on(bridgename+'learn',function(obj) {
              if (obj.state.val) {
                  if (getState(bridgename+'learning').val=="off") {
                      setState(sonoff+'RfRaw',"177");
                      setState(bridgename+'learning',"on");
                  } else {
                      setState(bridgename+'learning',"off");
                  }
              }
              setState(bridgename+'learn',false);
          })
          
          on(sonoff+'RfReceived_Data',function(obj){
                  console.log(obj.state.val);
                  setState(sonoff+'RfRaw',"177");
          
          })
          
          function attachListener() {
              setTimeout(function() { 
                  $('state[id='+bridgename+'code.*.send]').on(function (id, i) {
                      buttonPress(id);
                  });
                  $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
                      nameChanged(obj);
                  });
              ;}, 2000);
              setTimeout(function() { 
                  $('state[id='+bridgename+'code.*.send]').on(function (id, i) {
                      buttonPress(id);
                  });
                  $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
                      nameChanged(obj);
                  });
              ;}, 10000);
          }
          
          function nameChanged(obj) {
              if (obj.state.val==obj.oldState.val) {
                  console.log("ALT=NEU");
                  return;
              }
              var oldnam=obj.id.substr(0,obj.id.length-4);
              var nam=obj.state.val;
              var newnam=bridgename+"code."+nam+".";
              console.log(newnam);
              console.log(oldnam);
              console.log(getState(oldnam+"org"));
              createStates(newnam,nam,getState(oldnam+"org").val,getState(oldnam+"count").val,getState(oldnam+"transform").val);
              setTimeout(function() {
                  deleteState(oldnam+"send");
                  deleteState(oldnam+"name");
                  deleteState(oldnam+"recieved");
                  deleteState(oldnam+"org");
                  deleteState(oldnam+"count");
                  deleteState(oldnam+"transform");
                  attachListener();
              },1000);
          }
          
          $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
              nameChanged(obj);
          });
          
          function buttonPress(obj) {
              if (obj.state.val==true) {
                  console.log("Pressed: " + obj.id);
                  setState(obj.id,false);
                  var nam=obj.id.substr(0,obj.id.length-4);
                  var code=getState(nam+"transform").val;
               //   console.log(code);
                  setState(sonoff+'RfRaw',"177");
                  setState(sonoff+'RfRaw',code);
                  setState(sonoff+'RfRaw',"177");
              }
          
          }
          
          var SelectorButtons = $('state[id='+bridgename+'code.*.send]');
          SelectorButtons.each(function (id, i) {
                  setState(id,false);
          });
          
          var SelectorRecieved = $('state[id='+bridgename+'code.*.org]');
          SelectorRecieved.each(function (id, i) {
                  console.log("Bekannte Codes:" + getState(id).val);
          });
          
          function createStates(prefix,name,org,count,newcode) {
              // console.log("New:" + prefix + "-" +name);
                  createState(prefix+"send",false,{type: "boolean", role: "button"});
                  createState(prefix+"name",name,{type: "string", role: "info"});
                  createState(prefix+"recieved", formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"),{type: "string", role: "state"});
                  createState(prefix+"org",org,{type: "string", role: "state"});
                  createState(prefix+"count",count,{type: "number", role: "state"});
                  createState(prefix+"transform",newcode,{type: "string", role: "state"});
          }
          
          on(sonoff+'RfRaw_Data',function(obj){
              var code=obj.state.val;
              setState(bridgename+"lastcode",code);
              setState(bridgename+"lastdate",formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"))
              if (code=="AAA055") return;
              if (code.length<12) return;
              var elems=code.split(" ");
          
              $('state[id='+bridgename+'code.*.org]').each(function (id, i) {
                  var akt=getState(id).val
                  if (akt!=null) {
                      akt=akt.split(" ");
                      if (elems[elems.length-2]==akt[akt.length-2]) {
                          var nam=id.substr(0,id.length-3);
                          setState(nam+"count",getState(nam+"count").val+1);
                          setState(nam+"recieved", formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"));
                          var lastname=nam.substr(0,nam.length-1).split(".");
                          setState(bridgename+"lastname",lastname[lastname.length-1]);
                          //  return false;
                      }
                  }
              });
          
              if (getState(bridgename+'learning').val=="on") {
          //        console.log("Neu  : " + code);
                  $('state[id='+bridgename+'code.*.org]').each(function (id, i) {
                      var akt=getState(id).val;
                      if (akt!=null) {
                          akt=akt.split(" ");
                          if (elems[elems.length-2]==akt[akt.length-2]) {
                              console.log("Code bekannt:" + id);
                              code="";
                              return false;
                          }
                      }
                  });
                  if (code=="") return;
                  console.log("Schreib:" + code);
                 // return;
                  counter=counter+1;
                  setState(bridgename+'counter',counter);
          
                  var name=bridgename+"code."+String(counter)+".";
                  var laenge=2;
                  var newcode="";
                  for (let i=3;i<elems.length;i++) {
                      newcode=newcode+" "+elems[i];
                      laenge=laenge+elems[i].length;
                  }
                  laenge=laenge/2;
                  var newcode=elems[0]+" B0 "+laenge.toString(16)+" "+elems[2]+" 08"+newcode;
                  createStates(name,"unbekannt",obj.state.val,1,newcode);
                  attachListener();
              } 
              
          
          })
          
          attachListener();
          schedule("*/20 * * * *", function () {
              setState(sonoff+'RfRaw',"177");
          });
          
          
          
          

          Nach dem Start seht ihr folgende Punkte:
          Bildschirmfoto 2020-11-06 um 23.18.28.png
          (code ist bei euch noch leer, also nich sichtbar).

          Wenn ihr auf learn drückt, dann startet ihr den Lernmodus:
          Bildschirmfoto 2020-11-06 um 23.20.49.png

          nochmal auf learn, oder Skipt neu starten, geht wieder in den normalen Modus.

          Bildschirmfoto 2020-11-06 um 23.21.37.png

          Oben seht ihr, dass ich 2 Tasten angelernt habe.

          • count=wie oft wurde die Fernbedienung gedrückt.
          • name=Name der Taste
          • org=Aufgezeichneter Code
          • recieved=wann das letzte mal empfangen
          • send=Code über sonoff Bridge senden
          • transform=für Portisch umgerechnete code (falls das mit euren nicht geht, hier den von der Website umgerechneten eintragen)

          Wenn man sich nicht sicher ist, welche Taste welche war, einfach im "Nicht-Lernmodus" Taste drücken. Dann wird count und recieved upgedatet.

          Um die Codes einfacher in Skripten etc. verwenden zu können, kann man in name die Bezeichnung des codes eingeben (keine Leerzeichen, Sonderzeichen etc).

          Dann benennt er den Zweig entsprechend um:

          Bildschirmfoto 2020-11-06 um 23.29.16.png
          (habe mich doch für deutsch entschieden FB_1_an)
          Bildschirmfoto 2020-11-06 um 23.31.47.png

          Solle bei vielen Anlernvorgängen das umbenennen haken, einfach das Skript neu starten.

          Viel Spaß damit, wie man sicher sieht ist JS nicht meine erste Programmiersprache, aber es läuft...

          D Offline
          D Offline
          dragricola
          schrieb am zuletzt editiert von
          #29

          @sissiwup
          Vielen Dank für das Skript und die gute Beschreibung. Es hat auf Anhieb recht gut funktioniert. Ich habe nun bereits eine ganze Menge RfRaw-Codes auf einer meiner RF-Bridges angelernt: bisher 61 Codes, weiter sollen folgen. Nun habe ich noch eine zweite RF-Bridge in Betrieb, da ich damit in unserem Haus die Reichweite über mehrere Etagen sicherstellen möchte. Sie sollen beide auf die gleichen Codes reagieren. Da das Anlernen ganz schön zeitaufwändig ist, suche ich eine schnelle Lösung um weitere Bridges einzubinden und dabei das recht aufwendige Anlernen der Codes irgendwie zu sparen. Ich habe deshalb das Skript dupliziert und den Speicherort "bridgename" und den Objektname der Bridge "sonoff" im Script abgeändert. Ein erster Versuch den Objektbaum Code in den neuen Speicherort für die zweite Bridge zu kopieren hat nur den Objektbaum kopiert, nicht aber die Werte. Ich hatte den Objektbaum der ersten Bridge zu diesem Zweck als json-Datei heruntergeladen und in der json-Datei überall den Speicherort aktualisiert und die so abgeänderte json-Datei wieder importiert. Wie kann ich auch die Werte kopieren? Oder können beide Skripte auf den gleichen Speicherort bridgename arbeiten? Oder können überhaupt die beiden Skripte unabhängig voneinander laufen?
          Über Hinweise zur Lösungsfindung würde ich mich freuen.

          1 Antwort Letzte Antwort
          0
          • K kleinfritzchen

            @sissiwup Hallo, der Script ist gut aber in der Form für mich nicht so ganz passend. Ich möchte gern Fenster oder Tür Sensoren auslesen. Das funktioniert auch mit rfraw 177 soweit, jjedoch bekomme ich als Ergebnis einen Datenstring der selten gleich ist.
            Bildschirmfoto zu 2021-11-23 11-06-41.png
            Die markierten Teile des Datenstrings sind gleich aber halt nicht der gesamte String. Die gelben Werte sind für das schliesen des Kontaktes und die Werte unmittelbar darunter für das öffnen. Es passiert allepaar mal betätigen das der Code auch mal vollständig gleich ist aber das ist leider nicht immer so. Nur der hier ausgewählte Bereich ist passend und würde für eine Auswertung taugen. Kann mir mal jemand helfen den Script um zu schreiben damit das funktioniert ? Ich hab leider noch keine Ahnung von JScript.
            MfG Fritz

            S Offline
            S Offline
            Stefan_TR96
            schrieb am zuletzt editiert von
            #30

            @kleinfritzchen Hast du hierfür bereits eine Lösung gefunden? habe ein ähnliches Problem mit 433mhz Rauchmeldern vom Discounter. Diese sind in "unwichtigeren" Bereichen verbaut und untereinander vernetzt. bei mir sieht der output wie folgt aus:

            18:04:02 MQT: tele/tasmota_4A04C3/RESULT = {"Time":"2022-07-13T18:04:02","RfRaw":{"Data":"AA B1 04 1FE0 0370 0A96 39EE 3819192929192919292919191919291929291929192929292919 55"}}
            18:04:03 MQT: tele/tasmota_4A04C3/RESULT = {"Time":"2022-07-13T18:04:03","RfRaw":{"Data":"AA B1 04 1FEA 0366 0A8C 385E 3819192929192919292919191919291929291929192929292919 55"}}
            18:04:04 MQT: tele/tasmota_4A04C3/RESULT = {"Time":"2022-07-13T18:04:04","RfRaw":{"Data":"AA B1 04 1FF4 035C 0A8C 3840 3819192929192919292919191919291929291929192929292919 55"}}
            18:04:05 MQT: tele/tasmota_4A04C3/RESULT = {"Time":"2022-07-13T18:04:05","RfRaw":{"Data":"AA B1 04 1FF4 035C 0A8C 3840 3819192929192919292919191919291929291929192929292919 55"}}
            18:04:06 MQT: tele/tasmota_4A04C3/RESULT = {"Time":"2022-07-13T18:04:06","RfRaw":{"Data":"AA B1 04 1FF4 035C 0A8C 3836 3819192929192919292919191919291929291929192929292919 55"}}
            18:04:07 MQT: tele/tasmota_4A04C3/RESULT = {"Time":"2022-07-13T18:04:07","RfRaw":{"Data":"AA B1 04 1FF4 0366 0A8C 3840 3819192929192919292919191919291929291929192929292919 55"}}
            18:04:08 MQT: tele/tasmota_4A04C3/RESULT = {"Time":"2022-07-13T18:04:08","RfRaw":{"Data":"AA B1 04 1FF4 0366 0A8C 387C 3819192929192919292919191919291929291929192929292919 55"}}
            18:04:08 MQT: tele/tasmota_4A04C3/RESULT = {"Time":"2022-07-13T18:04:08","RfRaw":{"Data":"AA B1 04 1FF4 0366 0A8C 3840 3819192929192919292919191919291929291929192929292919 55"}}
            

            Bei der Lernfunktion legt mir das Script gleich mal 10 Datenpunkte an. Wenn ich den mit dem höchsten Counter hernehme und als Trigger nutze funktioniert die Steuerung eines Ereignisses problemlos, ein paar Minuten später wieder nicht mehr. Dann löst plötzlich 2 Minuten später wieder der Trigger aus ohne das einen Rauchalarm gibt. Ist es möglich, dass andere 433mhz Geräte von Nachbarn die Signale verfälschen, bei mir sind nämlich außer den Rauchmeldern keine Sender im Einsatz.
            Hat irgendjemand eine Idee bzw. einen Lösungsvorschlag?

            LG
            S

            1 Antwort Letzte Antwort
            0
            • sissiwupS sissiwup

              Hallo, ich habe hier ein kleines Skript geschrieben um die Sonoff Bridge komfortabel zu nutzen. Die Einrichtung ist oft beschrieben. Ich habe es mir einfach gemacht und die Bridge mit Tasmota 8.1 und Portisch fertig gekauft (für ca. 12 Euro).

              Nachdem die Bridge in euren Netz ist, installiert den sonoff adapter und verbindet die Bridget mit den Adapter. Das sollte dann so aussehen:

              Bildschirmfoto 2020-11-06 um 23.13.04.png

              Wenn die Punkte RfRaw und RFRaw_Data noch nicht da sind, dann in der Konsole von Tasmota rfraw 177 eingeben und mit einer Fernbedienung eine Taste drücken.

              Im Skript müßt ihr mindestens den Pfad zu RfRaw angeben.
              Wenn der Datenpunkt bei euch also sonoff.123.myBridge.RfRaw heißt, dann
              sonoff.123.myBridge. (mit Punkt)

              //Version 0.9 15.11.2020
              let bridgename="javascript.0.bridge.";  //speicherort der Variablen
              let sonoff="sonoff.0.Tasmota_21.";  // wo ist RfRaw und RfRaw_Data
              
              createState(bridgename+"learn",false,{type: "boolean", role: "button"});
              createState(bridgename+"counter",1000,{type: "number", role: "state"});
              createState(bridgename+"learning","off",{type: "string", role: "state"});
              createState(bridgename+"lastcode","?",{type: "string", role: "state"});
              createState(bridgename+"lastdate","?",{type: "string", role: "state"});
              createState(bridgename+"lastname","?",{type: "string", role: "state"});
              
              var counter=getState(bridgename+"counter").val;
              
              setState(bridgename+'learn',false);
              setState(bridgename+'learning',"off");
              setState(sonoff+'RfRaw',"177");
              
              on(bridgename+'learn',function(obj) {
                  if (obj.state.val) {
                      if (getState(bridgename+'learning').val=="off") {
                          setState(sonoff+'RfRaw',"177");
                          setState(bridgename+'learning',"on");
                      } else {
                          setState(bridgename+'learning',"off");
                      }
                  }
                  setState(bridgename+'learn',false);
              })
              
              on(sonoff+'RfReceived_Data',function(obj){
                      console.log(obj.state.val);
                      setState(sonoff+'RfRaw',"177");
              
              })
              
              function attachListener() {
                  setTimeout(function() { 
                      $('state[id='+bridgename+'code.*.send]').on(function (id, i) {
                          buttonPress(id);
                      });
                      $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
                          nameChanged(obj);
                      });
                  ;}, 2000);
                  setTimeout(function() { 
                      $('state[id='+bridgename+'code.*.send]').on(function (id, i) {
                          buttonPress(id);
                      });
                      $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
                          nameChanged(obj);
                      });
                  ;}, 10000);
              }
              
              function nameChanged(obj) {
                  if (obj.state.val==obj.oldState.val) {
                      console.log("ALT=NEU");
                      return;
                  }
                  var oldnam=obj.id.substr(0,obj.id.length-4);
                  var nam=obj.state.val;
                  var newnam=bridgename+"code."+nam+".";
                  console.log(newnam);
                  console.log(oldnam);
                  console.log(getState(oldnam+"org"));
                  createStates(newnam,nam,getState(oldnam+"org").val,getState(oldnam+"count").val,getState(oldnam+"transform").val);
                  setTimeout(function() {
                      deleteState(oldnam+"send");
                      deleteState(oldnam+"name");
                      deleteState(oldnam+"recieved");
                      deleteState(oldnam+"org");
                      deleteState(oldnam+"count");
                      deleteState(oldnam+"transform");
                      attachListener();
                  },1000);
              }
              
              $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
                  nameChanged(obj);
              });
              
              function buttonPress(obj) {
                  if (obj.state.val==true) {
                      console.log("Pressed: " + obj.id);
                      setState(obj.id,false);
                      var nam=obj.id.substr(0,obj.id.length-4);
                      var code=getState(nam+"transform").val;
                   //   console.log(code);
                      setState(sonoff+'RfRaw',"177");
                      setState(sonoff+'RfRaw',code);
                      setState(sonoff+'RfRaw',"177");
                  }
              
              }
              
              var SelectorButtons = $('state[id='+bridgename+'code.*.send]');
              SelectorButtons.each(function (id, i) {
                      setState(id,false);
              });
              
              var SelectorRecieved = $('state[id='+bridgename+'code.*.org]');
              SelectorRecieved.each(function (id, i) {
                      console.log("Bekannte Codes:" + getState(id).val);
              });
              
              function createStates(prefix,name,org,count,newcode) {
                  // console.log("New:" + prefix + "-" +name);
                      createState(prefix+"send",false,{type: "boolean", role: "button"});
                      createState(prefix+"name",name,{type: "string", role: "info"});
                      createState(prefix+"recieved", formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"),{type: "string", role: "state"});
                      createState(prefix+"org",org,{type: "string", role: "state"});
                      createState(prefix+"count",count,{type: "number", role: "state"});
                      createState(prefix+"transform",newcode,{type: "string", role: "state"});
              }
              
              on(sonoff+'RfRaw_Data',function(obj){
                  var code=obj.state.val;
                  setState(bridgename+"lastcode",code);
                  setState(bridgename+"lastdate",formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"))
                  if (code=="AAA055") return;
                  if (code.length<12) return;
                  var elems=code.split(" ");
              
                  $('state[id='+bridgename+'code.*.org]').each(function (id, i) {
                      var akt=getState(id).val
                      if (akt!=null) {
                          akt=akt.split(" ");
                          if (elems[elems.length-2]==akt[akt.length-2]) {
                              var nam=id.substr(0,id.length-3);
                              setState(nam+"count",getState(nam+"count").val+1);
                              setState(nam+"recieved", formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"));
                              var lastname=nam.substr(0,nam.length-1).split(".");
                              setState(bridgename+"lastname",lastname[lastname.length-1]);
                              //  return false;
                          }
                      }
                  });
              
                  if (getState(bridgename+'learning').val=="on") {
              //        console.log("Neu  : " + code);
                      $('state[id='+bridgename+'code.*.org]').each(function (id, i) {
                          var akt=getState(id).val;
                          if (akt!=null) {
                              akt=akt.split(" ");
                              if (elems[elems.length-2]==akt[akt.length-2]) {
                                  console.log("Code bekannt:" + id);
                                  code="";
                                  return false;
                              }
                          }
                      });
                      if (code=="") return;
                      console.log("Schreib:" + code);
                     // return;
                      counter=counter+1;
                      setState(bridgename+'counter',counter);
              
                      var name=bridgename+"code."+String(counter)+".";
                      var laenge=2;
                      var newcode="";
                      for (let i=3;i<elems.length;i++) {
                          newcode=newcode+" "+elems[i];
                          laenge=laenge+elems[i].length;
                      }
                      laenge=laenge/2;
                      var newcode=elems[0]+" B0 "+laenge.toString(16)+" "+elems[2]+" 08"+newcode;
                      createStates(name,"unbekannt",obj.state.val,1,newcode);
                      attachListener();
                  } 
                  
              
              })
              
              attachListener();
              schedule("*/20 * * * *", function () {
                  setState(sonoff+'RfRaw',"177");
              });
              
              
              
              

              Nach dem Start seht ihr folgende Punkte:
              Bildschirmfoto 2020-11-06 um 23.18.28.png
              (code ist bei euch noch leer, also nich sichtbar).

              Wenn ihr auf learn drückt, dann startet ihr den Lernmodus:
              Bildschirmfoto 2020-11-06 um 23.20.49.png

              nochmal auf learn, oder Skipt neu starten, geht wieder in den normalen Modus.

              Bildschirmfoto 2020-11-06 um 23.21.37.png

              Oben seht ihr, dass ich 2 Tasten angelernt habe.

              • count=wie oft wurde die Fernbedienung gedrückt.
              • name=Name der Taste
              • org=Aufgezeichneter Code
              • recieved=wann das letzte mal empfangen
              • send=Code über sonoff Bridge senden
              • transform=für Portisch umgerechnete code (falls das mit euren nicht geht, hier den von der Website umgerechneten eintragen)

              Wenn man sich nicht sicher ist, welche Taste welche war, einfach im "Nicht-Lernmodus" Taste drücken. Dann wird count und recieved upgedatet.

              Um die Codes einfacher in Skripten etc. verwenden zu können, kann man in name die Bezeichnung des codes eingeben (keine Leerzeichen, Sonderzeichen etc).

              Dann benennt er den Zweig entsprechend um:

              Bildschirmfoto 2020-11-06 um 23.29.16.png
              (habe mich doch für deutsch entschieden FB_1_an)
              Bildschirmfoto 2020-11-06 um 23.31.47.png

              Solle bei vielen Anlernvorgängen das umbenennen haken, einfach das Skript neu starten.

              Viel Spaß damit, wie man sicher sieht ist JS nicht meine erste Programmiersprache, aber es läuft...

              S Offline
              S Offline
              shgmongo
              schrieb am zuletzt editiert von
              #31

              Im Skript müßt ihr mindestens den Pfad zu RfRaw angeben.
              Wenn der Datenpunkt bei euch also sonoff.123.myBridge.RfRaw heißt, dann
              sonoff.123.myBridge. (mit Punkt)

              //Version 0.9 15.11.2020
              let bridgename="javascript.0.bridge.";  //speicherort der Variablen
              let sonoff="sonoff.0.Tasmota_21.";  // wo ist RfRaw und RfRaw_Data
              
              createState(bridgename+"learn",false,{type: "boolean", role: "button"});
              createState(bridgename+"counter",1000,{type: "number", role: "state"});
              createState(bridgename+"learning","off",{type: "string", role: "state"});
              createState(bridgename+"lastcode","?",{type: "string", role: "state"});
              createState(bridgename+"lastdate","?",{type: "string", role: "state"});
              createState(bridgename+"lastname","?",{type: "string", role: "state"});
              
              var counter=getState(bridgename+"counter").val;
              
              setState(bridgename+'learn',false);
              setState(bridgename+'learning',"off");
              setState(sonoff+'RfRaw',"177");
              
              on(bridgename+'learn',function(obj) {
                  if (obj.state.val) {
                      if (getState(bridgename+'learning').val=="off") {
                          setState(sonoff+'RfRaw',"177");
                          setState(bridgename+'learning',"on");
                      } else {
                          setState(bridgename+'learning',"off");
                      }
                  }
                  setState(bridgename+'learn',false);
              })
              
              on(sonoff+'RfReceived_Data',function(obj){
                      console.log(obj.state.val);
                      setState(sonoff+'RfRaw',"177");
              
              })
              
              function attachListener() {
                  setTimeout(function() { 
                      $('state[id='+bridgename+'code.*.send]').on(function (id, i) {
                          buttonPress(id);
                      });
                      $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
                          nameChanged(obj);
                      });
                  ;}, 2000);
                  setTimeout(function() { 
                      $('state[id='+bridgename+'code.*.send]').on(function (id, i) {
                          buttonPress(id);
                      });
                      $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
                          nameChanged(obj);
                      });
                  ;}, 10000);
              }
              
              function nameChanged(obj) {
                  if (obj.state.val==obj.oldState.val) {
                      console.log("ALT=NEU");
                      return;
                  }
                  var oldnam=obj.id.substr(0,obj.id.length-4);
                  var nam=obj.state.val;
                  var newnam=bridgename+"code."+nam+".";
                  console.log(newnam);
                  console.log(oldnam);
                  console.log(getState(oldnam+"org"));
                  createStates(newnam,nam,getState(oldnam+"org").val,getState(oldnam+"count").val,getState(oldnam+"transform").val);
                  setTimeout(function() {
                      deleteState(oldnam+"send");
                      deleteState(oldnam+"name");
                      deleteState(oldnam+"recieved");
                      deleteState(oldnam+"org");
                      deleteState(oldnam+"count");
                      deleteState(oldnam+"transform");
                      attachListener();
                  },1000);
              }
              
              $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
                  nameChanged(obj);
              });
              
              function buttonPress(obj) {
                  if (obj.state.val==true) {
                      console.log("Pressed: " + obj.id);
                      setState(obj.id,false);
                      var nam=obj.id.substr(0,obj.id.length-4);
                      var code=getState(nam+"transform").val;
                   //   console.log(code);
                      setState(sonoff+'RfRaw',"177");
                      setState(sonoff+'RfRaw',code);
                      setState(sonoff+'RfRaw',"177");
                  }
              
              }
              
              var SelectorButtons = $('state[id='+bridgename+'code.*.send]');
              SelectorButtons.each(function (id, i) {
                      setState(id,false);
              });
              
              var SelectorRecieved = $('state[id='+bridgename+'code.*.org]');
              SelectorRecieved.each(function (id, i) {
                      console.log("Bekannte Codes:" + getState(id).val);
              });
              
              function createStates(prefix,name,org,count,newcode) {
                  // console.log("New:" + prefix + "-" +name);
                      createState(prefix+"send",false,{type: "boolean", role: "button"});
                      createState(prefix+"name",name,{type: "string", role: "info"});
                      createState(prefix+"recieved", formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"),{type: "string", role: "state"});
                      createState(prefix+"org",org,{type: "string", role: "state"});
                      createState(prefix+"count",count,{type: "number", role: "state"});
                      createState(prefix+"transform",newcode,{type: "string", role: "state"});
              }
              
              on(sonoff+'RfRaw_Data',function(obj){
                  var code=obj.state.val;
                  setState(bridgename+"lastcode",code);
                  setState(bridgename+"lastdate",formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"))
                  if (code=="AAA055") return;
                  if (code.length<12) return;
                  var elems=code.split(" ");
              
                  $('state[id='+bridgename+'code.*.org]').each(function (id, i) {
                      var akt=getState(id).val
                      if (akt!=null) {
                          akt=akt.split(" ");
                          if (elems[elems.length-2]==akt[akt.length-2]) {
                              var nam=id.substr(0,id.length-3);
                              setState(nam+"count",getState(nam+"count").val+1);
                              setState(nam+"recieved", formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"));
                              var lastname=nam.substr(0,nam.length-1).split(".");
                              setState(bridgename+"lastname",lastname[lastname.length-1]);
                              //  return false;
                          }
                      }
                  });
              
                  if (getState(bridgename+'learning').val=="on") {
              //        console.log("Neu  : " + code);
                      $('state[id='+bridgename+'code.*.org]').each(function (id, i) {
                          var akt=getState(id).val;
                          if (akt!=null) {
                              akt=akt.split(" ");
                              if (elems[elems.length-2]==akt[akt.length-2]) {
                                  console.log("Code bekannt:" + id);
                                  code="";
                                  return false;
                              }
                          }
                      });
                      if (code=="") return;
                      console.log("Schreib:" + code);
                     // return;
                      counter=counter+1;
                      setState(bridgename+'counter',counter);
              
                      var name=bridgename+"code."+String(counter)+".";
                      var laenge=2;
                      var newcode="";
                      for (let i=3;i<elems.length;i++) {
                          newcode=newcode+" "+elems[i];
                          laenge=laenge+elems[i].length;
                      }
                      laenge=laenge/2;
                      var newcode=elems[0]+" B0 "+laenge.toString(16)+" "+elems[2]+" 08"+newcode;
                      createStates(name,"unbekannt",obj.state.val,1,newcode);
                      attachListener();
                  } 
                  
              
              })
              
              attachListener();
              schedule("*/20 * * * *", function () {
                  setState(sonoff+'RfRaw',"177");
              });
              
              
              
              

              Hallo ich bin neu in der Materie und frage mich, wo muss ich diesen Code eingeben? Und wo im Code muss ich den Pfad ändern?

              Muss ich ihn in Rfaw eintragen?
              RFraw.JPG

              Wenn ich den vorhanden Code mit den oben genannten ersetzte, kann ich nicht mehr speichern drücken
              Code.JPG

              Kann mir bitte jemand sagen, wie ich es machen muss?

              Gruß,
              Sebastian

              DJMarc75D 1 Antwort Letzte Antwort
              0
              • S shgmongo

                Im Skript müßt ihr mindestens den Pfad zu RfRaw angeben.
                Wenn der Datenpunkt bei euch also sonoff.123.myBridge.RfRaw heißt, dann
                sonoff.123.myBridge. (mit Punkt)

                //Version 0.9 15.11.2020
                let bridgename="javascript.0.bridge.";  //speicherort der Variablen
                let sonoff="sonoff.0.Tasmota_21.";  // wo ist RfRaw und RfRaw_Data
                
                createState(bridgename+"learn",false,{type: "boolean", role: "button"});
                createState(bridgename+"counter",1000,{type: "number", role: "state"});
                createState(bridgename+"learning","off",{type: "string", role: "state"});
                createState(bridgename+"lastcode","?",{type: "string", role: "state"});
                createState(bridgename+"lastdate","?",{type: "string", role: "state"});
                createState(bridgename+"lastname","?",{type: "string", role: "state"});
                
                var counter=getState(bridgename+"counter").val;
                
                setState(bridgename+'learn',false);
                setState(bridgename+'learning',"off");
                setState(sonoff+'RfRaw',"177");
                
                on(bridgename+'learn',function(obj) {
                    if (obj.state.val) {
                        if (getState(bridgename+'learning').val=="off") {
                            setState(sonoff+'RfRaw',"177");
                            setState(bridgename+'learning',"on");
                        } else {
                            setState(bridgename+'learning',"off");
                        }
                    }
                    setState(bridgename+'learn',false);
                })
                
                on(sonoff+'RfReceived_Data',function(obj){
                        console.log(obj.state.val);
                        setState(sonoff+'RfRaw',"177");
                
                })
                
                function attachListener() {
                    setTimeout(function() { 
                        $('state[id='+bridgename+'code.*.send]').on(function (id, i) {
                            buttonPress(id);
                        });
                        $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
                            nameChanged(obj);
                        });
                    ;}, 2000);
                    setTimeout(function() { 
                        $('state[id='+bridgename+'code.*.send]').on(function (id, i) {
                            buttonPress(id);
                        });
                        $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
                            nameChanged(obj);
                        });
                    ;}, 10000);
                }
                
                function nameChanged(obj) {
                    if (obj.state.val==obj.oldState.val) {
                        console.log("ALT=NEU");
                        return;
                    }
                    var oldnam=obj.id.substr(0,obj.id.length-4);
                    var nam=obj.state.val;
                    var newnam=bridgename+"code."+nam+".";
                    console.log(newnam);
                    console.log(oldnam);
                    console.log(getState(oldnam+"org"));
                    createStates(newnam,nam,getState(oldnam+"org").val,getState(oldnam+"count").val,getState(oldnam+"transform").val);
                    setTimeout(function() {
                        deleteState(oldnam+"send");
                        deleteState(oldnam+"name");
                        deleteState(oldnam+"recieved");
                        deleteState(oldnam+"org");
                        deleteState(oldnam+"count");
                        deleteState(oldnam+"transform");
                        attachListener();
                    },1000);
                }
                
                $('state[id='+bridgename+'code.*.name]').on(function (obj, i) {
                    nameChanged(obj);
                });
                
                function buttonPress(obj) {
                    if (obj.state.val==true) {
                        console.log("Pressed: " + obj.id);
                        setState(obj.id,false);
                        var nam=obj.id.substr(0,obj.id.length-4);
                        var code=getState(nam+"transform").val;
                     //   console.log(code);
                        setState(sonoff+'RfRaw',"177");
                        setState(sonoff+'RfRaw',code);
                        setState(sonoff+'RfRaw',"177");
                    }
                
                }
                
                var SelectorButtons = $('state[id='+bridgename+'code.*.send]');
                SelectorButtons.each(function (id, i) {
                        setState(id,false);
                });
                
                var SelectorRecieved = $('state[id='+bridgename+'code.*.org]');
                SelectorRecieved.each(function (id, i) {
                        console.log("Bekannte Codes:" + getState(id).val);
                });
                
                function createStates(prefix,name,org,count,newcode) {
                    // console.log("New:" + prefix + "-" +name);
                        createState(prefix+"send",false,{type: "boolean", role: "button"});
                        createState(prefix+"name",name,{type: "string", role: "info"});
                        createState(prefix+"recieved", formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"),{type: "string", role: "state"});
                        createState(prefix+"org",org,{type: "string", role: "state"});
                        createState(prefix+"count",count,{type: "number", role: "state"});
                        createState(prefix+"transform",newcode,{type: "string", role: "state"});
                }
                
                on(sonoff+'RfRaw_Data',function(obj){
                    var code=obj.state.val;
                    setState(bridgename+"lastcode",code);
                    setState(bridgename+"lastdate",formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"))
                    if (code=="AAA055") return;
                    if (code.length<12) return;
                    var elems=code.split(" ");
                
                    $('state[id='+bridgename+'code.*.org]').each(function (id, i) {
                        var akt=getState(id).val
                        if (akt!=null) {
                            akt=akt.split(" ");
                            if (elems[elems.length-2]==akt[akt.length-2]) {
                                var nam=id.substr(0,id.length-3);
                                setState(nam+"count",getState(nam+"count").val+1);
                                setState(nam+"recieved", formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss"));
                                var lastname=nam.substr(0,nam.length-1).split(".");
                                setState(bridgename+"lastname",lastname[lastname.length-1]);
                                //  return false;
                            }
                        }
                    });
                
                    if (getState(bridgename+'learning').val=="on") {
                //        console.log("Neu  : " + code);
                        $('state[id='+bridgename+'code.*.org]').each(function (id, i) {
                            var akt=getState(id).val;
                            if (akt!=null) {
                                akt=akt.split(" ");
                                if (elems[elems.length-2]==akt[akt.length-2]) {
                                    console.log("Code bekannt:" + id);
                                    code="";
                                    return false;
                                }
                            }
                        });
                        if (code=="") return;
                        console.log("Schreib:" + code);
                       // return;
                        counter=counter+1;
                        setState(bridgename+'counter',counter);
                
                        var name=bridgename+"code."+String(counter)+".";
                        var laenge=2;
                        var newcode="";
                        for (let i=3;i<elems.length;i++) {
                            newcode=newcode+" "+elems[i];
                            laenge=laenge+elems[i].length;
                        }
                        laenge=laenge/2;
                        var newcode=elems[0]+" B0 "+laenge.toString(16)+" "+elems[2]+" 08"+newcode;
                        createStates(name,"unbekannt",obj.state.val,1,newcode);
                        attachListener();
                    } 
                    
                
                })
                
                attachListener();
                schedule("*/20 * * * *", function () {
                    setState(sonoff+'RfRaw',"177");
                });
                
                
                
                

                Hallo ich bin neu in der Materie und frage mich, wo muss ich diesen Code eingeben? Und wo im Code muss ich den Pfad ändern?

                Muss ich ihn in Rfaw eintragen?
                RFraw.JPG

                Wenn ich den vorhanden Code mit den oben genannten ersetzte, kann ich nicht mehr speichern drücken
                Code.JPG

                Kann mir bitte jemand sagen, wie ich es machen muss?

                Gruß,
                Sebastian

                DJMarc75D Online
                DJMarc75D Online
                DJMarc75
                schrieb am zuletzt editiert von
                #32

                @shgmongo sagte in Sonoff RF Bridge Tasmota und Portisch 433mhz:

                wo muss ich diesen Code eingeben?

                Du musst ein Javaskript im Adapter Javascript erstellen.
                Dort den kompletten Code einfügen und in Zeile 3 deinen Pfad anpassen.

                Bitte den Startpost genau lesen, da ist eigentlich alles beschrieben.

                Grüße

                Lehrling seit 1975 !!!
                Beitrag geholfen ? dann gerne ein upvote rechts unten im Beitrag klicken ;)
                https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge

                S 1 Antwort Letzte Antwort
                0
                • DJMarc75D DJMarc75

                  @shgmongo sagte in Sonoff RF Bridge Tasmota und Portisch 433mhz:

                  wo muss ich diesen Code eingeben?

                  Du musst ein Javaskript im Adapter Javascript erstellen.
                  Dort den kompletten Code einfügen und in Zeile 3 deinen Pfad anpassen.

                  Bitte den Startpost genau lesen, da ist eigentlich alles beschrieben.

                  Grüße

                  S Offline
                  S Offline
                  shgmongo
                  schrieb am zuletzt editiert von shgmongo
                  #33

                  Hab es hin bekommen.

                  Musste unter Skripte.JPG
                  ein Skript erstellen.

                  Dann meinen Pfad auf sonoff.o.Sonoffbridge. ändern und laufen lassen.

                  Wie drücke ich auf "learn" ? Bei mir kein Ordner mit Code angelegt....

                  S 1 Antwort Letzte Antwort
                  0
                  • S shgmongo

                    Hab es hin bekommen.

                    Musste unter Skripte.JPG
                    ein Skript erstellen.

                    Dann meinen Pfad auf sonoff.o.Sonoffbridge. ändern und laufen lassen.

                    Wie drücke ich auf "learn" ? Bei mir kein Ordner mit Code angelegt....

                    S Offline
                    S Offline
                    shgmongo
                    schrieb am zuletzt editiert von
                    #34

                    Ich habe es nach der Anleitung hinbekommen meine Fernbedienungsbefehle auszulesen und meine Rollläden damit fahren zu lassen.

                    Jetzt würde ich gerne Alexa sagen, dass sie dies tun soll.

                    Kann mir jemand sagen oder eine Anleitung nennen, wie ich das machen kann?

                    Sebastian

                    DJMarc75D 1 Antwort Letzte Antwort
                    0
                    • S shgmongo

                      Ich habe es nach der Anleitung hinbekommen meine Fernbedienungsbefehle auszulesen und meine Rollläden damit fahren zu lassen.

                      Jetzt würde ich gerne Alexa sagen, dass sie dies tun soll.

                      Kann mir jemand sagen oder eine Anleitung nennen, wie ich das machen kann?

                      Sebastian

                      DJMarc75D Online
                      DJMarc75D Online
                      DJMarc75
                      schrieb am zuletzt editiert von
                      #35

                      @shgmongo sagte in Sonoff RF Bridge Tasmota und Portisch 433mhz:

                      Kann mir jemand sagen oder eine Anleitung nennen, wie ich das machen kann?

                      Suchfunktion hier im Forum benutzen und falls nicht fündig einen eigenen Beitrag aufmachen weil das hier nicht zum Thema des Beitrages gehört.

                      Lehrling seit 1975 !!!
                      Beitrag geholfen ? dann gerne ein upvote rechts unten im Beitrag klicken ;)
                      https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge

                      1 Antwort Letzte Antwort
                      0
                      • P pangaea

                        rf-bridge.jpg Hallo,
                        auch nochmal besten Dank für das Script 🙂 Finde ich absolut genial 🙂
                        Auch das, wenn man doch mal die Standardfernbedienung benutzt, über den Counter eine Rückmeldung auf den Leuchtenstatus registrieren kann.
                        Vor der geflashten Sonoff Bridge hatte ich nur 433Mhz Module am Raspi, war damit aber nicht wirklich zufrieden da man nur wenige Geräte einlesen konnte.

                        Allerdings habe ich (dadurch das es mit diesem Script jetzt auch funktioniert) ein Problem mit einer Leuchte, bei der die einzelnen Tasten der Fernbedienung mehrfach belegt sind. ON/OFF z.B. ... Nach Auswertung der Console in der Bridge habe ich festgestellt, dass der Code teilweise 5-6 Sekunden lang gesendet wird. Das ist gut für die Zuverlässigkeit, in diesem Fall allerdings von Nachteil da die Leuchte dann meistens 2 mal schaltet, quasi An und gleich wieder Aus oder umgekehrt.
                        Daher die Frage an den Ersteller, ob man die Sendedauer bzw. die Wiederholungen irgendwo im Script zuverlässig einstellen kann?
                        Leider kenne ich mich mit Javascript nicht gut aus und da es für mich leichter ist, arbeite ich mich momentan eher in die Möglichkeiten von Blockly ein.
                        Ich habe nur vorhin noch festgestellt, dass man durch das neustarten des o.g. Scripts die Wiederholungen auf 3 bis 6 mal reduzieren kann. Ist aber leider immer noch grenzwertig viel.

                        Aber jetzt erstmal frohe Weihnachten

                        D Offline
                        D Offline
                        DaniX42
                        schrieb am zuletzt editiert von
                        #36

                        @pangaea said in Sonoff RF Bridge Tasmota und Portisch 433mhz:

                        Problem mit ON/OFF auf Einzeltaster - Lampe schaltet ein und gleich wieder aus / Sendezeit zu lange?

                        Ich habe das gleiche Problem bei einer Markise mit Beleuchtung. RAUS, REIN und STOPP funktionieren aber die Licht-Taste ist pro Drücker für AUS/EIN zuständig. Ich verbringe bereits Tage mit dem Script, habe alles versucht, die doppelten EventListener reduziert auf einen aber es scheint tatsächlich an der Sendedauer der RF-Bridge mit Portisch-Firmware zu liegen. Weiß jemand zufällig ob man die Sendedauer beeinflussen kann?

                        Ralla66R 1 Antwort Letzte Antwort
                        0
                        • D DaniX42

                          @pangaea said in Sonoff RF Bridge Tasmota und Portisch 433mhz:

                          Problem mit ON/OFF auf Einzeltaster - Lampe schaltet ein und gleich wieder aus / Sendezeit zu lange?

                          Ich habe das gleiche Problem bei einer Markise mit Beleuchtung. RAUS, REIN und STOPP funktionieren aber die Licht-Taste ist pro Drücker für AUS/EIN zuständig. Ich verbringe bereits Tage mit dem Script, habe alles versucht, die doppelten EventListener reduziert auf einen aber es scheint tatsächlich an der Sendedauer der RF-Bridge mit Portisch-Firmware zu liegen. Weiß jemand zufällig ob man die Sendedauer beeinflussen kann?

                          Ralla66R Offline
                          Ralla66R Offline
                          Ralla66
                          Most Active
                          schrieb am zuletzt editiert von Ralla66
                          #37

                          @danix42
                          in dem du den Raw Code verkürzt wenn zu lang und nur einmal sendest.
                          Gezielt senden geht dann per http raw cmd oder mqtt.
                          Lesestoff

                          1 Antwort Letzte Antwort
                          0
                          • H Offline
                            H Offline
                            Henrik
                            schrieb am zuletzt editiert von
                            #38

                            Mega, was für ein cooles Script. Habe nach notwendigen Pfadanpassungen meine FB's angelernt.
                            Habe nun auch endlich meine Dooya DC90 Markisen (Empasa) Fernbedienung im ioBroker und kann jetzt mit Wettersensoren das Teil überwachen.
                            Super und vielen Dank

                            H 1 Antwort Letzte Antwort
                            0
                            • H Henrik

                              Mega, was für ein cooles Script. Habe nach notwendigen Pfadanpassungen meine FB's angelernt.
                              Habe nun auch endlich meine Dooya DC90 Markisen (Empasa) Fernbedienung im ioBroker und kann jetzt mit Wettersensoren das Teil überwachen.
                              Super und vielen Dank

                              H Offline
                              H Offline
                              Henrik
                              schrieb am zuletzt editiert von
                              #39

                              @henrik
                              Vielleicht bekomme ich ja noch Hilfe.
                              Wollte nach dem Winter den Sonoff wieder in Betrieb nehmen. Jetzt fehlt mir der DP RfRaw. Versuche mit rfraw 177 bzw. 166 führten nicht zum Erfolg. Meine angelernte FB Befehle funktionieren leider nicht mehr und neu anlernen klappt nicht.

                              B C 2 Antworten Letzte Antwort
                              0
                              • H Henrik

                                @henrik
                                Vielleicht bekomme ich ja noch Hilfe.
                                Wollte nach dem Winter den Sonoff wieder in Betrieb nehmen. Jetzt fehlt mir der DP RfRaw. Versuche mit rfraw 177 bzw. 166 führten nicht zum Erfolg. Meine angelernte FB Befehle funktionieren leider nicht mehr und neu anlernen klappt nicht.

                                B Offline
                                B Offline
                                Berti69
                                schrieb am zuletzt editiert von
                                #40

                                Hallo
                                Versuche jetzt schon ne ganze Zeit durch Videos und lesen hier im Forum mein Steckdosen von QUIGG und brennenstuhl zu schalten. Leider ohne Erfolg. Habe alles so gemacht wie in der Beschreibung oben. Code kommt an und wird gleich umgewandelt. Aber beim senden über die Konsole mit rfraw geht nichts bzw sehe die rote LED blinken. Steckdose wird nicht geschaltet. Wo liegt mein Fehler. Danke

                                B 1 Antwort Letzte Antwort
                                0
                                • B Berti69

                                  Hallo
                                  Versuche jetzt schon ne ganze Zeit durch Videos und lesen hier im Forum mein Steckdosen von QUIGG und brennenstuhl zu schalten. Leider ohne Erfolg. Habe alles so gemacht wie in der Beschreibung oben. Code kommt an und wird gleich umgewandelt. Aber beim senden über die Konsole mit rfraw geht nichts bzw sehe die rote LED blinken. Steckdose wird nicht geschaltet. Wo liegt mein Fehler. Danke

                                  B Offline
                                  B Offline
                                  Berti69
                                  schrieb am zuletzt editiert von
                                  #41

                                  Habe noch ein paar Befehle versucht
                                  rfraw 255.JPG
                                  Vielleicht könnt ihr was damit anfangen

                                  1 Antwort Letzte Antwort
                                  0
                                  • H Henrik

                                    @henrik
                                    Vielleicht bekomme ich ja noch Hilfe.
                                    Wollte nach dem Winter den Sonoff wieder in Betrieb nehmen. Jetzt fehlt mir der DP RfRaw. Versuche mit rfraw 177 bzw. 166 führten nicht zum Erfolg. Meine angelernte FB Befehle funktionieren leider nicht mehr und neu anlernen klappt nicht.

                                    C Offline
                                    C Offline
                                    Computerhenne
                                    schrieb am zuletzt editiert von
                                    #42

                                    @henrik
                                    Komme nicht weiter. Ohne DP RFRaw funktioniert nichts.
                                    da56ff0d-f761-491d-b914-9a8f71ddbb50-image.png
                                    Das ist meine Liste an Datenpunkten. Wieso fehlen die wichtigen Datenpunkte auf einmal?

                                    1 Antwort Letzte Antwort
                                    0
                                    • S Offline
                                      S Offline
                                      schienw
                                      schrieb am zuletzt editiert von
                                      #43

                                      Hallo sissiwup,

                                      danke für dein Skript, hat mir beim erkennen der codes geholfen und mein LED-Lampe mit Infrarotheizung reagiert auch, blitzt aber nur kurz auf und geht dann wieder aus. Ist sie an geht sie kurz aus und schaltet sich wieder ein.
                                      Diese Code erhalte ich:

                                      {"RfRaw":{"Data":"AA B1 04 0212 05C8 0410 173E 3808181808181818180808180808181818080808080808080808080808080808180808080808080808180808180818181828 55"}}
                                      	    AA B0 3C 04 08 0212 05C8 0410 173E 3808181808181818180808180808181818080808080808080808080808080808180808080808080808180808180818181828 55
                                      {"RfRaw":{"Data":"AA B1 04 0212 05C8 041A 1734 3808181808181818180808180808181818080808080808080808080808080808180808080808080808180808180818181828 55"}}
                                      	    AA B0 3C 04 08 0212 05C8 041A 1734 3808181808181818180808180808181818080808080808080808080808080808180808080808080808180808180818181828 55
                                      {"RfRaw":{"Data":"AA B1 04 0212 05C8 0406 170C 3808181808181818180808180808181818080808080808080808080808080808180808080808080808180808180818181828 55"}}
                                      	    AA B0 3C 04 08 0212 05C8 0406 170C 3808181808181818180808180808181818080808080808080808080808080808180808080808080808180808180818181828 55
                                      {"RfRaw":{"Data":"AA B1 04 0212 05BE 0410 164E 3808181808181818180808180808181818080808080808080808080808080808180808080808080808180808180818181828 55"}}
                                                  AA B0 3C 04 08 0212 05BE 0410 164E 3808181808181818180808180808181818080808080808080808080808080808180808080808080808180808180818181828 55
                                      
                                      {"RfRaw":{"Data":"AA B1 04 0212 05C8 0406 175C 3808181808181818180808180808181818080808080808080808080808080808180808080808080808180808180818181828 55"}}
                                      {"RfRaw":{"Data":"AA B1 04 0212 05C8 0424 172A 3808181808181818180808180808181818080808080808080808080808080818080808080808080808180808181808080828 55"}}
                                      {"RfRaw":{"Data":"AA B1 04 0208 05C8 0424 173E 3808181808181818180808180808181818080808080808080808080808080818080808080808080808180808181808080828 55"}}
                                      {"RfRaw":{"Data":"AA B1 04 0212 05BE 041A 173E 3808181808181818180808180808181818080808080808080808080808080808180808080808080808180808180818181828 55"}}
                                                  AA B0 3C 04 08 0212 05BE 041A 173E 3808181808181818180808180808181818080808080808080808080808080808180808080808080808180808180818181828 55
                                      {"RfRaw":{"Data":"AA B1 04 0212 05B4 03FC 1720 3808181808181818180808180808181818080808080808080808080808080808180808080808080808180808180818181828 55"}}
                                      {"RfRaw":{"Data":"AA B1 04 0212 05C8 041A 173E 3808181808181818180808180808181818080808080808080808080808080808180808080808080808180808180818181828 55"}}
                                      {"RfRaw":{"Data":"AA B1 04 0212 05C8 0410 1734 3808181808181818180808180808181818080808080808080808080808080818080808080808080808180808181808080828 55"}}
                                      {"RfRaw":{"Data":"AA B1 04 0212 05C8 041A 1734 3808181808181818180808180808181818080808080808080808080808080808180808080808080808180808180818181828 55"}}
                                      {"RfRaw":{"Data":"AA B1 04 0212 05BE 0406 1734 3808181808181818180808180808181818080808080808080808080808080808180808080808080808180808180818181828 55"}}
                                      {"RfRaw":{"Data":"AA B1 04 0208 05C8 0406 173E 3808181808181818180808180808181818080808080808080808080808080808180808080808080808180808180818181828 55"}}
                                      {"RfRaw":{"Data":"AA B1 04 0208 05C8 0406 1748 3808181808181818180808180808181818080808080808080808080808080808080808080808080808180808180818180828 55"}}
                                                  AA B0 3C 04 08 0208 05C8 0406 1748 3808181808181818180808180808181818080808080808080808080808080808080808080808080808180808180818180828 55
                                      

                                      Die Zeilen dazwischen sind die codierten B0.

                                      Hatte jemand schon dieses Verhalten?

                                      Vielen Dank

                                      Schienw

                                      1 Antwort Letzte Antwort
                                      0
                                      • O Offline
                                        O Offline
                                        oxident
                                        schrieb am zuletzt editiert von
                                        #44

                                        Entschuldigt bitte, wenn ich hier dazwischenquatsche:
                                        Wisst ihr, ob ich mit der Sonoff/Tasmota/Portisch-Lösung prinzipiell Glück haben könnte, Rollos und Markisen mit dem Dooya-Protokoll steuern kann?

                                        Meine bisherigen Versuche mit SIGNALduino (CC1101+ESP32) über FHEM zu iobroker waren eher mittelprächtig und funktionierten nur sporadisch.

                                        Bei der Sonoff-Bridge steht aber überall, dass keine Rolling-Codes unterstützt werden. Aber das nutzen Rolläden doch, oder?

                                        1 Antwort Letzte Antwort
                                        0
                                        Antworten
                                        • In einem neuen Thema antworten
                                        Anmelden zum Antworten
                                        • Älteste zuerst
                                        • Neuste zuerst
                                        • Meiste Stimmen


                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        400

                                        Online

                                        32.4k

                                        Benutzer

                                        81.4k

                                        Themen

                                        1.3m

                                        Beiträge
                                        Community
                                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                        ioBroker Community 2014-2025
                                        logo
                                        • Anmelden

                                        • Du hast noch kein Konto? Registrieren

                                        • Anmelden oder registrieren, um zu suchen
                                        • Erster Beitrag
                                          Letzter Beitrag
                                        0
                                        • Aktuell
                                        • Tags
                                        • Ungelesen 0
                                        • Kategorien
                                        • Unreplied
                                        • Beliebt
                                        • GitHub
                                        • Docu
                                        • Hilfe