Über mehrere Sonoff RF Bridge eine Sonoff Basic schalten

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
fkempter
Beiträge: 46
Registriert: 6. Jan 2018 13:59
Answers: 0

Über mehrere Sonoff RF Bridge eine Sonoff Basic schalten

Beitrag von fkempter »

Hallo

Istzustand:
2 Stk Sonoff RF Bridge mit Tasmota
1Stk Sonoff Basic mit Tasmota
1Stk 433Mhz Taster

und die Rule

Code: Alles auswählen


val String rfTK01 = "3199816"		//Tastschalter 1Pol		Kanal A	

rule "RF433 Empfang"    
when
	Item SonoffRF01_RfData received update or
	Item SonoffRF02_RfData received update or
 then
	val sRF433 = triggeringItem.state.toString
	if (sRF433 == rfTK01) {
	    if (Sonoff05_Switch.state == ON) Sonoff05_Switch.sendCommand(OFF) else Sonoff05_Switch.sendCommand(ON)
 
	    // Reset Last Received Code
	     val String RFData="0"
	     SonoffRF01_RfData.postUpdate(RFData)
	     SonoffRF02_RfData.postUpdate(RFData)
        }
end	

Mein Problem:
Sobald ich den Taster drücke bekommen alle RF Bridge den Code und die Rule wird dann 2mal (für jede Bridge) durchgelaufen
Das heißt die Sonoff Basic schaltet sich gleich wieder aus.
Hab versucht über den Codeteil // Reset Last Received Code den Chache zu löschen aber das hat nichts gebracht.

Hat jemand eine Idee wie man das machen könnte?

SG Franz

matze_bln

Re: Über mehrere Sonoff RF Bridge eine Sonoff Basic schalten

Beitrag von matze_bln »

Hmmm, ich würde mal schauen, ob Tasmota dir eine Art Timer zur Verfügung stellt. Du könntest damit den Behfel nach dem ersten Empfang für z.B. 1 Sekunde sperren.

fkempter
Beiträge: 46
Registriert: 6. Jan 2018 13:59
Answers: 0

Re: Über mehrere Sonoff RF Bridge eine Sonoff Basic schalten

Beitrag von fkempter »

matze_bln hat geschrieben: 18. Jan 2019 06:23 Hmmm, ich würde mal schauen, ob Tasmota dir eine Art Timer zur Verfügung stellt. Du könntest damit den Behfel nach dem ersten Empfang für z.B. 1 Sekunde sperren.
Danke hae nachgeschaut und auf Tasmota einen "SwitchDebounce" gefunde.
Leider behebt es nicht das Problem obwohl ich SwitchDebounce 1000 gesetzt habe.

matze_bln

Re: Über mehrere Sonoff RF Bridge eine Sonoff Basic schalten

Beitrag von matze_bln »

Ich habe mal kurz bei den Befehlen und so nachgesehen.
Ich denke mit RULES, Timer und Variablen kann man was machen.
Es gibt etwas wie irf-empfangen. Da würde ich eine Variable gesperrt prüfen und darauf basierend schalten oder verwerfen. Dann natürlich die Variable auf true setzen, wenn die false war und einen Timer starten. Nach Ablauf des Timers soll gesperrt wieder false werden. Geschaltet wird nur, wenn gesperrt false ist.

Von der Theorie her sollte das klappen

Ach und Switchdebounce scheint eher zum entprellen eines Schalters zu sein, also nicht ganz was du brauchst.


Benutzeravatar
udo1toni
Beiträge: 15244
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Über mehrere Sonoff RF Bridge eine Sonoff Basic schalten

Beitrag von udo1toni »

Die einfachste Variante:

Code: Alles auswählen

var Boolean bReceive = false

val String rfTK01 = "3199816"		//Tastschalter 1Pol		Kanal A	

rule "RF433 Empfang"    
when
    Item SonoffRF01_RfData received update or
    Item SonoffRF02_RfData received update or
 then
    if(!bReceive) {
        bReceive = true
        val sRF433 = triggeringItem.state.toString
        // Reset Last Received Code
        val String RFData="0"
        SonoffRF01_RfData.postUpdate(RFData)
        SonoffRF0"_RfData.postUpdate(RFData)
        if (sRF433 == rfTK01)
            Sonoff05_Switch.sendCommand(if (Sonoff05_Switch.state == ON) OFF else ON)
        bReceive = false
    }
end
Ich gehe davon aus, dass die beiden Trigger zeitlich sehr nah beieinander sind.
Im Einzelnen: sobald die Rule triggert, prüft sie als erstes, ob die Rule bereits ausgeführt wird (bReceive = true)
Ist das nicht der Fall, setzt sie selbst die Variable auf true. Es gibt auch einen Lock-Mechanismus, das ist aber mehr Code. ;)
Anschließend läuft Dein Code, mit dem Unterschied, dass ich den empfangenen Code direkt lösche (ist ja bereits ausgelesen) und die If-Abfrage über den Zustand optimiert habe. Der ternäre Operator macht nichts anderes, ist aber etwas eleganter.
Zum Schluss wird noch die Variable bReceive auf false gesetzt; die Rule ist wieder scharf.

Falls die beiden Bridges zu stark unterschiedlichen Zeiten empfangen, könne man vor dem letzten Befehl noch ein Thread::sleep(250) einsetzen, was dann eine viertel Sekunde Pause einlegt. Das sollte aber eigentlich nicht notwendig sein.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

fkempter
Beiträge: 46
Registriert: 6. Jan 2018 13:59
Answers: 0

Re: Über mehrere Sonoff RF Bridge eine Sonoff Basic schalten

Beitrag von fkempter »

Hallo Udu
Super das hat geklapt musst aber doch noch den Befehl Thread::sleep(250) einsetzen aber nicht am Ende sondern vor
"// Reset Last Received Code" und auf 400ms erhöhen.
Aber jetzt bekommen alle Kommandos nur einmal den Befehl.
Vielen lieben Dank für die schnell Hilfe!

Antworten