NEWS
If else if Anweisung
-
Du vergleichst ja nirgends ob der neue Wert denn sA oder sB entspricht.
Deine if Abfragen sind falsch formuliert.
on({id: "mqtt.0.ESPURNA_CB3XXX.rfin"/*ESPURNA_CB3XXX/rfin*/, change: "any"}, function (obj) { const sA = "1EB402D0012C7F7XXX"; //Taste A const sB = "1EB400FA03027F7XXX"; //Taste B if(obj.state.val == sA){ setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,true); } else if (obj.state.val == sB) { setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,false); } });
Gruß
-
Danke für die Antwort, okay das habe ich verstanden. Aber es funktioniert so leider nicht
Es ändert sich nichts
-
Dann füge mal einen Log-Output vor deinen Bedingungen ein, damit du überprüfen kannst, was eigentlich ankommt
log(obj.state.val);
-
Wo kommt denn das
const sA = "1EB402D0012C7F7XXX"; //Taste A const sB = "1EB400FA03027F7XXX"; //Taste B
her? Diese Zeichenketten? Werden die im Datenpunkt geschrieben wenn du die Fernbedienung drückst?
EDIT: Füge die Zeile mit dem Log von AlCalzone ein und guck was überhaupt ankommt..
Gruß
-
on({id: "mqtt.0.ESPURNA_CB3XXX.rfin"/*ESPURNA_CB3XXX/rfin*/, change: "ne"}, function (obj) { var sA = "1EB402D0012C7F7XXX"; //Taste A var sB = "1EB400FA03027F7XXX"; //Taste B if (sA === getState("mqtt.0.ESPURNA_CB3XXX.rfin").val) { setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,true); } if (sB === getState("mqtt.0.ESPURNA_CB3XXX.rfin").val) { setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,false); } });
-
log(obj.state.val);
habe ich gemacht. Die Werte kommen richtig an
-
on({id: "mqtt.0.ESPURNA_CB3XXX.rfin"/*ESPURNA_CB3XXX/rfin*/, change: "ne"}, function (obj) { var sA = "1EB402D0012C7F7XXX"; //Taste A var sB = "1EB400FA03027F7XXX"; //Taste B if (sA === getState("mqtt.0.ESPURNA_CB3XXX.rfin").val) { setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,true); } if (sB === getState("mqtt.0.ESPURNA_CB3XXX.rfin").val) { setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,false); } }); ```` `
Leider auch nicht
-
Damit wir uns richtig verstehen,
der Datenpunkt mqtt.0.ESPURNA_CB3XXX.rfin ändert sich auf den Wert 1EB402D0012C7F7XXX wenn du die Taste A auf der Fernbedienung drückst ja?
Gruß
-
~~![](</s><URL url=)https://ibb.co/nsnfLe" />
Ja bei dem Datenpunkt ESPURNA_CB3A71/rfin ändern sich die Werte. Wenn ich nur eine IF drin habe geht die Lapme auch an.
Bei der Variante aus dem Forum bsp.
on({id: 'hm-rpc.1.IEQ053xxxx.1.PRESS_SHORT‘}, function (obj) { setState("hm-rpc.1.IEQ038xxxx.3.State",!getState("hm-rpc.1.IEQ038xxxx3.State").val); setState("hm-rpc.1.IEQ056xxxx.3.State",!getState("hm-rpc.1.IEQ056xxxx.State").val); });
ging es.
Aber ich wollte gerne mit dieser FB alle Lampen draußen an oder Ausschalten. Egel was für einen Zustand die gerade haben.~~
-
Sporadisch kamen gerade Signale an.. :?:
so ist es nun
// Außemlampen on({id: "mqtt.0.ESPURNA_CB3A71.rfin"/*ESPURNA_CB3A71/rfin*/, change: "any"}, function (obj) { const sA = "1EC802E401187F7CE2"; //Taste A const sB = "1EC802E401187F7CE8"; //Taste B log(obj.state.val); if (sA === getState("mqtt.0.ESPURNA_CB3A71.rfin"/*ESPURNA_CB3A71/rfin*/).val) { setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,true); } if (sB === getState("mqtt.0.ESPURNA_CB3A71.rfin"/*ESPURNA_CB3A71/rfin*/).val) { setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,false); } });
-
Keiner eine Idee. Ich bin hier am verzweifeln
-
Wo kommt denn das
const sA = "1EB402D0012C7F7XXX"; //Taste A const sB = "1EB400FA03027F7XXX"; //Taste B
her? Diese Zeichenketten? Werden die im Datenpunkt geschrieben wenn du die Fernbedienung drückst?
EDIT: Füge die Zeile mit dem Log von AlCalzone ein und guck was überhaupt ankommt..
Gruß `
Ja das steht bei dem Datenpunkt -
Keiner eine Idee. Ich bin hier am verzweifeln `
Ich habe dich gebeten, eine Log-Ausgabe in dein Skript zu integrieren. Hast du die mal überprüft und kannst die hier posten? Ohne die zu sehen können wir hier genauso wenig nachvollziehen wie vorher.on({id: "mqtt.0.ESPURNA_CB3A71.rfin"/*ESPURNA_CB3A71/rfin*/, change: "any"}, function (obj) { // if (sA === getState("mqtt.0.ESPURNA_CB3A71.rfin"/*ESPURNA_CB3A71/rfin*/).val) { // ...
Das erneute Abfragen des Werts von mqtt.0.ESPURNA_CB3A71.rfin ist nicht nötig und eventuell sogar ein Fehler, je nachdem wie schnell sich da was ändert. obj.state.val enthält den aktuellen Wert des Datenpunkts in dem Moment wo der Trigger ausgelöst wurde.
-
Ja das habe ich gemacht. Ist das so Richtig?
on({id: "mqtt.0.ESPURNA_CB3A71.rfin"/*ESPURNA_CB3A71/rfin*/, change: "any"}, function (obj) { const sA = "1EC800FA03027F7CE2"; //Taste A const sB = "1EC800FA03027F7CE8"; //Taste B log(obj.state.val); if (sA === getState("mqtt.0.ESPURNA_CB3A71.rfin")) { console.log(sA); setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,true); } if (sB === getState("mqtt.0.ESPURNA_CB3A71.rfin")) { console.log(sB); setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,false); } });
LOG
09:05:12.500 [info] javascript.0 Stop script script.js.common.RF_Bridge 09:05:12.526 [info] javascript.0 Start javascript script.js.common.RF_Bridge 09:05:12.527 [info] javascript.0 script.js.common.RF_Bridge: registered 1 subscription and 0 schedules 09:05:13.918 [info] javascript.0 script.js.common.RF_Bridge: 1EBE00FA03027F7CE2 09:05:18.273 [info] javascript.0 script.js.common.RF_Bridge: 1EBE00FA03027F7CE8
//edit
Habe in der if Bedingung die getState abfrage raus genommen. Dann schaltet die Lampe für einen Bruchteil einer Sek. Man hört nur ein schnelles klacken vom Relai. Beim Drücken der "aus" Taste passiert das selbe
Das steth dan im LOG - Habe nur einmal auf "A" gedrückt. Das kommt dabei raus. Beim drücken von "B" das selbe…
javascript.0 2018-08-07 09:09:45.284 info script.js.common.RF_Bridge: 1EC800FA03027F7CE8 javascript.0 2018-08-07 09:09:45.284 info script.js.common.RF_Bridge: 1EC800FA03027F7CE2 javascript.0 2018-08-07 09:09:45.283 info script.js.common.RF_Bridge: 1EC800FA03027F7CE2
-
Und da haben wirs schon…
Laut log wird "1E<u>BE00</u>FA03027F7CE2" und "1E<u>BE00</u>FA03027F7CE8" empfangen, du vergleichst aber mit "1E<u>C800</u>FA03027F7CE2" und "1E<u>C800</u>FA03027F7CE8"
Und wie ich schon sagte, nicht nochmal den State abfragen (getState), sondern den vorhandenen Wert (obj.state.val) nutzen!
on({id: "mqtt.0.ESPURNA_CB3A71.rfin"/*ESPURNA_CB3A71/rfin*/, change: "any"}, function (obj) { const sA = "1EBE00FA03027F7CE2"; //Taste A const sB = "1EBE00FA03027F7CE8"; //Taste B log(obj.state.val); if (sA === obj.state.val) { setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,true); } else if (sB === obj.state.val) { setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,false); } });
-
ok. Jetzt habe ich es auch gesehen.
Aber warum ändert sich der wert immer?
Habe die Sonoff brige mit ESPurna 1.12.3.
als FB SONOFF 433 mhz Fernbedienung
Das ist mir vorher nicht aufegefallen das sich die Werte bei jedem Tastendruck ändern. Was kann ich dagegen tun?
In ESPurna unter dem Punkt RFBRIDGE kann man Signale anlernen. Dort ändern sich der Wert auch
-
Wenn es immer nur die ersten paar Zeichen sind die sich ändern könnte man einfach prüfen ob der letzte Teil stimmt und den Anfang des empfangen Codes weglassen..
Gruß
-
Das klingt gut. Wie kann ich das machen?
Danke und gruß
-
on({id: "mqtt.0.ESPURNA_CB3A71.rfin"/*ESPURNA_CB3A71/rfin*/, change: "any"}, function (obj) { const sA = "FA03027F7CE2"; //Taste A const sB = "FA03027F7CE8"; //Taste B const val = obj.state.val; const code = val.substr(val.length - 12); if (code === sA) { setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,true); } else if (code === sB) { setState("sonoff.0.Wohnzimmerlampe.POWER"/*Wohnzimmerlampe POWER*/,false); } });
So ungefähr - Prüfung auf die letzten 12 Zeichen im empfangenen Wert..
Gruß
-