Rule mit zwei Bedingungen

  • Hallo,

    ich versuche mich gerade in das Thema Tasmota und Regeln einzuarbeiten. Die einfachen Regeln, sind kein Problem. Aber bei folgendem Problem komme ich seit gut einer Woche nicht weiter.

    Ich habe an einer Porterweiterung (MCP23017) zwei PIR Sensoren, welche auf "0" aktiv schalten. Zudem habe ich ein BH1750 Sensor verbaut. Beide Komponenten funktionieren einwandfrei.

    Ich möchte eine Regel erstellen, welche "power1" einschaltet, wenn einer der beiden PIR-Sensoren auf 0 schalten und der BH1750 einen LUX-Wert kleiner 10 misst. Power1 soll dann nach 10 Sekunden ausschalten.

    PIR1 ist an MCP230XX#D0 und PIR2 ist an MCP230XX#D1 angeschlossen.

    Folgende funktionierende Test-Regeln konnte ich zusammen bauen:

    Code: [Auswählen]
    Rule1 on BH1750#Illuminance < 10 do backlog power1 1; ruletimer1 10 endon on rules#timer=1 do power1 0 endon


    Rule1 on MCP230XX#D0 = 0 do if BH1750#Illuminance < 10 then backlog power1 1; ruletimer1 10 endif endon on rules#timer1 do power1 0 endon


    Die Verknüpfung beider Regeln habe ich nicht hin bekommen.

    Könnt ihr mir vielleicht weiterhelfen? Danke!

    Grüße

  • bin zwar auch kein Rule profi würde aber einfach rule2 nehmen sieht dann so aus:

    Rule1 on BH1750#Illuminance < 10 do backlog power1 1; ruletimer1 10 endon on rules#timer=1 do power1 0 endon

    Rule2 on MCP230XX#D0 = 0 do if BH1750#Illuminance < 10 then backlog power1 1; ruletimer1 10 endif endon on rules#timer1 do power1 0 endon

    backlog rule1 1; Rule2 1

    grüsse aus Heidelberg

    ca. 100 Tasmota Geräte teilweise mit SML Script.

    Home Assistant, Alexa, Sonos, (Pilot APP zur Steuerung, Domoticz (auslaufend))

  • Hallo,

    vielen Dank für deine Antwort.

    Ich habe die Regel mit der IF mal eingegeben. Wenn die Regel auslösen soll, wird auf der Konsole folgendes ausgegeben:

    Code
    RUL: MCP230XX#D0 = 0 performs "if BH1750#Illuminance < 10 then backlog power1 1; ruletimer1 10 endif"
    MQT: stat/---/RESULT = {"Command":"Unknown"}

    Wenn ich das richtig verstehe, dann konnte die Regel nicht verarbeitet werden. Power1 wurde auch nicht geschalten.

    Ich weiß nicht, ob es wichtig ist, aber ich verwende die aktuellste Version von Tasmota (Tasmota 8.2.0 von Theo Arends). Habe diese aber eigenständig kompiliert um die Sensoren frei zu schalten.

    Was habe ich falsch gemacht?

  • Einstein67: Danke für den Hinweis. Ich habe die genannten Zeilen mit mit aufgenommen.

    Ich muss allerdings meinen ersten Beitrag bezüglich der zweiten Formulierung der Rule1 korrigieren. So wie sie oben steht, hat sie bei mir natürlich nicht funktioniert. Hatte mich beim Kopieren vertan.

    Code
    Rule1 on BH1750#Illuminance < 10 do backlog power1 1; ruletimer1 10 endon on rules#timer=1 do power1 0 endon
    
    Rule1 on MCP230XX#D0 = 0 do backlog power1 1; ruletimer1 10 endon on rules#timer=1 do power1 0 endon

    Das waren die beiden Regeln, welche bei mir funktioniert haben.

    Nachdem ich jetzt die IF-Anweisung mit kompiliert habe, wird die Regel folgende Regel zwar erkannt und angeblich auch ausgeführt, aber power1 bleibt off

    Code
    Rule1 on MCP230XX#D0 = 0 do if BH1750#Illuminance < 10 then backlog power1 1; ruletimer1 10 endif endon on rules#timer=1 do power1 0 endon

    Die Konsole gibt dies hier aus:

    Könntet ihr bitte noch mal drüber gucken und mir einen Tipp geben?

    Danke!

  • Hi.

    Du musst schon den Syntax richtig anwenden BSP:

    IF (Mem1==0) Var1 Var1+1; Mem1 1 ENDIF

    IF (in der Klammer die Bedingung) <danach die Aktionen mit ; getrennt> ENDIF

    Hier gibt's die ausführliche Erklärung:

    https://tasmota.github.io/docs/Rules/#expressions-in-rules

    Und auch ein schönes Beispiel:

    1. Rule1
    2. on system#boot do var1 0 endon
    3. on energy#power>100 do if (var1!=1) ruletimer1 0;var1 1 endif endon
    4. on tele-energy#power<50 do if (var1==1) var1 2;ruletimer1 600 endif endon
    5. on rules#timer=1 do backlog var1 0;power off endon

    Sonoff-Basic / Sonoff-RF / Sonoff-Touch / Sonoff S20 / PowStro Basic / MagicHome / Sonoff-RF-Bridge mit diversen 433MHz RF Sender/Empfänger / Shelly_1 / ESP-WiFi-Dimmer / Gosund SP111 / ESP12E / WEMOS D1 Mini / ESP32Cam

    Sensoren: BME280/BMP280/HC-SR501/HC-SR04/ACS712/INA219/MHZ19B/DS3231

    Alexa Sprachsteuerung

    mosquitto/bash/html/cgi auf Wyse5070

  • Hallo,

    ich habe nun gefühlt alle möglichen Schreibweisen für die Regel durchprobiert. Aber das Resultat ist nicht wie erwartet.

    Code
    Rule1 on MCP230XX#D0 = 0 do IF (BH1750#Illuminance<10) power1 1; ruletimer1 10 ENDIF endon on rules#timer=1 do power1 0 endon

    Diese Regel schaltet Power1 an und auch wieder aus, aber unabhängig davon, welchen Wert der BH1750 ausgibt. Entsprechend könnte ich die IF auch weg lassen. Würde auf das gleiche Resultat raus kommen.

    Hat noch jemand eine Idee, was ich falsch mache? Achja, ja ich habe auch versucht das IF/ENDIF groß zu schreiben.

  • Hi

    Hat noch jemand eine Idee, was ich falsch mache? Achja, ja ich habe auch versucht das IF/ENDIF groß zu schreiben.

    Ich hab bisher nicht weiter mit den Conditional Rule gearbeitet aber ich kann mir vorstellen das der value vom BH1750 so nicht ausgewertet wird.

    Alternative zum testen mit ner Variablen. Da siehst du dann wenigsten auch in der Konsole ob der Illuminance Wert überschritten wurde.

    Außerdem wird während einer Rule Laufzeit Wertänderungen nicht übernommen. Sprich zu dem einem Zeitpunkt wenn der Trigger MCP230XX#D0==0 (im übrigen ohne Leerzeichen zwischen Bedingung und Trigger) wird dieser Illuminacewert genommen. Ist dann der Trigger ausgelöst und ändert sich nicht mehr erfolgt auch kein weiteres triggern. Wenn also der Illumincewert der sich am meisten ändernde ist dann wäre das der Haupttrigger:

    Rule1 on (BH1750#Illuminance<10 do IF (MCP230XX#D0=0) power1 1; ruletimer1 10 ENDIF endon on rules#timer=1 do power1 0 endon

    oder Alternativ mal mit ner variablen damit man sieht was denn der Wert so macht:

    Rule1 on system#boot do var1 0 endon on BH1750#Illuminance<10 do var1 1 endon on BH1750#Illuminance>=10 do var1 0 endon on MCP230XX#D0==0 do IF (%var1%==1) power1 1; ruletimer1 10 ENDIF endon on rules#timer=1 do power1 0 endon

    oder weitere Alternative ganz ohne Conditional Rules:

    Rule1 on system#boot do rule2 0 endon on MCP230XX#D0==0 do rule2 1 endon on MCP230XX#D0>=1 do rule2 0 endon on rules#timer=1 do power1 0 endon

    Rule2 on BH1750#Illuminance<10 do backlog power1 1; ruletimer1 10 endon

    Sonoff-Basic / Sonoff-RF / Sonoff-Touch / Sonoff S20 / PowStro Basic / MagicHome / Sonoff-RF-Bridge mit diversen 433MHz RF Sender/Empfänger / Shelly_1 / ESP-WiFi-Dimmer / Gosund SP111 / ESP12E / WEMOS D1 Mini / ESP32Cam

    Sensoren: BME280/BMP280/HC-SR501/HC-SR04/ACS712/INA219/MHZ19B/DS3231

    Alexa Sprachsteuerung

    mosquitto/bash/html/cgi auf Wyse5070

    2 Mal editiert, zuletzt von HoerMirAuf (17. November 2021 um 15:24)