script editor für Tasmota

  • gemu2015 Jein. Leider wird auch der Wert nach Null nicht übernommen:


    18:07:07 CMD: Dimmer 20

    18:07:07 slider 0.00

    18:07:07 Script: performs "Dimmer 50.00"

    18:07:07 MQT: stat/Esszimmerwandlampe/RESULT = {"POWER":"ON","Dimmer":50}


    oder ist das ein "Folgefehler" von "0" wird nicht übernommen?


    Wäre klassse, wenn Du mal schaust. Ist aber nicht wirklich ein "Problem". Man kann den Wert per Script/mqtt ja einfach zweimal schicken.

    Dank Dir

    BG

  • immer wenn POWER wechselt von ON zu OFF oder umgekehrt wird offensichtlich kein gültiger JSON geschickt.

    in beiden Fällen Dimmer not found.

    wenn dimmer auf 0 gesetzt wird wird Power auch auf 0 gesetzt

    wird dimmer >0 gesetzt wird power auf 1 gesetzt.

  • über Sektion >E kommen 2 Tasmota calls herein.


    FUNC_SET_POWER (kein MQTT JSON)

    FUNC_RULES_PROCESS (MQTT JSON)


    bei Dimmer xx werden beide Calls aktiviert wenn sich dabei POWER ändert, >E wird also 2 mal aufgerufen.


    Habe jetzt die Option eingebaut beide getrennt zu verarbeiten (#define SCRIPT_POWER_SECTION)

    FUNC_SET_POWER >P

    FUNC_RULES_PROCESS >E

  • vielleicht war es ein Denkfehler...


    Ich dacht in der Sektion >T regaiert alles entsprechend im Takt der
    Teleperiode...
    Aber anscheinend wollte er das if dort nicht....

    also so gelöst:




    nun habe ich aber noch eine Frage, ich habe ja schon hinbekommen aus ioBroker eine Variable
    über script zu ändern...


    Ich würde aber gern noch eine Variable aus dem Script als Datenpunkt im ioBroker anlegen und
    den Wert auch entsprechend aus dem Script im ioBroker aktualiseren.

    Also quasi meine varibale Solltemperatur als Datenpunkt im ioBroker beim booten anlegen
    und bei Änderung im ioBroker aktualisieren?!?!?


    Dann noch eine Sache, wie kann ich denn die Einheit eines Datenpunktes ändern?
    beim BME280 wird Luftfeuchtigkeit im ioBroker als °C angelegt und nicht als %

    Danke


    Gruß Jens

  • Hallo Jens,


    >T wird immer alle Teleperiod Sekunden aufgerufen.

    Der Fehler war dass ein Leerzeichen vor der geschweiften Klammer gebraucht wird.


    if temp>=max {

    -> power1

    }

    if temp<=min {

    -> power1 1

    }


    werde mal untersuchen ob man das ändern kann.


    eine script Variable kannst du mit =>publish ... an den broker senden

    oder aber in der >J Sektion eintragen.


    die Unit eines Datenpunktes wird nicht übertragen. (ist bei den meisten Variablen nicht im JSON enthalten)


    nur z.B. bei wenigen wie der Temperatur wird die Variable TempUnit zusätzlich gesendet und ergibt aber eine extra Variable im Broker.


    Es gibt in IObroker bei vordefinierten Variablen aber ein Default unit. Diese vordefinierten Variablen sind in der Datei datapoints.js enthalten.

    diese Datei kannst du editieren und z.B. die Luftfeuchtigkeit mit Unit vordefinieren.


    Wenn IObroker eine JSON Variable in dieser Liste nicht findet wird automatisch (wenn die Häkchen im Setup gesetzt sind) eine Variable diese Namens angelegt aber ohne Unit.


    Gruß Gerhard

  • Moin Zusammen,

    ich habe jetzt den ganzen Thread verfolgt aber ich bin immer noch nicht schlau daraus geworden.

    Ich habe eine Niveaumessung in einem Flüssigkeitsbehälter mit Wasser über ein mh-Sensor (Leitwert).

    Der Analogwert wir von einem D1 mini mit Tasmota 8.1 erfasst und via MQTT an openHAB 2.5 übertragen.


    Leider arbeitet der mh-Sensor mit Gleichspannung und es findet eine Elektrolyse im Wasser statt.

    Die eine Elektrode löst sich allmählich auf.

    Nun möchte ich diese Schädigung minimieren bzw. in die Länge ziehen.


    Meine Idee ist nun den mh-Sensor über einen Digital-Ausgang mit 3.3V zu versorgen, den Analogwert nach ca. 45 Sekunden zu erfassen und dann die Spannungsversorgung des mh-Sensors wieder zu deaktivieren.

    Der gemessene Analogwert soll bis zur nächsten Messung über MQTT (JSON) unverändert abrufbar sein.

    Nach 12 Stunden erfolgt eine neue Messung und die Änderung des Wertes im JSON-Protokoll.

    Dieser Vorgang soll alle 12 Stunden ein mal statt finden.

    NAch dem spannunglos machen soll ebenfalls eine Messung erfolgen.


    Würde mich freuen, wenn jemand mir helfen könnte oder ein Skript besitzt welches ich an meine Bedürfnisse anpassen kann.

    Vielleicht gibt es ja auch schon solch ein Thema und ich war nur zu d... den Thread zu finden.


    Danke und Gruß

    Florian

  • Ich vermute mal, dein Thema ist besser in einem OpenHAB2-Forum aufgehoben. Mit der von OpenHAB verwendete Programmiersprache Java oder Java-Script(?), kannst du vermutlich alles hinbekommen, was du willst. Dein Vorhaben mit Rules abzubilden, dürfte komplizierter sein. Schau mal in die Rules. Trigger, die du sicher brauchst, sind (im Groben): onboot, ruletimer. Unklar ist was du mit folgendem meinst:

    NAch dem spannunglos machen soll ebenfalls eine Messung erfolgen.

    Wie soll das gehen? Ohne Strom nichts los...

  • Hi,


    das ginge auch über ne normale Rule, also nicht den Scripteditor.


    mit dem Trigger time#minute=xxx, einmal täglich eine Rule ausführen,

    die einen GPIO einschaltet der dann die Spannung 3,3V (high) für den Sensor liefert; den Messwert in einen MEM1 (dauerhaft) schreibt und den GPIO wieder deaktiviert.


    Der Wert vom MEM1 wird ja dann mit dem Status immer brav mit übermittelt und kann da ausgewertet werdem


    Was allerdings der Sensor macht, der vermutlich am I2C Bus hängt, und ob da vom I2C auch ohne Spannungsversorgung noch Potentiale anliegen ... k.A.

    Füllstandmessungen machen deshalb andere z.B. über Schallsensoren.


    Füllstand Öl Tank messen


    EDIT:

    Kann natürlich sein das der GPIO selbst zu wenig Saft für den Sensor liefert. Da müsstest dann noch nen Transistor als Schalter dazwischen hängen um VCC auf den Sensor durchzuschalten.

    Online Compiler


    Sonoff-Basic / Sonoff-RF / Sonoff-Touch / Sonoff S20 / PowStro Basic / HomeMagic / Sonoff-RF-Bridge mit diversen 433MHz RF Sender/Empfänger / Shelly_1 / ESP-WiFi-Dimmer / Gosund SP111 / ESP12E

    Sensoren: BME280/BMP280/HC-SR501/HC-SR04/ACS712

    mosquitto/bash/html/cgi auf RPI 2B+/Sprachsteuerung via IFTTT/4xGoogle-Home-Mini

  • Moin Zusammen,


    sorry für meine verspätete Antwort. War ein paar Tage im Urlaub und dieser wurde durch den Sandsturm auf den Kanaren "zwangsverlängert".


    NAch dem spannunglos machen soll ebenfalls eine Messung erfolgen.

    Soll heißen:

    Nach dem Reboot des D1 mini durch z.B. Stromausfall soll die Messung sofort erfolgen da der Messwert über MQTT nicht mehr zur verfügung steht.

    ...ist echt doof formuliert.


    Der Sensor hängt nur an ser Spannungsversorgung und liefert einen Analogwert an den Eingang A0 (kein I2C Bus).

    Hab ihn jetzt an GPIO16 (D0) hängen, die Stromversorgung über den Digitalausgang reicht für den MH-Sensor und die Messung aus.

    Werde jetzt den Ansatz von JoergZ verfolgen und die Messung über OpenHab initialisieren.

    Ich benutze die Füllstandsmessung übrigens auf einem Höhenunterschied von etwa 7 cm und denke das dieser Abstand für eine Messung via Ultraschall zu klein bzw. zu ungenau seien dürfte.

    Das Gerät befeuchtet das Innere unseres Klaviers da das Holz immer eine Mindestfeuchte haben muss und diese kann man bei einer Fußbodenheizung und in modernen Häusern leider nicht sich selbst überlassen.


    Danke in die Runde und Gruß

    Florian

  • War ein paar Tage im Urlaub und dieser wurde durch den Sandsturm auf den Kanaren "zwangsverlängert".

    Hoffentlich kein Corona mitgebracht (ich meine nicht die Flaschen!) :D:D:D

  • Hallo


    ich habe die deutsche Version der 8.1.0 drauf und find den Eintrag jedoch nicht :)

  • Danke Dir.


    ich habe mich mal dran probiert und folgende Anleitung genutzt:


    https://github.com/arendst/Tas…e-your-own-Firmware-Build


    Hierbei bekomme ich bis auf die minimal.bin immer ein failed nach dem Kompilieren.

    Was ich Logfenster unten sehe ist:

    Unicode decode error has occurred, please remove invalid (non-ASCII or non-UTF8) characters from /Users/***/Tasmota-development/tasmota/tasmot

    a.ino.cpp file


    Ich mache es unter MacOS X, falls das relevant ist.


    Ich weiss, dass das nicht aussagekräftig ist, aber ich stelle auch gerne ein Log ein, wenn mir jemand sagt, wo

    es zu finden ist.


    Danke

  • Hey Hberger,


    ich mache das immer mit dem online Compiler, damit hatte ich noch nie Probleme.


    https://gitpod.io/#https://git…m/benzino77/tasmocompiler


    Gruß

    Stefan

  • Hallo Leute,


    irgendwie verstehe ich das mit dem Script nicht :rolleyes:

    Ich versuche schon ewig was ganz einfaches, ich bekomme es aber irgendwie nicht hin.

    Gibt es irgendwo eine gute Anleitung zum lesen, die Tasmota Wiki habe ich schon durch, damit bekomme ich es leider nicht hin.


    Ich habe einen Zähler, der bei einem bestimmten Wert ein Relais schalten soll.


    >D

    if C1>5{

    then power 1

    }

    endif

    >D


    Gruß

    Stefan

  • Stefan W


    Du solltest dir die Beispiele in den Tasmota Docs ansehen.


    hier nur für den Anfang ein ganz kleines Beispiel.


    in der >D Sektion werden nur Variablen definiert, und es dürfen keine Befehle hier stehen.

    Werte aus Tasmota kannst du z.B. über die >T Sektion einlesen (tele)

    Dann kannst du z.B. jede Sekunde prüfen ob ein Wert überschritten wurde


    >D

    ; hier werden nur Variablen definiert

    counter=0


    >T

    ; hier werden MQTT Befehle ausgelesen COUNTER C1 ist der JSON Wert des 1. Zählers

    ; hier unbedingt auf Groß Kleinschrift achten, muss so sein wie in der MQTT Ausgabe

    counter=COUNTER#C1


    >S

    ; wird jede Sekunde aufgerufen

    ; hat sich counter geändert ?

    if chg[counter]>0

    then

    ; ja hat er, vergleiche mit Wert

    if counter>5

    then

    ; relais einschalten

    =>power1 1

    endif

    endif


    Grüße