NEWS
Sonoff RF Bridge Tasmota und Portisch 433mhz
-
Tolles Script !!
Ich bin totaler Anfänger und habe heute meine erste Portisch Bridge bekommen.
Ich konnte mit deinem Script tatsächlich alle meine Tasten unter Iobroker "anlernen" und entsprechend benennen.Die Tasten funktionieren auch soweit.
Ich habe nur eine FB mit einer Ein/Aus Taste.
Im "Lernmodus" des scriptes wird immer der gleiche code bei der taste empfangen.
Jedoch kann ich über iobroker nur ausschalten... -
@Andy200877 das ist eventuell das gleiche Problem wie bei mir. Ich habe ebenfalls bei meiner weiter oben beschriebenen FB nur eine Taste bei der natürlich auch immer der gleiche Code abgesetzt wird. Das script sendet den Code immer mehrfach. Ich habe mir hier beholfen in dem ich den umgewandelten "B0" RAW-Code (der mit "B1" funktioniert nicht) über ein URL-Request einzeln sende.
z.B. exakt so:
http://192.168.178.44/cm?cmnd=Backlog RfRaw AA B0 21 03 08 0366 00DC 1D2E 28181818190818181818181819081909081819090909090909 55Vielleicht hilft dir das weiter
-
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:Kannst du bitte weiterhelfen?!
Vielen Dank
-
@kingcoma Zeile 3 im Script zu RFRawData hast du wirklich korrekt eingeben?
-
@kingcoma
Hallo,Zeig mal den Teil wo deine Bridge im ioBroker steht und Zeile 3. Da muss am Ende ein Punkt sein!
-
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? -
-
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: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
Ich bin verwirrt ...
-
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:
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:
Wenn ich das Skript starte kommen diese Hinweise:
Jetzt hoffe ich auf zahlreiche Lösungsvorschläge ...
-
@raspiuser
Hi,zeig mal die ersten Zeilen deines Scripts. Wie hast du die Namen der Variablen angpaßt?
-
@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.
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 ...
-
@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. -
@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 ...
@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.
Danke für deine Zeit. und Hinweise.
-
@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. -
@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? -
@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.
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 -
@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. -
@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. -
@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 -
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?
Wenn ich den vorhanden Code mit den oben genannten ersetzte, kann ich nicht mehr speichern drücken
Kann mir bitte jemand sagen, wie ich es machen muss?
Gruß,
Sebastian