script editor für Tasmota

  • erstmal danke an euch beide für eure antworten.


    Ich habe mich mit beiden Scripten mal beschäftigt und habe das von eth auch verstanden denk ich


    aber das von gemu2015 da steige ich nicht ganz dran lang ich versuche das mal mit meinen Worten zu kommentieren vieleicht verstehe ich das auch nur verkehrt


    Sorry sollte ich etwas durcheinander gebracht haben aber ich versuche das zu verstehen.


    achso so wie das script hier steht funktioniert es allerdings nicht wenn ich das starte bekomme ich lediglich die reaktion das der Wemos 5 mal neustartet und das script wieder deaktiviert ist :/

  • sorry MexadOn, habe das mit meinen WS2812 mit 60s Led getestet und da funktioniert es . habe dann einfach die 60 durch 151 ersetzt. leider darf ein Array aber nur 127 Werte maximal haben. Werde mir mal überlegen ob ich das in Scripter modifizieren kann.

  • Naja ich habe ja auch "nur" 106 Pixel

    Der ws2811 ist ein Pixel = 3

    Habe ich das Script wenigsten so etwa richtig verstanden?


    EDIT:


    Ich habe gerade versucht die LED anzahl auf 60 zu setzen und bekomme wie sinst auch den fehler das der Wemos neu startet und das war es dann hier mal was im Serial monitor amgezeigt wird.


    vieleicht hilft das ja?


    was ich auch noch nicht gefunden habe ist wo wird der stripe im script an gemacht? (Power2 ON)


    das sehe ich irgendwie nicht

  • ok 106 pixel muss gehen.


    schalte mal die Zeile aus indem du ein Semikolon davor setzt.


    ;ws2812(array)


    gibt es dann immer noch einen Absturz?


    hats du eigentlich die neueste Version von Tasmota geladen?


    die WS2812 Unterstützung ist erst seit kurzem drin.

  • Also wenn ich


    ;ws2812(array) mache und den rest so wie es ist bekomme ich den selben effekt, neustart


    ich habe tasmota 6.6.0 Core 2.4.2 geflasht


    vieleicht sind meine einstellungen ja auch interessant?


    Generic (18)


    D4 GPIO2 ----- WS2812 (7)


    D2 GPIO4 ----- Switch1 (9)

    D1 GPIO4 ----- Relay1 (21)


    ich habe im moment einen Taster zu testzwecke angeschlossen aber dort soll final dann ein bewegungsmelder dran der bereits im einsatz ist an einem anderem Wemos


    EDIT:



    EDIT EDIT:


    Ich habe nun nochmal alles neu gemacht und wenn ich das WS2812(array) auskommentiere bekomme ich kein absturz aber auch keine reaktion als wenn script nicht aktiv ist :/

  • Hi Mexad0n

    ein paar Fragen kannst Du Dir selber beantworten, wenn Du die Doku liest. Wie gesagt: zum eigentlichen Problem mit dem WSxxx kann ich nichts beitragen, ich mache aber mal ein paar Anmerkungen zu den allgemeinen Dingen und lasse das andere weg:


    m:array=0 106 ; array mit 106 RGB Werten ; was sagt hier am anfang die 0 spricht ein array von 0 bis 106

    -> 106 Einträge, Initialisierung mit 0; Arrays sind eigentlich "missbrauchte" median Filter (siehe Doku)


    cnt=0 ; Variable für die For Next schleife?

    -> ja, Variablen kann man so einfach vorbelegen.


    =#prep ; Was genau hat das zu sagen und ist das = wichtig?

    ->ist der Aufruf eines sub, also er Aufruf einer Funktion/Procedure/.. (siehe Doku: #name names a subroutine, subroutines are called with =#name)


    ; nur wenn licht aus ist

    if pwr[1]==0 ; Power1 = 0 (Switch1 = aus)?

    -> ja (siehe Doku Special variables)


    #prep ; hier wieder prep was heist das und warum kein = vorne weg?

    -> weil es die Definition der Funktion von oben ist (siehe oben)


    for cnt 1 pixels 1 ; for next schlöeife kenne ich so: For cnt 1 to 10 oder so ähnlich wieso hier mit pixel 1?

    ->die letzte 1 ist das Increment, (siehe Doku), ist auch nicht ungewöhnlich.


    if cnt%steps==0 ; wenn cnt%step = 0 dann führe aus

    -> ja, (siehe Doku Comparison operators)



    >R ; Warum hier die reboot funktion?

    kann sicher entfallen, passiert sowieso nix, weil nix drin steht.


    Verliere den Spass nicht!

  • Hi, ich muss jetzt auch mal was loswerden. Tolle Arbeit von gemu2015 das mit dem Scripten war höchste Zeit ;)


    Nur mit dem Subscribe komme ich nicht so ganz klar.

    Ich habe mir die HTTP-Ausgabe im xdrv_01_webserver.ino aktiviert und würde die Antworten gerne auslesen.

    Die Antwort kommt auch ganz fein in der Konsole an als:

    Code
    1. 11:14:20 CMD: websend [192.168.142.150]/cm?cmnd=status%208
    2. 11:14:20 SRC: WebConsole from 192.168.142.153
    3. 11:14:20 CMD: Group 0, Index 1, Command "WEBSEND", Data "[192.168.142.150]/cm?cmnd=status%208"
    4. 11:14:21 RSL: stat/sonoff/RESULT = {"StatusSNS":{"Time":"2019-08-16T11:14:21","Epoch":1565950461,"SI7021":{"Temperature":21.4,"Humidity":64.4},"TempUnit":"C"}}
    5. 11:14:21 RSL: stat/sonoff/RESULT = {"WebSend":"Done"}

    (ich frage einen anderen ESP ab)


    Nur irgendwie kommt mir das Ergebnis (ich versuche es für den Anfang mal mit "TempUnit") nicht in die Variable rein.

    Mache ich was falsch oder ist da ein Fehler im System?

    Code
    1. >D
    2. HTTPR=""
    3. >B
    4. =>subscribe HTTPR, stat/%topic%/RESULT,StatusSNS.TempUnit
    5. >E
    6. =>print e:%HTTPR%
  • Ich hab's mit dem Displays Branch in Deinem Rep probiert (oder meintest Du eine andere Source?)


    Seltsam ist, dass auch der numerische Wert nicht kommt:

    Code
    1. >D
    2. TU=""
    3. TMP=0
    4. >B
    5. =>subscribe TU, stat/%topic%/RESULT,StatusSNS.TempUnit
    6. =>subscribe TMP, stat/%topic%/RESULT,StatusSNS.SI7021.Temperature
    7. >E
    8. =>print e:%TMP%:%TU%:
  • Hallo Kaennchen,

    ich würde zunächst mal das Subscribe in den >S Abschnitt nehmen. Boote mal das Gerät neu und schaue Dir die Konsole an: das Subscribe wird schon ausgelöst, wenn noch gar keine MQTT Verbindung steht. Wird dann auch immer beim Reconnect ausgelöst.


    >S

    if mqttc>0 (passiert nur beim Connect)

    then

    =>Subscribe....

    endif


    Gemüse meint die DEV-Version vom arendst/tasmota, da ist die Änderung drin, die neben den Numerischen Werten nun auch die Textwerte zurückliefert.

    Viel Spass!

  • der aktuelle branch ist universal7 (aber den display branch hast du sicher nicht genommen, der hatte noch keine scripts)


    leider unterstützt aber der subscribe nur einen Key mit einem Punkt. (den Teil hatte ich aus rules übernommen)

    Danke für die schnelle Antwort, jetzt bin ich komplett verwirrt ;)

    Hier hab ich die Sources her: https://github.com/gemu2015/Sonoff-Tasmota/tree/displays

    (benötige den ST1106-Treiber, deshalb nutze ich deinen Fork)


    Code
    1. Generic Module
    2. Sonoff
    3. Program Version 6.6.0.3(display)
    4. Build Date & Time 2019-08-16T12:31:38
    5. Core/SDK Version 2_5_2/2.2.2-dev(c0eb301)



    Der universal7 kompiliert bei mir nicht für den ESP-01 mit irgendwelchen Fehlern - kann gleich nochmal nachsehen.


    Kann ich deinen Fork irgendwie mit den Fixes in Theos Tree zusammenbringen? Oder hast Du das ohnehin geplant?

  • Danke für die Infos. Ich nutze MQTT ja (eignetlich) nicht. Ich möchte nur das Ergebnis (genauer: die Antwort) eines WebSend auswerten. Trifft das dann auch noch zu?

  • Danke für die Infos. Ich nutze MQTT ja (eignetlich) nicht. Ich möchte nur das Ergebnis (genauer: die Antwort) eines WebSend auswerten. Trifft das dann auch noch zu?

    Ich würde mal sagen jein. Beides hat ja erstmal nichts miteinander zu tun. Wenn Du was subscribest wird das Datum vom Broker zugestellt. Der Broker muss das Datum natürlich vorher bekommen haben, durch ein publish. Das wird ja vom Tasmota für die "eingebauten" Sensoren von selbst erledigt. Hier gab es auch das Problemchen, dass empfangene Texte nicht richtig umgesetzt wurden.


    Websend braucht gar kein MQTT. Du könntest vom Sender ein Datum einfach mit


    websend [192.168.x.xxx] script >varimempfänger=%varimsender%


    in die Variable in einem Script übertragen. (Oder andere Kommandos ausführen, wie Du es mit websend [192.168.142.150]/cm?cmnd=status%208 ja gemacht hast. Das Ergebnis hier ist, dass die Werte der lokales Sensoren an den Broker geschickt werden.)

    Das fette ist letztendlich ein Scriptbefehl, den Du auch auf der Konsole eintippen kannst (musst natürlich %varimsender% durch einen Wert substituieren).

    Ob das ankommt usw. ist natürlich nicht klar.


    Zu den Quellen: das Problemchen ist in der xddx_10_scripter.ino von heute morgen gelöst. Zur Not kopierst Du Dir die in Deine lokale Installation (und hoffst dass der Compiler das gut findet..).




  • Das hatte ich schon probiert, ich möchte aber die Variable vom zweiten ESP holen, nicht dass mir der zweite ESP sie pusht.


    Aktuell versuche ich das zu realisieren, indem ich dem ersten ESP sage, er soll den zweiten anweisen, ihm die Info zu schicken.


    Ich hänge gerade daran fest, dass ich Code nicht dynamisch ausführen kann.

    Beispielconfig:

    Code
    1. >D 50
    2. tt=""
    3. gtst=11
    4. >B
    5. tt="print test1:%gtst%"
    6. =>print tt:%tt%
    7. =>%tt%
    8. =>print test2:%gtst%

    (ich poste gerne den kompletten Code, sobald ich es hinbekommen habe)


    Anstatt dem Erwarteten kommt allerdings:

    Code
    1. 13:21:34 tt:print test1:%gtst%
    2. 13:21:34 test1:%gtst%
    3. 13:21:34 test2:11.00

    Mache ich was falsch oder liegt der Fehler im System?


    LG Kaennchen

  • Wenn ich gerade dabei bin ;)


    Mir ist aufgefallen, dass SUBs wohl nur innerhalb des Skriptes gelten, Variablen aber auch global, von der Konsole aus zugegriffen werden können.

    Lässt sich das anpassen? So dass ich eine SUB auch von der Konsole aus (und natürlich per Web/MQTT call) aufrufen kann?


    Danke & LG Kaennchen