NEWS
Fenstersensoren @ Sonoff RF Bridge & Tasmota
-
Ich hatte das Thema zunächst liegen gelassen, weil es andere Prioritäten gab.
Aber jetzt krame ich es mal wieder hervor, denn im Sommer beziehe ich eine neue Wohnung mit mehr Möglichkeiten und Aufgaben, die ich nun auch "versmarten" will.Es gelten immer noch die gleichen Voraussetzungen.
Und ich bräuchte immer noch etwas Hilfe oder Schubse in die richtige Richtung.
Denn ich zwar bin sehr technikaffin, habe (vor 28 Jahren) mal programmieren in heute nicht mehr genutzen Sprachen gelernt und kann auch Code weitgehend lesen - aber eben nicht Java und js "from scratch" schreiben.Ich habe also eine Tabelle - bzw. werde sie erstellen - mit den Codes der einzelnen Sensoren und ihrem Einsatzort wie z.b.
Code
2BD30 Tür_Wohnung
1A2B3 Tür_Bad
12345 Fenster_BadAber nicht nur drei sondern ca. 25 Zeilen
Bekannt ist ja auch, dass nach den Codes der Sensoren ein weiteres halbes Byte kommt mit der Bedeutung:
[Code]E Close
[Code]A Open
[Code]6 Battery Low
[Code]7 TamperMit diesem Wissen/Tabelle möchte ich ein Script erstellen, das mir zu den 25 Türen/Fenstern je drei Datenpunkte für Open/Close, Battery und Tamper erstellt.
Notfalls auch mit einer Vorlage für ein paar Zeilen, die ich mit z.B. Excel-Mitteln zusammensetze - lieber wäre mir aber die Definitione eines Arrays/Tabelle, das ich dann per Schleife durchlaufe.Wenn diese 75 Datenpunkte dann vorhanden sind, soll ein weiteres Script auf den auf dem DP "sonoff.0.Sonoff-RF-Bridge.RfReceived_Data" empfangenen Code reagieren und den zugehörigen DP des Sensors setzen.
d.h. den Status auf Open/Close, Battery auf Low oder Tamper auf True
(Mal sehen, ob und wozu sich Tamper nutzen lässt)Wie gesagt, ich weiß genau, was ich will, kann es ohne Hilfe nur nicht selber ohne einen Mausarm vom "zusamenklicken" zu bekommen.
Wenn das ganze einmal steht, dann können es sicherlich viele andere Anwender gebrauchen, die auch mehrere dieser Sensoren auf einmal an iobroker binden wollen.
Und bei 25 Sensoren ist es meiner Meinung nicht egal, ob man 3,50 oder 10€ pro Sensor ausgibt (RF433 vs. Zigbee z.B.), wenn man mit den jeweiligen Vor- und Nachteilen leben kann.Erbarmt sich jemand meiner?
-
Hallo, hast du schon Hilfe bekommen?
-
@kamolus Nein, konnte mir mittlerweile selber helfen.
Habe jetzt ein Script, das die Datenpunkte für die Tür/Fenster- und Wassersensoren anlegt und die Messages auswertet.nicht schön, aber funktioniert:
/* */ const sensors = [ {id: '12DC0', room: 'schlafzimmer', typ: 'tuer', name: 'Schlafzimmertür'}, {id: '129C0', room: 'schlafzimmer', typ: 'fenster', name: 'Schlafzimmerfenster'}, {id: '718B11', room: 'keller', typ: 'wasser', name: 'Wasser im Keller'} ]; const dpRFBridge = 'mqtt.0.tasmota.sonoff_rf_bridge_1.tele.RESULT' // Datenpunkt RF Bridge const fC = true; // forceCreation für createState // Ab hier nix mehr ändern ++++++++++++++++++++++ var i; var obj; var code; var index; function createStates() { for (i=0; i<sensors.length; i++) { obj = 'javascript.' + instance + '.wohnung.' + sensors[i].room + '.' + sensors[i].typ; switch (sensors[i].typ) { case 'tuer': createState(obj + '.open', undefined, fC, { name: sensors[i].name+ ' Offen', desc: 'GS-WDS07 Tür/Fenster Sensor', type: 'boolean', def: false, role: 'sensor.door' // room: sensors[i].room }); createState(obj + '.batterylow', undefined, fC, { name: sensors[i].name + ' Batterie schwach', desc: 'GS-WDS07 Tür/Fenster Batterie schwach', type: 'boolean', def: false, role: 'indicator.lowbat' }); createState(obj + '.tamper', undefined, fC, { name: sensors[i].name + ' Tamper', desc: 'GS-WDS07 Tür/Fenster Tamper', type: 'boolean', def: false, role: 'sensor.alarm' }); break; case 'fenster': createState(obj + '.open', undefined, fC, { name: sensors[i].name+ ' Offen', desc: 'GS-WDS07 Tür/Fenster Sensor', type: 'boolean', def: false, role: 'sensor.window' // room: sensors[i].room }); createState(obj + '.batterylow', undefined, fC, { name: sensors[i].name + ' Batterie schwach', desc: 'GS-WDS07 Tür/Fenster Batterie schwach', type: 'boolean', def: false, role: 'indicator.lowbat' }); createState(obj + '.tamper', undefined, fC, { name: sensors[i].name + ' Tamper', desc: 'GS-WDS07 Tür/Fenster Tamper', type: 'boolean', def: false, role: 'sensor.alarm' }); break; case 'wasser': createState(obj + '.alarm', undefined, fC, { name: sensors[i].name, desc: 'Wasserleck Sensor', type: 'boolean', def: false, role: 'sensor.water' }); }; }; }; function findSensorIndex(array, key, value) { for (i = 0; i < array.length; i++) { switch (array[i].typ) { case 'tuer': case 'fenster': newvalue = value.substr(0,5); break; case 'wasser': newvalue=value; }; if (array[i].[key] === newvalue) { return i; } } return -1; } // bei Skriptstart erst mal Datenpunkte anlegen createStates(); // wenn sich die empfangenen Daten der RFBridge ändern, dann auswerten und Status setzen on({id: dpRFBridge, change: 'ne'}, function (obj) { code = JSON.parse(obj.state.val).RfReceived.Data; index = findSensorIndex(sensors, 'id', code); if (index >= 0 ) { switch (sensors[index].typ) { case 'wasser': setState('javascript.' + instance + '.wohnung.'+sensors[index].room+'.wasser.alarm', true); break; case 'tuer': case 'fenster': switch (code.substr(5,1)) { case 'E': setState('javascript.' + instance + '.wohnung.' + sensors[index].room + '.' + sensors[index].typ + '.open', false); break; case 'A': setState('javascript.' + instance + '.wohnung.' + sensors[index].room + '.' + sensors[index].typ + '.open', true); break; case '6': setState('javascript.' + instance + '.wohnung.' + sensors[index].room + '.' + sensors[index].typ + '.batterylow', true); break; case '7': setState('javascript.' + instance + '.wohnung.' + sensors[index].room + '.' + sensors[index].typ + '.tamper', true); } } } });
-
Hallo, habe jetzt auch einen Fensterkontakt und zwei dreifach Taster über die Bridge laufen bzw. möchte ich laufen lassen aktuell ist nur der Fensterkontakt da.
Als ich mir das zugelegt habe dachte ich die Bridge schreibt einen Wert unter Objekte in zb Key 1 etwas rein bzw ändert den Wert wenn es als Key 1 angelernt wurde bei jedem mal wenn der Senor bzw taste gedrückt wird.
(So wie bei den Zigbee Tastern der Wert wird einmal kurz auf True gesetzt und geht dann gleich wieder auf false).Jetzt ist es aber tatsächlich so das man ja nur den Code der vom Fensterkontakt kommt über ein Script auswerten kann, ich möchte aber das wenn der Code vom Key 1 empfangen wird mir unter Objekte der Wert von Key1 geändert wird und wenn es nur kurz auf true geht das reicht.
Aktuell steht da da nur "Learnd send" drin mehr nicht, damit ich aber unter Yahka einen Schalter einbinden kann, brauche ich ja unter Objekte ein True oder fals Wert wie kann ich das umsetzten?
Oder kann ich direkt in Yahka ein Script schreiben damit der "Schalter" den Code direkt auswertet?
Vielen Dank für euere Hilfe.
-
Habe das in einem anderen Forum gefunden, ich werde aber immer noch nicht schlau draus wie ich über den Code der von dem taster gesendet wird, unter Objekte einen neuen Datenpunkt erzeugt bekomme der beim Drücken vom taster "true" ist und ansonsten "false".
-
Hi,
RFReceived_Data 9A9389 ist den was bei dir ?
Fenster auf ?Wenn du 9A9389 empfängst möchtst du was machen ?
Beispiel von mir:
Die RF Key sind ja angelernte Codes die auch gesendet werden können.
Warum diese verarbeiten ?
Macht ja bei Fenster auf keinen Sinn.
Bild oben, brauchste nur mache setze RF Key 1 auf true oder false.
Binde mal die Dreifachtaster in der Bridge erst einmal ein. -
Hay wenn der Code bei mir kommt ist das wenn ich einen Taster gedrückt habe.
Wenn ich den Taster gedrückt habe möchte ich nur das der Code nur kurz einen Datenpunkt auf true setzt und dann gleich wieder auf false zurckückgesetzt wird.
-
Habe ein Script gemacht und bereits herausgefunden wie ich einen Datenpukt anlege, hier mal "Test", habe es aber noch nicnt geschafft das wenn der Wert 1FE062 gesendet wird das mir der DatenPunkt auf True gesetzt wird, bzw habe auch schon versucht einen anderen Datenpunkt z.B. von einer Lampe auf True zu setzen, aber bis jetzt noch ohne Erfolg.
-
Ah ok ich habe den Fehler jetzt gefunden ich hatte hinten wert vom Objekt ID und dann den Wert hier hast du "nur den Text Baustein" drin jetzt wird mein Test Datenpunkt auf True gesezt aber ich bekomme unten vom Script Fehlermeldungen und das Pause Zeichen ist gelb das hatte ich bis jetzt noch nie.
Update von dem Script Fehler, habe ein neues Script erstellt und aus dem Test Script das Script Importiert, das neu erstellte Script ist jetzt grün ohne Fehlermeldung.
Habe ich den Datenpunkt Test richtig erstellt? Meine irgendwo hier im Forum gelesen zu haben das man nicht einfach so wie ich es jetzt gemacht habe in bestehende Ordner eigene Datenpunkte erstellen soll?
-
Script für Taster (wird nach 500ms auf false Zurückgesezt)
Hier setze ich den RFReceived Data Punkt auf 0, weil wenn ich einen Taster 2x betätige mit dem gleichen Code logischerweise, schreibt das Script den True wert nicht noch einmal in den erstellten Datenpunkt.
Erst wenn ich den Wert RFReceived ändere und erneut der Code von dem Taster kommt wird der erstellte Datenpunkt wieder auf True gesezt.Ist das bei euch auch so, bzw wie habt Ihr das gelöst?
Hier habe ich jetzt in dem Sonoff Ordner mal einen eigen Channel erstellt mit 3 Datenpunkten, passt das so, denke nicht oder, weil wenn ich jetzt einen Taster drücke kommt immer eine Warnmeldung im LOG.
-
@matdos1gmx-de
Angelegte Datenpunkte sollten im falschen Ordner sein.
Daher dein not connected Schalter 1.
Lege mal RF Schalter 1 in den javascript.0 Ordner so:Wurde geändert gehe auf wurde aktuallisiert.
Sonst wird beim triggern mit dem gleichem Taster das Script nicht ausgeführt. -
Ah Ok probier ich sofort aus.
Vielen Dank!!
-
@matdos1gmx-de
Lösche aber RF Schalter 1 im Sonoff Adapter.
Schreibe bitte @Ralla66 davor sonst sehe ich nicht ob du geantwortest hast.
Danke. -
-
@matdos1gmx-de
Sollte so passen. -
@Ralla66
Super vielen Dank für die Hilfe, jetzt kommen auch keine Meldungen mehr wenn die neu angelegten Datenpunkte geändert werden!!!Herzlichen Dank!!
-
@matdos1gmx-de
Prima, teste eben mal deinen Taster.
Mit aktualisiert sollte jetzt auch klappen. -
Ja das passt, habe es schon vorher schon umgestellt auf "aktualisieren", dadurch benötige ich das Script um den RFRecived Data Punkt zurückzusetzen nicht mehr.
Tip Top! -
Moin in die Runde.
Wenn es um "Schalter" on/off geht - könnte m.E. Espurna auch für den einen oder anderen etwas sein.Solltet Ihr mal testen- da ging recht viel OutOfTheBox und man hat sich dieses ganze gescripte gespart.
Ich bin letzten Endes auch zu Tasmota, da ich aufgrund verschiedener "Handgeräte" im Haus, verschiedene RF-Firmware durchprobiert habe. Das Update der RF-Firmwares habe ich in ESPurna nicht gefunden.