Rule zerschießt Sonoff S20

  • Hallo Zusammen,

    seit über einer Woche versuche ich verzweifelt mithilfe des Tasmota-Wikis und diverser Antworten hier im Forum eine Rule zu erstellen, aber alles was dabei raus kam, sind zwei "zerschossene" S20.

    Da ich nur eine begrenzte Anzahl davon hier habe hoffe ich, daß Ihr mir weiter helfen könnt ;)

    Ich möchte über GPIO3, sprich "RX", ein Signal zuführen, welches die Steckdose ausschaltet, wenn es toggelt. Einschalten soll darüber nicht möglich sein, eingeschaltet wird nur über die üblichen vorhandenen Wege. Hintergrund ist, daß ich mit einem Rauchmelder, welcher den Druckraum meines 3D-Druckers überwacht, als zusätzliche Option noch gerne den Drucker spannungslos schalten möchte.

    Hier mal der letzte (noch nicht funktionierende Stand):

    rule1 on button2#state==2 do power1 0 endon

    Leider hab ich die Rules nicht wirklich verstanden, ich probiere aktuell mit Switch und Button rum, habe damit aber verschiedene Probleme. Zum einen ist der RX-Pin mal high- und mal low-aktiv?! Zum anderen schaltet die Rule mitunter erst dann, wenn ich RX mit GND verbinde und wieder trenne. Ich möchte aber mit VCC schalten und zwar sofort, wenn das Signal anliegt, und sicherheitshalber auch wenn das Signal wieder weg geht, sprich einfach immer dann, wenn sich der Zustand ändert. Vielleicht kann mir hier jemand den richtigen Weg zeigen?

    Die beiden "zerschossenen" S20 hab ich aktuell nicht neu geflasht, das Verhalten ist aber trotz deaktivierter Rule ganz seltsam. Ich stecke diese ein, das Relais schaltet ein, durch Drücken des "normalen" Buttons schaltet das Relais aus nur um 1 Sekunde später wieder einzuschalten!? Bei beiden dasselbe Verhalten, vielleicht hat auch hier jemand eine Idee?

    Vielen herzlichen Dank schon mal!

  • Gespielt hab ich mit einer Brücke an der 4-poligen Stiftleiste, die auch zum Programmieren dient. Hab einfach RX mit GND bzw. 3V3 verbunden.

    Vom Rauchmelder kommt dann aber eine Zweidrahtleitung welche ich auf RX führen möchte, die beiden GND häng ich für gleiches Potential zusammen. Das Signal ist normalerweise high-aktiv, mir wäre aber eine "Toggle"-Erkennung am liebsten. Der ESP ist meines Wissens 5V-tollerant, würde aber trotzdem sicherheitshalber einen Serienwiderstand und Z-Diode (3V3) spendieren.

  • Hab einfach RX mit GND bzw. 3V3 verbunden.

    Bei Nutzung von RX muss in Logging Konfiguration "serial log level" auf 0 None gesetzt werden.

    Verbindung mit 3,3V zum Gpio sollte man einen Vorwiderstand (etwa 10kohm) einsetzen.

    Vom Rauchmelder kommt dann aber eine Zweidrahtleitung welche ich auf RX führen möchte

    Wie wird darüber gesteuert. Ein Foto der Platine wäre nicht schlecht.

    Der ESP ist meines Wissens 5V-tollerant

    Ein ESP benötigt zwischen 3,0 - 3,6V.

    Alles was drüber ist schrottet den ESP.

    Deine Rule habe ich mal geändert und getestet.

    Funktioniert soweit gut.

    Dafür wurde GND zum Gpio getastet.

    rule1 on button2#state do power1 off endon

    rule1 1

  • Ein ESP benötigt zwischen 3,0 - 3,6V.
    Alles was drüber ist schrottet den ESP.

    Klar, hast natürlich recht, der ESP will um die 3V3. War schlecht ausgedrückt, ich meinte "die GPIOs des ESP sind 5V tolerant". Trotzdem kann ein Serienwiderstand und eine Z-Diode nicht schaden, kostet nix und tut nicht weh.

    Bei Nutzung von RX muss in Logging Konfiguration "serial log level" auf 0 None gesetzt werden.

    Verbindung mit 3,3V zum Gpio sollte man einen Vorwiderstand (etwa 10kohm) einsetzen.

    Das wird der Grund sein, warum meine ESPs den Löffel geschmissen haben... macht nix, hab neue sind bestellt, bei 0,66€ das Stück ja kein Problem :)

    Wie wird darüber gesteuert. Ein Foto der Platine wäre nicht schlecht.

    Es handelt sich um einen Ei650C. Der unterstützt einen ganz einfachen "Bus". Eine Leitung mit angeblich 0-5V, die andere GND. Jeder Ei650C, der Rauch erkennt, schaltet bis zu 5V drauf, jeder Ei650C, der glaub ab 3V erkennt, pfeifft. Ziemlich dämlich, da nicht drahtbruchsicher, aber egal. Mir reichts erst mal, als zusätzliche Maßnahme neben der eigentlichen Raucherkennung und -meldung, den Strom abzuschalten.

    Deine Rule habe ich mal geändert und getestet.

    Funktioniert soweit gut.

    Dafür wurde GND zum Gpio getastet.

    rule1 on button2#state do power1 off endon

    rule1 1

    Vielen Dank dafür, komm leider heute nicht mehr zum Testen, mach ich morgen gleich mal. Soweit ich das verstehe, sollte diese Rule so auch mit 3V3.

    Hast Du noch einen klärenden Satz warum ich "state==2" nicht benötige, so würde ich das doch aus dem Tasmota-Wiki raus lesen, oder?

  • Hast Du noch einen klärenden Satz warum ich "state==2" nicht benötige

    Mit dem erstellen von Rules stehe ich bis jetzt auch erst ganz am Anfang . Vielleicht kann dass ja einer der Rule Experten erklären.

    Am Ausgang vom RM wo die 0-5 V bei Raucherkennung könnte auch ein Optokoppler gesetzt werden der dann den Gnd an Gpio schaltet.

  • Hi

    Hast Du noch einen klärenden Satz warum ich "state==2" nicht benötige

    Der Trigger button#state löst immer bei Button-Änderung aus. Das dann getoggelt wird bestimmt der Switchmode (steht default auf 0 = toggle). Also muss auch nur auf die Änderung des Button Zustandes abgefragt werden.

    Ist der Switchmode 0 steht der Button bzw. Switch#state sowieso immer auf 2 also ist das dann auch kein Abfragekriterium sondern nur DAS der Button#state überhaupt getriggert wurde.

    benzino77 Tasmocompiler

    Gitpod Master Release

    Gitpod Development Release

    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

  • Der Trigger button#state löst immer bei Button-Änderung aus. Das dann getoggelt wird bestimmt der Switchmode (steht default auf 0 = toggle). Also muss auch nur auf die Änderung des Button Zustandes abgefragt werden.

    Ist der Switchmode 0 steht der Button bzw. Switch#state sowieso immer auf 2 also ist das dann auch kein Abfragekriterium sondern nur DAS der Button#state überhaupt getriggert wurde.

    Ganz kapiert hab ich das zwar immer noch nicht, aber ich glaube zumindest schon mal den Ansatz einer Ahnung zu haben, wie die Idee dahinter ist. Herzlichen Dank für Deine Antwort!

    Der Switchmode gibt scheinbar an, wann eine button#state Aktion ausgelöst werden soll, und in meinem Fall reicht daher button#state, weil ich ja gerne auf beiden Flanken triggern möchte, würde ich zwar gerne toggeln erkennen aber auf die high-Flanke anders reagieren als auf die low-Flanke, dann könnte ich mittels button#state==0 und button#state==1 noch den aktuellen Zustand auswerden und entsprechend behandeln. Wäre das so korrekt?

    Verbindung mit 3,3V zum Gpio sollte man einen Vorwiderstand (etwa 10kohm) einsetzen.

    Das kommt mir mittlerweile etwas komisch vor, bei einer normalen UART schalte ich doch für ein High-Signal auch einfach 3V3 drauf, wozu benötige ich hier einen Vorwiderstand? Das müßte beim ESP doch ein high-Z Eingang oder zumindest ein Eingang mit pullup/-down sein, 3V3 dürften hier auch ohne Strom-begrenzenden Vorwiderstand keine Probleme bereiten.

    Die beiden "zerschossenen" Sofoffs habe ich mittlerweile neu geflasht, die funktionieren wieder tadellos. Vorher haben sich diese nicht mehr ins WLAN verbunded und das Schaltverhalten war wie oben beschrieben ja eher eigenartig. Der Port hat meine Manipulationen wohl überlebt, warum es mir dabei aber die Settings im Flash zerlegt hat, ist schon sehr seltsam, riecht ja eher nach Bug als nach Feature.

    Die Rule funktioniert leider immer noch nicht so recht. Hab "serial log level" auf 0 gestellt, GPIO3 auf "Button" und "2", mit rule1 erhalte ich: {"Rule1":"ON","Once":"OFF","StopOnError":"OFF","Length":36,"Free":475,"Rules":"on button2#state do power1 off endon"}, sieht meiner Meinung nach gut aus.

    Verhalten ist immer noch seltsam:

    - keine Reaktion wenn ich 3V3 (über 10k) anlege

    - Reaktion bei 0V entweder erst zeitverzögert nach mehrere Sekunden oder sofort, wenn ich die Brücke wieder öffne

    Sollte "toggle" nicht bei 0V und 3V3 reagieren oder falls beim ESP ein pullup geschaltet ist dann wenn ich 0V verbinde und wenn ich die 0V wieder trenne?

    Am Ausgang vom RM wo die 0-5 V bei Raucherkennung könnte auch ein Optokoppler gesetzt werden der dann den Gnd an Gpio schaltet.

    Klar, wäre möglich und wenn ich den Optokoppler direkt in den Rauchmelder einbaue, wäre zumindest die Kabelstrecke auch noch drahtbruchsicher, gehen müßte aber doch schalten nach 3V3 auch, oder? Schaltet er ESP am RX-pin einen Pullup, so daß er die 3V3 nicht sieht? Würde aber dem widersprechen, daß ich bei meiner Spielerei durchaus auch schon eine Reaktion auf 3V3 gesehen habe, weiß aber nicht mehr wann genau

  • Moin.

    Ganz kapiert hab ich das zwar immer noch nicht, aber ich glaube zumindest schon mal den Ansatz einer Ahnung zu haben, wie die Idee dahinter ist. Herzlichen Dank für Deine Antwort!

    Der Switchmode gibt scheinbar an, wann eine button#state Aktion ausgelöst werden soll, und in meinem Fall reicht daher button#state, weil ich ja gerne auf beiden Flanken triggern möchte, würde ich zwar gerne toggeln erkennen aber auf die high-Flanke anders reagieren als auf die low-Flanke, dann könnte ich mittels button#state==0 und button#state==1 noch den aktuellen Zustand auswerden und entsprechend behandeln. Wäre das so korrekt?

    Naja ...nicht ganz. Mal generell erklärt:

    Das Grundelement in Tasmota ist das Relais. Das erzeugt eine Webbutton und wenn ich zu dem Relais einen Button oder Switch konfiguriere ist dieser erst mal funktional mit dem Relais verbunden.

    Der Switchmode gibt das Schaltverhalten des Relais bei Button/Switch Betätigung an

    https://tasmota.github.io/docs/Commands/

    Und Button#State ist ein Rule Trigger der eine Aktion auslöst, wenn der Button Level auf HIGH oder LOW steht.

    https://tasmota.github.io/docs/Rules/

    Direkt "Flankengesteuert" ist das weniger, bzw. wenn man von Flankensteuerung spricht wird bei Definiton des GPIO's auf Button, nur eine Flanke ausgewertet. Das Relais toggelt beim drücken des Tasters oder beim loslassen (Switchmode 0 oder eben 4)

    Anders ist das dann beim Switch#State. Also wenn ich den GPIO als Switch, statt Button definiere. Steht dann z.B. der Switchmode auf "follow" folgt das Relais dem Schalterzustand. Ist der geschlossen ist das Relais ON ist der Schalter offen, ist das Relais OFF .... wenn man das auf Flanken überträgt könnte man sagen bei steigender ON bei fallender OFF.

    Beim Button (Taster ... die Zustandsänderung ist ja nur vorübergehend, solange ich eben den Taster drücke) macht daher auch ein Wert im Button#State nicht viel Sinn, da interessiert eigentlich nur wurde geändert, ob steigend oder fallend kann ich ja über den Switchmode festlegen. Beim Switch#State macht das aber dann durchaus Sinn: Ist der Switch geschlossen oder offen, denn dieser Zustand bleibt ja dauerhaft bis zur nächsten Betätigung. Von der Flankenvorstellung würde ich mich da aber lösen, besser ist es sich da auf die HIGH/LOW Zustände der GPIO's zu beziehen.

    Deshalb gibt es ja auch die "ONE-SHOT (Once)" Funktion in den Rules. Weil der Trigger ja nicht auf die Flanke (die wäre ja eben immer nur einmal pro Betätigung) reagiert sondern auf den GPIO-Level und somit auch ohne "ONCE" permanent nachtriggert.

    weil ich ja gerne auf beiden Flanken triggern möchte, würde ich zwar gerne toggeln erkennen aber auf die high-Flanke anders reagieren als auf die low-Flanke, dann könnte ich mittels button#state==0 und button#state==1 noch den aktuellen Zustand auswerden und entsprechend behandeln. Wäre das so korrekt?

    Nö, denn es gibt ja keinen Button#State==0 oder Button#State==1

    Möchtest du also unterschiedliche verhalten bei HIGH und LOW Signal eines GPIO's muss der erst mal als Switch definiert werden,

    Damit werden dann beide Schaltzustände ausgwertet. Nicht vergessen der Switch ist immer noch intern mit dem Relais verknüpft.

    Switch1 bezieht sich auf Relais1 usw. Soll z.B. der HIGH Wert etwas anderes schalten als der LOW Wert dann muss ich zum einen den Switch funktional vom Relais entkoppeln. Das geht mit Setoption114, wirkt sich aber auf ALLE Switch und Relais aus.

    Setze ich jetzt Switchmode 2 kann ich dann durch ne Rule und Switch#State jeden einzelnen Schalterzustand abfragen und muss den aber auch über ne Rule mit einer Funktion verknüpfen.

    Bsp.:

    Relais1 auf einem GPIO

    Relais2 auf einem GPIO

    Switch1 auf einem GPIO

    Switch2 auf einem GPIO

    setoption114

    switchmode2

    rule1 

    on switch1#state==0 do power1 1 endon on switch1#state==1 do power2 1 endon

    on switch2#state==0 do power1 0 endon on switch2#state==1 do power2 0 endon


    Funktion:

    Wird Schalter1 (oder auch Taster) geschlossen schaltet Relais2 EIN, wird dieser geöffnet schaltet Relais1 EIN

    Wird Schalter2 (oder auch Taster) geschlossen schaltet Relais2 AUS, wird dieser geöffnet schaltet Relais1 AUS

    Der Switch1 schaltet also BEIDE Reiais EIN und Switch2 BEIDE AUS Ich hab das extra mal verkreuzt um die Funktion deutlicher zu machen aber mann kann natürlich auch für 3 Relais die Standartfunktion für die Button nachbilden und für einen eben eine ganz eigene Funktion machen. Eben bei 0 Das Relais Toggeln und bei 1 z.B. einen Websend absetzen etc.

    Ich hoffe da hilft fürs Verständniss weiter. ;)

    benzino77 Tasmocompiler

    Gitpod Master Release

    Gitpod Development Release

    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

    3 Mal editiert, zuletzt von HoerMirAuf (12. Januar 2021 um 08:57)