script editor für Tasmota

  • Hallo, habe mal ein Frage:

    wie kann ich die String-Information eines RF-Senders mit Script richtig abfragen?

    folgendes brachte die Konsole beim betätigen der Taste:

    22:44:09.489 MQT: tele/tasmota_99/RESULT =

    Code
    22:44:09.489 MQT: tele/tasmota_99/RESULT = {"Time":"2022-03-27T22:44:09","RfReceived":{"Data":"0xBEF0B8","Bits":24,"Protocol":1,"Pulse":244}}

    die Taste soll z.B. Power1 toggeln

    MFG 3306

    Einmal editiert, zuletzt von 3306 (27. März 2022 um 23:07)

  • danke, hat soweit schon mal funktioniert, wie zu sehen:

    Code
    20:25:32.261 MQT: tele/tasmota_99/RESULT = {"Time":"2022-03-28T20:25:32","RfReceived":{"Data":"0xBEF0B8","Bits":24,"Protocol":1,"Pulse":244}}
    20:25:32.265 Taste: 0xBEF0B8
    20:25:32.268 Script: performs "Power1 2"
    20:25:32.314 MQT: stat/tasmota_99/RESULT = {"POWER1":"ON"}
    20:25:32.329 MQT: stat/tasmota_99/POWER1 = ON
    20:25:36.521 MQT: tele/tasmota_99/RESULT = {"Time":"2022-03-28T20:25:36","RfReceived":{"Data":"0xBEF0B8","Bits":24,"Protocol":1,"Pulse":244}}
    20:25:36.526 Taste: 0xBEF0B8
    20:25:36.527 Script: performs "Power1 2"
    20:25:36.569 MQT: stat/tasmota_99/RESULT = {"POWER1":"OFF"}
    20:25:36.584 MQT: stat/tasmota_99/POWER1 = OFF

    habe das jetzt mal erweitert und damit aber ein Problem:

    wenn ich nur Button1 drücke, toggle ich damit Power1,

    Code
    21:04:53.724 MQT: stat/tasmota_99/RESULT = {"Button1":{"Action":"SINGLE"}}
    21:04:53.728 Script: performs "Power1 2"
    21:04:53.768 MQT: stat/tasmota_99/RESULT = {"POWER1":"ON"}
    21:04:53.783 MQT: stat/tasmota_99/POWER1 = ON
    21:04:58.680 MQT: stat/tasmota_99/RESULT = {"Button1":{"Action":"SINGLE"}}
    21:04:58.686 Script: performs "Power1 2"
    21:04:58.729 MQT: stat/tasmota_99/RESULT = {"POWER1":"OFF"}
    21:04:58.740 MQT: stat/tasmota_99/POWER1 = OFF

    aber wenn ich zuvor rf-Taste betätigt habe, geht bei nachträglichem betätigen von Button1 Power1 kurz An,dann Aus und dann wieder toogle,

    wie in der Konsole zu sehen:

    um diesen Effekt zu deaktivieren,muß ich den ESP32 neu starten.

    Ich weis nicht, warum die RF-Taste nochmals 2x mit abgearbeitet wird.

    Ist schon komisch! Vielleicht kann jemand weiterhelfen?

    ich muß noch ergänzend dazu sagen, dass ich die Button-Eingänge von den Relais-Ausgängen abgekoppelt habe, mit:

    Code
    ;Button- Eingänge  von Relais-Ausgänge abkoppeln, nur MQTT-Nachricht
    =>setoption73 1
    
    ;Button-Eingänge nur auf 1-Tastendruck voreinstellen,voreingestellt:disable
    =>setoption13 1

    MFG 3306

    2 Mal editiert, zuletzt von 3306 (28. März 2022 um 21:05)

  • Vielleicht kann jemand weiterhelfen?

    cut & paste hat mir eine Zeile verschluckt ;),

    die Variable rf sollte man in >E auch wieder löschen

    >E

    rf=RfReceived#Data

    if rf=="0xBEF0B8"

    then

    =>Power1 2

    endif

    rf=""

    ...


    daran wird es aber vermutlich nicht liegen,

    bei mir funktioniert dein erw. script auf esp8266 ohne Probleme,

    tippe eher auf fehlenden pull-up Widerstand an Taster/GPIO13.

  • danke Dir,

    nee, pullup ist schon vorhanden,daran liegt es nicht,

    aber ich habe da gestern auch noch weiter gelesen und experimentiert und habe herausgefunden , dass die Anweisung chg und upd sich selber nach Abarbeitung wieder löschen, also dachte ich mir, muß vielleicht die String-Variable per Hand gelöscht werden, weil das nicht passiert.

    Habe also genau das was du schreibst auch mal probiert, mit rf="0" und siehe da, das war es. Ich habe dies aber vor endif eingefügt.

    1. Aber warum ist das Verhalten so in E> ?

    2. in E> wird doch nur etwas abgearbeitet, wenn ein entsprechendes Event auftritt, aber doch nicht alles, was da noch so in E> steht, oder doch?

    3. Ist das so, als ob ich in die Unterroutine: E> springe, wenn ein Event eintrifft?

    4. Lösche ich mit rf="" die Variable wieder, oder nur in E> ?

    Kann man kaum was zu lesen.

    MFG 3306

  • alles, was da noch so in E> steht

    denke schon, es wird alles in >E abgearbeitet

    3. ja, sehe ich so

    4. rf="" gilt dann überall, nicht nur in >E,

    der RF-Code wurde quasi einmal gedrückt und somit abgearbeitet,

    wird rf="0xBEF0B8" weiterhin beibehalten,

    triggert dies in >E auch wenn ein anderes event als RfReceived eintritt.

  • wird rf="0xBEF0B8" weiterhin beibehalten,

    triggert dies in >E auch wenn ein anderes event als RfReceived eintritt.

    sehe ich auch so, zeigen auch meine Tests.

    OK,danke hat mir super weiter geholfen.

    Hast du auch eine Idee, wie man in einer Liste aufsteigend Messwerte sortieren kann, dann daraus die ersten und die letzten Werte löschen und dann aus dem Rest einen Mittelwert bilden kann, und das alles mit Skript.

    MFG 3306

  • Hallo vieleicht kann mir einer Helfen. Ich möchte mein Teppenlicht steuern als Lauflicht.

    Ich habe zwei wemos d1 mini die jeweils 118 LED´s anteuern W2812B und zwei Lichtschranken.

    Meine Vorstellung ist.

    - ich gehen unten durch die Lichtschranke und die LED´s gehen nach und nach nach oben an, in der Zeit muss die Lichschranke ober gesperrt sein.

    - nach einer Zeit X sagen wir 20sec geht die LED´s im lauflicht wieder von unten aus

    - das gleiche soll auch passieren wenn ich von oben durch die Lichtschranke gehe

    - ein Zusatz,

    - ich habe eine Wetterstation, kann mann hier auch die Lichtwerte verwenden das die LED nur angehen wenn eine bestimmte Lichtstärke (Helligkeit) ist

    Die Teppenbeleuchtung wir schon durch ein Javascript vom ioBrocken angesteuert wo sie schon bei einer bestimmen Helligkeit eingeschaltet wird.

    Wenn die LED´s schon an sind und ich durch die Lichtschranke gehe sollen die LED heller und in ein anderen Farbe angehen und wenn die Zeit X sagen wir 20sec wieder in der zu vorherigen Zustand gehen.

  • Hallo,

    ich bin neu im Forum und in diesem erledigten Thread vielleicht nicht richtig mit folgender Frage:

    Zur Zeit lese ich einen SML-Monitor mit Tasmota mit einer Android-App direkt ueber HTTP-Request aus. Die Sensordaten finde ich im status 8-Aufruf. Soweit so gut. Leider fehlen 24h-Werte fuer den Verbrauch im Datenstrom der Zaehler. Mit dem Tasmotaskript kann ich die die Zaehlerstaende auslesen, die 24h-Deltas berechnen und in der Konsole rausschreiben. Wie aber bekomme ich die Variablenwerte in irgendeinen Container, den ich mit HTTP auslesen kann?

    Habe dazu nichts Passendes gefunden.

    Ich habe keinen Raspi, also auch keinen Broker und keine Moeglichkeit, selbst zu flashen.

    Mit den =d und =m-Optionen in den Deskriptoren der >M Sektion habe ich es bereits ohne Erfolg versucht. =m geht mit Konstanten aber leider nicht mit Variablen. Wahrscheinlich fehlt die entsprechende Option im Tasmota-Build.

    Vermutlich ist die Loesung ganz einfach.

    Schon mal danke

    Uwe

  • Hallo Zusammen,

    ich versuche grad auch einen script zu erstellen um damit ein websend zu machen.

    Leider resettet der d1mini bei jedem mal wenn die die FB drücke und er eins der Codes empfängt,
    die ich abfrage...

    hat jemand eine Idee?

    auch so geht es nicht

    drücke ich andere Tasten läuft er ganz normal weiter

  • Moin,

    Version ist die 12.2.0
    #define USE_WEBSEND_RESPONSE bin ich mir nicht sicher.

    aber der >F trick funktioniert.

    so funktioniert es.

    Allerdings habe ich mich sowas von geärgert, den ganzen Nachmittag mit dem 433er Modul rumgefummelt,
    dann lief es ja und ich konnte schön die FB abfragen.
    dann einmal zum Einsatzort um zu schauen ob es dort geht und zack werde ich quasi alle paar Sekunden
    dichtgespamt mit signalen.

    und die FB geht nur aus etwa 30cm Entfernung.

    Nun habe ich das am Schreibtisch ebenfalls... X(

    ich weiß garnicht wo soviele Daten herkommen....

  • der Fehler wurde am 7.12.22 behoben. nimm mal zur Sicherheit die neueste Version, da sollte dein ersten script gehen, glaube die 12.2.0 ist noch defekt.

    oder versuch mal das hier:

  • Hallo,

    kann mir einer sagen was an diesem Skript falsch ist?

    Ich versuche lediglich die Temperaturen einzulesen und dann das Relais schalten wenn die Temperatur den Grenzwert überschritten hat.

    Hab schon einige Beispiele aus diesem Unterhaltung probiert, ich bekomme das nicht hin.

    Viele Grüße