Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
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.0k

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

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

Sonoff RF Bridge Tasmota und Portisch 433mhz

Scheduled Pinned Locked Moved Skripten / Logik
javascriptscenesmonitoring
44 Posts 23 Posters 9.8k Views 22 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • sissiwupS Offline
    sissiwupS Offline
    sissiwup
    wrote on last edited by sissiwup
    #1

    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...

    MfG

    Sissi

    –-----------------------------------------

    1 CCU3 1 CCU2-Gateway 1 LanGateway 1 Pi-Gateway 1 I7 für ioBroker/MySQL


    sissiwupS H K M K 8 Replies Last reply
    7
    • 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...

      sissiwupS Offline
      sissiwupS Offline
      sissiwup
      wrote on last edited by sissiwup
      #2

      @sissiwup
      Ab und an überholt sich der code selber, wenn das Anlegen bzw. Löschen zu lange dauert. Dann funktioniert der "send" Knopf nicht. Dann das Skript neu starten.
      -> Korrigiert in Version 0.9 (oben angepasst)

      MfG

      Sissi

      –-----------------------------------------

      1 CCU3 1 CCU2-Gateway 1 LanGateway 1 Pi-Gateway 1 I7 für ioBroker/MySQL


      R 1 Reply Last reply
      0
      • P Offline
        P Offline
        pamelaa
        wrote on last edited by
        #3

        Super! Vielen Dank, dass Du Deine Arbeit mit uns teilst.

        Es klappt bei mir so weit super!

        Ich habe eine alte Fernbedienung für Funksteckdosen, mit je 3 Tasten für "On" und für "Off".

        Die "On" Taste klappt astrein, für "Off" erstellt er mir bei jedem Tastendruck einen neuen Code. Kann man das umgehen? Oder ist das dieser "Rolling-Code" und die Ferbedienung funktioniert bei mir nicht?

        Viele Grüße
        Peter

        sissiwupS 1 Reply Last reply
        0
        • P pamelaa

          Super! Vielen Dank, dass Du Deine Arbeit mit uns teilst.

          Es klappt bei mir so weit super!

          Ich habe eine alte Fernbedienung für Funksteckdosen, mit je 3 Tasten für "On" und für "Off".

          Die "On" Taste klappt astrein, für "Off" erstellt er mir bei jedem Tastendruck einen neuen Code. Kann man das umgehen? Oder ist das dieser "Rolling-Code" und die Ferbedienung funktioniert bei mir nicht?

          Viele Grüße
          Peter

          sissiwupS Offline
          sissiwupS Offline
          sissiwup
          wrote on last edited by
          #4

          @pamelaa
          Hallo,

          Meine, ein Rolling Code sollte es nicht sein,
          Dann wäre es bei allen Tasten so.

          Schreib mal die Marke, dann kann man vlt, dazu etwas sagen.

          Ich habe auch eine Fernbedienung die Probleme gemacht hat,
          Lern einfach mehrere Codes und Probier ob einer passt.

          Manche Steckdosen verwenden inkompatible Codes:

          Erlaubt sind für die Übertragung normal:
          00 01 10
          Manche verwenden aber auch 11.

          MfG

          Sissi

          –-----------------------------------------

          1 CCU3 1 CCU2-Gateway 1 LanGateway 1 Pi-Gateway 1 I7 für ioBroker/MySQL


          sissiwupS P 2 Replies Last reply
          0
          • sissiwupS sissiwup

            @pamelaa
            Hallo,

            Meine, ein Rolling Code sollte es nicht sein,
            Dann wäre es bei allen Tasten so.

            Schreib mal die Marke, dann kann man vlt, dazu etwas sagen.

            Ich habe auch eine Fernbedienung die Probleme gemacht hat,
            Lern einfach mehrere Codes und Probier ob einer passt.

            Manche Steckdosen verwenden inkompatible Codes:

            Erlaubt sind für die Übertragung normal:
            00 01 10
            Manche verwenden aber auch 11.

            sissiwupS Offline
            sissiwupS Offline
            sissiwup
            wrote on last edited by
            #5

            Was ich vergessen habe zu erwähnen,
            man kann jetzt auch auf Ereignisse von Fernbedienungen reagieren.

            Wenn z.B. ein Rollo nach dem letzten automatischen Befehl per
            Fernbedienung gefahren wurde, dann kann man z.B. die Automatik für
            eine gewisse Zeit sperren.

            MfG

            Sissi

            –-----------------------------------------

            1 CCU3 1 CCU2-Gateway 1 LanGateway 1 Pi-Gateway 1 I7 für ioBroker/MySQL


            1 Reply Last reply
            0
            • sissiwupS sissiwup

              @pamelaa
              Hallo,

              Meine, ein Rolling Code sollte es nicht sein,
              Dann wäre es bei allen Tasten so.

              Schreib mal die Marke, dann kann man vlt, dazu etwas sagen.

              Ich habe auch eine Fernbedienung die Probleme gemacht hat,
              Lern einfach mehrere Codes und Probier ob einer passt.

              Manche Steckdosen verwenden inkompatible Codes:

              Erlaubt sind für die Übertragung normal:
              00 01 10
              Manche verwenden aber auch 11.

              P Offline
              P Offline
              pamelaa
              wrote on last edited by
              #6

              @sissiwup
              Hallo,
              die Marke ist kaum noch zu erkennen. Könnte "REV" heißen. Es geht mir auch nicht darum, dass die Bridge die Signale für mich sendet (ich glaube, die Steckdosen gibt es gar nicht mehr). Vielmehr wollte ich mit der Fernbedienung an die Bridge senden, damit der ioBroker damit ein Shelly für mich schaltet. Ich habe mir jetzt einfach für 6 Euro eine neue Fernbedienung gekauft. Damit komme ich gut klar.
              Trotzdem toll, was Du hier mit uns teilst.
              VG

              sissiwupS 1 Reply Last reply
              0
              • P pamelaa

                @sissiwup
                Hallo,
                die Marke ist kaum noch zu erkennen. Könnte "REV" heißen. Es geht mir auch nicht darum, dass die Bridge die Signale für mich sendet (ich glaube, die Steckdosen gibt es gar nicht mehr). Vielmehr wollte ich mit der Fernbedienung an die Bridge senden, damit der ioBroker damit ein Shelly für mich schaltet. Ich habe mir jetzt einfach für 6 Euro eine neue Fernbedienung gekauft. Damit komme ich gut klar.
                Trotzdem toll, was Du hier mit uns teilst.
                VG

                sissiwupS Offline
                sissiwupS Offline
                sissiwup
                wrote on last edited by
                #7

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

                @sissiwup
                Hallo,
                die Marke ist kaum noch zu erkennen. Könnte "REV" heißen. Es geht mir auch nicht darum, dass die Bridge die Signale für mich sendet (ich glaube, die Steckdosen gibt es gar nicht mehr). Vielmehr wollte ich mit der Fernbedienung an die Bridge senden, damit der ioBroker damit ein Shelly für mich schaltet. Ich habe mir jetzt einfach für 6 Euro eine neue Fernbedienung gekauft. Damit komme ich gut klar.
                Trotzdem toll, was Du hier mit uns teilst.
                VG

                Hallo,
                das mit dem Empfangen geht leider nicht bei allen. Wenn du die Anleitung von Portisch dir ansiehst, dann steht dort "mind 3 Wiederholungen" des Codes.
                Das machen die meisten Fernbedienungen aber nicht alle 😞
                Es geht dann nur wenn du länger auf die Taste drückst.

                Aber genau für das Empfangen von Codes habe ich es so gebaut 🙂

                MfG

                Sissi

                –-----------------------------------------

                1 CCU3 1 CCU2-Gateway 1 LanGateway 1 Pi-Gateway 1 I7 für ioBroker/MySQL


                P 1 Reply Last reply
                0
                • sissiwupS sissiwup

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

                  @sissiwup
                  Hallo,
                  die Marke ist kaum noch zu erkennen. Könnte "REV" heißen. Es geht mir auch nicht darum, dass die Bridge die Signale für mich sendet (ich glaube, die Steckdosen gibt es gar nicht mehr). Vielmehr wollte ich mit der Fernbedienung an die Bridge senden, damit der ioBroker damit ein Shelly für mich schaltet. Ich habe mir jetzt einfach für 6 Euro eine neue Fernbedienung gekauft. Damit komme ich gut klar.
                  Trotzdem toll, was Du hier mit uns teilst.
                  VG

                  Hallo,
                  das mit dem Empfangen geht leider nicht bei allen. Wenn du die Anleitung von Portisch dir ansiehst, dann steht dort "mind 3 Wiederholungen" des Codes.
                  Das machen die meisten Fernbedienungen aber nicht alle 😞
                  Es geht dann nur wenn du länger auf die Taste drückst.

                  Aber genau für das Empfangen von Codes habe ich es so gebaut 🙂

                  P Offline
                  P Offline
                  pamelaa
                  wrote on last edited by
                  #8

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

                  Hallo,
                  das mit dem Empfangen geht leider nicht bei allen. Wenn du die Anleitung von Portisch dir ansiehst, dann steht dort "mind 3 Wiederholungen" des Codes.
                  Das machen die meisten Fernbedienungen aber nicht alle 😞
                  Es geht dann nur wenn du länger auf die Taste drückst.

                  Aber genau für das Empfangen von Codes habe ich es so gebaut 🙂

                  Wenn ich die Taste gedrückt halte, ballert er mir meinen ioBroker komplett voll.... 😵 komischerweise nur bei der "OFF"-Taste. Nachdem ich die Portischanleitung gelesen hatte, war ich froh, dass ich Dein Skript gefunden habe. :blond-haired-man:

                  Naja, jetzt bin ich auf eine andere Weise weiter gekommen. Vielleicht komme ich ja noch einmal auf Dich zurück.

                  1 Reply Last reply
                  0
                  • P Offline
                    P Offline
                    pangaea
                    wrote on last edited by
                    #9

                    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 1 Reply Last reply
                    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...

                      H Online
                      H Online
                      helfi9999
                      wrote on last edited by helfi9999
                      #10

                      @sissiwup
                      Hallo erstmal super was du da gemacht hast habe gestern schon mal im Forum gefragt ob man es hinbekommt die Sonoff RF Bridge auszulesen wenn man die Fernbedienung benutzt, da konnte mir keiner helfen. Und dann bin ich über deinen Beitrag gestolpert.

                      Hat mir direkt geholfen.

                      Schöne Feiertage noch

                      Intel NUC mit Iobroker

                      1 Reply Last reply
                      0
                      • sissiwupS sissiwup

                        @sissiwup
                        Ab und an überholt sich der code selber, wenn das Anlegen bzw. Löschen zu lange dauert. Dann funktioniert der "send" Knopf nicht. Dann das Skript neu starten.
                        -> Korrigiert in Version 0.9 (oben angepasst)

                        R Offline
                        R Offline
                        rmohrs
                        wrote on last edited by
                        #11

                        @sissiwup
                        Vielen Dank für das tolle Script,
                        ich habe jetzt schon mehrere Stunden mit der RF Bridge rumgeschlagen.

                        Einfach toll wie einfach es funktionieren kann.

                        A 1 Reply Last reply
                        0
                        • R rmohrs

                          @sissiwup
                          Vielen Dank für das tolle Script,
                          ich habe jetzt schon mehrere Stunden mit der RF Bridge rumgeschlagen.

                          Einfach toll wie einfach es funktionieren kann.

                          A Offline
                          A Offline
                          Andy200877
                          wrote on last edited by Andy200877
                          #12

                          Tolles Script !!
                          Ich bin totaler Anfänger und habe heute meine erste Portisch Bridge bekommen.
                          Ich konnte mit deinem Script tatsächlich alle meine Tasten unter Iobroker "anlernen" und entsprechend benennen.

                          Die Tasten funktionieren auch soweit.
                          Ich habe nur eine FB mit einer Ein/Aus Taste.
                          Im "Lernmodus" des scriptes wird immer der gleiche code bei der taste empfangen.
                          Jedoch kann ich über iobroker nur ausschalten...

                          https://github.com/Andy200877/intex_poollampe

                          P 1 Reply Last reply
                          0
                          • A Andy200877

                            Tolles Script !!
                            Ich bin totaler Anfänger und habe heute meine erste Portisch Bridge bekommen.
                            Ich konnte mit deinem Script tatsächlich alle meine Tasten unter Iobroker "anlernen" und entsprechend benennen.

                            Die Tasten funktionieren auch soweit.
                            Ich habe nur eine FB mit einer Ein/Aus Taste.
                            Im "Lernmodus" des scriptes wird immer der gleiche code bei der taste empfangen.
                            Jedoch kann ich über iobroker nur ausschalten...

                            P Offline
                            P Offline
                            pangaea
                            wrote on last edited by pangaea
                            #13

                            @Andy200877 das ist eventuell das gleiche Problem wie bei mir. Ich habe ebenfalls bei meiner weiter oben beschriebenen FB nur eine Taste bei der natürlich auch immer der gleiche Code abgesetzt wird. Das script sendet den Code immer mehrfach. Ich habe mir hier beholfen in dem ich den umgewandelten "B0" RAW-Code (der mit "B1" funktioniert nicht) über ein URL-Request einzeln sende.

                            z.B. exakt so:
                            http://192.168.178.44/cm?cmnd=Backlog RfRaw AA B0 21 03 08 0366 00DC 1D2E 28181818190818181818181819081909081819090909090909 55

                            Vielleicht hilft dir das weiter

                            1 Reply Last reply
                            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
                              kingcoma
                              wrote on last edited by
                              #14

                              @sissiwup

                              Hi,

                              vielen Dank für dein Script.
                              Leider habe ich zu wenig, eigentlich überhaupt keine Erfahrung bzgl. der Programmierung.
                              Daher kan ich auch nichts mit folgendem Fehler anfangen:

                              3f0c6c2d-6dbd-4f84-990c-27eb69386d95-grafik.png

                              Kannst du bitte weiterhelfen?!

                              Vielen Dank

                              P sissiwupS 2 Replies Last reply
                              0
                              • K kingcoma

                                @sissiwup

                                Hi,

                                vielen Dank für dein Script.
                                Leider habe ich zu wenig, eigentlich überhaupt keine Erfahrung bzgl. der Programmierung.
                                Daher kan ich auch nichts mit folgendem Fehler anfangen:

                                3f0c6c2d-6dbd-4f84-990c-27eb69386d95-grafik.png

                                Kannst du bitte weiterhelfen?!

                                Vielen Dank

                                P Offline
                                P Offline
                                pangaea
                                wrote on last edited by
                                #15

                                @kingcoma Zeile 3 im Script zu RFRawData hast du wirklich korrekt eingeben?

                                1 Reply Last reply
                                0
                                • K kingcoma

                                  @sissiwup

                                  Hi,

                                  vielen Dank für dein Script.
                                  Leider habe ich zu wenig, eigentlich überhaupt keine Erfahrung bzgl. der Programmierung.
                                  Daher kan ich auch nichts mit folgendem Fehler anfangen:

                                  3f0c6c2d-6dbd-4f84-990c-27eb69386d95-grafik.png

                                  Kannst du bitte weiterhelfen?!

                                  Vielen Dank

                                  sissiwupS Offline
                                  sissiwupS Offline
                                  sissiwup
                                  wrote on last edited by
                                  #16

                                  @kingcoma
                                  Hallo,

                                  Zeig mal den Teil wo deine Bridge im ioBroker steht und Zeile 3. Da muss am Ende ein Punkt sein!

                                  MfG

                                  Sissi

                                  –-----------------------------------------

                                  1 CCU3 1 CCU2-Gateway 1 LanGateway 1 Pi-Gateway 1 I7 für ioBroker/MySQL


                                  1 Reply Last reply
                                  0
                                  • David G.D Online
                                    David G.D Online
                                    David G.
                                    wrote on last edited by
                                    #17

                                    Hey,

                                    ich habe mal eine ganz doofe Frage und hoffe mich nicht zu blamieren.

                                    Kenne nur Schalter und Taster die mit true/false arbeiten.

                                    Einen Befehl senden über den "send" Button.
                                    Worauf reagiere ich um einen empfangenen Befehl in einen Script zu verarbeiten?

                                    Auf eine Änderung von "recieved"?

                                    P. S.:
                                    @sissiwup
                                    Wo hast du die Bridge so günstig geflasht bekommen?

                                    Zeigt eure Lovelace-Visualisierung klick
                                    (Auch ideal um sich Anregungen zu holen)

                                    Meine Tabellen für eure Visualisierung klick

                                    sissiwupS 1 Reply Last reply
                                    0
                                    • David G.D David G.

                                      Hey,

                                      ich habe mal eine ganz doofe Frage und hoffe mich nicht zu blamieren.

                                      Kenne nur Schalter und Taster die mit true/false arbeiten.

                                      Einen Befehl senden über den "send" Button.
                                      Worauf reagiere ich um einen empfangenen Befehl in einen Script zu verarbeiten?

                                      Auf eine Änderung von "recieved"?

                                      P. S.:
                                      @sissiwup
                                      Wo hast du die Bridge so günstig geflasht bekommen?

                                      sissiwupS Offline
                                      sissiwupS Offline
                                      sissiwup
                                      wrote on last edited by
                                      #18

                                      @david-g
                                      Hallo,

                                      ja, du kannst auf received oder auf count reagieren.

                                      Bridge: ebay-kleinanzeigen

                                      MfG

                                      Sissi

                                      –-----------------------------------------

                                      1 CCU3 1 CCU2-Gateway 1 LanGateway 1 Pi-Gateway 1 I7 für ioBroker/MySQL


                                      RaspiUserR 1 Reply Last reply
                                      0
                                      • sissiwupS sissiwup

                                        @david-g
                                        Hallo,

                                        ja, du kannst auf received oder auf count reagieren.

                                        Bridge: ebay-kleinanzeigen

                                        RaspiUserR Offline
                                        RaspiUserR Offline
                                        RaspiUser
                                        wrote on last edited by RaspiUser
                                        #19

                                        @sissiwup

                                        Hallo,
                                        zuerst ein "dickes Danke" für deine sehr gute & detailierte Anleitung, aber ...
                                        ... bei mir klappt es nicht wirklich:
                                        Ich habe die SONOFF-Bridge mit Tasmota 9.3.1 und der Portisch Firmware geflasht.
                                        Neben dem MQTT Adapter habe ich den SONOFF Adapter eingerichtet (Port 1884 (MQTT 1883), mit User & Passwort, sonst alles wie vorgegeben). Die Instanzen sind grün. Im Skript habe ich den Name geändert.
                                        Ich drücke die Tasten einer Steckdosen- und einer Markisen-Fernbedienung. Die Bridge reagiert immer mit der roten LED und die Konsole läuft voll mit Codes. Im ioBroker kommt aber nix an.
                                        Hier ein paar Screenshots:

                                        java.JPG

                                        sonoff.JPG

                                        skript.JPG

                                        raw.JPG

                                        Und die sehen ja nun etwas anders als deine ...
                                        Ich finde den Fehler nicht und hoffe, dass Du mit den Infos eine Diagnose stellen kannst.

                                        Danke für deine Unterstützung.

                                        EDIT:
                                        Noch eine Beobachtung ...

                                        • Wenn ich in den RfRAW 177 Modus schalte werden die Codes der Fernbedienung angezeigt
                                        • Wenn ich dann mit RfKey1 2 anlernen möchte werden keine Codes mehr angzeigt
                                        • Die Bridge piept nach einigen Sekunde "1x lang" ohne Hinweise dass das Lernen nicht funktioniert hat
                                          raw1.JPG

                                        Ich bin verwirrt ...

                                        RaspiUserR 1 Reply Last reply
                                        0
                                        • RaspiUserR RaspiUser

                                          @sissiwup

                                          Hallo,
                                          zuerst ein "dickes Danke" für deine sehr gute & detailierte Anleitung, aber ...
                                          ... bei mir klappt es nicht wirklich:
                                          Ich habe die SONOFF-Bridge mit Tasmota 9.3.1 und der Portisch Firmware geflasht.
                                          Neben dem MQTT Adapter habe ich den SONOFF Adapter eingerichtet (Port 1884 (MQTT 1883), mit User & Passwort, sonst alles wie vorgegeben). Die Instanzen sind grün. Im Skript habe ich den Name geändert.
                                          Ich drücke die Tasten einer Steckdosen- und einer Markisen-Fernbedienung. Die Bridge reagiert immer mit der roten LED und die Konsole läuft voll mit Codes. Im ioBroker kommt aber nix an.
                                          Hier ein paar Screenshots:

                                          java.JPG

                                          sonoff.JPG

                                          skript.JPG

                                          raw.JPG

                                          Und die sehen ja nun etwas anders als deine ...
                                          Ich finde den Fehler nicht und hoffe, dass Du mit den Infos eine Diagnose stellen kannst.

                                          Danke für deine Unterstützung.

                                          EDIT:
                                          Noch eine Beobachtung ...

                                          • Wenn ich in den RfRAW 177 Modus schalte werden die Codes der Fernbedienung angezeigt
                                          • Wenn ich dann mit RfKey1 2 anlernen möchte werden keine Codes mehr angzeigt
                                          • Die Bridge piept nach einigen Sekunde "1x lang" ohne Hinweise dass das Lernen nicht funktioniert hat
                                            raw1.JPG

                                          Ich bin verwirrt ...

                                          RaspiUserR Offline
                                          RaspiUserR Offline
                                          RaspiUser
                                          wrote on last edited by
                                          #20

                                          Im letzten Beitrag waren zuviele Fehler auf einmal. Ich bin jetzt ein Stück weitergekommen ... Die Bridge habe ich frisch geflasht und eingestellt und nun sieht der Screenshot besser aus / die Verbindung zum ioBroker klappt:
                                          Objekte.JPG

                                          Dann zum nächsten Problem ... 😉
                                          Unter "bridge RESULT.RfRaw Data" kommt z.B. auch etwas an. Anlernen klappt aber garnicht, weder direkt auf der Sonoff WebUI noch im Script. Hier sieht es immer so aus, egal was ich tue:
                                          java.JPG
                                          Wenn ich das Skript starte kommen diese Hinweise:
                                          script.JPG

                                          Jetzt hoffe ich auf zahlreiche Lösungsvorschläge ... 😕

                                          sissiwupS 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          641

                                          Online

                                          32.4k

                                          Users

                                          81.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe