script editor für Tasmota

  • Hallo Gerhard,


    Perfekt! ;) Die SUBs kann ich jetzt auch von der Konsole aus aufrufen.


    Kannst du vielleicht mit der dynamischen Code-Ausführung auch was zaubern? (mein vorheriger Post)


    LG Kaennchen

  • Hallo Gerhard,


    ich möchte Code dynamisch ausführen (den ich per WebSend von einam anderen ESP bekommen habe)


    Generell möchte ich den Inhalt einer mir noch nicht bekannten Variable, deren Name ich als Text übermittelt bekomme, einer lokalen Variable zuweisen.


    Stattdessen:

    Code
    1. 10:07:24 tt:sendvar=localvar
    2. 10:07:24 sendvar:A:0.00
    3. 10:07:24 sendvar:B:0.00
    4. 10:07:24 sendvar:C:55.00


    Wird mein Ansinnen dadurch etwas klarer?


    Der Schlüssel ist das "%tt%" das m.E. nicht ausgewertet wird.


    LG Kaennchen

  • Danke, probiere ich gleich mal aus.


    Ich möchte auch gerne was zurückgeben, daher habe ich (mit meinen äußerst beschränkten C-Kenntnissen) folgendes gebaut:


    Als Doku:

    Code
    1. sb(svar s n) = substring - retrieve a substring of n characters of svar starting at s. S may be negative.
    2. sl(svar) = string length - retrieve length of svar

    Passt das auch rein?


    LG Kaennchen

  • da es nur extrem wenig platz für strings gibt und die meisten User kaum strings brauchen habe ich mich bisher mit Stringfunktionen zurückgehalten.

    habe deine Funktionen aber eingebaut. wir müssen aber aufpassen dass die Codegrösse nicht zu stark anwächst.

    bitte gut testen und Bescheid sagen ob alles geht dann mache ich eine pr.

  • da es nur extrem wenig platz für strings gibt und die meisten User kaum strings brauchen habe ich mich bisher mit Stringfunktionen zurückgehalten.

    habe deine Funktionen aber eingebaut. wir müssen aber aufpassen dass die Codegrösse nicht zu stark anwächst.

    bitte gut testen und Bescheid sagen ob alles geht dann mache ich eine pr.

    Erste Sahne! Das funktioniert durchweg asterein! Vielen Dank! ;)

  • Eine Frage hätte ich noch... wenn ich Werte instant abfragen möchte, wie komme ich dann an die Daten ran?

    Mein Blitzwolf hat z.B. (bei den Rules) ein on "ENERGY#Power" - bekomme ich das (ausser, wenn ich auf die Teleperiod warten kann) irgendwie in eine Variable rein?


    pwr=ENERGY#Power geht leider nicht.


    Danke & LG Kaennchen

  • wenn das eine TELE message ist kommt sie nur in Sektor T rein. dort muss pwr=ENERY#Power funktionieren (auf Groß klein Schreibung achten im Gegensatz zu rules)

    EVENTS also RESULT etc kommen in Sektor E rein.


    dann mit if upd[pwr] oder chg[pwr] abfragen. das ist dann equivalent zu rule on ... do

  • Hallo kaennchen,


    habe jetzt erst verstanden was du da machen willst.

    du forderst mit websend Werte eines anderen Tasmota an und hast den code zum Websend Response im Webserver aktiviert.


    das ist eine gute Idee!

    es braucht dabei keine scripts auf der anderen Seite!


    habe das jetzt aber etwas einfacher gelöst.


    du kannst jetzt 3 stufige MQTTs abfragen


    die RESULT Meldungen kommen in Sektion >E an


    temp=StatusSNS#BME280#Temperature

    ->print tmp=%temp%


    neue Version auf Github (files scripter und Webserver)


    um das WebSend Ergebnis zu erhalten bitte


    #define USE_WEBSEND_RESPONSE


    in der user_config angeben


    VG Gerhard


    PS. bei print braucht man jetzt kein => mehr davor

  • Hallo Gerhard,


    ist ja toll was alles so entsteht wenn man mal nicht da ist. Das aus Deinem letzten Post habe ich auch getestet.


    Jetzt hätte ich auch noch mal ne Frage:


    Die Timestamp ist ja im Dezember eingebaut worden (https://github.com/arendst/Sonoff-Tasmota/issues/4734). Ich habe aber keine Möglichkeit gefunden sie verarbeiten zu können, also festzustellen welche denn älter ist als die andere.

    Habe mir mal was dazu gebaut:

    Das Ergebnis eines Aufrufes von lt (later than)

    cnt=lt(erster zweiter)


    ist dann

    0 wenn beide gleich

    1 wenn der Erste später

    2 wenn der Zweite später


    Man könnte damit Werte aufgrund ihrer zeitlichen Anordnung validieren.


    Oder gibt es da andere Möglichkeiten?