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.
  • 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
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • David G.D Online
      David G.D Online
      David G.
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • sissiwupS sissiwup

          @david-g
          Hallo,

          ja, du kannst auf received oder auf count reagieren.

          Bridge: ebay-kleinanzeigen

          RaspiUserR Offline
          RaspiUserR Offline
          RaspiUser
          schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • RaspiUserR RaspiUser

              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 Offline
              sissiwupS Offline
              sissiwup
              schrieb am zuletzt editiert von
              #21

              @raspiuser
              Hi,

              zeig mal die ersten Zeilen deines Scripts. Wie hast du die Namen der Variablen angpaßt?

              MfG

              Sissi

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

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


              RaspiUserR 1 Antwort Letzte Antwort
              0
              • sissiwupS sissiwup

                @raspiuser
                Hi,

                zeig mal die ersten Zeilen deines Scripts. Wie hast du die Namen der Variablen angpaßt?

                RaspiUserR Offline
                RaspiUserR Offline
                RaspiUser
                schrieb am zuletzt editiert von
                #22

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

                Wie hast du die Namen der Variablen angpaßt?

                ... ich habe die so kopiert wie Du es im ersten Beitrag gezeigt hast, also 1:1 übernommen.

                Zwischenzeitlich bin (relativ gesehen) etwas weiter bzw. das Problem hat sich verlagert ...

                Die Codes der Markise habe ich mit "RfRaw 166" super einfach ausgelesen, diese im Browser zu senden klappt prima (ebenso in der TASMOTA Konsole).

                Nur in SONOFF MQTT sehe ich nix zum steuern. Das "Data" Objekt wird nur sporadisch aktualisiert.

                3e296eaf-9781-427f-a707-bdaf44075982-grafik.png
                Mein "neues" Problem ist hier näher beschrieben.

                Vielleicht hast Du einen Hinweis, wie man in dem SONOFF Adapter ein Objekt zum steuern der Codes anlegt ... ist jetzt also eigentlich kein Problem mit deinem Projekt ...

                sissiwupS 1 Antwort Letzte Antwort
                0
                • RaspiUserR RaspiUser

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

                  Wie hast du die Namen der Variablen angpaßt?

                  ... ich habe die so kopiert wie Du es im ersten Beitrag gezeigt hast, also 1:1 übernommen.

                  Zwischenzeitlich bin (relativ gesehen) etwas weiter bzw. das Problem hat sich verlagert ...

                  Die Codes der Markise habe ich mit "RfRaw 166" super einfach ausgelesen, diese im Browser zu senden klappt prima (ebenso in der TASMOTA Konsole).

                  Nur in SONOFF MQTT sehe ich nix zum steuern. Das "Data" Objekt wird nur sporadisch aktualisiert.

                  3e296eaf-9781-427f-a707-bdaf44075982-grafik.png
                  Mein "neues" Problem ist hier näher beschrieben.

                  Vielleicht hast Du einen Hinweis, wie man in dem SONOFF Adapter ein Objekt zum steuern der Codes anlegt ... ist jetzt also eigentlich kein Problem mit deinem Projekt ...

                  sissiwupS Offline
                  sissiwupS Offline
                  sissiwup
                  schrieb am zuletzt editiert von
                  #23

                  @raspiuser
                  Hi,

                  das Data nicht kommt, wird daran liegen, dass die Bridge nicht im korrekten Modus ist.
                  Hast du mal probiert einfach deinen Code in "transform" zu kopieren und dann auf den Knopf zu drücken?
                  Vlt. mußt du im Script dann noch deine RF166 für bestimmte Knöpfe hinterlegen.

                  MfG

                  Sissi

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

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


                  1 Antwort Letzte Antwort
                  0
                  • RaspiUserR Offline
                    RaspiUserR Offline
                    RaspiUser
                    schrieb am zuletzt editiert von
                    #24

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

                    nicht im korrekten Modus

                    Hallo sissiwup,

                    im ioBroker-Adapter bzw. im Tasmota-MQTT sind die Einstellungen überschaubar ...
                    SONOFF_EInst.JPG
                    Tasmota.JPG

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

                    "transform"

                    ... dieses Objekt finde ich bei mir nirgends !? Und ich benutze ja kein Script mehr.

                    SONO.JPG

                    Danke für deine Zeit. und Hinweise.

                    Murat AslanM 1 Antwort Letzte Antwort
                    0
                    • RaspiUserR RaspiUser

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

                      nicht im korrekten Modus

                      Hallo sissiwup,

                      im ioBroker-Adapter bzw. im Tasmota-MQTT sind die Einstellungen überschaubar ...
                      SONOFF_EInst.JPG
                      Tasmota.JPG

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

                      "transform"

                      ... dieses Objekt finde ich bei mir nirgends !? Und ich benutze ja kein Script mehr.

                      SONO.JPG

                      Danke für deine Zeit. und Hinweise.

                      Murat AslanM Offline
                      Murat AslanM Offline
                      Murat Aslan
                      schrieb am zuletzt editiert von
                      #25

                      @raspiuser
                      Vielen Dank erstmal für Freigabe des Skripts
                      diese haken am (objektbaum erstellen) hat mich 3 tage gekostet 😠 bei mir war es auch gesetzt.
                      Also es liegt an dem haken, einfach rausnehmen und im objekte dein bridge löschen, instans
                      sonoff neu starten und glücklich sein.

                      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
                        #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 Offline
                                    DJMarc75D Offline
                                    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 Offline
                                          DJMarc75D Offline
                                          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
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          372

                                          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