Hilfe zu Rules: mehrere Trigger mit oder Verknüpfung

  • Mir fällt gerade nichts sinnvolles ein, daher bitte ich um einen Tipp:


    Ziel:

    Es gibt vier Relais. Relais 4 soll immer dann mit anziehen, wenn eines der drei anderen anzieht und wieder abfallen, wenn jedes der drei anderen abgefallen ist.

    Klassisch also beim Trigger eine Oder-Verknüfung: Wenn Relais1 oder 2 oder 3 = On, dann Relais 4 on, sonst off


    Wie kann ich sowas mit den Tasmota Rules umsetzen? Wenn ich richtig verstehe, kann beim Trigger keine Oderverknüfungen von drei Bedingungen vornehmen.

  • Hmmmm ... da könnte der relativ neue "break" Befehl helfen, der ne "if then" Anweisung simuliert.

    Ich hab den noch nicht getestet deshalb rein theoretisch.

    Normalerweise kommt nach dem do ein Befehl bevor der "break" kommt.

    Könnte aber sein das es auch ohne den geht also eine break gleich nach dem do.

    Bitte mal testen und Rückinfo geben. Ansonsten müssen wir uns eben nen Befehl einfallen lassen wie eine sinnlose MQTT Nachricht oder so.


    Einschalten ist ein ODER, entweder 1 ODER 2 ODER 3 ein dann 4 ein.

    Ausschalten ist ein UND, wenn 1 UND 2 UND 3 aus, dann 4 aus.


    Erst mal eine Rule um einzuschalten, das ist einfach:

    rule1 on power1#state=1 do power4 1 endon on power2#state=1 do power4 1 endon on power3#state=1 do power4 1 endon


    Und dann ne rule die auschaltet

    (muss in dem Fall als NAND ausgeführt werden immer wenn eins der Relais 1 - 3 auf "ON" ist wird die Kette unterbrochen)

    rule2 on power1#state=1 do break on power2#state=1 do break on power3#state=1 do break on power3#state=0 do power4 0 endon

    Tasmota 6.6.0 - Arduino-IDE - 1.8.7

    Sonoff-Basic / Sonoff-RF / Sonoff-Touch / Sonoff S20 / PowStro / HomeMagic / Sonoff-RF-Bridge mit diversen 433MHz RF Sender/Empfänger / Shelly_1 / ESP-WiFi-Dimmer

    Sensoren: BME280/BMP280/HC-SR501/HC-SR04/ACS712

    mosquitto/bash/html/cgi auf RPI 2B+/Sprachsteuerung via IFTTT/3xGoogle-Home-Mini

  • Genial, die Idee ist Klasse und müsste funktionieren - Danke! Ich gebe Rückmeldung, wenn ich es getestet habe.


    gemu2015 : Ich wusste bisher nicht, dass das geht. Habe aber jetzt deinen Beitrag im Github gefunden. Ich müsste aber wohl neu kompilieren. Daher teste ich erst mal die Variante mit den Rules.


    Vielleicht noch zum Hintergrund der Anwendung - falls es interessiert:

    Mit Rel1-3 sollen Magnetventile angesteuert werden die mit 24V AC laufen, also einen einfachen Trafo benötigen. Um den wegen des Stromverbrauchs nicht permanent am Netz zu haben, soll er mit Rel4 jedesmal automatisch dazu geschaltet werden. Könnte man letztlich auch per zusätzlichem MQTT Befehl lösen, aber per Rules oder Script gibt es eine Fehlerquelle weniger und die Zuverlässigkeit steigt.

  • gemu2015: Ich wusste bisher nicht, dass das geht. Habe aber jetzt deinen Beitrag im Github gefunden


    Stimmt, an @gemu2015 Script Syntax hab ich nicht gedacht. :thumbup:

    Tasmota 6.6.0 - Arduino-IDE - 1.8.7

    Sonoff-Basic / Sonoff-RF / Sonoff-Touch / Sonoff S20 / PowStro / HomeMagic / Sonoff-RF-Bridge mit diversen 433MHz RF Sender/Empfänger / Shelly_1 / ESP-WiFi-Dimmer

    Sensoren: BME280/BMP280/HC-SR501/HC-SR04/ACS712

    mosquitto/bash/html/cgi auf RPI 2B+/Sprachsteuerung via IFTTT/3xGoogle-Home-Mini

    Einmal editiert, zuletzt von HoerMirAuf ()

  • Ich habe eben mal ein wenig rumgespielt, bekomme es aber nicht so recht hin. Problem scheint aber nicht die Logik der Rules an sich zu sein, sondern die Statusabfrage des Pin vom MCP. Der ESP steigt nämlich gar nicht erst in die Rule ein.


    Also die Syntax des Triggers (Beispiel):


    Code
    1. power1#state=1


    Ich habe einige Schreibweisen probiert:


    Code
    1. sensor29 1#state=1
    2. sensor29 1,on
    3. sensor29_D1#state=1
    4. sensor29 1,state=1

    Im Netzt habe ich zur korrekten Syntax auch nicht gefunden. Habt ihr eine Idee?

  • sensor29 1#state=1

    Welcher Sensor den?


    Der Trigger von den Relays ist power1#state bis power4#state


    Die Rule mussen nach Eingabe auch noch aktiviert werden, was auch im Wiki nachzulesen ist und in zig anderen Thread's steht, wenn man sich die Mühe macht sich ein wenig einzuarbeiten.

    rule1 1

    rule2 1

    Tasmota 6.6.0 - Arduino-IDE - 1.8.7

    Sonoff-Basic / Sonoff-RF / Sonoff-Touch / Sonoff S20 / PowStro / HomeMagic / Sonoff-RF-Bridge mit diversen 433MHz RF Sender/Empfänger / Shelly_1 / ESP-WiFi-Dimmer

    Sensoren: BME280/BMP280/HC-SR501/HC-SR04/ACS712

    mosquitto/bash/html/cgi auf RPI 2B+/Sprachsteuerung via IFTTT/3xGoogle-Home-Mini

  • Die Rules sind natürlich aktiviert.


    Ich babe am I2C einen MCP230017 Port Expander an dem insgesamt 12 Relais hängen.

    Die Ausgänge des MCP können nicht als Relais 1...12 definiert und mit Power1...12 angesprochen werden (so mein Kenntnisstand bisher).


    Die Ausgänge vom MCP werden angesprochen mit


    sensor29 <portnummer>,<Befehl>


    Sensor29 1,on schaltet Relais am Port 1 ein.


    Sorry, hatte gedacht, es oben erwähnt zu haben.

    power1#state=1 funktioniert also nicht. Habe dann verschiedene Syntax probiert (s. o.), aber leider ohne Erfolg. Der Trigger funktioniert nicht.




    Edit:

    Hab gerade doch noch etwas gefunden. Demnach müsste die Syntax für den MCP (hier Pin 1) wie folgt lauten:


    Code
    1. event#MCPINT_D1=1

    Ich teste das heute Abend und geb Rückmeldung.

  • Sensor29 1,on schaltet Relais am Port 1 ein.

    Je nachdem, ob man den MCP23017 für Input oder Output verwenden möchte.


    In deinem Fall als Output, passt dann

    Sensor29 0,ON OFF oder T für toggle


    Aber dem MCP23017 muss beigebracht werden, ob er als Output

    bzw. Input oder auch gemischt arbeiten soll.


    bei Output z.B.: Sensor29 0,5

    bei Input z.B.: Sensor29 1,2,0


    dann als Bsp.:

    Rule1 on event#MCPINT_D1=1 do Sensor29 0,ON endon on event#MCPINT_D1=0 do Sensor29 0,OFF endon



    Was man braucht, findet man hier:

    https://github.com/arendst/Son…ta/wiki/MCP23008-MCP23017


    oder auch:

    https://www.digiblur.com/2018/…expand-tasmotasonoff.html

  • Moin,

    alle Pins meines MCP23017 sind als Output definiert (Pinmode 5). Die Relais schalten auch, wenn man sie mit

    Code
    1. sensor29 <x>,on
    2. sensor29 <x>,off oder
    3. sensor29 <x>,t

    anspricht. Soweit ist das alles kein Problem.


    Das Problem ist (und bleibt), den jeweiligen Pin in einer Rule zu triggern. Das will einfach nicht funktionieren.

    Der Trigger

    Code
    1. event#MCPINT_D1=1

    funktioniert leider auch nicht. Er funktioniert nur im Interrupt Mode - also nur dann, wenn die Pins des MCP als Eingänge mit aktiviertem IntMode definiert sind (Pinmodes 2-4). Bei Output (Pinmode 5 und 6) steht der IntMode aber nicht zur Verfügung.


    Bei Outputs steht wohl nur Telemetry zur Verfügung. Ein Event - wenn ich richtig verstehe - wird im Fall des Outputs vom Treiber nicht generiert.

  • den jeweiligen Pin in einer Rule zu triggern.

    Wenn man den Output als trigger haben will, dann so


    on MCP230XX#D1=1 do ... etc.


    und "Once" der Rule gegebenenfalls aktivieren

    Rule1 5

  • Kurze Rückmeldung auf die Schnelle:


    Die Rules funktionieren. Der Trigger funktioniert mit

    Code
    1. on MCP230XX#D1=1 do

    ...wie von NoitaercX beschrieben.

    Sobald ich Zeit habe, muss ich mich mit Rule<x> 5 bzw. 6 (once) beschäftigen, da mir die Rules derzeit das Log vollhauen. Dazu kommt dann nochmal ne Rückmeldung.



    Ich bastel jetzt noch an der Einbindung in FHEM. Das MQTT2 Device wurde da erkannt. Die Frage ist nur, mit welchem Topic ich das jeweilige Relais anspreche. Normalerweise ist der Pfad für normale Relais

    Code
    1. cmnd/<Topic aus MQTT Einstellungen Tasmota>/Power<x>
    2. cmnd/Gartenhaus/Power1     

    Den MCP230XX kann ich nicht mit Power<x> ansprechen - das ist klar. Aber was muss hin?

    Folgende varianten habe ich erfolglos versucht:

    Code
    1. cmnd/Gartenhaus/sensor29 1
    2. cmnd/Gartenhaus/MCP230XX_D1
    3. cmnd/Gartenhaus/MCP230_OUT_OUT_D1
    4. cmnd/Gartenhaus/S29cmnd_D1


    Kann man eigenlich z. B. den Ausgang MCP230XX_D1 auch auf "Relay1" von Tasmota mappen und anschließend dann auch mit Power1 ansprechen?

  • Den MCP230XX kann ich nicht mit Power<x> ansprechen - das ist klar. Aber was muss hin?


    cmnd/Gartenhaus/Sensor29 0,ON


    PayLoad ist 0,ON etc.


    Mappen in der Art (odert genauso umgekehrt):

    Rule3 on Power1#State=1 do Sensor29 0,ON endon on Power1#State=0 do Sensor29 0,OFF endon

  • Danke das hat gepasst.

    Das Mappen per Rule ist etwas umfangreich angesichts maximal 512 Zeichen per Ruleset. In Tasmota kann man einen Pin des ESP als Relay<x> deklarieren und dann ist das soweit fertig (und es erscheinen bei gleichzeitig deklariertem Switch1 auch Schalter). Hatte gehofft, man könnte irgendwie einfach MCP Pin<x> als Relay<x> deklarieren. Könnte ich vlt. mal als Verbesserungsvorschlag im Git posten...