I - Rules (Regeln)
Dies ist eine Übersetzung von Github in der Originalversion von Theo Arends
Seit Beginn der Version 5.12.0I stellt Sonoff-Tasmota, inspiriert durch die ESP-Easy Gestaltung, optional “Rules“ bereit.
(Um Rules nutzbar zu machen muss define USE_RULES in der Datei user_config_override.h aktiviert sein.)
(Derzeit wird keine „if“ Richtlinie oder Verschachtelungen der Rules unterstützt)
I.I - Inhaltsverzeichniss
- Einführung
- Rule Commands (Befehle)
- Rule Syntax (Befehlsaufbau)
- Trigger (Auslöser)
- Command (Befehl)
- Beispiele
- Änderungsprotokoll der Rules
I.II - Einführung
Die Rules (Regeln) erweitern die verfügbaren Funktionen auf die individuelle Anpassung an Benutzeranwendungen. Sie erlauben es verschiedenste Aktionen mit Button (Taster)/Switch(Schalter) oder Zustandsrückmeldungen durchzuführen. Die Rules werden im Flash gespeichert und bleiben so auch nach einem Neustart verfügbar. Rules reagieren auf Trigger, ausgelöst durch Systemereignisse wie den Systemstart oder eine Timer Aktivierung.
Mit Hilfe der Rules lassen sich so die unterschiedlichste Problemstellungen lösen.
Die Rules können direkt über die Tasmota Konsole, über MQTT oder über HTTP, wie jeder andere Befehl auch, eingegeben werden.
I.III - Rule Commands (Rule Befehle)
Wenn die Rules verfügbar sind stehen zusätzlich fünf mächtige Befehle zur Verfügung.
- Rule steuert den Speicher der bis zu 511 Zeichen großen, benutzerdefinierten Rules. Erlaubt ebenso die Rules aktiv als auch inaktiv zu schalten. in manchen Fällen, wie bei sich langsam ändernden Sensoren (Temperatur) ist so die Aktivierung/Deaktivierung einer einmalige Rule Ausführung möglich.
- RuleTimer stellt bis zu acht Timer für Countdown Anwendungen.
- Event ermöglicht es einem Benutzer eine Rule auszuführen
- Var ermöglicht das vorübergehende speichern von bis zu fünf Variablen
- Mem ermöglicht das dauerhafte speichern von bis zu fünf Variable
siehe in der Command Beschreibung für den richtigen Syntax und deren Möglichkeiten.
I.IV - Rule Syntax (Befehlsaufbau)
Eine Rule verwendet folgenden Syntax:
Mehrere Rule können zu einem Einzeiler aneinandergehängt werden
Leerzeichen nach jedem on, um ein do herum und vor einem endon sind zwingend!
Eine Rule unterscheidet nicht zwischen Groß und Kleinschreibung.
Vor 6.1.0 20180706, stand nur ein einziger Rule Speicher für alle Befehle zur Verfügung. Um einen kompletten Rule-Satz im Flash zu speichern kann der rule Befehl verwendet werden:
Seit 6.1.0 20180706 sind 3 Rule Speicher für Rule Befehle verfügbar. Jeder dieser Speicher kann individuell an bzw. ausgeschaltet werden. Statt rule wird hier rule[123] verwendet:
I.V - Trigger (Auslöser)
Ein Trigger setzt sich folgendermaßen zusammen:
<SensorName>#<ValueName>
<SensorName>#<ValueName>=<value>
<SensorName>#<ValueName><<value>
<SensorName>#<ValueName>><value>
Tele-<SensorName>#<ValueName>
Mögliche Trigger sind:
- System#Boot einmalig wenn MQTT gestartet wird. Aufgrund der Befehlsausführung kann dieser nicht früher ausgeführt werden
- Mqtt#Connected wenn MQTT verbunden ist
- Mqtt#Disconnected wenn MQTT getrennt ist
- Wifi#Connected wenn WLAN verbunden ist (6.1.1c)
- Wifi#Disconnected wenn WLAN getrennt ist (6.1.1c)
- Time#Initialized einmalig wenn NTP gestartet ist und die Zeit synchronisiert
- Time#Initilaized>120 einmalig wenn NTP gestartet ist und die Synchronisierung über 2 min dauert (6.1.0)
- Time#Set jede Stunde wenn NTP die Zeit synchronisiert
- Time#Minute jede Minute
- Time#Minute=241 jeden Tag um 04:01 (=241 Minuten nach Mitternacht) (6.1.0)
- Time#Minute|5 alle 5 Minuten (6.1.1.6)
- Clock#Timer=3 wenn der allgemeine Timer3 aktiviert ist
- Rules#Timer=1 wenn der RuleTimer1 Countdown abgelaufen ist
- Event#Anyname wenn das Befehlsereignis Anyname ausgeführt wird
- Power1#State wenn sich der Schaltzustand ändert
- Power1#Boot tritt ein wenn Tasmota startet
- Button#2State wenn sich ein Tastereingang ändert
- Switch1#State wenn sich ein Schaltereingang ändert (zu beachten: SwitchTopic=0 muss für diesen Trigger gesetzt werden)
- Switch1#Boot tritt ein nachdem Tasmota gestartet ist
- Dimmer1#State wenn sich der Dimmer Wert ändert
- Dimmer#Boot tritt ein nachdem Tasmota gestartet ist
- Analog#A0div10 wenn sich der A0 Eingang um mehr als 1% verändert. Unterstützt werden Werte zwischen 0 und 100
Alle angeschlossenen Sensoren können als Trigger verwendet werden, in der Form wie sie in der tele oder Status 8 JSON Ausgabe (Terminal/MQTT) dargestellt werden.
- Dsb18b20#Temperatur<20 Immer wenn die Temperatur des Sensors DSB18B20 kleiner 20 Grad fällt
- AM2301-12#Humidity=55.5 Immer wenn die Feuchtigkeit des Sensors AM2301-12 gleich 55,5% ist
- IMA219#Current>0.100 Immer wenn der aktuell gemessene Wert größer 0.1A ist
- Energy#Power>100 Immer wenn der Leistungsbedarf über 100W steigt
Geräte die RfReceived (Sonoff Bridge) oder IrReceived verwenden, werden ebenfalls gemäß ihrer JSON Ausgabe unterstützt, z.B:
- IrReceived#Data=801 Immer wenn ein IR Signal einer RC5 Fernbedienung, Taste 1 empfangen wird (6.1.0)
- RfReceived#RfKey=4 Immer wenn die Sonoff Bridge das auf Taste 4 gespeicherte RF Signal empfängt
Um mit einen Sensor nur zu jeder tele Ausgabe zu triggern, muss nur das Wort tele als Präfix vor die Sensorbezeichnung gesetzt werden um von den oben beschriebenen Trigger zu unterscheiden.
Siehe unten, Beispiel 5.
<value> kann jede Zahl, Text, %var1% - %var5%, %mem1% - %mem5%, %time%, %uptime%, %sunrise% oder %sunset% sein um die Regel zu testen.
I.VI - Command (Befehl)
Ein Command ist jeder verfügbare Befehl, einschließlich des Befehls Backlog. Ein Command Parameter kann durch die Variable %value% ersetzt werden die für den Trigger Wert <value> steht.
Siehe Beispiel unten.
Um in einer Rule mehrere Befehle auszuführen wird in dieser der Command backlog verwendet und die Commands mit ; abgegrenzt: (siehe backlog)
Spezielle Commands sind die Ausdrücke: var1 bis var6. Diese bieten die Möglichkeit den Trigger Wert <value> in einer Variablen %var1% bis %var6% temporär zu speichern um diese so in jeder anderen Rule mitverwenden zu können. Diese Variablen sind zum Programmstart stets leer.
Siehe unten, Beispiel 5.
Zusätzlich zu %var[x]% sind die Ausdrücke: mem1 bis mem5, ebenfalls spezielle Commands. Diese bieten die Möglichkeit einen Trigger Wert <value> in einer Variablen %mem1% bis %mem6% dauerhaft zu speichern um diese so in jeder anderen Rule mitverwenden zu können. Diese Variablen enthalten beim Programmstart die zuvor gespeicherten Werte.
Siehe unten, Beispiel 5.
Zu beachten:
Derzeit wird keine „if“ Richtlinie oder Verschachtelungen der Rules unterstützt
I.VII - Beispiele
Die folgenden Beispiele erklären eine Anwendungsmöglichkeiten
- verhindern einer Überlastung bei einem Wemos D1 mini
- absetzen einer MQTT Nachricht wenn eine Taste gedrückt wird
- ausführen mehrerer Commands wenn ein Timer abgelaufen ist
- Nutzung der Einmalig-Ausführung (once)
- Nutzung von Variablen und tele-
- Nutzung eines Potentiometers
- Variablen setzen
- Arithmetische Befehle zur Verwendung mit Variablen
- 8a Senden eines Sensorwertes an MQTT nur dann, wenn ein Delta erreicht wird
- 8b Anpassen eines Sensorwertes und versenden über MQTT
- Einfaches Thermostat Beispiel
- Einfache Treppenhaus Zeitsteuerung
- a fortgeschrittene PIR (Bewegungsmelder) Rule für’s Treppenhaus
- Energiespar Regelung (helligkeitsgeführt)
- Timer steuern mit einem Schalter
- Umschalten des Relay’s wenn der Button länger als 2 Sekunden gedrückt wird
- Rule um sicher zu gehen, dass Licht nachts eingeschaltet ist (Nachtlicht)
- Rule zur Aktivierung eines PIR-Sensors nur bei Nacht (Dämmerungsschaltung)
- Verwenden einer externen Taste mit einzel - doppel Tastendruck und gedrückt halten
- Rule um Aktivieren oder Deaktivieren der Türklingel mit HTTP-Aufruf
1. verhindern einer Überbelastung bei einem Wemos D1 mini
Ein WS2812 24-LED-Ring benötigt ungefähr 24 x 3 x 20 mA = 1,44 A Strom. Da ein Wemos D1 mini, der über den USB-Anschluss eines PCs mit Strom versorgt wird, nur bis zu 0,5 A liefern kann, ist eine Strombegrenzungsfunktion sinnvoll die diesen auf 0,1 A begrenzt. Dieser ist ausreichend um alle 24 LED’s bis zur Farbe 202020 zu betreiben.
Hardware
- Wemos D1 mini
- INA219 I2C sensor
- WS2812 LED-Ring mit 24 LED’s versorgt vom Wemos D1 mini 5V durch den NA219 sensor
Software
- Sonoff-Tasmota v5.12.0l oder höher mit aktivierten define USE_RULES
Rule
Ergebnis
- Wenn die Helligkeit soweit erhöht wird das sie den Wert von 0,1A überschreitet, wird die Rule aktiv und löst den Befehl Dimmer 10 aus. Durch das herunterdimmen mit Dimmer 10 und der Farbänderung auf Rot 10,0,0 wird der Strombedarf der LED’s wieder reduziert
2. absetzen einer MQTT Nachricht wenn eine Taste gedrückt wird
Der Nutzer hat hier die Möglichkeit durch einen Tastendruck eine MQTT Nachricht, basierend auf FullTopic und ButtonTopic abzusetzen. Diese MQTT Nachricht wird vom MQTT Broker empfangen und ebenso von allen Geräten die diesen Topic abonniert haben. Auf diese Weise können Nachrichten und Befehle an die Hausautomation und/oder jedes beliebige MQTT Gerät gesendet werden.
Die Problemstellung bei einem Sonoff 4CH besteht darin das dieser mit allen Tasten den gleichen Topic, jedoch mit unterschiedlichen Zahlenindex für die Relays sendet.
Beispiel Umschaltfunktion:cmnd/buttontopic/power3 toggle
Durch die Verwendung einer Regel kann jetzt eine Taste jede beliebige MQTT-Nachricht senden, wodurch die individuellen Einsatzmöglichkeiten erhöht werden.
Hardware
- Sonoff 4CH
Software
- Sonoff-Tasmota v5.12.0l oder höher mit aktivierten define USE_RULES
- Deaktivieren von ButtonTopic da er sonst die Rule überschreiben würde: ButtonTopic 0
Rule
rule on button1#state do publish cmnd/ring2/power %value% endon on button2#state do publish cmnd/strip1/power %value% endon
Ergebnis
- Durch drücken der Taste 1 greift die Rule und sendet die MQTT Nachricht, wobei die Variable %value% den Tastenstatus der Taste 1 beinhaltet: cmnd/ring2/power 2 Bei Betätigung der Taste 2 wird durch die Rule eine MQTT Nachricht: cmnd/strip1/power 2 gesendet, wobei hier die Variable %value% den Tastenstatus der Taste 2 beinhaltet
3 .ausführen mehrerer Commands wenn ein Timer abgelaufen ist
Die Standardfunktion Timer1..16 ermöglicht die Steuerung eines Ausgangs. Entweder aus, ein, umschalten oder blinken. Bei aktiven Rules, wird die Blinkoption durch eine Regelfunktionalität ersetzt, die mehr Flexibilität bietet.
Hardware
- Sonoff 4CH
Software
- Sonoff-Tasmota v5.12.0 oder höher mit aktivierten define USE_RULES
- Den Timer5 für die Rule Verwendung vorbereiten: timer5 mit Einstellungen: {"Arm":1,"Mode":0,"Time":"16:00","Days":"1111111","Repeat":1,"Action":3}
Rule
Ergebnis
- Ist der Timer abgelaufen, greift die Regel und setzt Power1 auf OFF, Power2 auf ON und schaltet Power3 um
Ist eine Blink-Funktion gewünscht, ist die Rule wie folgt zu definieren:
4 .Nutzung der Einmalig-Ausführung (once)
Die Option once bietet die Möglichkeit, bei einer langsamen Zustandsänderung nur einmalig auszulösen, während sich der Zustand noch innerhalb der Auslösegrenzen befindet.
Rule
on ENERGY#Current>0.100 do publish tool/tablesaw/power 1 endon on ENERGY#Current<0.100 do publish tool/tablesaw/power 0 endon
Durch diese Rule wird ein MQTT-Befehle wiederholt abgesetzt, solange ein Sonoff-POW einen Stromfluß gößer 0,100 misst, während wiederholt ein anderer abgesetzt wird sobald der Wert kleiner 0,100 ist.
Rule 5
Jetzt wird der MQTT Befehl jeweils nur einmalig abgesetzt wenn die Bedingung erfüllt wurde. Dies ist ideal für das Ein / Ausschalten eines Thermostats in Abhängigkeit von der Temperatur, eines Badezimmersventilators in Abhängigkeit von der Luftfeuchtigkeit oder das Ein / Ausschalten eines Werkstattstaubsaugers, je nachdem, ob eine stauberzeugende Maschine läuft.
5. Nutzung von Variablen und tele-
Die Verwendung von Variablen ermöglicht das Speichern von Sensorwerten um z.B. eine komplette HA-Nachricht, wie sie bei Domoticz verwendet wird, zu erstellen. Um den Datenverkehr zu Domoticz gering zu halten, wird so nur eine Nachricht zur tele Übertragungszeit gesendet. Dies wird erreicht, indem dem Sensor Name das Label tele- vorangestellt wird. In diesem Beispiel wird eine Variable für die Temperatur gesetzt, die zusammen mit der Luftfeuchtigkeit in einer Domoticz MQTT-Nachricht verwendet werden soll.
Hardware
- Sonoff TH oder Wemos D1 mini
- AM2301 Temperature and Humidity sensor
Rule
on tele-am2301-12#temperature do var1 %value% endon on tele-am2301-12#humidity do publish domoticz/in {"idx":134,"svalue":"%var1%;%value%;1"} endon
Ergebnis
- Aufgrund des Präfix tele- wird durch die Rule zur tele Übertragungszeit für den Sensor AM2301-12, die Temperatur und Luftfeuchtigkeit ausgelesen.
Die erste Rule verwendet den in %value% enthaltenen Temperaturwert und schreibt diesen zur späteren Verwendung in %var1%. Die zweite Rule verwendet den in %value% enthaltenen Luftfeuchtigkeitswert und die in %var1% gespeicherte Temperatur, um eine einzelne, für Domoticz geeignete MQTT-Nachricht zu erstellen.
Schlaue Köpfe haben somit endlich die Möglichkeit, Temperaturen von mehreren DS18B20 Sensoren an Domoticz zu senden.
6. Nutzung eines Potentiometers
Mit dem anschließen eines Potentiometers an den Eingang Analog A0 und einer Rule kann hier der Dimmerstatus eines Geräts gesteuert werden.
Hardware
- Wemos D1 mini
- Potentiometer of 2k2 connected to Gnd, A0 and 3V3
- WS2812 led
Software
- Sonoff-Tasmota v5.12.0n or up with define USE_RULES enabled
Rule
Ergebnis
- Durch Drehen am Potentiometers wird eine Spannungsänderung am Analogeingang, zwischen 0(Off) und 100(On) bewirkt die somit den Trigger auslöst. Der erfasste Analogwert entspricht dabei dem LED-Dimmwert für den WS2812.
Rule
Ergebnis
- Hier ändern alle mit GroupTopic grouplight konfigurierten Leuchten ihre Helligkeit entsprechend der Position des Potentiometers.
Hinweis:
- um Flash-Schreibvorgänge zu reduzieren kann der Command SaveData 2 verwendet werden
7. Variablen setzen
In diesem Beispiel wird die Verwendung von Variablen gezeigt. Dazu muss zuerst der Command Rule 4 (einmalig Erkennung deaktivieren) ausgeführen werden.
- Setzen einer Variablen
benötigte Rule: | on event#setvar1 do var1 %value% endon |
Command: | event setvar1=1 |
- Variable ausgeben
benötigte Rule: | on event#getvar1 do var1 endon |
Command: | event getvar1 |
- Variablen Toogeln (Umschalten)
benötigte Rules: | on event#togglevar1 do event toggling1=%var1% endon |
on event#toggling1<1 do event setvar1=1 endon | |
on event#toggling1>0 do event setvar1=0 endon | |
on event#setvar1 do var1 %value% endon | |
Command: | event togglevar1 |
- Nachrichten anzeigen
benötigte Rule: | on event#message do publish stat/[topic]/log %value% endon |
Command: | event message=INIT |
Alle Event Befehle können ausgeführt werden von:
Konsole: | event anyname=number |
MQTT: | cmnd/[topic]/event anyname=number |
- alles zusammengefasst
rule on event#togglevar1 do event toggling1=%var1% endon on event#toggling1<1 do event setvar1=1 endon on event#toggling1>0 do event setvar1=0 endon on event#setvar1 do var1 %value% endon on event#getvar1 do var1 endon on event#message do publish stat/sonoff/log %value% endon
Hinweis
Folgendes funktioniert nicht:
Zumindest nicht so, wie man es erwarten könnte. Der vom Befehl power1 verwendete Wert var1 ist der Wert, der vorhanden ist, bevor der Befehl backlog ausgeführt wird. Dies ist der Fall, weil die Rule den Wert in %var1% einsetzt, BEVOR die Backlog-Befehle in das Backlog-Protokoll eingestellt werden.
8. Arithmetische Befehle zur Verwendung mit Variablen
- ADD
ADD1 bis ADD5: addiert einen Wert zur VARx
Syntax: | ADDx value |
Anwendung: | ADD1 15 |
Ergebins: | VAR1 = VAR1 + 15 |
- SUBSTRACT
SUB1 bis SUB5: substrahiert einen Wert von VARx
Syntax: | SUBx value |
Anwendung: | SUB1 15 |
Ergebnis: | VAR1 = VAR1 - 15 |
- MULTIPLY
MULT1 bis MULT5: mutipliziert einen Wert mit VARx
Syntax: | MULTx value |
Anwendung: | MULT1 15 |
Ergebnis: | VAR1 = VAR1 * 15 |
- SCALE A VALUE
SCALE1 bis SCALE5:
skaliert einen Wert von einem unteren/oberen Grenzwert zu einem anderen unteren/oberen Grenzwert und schreibt diesen in VARx (entspricht dem Ardunino MAP Befehl)
Syntax: | SCALEx value, fromLow, fromHigh, toLow, toHigh |
Begriffserklärung:
value: | der zu skalierende Wert |
fromLow: | Die Untergrenze des aktuellen Wertebereichs |
fromHigh: | Die Obergrenze des aktuellen Wertebereichs |
toLow: | Die Untergrenze des Zielbereichs des Werts |
toHigh: | Die Obergrenze des Zielbereichs des Werts |
(ausgelassene Werte werden als Null angenommen)
Anwendung: | SCALE1 15, 0, 100, 0, 1000 |
Ergebnis: | VAR1 = 150 |
8a. Senden eines Sensorwertes an MQTT nur dann, wenn ein Delta erreicht wird
Sollte es erforderlich sein einen Sensorwert nur dann zu senden, wenn er ein Delta überschreitet, kann das mit folgendem Regelbeispiel gelöst werden:
rule
on SI7021#temperature>%var1% do backlog var1 %value%; publish stat/sonoff/temp %value%; var2 %value%; add1 2; sub2 2 endon
on SI7021#temperature<%var2% do backlog var2 %value%; publish stat/sonoff/temp %value%; var1 %value%; add1 2; sub2 2 endon
8b. Anpassen eines Sensorwertes und versenden über MQTT
In diesem Beispiel werden der gemessenen Temperatur 2 Grad hinzugefügt und dieser Wert anschließend als MQTT-Topic gesendet.
rule
on tele-SI7021#temperature do backlog var1 %value%; add1 2; event sendtemp endon
on event#sendtemp do publish stat/sonoff/temp %var1% endon
9. Einfaches Thermostat Beispiel
Diese Beispiel ist zur Verwendung auf einem Sonoff TH10 mit Sensor Si7021
In diesem Beispiel wird ein Ausgang basierend auf dem Temperaturwert, dem oberen Sollwert und dem unteren Sollwert ein- und ausgeschaltet. Es wird gewartet, bis es durch Drücken der Taste oder durch den Mqtt Befehl 1 an Mem1 zur Aktivierung kommt.
Dieser Wert wird gespeichert. Nach Stromwiederkehr wird der Betrieb wieder aufgenommen. Die Sollwerte können im laufenden Betrieb durch die Befehle mqtt oder Konsole geändert werden. Wenn der Temperatursensor getrennt wird, werden die Ausgänge ausgeschaltet, bis der Sensor wieder verfügbar ist und den Betrieb fortsetzt. Wenn das Gerät eingeschaltet ist, wartet der Thermostat, bis der Sensorwert den Betrieb wieder aufnimmt.
Ursprungs Config
- Verfügbare physische Taste als Schalter1
- Relay1 wird als Controller verwendet
- Es werden Rule zur Steuerung des Relais benötigt, sodass der Taster nur switch1 und nicht direkt das Relais schaltet. Dazu verwenden wir den switchmode1 3 wie unten beschrieben und erstellen die notwendigen Rule, da die Tastensteuerung des Relais nur deaktiviert wird, wenn die Rules aktiv sind
Konsolenbefehle:
switchmode1 3 | verwendet switch1 as Taste (Dies ermöglicht es uns, die Verbindung zwischen der Taste und dem Relais zu deaktivieren, indem eine Rule eingefügt wird, die vorschreibt, was die Taste tun soll - HINWEIS: Bis zum erstellen der Rule steuert der Taster das Relais!) |
rule 1 | aktiviert die Rule |
rule 4 | deaktiviert die einmalig Funktion |
teleperiod 60 | Temperatur jede Minute abfragen |
setoption26 1 | verwendet power1 bei mqtt Nachricht |
setoption0 0 | den Relais status nicht im eprom speichern |
poweronstate 0 | bei Systemstart alle Relais aus |
mem1 0 | Thermostat Status: 0-off 1-enabled - Wird angezeigt oder gesetzt mit MQTT Befehl cmnd/sonoff/mem1 |
mem2 25 | Sollwert Temp oberer Grenzwert - Wird angezeigt oder gesetzt mit MQTT Befehl cmnd/sonoff/mem2 |
mem3 23 | Sollwert Temp unterer Grenzwert - Wird angezeigt oder gesetzt mit MQTT Befehl cmnd/sonoff/mem3 |
var1 0 |
Thermostat aktueller Status: 1-OK 0-NOT READY - Wird angezeigt oder gesetzt mit MQTT Befehl cmnd/sonoff/var1 |
Rule:
Beim Booten wird ein Watch-Dog-Timer gestartet, um die Verbindung des Temperatur Sensors zu überprüfen
Eine vorhandene Taste ist als Schalter konfiguriert, um den Thermostat ein- oder auszuschalten
on switch1#state do backlog event toggling1=%mem1% endon on event#toggling1=0 do mem 1 endon on event#toggling1=1 do mem 0 endon
Überprüft die Verbindung des Temperatursensors. Wenn diese nicht besteht wird ausgeschaltet und der Temperaturabfragewert auf 0 gesetzt, und weiterhin abgefragt.
Setzt die Timerüberprüfung zurück, wenn der Temperatursensor vorhanden ist
on tele-SI7021#temperature do backlog var1 1; ruletimer1 30; event ctrl_ready=1; event temp_demand=%value%; endon
Thermostatsteuerung - oberer und unterer Grenzwert setzen und aktivieren
on event#ctrl_ready>%mem1% do var1 0 endon on event#temp_demand>%mem2% do power1 0 endon on event#temp_demand<%mem3% do power1 %var1% endon
Der Thermostat kann eingeschaltet werden durch:
- Tastendruck
- über einen lokalen Konsolenbefehl: mem1 1
- durch Befehl auf einer anderen Konsole: publish cmnd/sonoff/mem1 1
- über MQTT: cmnd/sonoff/mem1 1
Der Thermostat kann ausgeschaltet werden durch:
- Tastendruck
- über einen lokalen Konsolenbefehl: mem1 0
- durch Befehl auf einer anderen Konsole: publish cmnd/sonoff/mem1 0
- über MQTT: cmnd/sonoff/mem1 0
Statusabfrage durch:
-
mem1
<- Thermostat status: 0-off 1-enabled -Wird angezeigt oder gesetzt mit MQTT Befehl cmnd/sonoff/mem1 -
mem2
<- setpoint Temp upper limit - Wird angezeigt oder gesetzt mit MQTT Befehl MQTT cmnd/sonoff/mem2 -
mem3
<- setpoint Temp lower limit - Wird angezeigt oder gesetzt mit MQTT Befehl cmnd/sonoff/mem3 -
var1
<- thermostat actual status: 1-OK 0-NOT READY - Wird angezeigt oder gesetzt mit MQTT Befehl cmnd/sonoff/var1
Zusammengefasst:
Konsolenbefehle:
(Bitte beachten, dass ruletimer1 größer als teleperiod sein muss um eine korrekte Funktion zu erzielen)
backlog switchmode1 3
rule 1
rule 4
teleperiod 60
setoption26 1
setoption0 0
poweronstate 0
mem1 0
mem2 25
mem3 23
var1 0
RULE:
rule1 on system#boot do ruletimer1 70 endon on Switch1#State do event toggling1=%mem1% endon on event#toggling1=0 do mem 1 endon on event#toggling1=1 do mem 0 endon on rules#timer=1 do backlog var1 0; ruletimer1 70; power1 0; endon on tele-SI7021#temperature do backlog var1 1; ruletimer1 70; event ctrl_ready=1; event temp_demand=%value%; endon on event#ctrl_ready>%mem1% do var1 0 endon on event#temp_demand>%mem2% do power1 0 endon on event#temp_demand<%mem3% do power1 %var1% endon
BEISPIELREGELN OHNE TEMPERATURSENSOR, ZUM TEST DER THERMOSTATREGELN:
rule on system#boot do ruletimer1 70 endon on Switch1#State do event toggling1=%mem1% endon on event#toggling1=0 do mem 1 endon on event#toggling1=1 do mem 0 endon on rules#timer=1 do backlog var1 0; ruletimer1 70; power1 0; endon on event#temp do backlog var1 1; ruletimer1 70; event ctrl_ready=1; event temp_demand=%value%; endon on event#ctrl_ready>%mem1% do var1 0 endon on event#temp_demand>%mem2% do power1 0 endon on event#temp_demand<%mem3% do power1 %var1% endon
TESTS
- Drücken der Taste1. Der Thermostat wechselt zu ENABLED (mem1 = 1)
- in der Konsole: event temp=20 (wird vom System vom Temperatursensor wie eine Tele-Nachricht empfangen) und schaltet das Relais1 ein (heizen)
- in der Konsole: event temp=26 (der Thermostat schaltet die Heizung aus)
- in der Konsole: event temp=22 (der Thermostat schaltet die Heizung ein)
- Wird länger als eine Minute gewartet, ohne die event temp zu verändern, schaltet sich der Thermostat aus, da es keinen gemeldeten Temperaturwert gibt (z. B. bei einem Sensorfehler oder einer Unterbrechung).
- Wird wieder aufgenommen, wenn event temp erneut verwendet wird
- in der Konsole: mem1 0, DISABLED, bzw. mem1 1, ENABLED
TIMERS
Mit den oben genannten Timern kann mem1 gesteuert und einen Zeitplan hinzufügen werden, mit dem der Thermostat aktiviert wird.
10. Einfache Treppenhaus Zeitsteuerung
Rule
rule1 on button1#state do backlog power1 %value%; ruletimer1 600 endon on rules#timer=1 do power1 off endon
Ergebnis
on button1#state do backlog power1 %value%;
- Beim Drücken der Taste wird das Licht im Treppenhaus ein- / ausgeschaltet
ruletimer1 600 endon
- Zusätzlich beginnt der ruletimer 1 mit einem 10 Minuten Countdown
on rules#timer=1 do power1 off endon
- Nachdem ruletimer1 abgelaufen ist, wird das Licht ausgeschaltet (sollte es noch an sein)
10a fortgeschrittene PIR (Bewegungsmelder) Rule für’s Treppenhaus
Diese Beispiel funktioniert gut auf einem Wemos D1 Mini mit Tasmota 6.2.1. Wird als Nachtlicht mit Bewegungssensor oder als Umgebungslicht für Boden oder Küche verwendet. Es ist ein LED Strip WS2812 an D1, ein PIR an D2 und einen LDR an A0 (Spannungsteiler mit 10k Ohm Widerstand) anzuschließen
Besipiel PIR: HR-SC501
Die Einstellungen
18 Generic
D1 WS2812
D2 Switch1
LDR an Wemos A0 (aktiviert in user_config.h)
Rules
rule1 on analog#a0<400 do backlog rule3 0; rule2 1 endon on analog#a0>500 do backlog rule2 0; rule3 1 endon
rule2 on switch1#state do backlog power1 1; ruletimer1 30 endon on rules#timer=1 do power1 off endon
Konsolenbefehle:
switchmode1 1
rule1 1 Rules aktivieren
rule1 6 einmalig Erkennung
Optional
rule2 4
rule3 4
Ergebnis
on analog#a0>400 Deaktiviert rule3 und aktiviert rule2
on analog#a0>500 Deaktiviert rule2 und aktiviert rule3
- rule2 aktiviert die LEDs und startet den ruletimer1 30 Sekunden. Bei jedem Triggerimpuls vom PIR wird der rultimer neu gestartet.
on rules#timer=1 do power1 off
- rule3 ist bei Tageslicht aktiv und bewirkt mit dem PIR-Signal ein Power1 Off Signal. Die LEDs bleiben aus.
11 .Energiespar Regelung (helligkeitsgeführt)
Beispiel eines Schalters, der ein Licht helligkeitsabhängig (LUX) steuert.
Ist der Schalter eingeschaltet, wird das Licht nur dann eingeschaltet, wenn die Raumhelligkeit kleiner 100 Lux ist.
Ist der Schalter ausgeschaltet ist, geht das Licht aus.
on switch1#state=1 do var1 100 endon
on switch1#state=0 do backlog var1 0; power1 off endon
on APDS9960#Ambient<%var1% do power1 on endon
Alles zusammen funktioniert als Rule
rule 1
rule on switch1#state=1 do var1 100 endon on switch1#state=0 do backlog var1 0; power1 off endon on APDS9960#Ambient<%var1% do power1 on endon
12 .Timer steuern mit einem Schalter
Annahme: Ein Schalter ist an GPIO00 angeschlossen und als Switch1 konfiguriert:
Konsolenbefehle:
switchmode1 1
Rule:
Switchmode1 1 bewirkt, dass der Switch1#state 1 ist, wenn eingeschaltet ist, und 0, wenn ausgeschaltet ist
Wenn Switchmode1 nicht gesetzt oder 0 ist, ist Switch1#state = 2 (Toggle) aktiv und die Rule funktioniert nicht.
13 .Umschalten des Relay’s wenn der Button länger als 2 Sekunden gedrückt wird
Im folgenden Beispiel wird erläutert, wie die HOLD-Funktion für Tasten konfiguriert und verwendet wird.
Verhalten: Die "kurzer Tastendruck" Funktion des Button1 deaktivieren und stattdessen umschalten des Relais nur dann wenn der Button1 für 2 Sekunden gedrückt wird.
Konsolenbefehle:
buttontopic 0
setoption1
setoption32 20
rule on button1#state=3 do power1 2 endon on button1#state=2 do delay endon
rule 1
Befehlserklärung
buttontopic 0 | (Standard) Um Topics nicht für Buttons verwenden zu machen |
setoption1 1 | Erlaubt nur Button einzeldruck, doppeldruck, und gedrückt halten Aktionen |
setoption32 20 | Setzen der Tastendruckdauer von 0.1 auf 10 Sekunden (20 = 2 Sekunden) |
rule on button1#state=3 do power1 2 endon | Wenn der Button1 für 2 Sekunden gedrückt wird, wird das Relais1 umgeschaltet (state = 3 bedeudet HOLD) |
on button1#state=2 do delay endon | Mache nichts wenn die Taste1 kurz gedrückt wird (state = 2 bedeuted TOGGLE) |
rule 1 | Aktiviert die Rule |
HINWEIS: Es gibt keine Statusausgabe für "Doppeldruck" der Tasten. Dies wurde erstellt damit das Relais durch einen Doppeldruck umgeschaltet wird. Weitere Informationen unter: https://github.com/arendst/Sonoff…l-other-devices
Soll die Funktion "Doppeldruck" nicht aktiv sein, muss der Button als Schalter konfiguriert werden und ebenso der switchmode auf den gewünschten Modus eingestellt werden (z.B. switchmode 5, damit er sich wie eine Button verhält) [SWITCH hat keinen Doppeldruck]
switchtopic1 0
switchmode1 5
setoption32 20
rule on switch1#state=3 do power1 2 endon on switch1#state=2 do delay endon
rule 1
14 .Regel, um sicher zu gehen, dass Licht nachts eingeschaltet ist
Zeitschaltuhren können unter anderem zur Wege oder Terrassenbeleuchtung bei Nacht eingesetzt werden. Ist der Sonoff zum Auslösezeitpunkt nicht mit Strom versorgt, bleibt das Licht die Nacht aus. Eine Rule die zum Start(Boot)-Zeitpunkt die Einschaltbedingungen überprüft bringt hier Ausfallsicherheit.
Dazu ist ein Timer zu konfigurieren, der das Licht bei Sonnenuntergang ein- und bei Sonnenaufgang ausschaltet. Mit der Verwendung von poweronstate 0 wird festgelegt das das Licht zum Startzeitpunkt aus ist. Es wird folgende Rule eingesetzet:
on Time#Initialized do backlog event checksunrise=%time%; event checksunset=%time% endon
on event#checksunset>%sunset% do power1 1 endon
on event#checksunrise<%sunrise% do power1 1 endon
Die Rule setzt folgende Logik um:
WENN %time%>%sunset DANN power1 1 / WENN %time%<%sunrise DANN power1 1
15 .Rule zur Aktivierung eines PIR-Sensors nur bei Nacht (Dämmerungsschaltung)
Vorhanden:
- PIR HC-SR501
- GPIO14 09 Switch1 (Sonoff Basic)
- Jumper (Brücke) außen ( like this )
- Lat und Lng (Breiten und Längengrad) in der config gesetzt
Konsolenbefehle:
switchmode1 1
rule1 1
Rule:
rule1
onSwitch1#state=1 do backlog event checksunrise=%time%; event checksunset=%time% endon
on event#checksunrise<%sunrise% do power1 1 endon
on event#checksunset>%sunset% do power1 1 endon
16 .Verwenden einer externen Taste mit einzel - doppel Tastendruck und gedrückt halten
Es stehen nur dann alle 3 Funktionen zur Verfügung wenn der verwendete GPIO als Button definiert ist. Dadurch wird das Relais durch zweimaliges Drücken umgeschaltet (toggle).
Es besteht die Option, die Einfachdruck und Doppeldruck Funktion auszutauschen
BUTTON MIT 3 VERSCHIEDENEN FUNKTIONEN
- Anwendungsbeispiel
(Voraussetzung: GPIO0 ist als Button1 konfiguriert)
Dies soll erreicht werden:
Einfachdruck: Relais umschalten; Doppeldruck: MQTT Nachricht senden; 2 Sekunden gedrückt halten: Weiter MQTT Nachricht senden
Konsolenbefehle:
buttontopic 0
setoption1 1
setoption11 1
setoption32 20
rule 1
Rule:
rule on button1#state=3 do publish cmnd/topicHOLD/power 2 endon on button1#state=2 do publish cmnd/topicDOUBLEPRESS/power 2 endon
- weiteres Beispiel
(Voraussetzung: GPIO0 ist als Button1 konfiguriert)
Dies soll erreicht werden:
Einfachdruck: MQTT Nachricht senden; Doppeldruck: Relais umschalten; 2 Sekunden gedrückt halten: Weiter MQTT Nachricht senden
Konsolenbefehle:
buttontopic 0
setoption1 1
setoption11 0
setoption32 20
rule 1
Rule:
rule on button1#state=3 do publish cmnd/topicHOLD/power 2 endon on button1#state=2 do publish cmnd/topicSINGLEPRESS/power 2 endon
(Bitte beachten: setoption11 0)
SCHALTER MIT ZWEI UNTERSCHIEDLICHEN FUNKTIONEN
Schalter können keine Doppeldruck Funktion
- Beispiel
(Voraussetzung: GPIO0 ist als Switch1 konfiguriert)
Dies soll erreicht werden:
Einfachdruck: nichts; 2 Sekunden gedrückt halten: Relais 1 umschalten
Konsolenbefehle:
switchtopic1 0
switchmode1 5
setoption32 20
rule 1
Rule:
17 .Rule zum Aktivieren oder Deaktivieren der Türklingel mit HTTP-Aufruf
Es soll das Relais an GPIO12 über einen HTTP Befehl ein- und ausgeschaltet werden und der aktuelle Status über eine MQTT Nachricht (in diesem Fall wird domoticz verwendet) gesendet werden.
Dazu werden in diesem Beispiel Rules verwendet
Ursprungs Config
- GPIO14 Türklingeltaster (Doorbell)
- GPIO12 Switch4 (Sonoff Basic)
Den Türklingeltaster GND und an den GPIO14 des Sonoff Basic anschließen.
Zur Sicherheit einen 4,7K Pullup-Widerstand zwischen VCC(3,3V) und GPIO14 einsetzten um Scheinauslösungen zu vermeiden. (Kondensator ist optional) siehe: YouTube
Nicht vergessen den IDX value zu ändern
Konsolenbefehle:
switchtopic 0
switchmode4 2
setoption0 0
poweronstate 0
var1 1
rule1 1
Rule:
rule1
on event#doorbell do var1 %value% endon
on switch4#state=1 do publish domoticz/in {"idx":11,"nvalue":1} endon
on switch4#state=1 do power1 %var1% endon
on switch4#state=0 do publish domoticz/in {"idx":11,"nvalue":0} endon
on switch4#state=0 do power1 0 endon
Verwendung:
Nun kann über einen HTTP Befehl das Relais ausgeschaltet werden:
oder zum einschalten:
Ist der Sonoff mit Passwort versehen wird der HTTP Aufruf wie folgt gestaltet:
Aus:
http://<tasmotaIP>/cm?&user=<tasmotaUsername>&password=<tasmotaPassword>&cmnd=event%20doorbell=0
An:
http://<tasmotaIP>/cm?&user=<tasmotaUsername>&password=<tasmotaPassword>&cmnd=event%20doorbell=1
I.VIII - Änderungsprotokoll der Rule
6.1.1.11:
- %sunset%, %sunrise% hinzugefügt