Tasmota Script MCP23017

  • Hallo,

    ich brauche leider immer noch hilfe und ich hoffe hier finde ich etwas Unterstützung.

    Und zwar habe ich an einen SONOFF 4CH einen MCP23017 (Portexpander) angehängt. Diesen kann ich auch super bedienen. Mein Problem ist jedoch, diesen MCP nicht über die RULES sondern über das Scripting, welches für meine weiteren Zwecke erforderlich ist zu verwenden.

    Problem ist jedoch, dass es mit dem Scripting so nicht einfach funktioniert. Hat jemand mal ein Beispiel, wie er über Scripting einen MCP Port ausließt?

    Diese Versuche wie oben funktionieren nämlich nicht.

    Freue mich auf eure Unterstützung.

    Gruß

    Steffen

  • Hi,

    Alle Befehle an Tasmota müssen z.B. mit -> beginnen, also auch LedPower1 und power0

    Du solltest dir angewöhnen dir die fraglichen Variablen direkt anzeigen zu lassen

    z.B. in

    >T

    MCP0=MCP230XX#D0

    MCP1=MCP230XX#D1

    print %MCP0% %MCP1%

    kenne mich nicht mit dem MCP aus aber ich

    denke eigentlich dass der Portexpander in >E abgefragt werden sollte.

    vielleicht musst den Modus auch erst konfigurieren

    bevor du keine Reaktion bekommst brauchst nichts anderes zu probieren.

    Dazu musst du dir ansehen welche JSON strings Tasmota in der Konsole ausgibt.

    RESULT oder STATUS wird in >E abgefragt

    TELE in >T

    und p: Variablen machen übrigens hier gar keinen Sinn.

    Gruss Gerhard

  • Hallo Gerhard,

    danke schon einmal für deine Antwort. Leider kam ich erst jetzt dazu, da ich einiges um die Ohren hatte. Aber ich gebe bekanntlich erst auf, wenn das Gerät kaputt ist :D

    Also ich habe mir die Sache noch mal angeschaut und folgendes herausgefunden.

    Wenn ich nichts im Skript stehen habe sieht der LOG wie folgt aus:

    Code
    21:10:52 MQT: stat/test/RESULT = {"Time":"2020-11-15T21:10:52","MCP230XX_INT":{"D0":0,"MS":7866}}
    21:10:52 MQT: tele/test/SENSOR = {"Time":"2020-11-15T21:10:52","MCP230XX":{"D0":0,"D1":1,"D2":1,"D3":1,"D4":1,"D5":1,"D6":1,"D7":1,"D8":0,"D9":0,"D10":0,"D11":0,"D12":0,"D13":0,"D14":0,"D15":0}}
    21:10:52 MQT: stat/test/RESULT = {"Command":"Unknown"}
    21:10:52 MQT: stat/test/RESULT = {"Time":"2020-11-15T21:10:52","MCP230XX_INT":{"D0":1,"MS":229}}
    21:10:52 MQT: tele/test/SENSOR = {"Time":"2020-11-15T21:10:52","MCP230XX":{"D0":1,"D1":1,"D2":0,"D3":0,"D4":0,"D5":0,"D6":0,"D7":0,"D8":0,"D9":0,"D10":0,"D11":0,"D12":0,"D13":0,"D14":0,"D15":0}}
    21:10:52 MQT: stat/test/RESULT = {"Command":"Unknown"}

    Woher die "Unknown" Befehle kommen, kann ich leider nicht erklären. Da ich eigentlich nichts verwurschtelt habe.

    Demnach sollte ich ja bei STATUS die Abfrage in >E herauskriegen. Nur wie kriege ich es dann richtig hin?

    Also habe ich das Skript wie folgt aufgebaut:

    Code
    >D
    p:MCP0=0
    p:MCP1=0
    >E
    MCP0=MCP230XX#D0
    MCP1=MCP230XX#D1
    print MCP0=%MCP0% MCP1=%MCP1%

    Ergebnis:

    Code
    21:17:19 MQT: stat/test/RESULT = {"Time":"2020-11-15T21:17:19","MCP230XX_INT":{"D0":0,"MS":18849}}
    21:17:19 MQT: tele/test/SENSOR = {"Time":"2020-11-15T21:17:19","MCP230XX":{"D0":0,"D1":1,"D2":0,"D3":0,"D4":0,"D5":0,"D6":0,"D7":0,"D8":0,"D9":0,"D10":0,"D11":0,"D12":0,"D13":0,"D14":0,"D15":0}}
    21:17:19 MCP0=0.00 MCP1=1.00
    21:17:19 MQT: stat/test/RESULT = {"Command":"Unknown"}
    21:17:19 MCP0=0.00 MCP1=1.00
    21:17:19 MQT: stat/test/RESULT = {"Time":"2020-11-15T21:17:19","MCP230XX_INT":{"D0":1,"MS":156}}
    21:17:19 MQT: tele/test/SENSOR = {"Time":"2020-11-15T21:17:19","MCP230XX":{"D0":1,"D1":1,"D2":0,"D3":0,"D4":0,"D5":0,"D6":0,"D7":0,"D8":0,"D9":0,"D10":0,"D11":0,"D12":0,"D13":0,"D14":0,"D15":0}}
    21:17:19 MCP0=1.00 MCP1=1.00
    21:17:19 MQT: stat/test/RESULT = {"Command":"Unknown"}
    21:17:19 MCP0=1.00 MCP1=1.00

    Ergebnis ist ja schon mal toll. ABER warum erfolgt 2x die Zeile

    Code
    21:17:19 MCP0=1.00 MCP1=1.00

    Daraus schließe ich, dass ich im Vorfeld schon immer diese doppelten "Ergebnisse" hatte, was zu Fehlern führte.

    Aber auch schon die einfachste IF Abfrage scheitert total:

    Code
    21:55:29 Power ist aus
    21:55:29 Power ist an
    21:55:29 MQT: tele/test/STATE = {"Time":"2020-11-15T21:55:29","Uptime":"0T00:00:11","UptimeSec":11,"Heap":23,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":34,"MqttCount":1,"POWER1":"ON","POWER2":"ON","POWER3":"OFF","POWER4":"OFF","POWER5":"OFF","Wifi":{"AP":1,"SSId":"XXX","BSSId":"44:4E:6D:D5:77:EF","Channel":11,"RSSI":78,"Signal":-61,"LinkCount":1,"Downtime":"0T00:00:03"}}
    21:55:29 MQT: stat/test/RESULT = {"POWER2":"ON"}
    21:55:29 MQT: stat/test/POWER2 = ON
    21:55:33 Power ist an
    21:55:33 Power ist aus
    21:55:33 MQT: tele/test/STATE = {"Time":"2020-11-15T21:55:33","Uptime":"0T00:00:15","UptimeSec":15,"Heap":23,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"POWER1":"ON","POWER2":"OFF","POWER3":"OFF","POWER4":"OFF","POWER5":"OFF","Wifi":{"AP":1,"SSId":"XXX","BSSId":"44:4E:6D:D5:77:EF","Channel":11,"RSSI":74,"Signal":-63,"LinkCount":1,"Downtime":"0T00:00:03"}}
    21:55:33 MQT: stat/test/RESULT = {"POWER2":"OFF"}
    21:55:33 MQT: stat/test/POWER2 = OFF

    Warum spuckt der immer "Power ist an", "Power ist aus" hintereinander aus. Dürfte er ja nicht. Er scheint das nicht zu checken. Dieses Ergebnis mit den AN/AUS Werten habe ich nur, wenn ich die Hardware-Buttons nehme. Per Software Steuerung ist der LOG sauber....! Warum?

    Würde mich freuen, wenn ich wieder etwas von euch höre.

    Gruß und schönen Abend

    Steffen

    2 Mal editiert, zuletzt von eingabe (15. November 2020 um 22:03)

  • hab das gerade nachgeprüft .

    >E wird bei Hardwareknopf einmal vor dem Ergebnis und einmal nach dem Ergebnis aufgerufen. Strange!

    eigentlich ein Tasmota Bug

    du nimmst besser die >P section für POWER

    #define SCRIPT_POWER_SECTION

    dort geht es richtig

    dein MCP kommt aber nur in >E an

  • Hallo Gerhard,

    bevor ich mir jetzt die neuste Version wieder zusammenstelle und neu flashe. Heißt es, es ich kann den MCP gar nicht in der Powersection nutzen?

    Und kann man diesen BUG irgendwo melden, damit er gefixt wird? Wenn ja, wie und wo?

    Gruß

    Steffen