Hi.
Hmm? Wieso? Die Rule2 macht doch was sie soll?
Zitat09:37:07.657 RUL: VAR1#STATE performs "publish state/Wetterstation-II/SENSOR/winddirection NO"
Hi.
Hmm? Wieso? Die Rule2 macht doch was sie soll?
Zitat09:37:07.657 RUL: VAR1#STATE performs "publish state/Wetterstation-II/SENSOR/winddirection NO"
Hi.
Was passiert denn, wenn das Licht vom Garagantüröffner angesteuert wird? Soll es ebenfalls nach 60s ausgeschaltet werden? Ich geh jetzt mal davon aus.
Ich würde das mit Rules lösen.
Als erstes würde ich das Shelly Relais auf Relais2 umstellen und einem ungenutzen GPIO das Relais1 zuweisen (virtuelles Relais)
Dann folgende Rule:
Rule1 on power1#state do backlog power2 on; ruletimer1 60 endon on rules#timer=1 do power2 0 endon
Rule aktivieren:
Rule1 1
Immer wenn das virtuelle Relais (Power1) getoggelt wird (egal ob vom Wandtaster oder vom Garagentorantrieb) wird das physische Relais eingeschaltet, der Timer mit 60 Sekunden aktiviert und wenn der abgelaufen ist wird ausgeschaltet. Der Vorteil ist das nachgteriggert wird. Brennt das licht z.B. schon 50 Sekunden und dann kommt der Garagentorantrieb, wird der Timer neu gestartet und du hast wieder die vollen 60 Sekunden Laufzeit.
Allerdings hast du dann 2 Relais im WebIF wobei das Relais1 ja nur virtuell ist und je nach Schaltzustand auch auf ON stehen kann obwohldas Licht (Relais2) aus ist.
Versuchs mal so:
ON var1#state DO publish stat/weatherstation/winddirection %var1% ENDON
Moin
sollte eigentlich so gehen:
if uid=="abc12345"
or uid=="def23456"
or uid=="ghi34567"
or uid=="jkl45678"
then
timer=2
print RFID Erkannt!!!
->Power1 1
endif
Hi
Aber du kannst zu den Rules die Conditional Rules einkompilieren, die "if,else,for,and" Unterstützen:
Hi.
Zu Windmessung und Tasmota gibts das:
https://tasmota.github.io/docs/TX2x/
Bisi Arduino Code nutzt leider nix in für Tasmota.
Ob Dein TX174 identisch oder vergleichbar zum TX20/TX23 ist, mit dem das ja geht, keine Ahnung.
Aber vielleicht hilft der Link ja weiter.
Moin.
ich hatte schon das Problem, das RX bzw TX hardwareseitig mit dem Sensor belegt war.
Da geht der Chip zwar in Flashmode aber gibt eben keine saubere Datenkommunikation.
Die RX/TX Leiterbahn temporär durchtrennen oder vorsichtiges ablöten der RX/TX Pin's hat bei mir die Lösung gebracht.
Da bist dann wieder bei den Rules, siehe mein Beispiel.
Moin
Ich habe auch noch so etwas gefunden:
Geht natürlich auch aber weniger elegant.
Power1 3 blinkcount 10
Das ist natürlich die einfachste Möglichkeit.
Mit "blinktime" wird dann die Blinkgeschwindigkeit eingestellt.
Ich dachte es geht primär um's Rules erstellen:
kann man in der Konsole so etwas wie eine Regel erstellen wo dann das Relias mehrmals im Sekundentakt ein und ausgeschaltet kann?
Moin.
Das geht schon mit den Rules.
Var1 steht in der Rule für Toggle Anzahl. 5x an und 5x aus sind also 10. Kann natürlich angepasst werden.
Die Blinkzeit wird im Ruletimer festgelegt. 1 = 1 Sekunde. Kann ebenfalls angepasst werden.
rule1 on button1#state do var1 10 endon on var1#state > 0 do ruletimer1 1 endon on rules#timer=1 do backlog power1 2; sub1 1 endon
Und die Rule aktivieren mit:
rule1 1
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.
Hi
PowerOnState greift ja auch für alle Relais, ebenso SetOption0.
Das lässt sich mit ner einfachen Rule lösen:
rule1 on system#boot do power3 1 endon
rule1 1
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.
Hi.
hmmm ok, dann darf nicht auf ONCE gestellt werden. rule1 4 schaltet once wieder aus.
Eigentlich ja logisch, der Trigger bleibt ja immer derselbe.
Wenn du sagst du hast es mit "=" Probiert, wie schaut dann deine Rule aus? Damit sollte es nämlich schon gehen.
Moin.
Eigentlich hört sich das nicht danach an, als wenn hier eine hochkomplizierte abfrage nötig ist. aber ich habe es mit mehreren Versuchen nicht geschaft
Das einzige was ich hinbekommen habe ist 1 Status zu senden wenn der Wert über 500 Steigt.
Doch, das ist kompliziert, denn diese Abfrage erfordert:
WENN "Wert grösser als" UND "Wert kleiner als" DANN <Befehl>
also
IF AND THEN
Das geht nicht mit den Standart Rules sondern nur wenn:
Conditional Rules im Binarie einkompiliert sind.
ZitatThis feature is not included in precompiled binaries.
To use it you must compile your build. Add the following to
user_config_override.h
:Code#define USE_EXPRESSION // Add support for expression evaluation in rules (+3k2 code, +64 bytes mem) #define SUPPORT_IF_STATEMENT // Add support for IF statement in rules (+4k2 code, -332 bytes mem)
Major features
- Support IF, ELSEIF, ELSE
- Support for
<comparison>
and<logical expression>
as condition- Support for executing multiple commands
- Support for nested IF statements
- Available free RAM is the only limit for logical operators, parenthesis, and nested IF statements.
https://tasmota.github.io/docs/Rules/#us…elseifelseendif
Oder eben gleich Script. Ich selbst hab bisher nicht mit Conditional Rules gearbeitet.... das mach in dann lieber auf nem Raspi.
Ein zweites Login mit eingeschränkten Rechten oder so gibt es ja nicht (oder?).
Nö, gibt es nicht.
Noch nee andere Chance oder Trick (evtl. über "Vorlage konfigurieren" und da GPIO oder so "ändern" ?)
Schaut schlecht aus, denn der Web-Button wird immer mit dem konfigurieren eines Relais erstellt und ohne Relais geht's eben nicht.
Möglich das sich das Web-IF mit Script dahingehende modifizieren lässt ... aber da bin ich leider raus,
Moin.
">=" macht keinen Unterschied zu ">", nur das der Grenzwert eben bei gleich erreicht wird nicht erst bei größer.
Ich kann es leider nicht nachstellen aber es sollte mit "=" gehen.
Evtl. die Rule mal auf ONCE setzten
Rule1 5
Nochmal ganz blöd nachfrag... Wenn ich die GPIO's "ausschalte", wie kann ich denn dann überhaupt noch schalten?
Schalten geht dann natürlich über die Button nicht mehr.
Ist aber ja auch nur um auszutesten ob es über die Button GPIO's einkoppelt, was ich vermute.
Wenn das der Fall ist, wird es schwierig das zu beheben. Entweder räumlich weiter auseinander oder eben schirmen.
Moin.
Naja ...da sind ja auch 4 Taster auf dem 4CH ... die sind ja auch GPIO's zugeordnet.
Du kannst ja mal auf Generic stellen oder eine Template erstellen das auf dem 4CH basiert und eben diese GPIO's auf denen die Taster sind einfahc auf NONE stellen. Wenn dann nichts mehr schaltet dann weißt du das der Schaltimpuls über einen Taster GPIO induziert wird,